diff --git a/src/conversejs/converse.js b/src/conversejs/converse.js
index 9d0d385a735f3d5b64ed31cb7e82c7a7b076826e..eb8c25f4cba4933768dc58a05f1010685b052f2a 100644
--- a/src/conversejs/converse.js
+++ b/src/conversejs/converse.js
@@ -36,14 +36,14 @@
 /******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
 /******/ 	// Promise = chunk loading, 0 = chunk loaded
 /******/ 	var installedChunks = {
-/******/ 		177: 0
+/******/ 		178: 0
 /******/ 	};
 /******/
 /******/
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({"0":"locales/dayjs/af","1":"locales/dayjs/ar","2":"locales/dayjs/ar-dz","3":"locales/dayjs/ar-kw","4":"locales/dayjs/ar-ly","5":"locales/dayjs/ar-ma","6":"locales/dayjs/ar-sa","7":"locales/dayjs/ar-tn","8":"locales/dayjs/az","9":"locales/dayjs/be","10":"locales/dayjs/bg","11":"locales/dayjs/bi","12":"locales/dayjs/bm","13":"locales/dayjs/bn","14":"locales/dayjs/bo","15":"locales/dayjs/br","16":"locales/dayjs/bs","17":"locales/dayjs/ca","18":"locales/dayjs/cs","19":"locales/dayjs/cv","20":"locales/dayjs/cy","21":"locales/dayjs/da","22":"locales/dayjs/de","23":"locales/dayjs/de-at","24":"locales/dayjs/de-ch","25":"locales/dayjs/dv","26":"locales/dayjs/el","27":"locales/dayjs/en","28":"locales/dayjs/en-SG","29":"locales/dayjs/en-au","30":"locales/dayjs/en-ca","31":"locales/dayjs/en-gb","32":"locales/dayjs/en-ie","33":"locales/dayjs/en-il","34":"locales/dayjs/en-in","35":"locales/dayjs/en-nz","36":"locales/dayjs/en-tt","37":"locales/dayjs/eo","38":"locales/dayjs/es","39":"locales/dayjs/es-do","40":"locales/dayjs/es-pr","41":"locales/dayjs/es-us","42":"locales/dayjs/et","43":"locales/dayjs/eu","44":"locales/dayjs/fa","45":"locales/dayjs/fi","46":"locales/dayjs/fo","47":"locales/dayjs/fr","48":"locales/dayjs/fr-ca","49":"locales/dayjs/fr-ch","50":"locales/dayjs/fy","51":"locales/dayjs/ga","52":"locales/dayjs/gd","53":"locales/dayjs/gl","54":"locales/dayjs/gom-latn","55":"locales/dayjs/gu","56":"locales/dayjs/he","57":"locales/dayjs/hi","58":"locales/dayjs/hr","59":"locales/dayjs/ht","60":"locales/dayjs/hu","61":"locales/dayjs/hy-am","62":"locales/dayjs/id","63":"locales/dayjs/is","64":"locales/dayjs/it","65":"locales/dayjs/it-ch","66":"locales/dayjs/ja","67":"locales/dayjs/jv","68":"locales/dayjs/ka","69":"locales/dayjs/kk","70":"locales/dayjs/km","71":"locales/dayjs/kn","72":"locales/dayjs/ko","73":"locales/dayjs/ku","74":"locales/dayjs/ky","75":"locales/dayjs/lb","76":"locales/dayjs/lo","77":"locales/dayjs/lt","78":"locales/dayjs/lv","79":"locales/dayjs/me","80":"locales/dayjs/mi","81":"locales/dayjs/mk","82":"locales/dayjs/ml","83":"locales/dayjs/mn","84":"locales/dayjs/mr","85":"locales/dayjs/ms","86":"locales/dayjs/ms-my","87":"locales/dayjs/mt","88":"locales/dayjs/my","89":"locales/dayjs/nb","90":"locales/dayjs/ne","91":"locales/dayjs/nl","92":"locales/dayjs/nl-be","93":"locales/dayjs/nn","94":"locales/dayjs/oc-lnc","95":"locales/dayjs/pa-in","96":"locales/dayjs/pl","97":"locales/dayjs/pt","98":"locales/dayjs/pt-br","99":"locales/dayjs/ro","100":"locales/dayjs/ru","101":"locales/dayjs/rw","102":"locales/dayjs/sd","103":"locales/dayjs/se","104":"locales/dayjs/si","105":"locales/dayjs/sk","106":"locales/dayjs/sl","107":"locales/dayjs/sq","108":"locales/dayjs/sr","109":"locales/dayjs/sr-cyrl","110":"locales/dayjs/ss","111":"locales/dayjs/sv","112":"locales/dayjs/sw","113":"locales/dayjs/ta","114":"locales/dayjs/te","115":"locales/dayjs/tet","116":"locales/dayjs/tg","117":"locales/dayjs/th","118":"locales/dayjs/tk","119":"locales/dayjs/tl-ph","120":"locales/dayjs/tlh","121":"locales/dayjs/tr","122":"locales/dayjs/tzl","123":"locales/dayjs/tzm","124":"locales/dayjs/tzm-latn","125":"locales/dayjs/ug-cn","126":"locales/dayjs/uk","127":"locales/dayjs/ur","128":"locales/dayjs/uz","129":"locales/dayjs/uz-latn","130":"locales/dayjs/vi","131":"locales/dayjs/x-pseudo","132":"locales/dayjs/yo","133":"locales/dayjs/zh","134":"locales/dayjs/zh-cn","135":"locales/dayjs/zh-hk","136":"locales/dayjs/zh-tw","137":"emojis","138":"icons","139":"locales/af-LC_MESSAGES-converse-po","140":"locales/ar-LC_MESSAGES-converse-po","141":"locales/bg-LC_MESSAGES-converse-po","142":"locales/ca-LC_MESSAGES-converse-po","143":"locales/cs-LC_MESSAGES-converse-po","144":"locales/da-LC_MESSAGES-converse-po","145":"locales/dayjs/index-d-ts","146":"locales/dayjs/types-d-ts","147":"locales/de-LC_MESSAGES-converse-po","148":"locales/eo-LC_MESSAGES-converse-po","149":"locales/es-LC_MESSAGES-converse-po","150":"locales/eu-LC_MESSAGES-converse-po","151":"locales/fi-LC_MESSAGES-converse-po","152":"locales/fr-LC_MESSAGES-converse-po","153":"locales/gl-LC_MESSAGES-converse-po","154":"locales/he-LC_MESSAGES-converse-po","155":"locales/hi-LC_MESSAGES-converse-po","156":"locales/hu-LC_MESSAGES-converse-po","157":"locales/id-LC_MESSAGES-converse-po","158":"locales/it-LC_MESSAGES-converse-po","159":"locales/ja-LC_MESSAGES-converse-po","160":"locales/lt-LC_MESSAGES-converse-po","161":"locales/mr-LC_MESSAGES-converse-po","162":"locales/nb-LC_MESSAGES-converse-po","163":"locales/nl-LC_MESSAGES-converse-po","164":"locales/nl_BE-LC_MESSAGES-converse-po","165":"locales/oc-LC_MESSAGES-converse-po","166":"locales/pl-LC_MESSAGES-converse-po","167":"locales/pt-LC_MESSAGES-converse-po","168":"locales/pt_BR-LC_MESSAGES-converse-po","169":"locales/ro-LC_MESSAGES-converse-po","170":"locales/ru-LC_MESSAGES-converse-po","171":"locales/th-LC_MESSAGES-converse-po","172":"locales/tr-LC_MESSAGES-converse-po","173":"locales/uk-LC_MESSAGES-converse-po","174":"locales/vi-LC_MESSAGES-converse-po","175":"locales/zh_CN-LC_MESSAGES-converse-po","176":"locales/zh_TW-LC_MESSAGES-converse-po"}[chunkId]||chunkId) + ".js"
+/******/ 		return __webpack_require__.p + "" + ({"0":"locales/dayjs/af","1":"locales/dayjs/ar","2":"locales/dayjs/ar-dz","3":"locales/dayjs/ar-kw","4":"locales/dayjs/ar-ly","5":"locales/dayjs/ar-ma","6":"locales/dayjs/ar-sa","7":"locales/dayjs/ar-tn","8":"locales/dayjs/az","9":"locales/dayjs/be","10":"locales/dayjs/bg","11":"locales/dayjs/bi","12":"locales/dayjs/bm","13":"locales/dayjs/bn","14":"locales/dayjs/bo","15":"locales/dayjs/br","16":"locales/dayjs/bs","17":"locales/dayjs/ca","18":"locales/dayjs/cs","19":"locales/dayjs/cv","20":"locales/dayjs/cy","21":"locales/dayjs/da","22":"locales/dayjs/de","23":"locales/dayjs/de-at","24":"locales/dayjs/de-ch","25":"locales/dayjs/dv","26":"locales/dayjs/el","27":"locales/dayjs/en","28":"locales/dayjs/en-SG","29":"locales/dayjs/en-au","30":"locales/dayjs/en-ca","31":"locales/dayjs/en-gb","32":"locales/dayjs/en-ie","33":"locales/dayjs/en-il","34":"locales/dayjs/en-in","35":"locales/dayjs/en-nz","36":"locales/dayjs/en-tt","37":"locales/dayjs/eo","38":"locales/dayjs/es","39":"locales/dayjs/es-do","40":"locales/dayjs/es-pr","41":"locales/dayjs/es-us","42":"locales/dayjs/et","43":"locales/dayjs/eu","44":"locales/dayjs/fa","45":"locales/dayjs/fi","46":"locales/dayjs/fo","47":"locales/dayjs/fr","48":"locales/dayjs/fr-ca","49":"locales/dayjs/fr-ch","50":"locales/dayjs/fy","51":"locales/dayjs/ga","52":"locales/dayjs/gd","53":"locales/dayjs/gl","54":"locales/dayjs/gom-latn","55":"locales/dayjs/gu","56":"locales/dayjs/he","57":"locales/dayjs/hi","58":"locales/dayjs/hr","59":"locales/dayjs/ht","60":"locales/dayjs/hu","61":"locales/dayjs/hy-am","62":"locales/dayjs/id","63":"locales/dayjs/is","64":"locales/dayjs/it","65":"locales/dayjs/it-ch","66":"locales/dayjs/ja","67":"locales/dayjs/jv","68":"locales/dayjs/ka","69":"locales/dayjs/kk","70":"locales/dayjs/km","71":"locales/dayjs/kn","72":"locales/dayjs/ko","73":"locales/dayjs/ku","74":"locales/dayjs/ky","75":"locales/dayjs/lb","76":"locales/dayjs/lo","77":"locales/dayjs/lt","78":"locales/dayjs/lv","79":"locales/dayjs/me","80":"locales/dayjs/mi","81":"locales/dayjs/mk","82":"locales/dayjs/ml","83":"locales/dayjs/mn","84":"locales/dayjs/mr","85":"locales/dayjs/ms","86":"locales/dayjs/ms-my","87":"locales/dayjs/mt","88":"locales/dayjs/my","89":"locales/dayjs/nb","90":"locales/dayjs/ne","91":"locales/dayjs/nl","92":"locales/dayjs/nl-be","93":"locales/dayjs/nn","94":"locales/dayjs/oc-lnc","95":"locales/dayjs/pa-in","96":"locales/dayjs/pl","97":"locales/dayjs/pt","98":"locales/dayjs/pt-br","99":"locales/dayjs/ro","100":"locales/dayjs/ru","101":"locales/dayjs/rw","102":"locales/dayjs/sd","103":"locales/dayjs/se","104":"locales/dayjs/si","105":"locales/dayjs/sk","106":"locales/dayjs/sl","107":"locales/dayjs/sq","108":"locales/dayjs/sr","109":"locales/dayjs/sr-cyrl","110":"locales/dayjs/ss","111":"locales/dayjs/sv","112":"locales/dayjs/sw","113":"locales/dayjs/ta","114":"locales/dayjs/te","115":"locales/dayjs/tet","116":"locales/dayjs/tg","117":"locales/dayjs/th","118":"locales/dayjs/tk","119":"locales/dayjs/tl-ph","120":"locales/dayjs/tlh","121":"locales/dayjs/tr","122":"locales/dayjs/tzl","123":"locales/dayjs/tzm","124":"locales/dayjs/tzm-latn","125":"locales/dayjs/ug-cn","126":"locales/dayjs/uk","127":"locales/dayjs/ur","128":"locales/dayjs/uz","129":"locales/dayjs/uz-latn","130":"locales/dayjs/vi","131":"locales/dayjs/x-pseudo","132":"locales/dayjs/yo","133":"locales/dayjs/zh","134":"locales/dayjs/zh-cn","135":"locales/dayjs/zh-hk","136":"locales/dayjs/zh-tw","137":"emojis","138":"icons","139":"locales/af-LC_MESSAGES-converse-po","140":"locales/ar-LC_MESSAGES-converse-po","141":"locales/bg-LC_MESSAGES-converse-po","142":"locales/ca-LC_MESSAGES-converse-po","143":"locales/cs-LC_MESSAGES-converse-po","144":"locales/da-LC_MESSAGES-converse-po","145":"locales/dayjs/index-d-ts","146":"locales/dayjs/types-d-ts","147":"locales/de-LC_MESSAGES-converse-po","148":"locales/eo-LC_MESSAGES-converse-po","149":"locales/es-LC_MESSAGES-converse-po","150":"locales/eu-LC_MESSAGES-converse-po","151":"locales/fi-LC_MESSAGES-converse-po","152":"locales/fr-LC_MESSAGES-converse-po","153":"locales/gl-LC_MESSAGES-converse-po","154":"locales/he-LC_MESSAGES-converse-po","155":"locales/hi-LC_MESSAGES-converse-po","156":"locales/hu-LC_MESSAGES-converse-po","157":"locales/id-LC_MESSAGES-converse-po","158":"locales/it-LC_MESSAGES-converse-po","159":"locales/ja-LC_MESSAGES-converse-po","160":"locales/lt-LC_MESSAGES-converse-po","161":"locales/mr-LC_MESSAGES-converse-po","162":"locales/nb-LC_MESSAGES-converse-po","163":"locales/nl-LC_MESSAGES-converse-po","164":"locales/nl_BE-LC_MESSAGES-converse-po","165":"locales/oc-LC_MESSAGES-converse-po","166":"locales/pl-LC_MESSAGES-converse-po","167":"locales/pt-LC_MESSAGES-converse-po","168":"locales/pt_BR-LC_MESSAGES-converse-po","169":"locales/ro-LC_MESSAGES-converse-po","170":"locales/ru-LC_MESSAGES-converse-po","171":"locales/sv-LC_MESSAGES-converse-po","172":"locales/th-LC_MESSAGES-converse-po","173":"locales/tr-LC_MESSAGES-converse-po","174":"locales/uk-LC_MESSAGES-converse-po","175":"locales/vi-LC_MESSAGES-converse-po","176":"locales/zh_CN-LC_MESSAGES-converse-po","177":"locales/zh_TW-LC_MESSAGES-converse-po"}[chunkId]||chunkId) + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -196,7 +196,7 @@
 /******/
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 284);
+/******/ 	return __webpack_require__(__webpack_require__.s = 326);
 /******/ })
 /************************************************************************/
 /******/ ([
@@ -215,7 +215,7 @@ __webpack_require__.d(__webpack_exports__, "e", function() { return /* binding *
 // UNUSED EXPORTS: SHA1, MD5
 
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/shims.js
-var shims = __webpack_require__(13);
+var shims = __webpack_require__(15);
 
 // CONCATENATED MODULE: ./src/headless/node_modules/strophe.js/src/md5.js
 /*
@@ -235,7 +235,7 @@ var shims = __webpack_require__(13);
  * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  * to work around bugs in some JS interpreters.
  */
-const safe_add = function safe_add(x, y) {
+const safe_add = function (x, y) {
   const lsw = (x & 0xFFFF) + (y & 0xFFFF);
   const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
   return msw << 16 | lsw & 0xFFFF;
@@ -245,7 +245,7 @@ const safe_add = function safe_add(x, y) {
  */
 
 
-const bit_rol = function bit_rol(num, cnt) {
+const bit_rol = function (num, cnt) {
   return num << cnt | num >>> 32 - cnt;
 };
 /*
@@ -253,7 +253,7 @@ const bit_rol = function bit_rol(num, cnt) {
  */
 
 
-const str2binl = function str2binl(str) {
+const str2binl = function (str) {
   if (typeof str !== "string") {
     throw new Error("str2binl was passed a non-string");
   }
@@ -271,7 +271,7 @@ const str2binl = function str2binl(str) {
  */
 
 
-const binl2str = function binl2str(bin) {
+const binl2str = function (bin) {
   let str = "";
 
   for (let i = 0; i < bin.length * 32; i += 8) {
@@ -285,7 +285,7 @@ const binl2str = function binl2str(bin) {
  */
 
 
-const binl2hex = function binl2hex(binarray) {
+const binl2hex = function (binarray) {
   const hex_tab = "0123456789abcdef";
   let str = "";
 
@@ -300,23 +300,23 @@ const binl2hex = function binl2hex(binarray) {
  */
 
 
-const md5_cmn = function md5_cmn(q, a, b, x, s, t) {
+const md5_cmn = function (q, a, b, x, s, t) {
   return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
 };
 
-const md5_ff = function md5_ff(a, b, c, d, x, s, t) {
+const md5_ff = function (a, b, c, d, x, s, t) {
   return md5_cmn(b & c | ~b & d, a, b, x, s, t);
 };
 
-const md5_gg = function md5_gg(a, b, c, d, x, s, t) {
+const md5_gg = function (a, b, c, d, x, s, t) {
   return md5_cmn(b & d | c & ~d, a, b, x, s, t);
 };
 
-const md5_hh = function md5_hh(a, b, c, d, x, s, t) {
+const md5_hh = function (a, b, c, d, x, s, t) {
   return md5_cmn(b ^ c ^ d, a, b, x, s, t);
 };
 
-const md5_ii = function md5_ii(a, b, c, d, x, s, t) {
+const md5_ii = function (a, b, c, d, x, s, t) {
   return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
 };
 /*
@@ -324,7 +324,7 @@ const md5_ii = function md5_ii(a, b, c, d, x, s, t) {
  */
 
 
-const core_md5 = function core_md5(x, len) {
+const core_md5 = function (x, len) {
   /* append padding */
   x[len >> 5] |= 0x80 << len % 32;
   x[(len + 64 >>> 9 << 4) + 14] = len;
@@ -419,10 +419,10 @@ const core_md5 = function core_md5(x, len) {
 
 
 const MD5 = {
-  hexdigest: function hexdigest(s) {
+  hexdigest: function (s) {
     return binl2hex(core_md5(str2binl(s), s.length * 8));
   },
-  hash: function hash(s) {
+  hash: function (s) {
     return binl2str(core_md5(str2binl(s), s.length * 8));
   }
 };
@@ -432,7 +432,7 @@ var sha1 = __webpack_require__(7);
 
 // CONCATENATED MODULE: ./src/headless/node_modules/strophe.js/src/utils.js
 const utils = {
-  utf16to8: function utf16to8(str) {
+  utf16to8: function (str) {
     var i, c;
     var out = "";
     var len = str.length;
@@ -454,7 +454,7 @@ const utils = {
 
     return out;
   },
-  addCookies: function addCookies(cookies) {
+  addCookies: function (cookies) {
     /* Parameters:
      *  (Object) cookies - either a map of cookie names
      *    to string values or to maps of cookie values.
@@ -498,7 +498,7 @@ const utils = {
 };
 
 // EXTERNAL MODULE: ./node_modules/abab/index.js
-var abab = __webpack_require__(9);
+var abab = __webpack_require__(10);
 
 // CONCATENATED MODULE: ./src/headless/node_modules/strophe.js/src/core.js
 /*
@@ -2132,7 +2132,7 @@ Strophe.Connection = class Connection {
 
     for (const k in Strophe._connectionPlugins) {
       if (Object.prototype.hasOwnProperty.call(Strophe._connectionPlugins, k)) {
-        const F = function F() {};
+        const F = function () {};
 
         F.prototype = Strophe._connectionPlugins[k];
         this[k] = new F();
@@ -4293,17 +4293,50 @@ Strophe.SASLXOAuth2 = class SASLXOAuth2 extends Strophe.SASLMechanism {
 /* 1 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
+"use strict";
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _bosh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(154);
+/* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68);
+/* harmony import */ var _worker_websocket__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(493);
+/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(0);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "e", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["e"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["a"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "b", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["b"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "c", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["c"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "d", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["d"]; });
+
+/*global global*/
+
+
+
+
+global.$build = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$build;
+global.$iq = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$iq;
+global.$msg = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$msg;
+global.$pres = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$pres;
+global.Strophe = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].Strophe;
+
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
+
+/***/ }),
+/* 2 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
 "use strict";
 
 // EXPORTS
 __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ $build; });
 __webpack_require__.d(__webpack_exports__, "b", function() { return /* binding */ $iq; });
-__webpack_require__.d(__webpack_exports__, "c", function() { return /* binding */ Strophe; });
+__webpack_require__.d(__webpack_exports__, "d", function() { return /* binding */ Strophe; });
+__webpack_require__.d(__webpack_exports__, "c", function() { return /* reexport */ SHA1; });
 
-// UNUSED EXPORTS: $msg, $pres, SHA1, MD5
+// UNUSED EXPORTS: $msg, $pres, MD5
 
 // EXTERNAL MODULE: ./node_modules/strophe.js/src/shims.js
-var shims = __webpack_require__(14);
+var shims = __webpack_require__(9);
 
 // CONCATENATED MODULE: ./node_modules/strophe.js/src/md5.js
 /*
@@ -4323,7 +4356,7 @@ var shims = __webpack_require__(14);
  * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  * to work around bugs in some JS interpreters.
  */
-const safe_add = function safe_add(x, y) {
+const safe_add = function (x, y) {
   const lsw = (x & 0xFFFF) + (y & 0xFFFF);
   const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
   return msw << 16 | lsw & 0xFFFF;
@@ -4333,7 +4366,7 @@ const safe_add = function safe_add(x, y) {
  */
 
 
-const bit_rol = function bit_rol(num, cnt) {
+const bit_rol = function (num, cnt) {
   return num << cnt | num >>> 32 - cnt;
 };
 /*
@@ -4341,7 +4374,7 @@ const bit_rol = function bit_rol(num, cnt) {
  */
 
 
-const str2binl = function str2binl(str) {
+const str2binl = function (str) {
   if (typeof str !== "string") {
     throw new Error("str2binl was passed a non-string");
   }
@@ -4359,7 +4392,7 @@ const str2binl = function str2binl(str) {
  */
 
 
-const binl2str = function binl2str(bin) {
+const binl2str = function (bin) {
   let str = "";
 
   for (let i = 0; i < bin.length * 32; i += 8) {
@@ -4373,7 +4406,7 @@ const binl2str = function binl2str(bin) {
  */
 
 
-const binl2hex = function binl2hex(binarray) {
+const binl2hex = function (binarray) {
   const hex_tab = "0123456789abcdef";
   let str = "";
 
@@ -4388,23 +4421,23 @@ const binl2hex = function binl2hex(binarray) {
  */
 
 
-const md5_cmn = function md5_cmn(q, a, b, x, s, t) {
+const md5_cmn = function (q, a, b, x, s, t) {
   return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
 };
 
-const md5_ff = function md5_ff(a, b, c, d, x, s, t) {
+const md5_ff = function (a, b, c, d, x, s, t) {
   return md5_cmn(b & c | ~b & d, a, b, x, s, t);
 };
 
-const md5_gg = function md5_gg(a, b, c, d, x, s, t) {
+const md5_gg = function (a, b, c, d, x, s, t) {
   return md5_cmn(b & d | c & ~d, a, b, x, s, t);
 };
 
-const md5_hh = function md5_hh(a, b, c, d, x, s, t) {
+const md5_hh = function (a, b, c, d, x, s, t) {
   return md5_cmn(b ^ c ^ d, a, b, x, s, t);
 };
 
-const md5_ii = function md5_ii(a, b, c, d, x, s, t) {
+const md5_ii = function (a, b, c, d, x, s, t) {
   return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
 };
 /*
@@ -4412,7 +4445,7 @@ const md5_ii = function md5_ii(a, b, c, d, x, s, t) {
  */
 
 
-const core_md5 = function core_md5(x, len) {
+const core_md5 = function (x, len) {
   /* append padding */
   x[len >> 5] |= 0x80 << len % 32;
   x[(len + 64 >>> 9 << 4) + 14] = len;
@@ -4507,10 +4540,10 @@ const core_md5 = function core_md5(x, len) {
 
 
 const MD5 = {
-  hexdigest: function hexdigest(s) {
+  hexdigest: function (s) {
     return binl2hex(core_md5(str2binl(s), s.length * 8));
   },
-  hash: function hash(s) {
+  hash: function (s) {
     return binl2str(core_md5(str2binl(s), s.length * 8));
   }
 };
@@ -4708,25 +4741,25 @@ function binb2str(bin) {
 
 
 const SHA1 = {
-  b64_hmac_sha1: function b64_hmac_sha1(key, data) {
+  b64_hmac_sha1: function (key, data) {
     return binb2b64(core_hmac_sha1(key, data));
   },
-  b64_sha1: function b64_sha1(s) {
+  b64_sha1: function (s) {
     return binb2b64(core_sha1(str2binb(s), s.length * 8));
   },
   binb2str: binb2str,
   core_hmac_sha1: core_hmac_sha1,
-  str_hmac_sha1: function str_hmac_sha1(key, data) {
+  str_hmac_sha1: function (key, data) {
     return binb2str(core_hmac_sha1(key, data));
   },
-  str_sha1: function str_sha1(s) {
+  str_sha1: function (s) {
     return binb2str(core_sha1(str2binb(s), s.length * 8));
   }
 };
 
 // CONCATENATED MODULE: ./node_modules/strophe.js/src/utils.js
 const utils = {
-  utf16to8: function utf16to8(str) {
+  utf16to8: function (str) {
     var i, c;
     var out = "";
     var len = str.length;
@@ -4748,7 +4781,7 @@ const utils = {
 
     return out;
   },
-  addCookies: function addCookies(cookies) {
+  addCookies: function (cookies) {
     /* Parameters:
      *  (Object) cookies - either a map of cookie names
      *    to string values or to maps of cookie values.
@@ -4792,7 +4825,7 @@ const utils = {
 };
 
 // EXTERNAL MODULE: ./node_modules/abab/index.js
-var abab = __webpack_require__(9);
+var abab = __webpack_require__(10);
 
 // CONCATENATED MODULE: ./node_modules/strophe.js/src/core.js
 /*
@@ -4872,7 +4905,7 @@ function $pres(attrs) {
 
 const Strophe = {
   /** Constant: VERSION */
-  VERSION: "1.4.0",
+  VERSION: "1.4.1",
 
   /** Constants: XMPP Namespace Constants
    *  Common namespace constants from the XMPP RFCs and XEPs.
@@ -5145,7 +5178,7 @@ const Strophe = {
    */
   xmlGenerator() {
     if (!Strophe._xmlGenerator) {
-      Strophe._xmlGenerator = shims["b" /* getDummyXMLDOMDocument */]();
+      Strophe._xmlGenerator = shims["c" /* getDummyXMLDOMDocument */]();
     }
 
     return Strophe._xmlGenerator;
@@ -5583,8 +5616,10 @@ const Strophe = {
    *    (String) msg - The log message.
    */
   log(level, msg) {
-    if (level === this.LogLevel.FATAL && typeof window.console === 'object' && typeof window.console.error === 'function') {
-      window.console.error(msg);
+    if (level === this.LogLevel.FATAL) {
+      var _console;
+
+      (_console = console) === null || _console === void 0 ? void 0 : _console.error(msg);
     }
   },
 
@@ -6369,18 +6404,9 @@ Strophe.Connection = class Connection {
     this.service = service; // Configuration options
 
     this.options = options || {};
-    const proto = this.options.protocol || ""; // Select protocal based on service or options
-
-    if (this.options.worker) {
-      this._proto = new Strophe.WorkerWebsocket(this);
-    } else if (service.indexOf("ws:") === 0 || service.indexOf("wss:") === 0 || proto.indexOf("ws") === 0) {
-      this._proto = new Strophe.Websocket(this);
-    } else {
-      this._proto = new Strophe.Bosh(this);
-    }
+    this.setProtocol();
     /* The connected JID. */
 
-
     this.jid = "";
     /* the JIDs domain */
 
@@ -6426,7 +6452,7 @@ Strophe.Connection = class Connection {
 
     for (const k in Strophe._connectionPlugins) {
       if (Object.prototype.hasOwnProperty.call(Strophe._connectionPlugins, k)) {
-        const F = function F() {};
+        const F = function () {};
 
         F.prototype = Strophe._connectionPlugins[k];
         this[k] = new F();
@@ -6434,6 +6460,22 @@ Strophe.Connection = class Connection {
       }
     }
   }
+  /** Function: setProtocol
+   *  Select protocal based on this.options or this.service
+   */
+
+
+  setProtocol() {
+    const proto = this.options.protocol || "";
+
+    if (this.options.worker) {
+      this._proto = new Strophe.WorkerWebsocket(this);
+    } else if (this.service.indexOf("ws:") === 0 || this.service.indexOf("wss:") === 0 || proto.indexOf("ws") === 0) {
+      this._proto = new Strophe.Websocket(this);
+    } else {
+      this._proto = new Strophe.Bosh(this);
+    }
+  }
   /** Function: reset
    *  Reset the connection.
    *
@@ -8527,7 +8569,7 @@ Strophe.SASLXOAuth2 = class SASLXOAuth2 extends Strophe.SASLMechanism {
 
 };
 
-/* harmony default export */ var core = __webpack_exports__["d"] = ({
+/* harmony default export */ var core = __webpack_exports__["e"] = ({
   'Strophe': Strophe,
   '$build': $build,
   '$iq': $iq,
@@ -8542,7 +8584,7 @@ Strophe.SASLXOAuth2 = class SASLXOAuth2 extends Strophe.SASLMechanism {
 });
 
 /***/ }),
-/* 2 */
+/* 3 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -11023,50 +11065,19 @@ if ( true ) {
 
 
 /***/ }),
-/* 3 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _bosh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(115);
-/* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54);
-/* harmony import */ var _worker_websocket__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(405);
-/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(0);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "e", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["e"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["a"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "b", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["b"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "c", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["c"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "d", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["d"]; });
-
-/*global global*/
-
-
-
-
-global.$build = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$build;
-global.$iq = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$iq;
-global.$msg = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$msg;
-global.$pres = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].$pres;
-global.Strophe = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "f"].Strophe;
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
-
-/***/ }),
-/* 4 */
+/* 4 */,
+/* 5 */
 /***/ (function(module, exports, __webpack_require__) {
 
 !function(t,e){ true?module.exports=e():undefined}(this,function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)<this.startOf(e)},d.isBefore=function(t,e){return this.endOf(e)<g(t)},d.$g=function(t,e,n){return D.u(t)?this[e]:this.set(n,t)},d.year=function(t){return this.$g(t,"$y",a)},d.month=function(t){return this.$g(t,"$M",u)},d.day=function(t){return this.$g(t,"$W",i)},d.date=function(t){return this.$g(t,"$D","date")},d.hour=function(t){return this.$g(t,"$H",r)},d.minute=function(t){return this.$g(t,"$m",n)},d.second=function(t){return this.$g(t,"$s",e)},d.millisecond=function(e){return this.$g(e,"$ms",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,e){var n=D.w(h.$u?Date.UTC(h.$y,e,t):new Date(h.$y,e,t),h);return f?n:n.endOf(i)},$=function(t,e){return D.w(h.toDate()[t].apply(h.toDate("s"),(f?[0,0,0,0]:[23,59,59,999]).slice(e)),h)},l=this.$W,m=this.$M,y=this.$D,M="set"+(this.$u?"UTC":"");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case"date":return $(M+"Hours",0);case r:return $(M+"Minutes",1);case n:return $(M+"Seconds",2);case e:return $(M+"Milliseconds",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c="set"+(this.$u?"UTC":""),d=(h={},h[i]=c+"Date",h.date=c+"Date",h[u]=c+"Month",h[a]=c+"FullYear",h[r]=c+"Hours",h[n]=c+"Minutes",h[e]=c+"Seconds",h[t]=c+"Milliseconds",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set("date",1);l.$d[d]($),l.init(),this.$d=l.set("date",Math.min(this.$D,l.daysInMonth())).$d}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,e){return this.clone().$set(t,e)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(e){var n=g(f);return D.w(n.date(n.date()+Math.round(e*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[n]=6e4,h[r]=36e5,h[e]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,e){return this.add(-1*t,e)},d.format=function(t){var e=this;if(!this.isValid())return"Invalid Date";var n=t||"YYYY-MM-DDTHH:mm:ssZ",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(e,n))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,"0")},$=i.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,"0"),MMM:c(i.monthsShort,o,h,3),MMMM:c(h,o),D:this.$D,DD:D.s(this.$D,2,"0"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,"0"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,"0"),s:String(this.$s),ss:D.s(this.$s,2,"0"),SSS:D.s(this.$ms,3,"0"),Z:r};return n.replace(f,function(t,e){return e||l[t]||r.replace(":","")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[n]=m/6e4,c[e]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=M(t,e,!0);return r&&(n.$L=r),n},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,e){return t(e,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});
 
 
 /***/ }),
-/* 5 */
+/* 6 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49);
+/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63);
 
 
 /** Detect free variable `self`. */
@@ -11079,7 +11090,6 @@ var root = _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"] || fre
 
 
 /***/ }),
-/* 6 */,
 /* 7 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -11277,18 +11287,18 @@ function binb2str(bin) {
 
 
 const SHA1 = {
-  b64_hmac_sha1: function b64_hmac_sha1(key, data) {
+  b64_hmac_sha1: function (key, data) {
     return binb2b64(core_hmac_sha1(key, data));
   },
-  b64_sha1: function b64_sha1(s) {
+  b64_sha1: function (s) {
     return binb2b64(core_sha1(str2binb(s), s.length * 8));
   },
   binb2str: binb2str,
   core_hmac_sha1: core_hmac_sha1,
-  str_hmac_sha1: function str_hmac_sha1(key, data) {
+  str_hmac_sha1: function (key, data) {
     return binb2str(core_hmac_sha1(key, data));
   },
-  str_sha1: function str_sha1(s) {
+  str_sha1: function (s) {
     return binb2str(core_sha1(str2binb(s), s.length * 8));
   }
 };
@@ -11298,8 +11308,8 @@ const SHA1 = {
 /* 8 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var escapeHtmlChar = __webpack_require__(408),
-    toString = __webpack_require__(113);
+var escapeHtmlChar = __webpack_require__(496),
+    toString = __webpack_require__(137);
 
 /** Used to match HTML entities and HTML characters. */
 var reUnescapedHtml = /[&<>"']/g,
@@ -11345,108 +11355,12 @@ module.exports = escape;
 
 /***/ }),
 /* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-const atob = __webpack_require__(288);
-const btoa = __webpack_require__(289);
-
-module.exports = {
-  atob,
-  btoa
-};
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var freeGlobal = __webpack_require__(72);
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-module.exports = root;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports) {
-
-var g;
-
-// This works in non-strict mode
-g = (function() {
-	return this;
-})();
-
-try {
-	// This works if eval is allowed (see CSP)
-	g = g || new Function("return this")();
-} catch (e) {
-	// This works if the window reference is available
-	if (typeof window === "object") g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
-
-
-/***/ }),
-/* 12 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49);
-
-
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Detect free variable `process` from Node.js. */
-var freeProcess = moduleExports && _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].process;
-
-/** Used to access faster Node.js helpers. */
-var nodeUtil = (function() {
-  try {
-    // Use `util.types` for Node.js 10+.
-    var types = freeModule && freeModule.require && freeModule.require('util').types;
-
-    if (types) {
-      return types;
-    }
-
-    // Legacy `process.binding('util')` for Node.js < 10.
-    return freeProcess && freeProcess.binding && freeProcess.binding('util');
-  } catch (e) {}
-}());
-
-/* harmony default export */ __webpack_exports__["a"] = (nodeUtil);
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(55)(module)))
-
-/***/ }),
-/* 13 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export WebSocket */
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return WebSocket; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DOMParser; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getDummyXMLDOMDocument; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getDummyXMLDOMDocument; });
 /*
  * This module provides uniform
  * Shims APIs and globals that are not present in all JS environments,
@@ -11476,7 +11390,7 @@ function getWebSocketImplementation() {
 
   if (typeof WebSocketImplementation === 'undefined') {
     try {
-      WebSocketImplementation = __webpack_require__(286);
+      WebSocketImplementation = __webpack_require__(499);
     } catch (err) {
       throw new Error('You must install the "ws" package to use Strophe in nodejs.');
     }
@@ -11504,7 +11418,7 @@ function getDOMParserImplementation() {
 
   if (typeof DOMParserImplementation === 'undefined') {
     try {
-      DOMParserImplementation = __webpack_require__(37).DOMParser;
+      DOMParserImplementation = __webpack_require__(47).DOMParser;
     } catch (err) {
       throw new Error('You must install the "xmldom" package to use Strophe in nodejs.');
     }
@@ -11550,7 +11464,7 @@ function getDummyXMLDOMDocument() {
   // nodejs
   if (typeof document === 'undefined') {
     try {
-      const DOMImplementation = __webpack_require__(37).DOMImplementation;
+      const DOMImplementation = __webpack_require__(47).DOMImplementation;
 
       return new DOMImplementation().createDocument('jabber:client', 'strophe', null);
     } catch (err) {
@@ -11569,12 +11483,120 @@ function getDummyXMLDOMDocument() {
 
   return document.implementation.createDocument('jabber:client', 'strophe', null);
 }
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+const atob = __webpack_require__(330);
+const btoa = __webpack_require__(331);
+
+module.exports = {
+  atob,
+  btoa
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var freeGlobal = __webpack_require__(96);
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+module.exports = root;
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || new Function("return this")();
+} catch (e) {
+	// This works if the window reference is available
+	if (typeof window === "object") g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+  ? window : typeof self != 'undefined' && self.Math == Math ? self
+  // eslint-disable-next-line no-new-func
+  : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
 
 /***/ }),
 /* 14 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
+"use strict";
+/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63);
+
+
+/** Detect free variable `exports`. */
+var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/** Detect free variable `process` from Node.js. */
+var freeProcess = moduleExports && _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].process;
+
+/** Used to access faster Node.js helpers. */
+var nodeUtil = (function() {
+  try {
+    // Use `util.types` for Node.js 10+.
+    var types = freeModule && freeModule.require && freeModule.require('util').types;
+
+    if (types) {
+      return types;
+    }
+
+    // Legacy `process.binding('util')` for Node.js < 10.
+    return freeProcess && freeProcess.binding && freeProcess.binding('util');
+  } catch (e) {}
+}());
+
+/* harmony default export */ __webpack_exports__["a"] = (nodeUtil);
+
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(69)(module)))
+
+/***/ }),
+/* 15 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
 "use strict";
 /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export WebSocket */
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DOMParser; });
@@ -11608,7 +11630,7 @@ function getWebSocketImplementation() {
 
   if (typeof WebSocketImplementation === 'undefined') {
     try {
-      WebSocketImplementation = __webpack_require__(411);
+      WebSocketImplementation = __webpack_require__(328);
     } catch (err) {
       throw new Error('You must install the "ws" package to use Strophe in nodejs.');
     }
@@ -11636,7 +11658,7 @@ function getDOMParserImplementation() {
 
   if (typeof DOMParserImplementation === 'undefined') {
     try {
-      DOMParserImplementation = __webpack_require__(37).DOMParser;
+      DOMParserImplementation = __webpack_require__(47).DOMParser;
     } catch (err) {
       throw new Error('You must install the "xmldom" package to use Strophe in nodejs.');
     }
@@ -11682,7 +11704,7 @@ function getDummyXMLDOMDocument() {
   // nodejs
   if (typeof document === 'undefined') {
     try {
-      const DOMImplementation = __webpack_require__(37).DOMImplementation;
+      const DOMImplementation = __webpack_require__(47).DOMImplementation;
 
       return new DOMImplementation().createDocument('jabber:client', 'strophe', null);
     } catch (err) {
@@ -11701,10 +11723,10 @@ function getDummyXMLDOMDocument() {
 
   return document.implementation.createDocument('jabber:client', 'strophe', null);
 }
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 15 */
+/* 16 */
 /***/ (function(module, exports) {
 
 /**
@@ -11736,7 +11758,24 @@ module.exports = isArray;
 
 
 /***/ }),
-/* 16 */
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(144)('wks');
+var uid = __webpack_require__(145);
+var Symbol = __webpack_require__(13).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+  return store[name] || (store[name] =
+    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 18 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var require;var require;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
@@ -13359,7 +13398,15 @@ exports["filterXSS"] = (filterXSS);
 exports["filterCSS"] = (filterCSS);
 
 /***/ }),
-/* 17 */
+/* 19 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.6.12' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 20 */
 /***/ (function(module, exports) {
 
 /**
@@ -13396,12 +13443,12 @@ module.exports = isObject;
 
 
 /***/ }),
-/* 18 */
+/* 21 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
-/* harmony import */ var _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(120);
+/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);
+/* harmony import */ var _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(159);
 
 
 
@@ -13441,130 +13488,12 @@ var isBuffer = nativeIsBuffer || _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__[/* d
 
 /* harmony default export */ __webpack_exports__["a"] = (isBuffer);
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(55)(module)))
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
-  return value != null && typeof value == 'object';
-}
-
-module.exports = isObjectLike;
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _bosh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(410);
-/* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(119);
-/* harmony import */ var _worker_websocket__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(412);
-/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "b", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["c"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["b"]; });
-
-/*global global*/
-
-
-
-
-global.$build = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "d"].$build;
-global.$iq = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "d"].$iq;
-global.$msg = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "d"].$msg;
-global.$pres = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "d"].$pres;
-global.Strophe = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "d"].Strophe;
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(39),
-    getRawTag = __webpack_require__(293),
-    objectToString = __webpack_require__(294);
-
-/** `Object#toString` result references. */
-var nullTag = '[object Null]',
-    undefinedTag = '[object Undefined]';
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
-  if (value == null) {
-    return value === undefined ? undefinedTag : nullTag;
-  }
-  return (symToStringTag && symToStringTag in Object(value))
-    ? getRawTag(value)
-    : objectToString(value);
-}
-
-module.exports = baseGetTag;
-
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(69)(module)))
 
 /***/ }),
 /* 22 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsNative = __webpack_require__(311),
-    getValue = __webpack_require__(314);
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
-  var value = getValue(object, key);
-  return baseIsNative(value) ? value : undefined;
-}
-
-module.exports = getNative;
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
 /* WEBPACK VAR INJECTION */(function(global) {var require;var require;/*!
     localForage -- Offline Storage, Improved
     Version 1.9.0
@@ -16367,15 +16296,148 @@ module.exports = localforage_js;
 },{"3":3}]},{},[4])(4)
 });
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports) {
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+  return value != null && typeof value == 'object';
+}
+
+module.exports = isObjectLike;
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export b64_sha1 */
+/* harmony import */ var _bosh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(498);
+/* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(158);
+/* harmony import */ var _worker_websocket__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(500);
+/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2);
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "b", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["d"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _core__WEBPACK_IMPORTED_MODULE_3__["b"]; });
+
+/*global global*/
+
+
+
+
+global.$build = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "e"].$build;
+global.$iq = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "e"].$iq;
+global.$msg = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "e"].$msg;
+global.$pres = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "e"].$pres;
+global.Strophe = _core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "e"].Strophe;
+
+const {
+  b64_sha1
+} = _core__WEBPACK_IMPORTED_MODULE_3__[/* SHA1 */ "c"];
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 24 */,
 /* 25 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isFunction = __webpack_require__(48),
-    isLength = __webpack_require__(57);
+var Symbol = __webpack_require__(49),
+    getRawTag = __webpack_require__(335),
+    objectToString = __webpack_require__(336);
+
+/** `Object#toString` result references. */
+var nullTag = '[object Null]',
+    undefinedTag = '[object Undefined]';
+
+/** Built-in value references. */
+var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+/**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+  if (value == null) {
+    return value === undefined ? undefinedTag : nullTag;
+  }
+  return (symToStringTag && symToStringTag in Object(value))
+    ? getRawTag(value)
+    : objectToString(value);
+}
+
+module.exports = baseGetTag;
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseIsNative = __webpack_require__(353),
+    getValue = __webpack_require__(356);
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = getValue(object, key);
+  return baseIsNative(value) ? value : undefined;
+}
+
+module.exports = getNative;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(41);
+module.exports = function (it) {
+  if (!isObject(it)) throw TypeError(it + ' is not an object!');
+  return it;
+};
+
+
+/***/ }),
+/* 28 */,
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isFunction = __webpack_require__(62),
+    isLength = __webpack_require__(71);
 
 /**
  * Checks if `value` is array-like. A value is considered array-like if it's
@@ -16410,12 +16472,104 @@ module.exports = isArrayLike;
 
 
 /***/ }),
-/* 26 */
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(13);
+var core = __webpack_require__(19);
+var ctx = __webpack_require__(58);
+var hide = __webpack_require__(31);
+var has = __webpack_require__(60);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+  var IS_FORCED = type & $export.F;
+  var IS_GLOBAL = type & $export.G;
+  var IS_STATIC = type & $export.S;
+  var IS_PROTO = type & $export.P;
+  var IS_BIND = type & $export.B;
+  var IS_WRAP = type & $export.W;
+  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+  var expProto = exports[PROTOTYPE];
+  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+  var key, own, out;
+  if (IS_GLOBAL) source = name;
+  for (key in source) {
+    // contains in native
+    own = !IS_FORCED && target && target[key] !== undefined;
+    if (own && has(exports, key)) continue;
+    // export native or passed
+    out = own ? target[key] : source[key];
+    // prevent global pollution for namespaces
+    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+    // bind timers to global for call from export context
+    : IS_BIND && own ? ctx(out, global)
+    // wrap global constructors for prevent change them in library
+    : IS_WRAP && target[key] == out ? (function (C) {
+      var F = function (a, b, c) {
+        if (this instanceof C) {
+          switch (arguments.length) {
+            case 0: return new C();
+            case 1: return new C(a);
+            case 2: return new C(a, b);
+          } return new C(a, b, c);
+        } return C.apply(this, arguments);
+      };
+      F[PROTOTYPE] = C[PROTOTYPE];
+      return F;
+    // make static versions for prototype methods
+    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+    if (IS_PROTO) {
+      (exports.virtual || (exports.virtual = {}))[key] = out;
+      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+    }
+  }
+};
+// type bitmap
+$export.F = 1;   // forced
+$export.G = 2;   // global
+$export.S = 4;   // static
+$export.P = 8;   // proto
+$export.B = 16;  // bind
+$export.W = 32;  // wrap
+$export.U = 64;  // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(40);
+var createDesc = __webpack_require__(140);
+module.exports = __webpack_require__(32) ? function (object, key, value) {
+  return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+  object[key] = value;
+  return object;
+};
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(82)(function () {
+  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 33 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayLikeKeys = __webpack_require__(74),
-    baseKeys = __webpack_require__(78),
-    isArrayLike = __webpack_require__(25);
+var arrayLikeKeys = __webpack_require__(98),
+    baseKeys = __webpack_require__(102),
+    isArrayLike = __webpack_require__(29);
 
 /**
  * Creates an array of the own enumerable property names of `object`.
@@ -16453,7 +16607,7 @@ module.exports = keys;
 
 
 /***/ }),
-/* 27 */
+/* 34 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Native Javascript for Bootstrap 4 v2.0.27 | © dnp_theme | MIT-License
@@ -18069,10 +18223,10 @@ module.exports = keys;
   };
 }));
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 28 */
+/* 35 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -18092,10 +18246,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
   if ( true && module.exports) {
     // Node
-    module.exports = factory(__webpack_require__(116), __webpack_require__(117), __webpack_require__(118));
+    module.exports = factory(__webpack_require__(155), __webpack_require__(156), __webpack_require__(157));
   } else if (true) {
     // AMD. Register as an anonymous module.
-    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(116), __webpack_require__(117), __webpack_require__(118)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(155), __webpack_require__(156), __webpack_require__(157)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
 				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
 				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
 				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
@@ -18522,7 +18676,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
   var _part;
 
-  var generateAccessor = function generateAccessor(_group, _part) {
+  var generateAccessor = function (_group, _part) {
     return function (string) {
       try {
         return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function (c) {
@@ -18543,7 +18697,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
     URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);
   }
 
-  var generateSegmentedPathFunction = function generateSegmentedPathFunction(_sep, _codingFuncName, _innerCodingFuncName) {
+  var generateSegmentedPathFunction = function (_sep, _codingFuncName, _innerCodingFuncName) {
     return function (string) {
       // Why pass in names of functions, rather than the function objects themselves? The
       // definitions of some functions (but in particular, URI.decode) will occasionally change due
@@ -18554,7 +18708,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       if (!_innerCodingFuncName) {
         actualCodingFunc = URI[_codingFuncName];
       } else {
-        actualCodingFunc = function actualCodingFunc(string) {
+        actualCodingFunc = function (string) {
           return URI[_codingFuncName](URI[_innerCodingFuncName](string));
         };
       }
@@ -20503,14 +20657,14 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 });
 
 /***/ }),
-/* 29 */
+/* 36 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIndexOf = __webpack_require__(89),
-    isArrayLike = __webpack_require__(25),
-    isString = __webpack_require__(90),
-    toInteger = __webpack_require__(56),
-    values = __webpack_require__(68);
+var baseIndexOf = __webpack_require__(113),
+    isArrayLike = __webpack_require__(29),
+    isString = __webpack_require__(114),
+    toInteger = __webpack_require__(70),
+    values = __webpack_require__(92);
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
 var nativeMax = Math.max;
@@ -20562,7 +20716,7 @@ module.exports = includes;
 
 
 /***/ }),
-/* 30 */
+/* 37 */
 /***/ (function(module, exports) {
 
 /** Used as references for various `Number` constants. */
@@ -20593,7 +20747,7 @@ module.exports = isIndex;
 
 
 /***/ }),
-/* 31 */
+/* 38 */
 /***/ (function(module, exports) {
 
 /**
@@ -20620,10 +20774,10 @@ module.exports = identity;
 
 
 /***/ }),
-/* 32 */
+/* 39 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isSymbol = __webpack_require__(38);
+var isSymbol = __webpack_require__(48);
 
 /** Used as references for various `Number` constants. */
 var INFINITY = 1 / 0;
@@ -20647,7 +20801,45 @@ module.exports = toKey;
 
 
 /***/ }),
-/* 33 */
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(27);
+var IE8_DOM_DEFINE = __webpack_require__(451);
+var toPrimitive = __webpack_require__(452);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(32) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+  anObject(O);
+  P = toPrimitive(P, true);
+  anObject(Attributes);
+  if (IE8_DOM_DEFINE) try {
+    return dP(O, P, Attributes);
+  } catch (e) { /* empty */ }
+  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+  if ('value' in Attributes) O[P] = Attributes.value;
+  return O;
+};
+
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+  return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 43 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
@@ -37804,24 +37996,24 @@ module.exports = toKey;
   else {}
 }.call(this));
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11), __webpack_require__(36)(module)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12), __webpack_require__(46)(module)))
 
 /***/ }),
-/* 34 */
+/* 44 */
 /***/ (function(module, exports, __webpack_require__) {
 
-module.exports = __webpack_require__(295);
+module.exports = __webpack_require__(337);
 
 
 /***/ }),
-/* 35 */
+/* 45 */
 /***/ (function(module, exports, __webpack_require__) {
 
-module.exports = __webpack_require__(309);
+module.exports = __webpack_require__(351);
 
 
 /***/ }),
-/* 36 */
+/* 46 */
 /***/ (function(module, exports) {
 
 module.exports = function(module) {
@@ -37849,7 +38041,7 @@ module.exports = function(module) {
 
 
 /***/ }),
-/* 37 */
+/* 47 */
 /***/ (function(module, exports, __webpack_require__) {
 
 function DOMParser(options){
@@ -38098,19 +38290,19 @@ function appendElement (hander,node) {
 }//appendChild and setAttributeNS are preformance key
 
 //if(typeof require == 'function'){
-	var XMLReader = __webpack_require__(287).XMLReader;
-	var DOMImplementation = exports.DOMImplementation = __webpack_require__(71).DOMImplementation;
-	exports.XMLSerializer = __webpack_require__(71).XMLSerializer ;
+	var XMLReader = __webpack_require__(329).XMLReader;
+	var DOMImplementation = exports.DOMImplementation = __webpack_require__(95).DOMImplementation;
+	exports.XMLSerializer = __webpack_require__(95).XMLSerializer ;
 	exports.DOMParser = DOMParser;
 //}
 
 
 /***/ }),
-/* 38 */
+/* 48 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isObjectLike = __webpack_require__(19);
+var baseGetTag = __webpack_require__(25),
+    isObjectLike = __webpack_require__(23);
 
 /** `Object#toString` result references. */
 var symbolTag = '[object Symbol]';
@@ -38141,10 +38333,10 @@ module.exports = isSymbol;
 
 
 /***/ }),
-/* 39 */
+/* 49 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var root = __webpack_require__(10);
+var root = __webpack_require__(11);
 
 /** Built-in value references. */
 var Symbol = root.Symbol;
@@ -38153,7 +38345,7 @@ module.exports = Symbol;
 
 
 /***/ }),
-/* 40 */
+/* 50 */
 /***/ (function(module, exports) {
 
 /**
@@ -38196,11 +38388,11 @@ module.exports = eq;
 
 
 /***/ }),
-/* 41 */
+/* 51 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseCreate = __webpack_require__(60),
-    isObject = __webpack_require__(17);
+var baseCreate = __webpack_require__(74),
+    isObject = __webpack_require__(20);
 
 /**
  * Creates a function that produces an instance of `Ctor` regardless of
@@ -38239,7 +38431,7 @@ module.exports = createCtor;
 
 
 /***/ }),
-/* 42 */
+/* 52 */
 /***/ (function(module, exports) {
 
 /** Used as the internal argument placeholder. */
@@ -38274,14 +38466,14 @@ module.exports = replaceHolders;
 
 
 /***/ }),
-/* 43 */
+/* 53 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var listCacheClear = __webpack_require__(346),
-    listCacheDelete = __webpack_require__(347),
-    listCacheGet = __webpack_require__(348),
-    listCacheHas = __webpack_require__(349),
-    listCacheSet = __webpack_require__(350);
+var listCacheClear = __webpack_require__(388),
+    listCacheDelete = __webpack_require__(389),
+    listCacheGet = __webpack_require__(390),
+    listCacheHas = __webpack_require__(391),
+    listCacheSet = __webpack_require__(392);
 
 /**
  * Creates an list cache object.
@@ -38312,10 +38504,10 @@ module.exports = ListCache;
 
 
 /***/ }),
-/* 44 */
+/* 54 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var eq = __webpack_require__(40);
+var eq = __webpack_require__(50);
 
 /**
  * Gets the index at which the `key` is found in `array` of key-value pairs.
@@ -38339,10 +38531,10 @@ module.exports = assocIndexOf;
 
 
 /***/ }),
-/* 45 */
+/* 55 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22);
+var getNative = __webpack_require__(26);
 
 /* Built-in method references that are verified to be native. */
 var nativeCreate = getNative(Object, 'create');
@@ -38351,10 +38543,10 @@ module.exports = nativeCreate;
 
 
 /***/ }),
-/* 46 */
+/* 56 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isKeyable = __webpack_require__(364);
+var isKeyable = __webpack_require__(406);
 
 /**
  * Gets the data for `map`.
@@ -38375,13 +38567,13 @@ module.exports = getMapData;
 
 
 /***/ }),
-/* 47 */
+/* 57 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isArray = __webpack_require__(15),
-    isKey = __webpack_require__(67),
-    stringToPath = __webpack_require__(387),
-    toString = __webpack_require__(113);
+var isArray = __webpack_require__(16),
+    isKey = __webpack_require__(81),
+    stringToPath = __webpack_require__(429),
+    toString = __webpack_require__(137);
 
 /**
  * Casts `value` to a path array if it's not one.
@@ -38402,11 +38594,68 @@ module.exports = castPath;
 
 
 /***/ }),
-/* 48 */
+/* 58 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isObject = __webpack_require__(17);
+// optional / simple context binding
+var aFunction = __webpack_require__(59);
+module.exports = function (fn, that, length) {
+  aFunction(fn);
+  if (that === undefined) return fn;
+  switch (length) {
+    case 1: return function (a) {
+      return fn.call(that, a);
+    };
+    case 2: return function (a, b) {
+      return fn.call(that, a, b);
+    };
+    case 3: return function (a, b, c) {
+      return fn.call(that, a, b, c);
+    };
+  }
+  return function (/* ...args */) {
+    return fn.apply(that, arguments);
+  };
+};
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+  return it;
+};
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+  return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+  return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var baseGetTag = __webpack_require__(25),
+    isObject = __webpack_require__(20);
 
 /** `Object#toString` result references. */
 var asyncTag = '[object AsyncFunction]',
@@ -38445,7 +38694,7 @@ module.exports = isFunction;
 
 
 /***/ }),
-/* 49 */
+/* 63 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -38454,10 +38703,10 @@ var freeGlobal = typeof global == 'object' && global && global.Object === Object
 
 /* harmony default export */ __webpack_exports__["a"] = (freeGlobal);
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 50 */
+/* 64 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -38511,7 +38760,7 @@ return __p
 };
 
 /***/ }),
-/* 51 */
+/* 65 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -38547,16 +38796,16 @@ return __p
 };
 
 /***/ }),
-/* 52 */
+/* 66 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(33)], __WEBPACK_AMD_DEFINE_RESULT__ = (function (_) {
+var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(43)], __WEBPACK_AMD_DEFINE_RESULT__ = (function (_) {
   return _.noConflict();
 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
 				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
 /***/ }),
-/* 53 */
+/* 67 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /**
@@ -39581,11 +39830,11 @@ return parser;
 
 
 /***/ }),
-/* 54 */
+/* 68 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);
 /* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
 /*
     This program is distributed under the terms of the MIT license.
@@ -40229,7 +40478,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Websocket = class Websocke
 };
 
 /***/ }),
-/* 55 */
+/* 69 */
 /***/ (function(module, exports) {
 
 module.exports = function(originalModule) {
@@ -40259,10 +40508,10 @@ module.exports = function(originalModule) {
 
 
 /***/ }),
-/* 56 */
+/* 70 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var toFinite = __webpack_require__(291);
+var toFinite = __webpack_require__(333);
 
 /**
  * Converts `value` to an integer.
@@ -40301,7 +40550,7 @@ module.exports = toInteger;
 
 
 /***/ }),
-/* 57 */
+/* 71 */
 /***/ (function(module, exports) {
 
 /** Used as references for various `Number` constants. */
@@ -40342,7 +40591,7 @@ module.exports = isLength;
 
 
 /***/ }),
-/* 58 */
+/* 72 */
 /***/ (function(module, exports) {
 
 /**
@@ -40369,7 +40618,7 @@ module.exports = apply;
 
 
 /***/ }),
-/* 59 */
+/* 73 */
 /***/ (function(module, exports) {
 
 /**
@@ -40396,10 +40645,10 @@ module.exports = arrayMap;
 
 
 /***/ }),
-/* 60 */
+/* 74 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isObject = __webpack_require__(17);
+var isObject = __webpack_require__(20);
 
 /** Built-in value references. */
 var objectCreate = Object.create;
@@ -40432,11 +40681,11 @@ module.exports = baseCreate;
 
 
 /***/ }),
-/* 61 */
+/* 75 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseCreate = __webpack_require__(60),
-    baseLodash = __webpack_require__(62);
+var baseCreate = __webpack_require__(74),
+    baseLodash = __webpack_require__(76);
 
 /** Used as references for the maximum length and index of an array. */
 var MAX_ARRAY_LENGTH = 4294967295;
@@ -40466,7 +40715,7 @@ module.exports = LazyWrapper;
 
 
 /***/ }),
-/* 62 */
+/* 76 */
 /***/ (function(module, exports) {
 
 /**
@@ -40482,7 +40731,7 @@ module.exports = baseLodash;
 
 
 /***/ }),
-/* 63 */
+/* 77 */
 /***/ (function(module, exports) {
 
 /**
@@ -40501,11 +40750,11 @@ module.exports = getHolder;
 
 
 /***/ }),
-/* 64 */
+/* 78 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22),
-    root = __webpack_require__(10);
+var getNative = __webpack_require__(26),
+    root = __webpack_require__(11);
 
 /* Built-in method references that are verified to be native. */
 var Map = getNative(root, 'Map');
@@ -40514,14 +40763,14 @@ module.exports = Map;
 
 
 /***/ }),
-/* 65 */
+/* 79 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var mapCacheClear = __webpack_require__(356),
-    mapCacheDelete = __webpack_require__(363),
-    mapCacheGet = __webpack_require__(365),
-    mapCacheHas = __webpack_require__(366),
-    mapCacheSet = __webpack_require__(367);
+var mapCacheClear = __webpack_require__(398),
+    mapCacheDelete = __webpack_require__(405),
+    mapCacheGet = __webpack_require__(407),
+    mapCacheHas = __webpack_require__(408),
+    mapCacheSet = __webpack_require__(409);
 
 /**
  * Creates a map cache object to store key-value pairs.
@@ -40552,11 +40801,11 @@ module.exports = MapCache;
 
 
 /***/ }),
-/* 66 */
+/* 80 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var castPath = __webpack_require__(47),
-    toKey = __webpack_require__(32);
+var castPath = __webpack_require__(57),
+    toKey = __webpack_require__(39);
 
 /**
  * The base implementation of `_.get` without support for default values.
@@ -40582,11 +40831,11 @@ module.exports = baseGet;
 
 
 /***/ }),
-/* 67 */
+/* 81 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isArray = __webpack_require__(15),
-    isSymbol = __webpack_require__(38);
+var isArray = __webpack_require__(16),
+    isSymbol = __webpack_require__(48);
 
 /** Used to match property names within property paths. */
 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
@@ -40617,11 +40866,134 @@ module.exports = isKey;
 
 
 /***/ }),
-/* 68 */
+/* 82 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+  try {
+    return !!exec();
+  } catch (e) {
+    return true;
+  }
+};
+
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(41);
+var document = __webpack_require__(13).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+  return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+  if (it == undefined) throw TypeError("Can't call method on  " + it);
+  return it;
+};
+
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(457);
+var defined = __webpack_require__(84);
+module.exports = function (it) {
+  return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 87 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(144)('keys');
+var uid = __webpack_require__(145);
+module.exports = function (key) {
+  return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 88 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 89 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(465), __esModule: true };
+
+/***/ }),
+/* 90 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(40).f;
+var has = __webpack_require__(60);
+var TAG = __webpack_require__(17)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 91 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// 25.4.1.5 NewPromiseCapability(C)
+var aFunction = __webpack_require__(59);
+
+function PromiseCapability(C) {
+  var resolve, reject;
+  this.promise = new C(function ($$resolve, $$reject) {
+    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
+    resolve = $$resolve;
+    reject = $$reject;
+  });
+  this.resolve = aFunction(resolve);
+  this.reject = aFunction(reject);
+}
+
+module.exports.f = function (C) {
+  return new PromiseCapability(C);
+};
+
+
+/***/ }),
+/* 92 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseValues = __webpack_require__(325),
-    keys = __webpack_require__(26);
+var baseValues = __webpack_require__(367),
+    keys = __webpack_require__(33);
 
 /**
  * Creates an array of the own enumerable string keyed property values of `object`.
@@ -40657,13 +41029,13 @@ module.exports = values;
 
 
 /***/ }),
-/* 69 */
+/* 93 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseRest = __webpack_require__(85),
-    createWrap = __webpack_require__(326),
-    getHolder = __webpack_require__(63),
-    replaceHolders = __webpack_require__(42);
+var baseRest = __webpack_require__(109),
+    createWrap = __webpack_require__(368),
+    getHolder = __webpack_require__(77),
+    replaceHolders = __webpack_require__(52);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_PARTIAL_FLAG = 32;
@@ -40713,7 +41085,7 @@ module.exports = partial;
 
 
 /***/ }),
-/* 70 */
+/* 94 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var __WEBPACK_AMD_DEFINE_RESULT__;/* global window, exports, define */
@@ -40986,7 +41358,7 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/* global window, exports, define */
 }(); // eslint-disable-line
 
 /***/ }),
-/* 71 */
+/* 95 */
 /***/ (function(module, exports) {
 
 /*
@@ -42236,7 +42608,7 @@ try{
 
 
 /***/ }),
-/* 72 */
+/* 96 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
@@ -42244,10 +42616,10 @@ var freeGlobal = typeof global == 'object' && global && global.Object === Object
 
 module.exports = freeGlobal;
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 73 */
+/* 97 */
 /***/ (function(module, exports) {
 
 /**
@@ -42275,15 +42647,15 @@ module.exports = arrayEach;
 
 
 /***/ }),
-/* 74 */
+/* 98 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseTimes = __webpack_require__(300),
-    isArguments = __webpack_require__(75),
-    isArray = __webpack_require__(15),
-    isBuffer = __webpack_require__(76),
-    isIndex = __webpack_require__(30),
-    isTypedArray = __webpack_require__(77);
+var baseTimes = __webpack_require__(342),
+    isArguments = __webpack_require__(99),
+    isArray = __webpack_require__(16),
+    isBuffer = __webpack_require__(100),
+    isIndex = __webpack_require__(37),
+    isTypedArray = __webpack_require__(101);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -42330,11 +42702,11 @@ module.exports = arrayLikeKeys;
 
 
 /***/ }),
-/* 75 */
+/* 99 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsArguments = __webpack_require__(301),
-    isObjectLike = __webpack_require__(19);
+var baseIsArguments = __webpack_require__(343),
+    isObjectLike = __webpack_require__(23);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -42372,11 +42744,11 @@ module.exports = isArguments;
 
 
 /***/ }),
-/* 76 */
+/* 100 */
 /***/ (function(module, exports, __webpack_require__) {
 
-/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(10),
-    stubFalse = __webpack_require__(302);
+/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(11),
+    stubFalse = __webpack_require__(344);
 
 /** Detect free variable `exports`. */
 var freeExports =  true && exports && !exports.nodeType && exports;
@@ -42414,15 +42786,15 @@ var isBuffer = nativeIsBuffer || stubFalse;
 
 module.exports = isBuffer;
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(36)(module)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(46)(module)))
 
 /***/ }),
-/* 77 */
+/* 101 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsTypedArray = __webpack_require__(303),
-    baseUnary = __webpack_require__(304),
-    nodeUtil = __webpack_require__(305);
+var baseIsTypedArray = __webpack_require__(345),
+    baseUnary = __webpack_require__(346),
+    nodeUtil = __webpack_require__(347);
 
 /* Node.js helper references. */
 var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
@@ -42450,11 +42822,11 @@ module.exports = isTypedArray;
 
 
 /***/ }),
-/* 78 */
+/* 102 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isPrototype = __webpack_require__(79),
-    nativeKeys = __webpack_require__(306);
+var isPrototype = __webpack_require__(103),
+    nativeKeys = __webpack_require__(348);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -42486,7 +42858,7 @@ module.exports = baseKeys;
 
 
 /***/ }),
-/* 79 */
+/* 103 */
 /***/ (function(module, exports) {
 
 /** Used for built-in method references. */
@@ -42510,7 +42882,7 @@ module.exports = isPrototype;
 
 
 /***/ }),
-/* 80 */
+/* 104 */
 /***/ (function(module, exports) {
 
 /**
@@ -42531,11 +42903,11 @@ module.exports = overArg;
 
 
 /***/ }),
-/* 81 */
+/* 105 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseAssignValue = __webpack_require__(82),
-    eq = __webpack_require__(40);
+var baseAssignValue = __webpack_require__(106),
+    eq = __webpack_require__(50);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -42565,10 +42937,10 @@ module.exports = assignValue;
 
 
 /***/ }),
-/* 82 */
+/* 106 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var defineProperty = __webpack_require__(83);
+var defineProperty = __webpack_require__(107);
 
 /**
  * The base implementation of `assignValue` and `assignMergeValue` without
@@ -42596,10 +42968,10 @@ module.exports = baseAssignValue;
 
 
 /***/ }),
-/* 83 */
+/* 107 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22);
+var getNative = __webpack_require__(26);
 
 var defineProperty = (function() {
   try {
@@ -42613,7 +42985,7 @@ module.exports = defineProperty;
 
 
 /***/ }),
-/* 84 */
+/* 108 */
 /***/ (function(module, exports) {
 
 /** Used for built-in method references. */
@@ -42645,12 +43017,12 @@ module.exports = toSource;
 
 
 /***/ }),
-/* 85 */
+/* 109 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var identity = __webpack_require__(31),
-    overRest = __webpack_require__(316),
-    setToString = __webpack_require__(86);
+var identity = __webpack_require__(38),
+    overRest = __webpack_require__(358),
+    setToString = __webpack_require__(110);
 
 /**
  * The base implementation of `_.rest` which doesn't validate or coerce arguments.
@@ -42668,11 +43040,11 @@ module.exports = baseRest;
 
 
 /***/ }),
-/* 86 */
+/* 110 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseSetToString = __webpack_require__(317),
-    shortOut = __webpack_require__(87);
+var baseSetToString = __webpack_require__(359),
+    shortOut = __webpack_require__(111);
 
 /**
  * Sets the `toString` method of `func` to return `string`.
@@ -42688,7 +43060,7 @@ module.exports = setToString;
 
 
 /***/ }),
-/* 87 */
+/* 111 */
 /***/ (function(module, exports) {
 
 /** Used to detect hot functions by number of calls within a span of milliseconds. */
@@ -42731,12 +43103,12 @@ module.exports = shortOut;
 
 
 /***/ }),
-/* 88 */
+/* 112 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayLikeKeys = __webpack_require__(74),
-    baseKeysIn = __webpack_require__(320),
-    isArrayLike = __webpack_require__(25);
+var arrayLikeKeys = __webpack_require__(98),
+    baseKeysIn = __webpack_require__(362),
+    isArrayLike = __webpack_require__(29);
 
 /**
  * Creates an array of the own and inherited enumerable property names of `object`.
@@ -42769,12 +43141,12 @@ module.exports = keysIn;
 
 
 /***/ }),
-/* 89 */
+/* 113 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseFindIndex = __webpack_require__(322),
-    baseIsNaN = __webpack_require__(323),
-    strictIndexOf = __webpack_require__(324);
+var baseFindIndex = __webpack_require__(364),
+    baseIsNaN = __webpack_require__(365),
+    strictIndexOf = __webpack_require__(366);
 
 /**
  * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
@@ -42795,12 +43167,12 @@ module.exports = baseIndexOf;
 
 
 /***/ }),
-/* 90 */
+/* 114 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isArray = __webpack_require__(15),
-    isObjectLike = __webpack_require__(19);
+var baseGetTag = __webpack_require__(25),
+    isArray = __webpack_require__(16),
+    isObjectLike = __webpack_require__(23);
 
 /** `Object#toString` result references. */
 var stringTag = '[object String]';
@@ -42831,11 +43203,11 @@ module.exports = isString;
 
 
 /***/ }),
-/* 91 */
+/* 115 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var identity = __webpack_require__(31),
-    metaMap = __webpack_require__(92);
+var identity = __webpack_require__(38),
+    metaMap = __webpack_require__(116);
 
 /**
  * The base implementation of `setData` without support for hot loop shorting.
@@ -42854,10 +43226,10 @@ module.exports = baseSetData;
 
 
 /***/ }),
-/* 92 */
+/* 116 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var WeakMap = __webpack_require__(93);
+var WeakMap = __webpack_require__(117);
 
 /** Used to store function metadata. */
 var metaMap = WeakMap && new WeakMap;
@@ -42866,11 +43238,11 @@ module.exports = metaMap;
 
 
 /***/ }),
-/* 93 */
+/* 117 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22),
-    root = __webpack_require__(10);
+var getNative = __webpack_require__(26),
+    root = __webpack_require__(11);
 
 /* Built-in method references that are verified to be native. */
 var WeakMap = getNative(root, 'WeakMap');
@@ -42879,18 +43251,18 @@ module.exports = WeakMap;
 
 
 /***/ }),
-/* 94 */
+/* 118 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var composeArgs = __webpack_require__(95),
-    composeArgsRight = __webpack_require__(96),
-    countHolders = __webpack_require__(329),
-    createCtor = __webpack_require__(41),
-    createRecurry = __webpack_require__(97),
-    getHolder = __webpack_require__(63),
-    reorder = __webpack_require__(340),
-    replaceHolders = __webpack_require__(42),
-    root = __webpack_require__(10);
+var composeArgs = __webpack_require__(119),
+    composeArgsRight = __webpack_require__(120),
+    countHolders = __webpack_require__(371),
+    createCtor = __webpack_require__(51),
+    createRecurry = __webpack_require__(121),
+    getHolder = __webpack_require__(77),
+    reorder = __webpack_require__(382),
+    replaceHolders = __webpack_require__(52),
+    root = __webpack_require__(11);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_BIND_FLAG = 1,
@@ -42977,7 +43349,7 @@ module.exports = createHybrid;
 
 
 /***/ }),
-/* 95 */
+/* 119 */
 /***/ (function(module, exports) {
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
@@ -43022,7 +43394,7 @@ module.exports = composeArgs;
 
 
 /***/ }),
-/* 96 */
+/* 120 */
 /***/ (function(module, exports) {
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
@@ -43069,12 +43441,12 @@ module.exports = composeArgsRight;
 
 
 /***/ }),
-/* 97 */
+/* 121 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isLaziable = __webpack_require__(330),
-    setData = __webpack_require__(101),
-    setWrapToString = __webpack_require__(102);
+var isLaziable = __webpack_require__(372),
+    setData = __webpack_require__(125),
+    setWrapToString = __webpack_require__(126);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_BIND_FLAG = 1,
@@ -43131,11 +43503,11 @@ module.exports = createRecurry;
 
 
 /***/ }),
-/* 98 */
+/* 122 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var metaMap = __webpack_require__(92),
-    noop = __webpack_require__(331);
+var metaMap = __webpack_require__(116),
+    noop = __webpack_require__(373);
 
 /**
  * Gets metadata for `func`.
@@ -43152,11 +43524,11 @@ module.exports = getData;
 
 
 /***/ }),
-/* 99 */
+/* 123 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseCreate = __webpack_require__(60),
-    baseLodash = __webpack_require__(62);
+var baseCreate = __webpack_require__(74),
+    baseLodash = __webpack_require__(76);
 
 /**
  * The base constructor for creating `lodash` wrapper objects.
@@ -43180,7 +43552,7 @@ module.exports = LodashWrapper;
 
 
 /***/ }),
-/* 100 */
+/* 124 */
 /***/ (function(module, exports) {
 
 /**
@@ -43206,11 +43578,11 @@ module.exports = copyArray;
 
 
 /***/ }),
-/* 101 */
+/* 125 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseSetData = __webpack_require__(91),
-    shortOut = __webpack_require__(87);
+var baseSetData = __webpack_require__(115),
+    shortOut = __webpack_require__(111);
 
 /**
  * Sets metadata for `func`.
@@ -43232,13 +43604,13 @@ module.exports = setData;
 
 
 /***/ }),
-/* 102 */
+/* 126 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getWrapDetails = __webpack_require__(336),
-    insertWrapDetails = __webpack_require__(337),
-    setToString = __webpack_require__(86),
-    updateWrapDetails = __webpack_require__(338);
+var getWrapDetails = __webpack_require__(378),
+    insertWrapDetails = __webpack_require__(379),
+    setToString = __webpack_require__(110),
+    updateWrapDetails = __webpack_require__(380);
 
 /**
  * Sets the `toString` method of `wrapper` to mimic the source of `reference`
@@ -43259,15 +43631,15 @@ module.exports = setWrapToString;
 
 
 /***/ }),
-/* 103 */
+/* 127 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var ListCache = __webpack_require__(43),
-    stackClear = __webpack_require__(351),
-    stackDelete = __webpack_require__(352),
-    stackGet = __webpack_require__(353),
-    stackHas = __webpack_require__(354),
-    stackSet = __webpack_require__(355);
+var ListCache = __webpack_require__(53),
+    stackClear = __webpack_require__(393),
+    stackDelete = __webpack_require__(394),
+    stackGet = __webpack_require__(395),
+    stackHas = __webpack_require__(396),
+    stackSet = __webpack_require__(397);
 
 /**
  * Creates a stack cache object to store key-value pairs.
@@ -43292,11 +43664,11 @@ module.exports = Stack;
 
 
 /***/ }),
-/* 104 */
+/* 128 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsEqualDeep = __webpack_require__(368),
-    isObjectLike = __webpack_require__(19);
+var baseIsEqualDeep = __webpack_require__(410),
+    isObjectLike = __webpack_require__(23);
 
 /**
  * The base implementation of `_.isEqual` which supports partial comparisons
@@ -43326,12 +43698,12 @@ module.exports = baseIsEqual;
 
 
 /***/ }),
-/* 105 */
+/* 129 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var SetCache = __webpack_require__(369),
-    arraySome = __webpack_require__(372),
-    cacheHas = __webpack_require__(373);
+var SetCache = __webpack_require__(411),
+    arraySome = __webpack_require__(414),
+    cacheHas = __webpack_require__(415);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1,
@@ -43416,11 +43788,11 @@ module.exports = equalArrays;
 
 
 /***/ }),
-/* 106 */
+/* 130 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayPush = __webpack_require__(107),
-    isArray = __webpack_require__(15);
+var arrayPush = __webpack_require__(131),
+    isArray = __webpack_require__(16);
 
 /**
  * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
@@ -43442,7 +43814,7 @@ module.exports = baseGetAllKeys;
 
 
 /***/ }),
-/* 107 */
+/* 131 */
 /***/ (function(module, exports) {
 
 /**
@@ -43468,11 +43840,11 @@ module.exports = arrayPush;
 
 
 /***/ }),
-/* 108 */
+/* 132 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayFilter = __webpack_require__(380),
-    stubArray = __webpack_require__(109);
+var arrayFilter = __webpack_require__(422),
+    stubArray = __webpack_require__(133);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -43504,7 +43876,7 @@ module.exports = getSymbols;
 
 
 /***/ }),
-/* 109 */
+/* 133 */
 /***/ (function(module, exports) {
 
 /**
@@ -43533,16 +43905,16 @@ module.exports = stubArray;
 
 
 /***/ }),
-/* 110 */
+/* 134 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var DataView = __webpack_require__(381),
-    Map = __webpack_require__(64),
-    Promise = __webpack_require__(382),
-    Set = __webpack_require__(383),
-    WeakMap = __webpack_require__(93),
-    baseGetTag = __webpack_require__(21),
-    toSource = __webpack_require__(84);
+var DataView = __webpack_require__(423),
+    Map = __webpack_require__(78),
+    Promise = __webpack_require__(424),
+    Set = __webpack_require__(425),
+    WeakMap = __webpack_require__(117),
+    baseGetTag = __webpack_require__(25),
+    toSource = __webpack_require__(108);
 
 /** `Object#toString` result references. */
 var mapTag = '[object Map]',
@@ -43597,10 +43969,10 @@ module.exports = getTag;
 
 
 /***/ }),
-/* 111 */
+/* 135 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isObject = __webpack_require__(17);
+var isObject = __webpack_require__(20);
 
 /**
  * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
@@ -43618,7 +43990,7 @@ module.exports = isStrictComparable;
 
 
 /***/ }),
-/* 112 */
+/* 136 */
 /***/ (function(module, exports) {
 
 /**
@@ -43644,10 +44016,10 @@ module.exports = matchesStrictComparable;
 
 
 /***/ }),
-/* 113 */
+/* 137 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseToString = __webpack_require__(390);
+var baseToString = __webpack_require__(432);
 
 /**
  * Converts `value` to a string. An empty string is returned for `null`
@@ -43678,7 +44050,7 @@ module.exports = toString;
 
 
 /***/ }),
-/* 114 */
+/* 138 */
 /***/ (function(module, exports) {
 
 /**
@@ -43698,11 +44070,625 @@ module.exports = baseProperty;
 
 
 /***/ }),
-/* 115 */
+/* 139 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _defineProperty2 = __webpack_require__(447);
+
+var _defineProperty3 = _interopRequireDefault(_defineProperty2);
+
+var _keys = __webpack_require__(453);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _regenerator = __webpack_require__(461);
+
+var _regenerator2 = _interopRequireDefault(_regenerator);
+
+var _asyncToGenerator2 = __webpack_require__(464);
+
+var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
+
+var _promise = __webpack_require__(89);
+
+var _promise2 = _interopRequireDefault(_promise);
+
+exports.default = createDriver;
+
+var _utils = __webpack_require__(492);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function createDriver(name, property) {
+  var storage = (0, _utils.getStorage)();
+  var support = !!(storage && storage[property]);
+
+  var driver = support ? storage[property] : {
+    clear: function clear() {},
+    get: function get() {},
+    remove: function remove() {},
+    set: function set() {}
+  };
+  var _clear = driver.clear.bind(driver);
+  var get = driver.get.bind(driver);
+  var remove = driver.remove.bind(driver);
+  var set = driver.set.bind(driver);
+
+  return {
+    _driver: name,
+    _support: support,
+    _initStorage: function _initStorage() {
+      return _promise2.default.resolve();
+    },
+    clear: function clear(callback) {
+      var _this = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
+        return _regenerator2.default.wrap(function _callee$(_context) {
+          while (1) {
+            switch (_context.prev = _context.next) {
+              case 0:
+                _clear();
+
+                if (callback) callback();
+
+              case 2:
+              case 'end':
+                return _context.stop();
+            }
+          }
+        }, _callee, _this);
+      }))();
+    },
+    iterate: function iterate(iterator, callback) {
+      var _this2 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
+        var items, keys;
+        return _regenerator2.default.wrap(function _callee2$(_context2) {
+          while (1) {
+            switch (_context2.prev = _context2.next) {
+              case 0:
+                _context2.next = 2;
+                return (0, _utils.usePromise)(get, null);
+
+              case 2:
+                items = _context2.sent;
+                keys = (0, _keys2.default)(items);
+
+                keys.forEach(function (key, i) {
+                  return iterator(items[key], key, i);
+                });
+
+                if (callback) callback();
+
+              case 6:
+              case 'end':
+                return _context2.stop();
+            }
+          }
+        }, _callee2, _this2);
+      }))();
+    },
+    getItem: function getItem(key, callback) {
+      var _this3 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
+        var result;
+        return _regenerator2.default.wrap(function _callee3$(_context3) {
+          while (1) {
+            switch (_context3.prev = _context3.next) {
+              case 0:
+                _context3.prev = 0;
+                _context3.next = 3;
+                return (0, _utils.usePromise)(get, key);
+
+              case 3:
+                result = _context3.sent;
+
+                result = typeof key === 'string' ? result[key] : result;
+                result = result === undefined ? null : result;
+
+                if (callback) callback(null, result);
+                return _context3.abrupt('return', result);
+
+              case 10:
+                _context3.prev = 10;
+                _context3.t0 = _context3['catch'](0);
+
+                if (callback) callback(_context3.t0);
+                throw _context3.t0;
+
+              case 14:
+              case 'end':
+                return _context3.stop();
+            }
+          }
+        }, _callee3, _this3, [[0, 10]]);
+      }))();
+    },
+    key: function key(n, callback) {
+      var _this4 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
+        var results, key;
+        return _regenerator2.default.wrap(function _callee4$(_context4) {
+          while (1) {
+            switch (_context4.prev = _context4.next) {
+              case 0:
+                _context4.next = 2;
+                return (0, _utils.usePromise)(get, null);
+
+              case 2:
+                results = _context4.sent;
+                key = (0, _keys2.default)(results)[n];
+
+
+                if (callback) callback(key);
+                return _context4.abrupt('return', key);
+
+              case 6:
+              case 'end':
+                return _context4.stop();
+            }
+          }
+        }, _callee4, _this4);
+      }))();
+    },
+    keys: function keys(callback) {
+      var _this5 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
+        var results, keys;
+        return _regenerator2.default.wrap(function _callee5$(_context5) {
+          while (1) {
+            switch (_context5.prev = _context5.next) {
+              case 0:
+                _context5.next = 2;
+                return (0, _utils.usePromise)(get, null);
+
+              case 2:
+                results = _context5.sent;
+                keys = (0, _keys2.default)(results);
+
+
+                if (callback) callback(keys);
+                return _context5.abrupt('return', keys);
+
+              case 6:
+              case 'end':
+                return _context5.stop();
+            }
+          }
+        }, _callee5, _this5);
+      }))();
+    },
+    length: function length(callback) {
+      var _this6 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
+        var results, length;
+        return _regenerator2.default.wrap(function _callee6$(_context6) {
+          while (1) {
+            switch (_context6.prev = _context6.next) {
+              case 0:
+                _context6.next = 2;
+                return (0, _utils.usePromise)(get, null);
+
+              case 2:
+                results = _context6.sent;
+                length = (0, _keys2.default)(results).length;
+
+
+                if (callback) callback(length);
+                return _context6.abrupt('return', length);
+
+              case 6:
+              case 'end':
+                return _context6.stop();
+            }
+          }
+        }, _callee6, _this6);
+      }))();
+    },
+    removeItem: function removeItem(key, callback) {
+      var _this7 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() {
+        return _regenerator2.default.wrap(function _callee7$(_context7) {
+          while (1) {
+            switch (_context7.prev = _context7.next) {
+              case 0:
+                _context7.next = 2;
+                return (0, _utils.usePromise)(remove, key);
+
+              case 2:
+                if (callback) callback();
+
+              case 3:
+              case 'end':
+                return _context7.stop();
+            }
+          }
+        }, _callee7, _this7);
+      }))();
+    },
+    setItem: function setItem(key, value, callback) {
+      var _this8 = this;
+
+      return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8() {
+        return _regenerator2.default.wrap(function _callee8$(_context8) {
+          while (1) {
+            switch (_context8.prev = _context8.next) {
+              case 0:
+                _context8.next = 2;
+                return (0, _utils.usePromise)(set, (0, _defineProperty3.default)({}, key, value));
+
+              case 2:
+                if (callback) callback();
+
+              case 3:
+              case 'end':
+                return _context8.stop();
+            }
+          }
+        }, _callee8, _this8);
+      }))();
+    }
+  };
+}
+
+/***/ }),
+/* 140 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+  return {
+    enumerable: !(bitmap & 1),
+    configurable: !(bitmap & 2),
+    writable: !(bitmap & 4),
+    value: value
+  };
+};
+
+
+/***/ }),
+/* 141 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(84);
+module.exports = function (it) {
+  return Object(defined(it));
+};
+
+
+/***/ }),
+/* 142 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(456);
+var enumBugKeys = __webpack_require__(146);
+
+module.exports = Object.keys || function keys(O) {
+  return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 143 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(86);
+var min = Math.min;
+module.exports = function (it) {
+  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 144 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(19);
+var global = __webpack_require__(13);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+  return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+  version: core.version,
+  mode: __webpack_require__(88) ? 'pure' : 'global',
+  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 145 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 146 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 147 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(88);
+var $export = __webpack_require__(30);
+var redefine = __webpack_require__(469);
+var hide = __webpack_require__(31);
+var Iterators = __webpack_require__(42);
+var $iterCreate = __webpack_require__(470);
+var setToStringTag = __webpack_require__(90);
+var getPrototypeOf = __webpack_require__(473);
+var ITERATOR = __webpack_require__(17)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+  $iterCreate(Constructor, NAME, next);
+  var getMethod = function (kind) {
+    if (!BUGGY && kind in proto) return proto[kind];
+    switch (kind) {
+      case KEYS: return function keys() { return new Constructor(this, kind); };
+      case VALUES: return function values() { return new Constructor(this, kind); };
+    } return function entries() { return new Constructor(this, kind); };
+  };
+  var TAG = NAME + ' Iterator';
+  var DEF_VALUES = DEFAULT == VALUES;
+  var VALUES_BUG = false;
+  var proto = Base.prototype;
+  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+  var $default = $native || getMethod(DEFAULT);
+  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+  var methods, key, IteratorPrototype;
+  // Fix native
+  if ($anyNative) {
+    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+      // Set @@toStringTag to native iterators
+      setToStringTag(IteratorPrototype, TAG, true);
+      // fix for some old engines
+      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+    }
+  }
+  // fix Array#{values, @@iterator}.name in V8 / FF
+  if (DEF_VALUES && $native && $native.name !== VALUES) {
+    VALUES_BUG = true;
+    $default = function values() { return $native.call(this); };
+  }
+  // Define iterator
+  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+    hide(proto, ITERATOR, $default);
+  }
+  // Plug for library
+  Iterators[NAME] = $default;
+  Iterators[TAG] = returnThis;
+  if (DEFAULT) {
+    methods = {
+      values: DEF_VALUES ? $default : getMethod(VALUES),
+      keys: IS_SET ? $default : getMethod(KEYS),
+      entries: $entries
+    };
+    if (FORCED) for (key in methods) {
+      if (!(key in proto)) redefine(proto, key, methods[key]);
+    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+  }
+  return methods;
+};
+
+
+/***/ }),
+/* 148 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(13).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 149 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// getting tag from 19.1.3.6 Object.prototype.toString()
+var cof = __webpack_require__(61);
+var TAG = __webpack_require__(17)('toStringTag');
+// ES3 wrong here
+var ARG = cof(function () { return arguments; }()) == 'Arguments';
+
+// fallback for IE11 Script Access Denied error
+var tryGet = function (it, key) {
+  try {
+    return it[key];
+  } catch (e) { /* empty */ }
+};
+
+module.exports = function (it) {
+  var O, T, B;
+  return it === undefined ? 'Undefined' : it === null ? 'Null'
+    // @@toStringTag case
+    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+    // builtinTag case
+    : ARG ? cof(O)
+    // ES3 arguments fallback
+    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+};
+
+
+/***/ }),
+/* 150 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.3.20 SpeciesConstructor(O, defaultConstructor)
+var anObject = __webpack_require__(27);
+var aFunction = __webpack_require__(59);
+var SPECIES = __webpack_require__(17)('species');
+module.exports = function (O, D) {
+  var C = anObject(O).constructor;
+  var S;
+  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
+};
+
+
+/***/ }),
+/* 151 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var ctx = __webpack_require__(58);
+var invoke = __webpack_require__(484);
+var html = __webpack_require__(148);
+var cel = __webpack_require__(83);
+var global = __webpack_require__(13);
+var process = global.process;
+var setTask = global.setImmediate;
+var clearTask = global.clearImmediate;
+var MessageChannel = global.MessageChannel;
+var Dispatch = global.Dispatch;
+var counter = 0;
+var queue = {};
+var ONREADYSTATECHANGE = 'onreadystatechange';
+var defer, channel, port;
+var run = function () {
+  var id = +this;
+  // eslint-disable-next-line no-prototype-builtins
+  if (queue.hasOwnProperty(id)) {
+    var fn = queue[id];
+    delete queue[id];
+    fn();
+  }
+};
+var listener = function (event) {
+  run.call(event.data);
+};
+// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
+if (!setTask || !clearTask) {
+  setTask = function setImmediate(fn) {
+    var args = [];
+    var i = 1;
+    while (arguments.length > i) args.push(arguments[i++]);
+    queue[++counter] = function () {
+      // eslint-disable-next-line no-new-func
+      invoke(typeof fn == 'function' ? fn : Function(fn), args);
+    };
+    defer(counter);
+    return counter;
+  };
+  clearTask = function clearImmediate(id) {
+    delete queue[id];
+  };
+  // Node.js 0.8-
+  if (__webpack_require__(61)(process) == 'process') {
+    defer = function (id) {
+      process.nextTick(ctx(run, id, 1));
+    };
+  // Sphere (JS game engine) Dispatch API
+  } else if (Dispatch && Dispatch.now) {
+    defer = function (id) {
+      Dispatch.now(ctx(run, id, 1));
+    };
+  // Browsers with MessageChannel, includes WebWorkers
+  } else if (MessageChannel) {
+    channel = new MessageChannel();
+    port = channel.port2;
+    channel.port1.onmessage = listener;
+    defer = ctx(port.postMessage, port, 1);
+  // Browsers with postMessage, skip WebWorkers
+  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
+  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
+    defer = function (id) {
+      global.postMessage(id + '', '*');
+    };
+    global.addEventListener('message', listener, false);
+  // IE8-
+  } else if (ONREADYSTATECHANGE in cel('script')) {
+    defer = function (id) {
+      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
+        html.removeChild(this);
+        run.call(id);
+      };
+    };
+  // Rest old browsers
+  } else {
+    defer = function (id) {
+      setTimeout(ctx(run, id, 1), 0);
+    };
+  }
+}
+module.exports = {
+  set: setTask,
+  clear: clearTask
+};
+
+
+/***/ }),
+/* 152 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+  try {
+    return { e: false, v: exec() };
+  } catch (e) {
+    return { e: true, v: e };
+  }
+};
+
+
+/***/ }),
+/* 153 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(27);
+var isObject = __webpack_require__(41);
+var newPromiseCapability = __webpack_require__(91);
+
+module.exports = function (C, x) {
+  anObject(C);
+  if (isObject(x) && x.constructor === C) return x;
+  var promiseCapability = newPromiseCapability.f(C);
+  var resolve = promiseCapability.resolve;
+  resolve(x);
+  return promiseCapability.promise;
+};
+
+
+/***/ }),
+/* 154 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);
 /* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
 /*
     This program is distributed under the terms of the MIT license.
@@ -44706,7 +45692,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Bosh = class Bosh {
 _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Bosh.prototype.strip = null;
 
 /***/ }),
-/* 116 */
+/* 155 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.0 by @mathias */
@@ -45253,10 +46239,10 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Bosh.prototype.strip = nul
 				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
   } else {}
 })(this);
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(36)(module), __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(46)(module), __webpack_require__(12)))
 
 /***/ }),
-/* 117 */
+/* 156 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -45448,7 +46434,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 });
 
 /***/ }),
-/* 118 */
+/* 157 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -45637,7 +46623,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
     // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4
     // Following methods use lastIndexOf() rather than array.split() in order
     // to avoid any memory allocations.
-    has: function has(domain) {
+    has: function (domain) {
       var tldOffset = domain.lastIndexOf('.');
 
       if (tldOffset <= 0 || tldOffset >= domain.length - 1) {
@@ -45658,7 +46644,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 
       return sldList.indexOf(' ' + domain.slice(sldOffset + 1, tldOffset) + ' ') >= 0;
     },
-    is: function is(domain) {
+    is: function (domain) {
       var tldOffset = domain.lastIndexOf('.');
 
       if (tldOffset <= 0 || tldOffset >= domain.length - 1) {
@@ -45679,7 +46665,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 
       return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;
     },
-    get: function get(domain) {
+    get: function (domain) {
       var tldOffset = domain.lastIndexOf('.');
 
       if (tldOffset <= 0 || tldOffset >= domain.length - 1) {
@@ -45704,7 +46690,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 
       return domain.slice(sldOffset + 1);
     },
-    noConflict: function noConflict() {
+    noConflict: function () {
       if (root.SecondLevelDomains === this) {
         root.SecondLevelDomains = _SecondLevelDomains;
       }
@@ -45716,12 +46702,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 });
 
 /***/ }),
-/* 119 */
+/* 158 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14);
-/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
+/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9);
+/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
 /*
     This program is distributed under the terms of the MIT license.
     Please see the LICENSE file for details.
@@ -45730,7 +46716,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 */
 
 /* global window, clearTimeout, WebSocket, DOMParser */
- // eslint-disable-line no-unused-vars
 
 
 /** Class: Strophe.WebSocket
@@ -45752,7 +46737,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  *  WebSocket support implemented by Andreas Guth (andreas.guth@rwth-aachen.de)
  */
 
-_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocket {
+_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Websocket = class Websocket {
   /** PrivateConstructor: Strophe.Websocket
    *  Create and initialize a Strophe.WebSocket object.
    *  Currently only sets the connection Object.
@@ -45800,7 +46785,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
   _buildStream() {
     return Object(_core__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])("open", {
-      "xmlns": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.FRAMING,
+      "xmlns": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.FRAMING,
       "to": this._conn.domain,
       "version": '1.0'
     });
@@ -45820,7 +46805,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
     let errors;
 
     if (bodyWrap.getElementsByTagNameNS) {
-      errors = bodyWrap.getElementsByTagNameNS(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.STREAM, "error");
+      errors = bodyWrap.getElementsByTagNameNS(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.STREAM, "error");
     } else {
       errors = bodyWrap.getElementsByTagName("stream:error");
     }
@@ -45860,7 +46845,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
       errorString += " - " + text;
     }
 
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error(errorString); // close the connection on stream_error
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error(errorString); // close the connection on stream_error
 
     this._conn._changeConnectStatus(connectstatus, condition);
 
@@ -45892,7 +46877,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
     // Ensure that there is no open WebSocket from a previous Connection.
     this._closeSocket();
 
-    this.socket = new WebSocket(this._conn.service, "xmpp");
+    this.socket = new _shims__WEBPACK_IMPORTED_MODULE_0__[/* WebSocket */ "b"](this._conn.service, "xmpp");
 
     this.socket.onopen = () => this._onOpen();
 
@@ -45914,10 +46899,10 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _connect_cb(bodyWrap) {
-    const error = this._checkStreamError(bodyWrap, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL);
+    const error = this._checkStreamError(bodyWrap, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL);
 
     if (error) {
-      return _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL;
+      return _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL;
     }
   }
   /** PrivateFunction: _handleStreamStart
@@ -45937,7 +46922,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
     if (typeof ns !== "string") {
       error = "Missing xmlns in <open />";
-    } else if (ns !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.FRAMING) {
+    } else if (ns !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.FRAMING) {
       error = "Wrong xmlns in <open />: " + ns;
     }
 
@@ -45950,7 +46935,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
     }
 
     if (error) {
-      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, error);
+      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, error);
 
       this._conn._doDisconnect();
 
@@ -46000,7 +46985,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
         const isSecureRedirect = service.indexOf("wss:") >= 0 && see_uri.indexOf("wss:") >= 0 || service.indexOf("ws:") >= 0;
 
         if (isSecureRedirect) {
-          this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.REDIRECT, "Received see-other-uri, resetting connection");
+          this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.REDIRECT, "Received see-other-uri, resetting connection");
 
           this._conn.reset();
 
@@ -46009,7 +46994,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
           this._connect();
         }
       } else {
-        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "Received closing stream");
+        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "Received closing stream");
 
         this._conn._doDisconnect();
       }
@@ -46046,25 +47031,25 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _disconnect(pres) {
-    if (this.socket && this.socket.readyState !== WebSocket.CLOSED) {
+    if (this.socket && this.socket.readyState !== _shims__WEBPACK_IMPORTED_MODULE_0__[/* WebSocket */ "b"].CLOSED) {
       if (pres) {
         this._conn.send(pres);
       }
 
       const close = Object(_core__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])("close", {
-        "xmlns": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.FRAMING
+        "xmlns": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.FRAMING
       });
 
       this._conn.xmlOutput(close.tree());
 
-      const closeString = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(close);
+      const closeString = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(close);
 
       this._conn.rawOutput(closeString);
 
       try {
         this.socket.send(closeString);
       } catch (e) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].warn("Couldn't send <close /> tag.");
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].warn("Couldn't send <close /> tag.");
       }
     }
 
@@ -46078,7 +47063,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _doDisconnect() {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("WebSockets _doDisconnect was called");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("WebSockets _doDisconnect was called");
 
     this._closeSocket();
   }
@@ -46107,7 +47092,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
         this.socket.onmessage = null;
         this.socket.close();
       } catch (e) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug(e.message);
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug(e.message);
       }
     }
 
@@ -46132,7 +47117,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
   _onClose(e) {
     if (this._conn.connected && !this._conn.disconnecting) {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Websocket closed unexpectedly");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Websocket closed unexpectedly");
 
       this._conn._doDisconnect();
     } else if (e && e.code === 1006 && !this._conn.connected && this.socket) {
@@ -46140,13 +47125,13 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
       // call onerror when the initial connection fails) we need to
       // dispatch a CONNFAIL status update to be consistent with the
       // behavior on other browsers.
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Websocket closed unexcectedly");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Websocket closed unexcectedly");
 
-      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
+      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
 
       this._conn._doDisconnect();
     } else {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("Websocket closed");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("Websocket closed");
     }
   }
   /** PrivateFunction: _no_auth_received
@@ -46157,9 +47142,9 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _no_auth_received(callback) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Server did not offer a supported authentication mechanism");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Server did not offer a supported authentication mechanism");
 
-    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].ErrorCondition.NO_AUTH_MECH);
+    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].ErrorCondition.NO_AUTH_MECH);
 
     if (callback) {
       callback.call(this._conn);
@@ -46192,9 +47177,9 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _onError(error) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Websocket error " + error);
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Websocket error " + error);
 
-    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
+    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
 
     this._disconnect();
   }
@@ -46219,7 +47204,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
             stanza = data[i];
           }
 
-          const rawStanza = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(stanza);
+          const rawStanza = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(stanza);
 
           this._conn.xmlOutput(stanza);
 
@@ -46285,7 +47270,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
       elem = new _shims__WEBPACK_IMPORTED_MODULE_0__[/* DOMParser */ "a"]().parseFromString(data, "text/xml").documentElement;
     }
 
-    if (this._checkStreamError(elem, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ERROR)) {
+    if (this._checkStreamError(elem, _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ERROR)) {
       return;
     } //handle unavailable presence stanza before disconnecting
 
@@ -46293,7 +47278,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
     if (this._conn.disconnecting && elem.firstChild.nodeName === "presence" && elem.firstChild.getAttribute("type") === "unavailable") {
       this._conn.xmlInput(elem);
 
-      this._conn.rawInput(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(elem)); // if we are already disconnecting we will ignore the unavailable stanza and
+      this._conn.rawInput(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(elem)); // if we are already disconnecting we will ignore the unavailable stanza and
       // wait for the </stream:stream> tag before we close the connection
 
 
@@ -46310,13 +47295,13 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 
 
   _onOpen() {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("Websocket open");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("Websocket open");
 
     const start = this._buildStream();
 
     this._conn.xmlOutput(start.tree());
 
-    const startString = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(start);
+    const startString = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(start);
 
     this._conn.rawOutput(startString);
 
@@ -46364,7 +47349,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket = class Websocke
 };
 
 /***/ }),
-/* 120 */
+/* 159 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -46389,11 +47374,11 @@ function stubFalse() {
 
 
 /***/ }),
-/* 121 */
+/* 160 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
+/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);
 
 
 /** Detect free variable `exports`. */
@@ -46430,21 +47415,21 @@ function cloneBuffer(buffer, isDeep) {
 
 /* harmony default export */ __webpack_exports__["a"] = (cloneBuffer);
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(55)(module)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(69)(module)))
 
 /***/ }),
-/* 122 */
+/* 161 */
 /***/ (function(module, exports, __webpack_require__) {
 
 !function(e,t){ true?module.exports=t():undefined}(this,function(){"use strict";return function(e,t,r){var n=t.prototype,o=n.format;r.en.ordinal=function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"},n.format=function(e){var t=this,r=this.$locale(),n=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|gggg|Do|X|x|k{1,2}|S/g,function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return n.s(t.week(),"w"===e?1:2,"0");case"k":case"kk":return n.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();default:return e}});return o.bind(this)(a)}}});
 
 
 /***/ }),
-/* 123 */
+/* 162 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseSlice = __webpack_require__(290),
-    toInteger = __webpack_require__(56);
+var baseSlice = __webpack_require__(332),
+    toInteger = __webpack_require__(70);
 
 /**
  * Creates a slice of `array` with `n` elements dropped from the beginning.
@@ -46484,11 +47469,11 @@ module.exports = drop;
 
 
 /***/ }),
-/* 124 */
+/* 163 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isObjectLike = __webpack_require__(19);
+var baseGetTag = __webpack_require__(25),
+    isObjectLike = __webpack_require__(23);
 
 /** `Object#toString` result references. */
 var boolTag = '[object Boolean]';
@@ -46519,7 +47504,7 @@ module.exports = isBoolean;
 
 
 /***/ }),
-/* 125 */
+/* 164 */
 /***/ (function(module, exports) {
 
 /**
@@ -46550,13 +47535,13 @@ module.exports = isNil;
 
 
 /***/ }),
-/* 126 */
+/* 165 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayMap = __webpack_require__(59),
-    baseIteratee = __webpack_require__(343),
-    basePickBy = __webpack_require__(396),
-    getAllKeysIn = __webpack_require__(398);
+var arrayMap = __webpack_require__(73),
+    baseIteratee = __webpack_require__(385),
+    basePickBy = __webpack_require__(438),
+    getAllKeysIn = __webpack_require__(440);
 
 /**
  * Creates an object composed of the `object` properties `predicate` returns
@@ -46593,14 +47578,14 @@ module.exports = pickBy;
 
 
 /***/ }),
-/* 127 */
+/* 166 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseKeys = __webpack_require__(78),
-    getTag = __webpack_require__(110),
-    isArrayLike = __webpack_require__(25),
-    isString = __webpack_require__(90),
-    stringSize = __webpack_require__(401);
+var baseKeys = __webpack_require__(102),
+    getTag = __webpack_require__(134),
+    isArrayLike = __webpack_require__(29),
+    isString = __webpack_require__(114),
+    stringSize = __webpack_require__(443);
 
 /** `Object#toString` result references. */
 var mapTag = '[object Map]',
@@ -46645,7 +47630,45 @@ module.exports = size;
 
 
 /***/ }),
-/* 128 */
+/* 167 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _driver = __webpack_require__(139);
+
+var _driver2 = _interopRequireDefault(_driver);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = (0, _driver2.default)('webExtensionSyncStorage', 'sync');
+
+/***/ }),
+/* 168 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _driver = __webpack_require__(139);
+
+var _driver2 = _interopRequireDefault(_driver);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = (0, _driver2.default)('webExtensionLocalStorage', 'local');
+
+/***/ }),
+/* 169 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -46707,10 +47730,10 @@ module.exports = size;
     };
   },  true ? module.exports = t : undefined;
 }("undefined" != typeof window ? window : global);
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 129 */
+/* 170 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46738,7 +47761,7 @@ return __p
 };
 
 /***/ }),
-/* 130 */
+/* 171 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46764,7 +47787,7 @@ return __p
 };
 
 /***/ }),
-/* 131 */
+/* 172 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46790,7 +47813,7 @@ return __p
 };
 
 /***/ }),
-/* 132 */
+/* 173 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46807,7 +47830,7 @@ return __p
 };
 
 /***/ }),
-/* 133 */
+/* 174 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46824,7 +47847,7 @@ return __p
 };
 
 /***/ }),
-/* 134 */
+/* 175 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46844,7 +47867,7 @@ return __p
 };
 
 /***/ }),
-/* 135 */
+/* 176 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -46854,23 +47877,23 @@ return __p
 */
 !function(e){var x=/^(b|B)$/,M={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},w={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function t(e){var i,t,o,n,b,r,a,l,s,d,u,c,f,p,B,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},g=[],v=0,m=void 0,h=void 0;if(isNaN(e))throw new TypeError("Invalid number");return t=!0===y.bits,u=!0===y.unix,i=y.base||2,d=void 0!==y.round?y.round:u?1:2,r=void 0!==y.locale?y.locale:"",a=y.localeOptions||{},c=void 0!==y.separator?y.separator:"",f=void 0!==y.spacer?y.spacer:u?"":" ",B=y.symbols||{},p=2===i&&y.standard||"jedec",s=y.output||"string",n=!0===y.fullform,b=y.fullforms instanceof Array?y.fullforms:[],m=void 0!==y.exponent?y.exponent:-1,o=2<i?1e3:1024,(l=(h=Number(e))<0)&&(h=-h),(-1===m||isNaN(m))&&(m=Math.floor(Math.log(h)/Math.log(o)))<0&&(m=0),8<m&&(m=8),"exponent"===s?m:(0===h?(g[0]=0,g[1]=u?"":M[p][t?"bits":"bytes"][m]):(v=h/(2===i?Math.pow(2,10*m):Math.pow(1e3,m)),t&&o<=(v*=8)&&m<8&&(v/=o,m++),g[0]=Number(v.toFixed(0<m?d:0)),g[0]===o&&m<8&&void 0===y.exponent&&(g[0]=1,m++),g[1]=10===i&&1===m?t?"kb":"kB":M[p][t?"bits":"bytes"][m],u&&(g[1]="jedec"===p?g[1].charAt(0):0<m?g[1].replace(/B$/,""):g[1],x.test(g[1])&&(g[0]=Math.floor(g[0]),g[1]=""))),l&&(g[0]=-g[0]),g[1]=B[g[1]]||g[1],!0===r?g[0]=g[0].toLocaleString():0<r.length?g[0]=g[0].toLocaleString(r,a):0<c.length&&(g[0]=g[0].toString().replace(".",c)),"array"===s?g:(n&&(g[1]=b[m]?b[m]:w[p][m]+(t?"bit":"byte")+(1===g[0]?"":"s")),"object"===s?{value:g[0],symbol:g[1],exponent:m}:g.join(f)))}t.partial=function(i){return function(e){return t(e,i)}}, true?module.exports=t:undefined}("undefined"!=typeof window?window:global);
 //# sourceMappingURL=filesize.min.js.map
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12)))
 
 /***/ }),
-/* 136 */
+/* 177 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
 module.exports = function(o) {
 var __t, __p = '', __e = _.escape;
-__p += '<!-- src/templates/controlbox_toggle.html -->\n<span class="toggle-feedback">' +
+__p += '<!-- src/plugins/controlbox/templates/toggle.html -->\n<span class="toggle-feedback">' +
 __e(o.label_toggle) +
 '</span>\n';
 return __p
 };
 
 /***/ }),
-/* 137 */
+/* 178 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46881,7 +47904,7 @@ return __p
 };
 
 /***/ }),
-/* 138 */
+/* 179 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -46973,7 +47996,777 @@ return __p
 };
 
 /***/ }),
-/* 139 */
+/* 180 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
+ * @license MIT or GPL-2.0
+ * @fileOverview Favico animations
+ * @author Miroslav Magda, http://blog.ejci.net
+ * @source: https://github.com/ejci/favico.js
+ * @version 0.3.10
+ */
+
+/**
+ * Create new favico instance
+ * @param {Object} Options
+ * @return {Object} Favico object
+ * @example
+ * var favico = new Favico({
+ *    bgColor : '#d00',
+ *    textColor : '#fff',
+ *    fontFamily : 'sans-serif',
+ *    fontStyle : 'bold',
+ *    type : 'circle',
+ *    position : 'down',
+ *    animation : 'slide',
+ *    elementId: false,
+ *    element: null,
+ *    dataUrl: function(url){},
+ *    win: window
+ * });
+ */
+(function () {
+
+	var Favico = (function (opt) {
+		'use strict';
+		opt = (opt) ? opt : {};
+		var _def = {
+			bgColor: '#d00',
+			textColor: '#fff',
+			fontFamily: 'sans-serif', //Arial,Verdana,Times New Roman,serif,sans-serif,...
+			fontStyle: 'bold', //normal,italic,oblique,bold,bolder,lighter,100,200,300,400,500,600,700,800,900
+			type: 'circle',
+			position: 'down', // down, up, left, leftup (upleft)
+			animation: 'slide',
+			elementId: false,
+			element: null,
+			dataUrl: false,
+			win: window
+		};
+		var _opt, _orig, _h, _w, _canvas, _context, _img, _ready, _lastBadge, _running, _readyCb, _stop, _browser, _animTimeout, _drawTimeout, _doc;
+
+		_browser = {};
+		_browser.ff = typeof InstallTrigger != 'undefined';
+		_browser.chrome = !!window.chrome;
+		_browser.opera = !!window.opera || navigator.userAgent.indexOf('Opera') >= 0;
+		_browser.ie = /*@cc_on!@*/false;
+		_browser.safari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
+		_browser.supported = (_browser.chrome || _browser.ff || _browser.opera);
+
+		var _queue = [];
+		_readyCb = function () {
+		};
+		_ready = _stop = false;
+		/**
+		 * Initialize favico
+		 */
+		var init = function () {
+			//merge initial options
+			_opt = merge(_def, opt);
+			_opt.bgColor = hexToRgb(_opt.bgColor);
+			_opt.textColor = hexToRgb(_opt.textColor);
+			_opt.position = _opt.position.toLowerCase();
+			_opt.animation = (animation.types['' + _opt.animation]) ? _opt.animation : _def.animation;
+
+			_doc = _opt.win.document;
+
+			var isUp = _opt.position.indexOf('up') > -1;
+			var isLeft = _opt.position.indexOf('left') > -1;
+
+			//transform the animations
+			if (isUp || isLeft) {
+				for (var a in animation.types) {
+					for (var i = 0; i < animation.types[a].length; i++) {
+						var step = animation.types[a][i];
+
+						if (isUp) {
+							if (step.y < 0.6) {
+								step.y = step.y - 0.4;
+							} else {
+								step.y = step.y - 2 * step.y + (1 - step.w);
+							}
+						}
+
+						if (isLeft) {
+							if (step.x < 0.6) {
+								step.x = step.x - 0.4;
+							} else {
+								step.x = step.x - 2 * step.x + (1 - step.h);
+							}
+						}
+
+						animation.types[a][i] = step;
+					}
+				}
+			}
+			_opt.type = (type['' + _opt.type]) ? _opt.type : _def.type;
+
+			_orig = link. getIcons();
+			//create temp canvas
+			_canvas = document.createElement('canvas');
+			//create temp image
+			_img = document.createElement('img');
+			var lastIcon = _orig[_orig.length - 1];
+			if (lastIcon.hasAttribute('href')) {
+				_img.setAttribute('crossOrigin', 'anonymous');
+				//get width/height
+				_img.onload = function () {
+					_h = (_img.height > 0) ? _img.height : 32;
+					_w = (_img.width > 0) ? _img.width : 32;
+					_canvas.height = _h;
+					_canvas.width = _w;
+					_context = _canvas.getContext('2d');
+					icon.ready();
+				};
+				_img.setAttribute('src', lastIcon.getAttribute('href'));
+			} else {
+				_h = 32;
+				_w = 32;
+				_img.height = _h;
+				_img.width = _w;
+				_canvas.height = _h;
+				_canvas.width = _w;
+				_context = _canvas.getContext('2d');
+				icon.ready();
+			}
+
+		};
+		/**
+		 * Icon namespace
+		 */
+		var icon = {};
+		/**
+		 * Icon is ready (reset icon) and start animation (if ther is any)
+		 */
+		icon.ready = function () {
+			_ready = true;
+			icon.reset();
+			_readyCb();
+		};
+		/**
+		 * Reset icon to default state
+		 */
+		icon.reset = function () {
+			//reset
+			if (!_ready) {
+				return;
+			}
+			_queue = [];
+			_lastBadge = false;
+			_running = false;
+			_context.clearRect(0, 0, _w, _h);
+			_context.drawImage(_img, 0, 0, _w, _h);
+			//_stop=true;
+			link.setIcon(_canvas);
+			//webcam('stop');
+			//video('stop');
+			window.clearTimeout(_animTimeout);
+			window.clearTimeout(_drawTimeout);
+		};
+		/**
+		 * Start animation
+		 */
+		icon.start = function () {
+			if (!_ready || _running) {
+				return;
+			}
+			var finished = function () {
+				_lastBadge = _queue[0];
+				_running = false;
+				if (_queue.length > 0) {
+					_queue.shift();
+					icon.start();
+				} else {
+
+				}
+			};
+			if (_queue.length > 0) {
+				_running = true;
+				var run = function () {
+					// apply options for this animation
+					['type', 'animation', 'bgColor', 'textColor', 'fontFamily', 'fontStyle'].forEach(function (a) {
+						if (a in _queue[0].options) {
+							_opt[a] = _queue[0].options[a];
+						}
+					});
+					animation.run(_queue[0].options, function () {
+						finished();
+					}, false);
+				};
+				if (_lastBadge) {
+					animation.run(_lastBadge.options, function () {
+						run();
+					}, true);
+				} else {
+					run();
+				}
+			}
+		};
+
+		/**
+		 * Badge types
+		 */
+		var type = {};
+		var options = function (opt) {
+			opt.n = ((typeof opt.n) === 'number') ? Math.abs(opt.n | 0) : opt.n;
+			opt.x = _w * opt.x;
+			opt.y = _h * opt.y;
+			opt.w = _w * opt.w;
+			opt.h = _h * opt.h;
+			opt.len = ("" + opt.n).length;
+			return opt;
+		};
+		/**
+		 * Generate circle
+		 * @param {Object} opt Badge options
+		 */
+		type.circle = function (opt) {
+			opt = options(opt);
+			var more = false;
+			if (opt.len === 2) {
+				opt.x = opt.x - opt.w * 0.4;
+				opt.w = opt.w * 1.4;
+				more = true;
+			} else if (opt.len >= 3) {
+				opt.x = opt.x - opt.w * 0.65;
+				opt.w = opt.w * 1.65;
+				more = true;
+			}
+			_context.clearRect(0, 0, _w, _h);
+			_context.drawImage(_img, 0, 0, _w, _h);
+			_context.beginPath();
+			_context.font = _opt.fontStyle + " " + Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px " + _opt.fontFamily;
+			_context.textAlign = 'center';
+			if (more) {
+				_context.moveTo(opt.x + opt.w / 2, opt.y);
+				_context.lineTo(opt.x + opt.w - opt.h / 2, opt.y);
+				_context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2);
+				_context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2);
+				_context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h);
+				_context.lineTo(opt.x + opt.h / 2, opt.y + opt.h);
+				_context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2);
+				_context.lineTo(opt.x, opt.y + opt.h / 2);
+				_context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y);
+			} else {
+				_context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);
+			}
+			_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';
+			_context.fill();
+			_context.closePath();
+			_context.beginPath();
+			_context.stroke();
+			_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';
+			//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
+			if ((typeof opt.n) === 'number' && opt.n > 999) {
+				_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));
+			} else {
+				_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
+			}
+			_context.closePath();
+		};
+		/**
+		 * Generate rectangle
+		 * @param {Object} opt Badge options
+		 */
+		type.rectangle = function (opt) {
+			opt = options(opt);
+			var more = false;
+			if (opt.len === 2) {
+				opt.x = opt.x - opt.w * 0.4;
+				opt.w = opt.w * 1.4;
+				more = true;
+			} else if (opt.len >= 3) {
+				opt.x = opt.x - opt.w * 0.65;
+				opt.w = opt.w * 1.65;
+				more = true;
+			}
+			_context.clearRect(0, 0, _w, _h);
+			_context.drawImage(_img, 0, 0, _w, _h);
+			_context.beginPath();
+			_context.font = _opt.fontStyle + " " + Math.floor(opt.h * (opt.n > 99 ? 0.9 : 1)) + "px " + _opt.fontFamily;
+			_context.textAlign = 'center';
+			_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';
+			_context.fillRect(opt.x, opt.y, opt.w, opt.h);
+			_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';
+			//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
+			if ((typeof opt.n) === 'number' && opt.n > 999) {
+				_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));
+			} else {
+				_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
+			}
+			_context.closePath();
+		};
+
+		/**
+		 * Set badge
+		 */
+		var badge = function (number, opts) {
+			opts = ((typeof opts) === 'string' ? {
+				animation: opts
+			} : opts) || {};
+			_readyCb = function () {
+				try {
+					if (typeof (number) === 'number' ? (number > 0) : (number !== '')) {
+						var q = {
+							type: 'badge',
+							options: {
+								n: number
+							}
+						};
+						if ('animation' in opts && animation.types['' + opts.animation]) {
+							q.options.animation = '' + opts.animation;
+						}
+						if ('type' in opts && type['' + opts.type]) {
+							q.options.type = '' + opts.type;
+						}
+						['bgColor', 'textColor'].forEach(function (o) {
+							if (o in opts) {
+								q.options[o] = hexToRgb(opts[o]);
+							}
+						});
+						['fontStyle', 'fontFamily'].forEach(function (o) {
+							if (o in opts) {
+								q.options[o] = opts[o];
+							}
+						});
+						_queue.push(q);
+						if (_queue.length > 100) {
+							throw new Error('Too many badges requests in queue.');
+						}
+						icon.start();
+					} else {
+						icon.reset();
+					}
+				} catch (e) {
+					throw new Error('Error setting badge. Message: ' + e.message);
+				}
+			};
+			if (_ready) {
+				_readyCb();
+			}
+		};
+
+		var setOpt = function (key, value) {
+			var opts = key;
+			if (!(value == null && Object.prototype.toString.call(key) == '[object Object]')) {
+				opts = {};
+				opts[key] = value;
+			}
+
+			var keys = Object.keys(opts);
+			for (var i = 0; i < keys.length; i++) {
+				if (keys[i] == 'bgColor' || keys[i] == 'textColor') {
+					_opt[keys[i]] = hexToRgb(opts[keys[i]]);
+				} else {
+					_opt[keys[i]] = opts[keys[i]];
+				}
+			}
+
+			_queue.push(_lastBadge);
+			icon.start();
+		};
+
+		var link = {};
+		/**
+		 * Get icons from HEAD tag or create a new <link> element
+		 */
+		link.getIcons = function () {
+			var elms = [];
+			//get link element
+			var getLinks = function () {
+				var icons = [];
+				var links = _doc.getElementsByTagName('head')[0].getElementsByTagName('link');
+				for (var i = 0; i < links.length; i++) {
+					if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute('rel'))) {
+						icons.push(links[i]);
+					}
+				}
+				return icons;
+			};
+			if (_opt.element) {
+				elms = [_opt.element];
+			} else if (_opt.elementId) {
+				//if img element identified by elementId
+				elms = [_doc.getElementById(_opt.elementId)];
+				elms[0].setAttribute('href', elms[0].getAttribute('src'));
+			} else {
+				//if link element
+				elms = getLinks();
+				if (elms.length === 0) {
+					elms = [_doc.createElement('link')];
+					elms[0].setAttribute('rel', 'icon');
+					_doc.getElementsByTagName('head')[0].appendChild(elms[0]);
+				}
+			}
+			elms.forEach(function(item) {
+				item.setAttribute('type', 'image/png');
+			});
+			return elms;
+		};
+		link.setIcon = function (canvas) {
+			var url = canvas.toDataURL('image/png');
+			link.setIconSrc(url);
+		};
+		link.setIconSrc = function (url) {
+			if (_opt.dataUrl) {
+				//if using custom exporter
+				_opt.dataUrl(url);
+			}
+			if (_opt.element) {
+				_opt.element.setAttribute('href', url);
+				_opt.element.setAttribute('src', url);
+			} else if (_opt.elementId) {
+				//if is attached to element (image)
+				var elm = _doc.getElementById(_opt.elementId);
+				elm.setAttribute('href', url);
+				elm.setAttribute('src', url);
+			} else {
+				//if is attached to fav icon
+				if (_browser.ff || _browser.opera) {
+					//for FF we need to "recreate" element, atach to dom and remove old <link>
+					//var originalType = _orig.getAttribute('rel');
+					var old = _orig[_orig.length - 1];
+					var newIcon = _doc.createElement('link');
+					_orig = [newIcon];
+					//_orig.setAttribute('rel', originalType);
+					if (_browser.opera) {
+						newIcon.setAttribute('rel', 'icon');
+					}
+					newIcon.setAttribute('rel', 'icon');
+					newIcon.setAttribute('type', 'image/png');
+					_doc.getElementsByTagName('head')[0].appendChild(newIcon);
+					newIcon.setAttribute('href', url);
+					if (old.parentNode) {
+						old.parentNode.removeChild(old);
+					}
+				} else {
+					_orig.forEach(function(icon) {
+						icon.setAttribute('href', url);
+					});
+				}
+			}
+		};
+
+		//http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-5624139
+		//HEX to RGB convertor
+		function hexToRgb(hex) {
+			var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+			hex = hex.replace(shorthandRegex, function (m, r, g, b) {
+				return r + r + g + g + b + b;
+			});
+			var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+			return result ? {
+				r: parseInt(result[1], 16),
+				g: parseInt(result[2], 16),
+				b: parseInt(result[3], 16)
+			} : false;
+		}
+
+		/**
+		 * Merge options
+		 */
+		function merge(def, opt) {
+			var mergedOpt = {};
+			var attrname;
+			for (attrname in def) {
+				mergedOpt[attrname] = def[attrname];
+			}
+			for (attrname in opt) {
+				mergedOpt[attrname] = opt[attrname];
+			}
+			return mergedOpt;
+		}
+
+		/**
+		 * Cross-browser page visibility shim
+		 * http://stackoverflow.com/questions/12536562/detect-whether-a-window-is-visible
+		 */
+		function isPageHidden() {
+			return _doc.hidden || _doc.msHidden || _doc.webkitHidden || _doc.mozHidden;
+		}
+
+		/**
+		 * @namespace animation
+		 */
+		var animation = {};
+		/**
+		 * Animation "frame" duration
+		 */
+		animation.duration = 40;
+		/**
+		 * Animation types (none,fade,pop,slide)
+		 */
+		animation.types = {};
+		animation.types.fade = [{
+			x: 0.4,
+			y: 0.4,
+			w: 0.6,
+			h: 0.6,
+			o: 0.0
+		}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.1
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.2
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.3
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.4
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.5
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.6
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.7
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.8
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 0.9
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 1.0
+			}];
+		animation.types.none = [{
+			x: 0.4,
+			y: 0.4,
+			w: 0.6,
+			h: 0.6,
+			o: 1
+		}];
+		animation.types.pop = [{
+			x: 1,
+			y: 1,
+			w: 0,
+			h: 0,
+			o: 1
+		}, {
+				x: 0.9,
+				y: 0.9,
+				w: 0.1,
+				h: 0.1,
+				o: 1
+			}, {
+				x: 0.8,
+				y: 0.8,
+				w: 0.2,
+				h: 0.2,
+				o: 1
+			}, {
+				x: 0.7,
+				y: 0.7,
+				w: 0.3,
+				h: 0.3,
+				o: 1
+			}, {
+				x: 0.6,
+				y: 0.6,
+				w: 0.4,
+				h: 0.4,
+				o: 1
+			}, {
+				x: 0.5,
+				y: 0.5,
+				w: 0.5,
+				h: 0.5,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}];
+		animation.types.popFade = [{
+			x: 0.75,
+			y: 0.75,
+			w: 0,
+			h: 0,
+			o: 0
+		}, {
+				x: 0.65,
+				y: 0.65,
+				w: 0.1,
+				h: 0.1,
+				o: 0.2
+			}, {
+				x: 0.6,
+				y: 0.6,
+				w: 0.2,
+				h: 0.2,
+				o: 0.4
+			}, {
+				x: 0.55,
+				y: 0.55,
+				w: 0.3,
+				h: 0.3,
+				o: 0.6
+			}, {
+				x: 0.50,
+				y: 0.50,
+				w: 0.4,
+				h: 0.4,
+				o: 0.8
+			}, {
+				x: 0.45,
+				y: 0.45,
+				w: 0.5,
+				h: 0.5,
+				o: 0.9
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}];
+		animation.types.slide = [{
+			x: 0.4,
+			y: 1,
+			w: 0.6,
+			h: 0.6,
+			o: 1
+		}, {
+				x: 0.4,
+				y: 0.9,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.9,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.8,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.7,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.6,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.5,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}, {
+				x: 0.4,
+				y: 0.4,
+				w: 0.6,
+				h: 0.6,
+				o: 1
+			}];
+		/**
+		 * Run animation
+		 * @param {Object} opt Animation options
+		 * @param {Object} cb Callabak after all steps are done
+		 * @param {Object} revert Reverse order? true|false
+		 * @param {Object} step Optional step number (frame bumber)
+		 */
+		animation.run = function (opt, cb, revert, step) {
+			var animationType = animation.types[isPageHidden() ? 'none' : _opt.animation];
+			if (revert === true) {
+				step = (typeof step !== 'undefined') ? step : animationType.length - 1;
+			} else {
+				step = (typeof step !== 'undefined') ? step : 0;
+			}
+			cb = (cb) ? cb : function () {
+			};
+			if ((step < animationType.length) && (step >= 0)) {
+				type[_opt.type](merge(opt, animationType[step]));
+				_animTimeout = setTimeout(function () {
+					if (revert) {
+						step = step - 1;
+					} else {
+						step = step + 1;
+					}
+					animation.run(opt, cb, revert, step);
+				}, animation.duration);
+
+				link.setIcon(_canvas);
+			} else {
+				cb();
+				return;
+			}
+		};
+		//auto init
+		init();
+		return {
+			badge: badge,
+			setOpt: setOpt,
+			reset: icon.reset,
+			browser: {
+				supported: _browser.supported
+			}
+		};
+	});
+
+	// AMD / RequireJS
+	if (true) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
+			return Favico;
+		}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	// CommonJS
+	else {}
+
+})();
+
+
+/***/ }),
+/* 181 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47011,7 +48804,7 @@ return __p
 };
 
 /***/ }),
-/* 140 */
+/* 182 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47043,7 +48836,7 @@ return __p
 };
 
 /***/ }),
-/* 141 */
+/* 183 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47063,7 +48856,7 @@ return __p
 };
 
 /***/ }),
-/* 142 */
+/* 184 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47089,7 +48882,7 @@ return __p
 };
 
 /***/ }),
-/* 143 */
+/* 185 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47115,7 +48908,7 @@ return __p
 };
 
 /***/ }),
-/* 144 */
+/* 186 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47147,7 +48940,7 @@ return __p
 };
 
 /***/ }),
-/* 145 */
+/* 187 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47169,7 +48962,7 @@ return __p
 };
 
 /***/ }),
-/* 146 */
+/* 188 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var _ = {escape:__webpack_require__(8)};
@@ -47211,48 +49004,6 @@ return __p
 };
 
 /***/ }),
-/* 147 */,
-/* 148 */,
-/* 149 */,
-/* 150 */,
-/* 151 */,
-/* 152 */,
-/* 153 */,
-/* 154 */,
-/* 155 */,
-/* 156 */,
-/* 157 */,
-/* 158 */,
-/* 159 */,
-/* 160 */,
-/* 161 */,
-/* 162 */,
-/* 163 */,
-/* 164 */,
-/* 165 */,
-/* 166 */,
-/* 167 */,
-/* 168 */,
-/* 169 */,
-/* 170 */,
-/* 171 */,
-/* 172 */,
-/* 173 */,
-/* 174 */,
-/* 175 */,
-/* 176 */,
-/* 177 */,
-/* 178 */,
-/* 179 */,
-/* 180 */,
-/* 181 */,
-/* 182 */,
-/* 183 */,
-/* 184 */,
-/* 185 */,
-/* 186 */,
-/* 187 */,
-/* 188 */,
 /* 189 */,
 /* 190 */,
 /* 191 */,
@@ -47348,7 +49099,49 @@ return __p
 /* 281 */,
 /* 282 */,
 /* 283 */,
-/* 284 */
+/* 284 */,
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */,
+/* 311 */,
+/* 312 */,
+/* 313 */,
+/* 314 */,
+/* 315 */,
+/* 316 */,
+/* 317 */,
+/* 318 */,
+/* 319 */,
+/* 320 */,
+/* 321 */,
+/* 322 */,
+/* 323 */,
+/* 324 */,
+/* 325 */,
+/* 326 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -47411,7 +49204,7 @@ const converse = {
       __webpack_require__.p = settings.assets_path; // eslint-disable-line no-undef
     }
 
-    __webpack_require__(418);
+    __webpack_require__(506);
 
     Object.keys(plugins).forEach(name => converse.plugins.add(name, plugins[name]));
     return converse;
@@ -47422,7 +49215,7 @@ window.converse = converse;
 /* harmony default export */ __webpack_exports__["default"] = (converse);
 
 /***/ }),
-/* 285 */
+/* 327 */
 /***/ (function(module, exports) {
 
 function CustomEvent(event, params) {
@@ -47492,7 +49285,7 @@ if (!String.prototype.trim) {
 }
 
 /***/ }),
-/* 286 */
+/* 328 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -47507,7 +49300,7 @@ module.exports = function() {
 
 
 /***/ }),
-/* 287 */
+/* 329 */
 /***/ (function(module, exports) {
 
 //[4]   	NameStartChar	   ::=   	":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
@@ -48146,7 +49939,7 @@ exports.XMLReader = XMLReader;
 
 
 /***/ }),
-/* 288 */
+/* 330 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -48250,7 +50043,7 @@ module.exports = atob;
 
 
 /***/ }),
-/* 289 */
+/* 331 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -48315,7 +50108,7 @@ module.exports = btoa;
 
 
 /***/ }),
-/* 290 */
+/* 332 */
 /***/ (function(module, exports) {
 
 /**
@@ -48352,10 +50145,10 @@ module.exports = baseSlice;
 
 
 /***/ }),
-/* 291 */
+/* 333 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var toNumber = __webpack_require__(292);
+var toNumber = __webpack_require__(334);
 
 /** Used as references for various `Number` constants. */
 var INFINITY = 1 / 0,
@@ -48400,11 +50193,11 @@ module.exports = toFinite;
 
 
 /***/ }),
-/* 292 */
+/* 334 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isObject = __webpack_require__(17),
-    isSymbol = __webpack_require__(38);
+var isObject = __webpack_require__(20),
+    isSymbol = __webpack_require__(48);
 
 /** Used as references for various `Number` constants. */
 var NAN = 0 / 0;
@@ -48472,10 +50265,10 @@ module.exports = toNumber;
 
 
 /***/ }),
-/* 293 */
+/* 335 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Symbol = __webpack_require__(39);
+var Symbol = __webpack_require__(49);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -48524,7 +50317,7 @@ module.exports = getRawTag;
 
 
 /***/ }),
-/* 294 */
+/* 336 */
 /***/ (function(module, exports) {
 
 /** Used for built-in method references. */
@@ -48552,13 +50345,13 @@ module.exports = objectToString;
 
 
 /***/ }),
-/* 295 */
+/* 337 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayEach = __webpack_require__(73),
-    baseEach = __webpack_require__(296),
-    castFunction = __webpack_require__(308),
-    isArray = __webpack_require__(15);
+var arrayEach = __webpack_require__(97),
+    baseEach = __webpack_require__(338),
+    castFunction = __webpack_require__(350),
+    isArray = __webpack_require__(16);
 
 /**
  * Iterates over elements of `collection` and invokes `iteratee` for each element.
@@ -48599,11 +50392,11 @@ module.exports = forEach;
 
 
 /***/ }),
-/* 296 */
+/* 338 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseForOwn = __webpack_require__(297),
-    createBaseEach = __webpack_require__(307);
+var baseForOwn = __webpack_require__(339),
+    createBaseEach = __webpack_require__(349);
 
 /**
  * The base implementation of `_.forEach` without support for iteratee shorthands.
@@ -48619,11 +50412,11 @@ module.exports = baseEach;
 
 
 /***/ }),
-/* 297 */
+/* 339 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseFor = __webpack_require__(298),
-    keys = __webpack_require__(26);
+var baseFor = __webpack_require__(340),
+    keys = __webpack_require__(33);
 
 /**
  * The base implementation of `_.forOwn` without support for iteratee shorthands.
@@ -48641,10 +50434,10 @@ module.exports = baseForOwn;
 
 
 /***/ }),
-/* 298 */
+/* 340 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var createBaseFor = __webpack_require__(299);
+var createBaseFor = __webpack_require__(341);
 
 /**
  * The base implementation of `baseForOwn` which iterates over `object`
@@ -48663,7 +50456,7 @@ module.exports = baseFor;
 
 
 /***/ }),
-/* 299 */
+/* 341 */
 /***/ (function(module, exports) {
 
 /**
@@ -48694,7 +50487,7 @@ module.exports = createBaseFor;
 
 
 /***/ }),
-/* 300 */
+/* 342 */
 /***/ (function(module, exports) {
 
 /**
@@ -48720,11 +50513,11 @@ module.exports = baseTimes;
 
 
 /***/ }),
-/* 301 */
+/* 343 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isObjectLike = __webpack_require__(19);
+var baseGetTag = __webpack_require__(25),
+    isObjectLike = __webpack_require__(23);
 
 /** `Object#toString` result references. */
 var argsTag = '[object Arguments]';
@@ -48744,7 +50537,7 @@ module.exports = baseIsArguments;
 
 
 /***/ }),
-/* 302 */
+/* 344 */
 /***/ (function(module, exports) {
 
 /**
@@ -48768,12 +50561,12 @@ module.exports = stubFalse;
 
 
 /***/ }),
-/* 303 */
+/* 345 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetTag = __webpack_require__(21),
-    isLength = __webpack_require__(57),
-    isObjectLike = __webpack_require__(19);
+var baseGetTag = __webpack_require__(25),
+    isLength = __webpack_require__(71),
+    isObjectLike = __webpack_require__(23);
 
 /** `Object#toString` result references. */
 var argsTag = '[object Arguments]',
@@ -48834,7 +50627,7 @@ module.exports = baseIsTypedArray;
 
 
 /***/ }),
-/* 304 */
+/* 346 */
 /***/ (function(module, exports) {
 
 /**
@@ -48854,10 +50647,10 @@ module.exports = baseUnary;
 
 
 /***/ }),
-/* 305 */
+/* 347 */
 /***/ (function(module, exports, __webpack_require__) {
 
-/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(72);
+/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(96);
 
 /** Detect free variable `exports`. */
 var freeExports =  true && exports && !exports.nodeType && exports;
@@ -48888,13 +50681,13 @@ var nodeUtil = (function() {
 
 module.exports = nodeUtil;
 
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(36)(module)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(46)(module)))
 
 /***/ }),
-/* 306 */
+/* 348 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var overArg = __webpack_require__(80);
+var overArg = __webpack_require__(104);
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
 var nativeKeys = overArg(Object.keys, Object);
@@ -48903,10 +50696,10 @@ module.exports = nativeKeys;
 
 
 /***/ }),
-/* 307 */
+/* 349 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isArrayLike = __webpack_require__(25);
+var isArrayLike = __webpack_require__(29);
 
 /**
  * Creates a `baseEach` or `baseEachRight` function.
@@ -48941,10 +50734,10 @@ module.exports = createBaseEach;
 
 
 /***/ }),
-/* 308 */
+/* 350 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var identity = __webpack_require__(31);
+var identity = __webpack_require__(38);
 
 /**
  * Casts `value` to `identity` if it's not a function.
@@ -48961,12 +50754,12 @@ module.exports = castFunction;
 
 
 /***/ }),
-/* 309 */
+/* 351 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var copyObject = __webpack_require__(310),
-    createAssigner = __webpack_require__(315),
-    keysIn = __webpack_require__(88);
+var copyObject = __webpack_require__(352),
+    createAssigner = __webpack_require__(357),
+    keysIn = __webpack_require__(112);
 
 /**
  * This method is like `_.assign` except that it iterates over own and
@@ -49007,11 +50800,11 @@ module.exports = assignIn;
 
 
 /***/ }),
-/* 310 */
+/* 352 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assignValue = __webpack_require__(81),
-    baseAssignValue = __webpack_require__(82);
+var assignValue = __webpack_require__(105),
+    baseAssignValue = __webpack_require__(106);
 
 /**
  * Copies properties of `source` to `object`.
@@ -49053,13 +50846,13 @@ module.exports = copyObject;
 
 
 /***/ }),
-/* 311 */
+/* 353 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isFunction = __webpack_require__(48),
-    isMasked = __webpack_require__(312),
-    isObject = __webpack_require__(17),
-    toSource = __webpack_require__(84);
+var isFunction = __webpack_require__(62),
+    isMasked = __webpack_require__(354),
+    isObject = __webpack_require__(20),
+    toSource = __webpack_require__(108);
 
 /**
  * Used to match `RegExp`
@@ -49106,10 +50899,10 @@ module.exports = baseIsNative;
 
 
 /***/ }),
-/* 312 */
+/* 354 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var coreJsData = __webpack_require__(313);
+var coreJsData = __webpack_require__(355);
 
 /** Used to detect methods masquerading as native. */
 var maskSrcKey = (function() {
@@ -49132,10 +50925,10 @@ module.exports = isMasked;
 
 
 /***/ }),
-/* 313 */
+/* 355 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var root = __webpack_require__(10);
+var root = __webpack_require__(11);
 
 /** Used to detect overreaching core-js shims. */
 var coreJsData = root['__core-js_shared__'];
@@ -49144,7 +50937,7 @@ module.exports = coreJsData;
 
 
 /***/ }),
-/* 314 */
+/* 356 */
 /***/ (function(module, exports) {
 
 /**
@@ -49163,11 +50956,11 @@ module.exports = getValue;
 
 
 /***/ }),
-/* 315 */
+/* 357 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseRest = __webpack_require__(85),
-    isIterateeCall = __webpack_require__(319);
+var baseRest = __webpack_require__(109),
+    isIterateeCall = __webpack_require__(361);
 
 /**
  * Creates a function like `_.assign`.
@@ -49206,10 +50999,10 @@ module.exports = createAssigner;
 
 
 /***/ }),
-/* 316 */
+/* 358 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var apply = __webpack_require__(58);
+var apply = __webpack_require__(72);
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
 var nativeMax = Math.max;
@@ -49248,12 +51041,12 @@ module.exports = overRest;
 
 
 /***/ }),
-/* 317 */
+/* 359 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var constant = __webpack_require__(318),
-    defineProperty = __webpack_require__(83),
-    identity = __webpack_require__(31);
+var constant = __webpack_require__(360),
+    defineProperty = __webpack_require__(107),
+    identity = __webpack_require__(38);
 
 /**
  * The base implementation of `setToString` without support for hot loop shorting.
@@ -49276,7 +51069,7 @@ module.exports = baseSetToString;
 
 
 /***/ }),
-/* 318 */
+/* 360 */
 /***/ (function(module, exports) {
 
 /**
@@ -49308,13 +51101,13 @@ module.exports = constant;
 
 
 /***/ }),
-/* 319 */
+/* 361 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var eq = __webpack_require__(40),
-    isArrayLike = __webpack_require__(25),
-    isIndex = __webpack_require__(30),
-    isObject = __webpack_require__(17);
+var eq = __webpack_require__(50),
+    isArrayLike = __webpack_require__(29),
+    isIndex = __webpack_require__(37),
+    isObject = __webpack_require__(20);
 
 /**
  * Checks if the given arguments are from an iteratee call.
@@ -49344,12 +51137,12 @@ module.exports = isIterateeCall;
 
 
 /***/ }),
-/* 320 */
+/* 362 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isObject = __webpack_require__(17),
-    isPrototype = __webpack_require__(79),
-    nativeKeysIn = __webpack_require__(321);
+var isObject = __webpack_require__(20),
+    isPrototype = __webpack_require__(103),
+    nativeKeysIn = __webpack_require__(363);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -49383,7 +51176,7 @@ module.exports = baseKeysIn;
 
 
 /***/ }),
-/* 321 */
+/* 363 */
 /***/ (function(module, exports) {
 
 /**
@@ -49409,7 +51202,7 @@ module.exports = nativeKeysIn;
 
 
 /***/ }),
-/* 322 */
+/* 364 */
 /***/ (function(module, exports) {
 
 /**
@@ -49439,7 +51232,7 @@ module.exports = baseFindIndex;
 
 
 /***/ }),
-/* 323 */
+/* 365 */
 /***/ (function(module, exports) {
 
 /**
@@ -49457,7 +51250,7 @@ module.exports = baseIsNaN;
 
 
 /***/ }),
-/* 324 */
+/* 366 */
 /***/ (function(module, exports) {
 
 /**
@@ -49486,10 +51279,10 @@ module.exports = strictIndexOf;
 
 
 /***/ }),
-/* 325 */
+/* 367 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayMap = __webpack_require__(59);
+var arrayMap = __webpack_require__(73);
 
 /**
  * The base implementation of `_.values` and `_.valuesIn` which creates an
@@ -49511,19 +51304,19 @@ module.exports = baseValues;
 
 
 /***/ }),
-/* 326 */
+/* 368 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseSetData = __webpack_require__(91),
-    createBind = __webpack_require__(327),
-    createCurry = __webpack_require__(328),
-    createHybrid = __webpack_require__(94),
-    createPartial = __webpack_require__(341),
-    getData = __webpack_require__(98),
-    mergeData = __webpack_require__(342),
-    setData = __webpack_require__(101),
-    setWrapToString = __webpack_require__(102),
-    toInteger = __webpack_require__(56);
+var baseSetData = __webpack_require__(115),
+    createBind = __webpack_require__(369),
+    createCurry = __webpack_require__(370),
+    createHybrid = __webpack_require__(118),
+    createPartial = __webpack_require__(383),
+    getData = __webpack_require__(122),
+    mergeData = __webpack_require__(384),
+    setData = __webpack_require__(125),
+    setWrapToString = __webpack_require__(126),
+    toInteger = __webpack_require__(70);
 
 /** Error message constants. */
 var FUNC_ERROR_TEXT = 'Expected a function';
@@ -49623,11 +51416,11 @@ module.exports = createWrap;
 
 
 /***/ }),
-/* 327 */
+/* 369 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var createCtor = __webpack_require__(41),
-    root = __webpack_require__(10);
+var createCtor = __webpack_require__(51),
+    root = __webpack_require__(11);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_BIND_FLAG = 1;
@@ -49657,16 +51450,16 @@ module.exports = createBind;
 
 
 /***/ }),
-/* 328 */
+/* 370 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var apply = __webpack_require__(58),
-    createCtor = __webpack_require__(41),
-    createHybrid = __webpack_require__(94),
-    createRecurry = __webpack_require__(97),
-    getHolder = __webpack_require__(63),
-    replaceHolders = __webpack_require__(42),
-    root = __webpack_require__(10);
+var apply = __webpack_require__(72),
+    createCtor = __webpack_require__(51),
+    createHybrid = __webpack_require__(118),
+    createRecurry = __webpack_require__(121),
+    getHolder = __webpack_require__(77),
+    replaceHolders = __webpack_require__(52),
+    root = __webpack_require__(11);
 
 /**
  * Creates a function that wraps `func` to enable currying.
@@ -49709,7 +51502,7 @@ module.exports = createCurry;
 
 
 /***/ }),
-/* 329 */
+/* 371 */
 /***/ (function(module, exports) {
 
 /**
@@ -49736,13 +51529,13 @@ module.exports = countHolders;
 
 
 /***/ }),
-/* 330 */
+/* 372 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var LazyWrapper = __webpack_require__(61),
-    getData = __webpack_require__(98),
-    getFuncName = __webpack_require__(332),
-    lodash = __webpack_require__(334);
+var LazyWrapper = __webpack_require__(75),
+    getData = __webpack_require__(122),
+    getFuncName = __webpack_require__(374),
+    lodash = __webpack_require__(376);
 
 /**
  * Checks if `func` has a lazy counterpart.
@@ -49770,7 +51563,7 @@ module.exports = isLaziable;
 
 
 /***/ }),
-/* 331 */
+/* 373 */
 /***/ (function(module, exports) {
 
 /**
@@ -49793,10 +51586,10 @@ module.exports = noop;
 
 
 /***/ }),
-/* 332 */
+/* 374 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var realNames = __webpack_require__(333);
+var realNames = __webpack_require__(375);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -49830,7 +51623,7 @@ module.exports = getFuncName;
 
 
 /***/ }),
-/* 333 */
+/* 375 */
 /***/ (function(module, exports) {
 
 /** Used to lookup unminified function names. */
@@ -49840,15 +51633,15 @@ module.exports = realNames;
 
 
 /***/ }),
-/* 334 */
+/* 376 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var LazyWrapper = __webpack_require__(61),
-    LodashWrapper = __webpack_require__(99),
-    baseLodash = __webpack_require__(62),
-    isArray = __webpack_require__(15),
-    isObjectLike = __webpack_require__(19),
-    wrapperClone = __webpack_require__(335);
+var LazyWrapper = __webpack_require__(75),
+    LodashWrapper = __webpack_require__(123),
+    baseLodash = __webpack_require__(76),
+    isArray = __webpack_require__(16),
+    isObjectLike = __webpack_require__(23),
+    wrapperClone = __webpack_require__(377);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -49993,12 +51786,12 @@ module.exports = lodash;
 
 
 /***/ }),
-/* 335 */
+/* 377 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var LazyWrapper = __webpack_require__(61),
-    LodashWrapper = __webpack_require__(99),
-    copyArray = __webpack_require__(100);
+var LazyWrapper = __webpack_require__(75),
+    LodashWrapper = __webpack_require__(123),
+    copyArray = __webpack_require__(124);
 
 /**
  * Creates a clone of `wrapper`.
@@ -50022,7 +51815,7 @@ module.exports = wrapperClone;
 
 
 /***/ }),
-/* 336 */
+/* 378 */
 /***/ (function(module, exports) {
 
 /** Used to match wrap detail comments. */
@@ -50045,7 +51838,7 @@ module.exports = getWrapDetails;
 
 
 /***/ }),
-/* 337 */
+/* 379 */
 /***/ (function(module, exports) {
 
 /** Used to match wrap detail comments. */
@@ -50074,11 +51867,11 @@ module.exports = insertWrapDetails;
 
 
 /***/ }),
-/* 338 */
+/* 380 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayEach = __webpack_require__(73),
-    arrayIncludes = __webpack_require__(339);
+var arrayEach = __webpack_require__(97),
+    arrayIncludes = __webpack_require__(381);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_BIND_FLAG = 1,
@@ -50126,10 +51919,10 @@ module.exports = updateWrapDetails;
 
 
 /***/ }),
-/* 339 */
+/* 381 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIndexOf = __webpack_require__(89);
+var baseIndexOf = __webpack_require__(113);
 
 /**
  * A specialized version of `_.includes` for arrays without support for
@@ -50149,11 +51942,11 @@ module.exports = arrayIncludes;
 
 
 /***/ }),
-/* 340 */
+/* 382 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var copyArray = __webpack_require__(100),
-    isIndex = __webpack_require__(30);
+var copyArray = __webpack_require__(124),
+    isIndex = __webpack_require__(37);
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
 var nativeMin = Math.min;
@@ -50184,12 +51977,12 @@ module.exports = reorder;
 
 
 /***/ }),
-/* 341 */
+/* 383 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var apply = __webpack_require__(58),
-    createCtor = __webpack_require__(41),
-    root = __webpack_require__(10);
+var apply = __webpack_require__(72),
+    createCtor = __webpack_require__(51),
+    root = __webpack_require__(11);
 
 /** Used to compose bitmasks for function metadata. */
 var WRAP_BIND_FLAG = 1;
@@ -50233,12 +52026,12 @@ module.exports = createPartial;
 
 
 /***/ }),
-/* 342 */
+/* 384 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var composeArgs = __webpack_require__(95),
-    composeArgsRight = __webpack_require__(96),
-    replaceHolders = __webpack_require__(42);
+var composeArgs = __webpack_require__(119),
+    composeArgsRight = __webpack_require__(120),
+    replaceHolders = __webpack_require__(52);
 
 /** Used as the internal argument placeholder. */
 var PLACEHOLDER = '__lodash_placeholder__';
@@ -50329,14 +52122,14 @@ module.exports = mergeData;
 
 
 /***/ }),
-/* 343 */
+/* 385 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseMatches = __webpack_require__(344),
-    baseMatchesProperty = __webpack_require__(385),
-    identity = __webpack_require__(31),
-    isArray = __webpack_require__(15),
-    property = __webpack_require__(394);
+var baseMatches = __webpack_require__(386),
+    baseMatchesProperty = __webpack_require__(427),
+    identity = __webpack_require__(38),
+    isArray = __webpack_require__(16),
+    property = __webpack_require__(436);
 
 /**
  * The base implementation of `_.iteratee`.
@@ -50366,12 +52159,12 @@ module.exports = baseIteratee;
 
 
 /***/ }),
-/* 344 */
+/* 386 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsMatch = __webpack_require__(345),
-    getMatchData = __webpack_require__(384),
-    matchesStrictComparable = __webpack_require__(112);
+var baseIsMatch = __webpack_require__(387),
+    getMatchData = __webpack_require__(426),
+    matchesStrictComparable = __webpack_require__(136);
 
 /**
  * The base implementation of `_.matches` which doesn't clone `source`.
@@ -50394,11 +52187,11 @@ module.exports = baseMatches;
 
 
 /***/ }),
-/* 345 */
+/* 387 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Stack = __webpack_require__(103),
-    baseIsEqual = __webpack_require__(104);
+var Stack = __webpack_require__(127),
+    baseIsEqual = __webpack_require__(128);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1,
@@ -50462,7 +52255,7 @@ module.exports = baseIsMatch;
 
 
 /***/ }),
-/* 346 */
+/* 388 */
 /***/ (function(module, exports) {
 
 /**
@@ -50481,10 +52274,10 @@ module.exports = listCacheClear;
 
 
 /***/ }),
-/* 347 */
+/* 389 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assocIndexOf = __webpack_require__(44);
+var assocIndexOf = __webpack_require__(54);
 
 /** Used for built-in method references. */
 var arrayProto = Array.prototype;
@@ -50522,10 +52315,10 @@ module.exports = listCacheDelete;
 
 
 /***/ }),
-/* 348 */
+/* 390 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assocIndexOf = __webpack_require__(44);
+var assocIndexOf = __webpack_require__(54);
 
 /**
  * Gets the list cache value for `key`.
@@ -50547,10 +52340,10 @@ module.exports = listCacheGet;
 
 
 /***/ }),
-/* 349 */
+/* 391 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assocIndexOf = __webpack_require__(44);
+var assocIndexOf = __webpack_require__(54);
 
 /**
  * Checks if a list cache value for `key` exists.
@@ -50569,10 +52362,10 @@ module.exports = listCacheHas;
 
 
 /***/ }),
-/* 350 */
+/* 392 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assocIndexOf = __webpack_require__(44);
+var assocIndexOf = __webpack_require__(54);
 
 /**
  * Sets the list cache `key` to `value`.
@@ -50601,10 +52394,10 @@ module.exports = listCacheSet;
 
 
 /***/ }),
-/* 351 */
+/* 393 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var ListCache = __webpack_require__(43);
+var ListCache = __webpack_require__(53);
 
 /**
  * Removes all key-value entries from the stack.
@@ -50622,7 +52415,7 @@ module.exports = stackClear;
 
 
 /***/ }),
-/* 352 */
+/* 394 */
 /***/ (function(module, exports) {
 
 /**
@@ -50646,7 +52439,7 @@ module.exports = stackDelete;
 
 
 /***/ }),
-/* 353 */
+/* 395 */
 /***/ (function(module, exports) {
 
 /**
@@ -50666,7 +52459,7 @@ module.exports = stackGet;
 
 
 /***/ }),
-/* 354 */
+/* 396 */
 /***/ (function(module, exports) {
 
 /**
@@ -50686,12 +52479,12 @@ module.exports = stackHas;
 
 
 /***/ }),
-/* 355 */
+/* 397 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var ListCache = __webpack_require__(43),
-    Map = __webpack_require__(64),
-    MapCache = __webpack_require__(65);
+var ListCache = __webpack_require__(53),
+    Map = __webpack_require__(78),
+    MapCache = __webpack_require__(79);
 
 /** Used as the size to enable large array optimizations. */
 var LARGE_ARRAY_SIZE = 200;
@@ -50726,12 +52519,12 @@ module.exports = stackSet;
 
 
 /***/ }),
-/* 356 */
+/* 398 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Hash = __webpack_require__(357),
-    ListCache = __webpack_require__(43),
-    Map = __webpack_require__(64);
+var Hash = __webpack_require__(399),
+    ListCache = __webpack_require__(53),
+    Map = __webpack_require__(78);
 
 /**
  * Removes all key-value entries from the map.
@@ -50753,14 +52546,14 @@ module.exports = mapCacheClear;
 
 
 /***/ }),
-/* 357 */
+/* 399 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var hashClear = __webpack_require__(358),
-    hashDelete = __webpack_require__(359),
-    hashGet = __webpack_require__(360),
-    hashHas = __webpack_require__(361),
-    hashSet = __webpack_require__(362);
+var hashClear = __webpack_require__(400),
+    hashDelete = __webpack_require__(401),
+    hashGet = __webpack_require__(402),
+    hashHas = __webpack_require__(403),
+    hashSet = __webpack_require__(404);
 
 /**
  * Creates a hash object.
@@ -50791,10 +52584,10 @@ module.exports = Hash;
 
 
 /***/ }),
-/* 358 */
+/* 400 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var nativeCreate = __webpack_require__(45);
+var nativeCreate = __webpack_require__(55);
 
 /**
  * Removes all key-value entries from the hash.
@@ -50812,7 +52605,7 @@ module.exports = hashClear;
 
 
 /***/ }),
-/* 359 */
+/* 401 */
 /***/ (function(module, exports) {
 
 /**
@@ -50835,10 +52628,10 @@ module.exports = hashDelete;
 
 
 /***/ }),
-/* 360 */
+/* 402 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var nativeCreate = __webpack_require__(45);
+var nativeCreate = __webpack_require__(55);
 
 /** Used to stand-in for `undefined` hash values. */
 var HASH_UNDEFINED = '__lodash_hash_undefined__';
@@ -50871,10 +52664,10 @@ module.exports = hashGet;
 
 
 /***/ }),
-/* 361 */
+/* 403 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var nativeCreate = __webpack_require__(45);
+var nativeCreate = __webpack_require__(55);
 
 /** Used for built-in method references. */
 var objectProto = Object.prototype;
@@ -50900,10 +52693,10 @@ module.exports = hashHas;
 
 
 /***/ }),
-/* 362 */
+/* 404 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var nativeCreate = __webpack_require__(45);
+var nativeCreate = __webpack_require__(55);
 
 /** Used to stand-in for `undefined` hash values. */
 var HASH_UNDEFINED = '__lodash_hash_undefined__';
@@ -50929,10 +52722,10 @@ module.exports = hashSet;
 
 
 /***/ }),
-/* 363 */
+/* 405 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getMapData = __webpack_require__(46);
+var getMapData = __webpack_require__(56);
 
 /**
  * Removes `key` and its value from the map.
@@ -50953,7 +52746,7 @@ module.exports = mapCacheDelete;
 
 
 /***/ }),
-/* 364 */
+/* 406 */
 /***/ (function(module, exports) {
 
 /**
@@ -50974,10 +52767,10 @@ module.exports = isKeyable;
 
 
 /***/ }),
-/* 365 */
+/* 407 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getMapData = __webpack_require__(46);
+var getMapData = __webpack_require__(56);
 
 /**
  * Gets the map value for `key`.
@@ -50996,10 +52789,10 @@ module.exports = mapCacheGet;
 
 
 /***/ }),
-/* 366 */
+/* 408 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getMapData = __webpack_require__(46);
+var getMapData = __webpack_require__(56);
 
 /**
  * Checks if a map value for `key` exists.
@@ -51018,10 +52811,10 @@ module.exports = mapCacheHas;
 
 
 /***/ }),
-/* 367 */
+/* 409 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getMapData = __webpack_require__(46);
+var getMapData = __webpack_require__(56);
 
 /**
  * Sets the map `key` to `value`.
@@ -51046,17 +52839,17 @@ module.exports = mapCacheSet;
 
 
 /***/ }),
-/* 368 */
+/* 410 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Stack = __webpack_require__(103),
-    equalArrays = __webpack_require__(105),
-    equalByTag = __webpack_require__(374),
-    equalObjects = __webpack_require__(378),
-    getTag = __webpack_require__(110),
-    isArray = __webpack_require__(15),
-    isBuffer = __webpack_require__(76),
-    isTypedArray = __webpack_require__(77);
+var Stack = __webpack_require__(127),
+    equalArrays = __webpack_require__(129),
+    equalByTag = __webpack_require__(416),
+    equalObjects = __webpack_require__(420),
+    getTag = __webpack_require__(134),
+    isArray = __webpack_require__(16),
+    isBuffer = __webpack_require__(100),
+    isTypedArray = __webpack_require__(101);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1;
@@ -51135,12 +52928,12 @@ module.exports = baseIsEqualDeep;
 
 
 /***/ }),
-/* 369 */
+/* 411 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var MapCache = __webpack_require__(65),
-    setCacheAdd = __webpack_require__(370),
-    setCacheHas = __webpack_require__(371);
+var MapCache = __webpack_require__(79),
+    setCacheAdd = __webpack_require__(412),
+    setCacheHas = __webpack_require__(413);
 
 /**
  *
@@ -51168,7 +52961,7 @@ module.exports = SetCache;
 
 
 /***/ }),
-/* 370 */
+/* 412 */
 /***/ (function(module, exports) {
 
 /** Used to stand-in for `undefined` hash values. */
@@ -51193,7 +52986,7 @@ module.exports = setCacheAdd;
 
 
 /***/ }),
-/* 371 */
+/* 413 */
 /***/ (function(module, exports) {
 
 /**
@@ -51213,7 +53006,7 @@ module.exports = setCacheHas;
 
 
 /***/ }),
-/* 372 */
+/* 414 */
 /***/ (function(module, exports) {
 
 /**
@@ -51242,7 +53035,7 @@ module.exports = arraySome;
 
 
 /***/ }),
-/* 373 */
+/* 415 */
 /***/ (function(module, exports) {
 
 /**
@@ -51261,15 +53054,15 @@ module.exports = cacheHas;
 
 
 /***/ }),
-/* 374 */
+/* 416 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Symbol = __webpack_require__(39),
-    Uint8Array = __webpack_require__(375),
-    eq = __webpack_require__(40),
-    equalArrays = __webpack_require__(105),
-    mapToArray = __webpack_require__(376),
-    setToArray = __webpack_require__(377);
+var Symbol = __webpack_require__(49),
+    Uint8Array = __webpack_require__(417),
+    eq = __webpack_require__(50),
+    equalArrays = __webpack_require__(129),
+    mapToArray = __webpack_require__(418),
+    setToArray = __webpack_require__(419);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1,
@@ -51379,10 +53172,10 @@ module.exports = equalByTag;
 
 
 /***/ }),
-/* 375 */
+/* 417 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var root = __webpack_require__(10);
+var root = __webpack_require__(11);
 
 /** Built-in value references. */
 var Uint8Array = root.Uint8Array;
@@ -51391,7 +53184,7 @@ module.exports = Uint8Array;
 
 
 /***/ }),
-/* 376 */
+/* 418 */
 /***/ (function(module, exports) {
 
 /**
@@ -51415,7 +53208,7 @@ module.exports = mapToArray;
 
 
 /***/ }),
-/* 377 */
+/* 419 */
 /***/ (function(module, exports) {
 
 /**
@@ -51439,10 +53232,10 @@ module.exports = setToArray;
 
 
 /***/ }),
-/* 378 */
+/* 420 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getAllKeys = __webpack_require__(379);
+var getAllKeys = __webpack_require__(421);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1;
@@ -51535,12 +53328,12 @@ module.exports = equalObjects;
 
 
 /***/ }),
-/* 379 */
+/* 421 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetAllKeys = __webpack_require__(106),
-    getSymbols = __webpack_require__(108),
-    keys = __webpack_require__(26);
+var baseGetAllKeys = __webpack_require__(130),
+    getSymbols = __webpack_require__(132),
+    keys = __webpack_require__(33);
 
 /**
  * Creates an array of own enumerable property names and symbols of `object`.
@@ -51557,7 +53350,7 @@ module.exports = getAllKeys;
 
 
 /***/ }),
-/* 380 */
+/* 422 */
 /***/ (function(module, exports) {
 
 /**
@@ -51588,11 +53381,11 @@ module.exports = arrayFilter;
 
 
 /***/ }),
-/* 381 */
+/* 423 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22),
-    root = __webpack_require__(10);
+var getNative = __webpack_require__(26),
+    root = __webpack_require__(11);
 
 /* Built-in method references that are verified to be native. */
 var DataView = getNative(root, 'DataView');
@@ -51601,11 +53394,11 @@ module.exports = DataView;
 
 
 /***/ }),
-/* 382 */
+/* 424 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22),
-    root = __webpack_require__(10);
+var getNative = __webpack_require__(26),
+    root = __webpack_require__(11);
 
 /* Built-in method references that are verified to be native. */
 var Promise = getNative(root, 'Promise');
@@ -51614,11 +53407,11 @@ module.exports = Promise;
 
 
 /***/ }),
-/* 383 */
+/* 425 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var getNative = __webpack_require__(22),
-    root = __webpack_require__(10);
+var getNative = __webpack_require__(26),
+    root = __webpack_require__(11);
 
 /* Built-in method references that are verified to be native. */
 var Set = getNative(root, 'Set');
@@ -51627,11 +53420,11 @@ module.exports = Set;
 
 
 /***/ }),
-/* 384 */
+/* 426 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var isStrictComparable = __webpack_require__(111),
-    keys = __webpack_require__(26);
+var isStrictComparable = __webpack_require__(135),
+    keys = __webpack_require__(33);
 
 /**
  * Gets the property names, values, and compare flags of `object`.
@@ -51657,16 +53450,16 @@ module.exports = getMatchData;
 
 
 /***/ }),
-/* 385 */
+/* 427 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseIsEqual = __webpack_require__(104),
-    get = __webpack_require__(386),
-    hasIn = __webpack_require__(391),
-    isKey = __webpack_require__(67),
-    isStrictComparable = __webpack_require__(111),
-    matchesStrictComparable = __webpack_require__(112),
-    toKey = __webpack_require__(32);
+var baseIsEqual = __webpack_require__(128),
+    get = __webpack_require__(428),
+    hasIn = __webpack_require__(433),
+    isKey = __webpack_require__(81),
+    isStrictComparable = __webpack_require__(135),
+    matchesStrictComparable = __webpack_require__(136),
+    toKey = __webpack_require__(39);
 
 /** Used to compose bitmasks for value comparisons. */
 var COMPARE_PARTIAL_FLAG = 1,
@@ -51696,10 +53489,10 @@ module.exports = baseMatchesProperty;
 
 
 /***/ }),
-/* 386 */
+/* 428 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGet = __webpack_require__(66);
+var baseGet = __webpack_require__(80);
 
 /**
  * Gets the value at `path` of `object`. If the resolved value is
@@ -51735,10 +53528,10 @@ module.exports = get;
 
 
 /***/ }),
-/* 387 */
+/* 429 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var memoizeCapped = __webpack_require__(388);
+var memoizeCapped = __webpack_require__(430);
 
 /** Used to match property names within property paths. */
 var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
@@ -51768,10 +53561,10 @@ module.exports = stringToPath;
 
 
 /***/ }),
-/* 388 */
+/* 430 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var memoize = __webpack_require__(389);
+var memoize = __webpack_require__(431);
 
 /** Used as the maximum memoize cache size. */
 var MAX_MEMOIZE_SIZE = 500;
@@ -51800,10 +53593,10 @@ module.exports = memoizeCapped;
 
 
 /***/ }),
-/* 389 */
+/* 431 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var MapCache = __webpack_require__(65);
+var MapCache = __webpack_require__(79);
 
 /** Error message constants. */
 var FUNC_ERROR_TEXT = 'Expected a function';
@@ -51879,13 +53672,13 @@ module.exports = memoize;
 
 
 /***/ }),
-/* 390 */
+/* 432 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Symbol = __webpack_require__(39),
-    arrayMap = __webpack_require__(59),
-    isArray = __webpack_require__(15),
-    isSymbol = __webpack_require__(38);
+var Symbol = __webpack_require__(49),
+    arrayMap = __webpack_require__(73),
+    isArray = __webpack_require__(16),
+    isSymbol = __webpack_require__(48);
 
 /** Used as references for various `Number` constants. */
 var INFINITY = 1 / 0;
@@ -51922,11 +53715,11 @@ module.exports = baseToString;
 
 
 /***/ }),
-/* 391 */
+/* 433 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseHasIn = __webpack_require__(392),
-    hasPath = __webpack_require__(393);
+var baseHasIn = __webpack_require__(434),
+    hasPath = __webpack_require__(435);
 
 /**
  * Checks if `path` is a direct or inherited property of `object`.
@@ -51962,7 +53755,7 @@ module.exports = hasIn;
 
 
 /***/ }),
-/* 392 */
+/* 434 */
 /***/ (function(module, exports) {
 
 /**
@@ -51981,15 +53774,15 @@ module.exports = baseHasIn;
 
 
 /***/ }),
-/* 393 */
+/* 435 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var castPath = __webpack_require__(47),
-    isArguments = __webpack_require__(75),
-    isArray = __webpack_require__(15),
-    isIndex = __webpack_require__(30),
-    isLength = __webpack_require__(57),
-    toKey = __webpack_require__(32);
+var castPath = __webpack_require__(57),
+    isArguments = __webpack_require__(99),
+    isArray = __webpack_require__(16),
+    isIndex = __webpack_require__(37),
+    isLength = __webpack_require__(71),
+    toKey = __webpack_require__(39);
 
 /**
  * Checks if `path` exists on `object`.
@@ -52026,13 +53819,13 @@ module.exports = hasPath;
 
 
 /***/ }),
-/* 394 */
+/* 436 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseProperty = __webpack_require__(114),
-    basePropertyDeep = __webpack_require__(395),
-    isKey = __webpack_require__(67),
-    toKey = __webpack_require__(32);
+var baseProperty = __webpack_require__(138),
+    basePropertyDeep = __webpack_require__(437),
+    isKey = __webpack_require__(81),
+    toKey = __webpack_require__(39);
 
 /**
  * Creates a function that returns the value at `path` of a given object.
@@ -52064,10 +53857,10 @@ module.exports = property;
 
 
 /***/ }),
-/* 395 */
+/* 437 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGet = __webpack_require__(66);
+var baseGet = __webpack_require__(80);
 
 /**
  * A specialized version of `baseProperty` which supports deep paths.
@@ -52086,12 +53879,12 @@ module.exports = basePropertyDeep;
 
 
 /***/ }),
-/* 396 */
+/* 438 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGet = __webpack_require__(66),
-    baseSet = __webpack_require__(397),
-    castPath = __webpack_require__(47);
+var baseGet = __webpack_require__(80),
+    baseSet = __webpack_require__(439),
+    castPath = __webpack_require__(57);
 
 /**
  * The base implementation of  `_.pickBy` without support for iteratee shorthands.
@@ -52122,14 +53915,14 @@ module.exports = basePickBy;
 
 
 /***/ }),
-/* 397 */
+/* 439 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var assignValue = __webpack_require__(81),
-    castPath = __webpack_require__(47),
-    isIndex = __webpack_require__(30),
-    isObject = __webpack_require__(17),
-    toKey = __webpack_require__(32);
+var assignValue = __webpack_require__(105),
+    castPath = __webpack_require__(57),
+    isIndex = __webpack_require__(37),
+    isObject = __webpack_require__(20),
+    toKey = __webpack_require__(39);
 
 /**
  * The base implementation of `_.set`.
@@ -52179,12 +53972,12 @@ module.exports = baseSet;
 
 
 /***/ }),
-/* 398 */
+/* 440 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseGetAllKeys = __webpack_require__(106),
-    getSymbolsIn = __webpack_require__(399),
-    keysIn = __webpack_require__(88);
+var baseGetAllKeys = __webpack_require__(130),
+    getSymbolsIn = __webpack_require__(441),
+    keysIn = __webpack_require__(112);
 
 /**
  * Creates an array of own and inherited enumerable property names and
@@ -52202,13 +53995,13 @@ module.exports = getAllKeysIn;
 
 
 /***/ }),
-/* 399 */
+/* 441 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var arrayPush = __webpack_require__(107),
-    getPrototype = __webpack_require__(400),
-    getSymbols = __webpack_require__(108),
-    stubArray = __webpack_require__(109);
+var arrayPush = __webpack_require__(131),
+    getPrototype = __webpack_require__(442),
+    getSymbols = __webpack_require__(132),
+    stubArray = __webpack_require__(133);
 
 /* Built-in method references for those with the same name as other `lodash` methods. */
 var nativeGetSymbols = Object.getOwnPropertySymbols;
@@ -52233,10 +54026,10 @@ module.exports = getSymbolsIn;
 
 
 /***/ }),
-/* 400 */
+/* 442 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var overArg = __webpack_require__(80);
+var overArg = __webpack_require__(104);
 
 /** Built-in value references. */
 var getPrototype = overArg(Object.getPrototypeOf, Object);
@@ -52245,12 +54038,12 @@ module.exports = getPrototype;
 
 
 /***/ }),
-/* 401 */
+/* 443 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var asciiSize = __webpack_require__(402),
-    hasUnicode = __webpack_require__(403),
-    unicodeSize = __webpack_require__(404);
+var asciiSize = __webpack_require__(444),
+    hasUnicode = __webpack_require__(445),
+    unicodeSize = __webpack_require__(446);
 
 /**
  * Gets the number of symbols in `string`.
@@ -52269,10 +54062,10 @@ module.exports = stringSize;
 
 
 /***/ }),
-/* 402 */
+/* 444 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var baseProperty = __webpack_require__(114);
+var baseProperty = __webpack_require__(138);
 
 /**
  * Gets the size of an ASCII `string`.
@@ -52287,7 +54080,7 @@ module.exports = asciiSize;
 
 
 /***/ }),
-/* 403 */
+/* 445 */
 /***/ (function(module, exports) {
 
 /** Used to compose unicode character classes. */
@@ -52319,7 +54112,7 @@ module.exports = hasUnicode;
 
 
 /***/ }),
-/* 404 */
+/* 446 */
 /***/ (function(module, exports) {
 
 /** Used to compose unicode character classes. */
@@ -52369,327 +54162,2274 @@ module.exports = unicodeSize;
 
 
 /***/ }),
-/* 405 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+/* 447 */
+/***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _websocket_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54);
-/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
-/*
-    This program is distributed under the terms of the MIT license.
-    Please see the LICENSE file for details.
 
-    Copyright 2020, JC Brand
-*/
 
+exports.__esModule = true;
 
-const lmap = {};
-lmap['debug'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.DEBUG;
-lmap['info'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.INFO;
-lmap['warn'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.WARN;
-lmap['error'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR;
-lmap['fatal'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.FATAL;
-/** Class: Strophe.WorkerWebsocket
- *  _Private_ helper class that handles a websocket connection inside a shared worker.
- */
+var _defineProperty = __webpack_require__(448);
 
-_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].WorkerWebsocket = class WorkerWebsocket extends _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Websocket {
-  /** PrivateConstructor: Strophe.WorkerWebsocket
-   *  Create and initialize a Strophe.WorkerWebsocket object.
-   *
-   *  Parameters:
-   *    (Strophe.Connection) connection - The Strophe.Connection
-   *
-   *  Returns:
-   *    A new Strophe.WorkerWebsocket object.
-   */
-  constructor(connection) {
-    super(connection);
-    this._conn = connection;
-    this.worker = new SharedWorker(this._conn.options.worker, 'Strophe XMPP Connection');
+var _defineProperty2 = _interopRequireDefault(_defineProperty);
 
-    this.worker.onerror = e => {
-      var _console;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-      (_console = console) === null || _console === void 0 ? void 0 : _console.error(e);
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, "Shared Worker Error: ".concat(e));
-    };
+exports.default = function (obj, key, value) {
+  if (key in obj) {
+    (0, _defineProperty2.default)(obj, key, {
+      value: value,
+      enumerable: true,
+      configurable: true,
+      writable: true
+    });
+  } else {
+    obj[key] = value;
   }
 
-  get socket() {
-    return {
-      'send': str => this.worker.port.postMessage(['send', str])
-    };
+  return obj;
+};
+
+/***/ }),
+/* 448 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(449), __esModule: true };
+
+/***/ }),
+/* 449 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(450);
+var $Object = __webpack_require__(19).Object;
+module.exports = function defineProperty(it, key, desc) {
+  return $Object.defineProperty(it, key, desc);
+};
+
+
+/***/ }),
+/* 450 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__(30);
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !__webpack_require__(32), 'Object', { defineProperty: __webpack_require__(40).f });
+
+
+/***/ }),
+/* 451 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(32) && !__webpack_require__(82)(function () {
+  return Object.defineProperty(__webpack_require__(83)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 452 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(41);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+  if (!isObject(it)) return it;
+  var fn, val;
+  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+  throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 453 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(454), __esModule: true };
+
+/***/ }),
+/* 454 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(455);
+module.exports = __webpack_require__(19).Object.keys;
+
+
+/***/ }),
+/* 455 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 Object.keys(O)
+var toObject = __webpack_require__(141);
+var $keys = __webpack_require__(142);
+
+__webpack_require__(460)('keys', function () {
+  return function keys(it) {
+    return $keys(toObject(it));
+  };
+});
+
+
+/***/ }),
+/* 456 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(60);
+var toIObject = __webpack_require__(85);
+var arrayIndexOf = __webpack_require__(458)(false);
+var IE_PROTO = __webpack_require__(87)('IE_PROTO');
+
+module.exports = function (object, names) {
+  var O = toIObject(object);
+  var i = 0;
+  var result = [];
+  var key;
+  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+  // Don't enum bug & hidden keys
+  while (names.length > i) if (has(O, key = names[i++])) {
+    ~arrayIndexOf(result, key) || result.push(key);
   }
+  return result;
+};
 
-  _connect() {
-    this._messageHandler = m => this._onInitialMessage(m);
 
-    this.worker.port.start();
+/***/ }),
+/* 457 */
+/***/ (function(module, exports, __webpack_require__) {
 
-    this.worker.port.onmessage = ev => this._onWorkerMessage(ev);
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(61);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+  return cof(it) == 'String' ? it.split('') : Object(it);
+};
 
-    this.worker.port.postMessage(['_connect', this._conn.service, this._conn.jid]);
+
+/***/ }),
+/* 458 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true  -> Array#includes
+var toIObject = __webpack_require__(85);
+var toLength = __webpack_require__(143);
+var toAbsoluteIndex = __webpack_require__(459);
+module.exports = function (IS_INCLUDES) {
+  return function ($this, el, fromIndex) {
+    var O = toIObject($this);
+    var length = toLength(O.length);
+    var index = toAbsoluteIndex(fromIndex, length);
+    var value;
+    // Array#includes uses SameValueZero equality algorithm
+    // eslint-disable-next-line no-self-compare
+    if (IS_INCLUDES && el != el) while (length > index) {
+      value = O[index++];
+      // eslint-disable-next-line no-self-compare
+      if (value != value) return true;
+    // Array#indexOf ignores holes, Array#includes - not
+    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+      if (O[index] === el) return IS_INCLUDES || index || 0;
+    } return !IS_INCLUDES && -1;
+  };
+};
+
+
+/***/ }),
+/* 459 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(86);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+  index = toInteger(index);
+  return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 460 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// most Object methods by ES6 should accept primitives
+var $export = __webpack_require__(30);
+var core = __webpack_require__(19);
+var fails = __webpack_require__(82);
+module.exports = function (KEY, exec) {
+  var fn = (core.Object || {})[KEY] || Object[KEY];
+  var exp = {};
+  exp[KEY] = exec(fn);
+  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
+};
+
+
+/***/ }),
+/* 461 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(462);
+
+
+/***/ }),
+/* 462 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// This method of obtaining a reference to the global object needs to be
+// kept identical to the way it is obtained in runtime.js
+var g = (function() { return this })() || Function("return this")();
+
+// Use `getOwnPropertyNames` because not all browsers support calling
+// `hasOwnProperty` on the global `self` object in a worker. See #183.
+var hadRuntime = g.regeneratorRuntime &&
+  Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
+
+// Save the old regeneratorRuntime in case it needs to be restored later.
+var oldRuntime = hadRuntime && g.regeneratorRuntime;
+
+// Force reevalutation of runtime.js.
+g.regeneratorRuntime = undefined;
+
+module.exports = __webpack_require__(463);
+
+if (hadRuntime) {
+  // Restore the original runtime.
+  g.regeneratorRuntime = oldRuntime;
+} else {
+  // Remove the global property added by runtime.js.
+  try {
+    delete g.regeneratorRuntime;
+  } catch(e) {
+    g.regeneratorRuntime = undefined;
   }
+}
 
-  _attach(callback) {
-    this._messageHandler = m => this._onMessage(m);
 
-    this._conn.connect_callback = callback;
-    this.worker.port.start();
+/***/ }),
+/* 463 */
+/***/ (function(module, exports) {
 
-    this.worker.port.onmessage = ev => this._onWorkerMessage(ev);
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
 
-    this.worker.port.postMessage(['_attach', this._conn.service]);
+!(function(global) {
+  "use strict";
+
+  var Op = Object.prototype;
+  var hasOwn = Op.hasOwnProperty;
+  var undefined; // More compressible than void 0.
+  var $Symbol = typeof Symbol === "function" ? Symbol : {};
+  var iteratorSymbol = $Symbol.iterator || "@@iterator";
+  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
+  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
+
+  var inModule = typeof module === "object";
+  var runtime = global.regeneratorRuntime;
+  if (runtime) {
+    if (inModule) {
+      // If regeneratorRuntime is defined globally and we're in a module,
+      // make the exports object identical to regeneratorRuntime.
+      module.exports = runtime;
+    }
+    // Don't bother evaluating the rest of this file if the runtime was
+    // already defined globally.
+    return;
   }
 
-  _attachCallback(status, jid) {
-    if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHED) {
-      this._conn.jid = jid;
-      this._conn.authenticated = true;
-      this._conn.connected = true;
-      this._conn.restored = true;
+  // Define the runtime globally (as expected by generated code) as either
+  // module.exports (if we're in a module) or a new, empty object.
+  runtime = global.regeneratorRuntime = inModule ? module.exports : {};
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHED);
-    } else if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHFAIL) {
-      this._conn.authenticated = false;
-      this._conn.connected = false;
-      this._conn.restored = false;
+  function wrap(innerFn, outerFn, self, tryLocsList) {
+    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
+    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
+    var generator = Object.create(protoGenerator.prototype);
+    var context = new Context(tryLocsList || []);
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHFAIL);
+    // The ._invoke method unifies the implementations of the .next,
+    // .throw, and .return methods.
+    generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+    return generator;
+  }
+  runtime.wrap = wrap;
+
+  // Try/catch helper to minimize deoptimizations. Returns a completion
+  // record like context.tryEntries[i].completion. This interface could
+  // have been (and was previously) designed to take a closure to be
+  // invoked without arguments, but in all the cases we care about we
+  // already have an existing method we want to call, so there's no need
+  // to create a new function object. We can even get away with assuming
+  // the method takes exactly one argument, since that happens to be true
+  // in every case, so we don't have to touch the arguments object. The
+  // only additional allocation required is the completion record, which
+  // has a stable shape and so hopefully should be cheap to allocate.
+  function tryCatch(fn, obj, arg) {
+    try {
+      return { type: "normal", arg: fn.call(obj, arg) };
+    } catch (err) {
+      return { type: "throw", arg: err };
     }
   }
 
-  _disconnect(readyState, pres) {
-    pres && this._conn.send(pres);
-    const close = Object(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])("close", {
-      "xmlns": _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].NS.FRAMING
+  var GenStateSuspendedStart = "suspendedStart";
+  var GenStateSuspendedYield = "suspendedYield";
+  var GenStateExecuting = "executing";
+  var GenStateCompleted = "completed";
+
+  // Returning this object from the innerFn has the same effect as
+  // breaking out of the dispatch switch statement.
+  var ContinueSentinel = {};
+
+  // Dummy constructor functions that we use as the .constructor and
+  // .constructor.prototype properties for functions that return Generator
+  // objects. For full spec compliance, you may wish to configure your
+  // minifier not to mangle the names of these two functions.
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+
+  // This is a polyfill for %IteratorPrototype% for environments that
+  // don't natively support it.
+  var IteratorPrototype = {};
+  IteratorPrototype[iteratorSymbol] = function () {
+    return this;
+  };
+
+  var getProto = Object.getPrototypeOf;
+  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+  if (NativeIteratorPrototype &&
+      NativeIteratorPrototype !== Op &&
+      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
+    // This environment has a native %IteratorPrototype%; use it instead
+    // of the polyfill.
+    IteratorPrototype = NativeIteratorPrototype;
+  }
+
+  var Gp = GeneratorFunctionPrototype.prototype =
+    Generator.prototype = Object.create(IteratorPrototype);
+  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+  GeneratorFunctionPrototype.constructor = GeneratorFunction;
+  GeneratorFunctionPrototype[toStringTagSymbol] =
+    GeneratorFunction.displayName = "GeneratorFunction";
+
+  // Helper for defining the .next, .throw, and .return methods of the
+  // Iterator interface in terms of a single ._invoke method.
+  function defineIteratorMethods(prototype) {
+    ["next", "throw", "return"].forEach(function(method) {
+      prototype[method] = function(arg) {
+        return this._invoke(method, arg);
+      };
     });
+  }
 
-    this._conn.xmlOutput(close.tree());
+  runtime.isGeneratorFunction = function(genFun) {
+    var ctor = typeof genFun === "function" && genFun.constructor;
+    return ctor
+      ? ctor === GeneratorFunction ||
+        // For the native GeneratorFunction constructor, the best we can
+        // do is to check its .name property.
+        (ctor.displayName || ctor.name) === "GeneratorFunction"
+      : false;
+  };
 
-    const closeString = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].serialize(close);
+  runtime.mark = function(genFun) {
+    if (Object.setPrototypeOf) {
+      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+    } else {
+      genFun.__proto__ = GeneratorFunctionPrototype;
+      if (!(toStringTagSymbol in genFun)) {
+        genFun[toStringTagSymbol] = "GeneratorFunction";
+      }
+    }
+    genFun.prototype = Object.create(Gp);
+    return genFun;
+  };
 
-    this._conn.rawOutput(closeString);
+  // Within the body of any async function, `await x` is transformed to
+  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+  // `hasOwn.call(value, "__await")` to determine if the yielded value is
+  // meant to be awaited.
+  runtime.awrap = function(arg) {
+    return { __await: arg };
+  };
 
-    this.worker.port.postMessage(['send', closeString]);
+  function AsyncIterator(generator) {
+    function invoke(method, arg, resolve, reject) {
+      var record = tryCatch(generator[method], generator, arg);
+      if (record.type === "throw") {
+        reject(record.arg);
+      } else {
+        var result = record.arg;
+        var value = result.value;
+        if (value &&
+            typeof value === "object" &&
+            hasOwn.call(value, "__await")) {
+          return Promise.resolve(value.__await).then(function(value) {
+            invoke("next", value, resolve, reject);
+          }, function(err) {
+            invoke("throw", err, resolve, reject);
+          });
+        }
 
-    this._conn._doDisconnect();
+        return Promise.resolve(value).then(function(unwrapped) {
+          // When a yielded Promise is resolved, its final value becomes
+          // the .value of the Promise<{value,done}> result for the
+          // current iteration. If the Promise is rejected, however, the
+          // result for this iteration will be rejected with the same
+          // reason. Note that rejections of yielded Promises are not
+          // thrown back into the generator function, as is the case
+          // when an awaited Promise is rejected. This difference in
+          // behavior between yield and await is important, because it
+          // allows the consumer to decide what to do with the yielded
+          // rejection (swallow it and continue, manually .throw it back
+          // into the generator, abandon iteration, whatever). With
+          // await, by contrast, there is no opportunity to examine the
+          // rejection reason outside the generator function, so the
+          // only option is to throw it from the await expression, and
+          // let the generator function handle the exception.
+          result.value = unwrapped;
+          resolve(result);
+        }, reject);
+      }
+    }
+
+    var previousPromise;
+
+    function enqueue(method, arg) {
+      function callInvokeWithMethodAndArg() {
+        return new Promise(function(resolve, reject) {
+          invoke(method, arg, resolve, reject);
+        });
+      }
+
+      return previousPromise =
+        // If enqueue has been called before, then we want to wait until
+        // all previous Promises have been resolved before calling invoke,
+        // so that results are always delivered in the correct order. If
+        // enqueue has not been called before, then it is important to
+        // call invoke immediately, without waiting on a callback to fire,
+        // so that the async generator function has the opportunity to do
+        // any necessary setup in a predictable way. This predictability
+        // is why the Promise constructor synchronously invokes its
+        // executor callback, and why async functions synchronously
+        // execute code before the first await. Since we implement simple
+        // async functions in terms of async generators, it is especially
+        // important to get this right, even though it requires care.
+        previousPromise ? previousPromise.then(
+          callInvokeWithMethodAndArg,
+          // Avoid propagating failures to Promises returned by later
+          // invocations of the iterator.
+          callInvokeWithMethodAndArg
+        ) : callInvokeWithMethodAndArg();
+    }
+
+    // Define the unified helper method that is used to implement .next,
+    // .throw, and .return (see defineIteratorMethods).
+    this._invoke = enqueue;
+  }
+
+  defineIteratorMethods(AsyncIterator.prototype);
+  AsyncIterator.prototype[asyncIteratorSymbol] = function () {
+    return this;
+  };
+  runtime.AsyncIterator = AsyncIterator;
+
+  // Note that simple async functions are implemented on top of
+  // AsyncIterator objects; they just return a Promise for the value of
+  // the final result produced by the iterator.
+  runtime.async = function(innerFn, outerFn, self, tryLocsList) {
+    var iter = new AsyncIterator(
+      wrap(innerFn, outerFn, self, tryLocsList)
+    );
+
+    return runtime.isGeneratorFunction(outerFn)
+      ? iter // If outerFn is a generator, return the full iterator.
+      : iter.next().then(function(result) {
+          return result.done ? result.value : iter.next();
+        });
+  };
+
+  function makeInvokeMethod(innerFn, self, context) {
+    var state = GenStateSuspendedStart;
+
+    return function invoke(method, arg) {
+      if (state === GenStateExecuting) {
+        throw new Error("Generator is already running");
+      }
+
+      if (state === GenStateCompleted) {
+        if (method === "throw") {
+          throw arg;
+        }
+
+        // Be forgiving, per 25.3.3.3.3 of the spec:
+        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+        return doneResult();
+      }
+
+      context.method = method;
+      context.arg = arg;
+
+      while (true) {
+        var delegate = context.delegate;
+        if (delegate) {
+          var delegateResult = maybeInvokeDelegate(delegate, context);
+          if (delegateResult) {
+            if (delegateResult === ContinueSentinel) continue;
+            return delegateResult;
+          }
+        }
+
+        if (context.method === "next") {
+          // Setting context._sent for legacy support of Babel's
+          // function.sent implementation.
+          context.sent = context._sent = context.arg;
+
+        } else if (context.method === "throw") {
+          if (state === GenStateSuspendedStart) {
+            state = GenStateCompleted;
+            throw context.arg;
+          }
+
+          context.dispatchException(context.arg);
+
+        } else if (context.method === "return") {
+          context.abrupt("return", context.arg);
+        }
+
+        state = GenStateExecuting;
+
+        var record = tryCatch(innerFn, self, context);
+        if (record.type === "normal") {
+          // If an exception is thrown from innerFn, we leave state ===
+          // GenStateExecuting and loop back for another invocation.
+          state = context.done
+            ? GenStateCompleted
+            : GenStateSuspendedYield;
+
+          if (record.arg === ContinueSentinel) {
+            continue;
+          }
+
+          return {
+            value: record.arg,
+            done: context.done
+          };
+
+        } else if (record.type === "throw") {
+          state = GenStateCompleted;
+          // Dispatch the exception by looping back around to the
+          // context.dispatchException(context.arg) call above.
+          context.method = "throw";
+          context.arg = record.arg;
+        }
+      }
+    };
   }
 
-  _onClose(e) {
-    if (this._conn.connected && !this._conn.disconnecting) {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].error("Websocket closed unexpectedly");
+  // Call delegate.iterator[context.method](context.arg) and handle the
+  // result, either by returning a { value, done } result from the
+  // delegate iterator, or by modifying context.method and context.arg,
+  // setting context.delegate to null, and returning the ContinueSentinel.
+  function maybeInvokeDelegate(delegate, context) {
+    var method = delegate.iterator[context.method];
+    if (method === undefined) {
+      // A .throw or .return when the delegate iterator has no .throw
+      // method always terminates the yield* loop.
+      context.delegate = null;
+
+      if (context.method === "throw") {
+        if (delegate.iterator.return) {
+          // If the delegate iterator has a return method, give it a
+          // chance to clean up.
+          context.method = "return";
+          context.arg = undefined;
+          maybeInvokeDelegate(delegate, context);
+
+          if (context.method === "throw") {
+            // If maybeInvokeDelegate(context) changed context.method from
+            // "return" to "throw", let that override the TypeError below.
+            return ContinueSentinel;
+          }
+        }
 
-      this._conn._doDisconnect();
-    } else if (e && e.code === 1006 && !this._conn.connected) {
-      // in case the onError callback was not called (Safari 10 does not
-      // call onerror when the initial connection fails) we need to
-      // dispatch a CONNFAIL status update to be consistent with the
-      // behavior on other browsers.
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].error("Websocket closed unexcectedly");
+        context.method = "throw";
+        context.arg = new TypeError(
+          "The iterator does not provide a 'throw' method");
+      }
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
+      return ContinueSentinel;
+    }
+
+    var record = tryCatch(method, delegate.iterator, context.arg);
+
+    if (record.type === "throw") {
+      context.method = "throw";
+      context.arg = record.arg;
+      context.delegate = null;
+      return ContinueSentinel;
+    }
+
+    var info = record.arg;
+
+    if (! info) {
+      context.method = "throw";
+      context.arg = new TypeError("iterator result is not an object");
+      context.delegate = null;
+      return ContinueSentinel;
+    }
+
+    if (info.done) {
+      // Assign the result of the finished delegate to the temporary
+      // variable specified by delegate.resultName (see delegateYield).
+      context[delegate.resultName] = info.value;
+
+      // Resume execution at the desired location (see delegateYield).
+      context.next = delegate.nextLoc;
+
+      // If context.method was "throw" but the delegate handled the
+      // exception, let the outer generator proceed normally. If
+      // context.method was "next", forget context.arg since it has been
+      // "consumed" by the delegate iterator. If context.method was
+      // "return", allow the original .return call to continue in the
+      // outer generator.
+      if (context.method !== "return") {
+        context.method = "next";
+        context.arg = undefined;
+      }
 
-      this._conn._doDisconnect();
     } else {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].debug("Websocket closed");
+      // Re-yield the result returned by the delegate method.
+      return info;
     }
+
+    // The delegate iterator is finished, so forget it and continue with
+    // the outer generator.
+    context.delegate = null;
+    return ContinueSentinel;
   }
 
-  _closeSocket() {
-    this.worker.port.postMessage(['_closeSocket']);
+  // Define Generator.prototype.{next,throw,return} in terms of the
+  // unified ._invoke helper method.
+  defineIteratorMethods(Gp);
+
+  Gp[toStringTagSymbol] = "Generator";
+
+  // A Generator should always return itself as the iterator object when the
+  // @@iterator function is called on it. Some browsers' implementations of the
+  // iterator prototype chain incorrectly implement this, causing the Generator
+  // object to not be returned from this call. This ensures that doesn't happen.
+  // See https://github.com/facebook/regenerator/issues/274 for more details.
+  Gp[iteratorSymbol] = function() {
+    return this;
+  };
+
+  Gp.toString = function() {
+    return "[object Generator]";
+  };
+
+  function pushTryEntry(locs) {
+    var entry = { tryLoc: locs[0] };
+
+    if (1 in locs) {
+      entry.catchLoc = locs[1];
+    }
+
+    if (2 in locs) {
+      entry.finallyLoc = locs[2];
+      entry.afterLoc = locs[3];
+    }
+
+    this.tryEntries.push(entry);
   }
-  /** PrivateFunction: _replaceMessageHandler
-   *
-   * Called by _onInitialMessage in order to replace itself with the general message handler.
-   * This method is overridden by Strophe.WorkerWebsocket, which manages a
-   * websocket connection via a service worker and doesn't have direct access
-   * to the socket.
-   */
 
+  function resetTryEntry(entry) {
+    var record = entry.completion || {};
+    record.type = "normal";
+    delete record.arg;
+    entry.completion = record;
+  }
 
-  _replaceMessageHandler() {
-    this._messageHandler = m => this._onMessage(m);
+  function Context(tryLocsList) {
+    // The root entry object (effectively a try statement without a catch
+    // or a finally block) gives us a place to store values thrown from
+    // locations where there is no enclosing try statement.
+    this.tryEntries = [{ tryLoc: "root" }];
+    tryLocsList.forEach(pushTryEntry, this);
+    this.reset(true);
   }
-  /** PrivateFunction: _onWorkerMessage
-   * _Private_ function that handles messages received from the service worker
-   */
 
+  runtime.keys = function(object) {
+    var keys = [];
+    for (var key in object) {
+      keys.push(key);
+    }
+    keys.reverse();
 
-  _onWorkerMessage(ev) {
-    const {
-      data
-    } = ev;
-    const method_name = data[0];
+    // Rather than returning an object with a next method, we keep
+    // things simple and return the next function itself.
+    return function next() {
+      while (keys.length) {
+        var key = keys.pop();
+        if (key in object) {
+          next.value = key;
+          next.done = false;
+          return next;
+        }
+      }
 
-    if (method_name === '_onMessage') {
-      this._messageHandler(data[1]);
-    } else if (method_name in this) {
-      try {
-        this[method_name].apply(this, ev.data.slice(1));
-      } catch (e) {
-        _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, e);
+      // To avoid creating an additional object, we just hang the .value
+      // and .done properties off the next function object itself. This
+      // also ensures that the minifier will not anonymize the function.
+      next.done = true;
+      return next;
+    };
+  };
+
+  function values(iterable) {
+    if (iterable) {
+      var iteratorMethod = iterable[iteratorSymbol];
+      if (iteratorMethod) {
+        return iteratorMethod.call(iterable);
+      }
+
+      if (typeof iterable.next === "function") {
+        return iterable;
+      }
+
+      if (!isNaN(iterable.length)) {
+        var i = -1, next = function next() {
+          while (++i < iterable.length) {
+            if (hasOwn.call(iterable, i)) {
+              next.value = iterable[i];
+              next.done = false;
+              return next;
+            }
+          }
+
+          next.value = undefined;
+          next.done = true;
+
+          return next;
+        };
+
+        return next.next = next;
       }
-    } else if (method_name === 'log') {
-      const level = data[1];
-      const msg = data[2];
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(lmap[level], msg);
-    } else {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, "Found unhandled service worker message: ".concat(data));
     }
+
+    // Return an iterator with no values.
+    return { next: doneResult };
   }
+  runtime.values = values;
+
+  function doneResult() {
+    return { value: undefined, done: true };
+  }
+
+  Context.prototype = {
+    constructor: Context,
+
+    reset: function(skipTempReset) {
+      this.prev = 0;
+      this.next = 0;
+      // Resetting context._sent for legacy support of Babel's
+      // function.sent implementation.
+      this.sent = this._sent = undefined;
+      this.done = false;
+      this.delegate = null;
+
+      this.method = "next";
+      this.arg = undefined;
+
+      this.tryEntries.forEach(resetTryEntry);
+
+      if (!skipTempReset) {
+        for (var name in this) {
+          // Not sure about the optimal order of these conditions:
+          if (name.charAt(0) === "t" &&
+              hasOwn.call(this, name) &&
+              !isNaN(+name.slice(1))) {
+            this[name] = undefined;
+          }
+        }
+      }
+    },
+
+    stop: function() {
+      this.done = true;
+
+      var rootEntry = this.tryEntries[0];
+      var rootRecord = rootEntry.completion;
+      if (rootRecord.type === "throw") {
+        throw rootRecord.arg;
+      }
+
+      return this.rval;
+    },
+
+    dispatchException: function(exception) {
+      if (this.done) {
+        throw exception;
+      }
+
+      var context = this;
+      function handle(loc, caught) {
+        record.type = "throw";
+        record.arg = exception;
+        context.next = loc;
+
+        if (caught) {
+          // If the dispatched exception was caught by a catch block,
+          // then let that catch block handle the exception normally.
+          context.method = "next";
+          context.arg = undefined;
+        }
+
+        return !! caught;
+      }
+
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        var record = entry.completion;
+
+        if (entry.tryLoc === "root") {
+          // Exception thrown outside of any try block that could handle
+          // it, so set the completion value of the entire function to
+          // throw the exception.
+          return handle("end");
+        }
+
+        if (entry.tryLoc <= this.prev) {
+          var hasCatch = hasOwn.call(entry, "catchLoc");
+          var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+          if (hasCatch && hasFinally) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            } else if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else if (hasCatch) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            }
+
+          } else if (hasFinally) {
+            if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else {
+            throw new Error("try statement without catch or finally");
+          }
+        }
+      }
+    },
+
+    abrupt: function(type, arg) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc <= this.prev &&
+            hasOwn.call(entry, "finallyLoc") &&
+            this.prev < entry.finallyLoc) {
+          var finallyEntry = entry;
+          break;
+        }
+      }
+
+      if (finallyEntry &&
+          (type === "break" ||
+           type === "continue") &&
+          finallyEntry.tryLoc <= arg &&
+          arg <= finallyEntry.finallyLoc) {
+        // Ignore the finally entry if control is not jumping to a
+        // location outside the try/catch block.
+        finallyEntry = null;
+      }
+
+      var record = finallyEntry ? finallyEntry.completion : {};
+      record.type = type;
+      record.arg = arg;
+
+      if (finallyEntry) {
+        this.method = "next";
+        this.next = finallyEntry.finallyLoc;
+        return ContinueSentinel;
+      }
+
+      return this.complete(record);
+    },
+
+    complete: function(record, afterLoc) {
+      if (record.type === "throw") {
+        throw record.arg;
+      }
+
+      if (record.type === "break" ||
+          record.type === "continue") {
+        this.next = record.arg;
+      } else if (record.type === "return") {
+        this.rval = this.arg = record.arg;
+        this.method = "return";
+        this.next = "end";
+      } else if (record.type === "normal" && afterLoc) {
+        this.next = afterLoc;
+      }
+
+      return ContinueSentinel;
+    },
+
+    finish: function(finallyLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.finallyLoc === finallyLoc) {
+          this.complete(entry.completion, entry.afterLoc);
+          resetTryEntry(entry);
+          return ContinueSentinel;
+        }
+      }
+    },
+
+    "catch": function(tryLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc === tryLoc) {
+          var record = entry.completion;
+          if (record.type === "throw") {
+            var thrown = record.arg;
+            resetTryEntry(entry);
+          }
+          return thrown;
+        }
+      }
+
+      // The context.catch method must only be called with a location
+      // argument that corresponds to a known catch block.
+      throw new Error("illegal catch attempt");
+    },
+
+    delegateYield: function(iterable, resultName, nextLoc) {
+      this.delegate = {
+        iterator: values(iterable),
+        resultName: resultName,
+        nextLoc: nextLoc
+      };
+
+      if (this.method === "next") {
+        // Deliberately forget the last sent value so that we don't
+        // accidentally pass it on to the delegate.
+        this.arg = undefined;
+      }
+
+      return ContinueSentinel;
+    }
+  };
+})(
+  // In sloppy mode, unbound `this` refers to the global object, fallback to
+  // Function constructor if we're in global strict mode. That is sadly a form
+  // of indirect eval which violates Content Security Policy.
+  (function() { return this })() || Function("return this")()
+);
 
-};
 
 /***/ }),
-/* 406 */
+/* 464 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var map = {
-	"./af/LC_MESSAGES/converse.po": [
-		419,
-		139
-	],
-	"./ar/LC_MESSAGES/converse.po": [
-		420,
-		140
-	],
-	"./bg/LC_MESSAGES/converse.po": [
-		421,
-		141
-	],
-	"./ca/LC_MESSAGES/converse.po": [
-		422,
-		142
-	],
-	"./cs/LC_MESSAGES/converse.po": [
-		423,
-		143
+"use strict";
+
+
+exports.__esModule = true;
+
+var _promise = __webpack_require__(89);
+
+var _promise2 = _interopRequireDefault(_promise);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function (fn) {
+  return function () {
+    var gen = fn.apply(this, arguments);
+    return new _promise2.default(function (resolve, reject) {
+      function step(key, arg) {
+        try {
+          var info = gen[key](arg);
+          var value = info.value;
+        } catch (error) {
+          reject(error);
+          return;
+        }
+
+        if (info.done) {
+          resolve(value);
+        } else {
+          return _promise2.default.resolve(value).then(function (value) {
+            step("next", value);
+          }, function (err) {
+            step("throw", err);
+          });
+        }
+      }
+
+      return step("next");
+    });
+  };
+};
+
+/***/ }),
+/* 465 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(466);
+__webpack_require__(467);
+__webpack_require__(474);
+__webpack_require__(478);
+__webpack_require__(490);
+__webpack_require__(491);
+module.exports = __webpack_require__(19).Promise;
+
+
+/***/ }),
+/* 466 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 467 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(468)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(147)(String, 'String', function (iterated) {
+  this._t = String(iterated); // target
+  this._i = 0;                // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+  var O = this._t;
+  var index = this._i;
+  var point;
+  if (index >= O.length) return { value: undefined, done: true };
+  point = $at(O, index);
+  this._i += point.length;
+  return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 468 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(86);
+var defined = __webpack_require__(84);
+// true  -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+  return function (that, pos) {
+    var s = String(defined(that));
+    var i = toInteger(pos);
+    var l = s.length;
+    var a, b;
+    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+    a = s.charCodeAt(i);
+    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+      ? TO_STRING ? s.charAt(i) : a
+      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+  };
+};
+
+
+/***/ }),
+/* 469 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(31);
+
+
+/***/ }),
+/* 470 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(471);
+var descriptor = __webpack_require__(140);
+var setToStringTag = __webpack_require__(90);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(31)(IteratorPrototype, __webpack_require__(17)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+  setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 471 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(27);
+var dPs = __webpack_require__(472);
+var enumBugKeys = __webpack_require__(146);
+var IE_PROTO = __webpack_require__(87)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+  // Thrash, waste and sodomy: IE GC bug
+  var iframe = __webpack_require__(83)('iframe');
+  var i = enumBugKeys.length;
+  var lt = '<';
+  var gt = '>';
+  var iframeDocument;
+  iframe.style.display = 'none';
+  __webpack_require__(148).appendChild(iframe);
+  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+  // createDict = iframe.contentWindow.Object;
+  // html.removeChild(iframe);
+  iframeDocument = iframe.contentWindow.document;
+  iframeDocument.open();
+  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+  iframeDocument.close();
+  createDict = iframeDocument.F;
+  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+  return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+  var result;
+  if (O !== null) {
+    Empty[PROTOTYPE] = anObject(O);
+    result = new Empty();
+    Empty[PROTOTYPE] = null;
+    // add "__proto__" for Object.getPrototypeOf polyfill
+    result[IE_PROTO] = O;
+  } else result = createDict();
+  return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 472 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(40);
+var anObject = __webpack_require__(27);
+var getKeys = __webpack_require__(142);
+
+module.exports = __webpack_require__(32) ? Object.defineProperties : function defineProperties(O, Properties) {
+  anObject(O);
+  var keys = getKeys(Properties);
+  var length = keys.length;
+  var i = 0;
+  var P;
+  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+  return O;
+};
+
+
+/***/ }),
+/* 473 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(60);
+var toObject = __webpack_require__(141);
+var IE_PROTO = __webpack_require__(87)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+  O = toObject(O);
+  if (has(O, IE_PROTO)) return O[IE_PROTO];
+  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+    return O.constructor.prototype;
+  } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 474 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(475);
+var global = __webpack_require__(13);
+var hide = __webpack_require__(31);
+var Iterators = __webpack_require__(42);
+var TO_STRING_TAG = __webpack_require__(17)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+  'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+  var NAME = DOMIterables[i];
+  var Collection = global[NAME];
+  var proto = Collection && Collection.prototype;
+  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+  Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 475 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(476);
+var step = __webpack_require__(477);
+var Iterators = __webpack_require__(42);
+var toIObject = __webpack_require__(85);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(147)(Array, 'Array', function (iterated, kind) {
+  this._t = toIObject(iterated); // target
+  this._i = 0;                   // next index
+  this._k = kind;                // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+  var O = this._t;
+  var kind = this._k;
+  var index = this._i++;
+  if (!O || index >= O.length) {
+    this._t = undefined;
+    return step(1);
+  }
+  if (kind == 'keys') return step(0, index);
+  if (kind == 'values') return step(0, O[index]);
+  return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 476 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 477 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+  return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 478 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(88);
+var global = __webpack_require__(13);
+var ctx = __webpack_require__(58);
+var classof = __webpack_require__(149);
+var $export = __webpack_require__(30);
+var isObject = __webpack_require__(41);
+var aFunction = __webpack_require__(59);
+var anInstance = __webpack_require__(479);
+var forOf = __webpack_require__(480);
+var speciesConstructor = __webpack_require__(150);
+var task = __webpack_require__(151).set;
+var microtask = __webpack_require__(485)();
+var newPromiseCapabilityModule = __webpack_require__(91);
+var perform = __webpack_require__(152);
+var userAgent = __webpack_require__(486);
+var promiseResolve = __webpack_require__(153);
+var PROMISE = 'Promise';
+var TypeError = global.TypeError;
+var process = global.process;
+var versions = process && process.versions;
+var v8 = versions && versions.v8 || '';
+var $Promise = global[PROMISE];
+var isNode = classof(process) == 'process';
+var empty = function () { /* empty */ };
+var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
+var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;
+
+var USE_NATIVE = !!function () {
+  try {
+    // correct subclassing with @@species support
+    var promise = $Promise.resolve(1);
+    var FakePromise = (promise.constructor = {})[__webpack_require__(17)('species')] = function (exec) {
+      exec(empty, empty);
+    };
+    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
+    return (isNode || typeof PromiseRejectionEvent == 'function')
+      && promise.then(empty) instanceof FakePromise
+      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
+      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
+      // we can't detect it synchronously, so just check versions
+      && v8.indexOf('6.6') !== 0
+      && userAgent.indexOf('Chrome/66') === -1;
+  } catch (e) { /* empty */ }
+}();
+
+// helpers
+var isThenable = function (it) {
+  var then;
+  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+};
+var notify = function (promise, isReject) {
+  if (promise._n) return;
+  promise._n = true;
+  var chain = promise._c;
+  microtask(function () {
+    var value = promise._v;
+    var ok = promise._s == 1;
+    var i = 0;
+    var run = function (reaction) {
+      var handler = ok ? reaction.ok : reaction.fail;
+      var resolve = reaction.resolve;
+      var reject = reaction.reject;
+      var domain = reaction.domain;
+      var result, then, exited;
+      try {
+        if (handler) {
+          if (!ok) {
+            if (promise._h == 2) onHandleUnhandled(promise);
+            promise._h = 1;
+          }
+          if (handler === true) result = value;
+          else {
+            if (domain) domain.enter();
+            result = handler(value); // may throw
+            if (domain) {
+              domain.exit();
+              exited = true;
+            }
+          }
+          if (result === reaction.promise) {
+            reject(TypeError('Promise-chain cycle'));
+          } else if (then = isThenable(result)) {
+            then.call(result, resolve, reject);
+          } else resolve(result);
+        } else reject(value);
+      } catch (e) {
+        if (domain && !exited) domain.exit();
+        reject(e);
+      }
+    };
+    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
+    promise._c = [];
+    promise._n = false;
+    if (isReject && !promise._h) onUnhandled(promise);
+  });
+};
+var onUnhandled = function (promise) {
+  task.call(global, function () {
+    var value = promise._v;
+    var unhandled = isUnhandled(promise);
+    var result, handler, console;
+    if (unhandled) {
+      result = perform(function () {
+        if (isNode) {
+          process.emit('unhandledRejection', value, promise);
+        } else if (handler = global.onunhandledrejection) {
+          handler({ promise: promise, reason: value });
+        } else if ((console = global.console) && console.error) {
+          console.error('Unhandled promise rejection', value);
+        }
+      });
+      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
+      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
+    } promise._a = undefined;
+    if (unhandled && result.e) throw result.v;
+  });
+};
+var isUnhandled = function (promise) {
+  return promise._h !== 1 && (promise._a || promise._c).length === 0;
+};
+var onHandleUnhandled = function (promise) {
+  task.call(global, function () {
+    var handler;
+    if (isNode) {
+      process.emit('rejectionHandled', promise);
+    } else if (handler = global.onrejectionhandled) {
+      handler({ promise: promise, reason: promise._v });
+    }
+  });
+};
+var $reject = function (value) {
+  var promise = this;
+  if (promise._d) return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  promise._v = value;
+  promise._s = 2;
+  if (!promise._a) promise._a = promise._c.slice();
+  notify(promise, true);
+};
+var $resolve = function (value) {
+  var promise = this;
+  var then;
+  if (promise._d) return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  try {
+    if (promise === value) throw TypeError("Promise can't be resolved itself");
+    if (then = isThenable(value)) {
+      microtask(function () {
+        var wrapper = { _w: promise, _d: false }; // wrap
+        try {
+          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
+        } catch (e) {
+          $reject.call(wrapper, e);
+        }
+      });
+    } else {
+      promise._v = value;
+      promise._s = 1;
+      notify(promise, false);
+    }
+  } catch (e) {
+    $reject.call({ _w: promise, _d: false }, e); // wrap
+  }
+};
+
+// constructor polyfill
+if (!USE_NATIVE) {
+  // 25.4.3.1 Promise(executor)
+  $Promise = function Promise(executor) {
+    anInstance(this, $Promise, PROMISE, '_h');
+    aFunction(executor);
+    Internal.call(this);
+    try {
+      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
+    } catch (err) {
+      $reject.call(this, err);
+    }
+  };
+  // eslint-disable-next-line no-unused-vars
+  Internal = function Promise(executor) {
+    this._c = [];             // <- awaiting reactions
+    this._a = undefined;      // <- checked in isUnhandled reactions
+    this._s = 0;              // <- state
+    this._d = false;          // <- done
+    this._v = undefined;      // <- value
+    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
+    this._n = false;          // <- notify
+  };
+  Internal.prototype = __webpack_require__(487)($Promise.prototype, {
+    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
+    then: function then(onFulfilled, onRejected) {
+      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
+      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
+      reaction.fail = typeof onRejected == 'function' && onRejected;
+      reaction.domain = isNode ? process.domain : undefined;
+      this._c.push(reaction);
+      if (this._a) this._a.push(reaction);
+      if (this._s) notify(this, false);
+      return reaction.promise;
+    },
+    // 25.4.5.1 Promise.prototype.catch(onRejected)
+    'catch': function (onRejected) {
+      return this.then(undefined, onRejected);
+    }
+  });
+  OwnPromiseCapability = function () {
+    var promise = new Internal();
+    this.promise = promise;
+    this.resolve = ctx($resolve, promise, 1);
+    this.reject = ctx($reject, promise, 1);
+  };
+  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
+    return C === $Promise || C === Wrapper
+      ? new OwnPromiseCapability(C)
+      : newGenericPromiseCapability(C);
+  };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
+__webpack_require__(90)($Promise, PROMISE);
+__webpack_require__(488)(PROMISE);
+Wrapper = __webpack_require__(19)[PROMISE];
+
+// statics
+$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
+  // 25.4.4.5 Promise.reject(r)
+  reject: function reject(r) {
+    var capability = newPromiseCapability(this);
+    var $$reject = capability.reject;
+    $$reject(r);
+    return capability.promise;
+  }
+});
+$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
+  // 25.4.4.6 Promise.resolve(x)
+  resolve: function resolve(x) {
+    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
+  }
+});
+$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(489)(function (iter) {
+  $Promise.all(iter)['catch'](empty);
+})), PROMISE, {
+  // 25.4.4.1 Promise.all(iterable)
+  all: function all(iterable) {
+    var C = this;
+    var capability = newPromiseCapability(C);
+    var resolve = capability.resolve;
+    var reject = capability.reject;
+    var result = perform(function () {
+      var values = [];
+      var index = 0;
+      var remaining = 1;
+      forOf(iterable, false, function (promise) {
+        var $index = index++;
+        var alreadyCalled = false;
+        values.push(undefined);
+        remaining++;
+        C.resolve(promise).then(function (value) {
+          if (alreadyCalled) return;
+          alreadyCalled = true;
+          values[$index] = value;
+          --remaining || resolve(values);
+        }, reject);
+      });
+      --remaining || resolve(values);
+    });
+    if (result.e) reject(result.v);
+    return capability.promise;
+  },
+  // 25.4.4.4 Promise.race(iterable)
+  race: function race(iterable) {
+    var C = this;
+    var capability = newPromiseCapability(C);
+    var reject = capability.reject;
+    var result = perform(function () {
+      forOf(iterable, false, function (promise) {
+        C.resolve(promise).then(capability.resolve, reject);
+      });
+    });
+    if (result.e) reject(result.v);
+    return capability.promise;
+  }
+});
+
+
+/***/ }),
+/* 479 */
+/***/ (function(module, exports) {
+
+module.exports = function (it, Constructor, name, forbiddenField) {
+  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
+    throw TypeError(name + ': incorrect invocation!');
+  } return it;
+};
+
+
+/***/ }),
+/* 480 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var ctx = __webpack_require__(58);
+var call = __webpack_require__(481);
+var isArrayIter = __webpack_require__(482);
+var anObject = __webpack_require__(27);
+var toLength = __webpack_require__(143);
+var getIterFn = __webpack_require__(483);
+var BREAK = {};
+var RETURN = {};
+var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
+  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
+  var f = ctx(fn, that, entries ? 2 : 1);
+  var index = 0;
+  var length, step, iterator, result;
+  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
+  // fast case for arrays with default iterator
+  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
+    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+    if (result === BREAK || result === RETURN) return result;
+  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
+    result = call(iterator, f, step.value, entries);
+    if (result === BREAK || result === RETURN) return result;
+  }
+};
+exports.BREAK = BREAK;
+exports.RETURN = RETURN;
+
+
+/***/ }),
+/* 481 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// call something on iterator step with safe closing on error
+var anObject = __webpack_require__(27);
+module.exports = function (iterator, fn, value, entries) {
+  try {
+    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+  // 7.4.6 IteratorClose(iterator, completion)
+  } catch (e) {
+    var ret = iterator['return'];
+    if (ret !== undefined) anObject(ret.call(iterator));
+    throw e;
+  }
+};
+
+
+/***/ }),
+/* 482 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// check on default Array iterator
+var Iterators = __webpack_require__(42);
+var ITERATOR = __webpack_require__(17)('iterator');
+var ArrayProto = Array.prototype;
+
+module.exports = function (it) {
+  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+};
+
+
+/***/ }),
+/* 483 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var classof = __webpack_require__(149);
+var ITERATOR = __webpack_require__(17)('iterator');
+var Iterators = __webpack_require__(42);
+module.exports = __webpack_require__(19).getIteratorMethod = function (it) {
+  if (it != undefined) return it[ITERATOR]
+    || it['@@iterator']
+    || Iterators[classof(it)];
+};
+
+
+/***/ }),
+/* 484 */
+/***/ (function(module, exports) {
+
+// fast apply, http://jsperf.lnkit.com/fast-apply/5
+module.exports = function (fn, args, that) {
+  var un = that === undefined;
+  switch (args.length) {
+    case 0: return un ? fn()
+                      : fn.call(that);
+    case 1: return un ? fn(args[0])
+                      : fn.call(that, args[0]);
+    case 2: return un ? fn(args[0], args[1])
+                      : fn.call(that, args[0], args[1]);
+    case 3: return un ? fn(args[0], args[1], args[2])
+                      : fn.call(that, args[0], args[1], args[2]);
+    case 4: return un ? fn(args[0], args[1], args[2], args[3])
+                      : fn.call(that, args[0], args[1], args[2], args[3]);
+  } return fn.apply(that, args);
+};
+
+
+/***/ }),
+/* 485 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(13);
+var macrotask = __webpack_require__(151).set;
+var Observer = global.MutationObserver || global.WebKitMutationObserver;
+var process = global.process;
+var Promise = global.Promise;
+var isNode = __webpack_require__(61)(process) == 'process';
+
+module.exports = function () {
+  var head, last, notify;
+
+  var flush = function () {
+    var parent, fn;
+    if (isNode && (parent = process.domain)) parent.exit();
+    while (head) {
+      fn = head.fn;
+      head = head.next;
+      try {
+        fn();
+      } catch (e) {
+        if (head) notify();
+        else last = undefined;
+        throw e;
+      }
+    } last = undefined;
+    if (parent) parent.enter();
+  };
+
+  // Node.js
+  if (isNode) {
+    notify = function () {
+      process.nextTick(flush);
+    };
+  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
+  } else if (Observer && !(global.navigator && global.navigator.standalone)) {
+    var toggle = true;
+    var node = document.createTextNode('');
+    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
+    notify = function () {
+      node.data = toggle = !toggle;
+    };
+  // environments with maybe non-completely correct, but existent Promise
+  } else if (Promise && Promise.resolve) {
+    // Promise.resolve without an argument throws an error in LG WebOS 2
+    var promise = Promise.resolve(undefined);
+    notify = function () {
+      promise.then(flush);
+    };
+  // for other environments - macrotask based on:
+  // - setImmediate
+  // - MessageChannel
+  // - window.postMessag
+  // - onreadystatechange
+  // - setTimeout
+  } else {
+    notify = function () {
+      // strange IE + webpack dev server bug - use .call(global)
+      macrotask.call(global, flush);
+    };
+  }
+
+  return function (fn) {
+    var task = { fn: fn, next: undefined };
+    if (last) last.next = task;
+    if (!head) {
+      head = task;
+      notify();
+    } last = task;
+  };
+};
+
+
+/***/ }),
+/* 486 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(13);
+var navigator = global.navigator;
+
+module.exports = navigator && navigator.userAgent || '';
+
+
+/***/ }),
+/* 487 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var hide = __webpack_require__(31);
+module.exports = function (target, src, safe) {
+  for (var key in src) {
+    if (safe && target[key]) target[key] = src[key];
+    else hide(target, key, src[key]);
+  } return target;
+};
+
+
+/***/ }),
+/* 488 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var global = __webpack_require__(13);
+var core = __webpack_require__(19);
+var dP = __webpack_require__(40);
+var DESCRIPTORS = __webpack_require__(32);
+var SPECIES = __webpack_require__(17)('species');
+
+module.exports = function (KEY) {
+  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
+  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
+    configurable: true,
+    get: function () { return this; }
+  });
+};
+
+
+/***/ }),
+/* 489 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var ITERATOR = __webpack_require__(17)('iterator');
+var SAFE_CLOSING = false;
+
+try {
+  var riter = [7][ITERATOR]();
+  riter['return'] = function () { SAFE_CLOSING = true; };
+  // eslint-disable-next-line no-throw-literal
+  Array.from(riter, function () { throw 2; });
+} catch (e) { /* empty */ }
+
+module.exports = function (exec, skipClosing) {
+  if (!skipClosing && !SAFE_CLOSING) return false;
+  var safe = false;
+  try {
+    var arr = [7];
+    var iter = arr[ITERATOR]();
+    iter.next = function () { return { done: safe = true }; };
+    arr[ITERATOR] = function () { return iter; };
+    exec(arr);
+  } catch (e) { /* empty */ }
+  return safe;
+};
+
+
+/***/ }),
+/* 490 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+// https://github.com/tc39/proposal-promise-finally
+
+var $export = __webpack_require__(30);
+var core = __webpack_require__(19);
+var global = __webpack_require__(13);
+var speciesConstructor = __webpack_require__(150);
+var promiseResolve = __webpack_require__(153);
+
+$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
+  var C = speciesConstructor(this, core.Promise || global.Promise);
+  var isFunction = typeof onFinally == 'function';
+  return this.then(
+    isFunction ? function (x) {
+      return promiseResolve(C, onFinally()).then(function () { return x; });
+    } : onFinally,
+    isFunction ? function (e) {
+      return promiseResolve(C, onFinally()).then(function () { throw e; });
+    } : onFinally
+  );
+} });
+
+
+/***/ }),
+/* 491 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://github.com/tc39/proposal-promise-try
+var $export = __webpack_require__(30);
+var newPromiseCapability = __webpack_require__(91);
+var perform = __webpack_require__(152);
+
+$export($export.S, 'Promise', { 'try': function (callbackfn) {
+  var promiseCapability = newPromiseCapability.f(this);
+  var result = perform(callbackfn);
+  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
+  return promiseCapability.promise;
+} });
+
+
+/***/ }),
+/* 492 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _promise = __webpack_require__(89);
+
+var _promise2 = _interopRequireDefault(_promise);
+
+exports.getStorage = getStorage;
+exports.usePromise = usePromise;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Need to invoke a function at runtime instead of import-time to make tests
+ * pass with mocked browser and chrome objects
+ */
+function getStorage() {
+  return window.browser && browser.storage || window.chrome && chrome.storage;
+}
+
+/**
+ * Need to invoke a function at runtime instead of import-time to make tests
+ * pass with mocked browser and chrome objects
+ */
+function usesPromises() {
+  var storage = getStorage();
+  try {
+    return storage && storage.local.get && storage.local.get() && typeof storage.local.get().then === 'function';
+  } catch (e) {
+    return false;
+  }
+}
+
+/**
+ * Converts a callback-based API to a promise based API.
+ * For now we assume that there is only one arg in addition to the callback
+ */
+function usePromise(fn, arg) {
+  if (usesPromises()) {
+    return fn(arg);
+  }
+
+  return new _promise2.default(function (resolve) {
+    fn(arg, function () {
+      resolve.apply(undefined, arguments);
+    });
+  });
+}
+
+/***/ }),
+/* 493 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony import */ var _websocket_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(68);
+/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
+/*
+    This program is distributed under the terms of the MIT license.
+    Please see the LICENSE file for details.
+
+    Copyright 2020, JC Brand
+*/
+
+
+const lmap = {};
+lmap['debug'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.DEBUG;
+lmap['info'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.INFO;
+lmap['warn'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.WARN;
+lmap['error'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR;
+lmap['fatal'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.FATAL;
+/** Class: Strophe.WorkerWebsocket
+ *  _Private_ helper class that handles a websocket connection inside a shared worker.
+ */
+
+_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].WorkerWebsocket = class WorkerWebsocket extends _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Websocket {
+  /** PrivateConstructor: Strophe.WorkerWebsocket
+   *  Create and initialize a Strophe.WorkerWebsocket object.
+   *
+   *  Parameters:
+   *    (Strophe.Connection) connection - The Strophe.Connection
+   *
+   *  Returns:
+   *    A new Strophe.WorkerWebsocket object.
+   */
+  constructor(connection) {
+    super(connection);
+    this._conn = connection;
+    this.worker = new SharedWorker(this._conn.options.worker, 'Strophe XMPP Connection');
+
+    this.worker.onerror = e => {
+      var _console;
+
+      (_console = console) === null || _console === void 0 ? void 0 : _console.error(e);
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, "Shared Worker Error: ".concat(e));
+    };
+  }
+
+  get socket() {
+    return {
+      'send': str => this.worker.port.postMessage(['send', str])
+    };
+  }
+
+  _connect() {
+    this._messageHandler = m => this._onInitialMessage(m);
+
+    this.worker.port.start();
+
+    this.worker.port.onmessage = ev => this._onWorkerMessage(ev);
+
+    this.worker.port.postMessage(['_connect', this._conn.service, this._conn.jid]);
+  }
+
+  _attach(callback) {
+    this._messageHandler = m => this._onMessage(m);
+
+    this._conn.connect_callback = callback;
+    this.worker.port.start();
+
+    this.worker.port.onmessage = ev => this._onWorkerMessage(ev);
+
+    this.worker.port.postMessage(['_attach', this._conn.service]);
+  }
+
+  _attachCallback(status, jid) {
+    if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHED) {
+      this._conn.jid = jid;
+      this._conn.authenticated = true;
+      this._conn.connected = true;
+      this._conn.restored = true;
+
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHED);
+    } else if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHFAIL) {
+      this._conn.authenticated = false;
+      this._conn.connected = false;
+      this._conn.restored = false;
+
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.ATTACHFAIL);
+    }
+  }
+
+  _disconnect(readyState, pres) {
+    pres && this._conn.send(pres);
+    const close = Object(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])("close", {
+      "xmlns": _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].NS.FRAMING
+    });
+
+    this._conn.xmlOutput(close.tree());
+
+    const closeString = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].serialize(close);
+
+    this._conn.rawOutput(closeString);
+
+    this.worker.port.postMessage(['send', closeString]);
+
+    this._conn._doDisconnect();
+  }
+
+  _onClose(e) {
+    if (this._conn.connected && !this._conn.disconnecting) {
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].error("Websocket closed unexpectedly");
+
+      this._conn._doDisconnect();
+    } else if (e && e.code === 1006 && !this._conn.connected) {
+      // in case the onError callback was not called (Safari 10 does not
+      // call onerror when the initial connection fails) we need to
+      // dispatch a CONNFAIL status update to be consistent with the
+      // behavior on other browsers.
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].error("Websocket closed unexcectedly");
+
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
+
+      this._conn._doDisconnect();
+    } else {
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].debug("Websocket closed");
+    }
+  }
+
+  _closeSocket() {
+    this.worker.port.postMessage(['_closeSocket']);
+  }
+  /** PrivateFunction: _replaceMessageHandler
+   *
+   * Called by _onInitialMessage in order to replace itself with the general message handler.
+   * This method is overridden by Strophe.WorkerWebsocket, which manages a
+   * websocket connection via a service worker and doesn't have direct access
+   * to the socket.
+   */
+
+
+  _replaceMessageHandler() {
+    this._messageHandler = m => this._onMessage(m);
+  }
+  /** PrivateFunction: _onWorkerMessage
+   * _Private_ function that handles messages received from the service worker
+   */
+
+
+  _onWorkerMessage(ev) {
+    const {
+      data
+    } = ev;
+    const method_name = data[0];
+
+    if (method_name === '_onMessage') {
+      this._messageHandler(data[1]);
+    } else if (method_name in this) {
+      try {
+        this[method_name].apply(this, ev.data.slice(1));
+      } catch (e) {
+        _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, e);
+      }
+    } else if (method_name === 'log') {
+      const level = data[1];
+      const msg = data[2];
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(lmap[level], msg);
+    } else {
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "e"].LogLevel.ERROR, "Found unhandled service worker message: ".concat(data));
+    }
+  }
+
+};
+
+/***/ }),
+/* 494 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var map = {
+	"./af/LC_MESSAGES/converse.po": [
+		507,
+		139
+	],
+	"./ar/LC_MESSAGES/converse.po": [
+		508,
+		140
+	],
+	"./bg/LC_MESSAGES/converse.po": [
+		509,
+		141
+	],
+	"./ca/LC_MESSAGES/converse.po": [
+		510,
+		142
+	],
+	"./cs/LC_MESSAGES/converse.po": [
+		511,
+		143
 	],
 	"./da/LC_MESSAGES/converse.po": [
-		424,
+		512,
 		144
 	],
 	"./de/LC_MESSAGES/converse.po": [
-		425,
+		513,
 		147
 	],
 	"./eo/LC_MESSAGES/converse.po": [
-		426,
+		514,
 		148
 	],
 	"./es/LC_MESSAGES/converse.po": [
-		427,
+		515,
 		149
 	],
 	"./eu/LC_MESSAGES/converse.po": [
-		428,
+		516,
 		150
 	],
 	"./fi/LC_MESSAGES/converse.po": [
-		429,
+		517,
 		151
 	],
 	"./fr/LC_MESSAGES/converse.po": [
-		430,
+		518,
 		152
 	],
 	"./gl/LC_MESSAGES/converse.po": [
-		431,
+		519,
 		153
 	],
 	"./he/LC_MESSAGES/converse.po": [
-		432,
+		520,
 		154
 	],
 	"./hi/LC_MESSAGES/converse.po": [
-		433,
+		521,
 		155
 	],
 	"./hu/LC_MESSAGES/converse.po": [
-		434,
+		522,
 		156
 	],
 	"./id/LC_MESSAGES/converse.po": [
-		435,
+		523,
 		157
 	],
 	"./it/LC_MESSAGES/converse.po": [
-		436,
+		524,
 		158
 	],
 	"./ja/LC_MESSAGES/converse.po": [
-		437,
+		525,
 		159
 	],
 	"./lt/LC_MESSAGES/converse.po": [
-		438,
+		526,
 		160
 	],
 	"./mr/LC_MESSAGES/converse.po": [
-		439,
+		527,
 		161
 	],
 	"./nb/LC_MESSAGES/converse.po": [
-		440,
+		528,
 		162
 	],
 	"./nl/LC_MESSAGES/converse.po": [
-		441,
+		529,
 		163
 	],
 	"./nl_BE/LC_MESSAGES/converse.po": [
-		442,
+		530,
 		164
 	],
 	"./oc/LC_MESSAGES/converse.po": [
-		443,
+		531,
 		165
 	],
 	"./pl/LC_MESSAGES/converse.po": [
-		444,
+		532,
 		166
 	],
 	"./pt/LC_MESSAGES/converse.po": [
-		445,
+		533,
 		167
 	],
 	"./pt_BR/LC_MESSAGES/converse.po": [
-		446,
+		534,
 		168
 	],
 	"./ro/LC_MESSAGES/converse.po": [
-		447,
+		535,
 		169
 	],
 	"./ru/LC_MESSAGES/converse.po": [
-		448,
+		536,
 		170
 	],
-	"./th/LC_MESSAGES/converse.po": [
-		449,
+	"./sv/LC_MESSAGES/converse.po": [
+		537,
 		171
 	],
-	"./tr/LC_MESSAGES/converse.po": [
-		450,
+	"./th/LC_MESSAGES/converse.po": [
+		538,
 		172
 	],
-	"./uk/LC_MESSAGES/converse.po": [
-		451,
+	"./tr/LC_MESSAGES/converse.po": [
+		539,
 		173
 	],
-	"./vi/LC_MESSAGES/converse.po": [
-		452,
+	"./uk/LC_MESSAGES/converse.po": [
+		540,
 		174
 	],
-	"./zh_CN/LC_MESSAGES/converse.po": [
-		453,
+	"./vi/LC_MESSAGES/converse.po": [
+		541,
 		175
 	],
-	"./zh_TW/LC_MESSAGES/converse.po": [
-		454,
+	"./zh_CN/LC_MESSAGES/converse.po": [
+		542,
 		176
+	],
+	"./zh_TW/LC_MESSAGES/converse.po": [
+		543,
+		177
 	]
 };
 function webpackAsyncContext(req) {
@@ -52709,1116 +56449,1116 @@ function webpackAsyncContext(req) {
 webpackAsyncContext.keys = function webpackAsyncContextKeys() {
 	return Object.keys(map);
 };
-webpackAsyncContext.id = 406;
+webpackAsyncContext.id = 494;
 module.exports = webpackAsyncContext;
 
 /***/ }),
-/* 407 */
+/* 495 */
 /***/ (function(module, exports, __webpack_require__) {
 
 var map = {
 	"./af": [
-		147,
+		189,
 		0
 	],
 	"./af.js": [
-		147,
+		189,
 		0
 	],
 	"./ar": [
-		154,
+		196,
 		1
 	],
 	"./ar-dz": [
-		148,
+		190,
 		2
 	],
 	"./ar-dz.js": [
-		148,
+		190,
 		2
 	],
 	"./ar-kw": [
-		149,
+		191,
 		3
 	],
 	"./ar-kw.js": [
-		149,
+		191,
 		3
 	],
 	"./ar-ly": [
-		150,
+		192,
 		4
 	],
 	"./ar-ly.js": [
-		150,
+		192,
 		4
 	],
 	"./ar-ma": [
-		151,
+		193,
 		5
 	],
 	"./ar-ma.js": [
-		151,
+		193,
 		5
 	],
 	"./ar-sa": [
-		152,
+		194,
 		6
 	],
 	"./ar-sa.js": [
-		152,
+		194,
 		6
 	],
 	"./ar-tn": [
-		153,
+		195,
 		7
 	],
 	"./ar-tn.js": [
-		153,
+		195,
 		7
 	],
 	"./ar.js": [
-		154,
+		196,
 		1
 	],
 	"./az": [
-		155,
+		197,
 		8
 	],
 	"./az.js": [
-		155,
+		197,
 		8
 	],
 	"./be": [
-		156,
+		198,
 		9
 	],
 	"./be.js": [
-		156,
+		198,
 		9
 	],
 	"./bg": [
-		157,
+		199,
 		10
 	],
 	"./bg.js": [
-		157,
+		199,
 		10
 	],
 	"./bi": [
-		158,
+		200,
 		11
 	],
 	"./bi.js": [
-		158,
+		200,
 		11
 	],
 	"./bm": [
-		159,
+		201,
 		12
 	],
 	"./bm.js": [
-		159,
+		201,
 		12
 	],
 	"./bn": [
-		160,
+		202,
 		13
 	],
 	"./bn.js": [
-		160,
+		202,
 		13
 	],
 	"./bo": [
-		161,
+		203,
 		14
 	],
 	"./bo.js": [
-		161,
+		203,
 		14
 	],
 	"./br": [
-		162,
+		204,
 		15
 	],
 	"./br.js": [
-		162,
+		204,
 		15
 	],
 	"./bs": [
-		163,
+		205,
 		16
 	],
 	"./bs.js": [
-		163,
+		205,
 		16
 	],
 	"./ca": [
-		164,
+		206,
 		17
 	],
 	"./ca.js": [
-		164,
+		206,
 		17
 	],
 	"./cs": [
-		165,
+		207,
 		18
 	],
 	"./cs.js": [
-		165,
+		207,
 		18
 	],
 	"./cv": [
-		166,
+		208,
 		19
 	],
 	"./cv.js": [
-		166,
+		208,
 		19
 	],
 	"./cy": [
-		167,
+		209,
 		20
 	],
 	"./cy.js": [
-		167,
+		209,
 		20
 	],
 	"./da": [
-		168,
+		210,
 		21
 	],
 	"./da.js": [
-		168,
+		210,
 		21
 	],
 	"./de": [
-		171,
+		213,
 		22
 	],
 	"./de-at": [
-		169,
+		211,
 		23
 	],
 	"./de-at.js": [
-		169,
+		211,
 		23
 	],
 	"./de-ch": [
-		170,
+		212,
 		24
 	],
 	"./de-ch.js": [
-		170,
+		212,
 		24
 	],
 	"./de.js": [
-		171,
+		213,
 		22
 	],
 	"./dv": [
-		172,
+		214,
 		25
 	],
 	"./dv.js": [
-		172,
+		214,
 		25
 	],
 	"./el": [
-		173,
+		215,
 		26
 	],
 	"./el.js": [
-		173,
+		215,
 		26
 	],
 	"./en": [
-		183,
+		225,
 		27
 	],
 	"./en-SG": [
-		174,
+		216,
 		28
 	],
 	"./en-SG.js": [
-		174,
+		216,
 		28
 	],
 	"./en-au": [
-		175,
+		217,
 		29
 	],
 	"./en-au.js": [
-		175,
+		217,
 		29
 	],
 	"./en-ca": [
-		176,
+		218,
 		30
 	],
 	"./en-ca.js": [
-		176,
+		218,
 		30
 	],
 	"./en-gb": [
-		177,
+		219,
 		31
 	],
 	"./en-gb.js": [
-		177,
+		219,
 		31
 	],
 	"./en-ie": [
-		178,
+		220,
 		32
 	],
 	"./en-ie.js": [
-		178,
+		220,
 		32
 	],
 	"./en-il": [
-		179,
+		221,
 		33
 	],
 	"./en-il.js": [
-		179,
+		221,
 		33
 	],
 	"./en-in": [
-		180,
+		222,
 		34
 	],
 	"./en-in.js": [
-		180,
+		222,
 		34
 	],
 	"./en-nz": [
-		181,
+		223,
 		35
 	],
 	"./en-nz.js": [
-		181,
+		223,
 		35
 	],
 	"./en-tt": [
-		182,
+		224,
 		36
 	],
 	"./en-tt.js": [
-		182,
+		224,
 		36
 	],
 	"./en.js": [
-		183,
+		225,
 		27
 	],
 	"./eo": [
-		184,
+		226,
 		37
 	],
 	"./eo.js": [
-		184,
+		226,
 		37
 	],
 	"./es": [
-		188,
+		230,
 		38
 	],
 	"./es-do": [
-		185,
+		227,
 		39
 	],
 	"./es-do.js": [
-		185,
+		227,
 		39
 	],
 	"./es-pr": [
-		186,
+		228,
 		40
 	],
 	"./es-pr.js": [
-		186,
+		228,
 		40
 	],
 	"./es-us": [
-		187,
+		229,
 		41
 	],
 	"./es-us.js": [
-		187,
+		229,
 		41
 	],
 	"./es.js": [
-		188,
+		230,
 		38
 	],
 	"./et": [
-		189,
+		231,
 		42
 	],
 	"./et.js": [
-		189,
+		231,
 		42
 	],
 	"./eu": [
-		190,
+		232,
 		43
 	],
 	"./eu.js": [
-		190,
+		232,
 		43
 	],
 	"./fa": [
-		191,
+		233,
 		44
 	],
 	"./fa.js": [
-		191,
+		233,
 		44
 	],
 	"./fi": [
-		192,
+		234,
 		45
 	],
 	"./fi.js": [
-		192,
+		234,
 		45
 	],
 	"./fo": [
-		193,
+		235,
 		46
 	],
 	"./fo.js": [
-		193,
+		235,
 		46
 	],
 	"./fr": [
-		196,
+		238,
 		47
 	],
 	"./fr-ca": [
-		194,
+		236,
 		48
 	],
 	"./fr-ca.js": [
-		194,
+		236,
 		48
 	],
 	"./fr-ch": [
-		195,
+		237,
 		49
 	],
 	"./fr-ch.js": [
-		195,
+		237,
 		49
 	],
 	"./fr.js": [
-		196,
+		238,
 		47
 	],
 	"./fy": [
-		197,
+		239,
 		50
 	],
 	"./fy.js": [
-		197,
+		239,
 		50
 	],
 	"./ga": [
-		198,
+		240,
 		51
 	],
 	"./ga.js": [
-		198,
+		240,
 		51
 	],
 	"./gd": [
-		199,
+		241,
 		52
 	],
 	"./gd.js": [
-		199,
+		241,
 		52
 	],
 	"./gl": [
-		200,
+		242,
 		53
 	],
 	"./gl.js": [
-		200,
+		242,
 		53
 	],
 	"./gom-latn": [
-		201,
+		243,
 		54
 	],
 	"./gom-latn.js": [
-		201,
+		243,
 		54
 	],
 	"./gu": [
-		202,
+		244,
 		55
 	],
 	"./gu.js": [
-		202,
+		244,
 		55
 	],
 	"./he": [
-		203,
+		245,
 		56
 	],
 	"./he.js": [
-		203,
+		245,
 		56
 	],
 	"./hi": [
-		204,
+		246,
 		57
 	],
 	"./hi.js": [
-		204,
+		246,
 		57
 	],
 	"./hr": [
-		205,
+		247,
 		58
 	],
 	"./hr.js": [
-		205,
+		247,
 		58
 	],
 	"./ht": [
-		206,
+		248,
 		59
 	],
 	"./ht.js": [
-		206,
+		248,
 		59
 	],
 	"./hu": [
-		207,
+		249,
 		60
 	],
 	"./hu.js": [
-		207,
+		249,
 		60
 	],
 	"./hy-am": [
-		208,
+		250,
 		61
 	],
 	"./hy-am.js": [
-		208,
+		250,
 		61
 	],
 	"./id": [
-		209,
+		251,
 		62
 	],
 	"./id.js": [
-		209,
+		251,
 		62
 	],
 	"./index.d.ts": [
-		455,
+		544,
 		145
 	],
 	"./is": [
-		210,
+		252,
 		63
 	],
 	"./is.js": [
-		210,
+		252,
 		63
 	],
 	"./it": [
-		212,
+		254,
 		64
 	],
 	"./it-ch": [
-		211,
+		253,
 		65
 	],
 	"./it-ch.js": [
-		211,
+		253,
 		65
 	],
 	"./it.js": [
-		212,
+		254,
 		64
 	],
 	"./ja": [
-		213,
+		255,
 		66
 	],
 	"./ja.js": [
-		213,
+		255,
 		66
 	],
 	"./jv": [
-		214,
+		256,
 		67
 	],
 	"./jv.js": [
-		214,
+		256,
 		67
 	],
 	"./ka": [
-		215,
+		257,
 		68
 	],
 	"./ka.js": [
-		215,
+		257,
 		68
 	],
 	"./kk": [
-		216,
+		258,
 		69
 	],
 	"./kk.js": [
-		216,
+		258,
 		69
 	],
 	"./km": [
-		217,
+		259,
 		70
 	],
 	"./km.js": [
-		217,
+		259,
 		70
 	],
 	"./kn": [
-		218,
+		260,
 		71
 	],
 	"./kn.js": [
-		218,
+		260,
 		71
 	],
 	"./ko": [
-		219,
+		261,
 		72
 	],
 	"./ko.js": [
-		219,
+		261,
 		72
 	],
 	"./ku": [
-		220,
+		262,
 		73
 	],
 	"./ku.js": [
-		220,
+		262,
 		73
 	],
 	"./ky": [
-		221,
+		263,
 		74
 	],
 	"./ky.js": [
-		221,
+		263,
 		74
 	],
 	"./lb": [
-		222,
+		264,
 		75
 	],
 	"./lb.js": [
-		222,
+		264,
 		75
 	],
 	"./lo": [
-		223,
+		265,
 		76
 	],
 	"./lo.js": [
-		223,
+		265,
 		76
 	],
 	"./lt": [
-		224,
+		266,
 		77
 	],
 	"./lt.js": [
-		224,
+		266,
 		77
 	],
 	"./lv": [
-		225,
+		267,
 		78
 	],
 	"./lv.js": [
-		225,
+		267,
 		78
 	],
 	"./me": [
-		226,
+		268,
 		79
 	],
 	"./me.js": [
-		226,
+		268,
 		79
 	],
 	"./mi": [
-		227,
+		269,
 		80
 	],
 	"./mi.js": [
-		227,
+		269,
 		80
 	],
 	"./mk": [
-		228,
+		270,
 		81
 	],
 	"./mk.js": [
-		228,
+		270,
 		81
 	],
 	"./ml": [
-		229,
+		271,
 		82
 	],
 	"./ml.js": [
-		229,
+		271,
 		82
 	],
 	"./mn": [
-		230,
+		272,
 		83
 	],
 	"./mn.js": [
-		230,
+		272,
 		83
 	],
 	"./mr": [
-		231,
+		273,
 		84
 	],
 	"./mr.js": [
-		231,
+		273,
 		84
 	],
 	"./ms": [
-		233,
+		275,
 		85
 	],
 	"./ms-my": [
-		232,
+		274,
 		86
 	],
 	"./ms-my.js": [
-		232,
+		274,
 		86
 	],
 	"./ms.js": [
-		233,
+		275,
 		85
 	],
 	"./mt": [
-		234,
+		276,
 		87
 	],
 	"./mt.js": [
-		234,
+		276,
 		87
 	],
 	"./my": [
-		235,
+		277,
 		88
 	],
 	"./my.js": [
-		235,
+		277,
 		88
 	],
 	"./nb": [
-		236,
+		278,
 		89
 	],
 	"./nb.js": [
-		236,
+		278,
 		89
 	],
 	"./ne": [
-		237,
+		279,
 		90
 	],
 	"./ne.js": [
-		237,
+		279,
 		90
 	],
 	"./nl": [
-		239,
+		281,
 		91
 	],
 	"./nl-be": [
-		238,
+		280,
 		92
 	],
 	"./nl-be.js": [
-		238,
+		280,
 		92
 	],
 	"./nl.js": [
-		239,
+		281,
 		91
 	],
 	"./nn": [
-		240,
+		282,
 		93
 	],
 	"./nn.js": [
-		240,
+		282,
 		93
 	],
 	"./oc-lnc": [
-		241,
+		283,
 		94
 	],
 	"./oc-lnc.js": [
-		241,
+		283,
 		94
 	],
 	"./pa-in": [
-		242,
+		284,
 		95
 	],
 	"./pa-in.js": [
-		242,
+		284,
 		95
 	],
 	"./pl": [
-		243,
+		285,
 		96
 	],
 	"./pl.js": [
-		243,
+		285,
 		96
 	],
 	"./pt": [
-		245,
+		287,
 		97
 	],
 	"./pt-br": [
-		244,
+		286,
 		98
 	],
 	"./pt-br.js": [
-		244,
+		286,
 		98
 	],
 	"./pt.js": [
-		245,
+		287,
 		97
 	],
 	"./ro": [
-		246,
+		288,
 		99
 	],
 	"./ro.js": [
-		246,
+		288,
 		99
 	],
 	"./ru": [
-		247,
+		289,
 		100
 	],
 	"./ru.js": [
-		247,
+		289,
 		100
 	],
 	"./rw": [
-		248,
+		290,
 		101
 	],
 	"./rw.js": [
-		248,
+		290,
 		101
 	],
 	"./sd": [
-		249,
+		291,
 		102
 	],
 	"./sd.js": [
-		249,
+		291,
 		102
 	],
 	"./se": [
-		250,
+		292,
 		103
 	],
 	"./se.js": [
-		250,
+		292,
 		103
 	],
 	"./si": [
-		251,
+		293,
 		104
 	],
 	"./si.js": [
-		251,
+		293,
 		104
 	],
 	"./sk": [
-		252,
+		294,
 		105
 	],
 	"./sk.js": [
-		252,
+		294,
 		105
 	],
 	"./sl": [
-		253,
+		295,
 		106
 	],
 	"./sl.js": [
-		253,
+		295,
 		106
 	],
 	"./sq": [
-		254,
+		296,
 		107
 	],
 	"./sq.js": [
-		254,
+		296,
 		107
 	],
 	"./sr": [
-		256,
+		298,
 		108
 	],
 	"./sr-cyrl": [
-		255,
+		297,
 		109
 	],
 	"./sr-cyrl.js": [
-		255,
+		297,
 		109
 	],
 	"./sr.js": [
-		256,
+		298,
 		108
 	],
 	"./ss": [
-		257,
+		299,
 		110
 	],
 	"./ss.js": [
-		257,
+		299,
 		110
 	],
 	"./sv": [
-		258,
+		300,
 		111
 	],
 	"./sv.js": [
-		258,
+		300,
 		111
 	],
 	"./sw": [
-		259,
+		301,
 		112
 	],
 	"./sw.js": [
-		259,
+		301,
 		112
 	],
 	"./ta": [
-		260,
+		302,
 		113
 	],
 	"./ta.js": [
-		260,
+		302,
 		113
 	],
 	"./te": [
-		261,
+		303,
 		114
 	],
 	"./te.js": [
-		261,
+		303,
 		114
 	],
 	"./tet": [
-		262,
+		304,
 		115
 	],
 	"./tet.js": [
-		262,
+		304,
 		115
 	],
 	"./tg": [
-		263,
+		305,
 		116
 	],
 	"./tg.js": [
-		263,
+		305,
 		116
 	],
 	"./th": [
-		264,
+		306,
 		117
 	],
 	"./th.js": [
-		264,
+		306,
 		117
 	],
 	"./tk": [
-		265,
+		307,
 		118
 	],
 	"./tk.js": [
-		265,
+		307,
 		118
 	],
 	"./tl-ph": [
-		266,
+		308,
 		119
 	],
 	"./tl-ph.js": [
-		266,
+		308,
 		119
 	],
 	"./tlh": [
-		267,
+		309,
 		120
 	],
 	"./tlh.js": [
-		267,
+		309,
 		120
 	],
 	"./tr": [
-		268,
+		310,
 		121
 	],
 	"./tr.js": [
-		268,
+		310,
 		121
 	],
 	"./types.d.ts": [
-		456,
+		545,
 		146
 	],
 	"./tzl": [
-		269,
+		311,
 		122
 	],
 	"./tzl.js": [
-		269,
+		311,
 		122
 	],
 	"./tzm": [
-		271,
+		313,
 		123
 	],
 	"./tzm-latn": [
-		270,
+		312,
 		124
 	],
 	"./tzm-latn.js": [
-		270,
+		312,
 		124
 	],
 	"./tzm.js": [
-		271,
+		313,
 		123
 	],
 	"./ug-cn": [
-		272,
+		314,
 		125
 	],
 	"./ug-cn.js": [
-		272,
+		314,
 		125
 	],
 	"./uk": [
-		273,
+		315,
 		126
 	],
 	"./uk.js": [
-		273,
+		315,
 		126
 	],
 	"./ur": [
-		274,
+		316,
 		127
 	],
 	"./ur.js": [
-		274,
+		316,
 		127
 	],
 	"./uz": [
-		276,
+		318,
 		128
 	],
 	"./uz-latn": [
-		275,
+		317,
 		129
 	],
 	"./uz-latn.js": [
-		275,
+		317,
 		129
 	],
 	"./uz.js": [
-		276,
+		318,
 		128
 	],
 	"./vi": [
-		277,
+		319,
 		130
 	],
 	"./vi.js": [
-		277,
+		319,
 		130
 	],
 	"./x-pseudo": [
-		278,
+		320,
 		131
 	],
 	"./x-pseudo.js": [
-		278,
+		320,
 		131
 	],
 	"./yo": [
-		279,
+		321,
 		132
 	],
 	"./yo.js": [
-		279,
+		321,
 		132
 	],
 	"./zh": [
-		283,
+		325,
 		133
 	],
 	"./zh-cn": [
-		280,
+		322,
 		134
 	],
 	"./zh-cn.js": [
-		280,
+		322,
 		134
 	],
 	"./zh-hk": [
-		281,
+		323,
 		135
 	],
 	"./zh-hk.js": [
-		281,
+		323,
 		135
 	],
 	"./zh-tw": [
-		282,
+		324,
 		136
 	],
 	"./zh-tw.js": [
-		282,
+		324,
 		136
 	],
 	"./zh.js": [
-		283,
+		325,
 		133
 	]
 };
@@ -53839,14 +57579,14 @@ function webpackAsyncContext(req) {
 webpackAsyncContext.keys = function webpackAsyncContextKeys() {
 	return Object.keys(map);
 };
-webpackAsyncContext.id = 407;
+webpackAsyncContext.id = 495;
 module.exports = webpackAsyncContext;
 
 /***/ }),
-/* 408 */
+/* 496 */
 /***/ (function(module, exports, __webpack_require__) {
 
-var basePropertyOf = __webpack_require__(409);
+var basePropertyOf = __webpack_require__(497);
 
 /** Used to map characters to HTML entities. */
 var htmlEscapes = {
@@ -53870,7 +57610,7 @@ module.exports = escapeHtmlChar;
 
 
 /***/ }),
-/* 409 */
+/* 497 */
 /***/ (function(module, exports) {
 
 /**
@@ -53890,12 +57630,12 @@ module.exports = basePropertyOf;
 
 
 /***/ }),
-/* 410 */
+/* 498 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14);
-/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
+/* harmony import */ var _shims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9);
+/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
 /*
     This program is distributed under the terms of the MIT license.
     Please see the LICENSE file for details.
@@ -53914,7 +57654,7 @@ module.exports = basePropertyOf;
  *  information.  It is not meant to be used from user's code.
  */
 
-_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request = class Request {
+_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request = class Request {
   /** PrivateConstructor: Strophe.Request
    *  Create and initialize a new Strophe.Request object.
    *
@@ -53926,9 +57666,9 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request = class Request {
    *    (Integer) sends - The number of times this same request has been sent.
    */
   constructor(elem, func, rid, sends) {
-    this.id = ++_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"]._requestId;
+    this.id = ++_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"]._requestId;
     this.xmlData = elem;
-    this.data = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(elem); // save original function in case we need to make a new request
+    this.data = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(elem); // save original function in case we need to make a new request
     // from this one.
 
     this.origFunc = func;
@@ -53981,23 +57721,23 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request = class Request {
       node = this.xhr.responseXML.documentElement;
 
       if (node.tagName === "parsererror") {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("invalid response received");
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("responseText: " + this.xhr.responseText);
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("responseXML: " + _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(this.xhr.responseXML));
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("invalid response received");
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("responseText: " + this.xhr.responseText);
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("responseXML: " + _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(this.xhr.responseXML));
         throw new Error("parsererror");
       }
     } else if (this.xhr.responseText) {
       // In React Native, we may get responseText but no responseXML.  We can try to parse it manually.
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("Got responseText but no responseXML; attempting to parse it with DOMParser...");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("Got responseText but no responseXML; attempting to parse it with DOMParser...");
       node = new _shims__WEBPACK_IMPORTED_MODULE_0__[/* DOMParser */ "a"]().parseFromString(this.xhr.responseText, 'application/xml').documentElement;
 
       if (!node) {
         throw new Error('Parsing produced null node');
       } else if (node.querySelector('parsererror')) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("invalid response received: " + node.querySelector('parsererror').textContent);
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("responseText: " + this.xhr.responseText);
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("invalid response received: " + node.querySelector('parsererror').textContent);
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("responseText: " + this.xhr.responseText);
         const error = new Error();
-        error.name = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].ErrorCondition.BAD_FORMAT;
+        error.name = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].ErrorCondition.BAD_FORMAT;
         throw error;
       }
     }
@@ -54058,7 +57798,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request = class Request {
  *    A new Strophe.Bosh object.
  */
 
-_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
+_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Bosh = class Bosh {
   constructor(connection) {
     this._conn = connection;
     /* request id for body tags */
@@ -54087,7 +57827,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
   _buildBody() {
     const bodyWrap = Object(_core__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])('body', {
       'rid': this.rid++,
-      'xmlns': _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.HTTPBIND
+      'xmlns': _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.HTTPBIND
     });
 
     if (this.sid !== null) {
@@ -54140,7 +57880,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       "content": "text/xml; charset=utf-8",
       "ver": "1.6",
       "xmpp:version": "1.0",
-      "xmlns:xmpp": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.BOSH
+      "xmlns:xmpp": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.BOSH
     });
 
     if (route) {
@@ -54151,7 +57891,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
     const _connect_cb = this._conn._connect_cb;
 
-    this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request(body.tree(), this._onRequestStateChange.bind(this, _connect_cb.bind(this._conn)), body.tree().getAttribute("rid")));
+    this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request(body.tree(), this._onRequestStateChange.bind(this, _connect_cb.bind(this._conn)), body.tree().getAttribute("rid")));
 
     this._throttledRequestHandler();
   }
@@ -54186,14 +57926,14 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
     this.sid = sid;
     this.rid = rid;
     this._conn.connect_callback = callback;
-    this._conn.domain = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].getDomainFromJid(this._conn.jid);
+    this._conn.domain = _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].getDomainFromJid(this._conn.jid);
     this._conn.authenticated = true;
     this._conn.connected = true;
     this.wait = wait || this.wait;
     this.hold = hold || this.hold;
     this.window = wind || this.window;
 
-    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ATTACHED, null);
+    this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ATTACHED, null);
   }
   /** PrivateFunction: _restore
    *  Attempt to restore a cached BOSH session
@@ -54219,9 +57959,9 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
   _restore(jid, callback, wait, hold, wind) {
     const session = JSON.parse(window.sessionStorage.getItem('strophe-bosh-session'));
 
-    if (typeof session !== "undefined" && session !== null && session.rid && session.sid && session.jid && (typeof jid === "undefined" || jid === null || _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].getBareJidFromJid(session.jid) === _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].getBareJidFromJid(jid) || // If authcid is null, then it's an anonymous login, so
+    if (typeof session !== "undefined" && session !== null && session.rid && session.sid && session.jid && (typeof jid === "undefined" || jid === null || _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].getBareJidFromJid(session.jid) === _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].getBareJidFromJid(jid) || // If authcid is null, then it's an anonymous login, so
     // we compare only the domains:
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].getNodeFromJid(jid) === null && _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].getDomainFromJid(session.jid) === jid)) {
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].getNodeFromJid(jid) === null && _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].getDomainFromJid(session.jid) === jid)) {
       this._conn.restored = true;
 
       this._attach(session.jid, session.sid, session.rid, callback, wait, hold, wind);
@@ -54268,7 +58008,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
     if (typ !== null && typ === "terminate") {
       // an error occurred
       let cond = bodyWrap.getAttribute("condition");
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("BOSH-Connection failed: " + cond);
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("BOSH-Connection failed: " + cond);
       const conflict = bodyWrap.getElementsByTagName("conflict");
 
       if (cond !== null) {
@@ -54276,14 +58016,14 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
           cond = "conflict";
         }
 
-        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, cond);
+        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, cond);
       } else {
-        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "unknown");
+        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "unknown");
       }
 
       this._conn._doDisconnect(cond);
 
-      return _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL;
+      return _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL;
     } // check to make sure we don't overwrite these if _connect_cb is
     // called multiple times in the case of missing stream:features
 
@@ -54386,7 +58126,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
   _hitError(reqStatus) {
     this.errors++;
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].warn("request errored, status: " + reqStatus + ", number of errors: " + this.errors);
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].warn("request errored, status: " + reqStatus + ", number of errors: " + this.errors);
 
     if (this.errors > 4) {
       this._conn._onDisconnectTimeout();
@@ -54400,7 +58140,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
 
   _no_auth_received(callback) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].warn("Server did not yet offer a supported authentication " + "mechanism. Sending a blank poll request.");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].warn("Server did not yet offer a supported authentication " + "mechanism. Sending a blank poll request.");
 
     if (callback) {
       callback = callback.bind(this._conn);
@@ -54410,7 +58150,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
     const body = this._buildBody();
 
-    this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request(body.tree(), this._onRequestStateChange.bind(this, callback), body.tree().getAttribute("rid")));
+    this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request(body.tree(), this._onRequestStateChange.bind(this, callback), body.tree().getAttribute("rid")));
 
     this._throttledRequestHandler();
   }
@@ -54450,7 +58190,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
     const data = this._conn._data; // if no requests are in progress, poll
 
     if (this._conn.authenticated && this._requests.length === 0 && data.length === 0 && !this._conn.disconnecting) {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("no requests during idle cycle, sending blank request");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("no requests during idle cycle, sending blank request");
       data.push(null);
     }
 
@@ -54468,7 +58208,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
               "to": this._conn.domain,
               "xml:lang": "en",
               "xmpp:restart": "true",
-              "xmlns:xmpp": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.BOSH
+              "xmlns:xmpp": _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.BOSH
             });
           } else {
             body.cnode(data[i]).up();
@@ -54479,7 +58219,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       delete this._conn._data;
       this._conn._data = [];
 
-      this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid")));
+      this._requests.push(new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid")));
 
       this._throttledRequestHandler();
     }
@@ -54488,13 +58228,13 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       const time_elapsed = this._requests[0].age();
 
       if (this._requests[0].dead !== null) {
-        if (this._requests[0].timeDead() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].SECONDARY_TIMEOUT * this.wait)) {
+        if (this._requests[0].timeDead() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].SECONDARY_TIMEOUT * this.wait)) {
           this._throttledRequestHandler();
         }
       }
 
-      if (time_elapsed > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].TIMEOUT * this.wait)) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].warn("Request " + this._requests[0].id + " timed out, over " + Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].TIMEOUT * this.wait) + " seconds since last activity");
+      if (time_elapsed > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].TIMEOUT * this.wait)) {
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].warn("Request " + this._requests[0].id + " timed out, over " + Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].TIMEOUT * this.wait) + " seconds since last activity");
 
         this._throttledRequestHandler();
       }
@@ -54520,7 +58260,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       } catch (e) {
         // ignore errors from undefined status attribute. Works
         // around a browser bug
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Caught an error while retrieving a request's status, " + "reqStatus: " + reqStatus);
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Caught an error while retrieving a request's status, " + "reqStatus: " + reqStatus);
       }
     }
 
@@ -54545,7 +58285,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
 
   _onRequestStateChange(func, req) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("request id " + req.id + "." + req.sends + " state changed to " + req.xhr.readyState);
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("request id " + req.id + "." + req.sends + " state changed to " + req.xhr.readyState);
 
     if (req.abort) {
       req.abort = false;
@@ -54576,7 +58316,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       // remove from internal queue
       this._removeRequest(req);
 
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("request id " + req.id + " should now be removed");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("request id " + req.id + " should now be removed");
     }
 
     if (reqStatus === 200) {
@@ -54587,37 +58327,37 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       // restart the other - both will be in the first spot, as the
       // completed request has been removed from the queue already
 
-      if (reqIs1 || reqIs0 && this._requests.length > 0 && this._requests[0].age() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].SECONDARY_TIMEOUT * this.wait)) {
+      if (reqIs1 || reqIs0 && this._requests.length > 0 && this._requests[0].age() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].SECONDARY_TIMEOUT * this.wait)) {
         this._restartRequest(0);
       }
 
       this._conn.nextValidRid(Number(req.rid) + 1);
 
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("request id " + req.id + "." + req.sends + " got 200");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("request id " + req.id + "." + req.sends + " got 200");
       func(req); // call handler
 
       this.errors = 0;
     } else if (reqStatus === 0 || reqStatus >= 400 && reqStatus < 600 || reqStatus >= 12000) {
       // request failed
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened");
 
       this._hitError(reqStatus);
 
       this._callProtocolErrorHandlers(req);
 
       if (reqStatus >= 400 && reqStatus < 500) {
-        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.DISCONNECTING, null);
+        this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.DISCONNECTING, null);
 
         this._conn._doDisconnect();
       }
     } else {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened");
     }
 
     if (!valid_request && !too_many_retries) {
       this._throttledRequestHandler();
     } else if (too_many_retries && !this._conn.connected) {
-      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "giving-up");
+      this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "giving-up");
     }
   }
   /** PrivateFunction: _processRequest
@@ -54644,13 +58384,13 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
     }
 
     const time_elapsed = req.age();
-    const primary_timeout = !isNaN(time_elapsed) && time_elapsed > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].TIMEOUT * this.wait);
-    const secondary_timeout = req.dead !== null && req.timeDead() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].SECONDARY_TIMEOUT * this.wait);
+    const primary_timeout = !isNaN(time_elapsed) && time_elapsed > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].TIMEOUT * this.wait);
+    const secondary_timeout = req.dead !== null && req.timeDead() > Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].SECONDARY_TIMEOUT * this.wait);
     const server_error = req.xhr.readyState === 4 && (reqStatus < 1 || reqStatus >= 500);
 
     if (primary_timeout || secondary_timeout || server_error) {
       if (secondary_timeout) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Request ".concat(this._requests[i].id, " timed out (secondary), restarting"));
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Request ".concat(this._requests[i].id, " timed out (secondary), restarting"));
       }
 
       req.abort = true;
@@ -54658,12 +58398,12 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
       req.xhr.onreadystatechange = function () {};
 
-      this._requests[i] = new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request(req.xmlData, req.origFunc, req.rid, req.sends);
+      this._requests[i] = new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request(req.xmlData, req.origFunc, req.rid, req.sends);
       req = this._requests[i];
     }
 
     if (req.xhr.readyState === 0) {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("request id " + req.id + "." + req.sends + " posting");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("request id " + req.id + "." + req.sends + " posting");
 
       try {
         const content_type = this._conn.options.contentType || "text/xml; charset=utf-8";
@@ -54678,10 +58418,10 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
           req.xhr.withCredentials = true;
         }
       } catch (e2) {
-        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("XHR open failed: " + e2.toString());
+        _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("XHR open failed: " + e2.toString());
 
         if (!this._conn.connected) {
-          this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "bad-service");
+          this._conn._changeConnectStatus(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "bad-service");
         }
 
         this._conn.disconnect();
@@ -54712,7 +58452,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       if (req.sends > 1) {
         // Using a cube of the retry number creates a nicely
         // expanding retry window
-        const backoff = Math.min(Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].TIMEOUT * this.wait), Math.pow(req.sends, 3)) * 1000;
+        const backoff = Math.min(Math.floor(_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].TIMEOUT * this.wait), Math.pow(req.sends, 3)) * 1000;
         setTimeout(function () {
           // XXX: setTimeout should be called only with function expressions (23974bc1)
           sendFunc();
@@ -54723,7 +58463,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
       req.sends++;
 
-      if (this._conn.xmlOutput !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Connection.prototype.xmlOutput) {
+      if (this._conn.xmlOutput !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Connection.prototype.xmlOutput) {
         if (req.xmlData.nodeName === this.strip && req.xmlData.childNodes.length) {
           this._conn.xmlOutput(req.xmlData.childNodes[0]);
         } else {
@@ -54731,11 +58471,11 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
         }
       }
 
-      if (this._conn.rawOutput !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Connection.prototype.rawOutput) {
+      if (this._conn.rawOutput !== _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Connection.prototype.rawOutput) {
         this._conn.rawOutput(req.data);
       }
     } else {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("_processRequest: " + (i === 0 ? "first" : "second") + " request has readyState of " + req.xhr.readyState);
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("_processRequest: " + (i === 0 ? "first" : "second") + " request has readyState of " + req.xhr.readyState);
     }
   }
   /** PrivateFunction: _removeRequest
@@ -54747,7 +58487,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
 
   _removeRequest(req) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("removing request");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("removing request");
 
     for (let i = this._requests.length - 1; i >= 0; i--) {
       if (req === this._requests[i]) {
@@ -54812,7 +58552,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
 
   _sendTerminate(pres) {
-    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("_sendTerminate was called");
+    _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("_sendTerminate was called");
 
     const body = this._buildBody().attrs({
       type: "terminate"
@@ -54822,7 +58562,7 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
       body.cnode(pres.tree());
     }
 
-    const req = new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid"));
+    const req = new _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid"));
 
     this._requests.push(req);
 
@@ -54864,9 +58604,9 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
 
   _throttledRequestHandler() {
     if (!this._requests) {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("_throttledRequestHandler called with " + "undefined requests");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("_throttledRequestHandler called with " + "undefined requests");
     } else {
-      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("_throttledRequestHandler called with " + this._requests.length + " requests");
+      _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("_throttledRequestHandler called with " + this._requests.length + " requests");
     }
 
     if (!this._requests || this._requests.length === 0) {
@@ -54895,10 +58635,10 @@ _core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh = class Bosh {
  *  <Strophe.Connection.xmlInput> and <Strophe.Connection.xmlOutput>.
  */
 
-_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Bosh.prototype.strip = null;
+_core__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Bosh.prototype.strip = null;
 
 /***/ }),
-/* 411 */
+/* 499 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -54913,12 +58653,12 @@ module.exports = function () {
 
 
 /***/ }),
-/* 412 */
+/* 500 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* harmony import */ var _websocket_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(119);
-/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
+/* harmony import */ var _websocket_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(158);
+/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
 /*
     This program is distributed under the terms of the MIT license.
     Please see the LICENSE file for details.
@@ -54928,16 +58668,16 @@ module.exports = function () {
 
 
 const lmap = {};
-lmap['debug'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.DEBUG;
-lmap['info'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.INFO;
-lmap['warn'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.WARN;
-lmap['error'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.ERROR;
-lmap['fatal'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.FATAL;
+lmap['debug'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.DEBUG;
+lmap['info'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.INFO;
+lmap['warn'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.WARN;
+lmap['error'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.ERROR;
+lmap['fatal'] = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.FATAL;
 /** Class: Strophe.WorkerWebsocket
  *  _Private_ helper class that handles a websocket connection inside a shared worker.
  */
 
-_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class WorkerWebsocket extends _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Websocket {
+_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].WorkerWebsocket = class WorkerWebsocket extends _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Websocket {
   /** PrivateConstructor: Strophe.WorkerWebsocket
    *  Create and initialize a Strophe.WorkerWebsocket object.
    *
@@ -54956,7 +58696,7 @@ _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class
       var _console;
 
       (_console = console) === null || _console === void 0 ? void 0 : _console.error(e);
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.ERROR, "Shared Worker Error: ".concat(e));
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.ERROR, "Shared Worker Error: ".concat(e));
     };
   }
 
@@ -54988,31 +58728,31 @@ _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class
   }
 
   _attachCallback(status, jid) {
-    if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ATTACHED) {
+    if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ATTACHED) {
       this._conn.jid = jid;
       this._conn.authenticated = true;
       this._conn.connected = true;
       this._conn.restored = true;
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ATTACHED);
-    } else if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ATTACHFAIL) {
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ATTACHED);
+    } else if (status === _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ATTACHFAIL) {
       this._conn.authenticated = false;
       this._conn.connected = false;
       this._conn.restored = false;
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.ATTACHFAIL);
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.ATTACHFAIL);
     }
   }
 
   _disconnect(readyState, pres) {
     pres && this._conn.send(pres);
     const close = Object(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* $build */ "a"])("close", {
-      "xmlns": _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].NS.FRAMING
+      "xmlns": _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].NS.FRAMING
     });
 
     this._conn.xmlOutput(close.tree());
 
-    const closeString = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].serialize(close);
+    const closeString = _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].serialize(close);
 
     this._conn.rawOutput(closeString);
 
@@ -55023,7 +58763,7 @@ _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class
 
   _onClose(e) {
     if (this._conn.connected && !this._conn.disconnecting) {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Websocket closed unexpectedly");
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Websocket closed unexpectedly");
 
       this._conn._doDisconnect();
     } else if (e && e.code === 1006 && !this._conn.connected) {
@@ -55031,13 +58771,13 @@ _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class
       // call onerror when the initial connection fails) we need to
       // dispatch a CONNFAIL status update to be consistent with the
       // behavior on other browsers.
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].error("Websocket closed unexcectedly");
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].error("Websocket closed unexcectedly");
 
-      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
+      this._conn._changeConnectStatus(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected.");
 
       this._conn._doDisconnect();
     } else {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].debug("Websocket closed");
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].debug("Websocket closed");
     }
   }
 
@@ -55073,25 +58813,25 @@ _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].WorkerWebsocket = class
       try {
         this[method_name].apply(this, ev.data.slice(1));
       } catch (e) {
-        _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.ERROR, e);
+        _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.ERROR, e);
       }
     } else if (method_name === 'log') {
       const level = data[1];
       const msg = data[2];
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].log(lmap[level], msg);
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].log(lmap[level], msg);
     } else {
-      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "c"].LogLevel.ERROR, "Found unhandled service worker message: ".concat(data));
+      _core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].log(_core_js__WEBPACK_IMPORTED_MODULE_1__[/* Strophe */ "d"].LogLevel.ERROR, "Found unhandled service worker message: ".concat(data));
     }
   }
 
 };
 
 /***/ }),
-/* 413 */
+/* 501 */
 /***/ (function(module, exports, __webpack_require__) {
 
 
-var content = __webpack_require__(414);
+var content = __webpack_require__(502);
 
 if(typeof content === 'string') content = [[module.i, content, '']];
 
@@ -55105,18 +58845,18 @@ var options = {"hmr":true}
 options.transform = transform
 options.insertInto = undefined;
 
-var update = __webpack_require__(416)(content, options);
+var update = __webpack_require__(504)(content, options);
 
 if(content.locals) module.exports = content.locals;
 
 if(false) {}
 
 /***/ }),
-/* 414 */
+/* 502 */
 /***/ (function(module, exports, __webpack_require__) {
 
 // Imports
-var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(415);
+var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(503);
 exports = ___CSS_LOADER_API_IMPORT___(true);
 // Module
 exports.push([module.i, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"converse.scss"}]);
@@ -55125,7 +58865,7 @@ module.exports = exports;
 
 
 /***/ }),
-/* 415 */
+/* 503 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -55225,7 +58965,7 @@ function toComment(sourceMap) {
 }
 
 /***/ }),
-/* 416 */
+/* 504 */
 /***/ (function(module, exports, __webpack_require__) {
 
 /*
@@ -55294,7 +59034,7 @@ var singleton = null;
 var	singletonCounter = 0;
 var	stylesInsertedAtTop = [];
 
-var	fixUrls = __webpack_require__(417);
+var	fixUrls = __webpack_require__(505);
 
 module.exports = function(list, options) {
 	if (typeof DEBUG !== "undefined" && DEBUG) {
@@ -55629,7 +59369,7 @@ function updateLink (link, options, obj) {
 
 
 /***/ }),
-/* 417 */
+/* 505 */
 /***/ (function(module, exports) {
 
 
@@ -55724,7 +59464,7 @@ module.exports = function (css) {
 
 
 /***/ }),
-/* 418 */
+/* 506 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -55732,17 +59472,17 @@ module.exports = function (css) {
 __webpack_require__.r(__webpack_exports__);
 
 // EXTERNAL MODULE: ./src/lodash.noconflict.js
-var lodash_noconflict = __webpack_require__(52);
+var lodash_noconflict = __webpack_require__(66);
 var lodash_noconflict_default = /*#__PURE__*/__webpack_require__.n(lodash_noconflict);
 
 // EXTERNAL MODULE: ./src/headless/polyfill.js
-var polyfill = __webpack_require__(285);
+var polyfill = __webpack_require__(327);
 
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/websocket.js
-var websocket = __webpack_require__(54);
+var websocket = __webpack_require__(68);
 
 // EXTERNAL MODULE: ./node_modules/localforage/dist/localforage.js
-var localforage = __webpack_require__(23);
+var localforage = __webpack_require__(22);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheClear.js
 /**
@@ -56029,7 +59769,7 @@ function stackHas(key) {
 /* harmony default export */ var _stackHas = (stackHas);
 
 // EXTERNAL MODULE: ./node_modules/lodash-es/_root.js
-var _root = __webpack_require__(5);
+var _root = __webpack_require__(6);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_Symbol.js
 
@@ -57038,7 +60778,7 @@ var isArray = Array.isArray;
 /* harmony default export */ var lodash_es_isArray = (isArray);
 
 // EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js
-var isBuffer = __webpack_require__(18);
+var isBuffer = __webpack_require__(21);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_isIndex.js
 /** Used as references for various `Number` constants. */
@@ -57183,7 +60923,7 @@ function baseUnary(func) {
 /* harmony default export */ var _baseUnary = (baseUnary);
 
 // EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js
-var _nodeUtil = __webpack_require__(12);
+var _nodeUtil = __webpack_require__(14);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/isTypedArray.js
 
@@ -57546,7 +61286,7 @@ function baseAssignIn(object, source) {
 /* harmony default export */ var _baseAssignIn = (baseAssignIn);
 
 // EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js
-var _cloneBuffer = __webpack_require__(121);
+var _cloneBuffer = __webpack_require__(160);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_copyArray.js
 /**
@@ -58858,7 +62598,7 @@ function _initStorage(options) {
 // the app's key/value store!
 
 
-function sessionStorage_clear(callback) {
+function clear(callback) {
   const promise = this.ready().then(function () {
     const keyPrefix = dbInfo.keyPrefix;
 
@@ -59086,17 +62826,161 @@ const sessionStorageWrapper = {
   getItem: getItem,
   setItem: setItem,
   removeItem: removeItem,
-  clear: sessionStorage_clear,
+  clear: clear,
   length: sessionStorage_length,
   key: sessionStorage_key,
   keys: sessionStorage_keys,
   dropInstance: dropInstance
 };
 /* harmony default export */ var drivers_sessionStorage = (sessionStorageWrapper);
+// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/drivers/noStorage.js
+// Copyright 2014 Mozilla
+// Copyright 2015 Thodoris Greasidis
+// Copyright 2018 JC Brand
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+ // import { Promise } from "window-or-global";
+
+function isNoStorageValid() {
+  return true;
+}
+
+function noStorage_getKeyPrefix(options, defaultConfig) {
+  let keyPrefix = options.name + '/';
+
+  if (options.storeName !== defaultConfig.storeName) {
+    keyPrefix += options.storeName + '/';
+  }
+
+  return keyPrefix;
+}
+
+const noStorage_dbInfo = {};
+
+function noStorage_initStorage(options) {
+  noStorage_dbInfo.keyPrefix = noStorage_getKeyPrefix(options, this._defaultConfig);
+
+  if (options) {
+    for (const i in options) {
+      // eslint-disable-line guard-for-in
+      noStorage_dbInfo[i] = options[i];
+    }
+  }
+}
+
+function noStorage_clear(callback) {
+  const promise = Promise.resolve();
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_getItem(key, callback) {
+  const promise = this.ready().then(function () {
+    return undefined;
+  });
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_iterate(iterator, callback) {
+  const promise = Promise.resolve();
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_key(n, callback) {
+  const self = this;
+  const promise = self.ready().then(function () {
+    return null;
+  });
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_keys(callback) {
+  const self = this;
+  const promise = self.ready().then(function () {
+    return [];
+  });
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_length(callback) {
+  const self = this;
+  const promise = self.keys().then(function (keys) {
+    return keys.length;
+  });
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_removeItem(key, callback) {
+  const promise = Promise.resolve();
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_setItem(key, value, callback) {
+  const promise = Promise.resolve(value);
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+function noStorage_dropInstance(options, callback) {
+  callback = getCallback.apply(this, arguments);
+  options = typeof options !== "function" && options || {};
+
+  if (!options.name) {
+    const currentConfig = this.config();
+    options.name = options.name || currentConfig.name;
+    options.storeName = options.storeName || currentConfig.storeName;
+  }
+
+  const self = this;
+  let promise;
+
+  if (!options.name) {
+    promise = Promise.reject(new Error("Invalid arguments"));
+  } else {
+    promise = Promise.resolve();
+  }
+
+  utils_executeCallback(promise, callback);
+  return promise;
+}
+
+const noStorageWrapper = {
+  _driver: "noStorageWrapper",
+  _initStorage: noStorage_initStorage,
+  _support: isNoStorageValid(),
+  iterate: noStorage_iterate,
+  getItem: noStorage_getItem,
+  setItem: noStorage_setItem,
+  removeItem: noStorage_removeItem,
+  clear: noStorage_clear,
+  length: noStorage_length,
+  key: noStorage_key,
+  keys: noStorage_keys,
+  dropInstance: noStorage_dropInstance
+};
+/* harmony default export */ var noStorage = (noStorageWrapper);
 // CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/storage.js
 /**
  * IndexedDB, localStorage and sessionStorage adapter
  */
+ // import * as memoryDriver from "localforage-driver-memory";
 
 
 
@@ -59138,6 +63022,8 @@ class storage_Storage {
       await localforage["config"]({
         'driver': localforage["LOCALSTORAGE"]
       });
+    } else if (type === 'in_memory') {
+      localforage["setDriver"](noStorage._driver);
     } else if (type !== 'indexed') {
       throw new Error("Skeletor.storage: No storage type was specified");
     }
@@ -59326,15 +63212,17 @@ class storage_Storage {
 
 }
 
+storage_Storage.IN_MEMORY = noStorage._driver;
+storage_Storage.memoryStorageInitialized = localforage["defineDriver"](noStorage);
 storage_Storage.sessionStorageInitialized = localforage["defineDriver"](drivers_sessionStorage);
 storage_Storage.localForage = localforage;
 /* harmony default export */ var src_storage = (storage_Storage);
 // EXTERNAL MODULE: ./node_modules/dayjs/plugin/advancedFormat.js
-var advancedFormat = __webpack_require__(122);
+var advancedFormat = __webpack_require__(161);
 var advancedFormat_default = /*#__PURE__*/__webpack_require__.n(advancedFormat);
 
 // EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js
-var dayjs_min = __webpack_require__(4);
+var dayjs_min = __webpack_require__(5);
 var dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/isPlainObject.js
@@ -59529,51 +63417,51 @@ const log = {
 };
 /* harmony default export */ var headless_log = (log);
 // EXTERNAL MODULE: ./node_modules/lodash/drop.js
-var drop = __webpack_require__(123);
+var drop = __webpack_require__(162);
 var drop_default = /*#__PURE__*/__webpack_require__.n(drop);
 
 // EXTERNAL MODULE: ./node_modules/lodash/each.js
-var each = __webpack_require__(34);
+var each = __webpack_require__(44);
 var each_default = /*#__PURE__*/__webpack_require__.n(each);
 
 // EXTERNAL MODULE: ./node_modules/lodash/extend.js
-var extend = __webpack_require__(35);
+var extend = __webpack_require__(45);
 var extend_default = /*#__PURE__*/__webpack_require__.n(extend);
 
 // EXTERNAL MODULE: ./node_modules/lodash/includes.js
-var lodash_includes = __webpack_require__(29);
+var lodash_includes = __webpack_require__(36);
 var includes_default = /*#__PURE__*/__webpack_require__.n(lodash_includes);
 
 // EXTERNAL MODULE: ./node_modules/lodash/isBoolean.js
-var isBoolean = __webpack_require__(124);
+var isBoolean = __webpack_require__(163);
 var isBoolean_default = /*#__PURE__*/__webpack_require__.n(isBoolean);
 
 // EXTERNAL MODULE: ./node_modules/lodash/isFunction.js
-var lodash_isFunction = __webpack_require__(48);
+var lodash_isFunction = __webpack_require__(62);
 var isFunction_default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction);
 
 // EXTERNAL MODULE: ./node_modules/lodash/isNil.js
-var isNil = __webpack_require__(125);
+var isNil = __webpack_require__(164);
 var isNil_default = /*#__PURE__*/__webpack_require__.n(isNil);
 
 // EXTERNAL MODULE: ./node_modules/lodash/keys.js
-var lodash_keys = __webpack_require__(26);
+var lodash_keys = __webpack_require__(33);
 var keys_default = /*#__PURE__*/__webpack_require__.n(lodash_keys);
 
 // EXTERNAL MODULE: ./node_modules/lodash/partial.js
-var partial = __webpack_require__(69);
+var partial = __webpack_require__(93);
 var partial_default = /*#__PURE__*/__webpack_require__.n(partial);
 
 // EXTERNAL MODULE: ./node_modules/lodash/pickBy.js
-var pickBy = __webpack_require__(126);
+var pickBy = __webpack_require__(165);
 var pickBy_default = /*#__PURE__*/__webpack_require__.n(pickBy);
 
 // EXTERNAL MODULE: ./node_modules/lodash/size.js
-var lodash_size = __webpack_require__(127);
+var lodash_size = __webpack_require__(166);
 var size_default = /*#__PURE__*/__webpack_require__.n(lodash_size);
 
 // EXTERNAL MODULE: ./node_modules/lodash/values.js
-var lodash_values = __webpack_require__(68);
+var lodash_values = __webpack_require__(92);
 var values_default = /*#__PURE__*/__webpack_require__.n(lodash_values);
 
 // CONCATENATED MODULE: ./src/headless/node_modules/pluggable.js/src/pluggable.js
@@ -59633,7 +63521,7 @@ extend_default()(PluginSocket.prototype, {
   // overriding method is called. This is done to enable
   // chaining of plugin methods, all the way up to the
   // original method.
-  wrappedOverride: function wrappedOverride(key, value, super_method, default_super) {
+  wrappedOverride: function (key, value, super_method, default_super) {
     if (typeof super_method === "function") {
       if (typeof this.__super__ === "undefined") {
         /* We're not on the context of the plugged object.
@@ -59665,7 +63553,7 @@ extend_default()(PluginSocket.prototype, {
   // For example:
   //
   // `plugin2.MyFunc.__super__.myFunc => plugin1.MyFunc.__super__.myFunc => original.myFunc`
-  _overrideAttribute: function _overrideAttribute(key, plugin) {
+  _overrideAttribute: function (key, plugin) {
     let value = plugin.overrides[key];
 
     if (typeof value === "function") {
@@ -59677,7 +63565,7 @@ extend_default()(PluginSocket.prototype, {
       this.plugged[key] = value;
     }
   },
-  _extendObject: function _extendObject(obj, attributes) {
+  _extendObject: function (obj, attributes) {
     if (!obj.prototype.__super__) {
       obj.prototype.__super__ = {};
       obj.prototype.__super__[this.name] = this.plugged;
@@ -59709,7 +63597,7 @@ extend_default()(PluginSocket.prototype, {
   // If `strict_plugin_dependencies` is set to `false` (on the object being
   // made pluggable), then no error will be thrown if any of these plugins aren't
   // available.
-  loadPluginDependencies: function loadPluginDependencies(plugin) {
+  loadPluginDependencies: function (plugin) {
     each_default()(plugin.dependencies, name => {
       let dep = this.plugins[name];
 
@@ -59725,7 +63613,7 @@ extend_default()(PluginSocket.prototype, {
       }
     });
   },
-  throwUndefinedDependencyError: function throwUndefinedDependencyError(msg) {
+  throwUndefinedDependencyError: function (msg) {
     if (this.plugged.strict_plugin_dependencies) {
       throw msg;
     } else {
@@ -59739,7 +63627,7 @@ extend_default()(PluginSocket.prototype, {
   // `applyOverrides` is called by initializePlugin. It applies any
   // and all overrides of methods or Backbone views and models that
   // are defined on any of the plugins.
-  applyOverrides: function applyOverrides(plugin) {
+  applyOverrides: function (plugin) {
     each_default()(Object.keys(plugin.overrides || {}), key => {
       let override = plugin.overrides[key];
 
@@ -59756,7 +63644,7 @@ extend_default()(PluginSocket.prototype, {
   },
   // `initializePlugin` applies the overrides (if any) defined on all
   // the registered plugins and then calls the initialize method of the plugin
-  initializePlugin: function initializePlugin(plugin) {
+  initializePlugin: function (plugin) {
     if (!includes_default()(keys_default()(this.allowed_plugins), plugin.__name__)) {
       /* Don't initialize disallowed plugins. */
       return;
@@ -59787,7 +63675,7 @@ extend_default()(PluginSocket.prototype, {
   },
   // `registerPlugin` registers (or inserts, if you'd like) a plugin,
   // by adding it to the `plugins` map on the PluginSocket instance.
-  registerPlugin: function registerPlugin(name, plugin) {
+  registerPlugin: function (name, plugin) {
     if (name in this.plugins) {
       throw new Error('Error: Plugin name ' + name + ' is already taken');
     }
@@ -59800,7 +63688,7 @@ extend_default()(PluginSocket.prototype, {
   // `initializePlugin` for each.
   // The passed in  properties variable is an object with attributes and methods
   // which will be attached to the plugins.
-  initializePlugins: function initializePlugins(properties = {}, whitelist = [], blacklist = []) {
+  initializePlugins: function (properties = {}, whitelist = [], blacklist = []) {
     if (!size_default()(this.plugins)) {
       return;
     }
@@ -59841,8 +63729,16 @@ function enable(object, name, attrname) {
 /* harmony default export */ var pluggable = ({
   enable
 });
+// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/sync.js
+var sync = __webpack_require__(167);
+var sync_default = /*#__PURE__*/__webpack_require__.n(sync);
+
+// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/local.js
+var local = __webpack_require__(168);
+var local_default = /*#__PURE__*/__webpack_require__.n(local);
+
 // EXTERNAL MODULE: ./node_modules/sizzle/dist/sizzle.js
-var sizzle = __webpack_require__(2);
+var sizzle = __webpack_require__(3);
 var sizzle_default = /*#__PURE__*/__webpack_require__.n(sizzle);
 
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/core.js + 2 modules
@@ -60732,7 +64628,7 @@ function inherits(protoProps, staticProps) {
   if (protoProps && lodash_es_has(protoProps, 'constructor')) {
     child = protoProps.constructor;
   } else {
-    child = function child() {
+    child = function () {
       return parent.apply(this, arguments);
     };
   } // Add static properties to the constructor function, if supplied.
@@ -60901,7 +64797,7 @@ var isEmpty_hasOwnProperty = isEmpty_objectProto.hasOwnProperty;
  * _.isEmpty({ 'a': 1 });
  * // => false
  */
-function isEmpty_isEmpty(value) {
+function isEmpty(value) {
   if (value == null) {
     return true;
   }
@@ -60925,7 +64821,7 @@ function isEmpty_isEmpty(value) {
   return true;
 }
 
-/* harmony default export */ var lodash_es_isEmpty = (isEmpty_isEmpty);
+/* harmony default export */ var lodash_es_isEmpty = (isEmpty);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js
 
@@ -61205,7 +65101,7 @@ let _listening; // Iterates over the standard `event, callback` (as well as the
 // maps `{event: callback}`).
 
 
-const events_eventsApi = function eventsApi(iteratee, events, name, callback, opts) {
+const eventsApi = function (iteratee, events, name, callback, opts) {
   let i = 0,
       names;
 
@@ -61232,7 +65128,7 @@ const events_eventsApi = function eventsApi(iteratee, events, name, callback, op
 
 
 Events.on = function (name, callback, context) {
-  this._events = events_eventsApi(onApi, this._events || {}, name, callback, {
+  this._events = eventsApi(onApi, this._events || {}, name, callback, {
     context: context,
     ctx: this,
     listening: _listening
@@ -61274,7 +65170,7 @@ Events.listenTo = function (obj, name, callback) {
 }; // The reducing API that adds a callback to the `events` object.
 
 
-const onApi = function onApi(events, name, callback, options) {
+const onApi = function (events, name, callback, options) {
   if (callback) {
     const handlers = events[name] || (events[name] = []);
     const context = options.context,
@@ -61294,7 +65190,7 @@ const onApi = function onApi(events, name, callback, options) {
 // `_listening` variable.
 
 
-const tryCatchOn = function tryCatchOn(obj, name, callback, context) {
+const tryCatchOn = function (obj, name, callback, context) {
   try {
     obj.on(name, callback, context);
   } catch (e) {
@@ -61308,7 +65204,7 @@ const tryCatchOn = function tryCatchOn(obj, name, callback, context) {
 
 Events.off = function (name, callback, context) {
   if (!this._events) return this;
-  this._events = events_eventsApi(events_offApi, this._events, name, callback, {
+  this._events = eventsApi(offApi, this._events, name, callback, {
     context: context,
     listeners: this._listeners
   });
@@ -61336,7 +65232,7 @@ Events.stopListening = function (obj, name, callback) {
 }; // The reducing API that removes a callback from the `events` object.
 
 
-const events_offApi = function offApi(events, name, callback, options) {
+const offApi = function (events, name, callback, options) {
   if (!events) return;
   const context = options.context,
         listeners = options.listeners;
@@ -61392,7 +65288,7 @@ const events_offApi = function offApi(events, name, callback, options) {
 
 Events.once = function (name, callback, context) {
   // Map the event into a `{event: once}` object.
-  const events = events_eventsApi(events_onceMap, {}, name, callback, this.off.bind(this));
+  const events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));
   if (typeof name === 'string' && (context === null || context === undefined)) callback = undefined;
   return this.on(events, callback, context);
 }; // Inversion-of-control versions of `once`.
@@ -61400,13 +65296,13 @@ Events.once = function (name, callback, context) {
 
 Events.listenToOnce = function (obj, name, callback) {
   // Map the event into a `{event: once}` object.
-  const events = events_eventsApi(events_onceMap, {}, name, callback, this.stopListening.bind(this, obj));
+  const events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));
   return this.listenTo(obj, events);
 }; // Reduces the event callbacks into a map of `{event: onceWrapper}`.
 // `offer` unbinds the `onceWrapper` after it has been called.
 
 
-const events_onceMap = function onceMap(map, name, callback, offer) {
+const onceMap = function (map, name, callback, offer) {
   if (callback) {
     const _once = map[name] = lodash_es_once(function () {
       offer(name, _once);
@@ -61430,12 +65326,12 @@ Events.trigger = function (name) {
 
   for (let i = 0; i < length; i++) args[i] = arguments[i + 1];
 
-  events_eventsApi(triggerApi, this._events, name, undefined, args);
+  eventsApi(triggerApi, this._events, name, undefined, args);
   return this;
 }; // Handles triggering the appropriate event callbacks.
 
 
-const triggerApi = function triggerApi(objEvents, name, callback, args) {
+const triggerApi = function (objEvents, name, callback, args) {
   if (objEvents) {
     const events = objEvents[name];
     let allEvents = objEvents.all;
@@ -61450,7 +65346,7 @@ const triggerApi = function triggerApi(objEvents, name, callback, args) {
 // Backbone events have 3 arguments).
 
 
-const triggerEvents = function triggerEvents(events, args) {
+const triggerEvents = function (events, args) {
   let ev,
       i = -1;
   const l = events.length,
@@ -61488,7 +65384,7 @@ const triggerEvents = function triggerEvents(events, args) {
 // when all callbacks have been offed.
 
 
-const Listening = function Listening(listener, obj) {
+const Listening = function (listener, obj) {
   this.id = listener._listenId;
   this.listener = listener;
   this.obj = obj;
@@ -61506,7 +65402,7 @@ Listening.prototype.off = function (name, callback) {
   let cleanup;
 
   if (this.interop) {
-    this._events = events_eventsApi(events_offApi, this._events, name, callback, {
+    this._events = eventsApi(offApi, this._events, name, callback, {
       context: undefined,
       listeners: undefined
     });
@@ -61905,7 +65801,7 @@ var invert_nativeObjectToString = invert_objectProto.toString;
  * _.invert(object);
  * // => { '1': 'c', '2': 'b' }
  */
-var invert_invert = _createInverter(function(result, value, key) {
+var invert = _createInverter(function(result, value, key) {
   if (value != null &&
       typeof value.toString != 'function') {
     value = invert_nativeObjectToString.call(value);
@@ -61914,7 +65810,7 @@ var invert_invert = _createInverter(function(result, value, key) {
   result[value] = key;
 }, lodash_es_constant(lodash_es_identity));
 
-/* harmony default export */ var lodash_es_invert = (invert_invert);
+/* harmony default export */ var lodash_es_invert = (invert);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js
 /** Used to stand-in for `undefined` hash values. */
@@ -63212,7 +67108,7 @@ var omit_CLONE_DEEP_FLAG = 1,
  * _.omit(object, ['a', 'c']);
  * // => { 'b': '2' }
  */
-var omit_omit = _flatRest(function(object, paths) {
+var omit = _flatRest(function(object, paths) {
   var result = {};
   if (object == null) {
     return result;
@@ -63234,7 +67130,7 @@ var omit_omit = _flatRest(function(object, paths) {
   return result;
 });
 
-/* harmony default export */ var lodash_es_omit = (omit_omit);
+/* harmony default export */ var lodash_es_omit = (omit);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js
 
@@ -63359,11 +67255,11 @@ function basePick(object, paths) {
  * _.pick(object, ['a', 'c']);
  * // => { 'a': 1, 'c': 3 }
  */
-var pick_pick = _flatRest(function(object, paths) {
+var pick = _flatRest(function(object, paths) {
   return object == null ? {} : _basePick(object, paths);
 });
 
-/* harmony default export */ var lodash_es_pick = (pick_pick);
+/* harmony default export */ var lodash_es_pick = (pick);
 
 // CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/model.js
 //     Backbone.js 1.4.0
@@ -63395,7 +67291,7 @@ var pick_pick = _flatRest(function(object, paths) {
 
 
 
-const model_Model = function Model(attributes, options) {
+const model_Model = function (attributes, options) {
   let attrs = attributes || {};
   options || (options = {});
   this.preinitialize.apply(this, arguments);
@@ -63424,72 +67320,72 @@ Object.assign(model_Model.prototype, Events, {
   cidPrefix: 'c',
   // preinitialize is an empty function by default. You can override it with a function
   // or object.  preinitialize will run before any instantiation logic is run in the Model.
-  preinitialize: function preinitialize() {},
+  preinitialize: function () {},
   // Initialize is an empty function by default. Override it with your own
   // initialization logic.
-  initialize: function initialize() {},
+  initialize: function () {},
   // Return a copy of the model's `attributes` object.
-  toJSON: function toJSON(options) {
+  toJSON: function (options) {
     return lodash_es_clone(this.attributes);
   },
   // Proxy `Backbone.sync` by default -- but override this if you need
   // custom syncing semantics for *this* particular model.
-  sync: function sync(method, model, options) {
+  sync: function (method, model, options) {
     return getSyncMethod(this)(method, model, options);
   },
   // Get the value of an attribute.
-  get: function get(attr) {
+  get: function (attr) {
     return this.attributes[attr];
   },
-  keys: function keys() {
+  keys: function () {
     return Object.keys(this.attributes);
   },
-  values: function values() {
+  values: function () {
     return Object.values(this.attributes);
   },
-  pairs: function pairs() {
+  pairs: function () {
     return this.entries();
   },
-  entries: function entries() {
+  entries: function () {
     return Object.entries(this.attributes);
   },
-  invert: function invert() {
+  invert: function () {
     return lodash_es_invert(this.attributes);
   },
-  pick: function pick(...args) {
+  pick: function (...args) {
     if (args.length === 1 && Array.isArray(args[0])) {
       args = args[0];
     }
 
     return lodash_es_pick(this.attributes, args);
   },
-  omit: function omit(...args) {
+  omit: function (...args) {
     if (args.length === 1 && Array.isArray(args[0])) {
       args = args[0];
     }
 
     return lodash_es_omit(this.attributes, args);
   },
-  isEmpty: function isEmpty() {
+  isEmpty: function () {
     return lodash_es_isEmpty(this.attributes);
   },
   // Get the HTML-escaped value of an attribute.
-  escape: function escape(attr) {
+  escape: function (attr) {
     return lodash_es_escape(this.get(attr));
   },
   // Returns `true` if the attribute contains a value that is not null
   // or undefined.
-  has: function has(attr) {
+  has: function (attr) {
     return this.get(attr) != null;
   },
   // Special-cased proxy to lodash's `matches` method.
-  matches: function matches(attrs) {
+  matches: function (attrs) {
     return !!lodash_es_iteratee(attrs, this)(this.attributes);
   },
   // Set a hash of model attributes on the object, firing `"change"`. This is
   // the core primitive operation of a model, updating the data and notifying
   // anyone who needs to know about the change in state. The heart of the beast.
-  set: function set(key, val, options) {
+  set: function (key, val, options) {
     if (key == null) return this; // Handle both `"key", value` and `{key: value}` -style arguments.
 
     let attrs;
@@ -63562,13 +67458,13 @@ Object.assign(model_Model.prototype, Events, {
   },
   // Remove an attribute from the model, firing `"change"`. `unset` is a noop
   // if the attribute doesn't exist.
-  unset: function unset(attr, options) {
+  unset: function (attr, options) {
     return this.set(attr, undefined, lodash_es_assignIn({}, options, {
       unset: true
     }));
   },
   // Clear all attributes on the model, firing `"change"`.
-  clear: function clear(options) {
+  clear: function (options) {
     const attrs = {};
 
     for (const key in this.attributes) attrs[key] = undefined;
@@ -63579,7 +67475,7 @@ Object.assign(model_Model.prototype, Events, {
   },
   // Determine if the model has changed since the last `"change"` event.
   // If you specify an attribute name, determine if that attribute has changed.
-  hasChanged: function hasChanged(attr) {
+  hasChanged: function (attr) {
     if (attr == null) return !lodash_es_isEmpty(this.changed);
     return lodash_es_has(this.changed, attr);
   },
@@ -63589,7 +67485,7 @@ Object.assign(model_Model.prototype, Events, {
   // persisted to the server. Unset attributes will be set to undefined.
   // You can also pass an attributes object to diff against the model,
   // determining if there *would be* a change.
-  changedAttributes: function changedAttributes(diff) {
+  changedAttributes: function (diff) {
     if (!diff) return this.hasChanged() ? lodash_es_clone(this.changed) : false;
     const old = this._changing ? this._previousAttributes : this.attributes;
     const changed = {};
@@ -63606,18 +67502,18 @@ Object.assign(model_Model.prototype, Events, {
   },
   // Get the previous value of an attribute, recorded at the time the last
   // `"change"` event was fired.
-  previous: function previous(attr) {
+  previous: function (attr) {
     if (attr == null || !this._previousAttributes) return null;
     return this._previousAttributes[attr];
   },
   // Get all of the attributes of the model at the time of the previous
   // `"change"` event.
-  previousAttributes: function previousAttributes() {
+  previousAttributes: function () {
     return lodash_es_clone(this._previousAttributes);
   },
   // Fetch the model from the server, merging the response with the model's
   // local attributes. Any changed attributes will trigger a "change" event.
-  fetch: function fetch(options) {
+  fetch: function (options) {
     options = lodash_es_assignIn({
       parse: true
     }, options);
@@ -63637,7 +67533,7 @@ Object.assign(model_Model.prototype, Events, {
   // Set a hash of model attributes, and sync the model to the server.
   // If the server returns an attributes hash that differs, the model's
   // state will be `set` again.
-  save: function save(key, val, options) {
+  save: function (key, val, options) {
     // Handle both `"key", value` and `{key: value}` -style arguments.
     let attrs;
 
@@ -63705,13 +67601,13 @@ Object.assign(model_Model.prototype, Events, {
   // Destroy this model on the server if it was already persisted.
   // Optimistically removes the model from its collection, if it has one.
   // If `wait: true` is passed, waits for the server to respond before removal.
-  destroy: function destroy(options) {
+  destroy: function (options) {
     options = options ? lodash_es_clone(options) : {};
     const model = this;
     const success = options.success;
     const wait = options.wait;
 
-    const destroy = function destroy() {
+    const destroy = function () {
       model.stopListening();
       model.trigger('destroy', model, model.collection, options);
     };
@@ -63737,7 +67633,7 @@ Object.assign(model_Model.prototype, Events, {
   // Default URL for the model's representation on the server -- if you're
   // using Backbone's restful methods, override this to change the endpoint
   // that will be called.
-  url: function url() {
+  url: function () {
     const base = lodash_es_result(this, 'urlRoot') || lodash_es_result(this.collection, 'url') || urlError();
     if (this.isNew()) return base;
     const id = this.get(this.idAttribute);
@@ -63745,26 +67641,26 @@ Object.assign(model_Model.prototype, Events, {
   },
   // **parse** converts a response into the hash of attributes to be `set` on
   // the model. The default implementation is just to pass the response along.
-  parse: function parse(resp, options) {
+  parse: function (resp, options) {
     return resp;
   },
   // Create a new model with identical attributes to this one.
-  clone: function clone() {
+  clone: function () {
     return new this.constructor(this.attributes);
   },
   // A model is new if it has never been saved to the server, and lacks an id.
-  isNew: function isNew() {
+  isNew: function () {
     return !this.has(this.idAttribute);
   },
   // Check if the model is currently in a valid state.
-  isValid: function isValid(options) {
+  isValid: function (options) {
     return this._validate({}, lodash_es_assignIn({}, options, {
       validate: true
     }));
   },
   // Run validation against the next complete set of model attributes,
   // returning `true` if all is well. Otherwise, fire an `"invalid"` event.
-  _validate: function _validate(attrs, options) {
+  _validate: function (attrs, options) {
     if (!options.validate || !this.validate) return true;
     attrs = lodash_es_assignIn({}, this.attributes, attrs);
     const error = this.validationError = this.validate(attrs, options) || null;
@@ -64235,11 +68131,13 @@ core_u.getCurrentWord = function (input, index, delineator) {
   return word;
 };
 
-core_u.replaceCurrentWord = function (input, new_value, mention_boundaries = []) {
-  const caret = input.selectionEnd || undefined,
-        current_word = lodash_es_last(input.value.slice(0, caret).split(/\s/)),
-        value = input.value,
-        mention_boundary = mention_boundaries.includes(current_word[0]) ? current_word[0] : '';
+core_u.isMentionBoundary = s => s !== '@' && RegExp("(\\p{Z}|\\p{P})", 'u').test(s);
+
+core_u.replaceCurrentWord = function (input, new_value) {
+  const caret = input.selectionEnd || undefined;
+  const current_word = lodash_es_last(input.value.slice(0, caret).split(/\s/));
+  const value = input.value;
+  const mention_boundary = core_u.isMentionBoundary(current_word[0]) ? current_word[0] : '';
   input.value = value.slice(0, caret - current_word.length) + mention_boundary + "".concat(new_value, " ") + value.slice(caret);
   const selection_end = caret - current_word.length + new_value.length + 1;
   input.selectionEnd = mention_boundary ? selection_end + 1 : selection_end;
@@ -64484,7 +68382,7 @@ function getEncryptionAttributes(stanza, _converse) {
     'is_encrypted': !!encrypted
   };
 
-  if (!encrypted || !_converse.config.get('trusted')) {
+  if (!encrypted || core_api.settings.get('clear_cache_on_logout')) {
     return attrs;
   }
 
@@ -64563,13 +68461,9 @@ function getStanzaIDs(stanza, original_stanza) {
   const result = sizzle_default()("message > result[xmlns=\"".concat(stanza_Strophe.NS.MAM, "\"]"), original_stanza).pop();
 
   if (result) {
-    const by_jid = original_stanza.getAttribute('from');
+    const by_jid = original_stanza.getAttribute('from') || core_converse.bare_jid;
 
-    if (by_jid) {
-      attrs["stanza_id ".concat(by_jid)] = result.getAttribute('id');
-    } else {
-      attrs["stanza_id"] = result.getAttribute('id');
-    }
+    attrs["stanza_id ".concat(by_jid)] = result.getAttribute('id');
   } // Store the origin id
 
 
@@ -64693,7 +68587,7 @@ function getReferences(stanza) {
 
 function rejectMessage(stanza, text) {
   // Reject an incoming message by replying with an error message of type "cancel".
-  converse_core_api.send($msg({
+  core_api.send($msg({
     'to': stanza.getAttribute('from'),
     'type': 'error',
     'id': stanza.getAttribute('id')
@@ -64828,7 +68722,7 @@ const st = {
     let to_jid = stanza.getAttribute('to');
     const to_resource = stanza_Strophe.getResourceFromJid(to_jid);
 
-    if (converse_core_api.settings.get('filter_by_resource') && to_resource && to_resource !== _converse.resource) {
+    if (core_api.settings.get('filter_by_resource') && to_resource && to_resource !== _converse.resource) {
       return new StanzaParseError("Ignoring incoming message intended for a different resource: ".concat(to_jid), stanza);
     }
 
@@ -64875,9 +68769,9 @@ const st = {
 
     if (!is_headline && !is_server_message) {
       contact_jid = is_me ? stanza_Strophe.getBareJidFromJid(to_jid) : from_bare_jid;
-      contact = await converse_core_api.contacts.get(contact_jid);
+      contact = await core_api.contacts.get(contact_jid);
 
-      if (contact === undefined && !converse_core_api.settings.get("allow_non_roster_messaging")) {
+      if (contact === undefined && !core_api.settings.get("allow_non_roster_messaging")) {
         headless_log.error(stanza);
         return new StanzaParseError("Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.", stanza);
       }
@@ -64897,9 +68791,10 @@ const st = {
      * @property { Boolean } is_markable - Can this message be marked with a XEP-0333 chat marker?
      * @property { Boolean } is_marker - Is this message a XEP-0333 Chat Marker?
      * @property { Boolean } is_only_emojis - Does the message body contain only emojis?
-     * @property { Boolean } is_valid_receipt_request - Does this message request a XEP-0184 receipt (and is not from us or a carbon or archived message)
      * @property { Boolean } is_spoiler - Is this a XEP-0382 spoiler message?
      * @property { Boolean } is_tombstone - Is this a XEP-0424 tombstone?
+     * @property { Boolean } is_unstyled - Whether XEP-0393 styling hints should be ignored
+     * @property { Boolean } is_valid_receipt_request - Does this message request a XEP-0184 receipt (and is not from us or a carbon or archived message)
      * @property { Object } encrypted -  XEP-0384 encryption payload attributes
      * @property { String } body - The contents of the <body> tag of the message stanza
      * @property { String } chat_state - The XEP-0085 chat state notification contained in this message
@@ -64947,6 +68842,7 @@ const st = {
       'is_delayed': !!delay,
       'is_markable': !!sizzle_default()("markable[xmlns=\"".concat(stanza_Strophe.NS.MARKERS, "\"]"), stanza).length,
       'is_marker': !!marker,
+      'is_unstyled': !!sizzle_default()("unstyled[xmlns=\"".concat(stanza_Strophe.NS.STYLING, "\"]"), stanza).length,
       'marker_id': marker && marker.getAttribute('id'),
       'msgid': stanza.getAttribute('id') || original_stanza.getAttribute('id'),
       'nick': (_contact = contact) === null || _contact === void 0 ? void 0 : (_contact$attributes = _contact.attributes) === null || _contact$attributes === void 0 ? void 0 : _contact$attributes.nickname,
@@ -64969,7 +68865,7 @@ const st = {
       }
     }
 
-    await converse_core_api.emojis.initialize();
+    await core_api.emojis.initialize();
     attrs = Object.assign({
       'message': attrs.body || attrs.error,
       // TODO: Remove and use body and error attributes instead
@@ -64984,7 +68880,7 @@ const st = {
      * @event _converse#parseMessage
      */
 
-    return converse_core_api.hook('parseMessage', stanza, attrs);
+    return core_api.hook('parseMessage', stanza, attrs);
   },
 
   /**
@@ -65034,9 +68930,10 @@ const st = {
      * @property { Boolean } is_markable - Can this message be marked with a XEP-0333 chat marker?
      * @property { Boolean } is_marker - Is this message a XEP-0333 Chat Marker?
      * @property { Boolean } is_only_emojis - Does the message body contain only emojis?
-     * @property { Boolean } is_valid_receipt_request - Does this message request a XEP-0184 receipt (and is not from us or a carbon or archived message)
      * @property { Boolean } is_spoiler - Is this a XEP-0382 spoiler message?
      * @property { Boolean } is_tombstone - Is this a XEP-0424 tombstone?
+     * @property { Boolean } is_unstyled - Whether XEP-0393 styling hints should be ignored
+     * @property { Boolean } is_valid_receipt_request - Does this message request a XEP-0184 receipt (and is not from us or a carbon or archived message)
      * @property { Object } encrypted -  XEP-0384 encryption payload attributes
      * @property { String } body - The contents of the <body> tag of the message stanza
      * @property { String } chat_state - The XEP-0085 chat state notification contained in this message
@@ -65088,6 +68985,7 @@ const st = {
       'is_headline': st.isHeadline(stanza),
       'is_markable': !!sizzle_default()("markable[xmlns=\"".concat(stanza_Strophe.NS.MARKERS, "\"]"), stanza).length,
       'is_marker': !!marker,
+      'is_unstyled': !!sizzle_default()("unstyled[xmlns=\"".concat(stanza_Strophe.NS.STYLING, "\"]"), stanza).length,
       'marker_id': marker && marker.getAttribute('id'),
       'msgid': stanza.getAttribute('id') || original_stanza.getAttribute('id'),
       'receipt_id': getReceiptId(stanza),
@@ -65099,7 +68997,7 @@ const st = {
       'to': stanza.getAttribute('to'),
       'type': stanza.getAttribute('type')
     }, getErrorAttributes(stanza), getOutOfBandAttributes(stanza), getSpoilerAttributes(stanza), getCorrectionAttributes(stanza, original_stanza), getStanzaIDs(stanza, original_stanza), getRetractionAttributes(stanza, original_stanza), getModerationAttributes(stanza), getEncryptionAttributes(stanza, _converse));
-    await converse_core_api.emojis.initialize();
+    await core_api.emojis.initialize();
     attrs = Object.assign({
       'is_only_emojis': attrs.body ? utils_core.isOnlyEmojis(attrs.body) : false,
       'is_valid_receipt_request': isValidReceiptRequest(stanza, attrs),
@@ -65123,7 +69021,7 @@ const st = {
      * @event _converse#parseMUCMessage
      */
 
-    return converse_core_api.hook('parseMUCMessage', stanza, attrs);
+    return core_api.hook('parseMUCMessage', stanza, attrs);
   },
 
   /**
@@ -65329,7 +69227,7 @@ var countBy_hasOwnProperty = countBy_objectProto.hasOwnProperty;
  * _.countBy(['one', 'two', 'three'], 'length');
  * // => { '3': 2, '5': 1 }
  */
-var countBy_countBy = _createAggregator(function(result, value, key) {
+var countBy = _createAggregator(function(result, value, key) {
   if (countBy_hasOwnProperty.call(result, key)) {
     ++result[key];
   } else {
@@ -65337,7 +69235,7 @@ var countBy_countBy = _createAggregator(function(result, value, key) {
   }
 });
 
-/* harmony default export */ var lodash_es_countBy = (countBy_countBy);
+/* harmony default export */ var lodash_es_countBy = (countBy);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_baseFindIndex.js
 /**
@@ -65600,13 +69498,13 @@ function isArrayLikeObject(value) {
  * _.difference([2, 1], [2, 3]);
  * // => [1]
  */
-var difference_difference = _baseRest(function(array, values) {
+var difference = _baseRest(function(array, values) {
   return lodash_es_isArrayLikeObject(array)
     ? _baseDifference(array, _baseFlatten(values, 1, lodash_es_isArrayLikeObject, true))
     : [];
 });
 
-/* harmony default export */ var lodash_es_difference = (difference_difference);
+/* harmony default export */ var lodash_es_difference = (difference);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_arrayEvery.js
 /**
@@ -65704,7 +69602,7 @@ function baseEvery(collection, predicate) {
  * _.every(users, 'active');
  * // => false
  */
-function every_every(collection, predicate, guard) {
+function every(collection, predicate, guard) {
   var func = lodash_es_isArray(collection) ? _arrayEvery : _baseEvery;
   if (guard && _isIterateeCall(collection, predicate, guard)) {
     predicate = undefined;
@@ -65712,7 +69610,7 @@ function every_every(collection, predicate, guard) {
   return func(collection, _baseIteratee(predicate, 3));
 }
 
-/* harmony default export */ var lodash_es_every = (every_every);
+/* harmony default export */ var lodash_es_every = (every);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js
 
@@ -65757,7 +69655,7 @@ var findIndex_nativeMax = Math.max;
  * _.findIndex(users, 'active');
  * // => 2
  */
-function findIndex_findIndex(array, predicate, fromIndex) {
+function findIndex(array, predicate, fromIndex) {
   var length = array == null ? 0 : array.length;
   if (!length) {
     return -1;
@@ -65769,7 +69667,7 @@ function findIndex_findIndex(array, predicate, fromIndex) {
   return _baseFindIndex(array, _baseIteratee(predicate, 3), index);
 }
 
-/* harmony default export */ var lodash_es_findIndex = (findIndex_findIndex);
+/* harmony default export */ var lodash_es_findIndex = (findIndex);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/findLastIndex.js
 
@@ -65815,7 +69713,7 @@ var findLastIndex_nativeMax = Math.max,
  * _.findLastIndex(users, 'active');
  * // => 0
  */
-function findLastIndex_findLastIndex(array, predicate, fromIndex) {
+function findLastIndex(array, predicate, fromIndex) {
   var length = array == null ? 0 : array.length;
   if (!length) {
     return -1;
@@ -65830,7 +69728,7 @@ function findLastIndex_findLastIndex(array, predicate, fromIndex) {
   return _baseFindIndex(array, _baseIteratee(predicate, 3), index, true);
 }
 
-/* harmony default export */ var lodash_es_findLastIndex = (findLastIndex_findLastIndex);
+/* harmony default export */ var lodash_es_findLastIndex = (findLastIndex);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/groupBy.js
 
@@ -65865,7 +69763,7 @@ var groupBy_hasOwnProperty = groupBy_objectProto.hasOwnProperty;
  * _.groupBy(['one', 'two', 'three'], 'length');
  * // => { '3': ['one', 'two'], '5': ['three'] }
  */
-var groupBy_groupBy = _createAggregator(function(result, value, key) {
+var groupBy = _createAggregator(function(result, value, key) {
   if (groupBy_hasOwnProperty.call(result, key)) {
     result[key].push(value);
   } else {
@@ -65873,7 +69771,7 @@ var groupBy_groupBy = _createAggregator(function(result, value, key) {
   }
 });
 
-/* harmony default export */ var lodash_es_groupBy = (groupBy_groupBy);
+/* harmony default export */ var lodash_es_groupBy = (groupBy);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/indexOf.js
 
@@ -65905,7 +69803,7 @@ var indexOf_nativeMax = Math.max;
  * _.indexOf([1, 2, 1, 2], 2, 2);
  * // => 3
  */
-function indexOf_indexOf(array, value, fromIndex) {
+function indexOf(array, value, fromIndex) {
   var length = array == null ? 0 : array.length;
   if (!length) {
     return -1;
@@ -65917,7 +69815,7 @@ function indexOf_indexOf(array, value, fromIndex) {
   return _baseIndexOf(array, value, index);
 }
 
-/* harmony default export */ var lodash_es_indexOf = (indexOf_indexOf);
+/* harmony default export */ var lodash_es_indexOf = (indexOf);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/keyBy.js
 
@@ -65951,11 +69849,11 @@ function indexOf_indexOf(array, value, fromIndex) {
  * _.keyBy(array, 'dir');
  * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
  */
-var keyBy_keyBy = _createAggregator(function(result, value, key) {
+var keyBy = _createAggregator(function(result, value, key) {
   _baseAssignValue(result, key, value);
 });
 
-/* harmony default export */ var lodash_es_keyBy = (keyBy_keyBy);
+/* harmony default export */ var lodash_es_keyBy = (keyBy);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_strictLastIndexOf.js
 /**
@@ -66011,7 +69909,7 @@ var lastIndexOf_nativeMax = Math.max,
  * _.lastIndexOf([1, 2, 1, 2], 2, 2);
  * // => 1
  */
-function lastIndexOf_lastIndexOf(array, value, fromIndex) {
+function lastIndexOf(array, value, fromIndex) {
   var length = array == null ? 0 : array.length;
   if (!length) {
     return -1;
@@ -66026,7 +69924,7 @@ function lastIndexOf_lastIndexOf(array, value, fromIndex) {
     : _baseFindIndex(array, _baseIsNaN, index, true);
 }
 
-/* harmony default export */ var lodash_es_lastIndexOf = (lastIndexOf_lastIndexOf);
+/* harmony default export */ var lodash_es_lastIndexOf = (lastIndexOf);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_baseSome.js
 
@@ -66095,7 +69993,7 @@ function baseSome(collection, predicate) {
  * _.some(users, 'active');
  * // => true
  */
-function some_some(collection, predicate, guard) {
+function some(collection, predicate, guard) {
   var func = lodash_es_isArray(collection) ? _arraySome : _baseSome;
   if (guard && _isIterateeCall(collection, predicate, guard)) {
     predicate = undefined;
@@ -66103,7 +70001,7 @@ function some_some(collection, predicate, guard) {
   return func(collection, _baseIteratee(predicate, 3));
 }
 
-/* harmony default export */ var lodash_es_some = (some_some);
+/* harmony default export */ var lodash_es_some = (some);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_baseMap.js
 
@@ -66312,7 +70210,7 @@ function baseOrderBy(collection, iteratees, orders) {
  * _.sortBy(users, ['user', 'age']);
  * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
  */
-var sortBy_sortBy = _baseRest(function(collection, iteratees) {
+var sortBy = _baseRest(function(collection, iteratees) {
   if (collection == null) {
     return [];
   }
@@ -66325,7 +70223,7 @@ var sortBy_sortBy = _baseRest(function(collection, iteratees) {
   return _baseOrderBy(collection, _baseFlatten(iteratees, 1), []);
 });
 
-/* harmony default export */ var lodash_es_sortBy = (sortBy_sortBy);
+/* harmony default export */ var lodash_es_sortBy = (sortBy);
 
 // CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/collection.js
 //     Backbone.js 1.4.0
@@ -66358,11 +70256,11 @@ var sortBy_sortBy = _baseRest(function(collection, iteratees) {
 
 
 
-const _slice = Array.prototype.slice; // Create a new **Collection**, perhaps to contain a specific type of `model`.
+const slice = Array.prototype.slice; // Create a new **Collection**, perhaps to contain a specific type of `model`.
 // If a `comparator` is specified, the Collection will maintain
 // its models in sort order, as they're added and removed.
 
-const collection_Collection = function Collection(models, options) {
+const Collection = function (models, options) {
   options || (options = {});
   this.preinitialize.apply(this, arguments);
   if (options.model) this.model = options.model;
@@ -66375,7 +70273,7 @@ const collection_Collection = function Collection(models, options) {
     silent: true
   }, options));
 };
-collection_Collection.extend = inherits; // Default options for `Collection#set`.
+Collection.extend = inherits; // Default options for `Collection#set`.
 
 const setOptions = {
   add: true,
@@ -66387,7 +70285,7 @@ const addOptions = {
   remove: false
 }; // Splices `insert` into `array` at index `at`.
 
-const collection_splice = function splice(array, insert, at) {
+const collection_splice = function (array, insert, at) {
   at = Math.min(Math.max(at, 0), array.length);
   const tail = Array(array.length - at);
   const length = insert.length;
@@ -66401,37 +70299,37 @@ const collection_splice = function splice(array, insert, at) {
 }; // Define the Collection's inheritable methods.
 
 
-Object.assign(collection_Collection.prototype, Events, {
+Object.assign(Collection.prototype, Events, {
   // The default model for a collection is just a **Backbone.Model**.
   // This should be overridden in most cases.
   model: model_Model,
   // preinitialize is an empty function by default. You can override it with a function
   // or object.  preinitialize will run before any instantiation logic is run in the Collection.
-  preinitialize: function preinitialize() {},
+  preinitialize: function () {},
   // Initialize is an empty function by default. Override it with your own
   // initialization logic.
-  initialize: function initialize() {},
+  initialize: function () {},
   // The JSON representation of a Collection is an array of the
   // models' attributes.
-  toJSON: function toJSON(options) {
+  toJSON: function (options) {
     return this.map(function (model) {
       return model.toJSON(options);
     });
   },
   // Proxy `Backbone.sync` by default.
-  sync: function sync(method, model, options) {
+  sync: function (method, model, options) {
     return getSyncMethod(this)(method, model, options);
   },
   // Add a model, or list of models to the set. `models` may be Backbone
   // Models or raw JavaScript objects to be converted to Models, or any
   // combination of the two.
-  add: function add(models, options) {
+  add: function (models, options) {
     return this.set(models, lodash_es_assignIn({
       merge: false
     }, options, addOptions));
   },
   // Remove a model, or a list of models from the set.
-  remove: function remove(models, options) {
+  remove: function (models, options) {
     options = lodash_es_assignIn({}, options);
     const singular = !Array.isArray(models);
     models = singular ? [models] : models.slice();
@@ -66453,7 +70351,7 @@ Object.assign(collection_Collection.prototype, Events, {
   // removing models that are no longer present, and merging models that
   // already exist in the collection, as necessary. Similar to **Model#set**,
   // the core operation for updating the data contained by the collection.
-  set: function set(models, options) {
+  set: function (models, options) {
     if (models == null) return;
     options = lodash_es_assignIn({}, setOptions, options);
 
@@ -66569,8 +70467,8 @@ Object.assign(collection_Collection.prototype, Events, {
 
     return singular ? models[0] : models;
   },
-  clearStore: async function clearStore(options = {}) {
-    await Promise.all(Array.from(this.models).map(m => {
+  clearStore: async function (options = {}, filter = o => o) {
+    await Promise.all(this.models.filter(filter).map(m => {
       return new Promise(resolve => {
         m.destroy(Object.assign(options, {
           'success': resolve,
@@ -66588,7 +70486,7 @@ Object.assign(collection_Collection.prototype, Events, {
   // you can reset the entire set with a new list of models, without firing
   // any granular `add` or `remove` events. Fires `reset` when finished.
   // Useful for bulk operations and optimizations.
-  reset: function reset(models, options) {
+  reset: function (models, options) {
     options = options ? lodash_es_clone(options) : {};
 
     for (let i = 0; i < this.models.length; i++) {
@@ -66606,146 +70504,146 @@ Object.assign(collection_Collection.prototype, Events, {
     return models;
   },
   // Add a model to the end of the collection.
-  push: function push(model, options) {
+  push: function (model, options) {
     return this.add(model, lodash_es_assignIn({
       at: this.length
     }, options));
   },
   // Remove a model from the end of the collection.
-  pop: function pop(options) {
+  pop: function (options) {
     const model = this.at(this.length - 1);
     return this.remove(model, options);
   },
   // Add a model to the beginning of the collection.
-  unshift: function unshift(model, options) {
+  unshift: function (model, options) {
     return this.add(model, lodash_es_assignIn({
       at: 0
     }, options));
   },
   // Remove a model from the beginning of the collection.
-  shift: function shift(options) {
+  shift: function (options) {
     const model = this.at(0);
     return this.remove(model, options);
   },
   // Slice out a sub-array of models from the collection.
-  slice: function slice() {
-    return _slice.apply(this.models, arguments);
+  slice: function () {
+    return slice.apply(this.models, arguments);
   },
-  filter: function filter(callback, thisArg) {
+  filter: function (callback, thisArg) {
     return this.models.filter(lodash_es_isFunction(callback) ? callback : m => m.matches(callback), thisArg);
   },
-  every: function every(pred) {
+  every: function (pred) {
     return lodash_es_every(this.models.map(m => m.attributes), pred);
   },
-  difference: function difference(values) {
+  difference: function (values) {
     return lodash_es_difference(this.models, values);
   },
-  max: function max() {
+  max: function () {
     return Math.max.apply(Math, this.models);
   },
-  min: function min() {
+  min: function () {
     return Math.min.apply(Math, this.models);
   },
-  drop: function drop(n = 1) {
+  drop: function (n = 1) {
     return this.models.slice(n);
   },
-  some: function some(pred) {
+  some: function (pred) {
     return lodash_es_some(this.models.map(m => m.attributes), pred);
   },
-  sortBy: function sortBy(iteratee) {
+  sortBy: function (iteratee) {
     return lodash_es_sortBy(this.models, lodash_es_isFunction(iteratee) ? iteratee : m => lodash_es_isString(iteratee) ? m.get(iteratee) : m.matches(iteratee));
   },
-  isEmpty: function isEmpty() {
+  isEmpty: function () {
     return lodash_es_isEmpty(this.models);
   },
-  keyBy: function keyBy(iteratee) {
+  keyBy: function (iteratee) {
     return lodash_es_keyBy(this.models, iteratee);
   },
-  each: function each(callback, thisArg) {
+  each: function (callback, thisArg) {
     return this.forEach(callback, thisArg);
   },
-  forEach: function forEach(callback, thisArg) {
+  forEach: function (callback, thisArg) {
     return this.models.forEach(callback, thisArg);
   },
-  includes: function includes(item) {
+  includes: function (item) {
     return this.models.includes(item);
   },
-  size: function size() {
+  size: function () {
     return this.models.length;
   },
-  countBy: function countBy(f) {
+  countBy: function (f) {
     return lodash_es_countBy(this.models, lodash_es_isFunction(f) ? f : m => lodash_es_isString(f) ? m.get(f) : m.matches(f));
   },
-  groupBy: function groupBy(pred) {
+  groupBy: function (pred) {
     return lodash_es_groupBy(this.models, lodash_es_isFunction(pred) ? pred : m => lodash_es_isString(pred) ? m.get(pred) : m.matches(pred));
   },
-  indexOf: function indexOf(fromIndex) {
+  indexOf: function (fromIndex) {
     return lodash_es_indexOf(this.models, fromIndex);
   },
-  findLastIndex: function findLastIndex(pred, fromIndex) {
+  findLastIndex: function (pred, fromIndex) {
     return lodash_es_findLastIndex(this.models, lodash_es_isFunction(pred) ? pred : m => lodash_es_isString(pred) ? m.get(pred) : m.matches(pred), fromIndex);
   },
-  lastIndexOf: function lastIndexOf(fromIndex) {
+  lastIndexOf: function (fromIndex) {
     return lodash_es_lastIndexOf(this.models, fromIndex);
   },
-  findIndex: function findIndex(pred) {
+  findIndex: function (pred) {
     return lodash_es_findIndex(this.models, lodash_es_isFunction(pred) ? pred : m => lodash_es_isString(pred) ? m.get(pred) : m.matches(pred));
   },
-  last: function last() {
+  last: function () {
     const length = this.models == null ? 0 : this.models.length;
     return length ? this.models[length - 1] : undefined;
   },
-  head: function head() {
+  head: function () {
     return this.models[0];
   },
-  first: function first() {
+  first: function () {
     return this.head();
   },
-  map: function map(cb, thisArg) {
+  map: function (cb, thisArg) {
     return this.models.map(lodash_es_isFunction(cb) ? cb : m => lodash_es_isString(cb) ? m.get(cb) : m.matches(cb), thisArg);
   },
-  reduce: function reduce(callback, initialValue) {
+  reduce: function (callback, initialValue) {
     return this.models.reduce(callback, initialValue || this.models[0]);
   },
-  reduceRight: function reduceRight(callback, initialValue) {
+  reduceRight: function (callback, initialValue) {
     return this.models.reduceRight(callback, initialValue || this.models[0]);
   },
-  toArray: function toArray() {
+  toArray: function () {
     return Array.from(this.models);
   },
   // Get a model from the set by id, cid, model object with id or cid
   // properties, or an attributes object that is transformed through modelId.
-  get: function get(obj) {
+  get: function (obj) {
     if (obj == null) return undefined;
     return this._byId[obj] || this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] || obj.cid && this._byId[obj.cid];
   },
   // Returns `true` if the model is in the collection.
-  has: function has(obj) {
+  has: function (obj) {
     return this.get(obj) != null;
   },
   // Get the model at the given index.
-  at: function at(index) {
+  at: function (index) {
     if (index < 0) index += this.length;
     return this.models[index];
   },
   // Return models with matching attributes. Useful for simple cases of
   // `filter`.
-  where: function where(attrs, first) {
+  where: function (attrs, first) {
     return this[first ? 'find' : 'filter'](attrs);
   },
   // Return the first model with matching attributes. Useful for simple cases
   // of `find`.
-  findWhere: function findWhere(attrs) {
+  findWhere: function (attrs) {
     return this.where(attrs, true);
   },
-  find: function find(predicate, fromIndex) {
+  find: function (predicate, fromIndex) {
     const pred = lodash_es_isFunction(predicate) ? predicate : m => m.matches(predicate);
     return this.models.find(pred, fromIndex);
   },
   // Force the collection to re-sort itself. You don't need to call this under
   // normal circumstances, as the set will maintain sort order as each item
   // is added.
-  sort: function sort(options) {
+  sort: function (options) {
     let comparator = this.comparator;
     if (!comparator) throw new Error('Cannot sort a set without a comparator');
     options || (options = {});
@@ -66762,13 +70660,13 @@ Object.assign(collection_Collection.prototype, Events, {
     return this;
   },
   // Pluck an attribute from each model in the collection.
-  pluck: function pluck(attr) {
+  pluck: function (attr) {
     return this.map(attr + '');
   },
   // Fetch the default set of models for this collection, resetting the
   // collection when they arrive. If `reset: true` is passed, the response
   // data will be passed through the `reset` method instead of `set`.
-  fetch: function fetch(options) {
+  fetch: function (options) {
     options = lodash_es_assignIn({
       parse: true
     }, options);
@@ -66790,7 +70688,7 @@ Object.assign(collection_Collection.prototype, Events, {
   // Create a new instance of a model in this collection. Add the model to the
   // collection immediately, unless `wait: true` is passed, in which case we
   // wait for the server to agree.
-  create: function create(model, options) {
+  create: function (model, options) {
     options = options ? lodash_es_clone(options) : {};
     const wait = options.wait;
     const return_promise = options.promise;
@@ -66833,42 +70731,42 @@ Object.assign(collection_Collection.prototype, Events, {
   },
   // **parse** converts a response into a list of models to be added to the
   // collection. The default implementation is just to pass it through.
-  parse: function parse(resp, options) {
+  parse: function (resp, options) {
     return resp;
   },
   // Create a new collection with an identical list of models as this one.
-  clone: function clone() {
+  clone: function () {
     return new this.constructor(this.models, {
       model: this.model,
       comparator: this.comparator
     });
   },
   // Define how to uniquely identify models in the collection.
-  modelId: function modelId(attrs) {
+  modelId: function (attrs) {
     return attrs[this.model.prototype.idAttribute || 'id'];
   },
   // Get an iterator of all models in this collection.
-  values: function values() {
+  values: function () {
     return new CollectionIterator(this, ITERATOR_VALUES);
   },
   // Get an iterator of all model IDs in this collection.
-  keys: function keys() {
+  keys: function () {
     return new CollectionIterator(this, ITERATOR_KEYS);
   },
   // Get an iterator of all [ID, model] tuples in this collection.
-  entries: function entries() {
+  entries: function () {
     return new CollectionIterator(this, ITERATOR_KEYSVALUES);
   },
   // Private method to reset all internal state. Called when the collection
   // is first initialized or reset.
-  _reset: function _reset() {
+  _reset: function () {
     this.length = 0;
     this.models = [];
     this._byId = {};
   },
   // Prepare a hash of attributes (or other model) to be added to this
   // collection.
-  _prepareModel: function _prepareModel(attrs, options) {
+  _prepareModel: function (attrs, options) {
     if (this._isModel(attrs)) {
       if (!attrs.collection) attrs.collection = this;
       return attrs;
@@ -66882,7 +70780,7 @@ Object.assign(collection_Collection.prototype, Events, {
     return false;
   },
   // Internal method called by both remove and set.
-  _removeModels: function _removeModels(models, options) {
+  _removeModels: function (models, options) {
     const removed = [];
 
     for (let i = 0; i < models.length; i++) {
@@ -66911,18 +70809,18 @@ Object.assign(collection_Collection.prototype, Events, {
   },
   // Method for checking whether an object should be considered a model for
   // the purposes of adding to the collection.
-  _isModel: function _isModel(model) {
+  _isModel: function (model) {
     return model instanceof model_Model;
   },
   // Internal method to create a model's ties to a collection.
-  _addReference: function _addReference(model, options) {
+  _addReference: function (model, options) {
     this._byId[model.cid] = model;
     const id = this.modelId(model.attributes);
     if (id != null) this._byId[id] = model;
     model.on('all', this._onModelEvent, this);
   },
   // Internal method to sever a model's ties to a collection.
-  _removeReference: function _removeReference(model, options) {
+  _removeReference: function (model, options) {
     delete this._byId[model.cid];
     const id = this.modelId(model.attributes);
     if (id != null) delete this._byId[id];
@@ -66933,7 +70831,7 @@ Object.assign(collection_Collection.prototype, Events, {
   // Sets need to update their indexes when models change ids. All other
   // events simply proxy through. "add" and "remove" events that originate
   // in other collections are ignored.
-  _onModelEvent: function _onModelEvent(event, model, collection, options) {
+  _onModelEvent: function (event, model, collection, options) {
     if (model) {
       if ((event === 'add' || event === 'remove') && collection !== this) return;
       if (event === 'destroy') this.remove(model, options);
@@ -66959,7 +70857,7 @@ Object.assign(collection_Collection.prototype, Events, {
 const $$iterator = typeof Symbol === 'function' && Symbol.iterator;
 
 if ($$iterator) {
-  collection_Collection.prototype[$$iterator] = collection_Collection.prototype.values;
+  Collection.prototype[$$iterator] = Collection.prototype.values;
 } // CollectionIterator
 // ------------------
 // A CollectionIterator implements JavaScript's Iterator protocol, allowing the
@@ -66968,7 +70866,7 @@ if ($$iterator) {
 // which can operate on Iterables.
 
 
-const CollectionIterator = function CollectionIterator(collection, kind) {
+const CollectionIterator = function (collection, kind) {
   this._collection = collection;
   this._kind = kind;
   this._index = 0;
@@ -67027,9 +70925,9 @@ CollectionIterator.prototype.next = function () {
   };
 };
 // EXTERNAL MODULE: ./node_modules/lodash/lodash.js
-var lodash = __webpack_require__(33);
+var lodash = __webpack_require__(43);
 
-// CONCATENATED MODULE: ./src/headless/connection.js
+// CONCATENATED MODULE: ./src/headless/shared/connection.js
 
 
 
@@ -67059,7 +70957,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
      * JID resource for this session.
      * @event _converse#beforeResourceBinding
      */
-    await converse_core_api.trigger('beforeResourceBinding', {
+    await core_api.trigger('beforeResourceBinding', {
       'synchronous': true
     });
     super.bind();
@@ -67082,9 +70980,10 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
       headless_log.warn("Neither BOSH nor WebSocket connection methods have been specified with XEP-0156.");
     } else {
       // TODO: support multiple endpoints
-      converse_core_api.settings.set("websocket_url", ws_methods.pop());
-      converse_core_api.settings.set('bosh_service_url', bosh_methods.pop());
-      this.service = converse_core_api.settings.get("websocket_url") || converse_core_api.settings.get('bosh_service_url');
+      core_api.settings.set("websocket_url", ws_methods.pop());
+      core_api.settings.set('bosh_service_url', bosh_methods.pop());
+      this.service = core_api.settings.get("websocket_url") || core_api.settings.get('bosh_service_url');
+      this.setProtocol();
     }
   }
   /**
@@ -67132,7 +71031,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
 
 
   async connect(jid, password, callback) {
-    if (converse_core_api.settings.get("discover_connection_methods")) {
+    if (core_api.settings.get("discover_connection_methods")) {
       const domain = core["e" /* Strophe */].getDomainFromJid(jid);
       await this.discoverConnectionMethods(domain);
     }
@@ -67143,7 +71042,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
   async reconnect() {
     const {
       __
-    } = converse_core_converse;
+    } = core_converse;
     headless_log.debug('RECONNECTING: the connection has dropped, attempting to reconnect.');
     this.setConnectionStatus(core["e" /* Strophe */].Status.RECONNECTING, __('The connection has dropped, attempting to reconnect.'));
     /**
@@ -67153,10 +71052,10 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
     * @event _converse#will-reconnect
     */
 
-    converse_core_api.trigger('will-reconnect');
+    core_api.trigger('will-reconnect');
     this.reconnecting = true;
     await tearDown();
-    return converse_core_api.user.login();
+    return core_api.user.login();
   }
   /**
    * Called as soon as a new connection has been established, either
@@ -67170,14 +71069,14 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
     delete this.reconnecting;
     this.flush(); // Solves problem of returned PubSub BOSH response not received by browser
 
-    await converse_core_converse.setUserJID(this.jid);
+    await core_converse.setUserJID(this.jid);
     /**
      * Synchronous event triggered after we've sent an IQ to bind the
      * user's JID resource for this session.
      * @event _converse#afterResourceBinding
      */
 
-    await converse_core_api.trigger('afterResourceBinding', reconnecting, {
+    await core_api.trigger('afterResourceBinding', reconnecting, {
       'synchronous': true
     });
 
@@ -67189,14 +71088,14 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
        * @event _converse#reconnected
        * @example _converse.api.listen.on('reconnected', () => { ... });
        */
-      converse_core_api.trigger('reconnected');
+      core_api.trigger('reconnected');
     } else {
       /**
        * Triggered after the connection has been established and Converse
        * has got all its ducks in a row.
        * @event _converse#initialized
        */
-      converse_core_api.trigger('connected');
+      core_api.trigger('connected');
     }
   }
   /**
@@ -67224,7 +71123,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
   setConnectionStatus(status, message) {
     this.status = status;
 
-    converse_core_converse.connfeedback.set({
+    core_converse.connfeedback.set({
       'connection_status': status,
       message
     });
@@ -67237,7 +71136,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
     this.reset();
     tearDown();
     await clearSession();
-    delete converse_core_converse.connection;
+    delete core_converse.connection;
     /**
     * Triggered after converse.js has disconnected from the XMPP server.
     * @event _converse#disconnected
@@ -67245,7 +71144,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
     * @example _converse.api.listen.on('disconnected', () => { ... });
     */
 
-    converse_core_api.trigger('disconnected');
+    core_api.trigger('disconnected');
   }
   /**
    * Gets called once strophe's status reaches Strophe.Status.DISCONNECTED.
@@ -67256,26 +71155,26 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
 
 
   onDisconnected() {
-    if (converse_core_api.settings.get("auto_reconnect")) {
+    if (core_api.settings.get("auto_reconnect")) {
       const reason = this.disconnection_reason;
 
       if (this.disconnection_cause === core["e" /* Strophe */].Status.AUTHFAIL) {
-        if (converse_core_api.settings.get("credentials_url") || converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+        if (core_api.settings.get("credentials_url") || core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
           // If `credentials_url` is set, we reconnect, because we might
           // be receiving expirable tokens from the credentials_url.
           //
           // If `authentication` is anonymous, we reconnect because we
           // might have tried to attach with stale BOSH session tokens
           // or with a cached JID and password
-          return converse_core_api.connection.reconnect();
+          return core_api.connection.reconnect();
         } else {
           return this.finishDisconnection();
         }
-      } else if (this.disconnection_cause === converse_core_converse.LOGOUT || reason === core["e" /* Strophe */].ErrorCondition.NO_AUTH_MECH || reason === "host-unknown" || reason === "remote-connection-failed") {
+      } else if (this.disconnection_cause === core_converse.LOGOUT || reason === core["e" /* Strophe */].ErrorCondition.NO_AUTH_MECH || reason === "host-unknown" || reason === "remote-connection-failed") {
         return this.finishDisconnection();
       }
 
-      converse_core_api.connection.reconnect();
+      core_api.connection.reconnect();
     } else {
       return this.finishDisconnection();
     }
@@ -67292,8 +71191,8 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
   onConnectStatusChanged(status, message) {
     const {
       __
-    } = converse_core_converse;
-    headless_log.debug("Status changed to: ".concat(converse_core_converse.CONNECTION_STATUS[status]));
+    } = core_converse;
+    headless_log.debug("Status changed to: ".concat(core_converse.CONNECTION_STATUS[status]));
 
     if (status === core["e" /* Strophe */].Status.ATTACHFAIL) {
       var _this$worker_attach_p;
@@ -67311,7 +71210,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
       this.setConnectionStatus(status);
       (_this$worker_attach_p3 = this.worker_attach_promise) === null || _this$worker_attach_p3 === void 0 ? void 0 : _this$worker_attach_p3.resolve(true); // By default we always want to send out an initial presence stanza.
 
-      converse_core_converse.send_initial_presence = true;
+      core_converse.send_initial_presence = true;
       this.setDisconnectionCause();
 
       if (this.reconnecting) {
@@ -67323,7 +71222,7 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
         if (this.restored) {
           // No need to send an initial presence stanza when
           // we're restoring an existing session.
-          converse_core_converse.send_initial_presence = false;
+          core_converse.send_initial_presence = false;
         }
 
         this.onConnected();
@@ -67376,8 +71275,8 @@ class connection_Connection extends core["e" /* Strophe */].Connection {
   hasResumed() {
     var _api$settings$get;
 
-    if (((_api$settings$get = converse_core_api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) || this.isType('bosh')) {
-      return converse_core_converse.connfeedback.get('connection_status') === core["e" /* Strophe */].Status.ATTACHED;
+    if (((_api$settings$get = core_api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) || this.isType('bosh')) {
+      return core_converse.connfeedback.get('connection_status') === core["e" /* Strophe */].Status.ATTACHED;
     } else {
       // Not binding means that the session was resumed.
       return !this.do_bind;
@@ -67445,12 +71344,12 @@ class connection_MockConnection extends connection_Connection {
   }
 
   async bind() {
-    await converse_core_api.trigger('beforeResourceBinding', {
+    await core_api.trigger('beforeResourceBinding', {
       'synchronous': true
     });
     this.authenticated = true;
 
-    if (!converse_core_converse.no_connection_on_bind) {
+    if (!core_converse.no_connection_on_bind) {
       this._changeConnectStatus(core["e" /* Strophe */].Status.CONNECTED);
     }
   }
@@ -70465,7 +74364,7 @@ class element_CustomElement extends lit_element_LitElement {
 // and URL fragments. If the browser supports neither (old IE, natch),
 // falls back to polling.
 
-const history_History = function History() {
+const history_History = function () {
   this.handlers = [];
   this.checkUrl = this.checkUrl.bind(this); // Ensure that `History` can be used outside of the browser.
 
@@ -70490,12 +74389,12 @@ Object.assign(history_History.prototype, Events, {
   // twenty times a second.
   interval: 50,
   // Are we at the app root?
-  atRoot: function atRoot() {
+  atRoot: function () {
     const path = this.location.pathname.replace(/[^\/]$/, '$&/');
     return path === this.root && !this.getSearch();
   },
   // Does the pathname match the root?
-  matchRoot: function matchRoot() {
+  matchRoot: function () {
     const path = this.decodeFragment(this.location.pathname);
     const rootPath = path.slice(0, this.root.length - 1) + '/';
     return rootPath === this.root;
@@ -70503,28 +74402,28 @@ Object.assign(history_History.prototype, Events, {
   // Unicode characters in `location.pathname` are percent encoded so they're
   // decoded for comparison. `%25` should not be decoded since it may be part
   // of an encoded parameter.
-  decodeFragment: function decodeFragment(fragment) {
+  decodeFragment: function (fragment) {
     return decodeURI(fragment.replace(/%25/g, '%2525'));
   },
   // In IE6, the hash fragment and search params are incorrect if the
   // fragment contains `?`.
-  getSearch: function getSearch() {
+  getSearch: function () {
     const match = this.location.href.replace(/#.*/, '').match(/\?.+/);
     return match ? match[0] : '';
   },
   // Gets the true hash value. Cannot use location.hash directly due to bug
   // in Firefox where location.hash will always be decoded.
-  getHash: function getHash(window) {
+  getHash: function (window) {
     const match = (window || this).location.href.match(/#(.*)$/);
     return match ? match[1] : '';
   },
   // Get the pathname and search params, without the root.
-  getPath: function getPath() {
+  getPath: function () {
     const path = this.decodeFragment(this.location.pathname + this.getSearch()).slice(this.root.length - 1);
     return path.charAt(0) === '/' ? path.slice(1) : path;
   },
   // Get the cross-browser normalized URL fragment from the path or hash.
-  getFragment: function getFragment(fragment) {
+  getFragment: function (fragment) {
     if (fragment == null) {
       if (this._usePushState || !this._wantsHashChange) {
         fragment = this.getPath();
@@ -70537,7 +74436,7 @@ Object.assign(history_History.prototype, Events, {
   },
   // Start the hash change handling, returning `true` if the current URL matches
   // an existing route, and `false` otherwise.
-  start: function start(options) {
+  start: function (options) {
     if (history_History.started) throw new Error('history has already been started');
     history_History.started = true; // Figure out the initial configuration. Do we need an iframe?
     // Is pushState desired ... is it available?
@@ -70603,7 +74502,7 @@ Object.assign(history_History.prototype, Events, {
   },
   // Disable history, perhaps temporarily. Not useful in a real app,
   // but possibly useful for unit testing Routers.
-  stop: function stop() {
+  stop: function () {
     // Remove window listeners.
     if (this._usePushState) {
       removeEventListener('popstate', this.checkUrl, false);
@@ -70623,15 +74522,15 @@ Object.assign(history_History.prototype, Events, {
   },
   // Add a route to be tested when the fragment changes. Routes added later
   // may override previous routes.
-  route: function route(_route, callback) {
+  route: function (route, callback) {
     this.handlers.unshift({
-      route: _route,
+      route: route,
       callback: callback
     });
   },
   // Checks the current URL to see if it has changed, and if it has,
   // calls `loadUrl`, normalizing across the hidden iframe.
-  checkUrl: function checkUrl(e) {
+  checkUrl: function (e) {
     let current = this.getFragment(); // If the user pressed the back button, the iframe's hash will have
     // changed and we should use that for comparison.
 
@@ -70646,7 +74545,7 @@ Object.assign(history_History.prototype, Events, {
   // Attempt to load the current URL fragment. If a route succeeds with a
   // match, returns `true`. If no defined routes matches the fragment,
   // returns `false`.
-  loadUrl: function loadUrl(fragment) {
+  loadUrl: function (fragment) {
     // If the root doesn't match, no routes can match either.
     if (!this.matchRoot()) return false;
     fragment = this.fragment = this.getFragment(fragment);
@@ -70664,7 +74563,7 @@ Object.assign(history_History.prototype, Events, {
   // The options object can contain `trigger: true` if you wish to have the
   // route callback be fired (not usually desirable), or `replace: true`, if
   // you wish to modify the current URL without adding an entry to the history.
-  navigate: function navigate(fragment, options) {
+  navigate: function (fragment, options) {
     if (!history_History.started) return false;
     if (!options || options === true) options = {
       trigger: !!options
@@ -70714,7 +74613,7 @@ Object.assign(history_History.prototype, Events, {
   },
   // Update the hash location, either replacing the current entry, or adding
   // a new one to the browser history.
-  _updateHash: function _updateHash(location, fragment, replace) {
+  _updateHash: function (location, fragment, replace) {
     if (replace) {
       const href = location.href.replace(/(javascript:|#).*$/, '');
       location.replace(href + '#' + fragment);
@@ -70790,7 +74689,7 @@ var isRegExp = nodeIsRegExp ? _baseUnary(nodeIsRegExp) : _baseIsRegExp;
  // Routers map faux-URLs to actions, and fire events when routes are
 // matched. Creating a new one sets its `routes` hash, if not set statically.
 
-const router_Router = function Router(options = {}) {
+const Router = function (options = {}) {
   this.history = options.history || new src_history();
   this.preinitialize.apply(this, arguments);
   if (options.routes) this.routes = options.routes;
@@ -70799,7 +74698,7 @@ const router_Router = function Router(options = {}) {
 
   this.initialize.apply(this, arguments);
 };
-router_Router.extend = inherits; // Cached regular expressions for matching named param parts and splatted
+Router.extend = inherits; // Cached regular expressions for matching named param parts and splatted
 // parts of route strings.
 
 const optionalParam = /\((.*?)\)/g;
@@ -70807,21 +74706,21 @@ const namedParam = /(\(\?)?:\w+/g;
 const splatParam = /\*\w+/g;
 const escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; // Set up all inheritable **Router** properties and methods.
 
-Object.assign(router_Router.prototype, Events, {
+Object.assign(Router.prototype, Events, {
   // preinitialize is an empty function by default. You can override it with a function
   // or object.  preinitialize will run before any instantiation logic is run in the Router.
-  preinitialize: function preinitialize() {},
+  preinitialize: function () {},
   // Initialize is an empty function by default. Override it with your own
   // initialization logic.
-  initialize: function initialize() {},
+  initialize: function () {},
   // Manually bind a single named route to a callback. For example:
   //
   //     this.route('search/:query/p:num', 'search', function(query, num) {
   //       ...
   //     });
   //
-  route: function route(_route, name, callback) {
-    if (!lodash_es_isRegExp(_route)) _route = this._routeToRegExp(_route);
+  route: function (route, name, callback) {
+    if (!lodash_es_isRegExp(route)) route = this._routeToRegExp(route);
 
     if (lodash_es_isFunction(name)) {
       callback = name;
@@ -70829,8 +74728,8 @@ Object.assign(router_Router.prototype, Events, {
     }
 
     if (!callback) callback = this[name];
-    this.history.route(_route, fragment => {
-      const args = this._extractParameters(_route, fragment);
+    this.history.route(route, fragment => {
+      const args = this._extractParameters(route, fragment);
 
       if (this.execute(callback, args, name) !== false) {
         this.trigger.apply(this, ['route:' + name].concat(args));
@@ -70842,18 +74741,18 @@ Object.assign(router_Router.prototype, Events, {
   },
   // Execute a route handler with the provided parameters.  This is an
   // excellent place to do pre-route setup or post-route cleanup.
-  execute: function execute(callback, args, name) {
+  execute: function (callback, args, name) {
     if (callback) callback.apply(this, args);
   },
   // Simple proxy to `history` to save a fragment into the history.
-  navigate: function navigate(fragment, options) {
+  navigate: function (fragment, options) {
     this.history.navigate(fragment, options);
     return this;
   },
   // Bind all defined routes to `history`. We have to reverse the
   // order of the routes here to support behavior where the most general
   // routes can be defined at the bottom of the route map.
-  _bindRoutes: function _bindRoutes() {
+  _bindRoutes: function () {
     if (!this.routes) return;
     this.routes = lodash_es_result(this, 'routes');
     let route;
@@ -70865,7 +74764,7 @@ Object.assign(router_Router.prototype, Events, {
   },
   // Convert a route string into a regular expression, suitable for matching
   // against the current location hash.
-  _routeToRegExp: function _routeToRegExp(route) {
+  _routeToRegExp: function (route) {
     route = route.replace(escapeRegExp, '\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, function (match, optional) {
       return optional ? match : '([^/?]+)';
     }).replace(splatParam, '([^?]*?)');
@@ -70874,7 +74773,7 @@ Object.assign(router_Router.prototype, Events, {
   // Given a route, and a URL fragment that it matches, return the array of
   // extracted decoded parameters. Empty or unmatched parameters will be
   // treated as `null` to normalize cross-browser behavior.
-  _extractParameters: function _extractParameters(route, fragment) {
+  _extractParameters: function (route, fragment) {
     const params = route.exec(fragment).slice(1);
     return params.map(function (param, i) {
       // Don't decode the search params.
@@ -70884,7 +74783,7 @@ Object.assign(router_Router.prototype, Events, {
   }
 });
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/strophe.js
-var strophe = __webpack_require__(3);
+var strophe = __webpack_require__(1);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/now.js
 
@@ -71157,9 +75056,9 @@ var invoke = _baseRest(_baseInvoke);
 /* harmony default export */ var lodash_es_invoke = (invoke);
 
 // EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js
-var sprintf = __webpack_require__(70);
+var sprintf = __webpack_require__(94);
 
-// CONCATENATED MODULE: ./src/headless/converse-core.js
+// CONCATENATED MODULE: ./src/headless/core.js
 /**
  * @module converse-core
  * @copyright The Converse.js contributors
@@ -71183,6 +75082,8 @@ var sprintf = __webpack_require__(70);
 
 
 
+
+
 
 
 dayjs_min_default.a.extend(advancedFormat_default.a); // Add Strophe Namespaces
@@ -71209,6 +75110,7 @@ strophe["e" /* Strophe */].addNamespace('RSM', 'http://jabber.org/protocol/rsm')
 strophe["e" /* Strophe */].addNamespace('SID', 'urn:xmpp:sid:0');
 strophe["e" /* Strophe */].addNamespace('SPOILER', 'urn:xmpp:spoiler:0');
 strophe["e" /* Strophe */].addNamespace('STANZAS', 'urn:ietf:params:xml:ns:xmpp-stanzas');
+strophe["e" /* Strophe */].addNamespace('STYLING', 'urn:xmpp:styling:0');
 strophe["e" /* Strophe */].addNamespace('VCARD', 'vcard-temp');
 strophe["e" /* Strophe */].addNamespace('VCARDUPDATE', 'vcard-temp:x:update');
 strophe["e" /* Strophe */].addNamespace('XFORM', 'jabber:x:data');
@@ -71234,15 +75136,16 @@ const DEFAULT_SETTINGS = {
   // Currently only used in connection with anonymous login
   auto_reconnect: true,
   blacklisted_plugins: [],
+  clear_cache_on_logout: false,
   connection_options: {},
   credentials_url: null,
   // URL from where login credentials can be fetched
   discover_connection_methods: true,
   geouri_regex: /https\:\/\/www.openstreetmap.org\/.*#map=[0-9]+\/([\-0-9.]+)\/([\-0-9.]+)\S*/g,
   geouri_replacement: 'https://www.openstreetmap.org/?mlat=$1&mlon=$2#map=18/$1/$2',
+  i18n: 'en',
   idle_presence_timeout: 300,
   // Seconds after which an idle presence is sent
-  i18n: 'en',
   jid: undefined,
   keepalive: true,
   loglevel: 'info',
@@ -71255,7 +75158,6 @@ const DEFAULT_SETTINGS = {
   sid: undefined,
   singleton: false,
   strict_plugin_dependencies: false,
-  trusted: true,
   view_mode: 'overlayed',
   // Choices are 'overlayed', 'fullscreen', 'mobile'
   websocket_url: undefined,
@@ -71306,7 +75208,7 @@ const i18n = {
  * @namespace _converse
  */
 
-const converse_core_converse = {
+const core_converse = {
   log: headless_log,
   CONNECTION_STATUS,
   templates: {},
@@ -71361,7 +75263,7 @@ const converse_core_converse = {
   default_connection_options: {
     'explicitResourceBinding': true
   },
-  router: new router_Router(),
+  router: new Router(),
   TimeoutError: TimeoutError,
   isTestEnv: () => {
     return initialization_settings.bosh_service_url === 'montague.lit/http-bind';
@@ -71394,44 +75296,44 @@ const converse_core_converse = {
    */
   '___': str => str
 };
-converse_core_converse.VERSION_NAME = "v6.0.1dev";
-Object.assign(converse_core_converse, Events); // Make converse pluggable
+core_converse.VERSION_NAME = "v7.0.3dev";
+Object.assign(core_converse, Events); // Make converse pluggable
 
-pluggable.enable(converse_core_converse, '_converse', 'pluggable');
-let converse_core_user_settings; // User settings, populated via api.users.settings
+pluggable.enable(core_converse, '_converse', 'pluggable');
+let core_user_settings; // User settings, populated via api.users.settings
 
 let initialization_settings = {}; // Container for settings passed in via converse.initialize
 
 function initSettings(settings) {
-  converse_core_converse.settings = {};
+  core_converse.settings = {};
   initialization_settings = settings; // Allow only whitelisted settings to be overwritten via converse.initialize
 
   const allowed_settings = lodash_es_pick(settings, Object.keys(DEFAULT_SETTINGS));
-  lodash_es_assignIn(converse_core_converse.settings, DEFAULT_SETTINGS, allowed_settings);
-  lodash_es_assignIn(converse_core_converse, DEFAULT_SETTINGS, allowed_settings); // FIXME: remove
+  lodash_es_assignIn(core_converse.settings, DEFAULT_SETTINGS, allowed_settings);
+  lodash_es_assignIn(core_converse, DEFAULT_SETTINGS, allowed_settings); // FIXME: remove
 }
 
 function initUserSettings() {
   var _user_settings;
 
-  if (!converse_core_converse.bare_jid) {
+  if (!core_converse.bare_jid) {
     const msg = "No JID to fetch user settings for";
     headless_log.error(msg);
     throw Error(msg);
   }
 
-  if (!((_user_settings = converse_core_user_settings) === null || _user_settings === void 0 ? void 0 : _user_settings.fetched)) {
-    const id = "converse.user-settings.".concat(converse_core_converse.bare_jid);
-    converse_core_user_settings = new model_Model({
+  if (!((_user_settings = core_user_settings) === null || _user_settings === void 0 ? void 0 : _user_settings.fetched)) {
+    const id = "converse.user-settings.".concat(core_converse.bare_jid);
+    core_user_settings = new model_Model({
       id
     });
-    converse_core_user_settings.browserStorage = createStore(id);
-    converse_core_user_settings.fetched = converse_core_user_settings.fetch({
+    core_user_settings.browserStorage = createStore(id);
+    core_user_settings.fetched = core_user_settings.fetch({
       'promise': true
     });
   }
 
-  return converse_core_user_settings.fetched;
+  return core_user_settings.fetched;
 }
 /**
  * ### The private API
@@ -71448,7 +75350,7 @@ function initUserSettings() {
  */
 
 
-const converse_core_api = converse_core_converse.api = {
+const core_api = core_converse.api = {
   /**
    * This grouping collects API functions related to the XMPP connection.
    *
@@ -71464,7 +75366,7 @@ const converse_core_api = converse_core_converse.api = {
     connected() {
       var _converse$connection;
 
-      return (converse_core_converse === null || converse_core_converse === void 0 ? void 0 : (_converse$connection = converse_core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connected) && true;
+      return (core_converse === null || core_converse === void 0 ? void 0 : (_converse$connection = core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connected) && true;
     },
 
     /**
@@ -71474,8 +75376,8 @@ const converse_core_api = converse_core_converse.api = {
      * @memberOf _converse.api.connection
      */
     disconnect() {
-      if (converse_core_converse.connection) {
-        converse_core_converse.connection.disconnect();
+      if (core_converse.connection) {
+        core_converse.connection.disconnect();
       }
     },
 
@@ -71489,9 +75391,9 @@ const converse_core_api = converse_core_converse.api = {
      * @memberOf _converse.api.connection
      */
     async reconnect() {
-      const conn_status = converse_core_converse.connfeedback.get('connection_status');
+      const conn_status = core_converse.connfeedback.get('connection_status');
 
-      if (converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+      if (core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
         await tearDown();
         await clearSession();
       }
@@ -71503,39 +75405,39 @@ const converse_core_api = converse_core_converse.api = {
         //
         // We also call `_proto._doDisconnect` so that connection event handlers
         // for the old transport are removed.
-        if (converse_core_api.connection.isType('websocket') && converse_core_api.settings.get('bosh_service_url')) {
-          await converse_core_converse.setUserJID(converse_core_converse.bare_jid);
+        if (core_api.connection.isType('websocket') && core_api.settings.get('bosh_service_url')) {
+          await core_converse.setUserJID(core_converse.bare_jid);
 
-          converse_core_converse.connection._proto._doDisconnect();
+          core_converse.connection._proto._doDisconnect();
 
-          converse_core_converse.connection._proto = new strophe["e" /* Strophe */].Bosh(converse_core_converse.connection);
-          converse_core_converse.connection.service = converse_core_api.settings.get('bosh_service_url');
-        } else if (converse_core_api.connection.isType('bosh') && converse_core_api.settings.get("websocket_url")) {
-          if (converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+          core_converse.connection._proto = new strophe["e" /* Strophe */].Bosh(core_converse.connection);
+          core_converse.connection.service = core_api.settings.get('bosh_service_url');
+        } else if (core_api.connection.isType('bosh') && core_api.settings.get("websocket_url")) {
+          if (core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
             // When reconnecting anonymously, we need to connect with only
             // the domain, not the full JID that we had in our previous
             // (now failed) session.
-            await converse_core_converse.setUserJID(converse_core_api.settings.get("jid"));
+            await core_converse.setUserJID(core_api.settings.get("jid"));
           } else {
-            await converse_core_converse.setUserJID(converse_core_converse.bare_jid);
+            await core_converse.setUserJID(core_converse.bare_jid);
           }
 
-          converse_core_converse.connection._proto._doDisconnect();
+          core_converse.connection._proto._doDisconnect();
 
-          converse_core_converse.connection._proto = new strophe["e" /* Strophe */].Websocket(converse_core_converse.connection);
-          converse_core_converse.connection.service = converse_core_api.settings.get("websocket_url");
+          core_converse.connection._proto = new strophe["e" /* Strophe */].Websocket(core_converse.connection);
+          core_converse.connection.service = core_api.settings.get("websocket_url");
         }
-      } else if (conn_status === strophe["e" /* Strophe */].Status.AUTHFAIL && converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+      } else if (conn_status === strophe["e" /* Strophe */].Status.AUTHFAIL && core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
         // When reconnecting anonymously, we need to connect with only
         // the domain, not the full JID that we had in our previous
         // (now failed) session.
-        await converse_core_converse.setUserJID(converse_core_api.settings.get("jid"));
+        await core_converse.setUserJID(core_api.settings.get("jid"));
       }
 
-      if (converse_core_converse.connection.reconnecting) {
-        converse_core_converse.connection.debouncedReconnect();
+      if (core_converse.connection.reconnecting) {
+        core_converse.connection.debouncedReconnect();
       } else {
-        return converse_core_converse.connection.reconnect();
+        return core_converse.connection.reconnect();
       }
     },
 
@@ -71546,7 +75448,7 @@ const converse_core_api = converse_core_converse.api = {
      * @returns {boolean}
      */
     isType(type) {
-      return converse_core_converse.connection.isType(type);
+      return core_converse.connection.isType(type);
     }
 
   },
@@ -71568,7 +75470,7 @@ const converse_core_api = converse_core_converse.api = {
    *  event handlers' promises have been resolved.
    */
   async trigger(name) {
-    if (!converse_core_converse._events) {
+    if (!core_converse._events) {
       return;
     }
 
@@ -71576,13 +75478,13 @@ const converse_core_api = converse_core_converse.api = {
     const options = args.pop();
 
     if (options && options.synchronous) {
-      const events = converse_core_converse._events[name] || [];
+      const events = core_converse._events[name] || [];
       await Promise.all(events.map(e => e.callback.apply(e.ctx, args.splice(1))));
     } else {
-      converse_core_converse.trigger.apply(converse_core_converse, arguments);
+      core_converse.trigger.apply(core_converse, arguments);
     }
 
-    const promise = converse_core_converse.promises[name];
+    const promise = core_converse.promises[name];
 
     if (promise !== undefined) {
       promise.resolve();
@@ -71602,7 +75504,7 @@ const converse_core_api = converse_core_converse.api = {
    * @returns {Promise<any>} - A promise that resolves with the modified data structure.
    */
   hook(name, context, data) {
-    const events = converse_core_converse._events[name] || [];
+    const events = core_converse._events[name] || [];
 
     if (events.length) {
       // Create a chain of promises, with each one feeding its output to
@@ -71632,7 +75534,7 @@ const converse_core_api = converse_core_converse.api = {
      * @example _converse.api.user.jid())
      */
     jid() {
-      return converse_core_converse.connection.jid;
+      return core_converse.connection.jid;
     },
 
     /**
@@ -71655,32 +75557,32 @@ const converse_core_api = converse_core_converse.api = {
     async login(jid, password, automatic = false) {
       var _converse$connection2, _api$settings$get;
 
-      jid = jid || converse_core_converse.jid;
+      jid = jid || core_converse.jid;
 
-      if (!((_converse$connection2 = converse_core_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.jid) || jid && !utils_core.isSameDomain(converse_core_converse.connection.jid, jid)) {
-        await converse_core_converse.initConnection();
+      if (!((_converse$connection2 = core_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.jid) || jid && !utils_core.isSameDomain(core_converse.connection.jid, jid)) {
+        await core_converse.initConnection();
       }
 
-      if (((_api$settings$get = converse_core_api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) && (await converse_core_converse.connection.restoreWorkerSession())) {
+      if (((_api$settings$get = core_api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) && (await core_converse.connection.restoreWorkerSession())) {
         return;
       }
 
       if (jid) {
-        jid = await converse_core_converse.setUserJID(jid);
+        jid = await core_converse.setUserJID(jid);
       } // See whether there is a BOSH session to re-attach to
 
 
-      const bosh_plugin = converse_core_converse.pluggable.plugins['converse-bosh'];
+      const bosh_plugin = core_converse.pluggable.plugins['converse-bosh'];
 
       if (bosh_plugin && bosh_plugin.enabled()) {
-        if (await converse_core_converse.restoreBOSHSession()) {
+        if (await core_converse.restoreBOSHSession()) {
           return;
-        } else if (converse_core_api.settings.get("authentication") === converse_core_converse.PREBIND && (!automatic || converse_core_api.settings.get("auto_login"))) {
-          return converse_core_converse.startNewPreboundBOSHSession();
+        } else if (core_api.settings.get("authentication") === core_converse.PREBIND && (!automatic || core_api.settings.get("auto_login"))) {
+          return core_converse.startNewPreboundBOSHSession();
         }
       }
 
-      password = password || converse_core_api.settings.get("password");
+      password = password || core_api.settings.get("password");
       const credentials = jid && password ? {
         jid,
         password
@@ -71698,23 +75600,23 @@ const converse_core_api = converse_core_converse.api = {
 
       const complete = () => {
         // Recreate all the promises
-        Object.keys(converse_core_converse.promises).forEach(replacePromise);
-        delete converse_core_converse.jid;
+        Object.keys(core_converse.promises).forEach(replacePromise);
+        delete core_converse.jid;
         /**
          * Triggered once the user has logged out.
          * @event _converse#logout
          */
 
-        converse_core_api.trigger('logout');
+        core_api.trigger('logout');
         promise.resolve();
       };
 
-      converse_core_converse.connection.setDisconnectionCause(converse_core_converse.LOGOUT, undefined, true);
+      core_converse.connection.setDisconnectionCause(core_converse.LOGOUT, undefined, true);
 
-      if (converse_core_converse.connection !== undefined) {
-        converse_core_api.listen.once('disconnected', () => complete());
+      if (core_converse.connection !== undefined) {
+        core_api.listen.once('disconnected', () => complete());
 
-        converse_core_converse.connection.disconnect();
+        core_converse.connection.disconnect();
       } else {
         complete();
       }
@@ -71738,20 +75640,20 @@ const converse_core_api = converse_core_converse.api = {
        */
       async getModel() {
         await initUserSettings();
-        return converse_core_user_settings;
+        return core_user_settings;
       },
 
       /**
        * Get the value of a particular user setting.
        * @method _converse.api.user.settings.get
-       * @param {String} key - hello world
+       * @param {String} key - The setting name
        * @param {*} fallback - An optional fallback value if the user setting is undefined
        * @returns {Promise} Promise which resolves with the value of the particular configuration setting.
        * @example _converse.api.user.settings.get("foo");
        */
       async get(key, fallback) {
         await initUserSettings();
-        return converse_core_user_settings.get(key) === undefined ? fallback : converse_core_user_settings.get(key);
+        return core_user_settings.get(key) === undefined ? fallback : core_user_settings.get(key);
       },
 
       /**
@@ -71772,13 +75674,13 @@ const converse_core_api = converse_core_converse.api = {
         await initUserSettings();
 
         if (lodash_es_isObject(key)) {
-          return converse_core_user_settings.save(key, {
+          return core_user_settings.save(key, {
             'promise': true
           });
         } else {
           const o = {};
           o[key] = val;
-          return converse_core_user_settings.save(o, {
+          return core_user_settings.save(o, {
             'promise': true
           });
         }
@@ -71790,7 +75692,7 @@ const converse_core_api = converse_core_converse.api = {
        */
       async clear() {
         await initUserSettings();
-        converse_core_user_settings.clear();
+        core_user_settings.clear();
       }
 
     }
@@ -71833,8 +75735,8 @@ const converse_core_api = converse_core_converse.api = {
       const allowed_keys = Object.keys(lodash_es_pick(settings, Object.keys(DEFAULT_SETTINGS)));
       const allowed_site_settings = lodash_es_pick(initialization_settings, allowed_keys);
       const updated_settings = lodash_es_assignIn(lodash_es_pick(settings, allowed_keys), allowed_site_settings);
-      utils_core.merge(converse_core_converse.settings, updated_settings);
-      utils_core.merge(converse_core_converse, updated_settings); // FIXME: remove
+      utils_core.merge(core_converse.settings, updated_settings);
+      utils_core.merge(core_converse, updated_settings); // FIXME: remove
     },
 
     update(settings) {
@@ -71849,7 +75751,7 @@ const converse_core_api = converse_core_converse.api = {
      */
     get(key) {
       if (Object.keys(DEFAULT_SETTINGS).includes(key)) {
-        return converse_core_converse[key];
+        return core_converse[key];
       }
     },
 
@@ -71875,12 +75777,12 @@ const converse_core_api = converse_core_converse.api = {
       const o = {};
 
       if (lodash_es_isObject(key)) {
-        lodash_es_assignIn(converse_core_converse, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS)));
-        lodash_es_assignIn(converse_core_converse.settings, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS)));
+        lodash_es_assignIn(core_converse, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS)));
+        lodash_es_assignIn(core_converse.settings, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS)));
       } else if (typeof key === 'string') {
         o[key] = val;
-        lodash_es_assignIn(converse_core_converse, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS)));
-        lodash_es_assignIn(converse_core_converse.settings, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS)));
+        lodash_es_assignIn(core_converse, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS)));
+        lodash_es_assignIn(core_converse.settings, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS)));
       }
     }
 
@@ -71935,7 +75837,7 @@ const converse_core_api = converse_core_converse.api = {
       promises.forEach(name => {
         const promise = utils_core.getResolveablePromise();
         promise.replace = replace;
-        converse_core_converse.promises[name] = promise;
+        core_converse.promises[name] = promise;
       });
     }
 
@@ -71953,39 +75855,33 @@ const converse_core_api = converse_core_converse.api = {
   listen: {
     /**
      * Lets you listen to an event exactly once.
-     *
      * @method _converse.api.listen.once
      * @param {string} name The event's name
      * @param {function} callback The callback method to be called when the event is emitted.
      * @param {object} [context] The value of the `this` parameter for the callback.
      * @example _converse.api.listen.once('message', function (messageXML) { ... });
      */
-    once: converse_core_converse.once.bind(converse_core_converse),
+    once: core_converse.once.bind(core_converse),
 
     /**
      * Lets you subscribe to an event.
-     *
      * Every time the event fires, the callback method specified by `callback` will be called.
-     *
      * @method _converse.api.listen.on
      * @param {string} name The event's name
      * @param {function} callback The callback method to be called when the event is emitted.
      * @param {object} [context] The value of the `this` parameter for the callback.
      * @example _converse.api.listen.on('message', function (messageXML) { ... });
      */
-    on: converse_core_converse.on.bind(converse_core_converse),
+    on: core_converse.on.bind(core_converse),
 
     /**
      * To stop listening to an event, you can use the `not` method.
-     *
-     * Every time the event fires, the callback method specified by `callback` will be called.
-     *
      * @method _converse.api.listen.not
      * @param {string} name The event's name
      * @param {function} callback The callback method that is to no longer be called when the event fires
      * @example _converse.api.listen.not('message', function (messageXML);
      */
-    not: converse_core_converse.off.bind(converse_core_converse),
+    not: core_converse.off.bind(core_converse),
 
     /**
      * Subscribe to an incoming stanza
@@ -72004,7 +75900,7 @@ const converse_core_api = converse_core_converse.api = {
         options = options || {};
       }
 
-      converse_core_converse.connection.addHandler(handler, options.ns, name, options.type, options.id, options.from, options);
+      core_converse.connection.addHandler(handler, options.ns, name, options.type, options.id, options.from, options);
     }
 
   },
@@ -72021,7 +75917,7 @@ const converse_core_api = converse_core_converse.api = {
     if (lodash_es_isFunction(condition)) {
       return utils_core.waitUntil(condition);
     } else {
-      const promise = converse_core_converse.promises[condition];
+      const promise = core_converse.promises[condition];
 
       if (promise === undefined) {
         return null;
@@ -72045,7 +75941,7 @@ const converse_core_api = converse_core_converse.api = {
    * _converse.api.send(msg);
    */
   send(stanza) {
-    if (!converse_core_api.connection.connected()) {
+    if (!core_api.connection.connected()) {
       headless_log.warn("Not sending stanza because we're not connected!");
       headless_log.warn(strophe["e" /* Strophe */].serialize(stanza));
       return;
@@ -72056,11 +75952,11 @@ const converse_core_api = converse_core_converse.api = {
     }
 
     if (stanza.tagName === 'iq') {
-      return converse_core_api.sendIQ(stanza);
+      return core_api.sendIQ(stanza);
     } else {
-      converse_core_converse.connection.send(stanza);
+      core_converse.connection.send(stanza);
 
-      converse_core_api.trigger('send', stanza);
+      core_api.trigger('send', stanza);
     }
   },
 
@@ -72076,39 +75972,39 @@ const converse_core_api = converse_core_converse.api = {
    *  If the IQ stanza being sent is of type `result` or `error`, there's
    *  nothing to wait for, so an already resolved promise is returned.
    */
-  sendIQ(stanza, timeout = converse_core_converse.STANZA_TIMEOUT, reject = true) {
+  sendIQ(stanza, timeout = core_converse.STANZA_TIMEOUT, reject = true) {
     var _stanza$nodeTree, _stanza;
 
     let promise;
     stanza = (_stanza$nodeTree = (_stanza = stanza) === null || _stanza === void 0 ? void 0 : _stanza.nodeTree) !== null && _stanza$nodeTree !== void 0 ? _stanza$nodeTree : stanza;
 
     if (['get', 'set'].includes(stanza.getAttribute('type'))) {
-      timeout = timeout || converse_core_converse.STANZA_TIMEOUT;
+      timeout = timeout || core_converse.STANZA_TIMEOUT;
 
       if (reject) {
-        promise = new Promise((resolve, reject) => converse_core_converse.connection.sendIQ(stanza, resolve, reject, timeout));
+        promise = new Promise((resolve, reject) => core_converse.connection.sendIQ(stanza, resolve, reject, timeout));
         promise.catch(e => {
           if (e === null) {
             throw new TimeoutError("Timeout error after ".concat(timeout, "ms for the following IQ stanza: ").concat(strophe["e" /* Strophe */].serialize(stanza)));
           }
         });
       } else {
-        promise = new Promise(resolve => converse_core_converse.connection.sendIQ(stanza, resolve, resolve, timeout));
+        promise = new Promise(resolve => core_converse.connection.sendIQ(stanza, resolve, resolve, timeout));
       }
     } else {
-      converse_core_converse.connection.sendIQ(stanza);
+      core_converse.connection.sendIQ(stanza);
 
       promise = Promise.resolve();
     }
 
-    converse_core_api.trigger('send', stanza);
+    core_api.trigger('send', stanza);
     return promise;
   }
 
 };
 
 function replacePromise(name) {
-  const existing_promise = converse_core_converse.promises[name];
+  const existing_promise = core_converse.promises[name];
 
   if (!existing_promise) {
     throw new Error("Tried to replace non-existing promise: ".concat(name));
@@ -72117,26 +76013,26 @@ function replacePromise(name) {
   if (existing_promise.replace) {
     const promise = utils_core.getResolveablePromise();
     promise.replace = existing_promise.replace;
-    converse_core_converse.promises[name] = promise;
+    core_converse.promises[name] = promise;
   } else {
     headless_log.debug("Not replacing promise \"".concat(name, "\""));
   }
 }
 
-converse_core_converse.isUniView = function () {
+core_converse.isUniView = function () {
   /* We distinguish between UniView and MultiView instances.
    *
    * UniView means that only one chat is visible, even though there might be multiple ongoing chats.
    * MultiView means that multiple chats may be visible simultaneously.
    */
-  return ['mobile', 'fullscreen', 'embedded'].includes(converse_core_api.settings.get("view_mode"));
+  return ['mobile', 'fullscreen', 'embedded'].includes(core_api.settings.get("view_mode"));
 };
 
 async function initSessionStorage() {
   await src_storage.sessionStorageInitialized;
-  converse_core_converse.storage = {
+  core_converse.storage = {
     'session': src_storage.localForage.createInstance({
-      'name': converse_core_converse.isTestEnv() ? 'converse-test-session' : 'converse-session',
+      'name': core_converse.isTestEnv() ? 'converse-test-session' : 'converse-session',
       'description': 'sessionStorage instance',
       'driver': ['sessionStorageWrapper']
     })
@@ -72144,32 +76040,53 @@ async function initSessionStorage() {
 }
 
 function initPersistentStorage() {
-  if (converse_core_converse.config.get('storage') !== 'persistent') {
+  if (core_api.settings.get('persistent_store') === 'sessionStorage') {
+    return;
+  } else if (core_converse.api.settings.get("persistent_store") === 'BrowserExtLocal') {
+    src_storage.localForage.defineDriver(local_default.a).then(() => src_storage.localForage.setDriver('webExtensionLocalStorage'));
+    core_converse.storage['persistent'] = src_storage.localForage;
+    return;
+  } else if (core_converse.api.settings.get("persistent_store") === 'BrowserExtSync') {
+    src_storage.localForage.defineDriver(sync_default.a).then(() => src_storage.localForage.setDriver('webExtensionSyncStorage'));
+    core_converse.storage['persistent'] = src_storage.localForage;
     return;
   }
 
   const config = {
-    'name': converse_core_converse.isTestEnv() ? 'converse-test-persistent' : 'converse-persistent',
-    'storeName': converse_core_converse.bare_jid
+    'name': core_converse.isTestEnv() ? 'converse-test-persistent' : 'converse-persistent',
+    'storeName': core_converse.bare_jid
   };
 
-  if (converse_core_converse.api.settings.get("persistent_store") === 'localStorage') {
+  if (core_converse.api.settings.get("persistent_store") === 'localStorage') {
     config['description'] = 'localStorage instance';
     config['driver'] = [src_storage.localForage.LOCALSTORAGE];
-  } else if (converse_core_converse.api.settings.get("persistent_store") === 'IndexedDB') {
+  } else if (core_converse.api.settings.get("persistent_store") === 'IndexedDB') {
     config['description'] = 'indexedDB instance';
     config['driver'] = [src_storage.localForage.INDEXEDDB];
+  } else if (core_converse.api.settings.get("persistent_store") === 'none') {
+    config['description'] = 'in-memory instance';
+    config['driver'] = [src_storage.IN_MEMORY];
   }
 
-  converse_core_converse.storage['persistent'] = src_storage.localForage.createInstance(config);
+  core_converse.storage['persistent'] = src_storage.localForage.createInstance(config);
 }
 
+core_converse.getDefaultStore = function () {
+  if (core_converse.config.get('trusted')) {
+    const is_non_persistent = core_api.settings.get('persistent_store') === 'sessionStorage';
+    return is_non_persistent ? 'session' : 'persistent';
+  } else {
+    return 'session';
+  }
+};
+
 function createStore(id, storage) {
-  const s = converse_core_converse.storage[storage ? storage : converse_core_converse.config.get('storage')];
+  const s = core_converse.storage[storage || core_converse.getDefaultStore()];
+
   return new src_storage(id, s);
 }
 
-converse_core_converse.createStore = createStore;
+core_converse.createStore = createStore;
 
 function initPlugins() {
   // If initialize gets called a second time (e.g. during tests), then we
@@ -72178,16 +76095,16 @@ function initPlugins() {
   // initialized twice.
   // If initialize is called for the first time, then this array is empty
   // in any case.
-  converse_core_converse.pluggable.initialized_plugins = [];
-  const whitelist = CORE_PLUGINS.concat(converse_core_converse.api.settings.get("whitelisted_plugins"));
+  core_converse.pluggable.initialized_plugins = [];
+  const whitelist = CORE_PLUGINS.concat(core_converse.api.settings.get("whitelisted_plugins"));
 
-  if (converse_core_converse.api.settings.get("singleton")) {
-    ['converse-bookmarks', 'converse-controlbox', 'converse-headline', 'converse-register'].forEach(name => converse_core_converse.api.settings.get("blacklisted_plugins").push(name));
+  if (core_converse.api.settings.get("singleton")) {
+    ['converse-bookmarks', 'converse-controlbox', 'converse-headline', 'converse-register'].forEach(name => core_converse.api.settings.get("blacklisted_plugins").push(name));
   }
 
-  converse_core_converse.pluggable.initializePlugins({
-    '_converse': converse_core_converse
-  }, whitelist, converse_core_converse.api.settings.get("blacklisted_plugins"));
+  core_converse.pluggable.initializePlugins({
+    '_converse': core_converse
+  }, whitelist, core_converse.api.settings.get("blacklisted_plugins"));
   /**
    * Triggered once all plugins have been initialized. This is a useful event if you want to
    * register event handlers but would like your own handlers to be overridable by
@@ -72204,24 +76121,25 @@ function initPlugins() {
    */
 
 
-  converse_core_converse.api.trigger('pluginsInitialized');
+  core_converse.api.trigger('pluginsInitialized');
 }
 
-function initClientConfig() {
+async function initClientConfig() {
   /* The client config refers to configuration of the client which is
    * independent of any particular user.
    * What this means is that config values need to persist across
    * user sessions.
    */
   const id = 'converse.client-config';
-  converse_core_converse.config = new model_Model({
-    'id': id,
-    'trusted': converse_core_converse.api.settings.get("trusted") && true || false,
-    'storage': converse_core_converse.api.settings.get("trusted") ? 'persistent' : 'session'
+  core_converse.config = new model_Model({
+    id,
+    'trusted': true
   });
-  converse_core_converse.config.browserStorage = createStore(id, "session");
-
-  converse_core_converse.config.fetch();
+  core_converse.config.browserStorage = createStore(id, "session");
+  await new Promise(r => core_converse.config.fetch({
+    'success': r,
+    'error': r
+  }));
   /**
    * Triggered once the XMPP-client configuration has been initialized.
    * The client configuration is independent of any particular and its values
@@ -72232,32 +76150,31 @@ function initClientConfig() {
    * _converse.api.listen.on('clientConfigInitialized', () => { ... });
    */
 
-
-  converse_core_converse.api.trigger('clientConfigInitialized');
+  core_converse.api.trigger('clientConfigInitialized');
 }
 
 async function tearDown() {
-  await converse_core_converse.api.trigger('beforeTearDown', {
+  await core_converse.api.trigger('beforeTearDown', {
     'synchronous': true
   });
-  window.removeEventListener('click', converse_core_converse.onUserActivity);
-  window.removeEventListener('focus', converse_core_converse.onUserActivity);
-  window.removeEventListener('keypress', converse_core_converse.onUserActivity);
-  window.removeEventListener('mousemove', converse_core_converse.onUserActivity);
-  window.removeEventListener(converse_core_converse.unloadevent, converse_core_converse.onUserActivity);
-  window.clearInterval(converse_core_converse.everySecondTrigger);
+  window.removeEventListener('click', core_converse.onUserActivity);
+  window.removeEventListener('focus', core_converse.onUserActivity);
+  window.removeEventListener('keypress', core_converse.onUserActivity);
+  window.removeEventListener('mousemove', core_converse.onUserActivity);
+  window.removeEventListener(core_converse.unloadevent, core_converse.onUserActivity);
+  window.clearInterval(core_converse.everySecondTrigger);
 
-  converse_core_converse.api.trigger('afterTearDown');
+  core_converse.api.trigger('afterTearDown');
 
-  return converse_core_converse;
+  return core_converse;
 }
 
 async function attemptNonPreboundSession(credentials, automatic) {
   const {
     api
-  } = converse_core_converse;
+  } = core_converse;
 
-  if (api.settings.get("authentication") === converse_core_converse.LOGIN) {
+  if (api.settings.get("authentication") === core_converse.LOGIN) {
     // XXX: If EITHER ``keepalive`` or ``auto_login`` is ``true`` and
     // ``authentication`` is set to ``login``, then Converse will try to log the user in,
     // since we don't have a way to distinguish between wether we're
@@ -72266,66 +76183,66 @@ async function attemptNonPreboundSession(credentials, automatic) {
     // So we can't do the check (!automatic || _converse.api.settings.get("auto_login")) here.
     if (credentials) {
       connect(credentials);
-    } else if (converse_core_converse.api.settings.get("credentials_url")) {
+    } else if (core_converse.api.settings.get("credentials_url")) {
       // We give credentials_url preference, because
       // _converse.connection.pass might be an expired token.
       connect(await getLoginCredentials());
-    } else if (converse_core_converse.jid && (converse_core_converse.api.settings.get("password") || converse_core_converse.connection.pass)) {
+    } else if (core_converse.jid && (core_converse.api.settings.get("password") || core_converse.connection.pass)) {
       connect();
-    } else if (!converse_core_converse.isTestEnv() && 'credentials' in navigator) {
+    } else if (!core_converse.isTestEnv() && 'credentials' in navigator) {
       connect(await getLoginCredentialsFromBrowser());
     } else {
-      !converse_core_converse.isTestEnv() && headless_log.warn("attemptNonPreboundSession: Couldn't find credentials to log in with");
+      !core_converse.isTestEnv() && headless_log.warn("attemptNonPreboundSession: Couldn't find credentials to log in with");
     }
-  } else if ([converse_core_converse.ANONYMOUS, converse_core_converse.EXTERNAL].includes(converse_core_converse.api.settings.get("authentication")) && (!automatic || converse_core_converse.api.settings.get("auto_login"))) {
+  } else if ([core_converse.ANONYMOUS, core_converse.EXTERNAL].includes(core_converse.api.settings.get("authentication")) && (!automatic || core_converse.api.settings.get("auto_login"))) {
     connect();
   }
 }
 
 function connect(credentials) {
-  if ([converse_core_converse.ANONYMOUS, converse_core_converse.EXTERNAL].includes(converse_core_converse.api.settings.get("authentication"))) {
-    if (!converse_core_converse.jid) {
+  if ([core_converse.ANONYMOUS, core_converse.EXTERNAL].includes(core_converse.api.settings.get("authentication"))) {
+    if (!core_converse.jid) {
       throw new Error("Config Error: when using anonymous login " + "you need to provide the server's domain via the 'jid' option. " + "Either when calling converse.initialize, or when calling " + "_converse.api.user.login.");
     }
 
-    if (!converse_core_converse.connection.reconnecting) {
-      converse_core_converse.connection.reset();
+    if (!core_converse.connection.reconnecting) {
+      core_converse.connection.reset();
     }
 
-    converse_core_converse.connection.connect(converse_core_converse.jid.toLowerCase());
-  } else if (converse_core_converse.api.settings.get("authentication") === converse_core_converse.LOGIN) {
+    core_converse.connection.connect(core_converse.jid.toLowerCase());
+  } else if (core_converse.api.settings.get("authentication") === core_converse.LOGIN) {
     var _converse$connection3;
 
-    const password = credentials ? credentials.password : ((_converse$connection3 = converse_core_converse.connection) === null || _converse$connection3 === void 0 ? void 0 : _converse$connection3.pass) || converse_core_converse.api.settings.get("password");
+    const password = credentials ? credentials.password : ((_converse$connection3 = core_converse.connection) === null || _converse$connection3 === void 0 ? void 0 : _converse$connection3.pass) || core_converse.api.settings.get("password");
 
     if (!password) {
-      if (converse_core_converse.api.settings.get("auto_login")) {
+      if (core_converse.api.settings.get("auto_login")) {
         throw new Error("autoLogin: If you use auto_login and " + "authentication='login' then you also need to provide a password.");
       }
 
-      converse_core_converse.connection.setDisconnectionCause(strophe["e" /* Strophe */].Status.AUTHFAIL, undefined, true);
+      core_converse.connection.setDisconnectionCause(strophe["e" /* Strophe */].Status.AUTHFAIL, undefined, true);
 
-      converse_core_converse.api.connection.disconnect();
+      core_converse.api.connection.disconnect();
 
       return;
     }
 
-    if (!converse_core_converse.connection.reconnecting) {
-      converse_core_converse.connection.reset();
+    if (!core_converse.connection.reconnecting) {
+      core_converse.connection.reset();
     }
 
-    converse_core_converse.connection.connect(converse_core_converse.jid, password);
+    core_converse.connection.connect(core_converse.jid, password);
   }
 }
 
-converse_core_converse.shouldClearCache = () => !converse_core_converse.config.get('trusted') || converse_core_converse.isTestEnv();
+core_converse.shouldClearCache = () => !core_converse.config.get('trusted') || core_api.settings.get('clear_cache_on_logout') || core_converse.isTestEnv();
 
 function clearSession() {
   var _converse$session;
 
-  (_converse$session = converse_core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.destroy();
-  delete converse_core_converse.session;
-  converse_core_converse.shouldClearCache() && converse_core_converse.api.user.settings.clear();
+  (_converse$session = core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.destroy();
+  delete core_converse.session;
+  core_converse.shouldClearCache() && core_converse.api.user.settings.clear();
   /**
    * Synchronouse event triggered once the user session has been cleared,
    * for example when the user has logged out or when Converse has
@@ -72333,16 +76250,16 @@ function clearSession() {
    * @event _converse#clearSession
    */
 
-  return converse_core_converse.api.trigger('clearSession', {
+  return core_converse.api.trigger('clearSession', {
     'synchronous': true
   });
 }
 
-converse_core_converse.initConnection = function () {
-  const api = converse_core_converse.api;
+core_converse.initConnection = function () {
+  const api = core_converse.api;
 
   if (!api.settings.get('bosh_service_url')) {
-    if (api.settings.get("authentication") === converse_core_converse.PREBIND) {
+    if (api.settings.get("authentication") === core_converse.PREBIND) {
       throw new Error("authentication is set to 'prebind' but we don't have a BOSH connection");
     }
 
@@ -72351,12 +76268,12 @@ converse_core_converse.initConnection = function () {
     }
   }
 
-  const XMPPConnection = converse_core_converse.isTestEnv() ? connection_MockConnection : connection_Connection;
+  const XMPPConnection = core_converse.isTestEnv() ? connection_MockConnection : connection_Connection;
 
   if (('WebSocket' in window || 'MozWebSocket' in window) && api.settings.get("websocket_url")) {
-    converse_core_converse.connection = new XMPPConnection(api.settings.get("websocket_url"), Object.assign(converse_core_converse.default_connection_options, api.settings.get("connection_options")));
+    core_converse.connection = new XMPPConnection(api.settings.get("websocket_url"), Object.assign(core_converse.default_connection_options, api.settings.get("connection_options")));
   } else if (api.settings.get('bosh_service_url')) {
-    converse_core_converse.connection = new XMPPConnection(api.settings.get('bosh_service_url'), Object.assign(converse_core_converse.default_connection_options, api.settings.get("connection_options"), {
+    core_converse.connection = new XMPPConnection(api.settings.get('bosh_service_url'), Object.assign(core_converse.default_connection_options, api.settings.get("connection_options"), {
       'keepalive': api.settings.get("keepalive")
     }));
   } else {
@@ -72377,26 +76294,26 @@ converse_core_converse.initConnection = function () {
 async function initSession(jid) {
   var _converse$session2;
 
-  const is_shared_session = converse_core_api.settings.get('connection_options').worker;
+  const is_shared_session = core_api.settings.get('connection_options').worker;
   const bare_jid = strophe["e" /* Strophe */].getBareJidFromJid(jid).toLowerCase();
   const id = "converse.session-".concat(bare_jid);
 
-  if (((_converse$session2 = converse_core_converse.session) === null || _converse$session2 === void 0 ? void 0 : _converse$session2.get('id')) !== id) {
-    converse_core_converse.session = new model_Model({
+  if (((_converse$session2 = core_converse.session) === null || _converse$session2 === void 0 ? void 0 : _converse$session2.get('id')) !== id) {
+    core_converse.session = new model_Model({
       id
     });
-    converse_core_converse.session.browserStorage = createStore(id, is_shared_session ? "persistent" : "session");
-    await new Promise(r => converse_core_converse.session.fetch({
+    core_converse.session.browserStorage = createStore(id, is_shared_session ? "persistent" : "session");
+    await new Promise(r => core_converse.session.fetch({
       'success': r,
       'error': r
     }));
 
-    if (!is_shared_session && converse_core_converse.session.get('active')) {
+    if (!is_shared_session && core_converse.session.get('active')) {
       // If the `active` flag is set, it means this tab was cloned from
       // another (e.g. via middle-click), and its session data was copied over.
-      converse_core_converse.session.clear();
+      core_converse.session.clear();
 
-      converse_core_converse.session.save({
+      core_converse.session.save({
         id
       });
     }
@@ -72410,29 +76327,29 @@ async function initSession(jid) {
      * @memberOf _converse
      */
 
-    converse_core_converse.api.trigger('userSessionInitialized');
+    core_converse.api.trigger('userSessionInitialized');
   } else {
     saveJIDtoSession(jid);
   }
 }
 
 function saveJIDtoSession(jid) {
-  jid = converse_core_converse.session.get('jid') || jid;
+  jid = core_converse.session.get('jid') || jid;
 
-  if (converse_core_converse.api.settings.get("authentication") !== converse_core_converse.ANONYMOUS && !strophe["e" /* Strophe */].getResourceFromJid(jid)) {
+  if (core_converse.api.settings.get("authentication") !== core_converse.ANONYMOUS && !strophe["e" /* Strophe */].getResourceFromJid(jid)) {
     jid = jid.toLowerCase() + connection_Connection.generateResource();
   }
 
-  converse_core_converse.jid = jid;
-  converse_core_converse.bare_jid = strophe["e" /* Strophe */].getBareJidFromJid(jid);
-  converse_core_converse.resource = strophe["e" /* Strophe */].getResourceFromJid(jid);
-  converse_core_converse.domain = strophe["e" /* Strophe */].getDomainFromJid(jid);
+  core_converse.jid = jid;
+  core_converse.bare_jid = strophe["e" /* Strophe */].getBareJidFromJid(jid);
+  core_converse.resource = strophe["e" /* Strophe */].getResourceFromJid(jid);
+  core_converse.domain = strophe["e" /* Strophe */].getDomainFromJid(jid);
 
-  converse_core_converse.session.save({
+  core_converse.session.save({
     'jid': jid,
-    'bare_jid': converse_core_converse.bare_jid,
-    'resource': converse_core_converse.resource,
-    'domain': converse_core_converse.domain,
+    'bare_jid': core_converse.bare_jid,
+    'resource': core_converse.resource,
+    'domain': core_converse.domain,
     // We use the `active` flag to determine whether we should use the values from sessionStorage.
     // When "cloning" a tab (e.g. via middle-click), the `active` flag will be set and we'll create
     // a new empty user session, otherwise it'll be false and we can re-use the user session.
@@ -72441,7 +76358,7 @@ function saveJIDtoSession(jid) {
   // the new resource is found by Strophe.js and sent to the XMPP server.
 
 
-  converse_core_converse.connection.jid = jid;
+  core_converse.connection.jid = jid;
 }
 /**
  * Stores the passed in JID for the current user, potentially creating a
@@ -72458,14 +76375,14 @@ function saveJIDtoSession(jid) {
  */
 
 
-converse_core_converse.setUserJID = async function (jid) {
+core_converse.setUserJID = async function (jid) {
   await initSession(jid);
   /**
    * Triggered whenever the user's JID has been updated
    * @event _converse#setUserJID
    */
 
-  converse_core_converse.api.trigger('setUserJID');
+  core_converse.api.trigger('setUserJID');
 
   return jid;
 };
@@ -72482,9 +76399,9 @@ function setUpXMLLogging() {
 
   strophe["e" /* Strophe */].error = msg => headless_log.error(msg);
 
-  converse_core_converse.connection.xmlInput = body => headless_log.debug(body.outerHTML, 'color: darkgoldenrod');
+  core_converse.connection.xmlInput = body => headless_log.debug(body.outerHTML, 'color: darkgoldenrod');
 
-  converse_core_converse.connection.xmlOutput = body => headless_log.debug(body.outerHTML, 'color: darkcyan');
+  core_converse.connection.xmlOutput = body => headless_log.debug(body.outerHTML, 'color: darkcyan');
 }
 
 async function getLoginCredentials() {
@@ -72514,7 +76431,7 @@ async function getLoginCredentialsFromBrowser() {
     });
 
     if (creds && creds.type == 'password' && utils_core.isValidJID(creds.id)) {
-      await converse_core_converse.setUserJID(creds.id);
+      await core_converse.setUserJID(creds.id);
       return {
         'jid': creds.id,
         'password': creds.password
@@ -72530,35 +76447,35 @@ async function getLoginCredentialsFromBrowser() {
 async function cleanup() {
   var _converse$connection4;
 
-  await converse_core_api.trigger('cleanup', {
+  await core_api.trigger('cleanup', {
     'synchronous': true
   });
 
-  converse_core_converse.router.history.stop();
+  core_converse.router.history.stop();
 
-  converse_core_unregisterGlobalEventHandlers();
-  (_converse$connection4 = converse_core_converse.connection) === null || _converse$connection4 === void 0 ? void 0 : _converse$connection4.reset();
+  core_unregisterGlobalEventHandlers();
+  (_converse$connection4 = core_converse.connection) === null || _converse$connection4 === void 0 ? void 0 : _converse$connection4.reset();
 
-  converse_core_converse.stopListening();
+  core_converse.stopListening();
 
-  converse_core_converse.off();
+  core_converse.off();
 
-  if (converse_core_converse.promises['initialized'].isResolved) {
-    converse_core_api.promises.add('initialized');
+  if (core_converse.promises['initialized'].isResolved) {
+    core_api.promises.add('initialized');
   }
 }
 
 function fetchLoginCredentials(wait = 0) {
   return new Promise(lodash_es_debounce((resolve, reject) => {
     const xhr = new XMLHttpRequest();
-    xhr.open('GET', converse_core_api.settings.get("credentials_url"), true);
+    xhr.open('GET', core_api.settings.get("credentials_url"), true);
     xhr.setRequestHeader('Accept', 'application/json, text/javascript');
 
     xhr.onload = () => {
       if (xhr.status >= 200 && xhr.status < 400) {
         const data = JSON.parse(xhr.responseText);
 
-        converse_core_converse.setUserJID(data.jid).then(() => {
+        core_converse.setUserJID(data.jid).then(() => {
           resolve({
             jid: data.jid,
             password: data.password
@@ -72574,7 +76491,7 @@ function fetchLoginCredentials(wait = 0) {
   }, wait));
 }
 
-converse_core_converse.saveWindowState = function (ev) {
+core_converse.saveWindowState = function (ev) {
   // XXX: eventually we should be able to just use
   // document.visibilityState (when we drop support for older
   // browsers).
@@ -72595,7 +76512,7 @@ converse_core_converse.saveWindowState = function (ev) {
     state = document.hidden ? "hidden" : "visible";
   }
 
-  converse_core_converse.windowState = state;
+  core_converse.windowState = state;
   /**
       * Triggered when window state has changed.
       * Used to determine when a user left the page and when came back.
@@ -72605,15 +76522,15 @@ converse_core_converse.saveWindowState = function (ev) {
       * @example _converse.api.listen.on('windowStateChanged', obj => { ... });
       */
 
-  converse_core_api.trigger('windowStateChanged', {
+  core_api.trigger('windowStateChanged', {
     state
   });
 };
 
-function converse_core_registerGlobalEventHandlers() {
-  document.addEventListener("visibilitychange", converse_core_converse.saveWindowState);
+function core_registerGlobalEventHandlers() {
+  document.addEventListener("visibilitychange", core_converse.saveWindowState);
 
-  converse_core_converse.saveWindowState({
+  core_converse.saveWindowState({
     'type': document.hidden ? "blur" : "focus"
   }); // Set initial state
 
@@ -72627,22 +76544,22 @@ function converse_core_registerGlobalEventHandlers() {
    */
 
 
-  converse_core_api.trigger('registeredGlobalEventHandlers');
+  core_api.trigger('registeredGlobalEventHandlers');
 }
 
-function converse_core_unregisterGlobalEventHandlers() {
-  document.removeEventListener("visibilitychange", converse_core_converse.saveWindowState);
-  converse_core_api.trigger('unregisteredGlobalEventHandlers');
+function core_unregisterGlobalEventHandlers() {
+  document.removeEventListener("visibilitychange", core_converse.saveWindowState);
+  core_api.trigger('unregisteredGlobalEventHandlers');
 }
 
-converse_core_converse.ConnectionFeedback = model_Model.extend({
+core_converse.ConnectionFeedback = model_Model.extend({
   defaults: {
     'connection_status': strophe["e" /* Strophe */].Status.DISCONNECTED,
     'message': ''
   },
 
   initialize() {
-    this.on('change', () => converse_core_api.trigger('connfeedback', converse_core_converse.connfeedback));
+    this.on('change', () => core_api.trigger('connfeedback', core_converse.connfeedback));
   }
 
 });
@@ -72653,11 +76570,11 @@ function setUnloadEvent() {
     // gets thrown when the page is cached and not just
     // closed/destroyed. It's the only viable event on mobile Safari.
     // https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
-    converse_core_converse.unloadevent = 'pagehide';
+    core_converse.unloadevent = 'pagehide';
   } else if ('onbeforeunload' in window) {
-    converse_core_converse.unloadevent = 'beforeunload';
+    core_converse.unloadevent = 'beforeunload';
   } else if ('onunload' in window) {
-    converse_core_converse.unloadevent = 'unload';
+    core_converse.unloadevent = 'unload';
   }
 }
 
@@ -72719,19 +76636,19 @@ Object.assign(converse, {
     await cleanup();
     setUnloadEvent();
     initSettings(settings);
-    converse_core_converse.strict_plugin_dependencies = settings.strict_plugin_dependencies; // Needed by pluggable.js
+    core_converse.strict_plugin_dependencies = settings.strict_plugin_dependencies; // Needed by pluggable.js
 
-    headless_log.setLogLevel(converse_core_api.settings.get("loglevel"));
+    headless_log.setLogLevel(core_api.settings.get("loglevel"));
 
-    if (converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
-      if (converse_core_api.settings.get("auto_login") && !converse_core_api.settings.get('jid')) {
+    if (core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
+      if (core_api.settings.get("auto_login") && !core_api.settings.get('jid')) {
         throw new Error("Config Error: you need to provide the server's " + "domain via the 'jid' option when using anonymous " + "authentication with auto_login.");
       }
     }
 
-    converse_core_converse.router.route(/^converse\?loglevel=(debug|info|warn|error|fatal)$/, 'loglevel', l => headless_log.setLogLevel(l));
+    core_converse.router.route(/^converse\?loglevel=(debug|info|warn|error|fatal)$/, 'loglevel', l => headless_log.setLogLevel(l));
 
-    converse_core_converse.connfeedback = new converse_core_converse.ConnectionFeedback();
+    core_converse.connfeedback = new core_converse.ConnectionFeedback();
     /* When reloading the page:
      * For new sessions, we need to send out a presence stanza to notify
      * the server/network that we're online.
@@ -72740,22 +76657,22 @@ Object.assign(converse, {
      * https://github.com/conversejs/converse.js/issues/521
      */
 
-    converse_core_converse.send_initial_presence = true;
+    core_converse.send_initial_presence = true;
     await initSessionStorage();
-    initClientConfig();
+    await initClientConfig();
     await i18n.initialize();
     initPlugins();
-    converse_core_registerGlobalEventHandlers();
-    !History.started && converse_core_converse.router.history.start();
+    core_registerGlobalEventHandlers();
+    !History.started && core_converse.router.history.start();
 
-    if (converse_core_api.settings.get("idle_presence_timeout") > 0) {
-      converse_core_api.listen.on('addClientFeatures', () => converse_core_api.disco.own.features.add(strophe["e" /* Strophe */].NS.IDLE));
+    if (core_api.settings.get("idle_presence_timeout") > 0) {
+      core_api.listen.on('addClientFeatures', () => core_api.disco.own.features.add(strophe["e" /* Strophe */].NS.IDLE));
     }
 
-    const plugins = converse_core_converse.pluggable.plugins;
+    const plugins = core_converse.pluggable.plugins;
 
-    if (converse_core_api.settings.get("auto_login") || converse_core_api.settings.get("keepalive") && lodash_es_invoke(plugins['converse-bosh'], 'enabled')) {
-      await converse_core_api.user.login(null, null, true);
+    if (core_api.settings.get("auto_login") || core_api.settings.get("keepalive") && lodash_es_invoke(plugins['converse-bosh'], 'enabled')) {
+      await core_api.user.login(null, null, true);
     }
     /**
      * Triggered once converse.initialize has finished.
@@ -72763,10 +76680,10 @@ Object.assign(converse, {
      */
 
 
-    converse_core_api.trigger('initialized');
+    core_api.trigger('initialized');
 
-    if (converse_core_converse.isTestEnv()) {
-      return converse_core_converse;
+    if (core_converse.isTestEnv()) {
+      return core_converse;
     }
   },
 
@@ -72801,10 +76718,10 @@ Object.assign(converse, {
     add(name, plugin) {
       plugin.__name__ = name;
 
-      if (converse_core_converse.pluggable.plugins[name] !== undefined) {
+      if (core_converse.pluggable.plugins[name] !== undefined) {
         throw new TypeError("Error: plugin with name \"".concat(name, "\" has already been ") + 'registered!');
       } else {
-        converse_core_converse.pluggable.plugins[name] = plugin;
+        core_converse.pluggable.plugins[name] = plugin;
       }
     }
 
@@ -72833,7 +76750,7 @@ Object.assign(converse, {
     $msg: strophe["c" /* $msg */],
     $pres: strophe["d" /* $pres */],
     'utils': utils_core,
-    Collection: collection_Collection,
+    Collection: Collection,
     CustomElement: element_CustomElement,
     Model: model_Model,
     Promise,
@@ -72855,28 +76772,31 @@ Object.assign(converse, {
  * @example window.addEventListener('converse-loaded', () => converse.initialize());
  */
 
-const converse_core_ev = new CustomEvent('converse-loaded');
-converse_core_ev.converse = converse;
-window.dispatchEvent(converse_core_ev);
-// CONCATENATED MODULE: ./src/headless/converse-adhoc.js
+const core_ev = new CustomEvent('converse-loaded', {
+  'detail': {
+    converse
+  }
+});
+window.dispatchEvent(core_ev);
+// CONCATENATED MODULE: ./src/headless/plugins/adhoc.js
 
 
 
 
 const {
-  Strophe: converse_adhoc_Strophe
+  Strophe: adhoc_Strophe
 } = converse.env;
 
-let converse_adhoc_converse, converse_adhoc_api;
+let adhoc_converse, adhoc_api;
 
-converse_adhoc_Strophe.addNamespace('ADHOC', 'http://jabber.org/protocol/commands');
+adhoc_Strophe.addNamespace('ADHOC', 'http://jabber.org/protocol/commands');
 
 function parseForCommands(stanza) {
-  const items = sizzle_default()("query[xmlns=\"".concat(converse_adhoc_Strophe.NS.DISCO_ITEMS, "\"][node=\"").concat(converse_adhoc_Strophe.NS.ADHOC, "\"] item"), stanza);
+  const items = sizzle_default()("query[xmlns=\"".concat(adhoc_Strophe.NS.DISCO_ITEMS, "\"][node=\"").concat(adhoc_Strophe.NS.ADHOC, "\"] item"), stanza);
   return items.map(utils_stanza.getAttributes);
 }
 
-const adhoc_api = {
+const adhoc_adhoc_api = {
   /**
    * The XEP-0050 Ad-Hoc Commands API
    *
@@ -72894,7 +76814,7 @@ const adhoc_api = {
       let commands = [];
 
       try {
-        commands = parseForCommands(await converse_adhoc_api.disco.items(to_jid, converse_adhoc_Strophe.NS.ADHOC));
+        commands = parseForCommands(await adhoc_api.disco.items(to_jid, adhoc_Strophe.NS.ADHOC));
       } catch (e) {
         if (e === null) {
           headless_log.error("Error: timeout while fetching ad-hoc commands for ".concat(to_jid));
@@ -72913,15 +76833,36 @@ converse.plugins.add('converse-adhoc', {
   dependencies: ["converse-disco"],
 
   initialize() {
-    converse_adhoc_converse = this._converse;
-    converse_adhoc_api = converse_adhoc_converse.api;
-    Object.assign(converse_adhoc_api, adhoc_api);
+    adhoc_converse = this._converse;
+    adhoc_api = adhoc_converse.api;
+    Object.assign(adhoc_api, adhoc_adhoc_api);
+  }
+
+});
+/* harmony default export */ var adhoc = (adhoc_adhoc_api);
+// CONCATENATED MODULE: ./src/headless/plugins/chat/model-with-contact.js
+
+
+const model_with_contact_u = converse.env.utils;
+const ModelWithContact = model_Model.extend({
+  initialize() {
+    this.rosterContactAdded = model_with_contact_u.getResolveablePromise();
+  },
+
+  async setRosterContact(jid) {
+    const contact = await core_api.contacts.get(jid);
+
+    if (contact) {
+      this.contact = contact;
+      this.set('nickname', contact.get('nickname'));
+      this.rosterContactAdded.resolve();
+    }
   }
 
 });
-/* harmony default export */ var converse_adhoc = (adhoc_api);
+/* harmony default export */ var model_with_contact = (ModelWithContact);
 // EXTERNAL MODULE: ./src/headless/node_modules/filesize/lib/filesize.min.js
-var filesize_min = __webpack_require__(128);
+var filesize_min = __webpack_require__(169);
 var filesize_min_default = /*#__PURE__*/__webpack_require__.n(filesize_min);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js
@@ -72991,9 +76932,9 @@ function createFind(findIndexFunc) {
  * _.find(users, 'active');
  * // => object for 'barney'
  */
-var find_find = _createFind(lodash_es_findIndex);
+var find = _createFind(lodash_es_findIndex);
 
-/* harmony default export */ var lodash_es_find = (find_find);
+/* harmony default export */ var lodash_es_find = (find);
 
 // CONCATENATED MODULE: ./node_modules/lodash-es/isMatch.js
 
@@ -73033,12 +76974,7 @@ function isMatch(object, source) {
 
 /* harmony default export */ var lodash_es_isMatch = (isMatch);
 
-// CONCATENATED MODULE: ./src/headless/converse-chat.js
-/**
- * @module converse-chat
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- */
+// CONCATENATED MODULE: ./src/headless/plugins/chat/model.js
 
 
 
@@ -73047,1387 +76983,1607 @@ function isMatch(object, source) {
 
 
 const {
-  $msg: converse_chat_$msg,
-  Strophe: converse_chat_Strophe,
-  sizzle: converse_chat_sizzle,
-  utils
+  Strophe: model_Strophe,
+  $msg: model_$msg
 } = converse.env;
-const converse_chat_u = converse.env.utils;
-converse.plugins.add('converse-chat', {
-  /* Optional dependencies are other plugins which might be
-   * overridden or relied upon, and therefore need to be loaded before
-   * this plugin. They are called "optional" because they might not be
-   * available, in which case any overrides applicable to them will be
-   * ignored.
-   *
-   * It's possible however to make optional dependencies non-optional.
-   * If the setting "strict_plugin_dependencies" is set to true,
-   * an error will be raised if the plugin is not found.
-   *
-   * NB: These plugins need to have already been loaded via require.js.
-   */
-  dependencies: ["converse-chatboxes", "converse-disco"],
-
-  initialize() {
-    /* The initialize function gets called as soon as the plugin is
-     * loaded by converse.js's plugin machinery.
-     */
-    const {
-      __
-    } = converse_core_converse; // Configuration values for this plugin
-    // ====================================
-    // Refer to docs/source/configuration.rst for explanations of these
-    // configuration settings.
+const model_u = converse.env.utils;
+/**
+ * Represents an open/ongoing chat conversation.
+ *
+ * @class
+ * @namespace _converse.ChatBox
+ * @memberOf _converse
+ */
 
-    converse_core_api.settings.extend({
-      'allow_message_corrections': 'all',
-      'allow_message_retraction': 'all',
-      'auto_join_private_chats': [],
-      'clear_messages_on_reconnection': false,
-      'filter_by_resource': false,
-      'send_chat_state_notifications': true
-    });
-    const ModelWithContact = model_Model.extend({
-      initialize() {
-        this.rosterContactAdded = converse_chat_u.getResolveablePromise();
-      },
+const ChatBox = model_with_contact.extend({
+  defaults() {
+    return {
+      'bookmarked': false,
+      'chat_state': undefined,
+      'hidden': core_converse.isUniView() && !core_api.settings.get('singleton'),
+      'message_type': 'chat',
+      'nickname': undefined,
+      'num_unread': 0,
+      'time_sent': new Date(0).toISOString(),
+      'time_opened': this.get('time_opened') || new Date().getTime(),
+      'type': core_converse.PRIVATE_CHAT_TYPE,
+      'url': ''
+    };
+  },
 
-      async setRosterContact(jid) {
-        const contact = await converse_core_api.contacts.get(jid);
+  async initialize() {
+    this.initialized = model_u.getResolveablePromise();
+    model_with_contact.prototype.initialize.apply(this, arguments);
+    const jid = this.get('jid');
 
-        if (contact) {
-          this.contact = contact;
-          this.set('nickname', contact.get('nickname'));
-          this.rosterContactAdded.resolve();
-        }
-      }
+    if (!jid) {
+      // XXX: The `validate` method will prevent this model
+      // from being persisted if there's no jid, but that gets
+      // called after model instantiation, so we have to deal
+      // with invalid models here also.
+      // This happens when the controlbox is in browser storage,
+      // but we're in embedded mode.
+      return;
+    }
 
+    this.set({
+      'box_id': "box-".concat(jid)
     });
+    this.initNotifications();
+    this.initMessages();
+
+    if (this.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
+      this.presence = core_converse.presences.findWhere({
+        'jid': jid
+      }) || core_converse.presences.create({
+        'jid': jid
+      });
+      await this.setRosterContact(jid);
+    }
+
+    this.on('change:chat_state', this.sendChatState, this);
+    await this.fetchMessages();
     /**
-     * Represents a non-MUC message. These can be either `chat` messages or
-     * `headline` messages.
-     * @class
-     * @namespace _converse.Message
-     * @memberOf _converse
-     * @example const msg = new _converse.Message({'message': 'hello world!'});
+     * Triggered once a {@link _converse.ChatBox} has been created and initialized.
+     * @event _converse#chatBoxInitialized
+     * @type { _converse.ChatBox}
+     * @example _converse.api.listen.on('chatBoxInitialized', model => { ... });
      */
 
-    converse_core_converse.Message = ModelWithContact.extend({
-      defaults() {
-        return {
-          'msgid': converse_chat_u.getUniqueId(),
-          'time': new Date().toISOString(),
-          'is_ephemeral': false
-        };
-      },
-
-      async initialize() {
-        if (!this.checkValidity()) {
-          return;
-        }
+    await core_api.trigger('chatBoxInitialized', this, {
+      'Synchronous': true
+    });
+    this.initialized.resolve();
+  },
 
-        this.initialized = converse_chat_u.getResolveablePromise();
+  getMessagesCollection() {
+    return new core_converse.Messages();
+  },
 
-        if (this.get('type') === 'chat') {
-          ModelWithContact.prototype.initialize.apply(this, arguments);
-          this.setRosterContact(converse_chat_Strophe.getBareJidFromJid(this.get('from')));
-        }
+  getMessagesCacheKey() {
+    return "converse.messages-".concat(this.get('jid'), "-").concat(core_converse.bare_jid);
+  },
 
-        if (this.get('file')) {
-          this.on('change:put', this.uploadFile, this);
-        }
+  initMessages() {
+    this.messages = this.getMessagesCollection();
+    this.messages.fetched = model_u.getResolveablePromise();
+    this.messages.fetched.then(() => {
+      /**
+       * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
+       * `sessionStorage` but **NOT** from the server.
+       * @event _converse#afterMessagesFetched
+       * @type {_converse.ChatBoxView | _converse.ChatRoomView}
+       * @example _converse.api.listen.on('afterMessagesFetched', view => { ... });
+       */
+      core_api.trigger('afterMessagesFetched', this);
+    });
+    this.messages.chatbox = this;
+    this.messages.browserStorage = core_converse.createStore(this.getMessagesCacheKey());
+    this.listenTo(this.messages, 'change:upload', message => {
+      if (message.get('upload') === core_converse.SUCCESS) {
+        core_api.send(this.createMessageStanza(message));
+      }
+    });
+  },
 
-        this.setTimerForEphemeralMessage();
-        /**
-         * Triggered once a {@link _converse.Message} has been created and initialized.
-         * @event _converse#messageInitialized
-         * @type { _converse.Message}
-         * @example _converse.api.listen.on('messageInitialized', model => { ... });
-         */
+  initNotifications() {
+    this.notifications = new model_Model();
+  },
 
-        await converse_core_api.trigger('messageInitialized', this, {
-          'Synchronous': true
-        });
-        this.initialized.resolve();
-      },
+  afterMessagesFetched() {
+    /**
+     * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
+     * `sessionStorage` but **NOT** from the server.
+     * @event _converse#afterMessagesFetched
+     * @type {_converse.ChatBox | _converse.ChatRoom}
+     * @example _converse.api.listen.on('afterMessagesFetched', view => { ... });
+     */
+    core_api.trigger('afterMessagesFetched', this);
+  },
 
-      /**
-       * Sets an auto-destruct timer for this message, if it's is_ephemeral.
-       * @private
-       * @method _converse.Message#setTimerForEphemeralMessage
-       * @returns { Boolean } - Indicates whether the message is
-       *   ephemeral or not, and therefore whether the timer was set or not.
-       */
-      setTimerForEphemeralMessage() {
-        const setTimer = () => {
-          this.ephemeral_timer = window.setTimeout(this.safeDestroy.bind(this), 10000);
-        };
+  fetchMessages() {
+    if (this.messages.fetched_flag) {
+      headless_log.info("Not re-fetching messages for ".concat(this.get('jid')));
+      return;
+    }
 
-        if (this.isEphemeral()) {
-          setTimer();
-          return true;
-        } else {
-          this.on('change:is_ephemeral', () => this.isEphemeral() ? setTimer() : clearTimeout(this.ephemeral_timer));
-          return false;
-        }
+    this.messages.fetched_flag = true;
+    const resolve = this.messages.fetched.resolve;
+    this.messages.fetch({
+      'add': true,
+      'success': () => {
+        this.afterMessagesFetched();
+        resolve();
       },
+      'error': () => {
+        this.afterMessagesFetched();
+        resolve();
+      }
+    });
+    return this.messages.fetched;
+  },
 
-      checkValidity() {
-        if (Object.keys(this.attributes).length === 3) {
-          // XXX: This is an empty message with only the 3 default values.
-          // This seems to happen when saving a newly created message
-          // fails for some reason.
-          // TODO: This is likely fixable by setting `wait` when
-          // creating messages. See the wait-for-messages branch.
-          this.validationError = "Empty message";
-          this.safeDestroy();
-          return false;
-        }
+  async handleErrorMessageStanza(stanza) {
+    const {
+      __
+    } = core_converse;
+    const attrs = await utils_stanza.parseMessage(stanza, core_converse);
 
-        return true;
-      },
+    if (!(await this.shouldShowErrorMessage(attrs))) {
+      return;
+    }
 
-      /**
-       * Determines whether this messsage may be retracted by the current user.
-       * @private
-       * @method _converse.Messages#mayBeRetracted
-       * @returns { Boolean }
-       */
-      mayBeRetracted() {
-        const is_own_message = this.get('sender') === 'me';
-        return is_own_message && ['all', 'own'].includes(converse_core_api.settings.get('allow_message_retraction'));
-      },
+    const message = this.getMessageReferencedByError(attrs);
 
-      safeDestroy() {
-        try {
-          this.destroy();
-        } catch (e) {
-          headless_log.error(e);
-        }
-      },
+    if (message) {
+      const new_attrs = {
+        'error': attrs.error,
+        'error_condition': attrs.error_condition,
+        'error_text': attrs.error_text,
+        'error_type': attrs.error_type,
+        'editable': false
+      };
 
-      isEphemeral() {
-        return this.get('is_ephemeral');
-      },
+      if (attrs.msgid === message.get('retraction_id')) {
+        // The error message refers to a retraction
+        new_attrs.retraction_id = undefined;
 
-      getDisplayName() {
-        if (this.get('type') === 'groupchat') {
-          return this.get('nick');
-        } else if (this.contact) {
-          return this.contact.getDisplayName();
-        } else if (this.vcard) {
-          return this.vcard.getDisplayName();
+        if (!attrs.error) {
+          if (attrs.error_condition === 'forbidden') {
+            new_attrs.error = __("You're not allowed to retract your message.");
+          } else {
+            new_attrs.error = __('Sorry, an error occurred while trying to retract your message.');
+          }
+        }
+      } else if (!attrs.error) {
+        if (attrs.error_condition === 'forbidden') {
+          new_attrs.error = __("You're not allowed to send a message.");
         } else {
-          return this.get('from');
+          new_attrs.error = __('Sorry, an error occurred while trying to send your message.');
         }
-      },
+      }
 
-      getMessageText() {
-        if (this.get('is_encrypted')) {
-          return this.get('plaintext') || this.get('body') || __('Undecryptable OMEMO message');
-        }
+      message.save(new_attrs);
+    } else {
+      this.createMessage(attrs);
+    }
+  },
 
-        return this.get('message');
-      },
+  /**
+   * Queue an incoming `chat` message stanza for processing.
+   * @async
+   * @private
+   * @method _converse.ChatRoom#queueMessage
+   * @param { Promise<MessageAttributes> } attrs - A promise which resolves to the message attributes
+   */
+  queueMessage(attrs) {
+    this.msg_chain = (this.msg_chain || this.messages.fetched).then(() => this.onMessage(attrs)).catch(e => headless_log.error(e));
+    return this.msg_chain;
+  },
 
-      isMeCommand() {
-        const text = this.getMessageText();
+  /**
+   * @async
+   * @private
+   * @method _converse.ChatRoom#onMessage
+   * @param { MessageAttributes } attrs_promse - A promise which resolves to the message attributes.
+   */
+  async onMessage(attrs) {
+    attrs = await attrs;
 
-        if (!text) {
-          return false;
-        }
+    if (model_u.isErrorObject(attrs)) {
+      attrs.stanza && headless_log.error(attrs.stanza);
+      return headless_log.error(attrs.message);
+    }
 
-        return text.startsWith('/me ');
-      },
+    const message = this.getDuplicateMessage(attrs);
 
-      sendSlotRequestStanza() {
-        /* Send out an IQ stanza to request a file upload slot.
-         *
-         * https://xmpp.org/extensions/xep-0363.html#request
-         */
-        if (!this.file) {
-          return Promise.reject(new Error("file is undefined"));
-        }
+    if (message) {
+      this.updateMessage(message, attrs);
+    } else if (!this.handleReceipt(attrs) && !this.handleChatMarker(attrs) && !(await this.handleRetraction(attrs))) {
+      this.setEditable(attrs, attrs.time);
 
-        const iq = converse.env.$iq({
-          'from': converse_core_converse.jid,
-          'to': this.get('slot_request_url'),
-          'type': 'get'
-        }).c('request', {
-          'xmlns': converse_chat_Strophe.NS.HTTPUPLOAD,
-          'filename': this.file.name,
-          'size': this.file.size,
-          'content-type': this.file.type
+      if (attrs['chat_state'] && attrs.sender === 'them') {
+        this.notifications.set('chat_state', attrs.chat_state);
+      }
+
+      if (model_u.shouldCreateMessage(attrs)) {
+        const msg = this.handleCorrection(attrs) || (await this.createMessage(attrs));
+        this.notifications.set({
+          'chat_state': null
         });
-        return converse_core_api.sendIQ(iq);
-      },
+        this.handleUnreadMessage(msg);
+      }
+    }
+  },
 
-      async getRequestSlotURL() {
-        let stanza;
+  async clearMessages() {
+    try {
+      await this.messages.clearStore();
+    } catch (e) {
+      this.messages.trigger('reset');
+      headless_log.error(e);
+    } finally {
+      delete this.msg_chain;
+      delete this.messages.fetched_flag;
+      this.messages.fetched = model_u.getResolveablePromise();
+    }
+  },
 
-        try {
-          stanza = await this.sendSlotRequestStanza();
-        } catch (e) {
-          headless_log.error(e);
-          return this.save({
-            'type': 'error',
-            'message': __("Sorry, could not determine upload URL."),
-            'is_ephemeral': true
-          });
-        }
+  async close() {
+    try {
+      await new Promise((success, reject) => {
+        return this.destroy({
+          success,
+          'error': (m, e) => reject(e)
+        });
+      });
+    } catch (e) {
+      headless_log.error(e);
+    } finally {
+      if (core_api.settings.get('clear_messages_on_reconnection')) {
+        await this.clearMessages();
+      }
+    }
+  },
 
-        const slot = stanza.querySelector('slot');
+  announceReconnection() {
+    /**
+     * Triggered whenever a `_converse.ChatBox` instance has reconnected after an outage
+     * @event _converse#onChatReconnected
+     * @type {_converse.ChatBox | _converse.ChatRoom}
+     * @example _converse.api.listen.on('onChatReconnected', chatbox => { ... });
+     */
+    core_api.trigger('chatReconnected', this);
+  },
 
-        if (slot) {
-          this.save({
-            'get': slot.querySelector('get').getAttribute('url'),
-            'put': slot.querySelector('put').getAttribute('url')
-          });
-        } else {
-          return this.save({
-            'type': 'error',
-            'message': __("Sorry, could not determine file upload URL."),
-            'is_ephemeral': true
-          });
-        }
-      },
+  async onReconnection() {
+    if (core_api.settings.get('clear_messages_on_reconnection')) {
+      await this.clearMessages();
+    }
+
+    this.announceReconnection();
+  },
 
-      uploadFile() {
-        const xhr = new XMLHttpRequest();
+  validate(attrs) {
+    if (!attrs.jid) {
+      return 'Ignored ChatBox without JID';
+    }
 
-        xhr.onreadystatechange = () => {
-          if (xhr.readyState === XMLHttpRequest.DONE) {
-            headless_log.info("Status: " + xhr.status);
+    const room_jids = core_converse.auto_join_rooms.map(s => lodash_es_isObject(s) ? s.jid : s);
 
-            if (xhr.status === 200 || xhr.status === 201) {
-              this.save({
-                'upload': converse_core_converse.SUCCESS,
-                'oob_url': this.get('get'),
-                'message': this.get('get')
-              });
-            } else {
-              xhr.onerror();
-            }
-          }
-        };
+    const auto_join = core_api.settings.get('auto_join_private_chats').concat(room_jids);
 
-        xhr.upload.addEventListener("progress", evt => {
-          if (evt.lengthComputable) {
-            this.set('progress', evt.loaded / evt.total);
-          }
-        }, false);
+    if (core_api.settings.get("singleton") && !auto_join.includes(attrs.jid) && !core_api.settings.get('auto_join_on_invite')) {
+      const msg = "".concat(attrs.jid, " is not allowed because singleton is true and it's not being auto_joined");
+      headless_log.warn(msg);
+      return msg;
+    }
+  },
 
-        xhr.onerror = () => {
-          let message;
+  getDisplayName() {
+    if (this.contact) {
+      return this.contact.getDisplayName();
+    } else if (this.vcard) {
+      return this.vcard.getDisplayName();
+    } else {
+      return this.get('jid');
+    }
+  },
 
-          if (xhr.responseText) {
-            message = __('Sorry, could not succesfully upload your file. Your server’s response: "%1$s"', xhr.responseText);
-          } else {
-            message = __('Sorry, could not succesfully upload your file.');
-          }
+  async createMessageFromError(error) {
+    if (error instanceof core_converse.TimeoutError) {
+      const msg = await this.createMessage({
+        'type': 'error',
+        'message': error.message,
+        'retry_event_id': error.retry_event_id
+      });
+      msg.error = error;
+    }
+  },
 
-          this.save({
-            'type': 'error',
-            'upload': converse_core_converse.FAILURE,
-            'message': message,
-            'is_ephemeral': true
-          });
-        };
+  getOldestMessage() {
+    for (let i = 0; i < this.messages.length; i++) {
+      const message = this.messages.at(i);
 
-        xhr.open('PUT', this.get('put'), true);
-        xhr.setRequestHeader("Content-type", this.file.type);
-        xhr.send(this.file);
+      if (message.get('type') === this.get('message_type')) {
+        return message;
       }
+    }
+  },
 
-    });
-    converse_core_converse.Messages = collection_Collection.extend({
-      model: converse_core_converse.Message,
-      comparator: 'time'
-    });
-    /**
-     * Represents an open/ongoing chat conversation.
-     *
-     * @class
-     * @namespace _converse.ChatBox
-     * @memberOf _converse
-     */
+  getMostRecentMessage() {
+    for (let i = this.messages.length - 1; i >= 0; i--) {
+      const message = this.messages.at(i);
 
-    converse_core_converse.ChatBox = ModelWithContact.extend({
-      messagesCollection: converse_core_converse.Messages,
+      if (message.get('type') === this.get('message_type')) {
+        return message;
+      }
+    }
+  },
 
-      defaults() {
-        return {
-          'bookmarked': false,
-          'chat_state': undefined,
-          'hidden': converse_core_converse.isUniView() && !converse_core_api.settings.get('singleton'),
-          'message_type': 'chat',
-          'nickname': undefined,
-          'num_unread': 0,
-          'time_sent': new Date(0).toISOString(),
-          'time_opened': this.get('time_opened') || new Date().getTime(),
-          'type': converse_core_converse.PRIVATE_CHAT_TYPE,
-          'url': ''
-        };
-      },
+  getUpdatedMessageAttributes(message, attrs) {
+    // Filter the attrs object, restricting it to only the `is_archived` key.
+    return (({
+      is_archived
+    }) => ({
+      is_archived
+    }))(attrs);
+  },
 
-      async initialize() {
-        this.initialized = converse_chat_u.getResolveablePromise();
-        ModelWithContact.prototype.initialize.apply(this, arguments);
-        const jid = this.get('jid');
+  updateMessage(message, attrs) {
+    const new_attrs = this.getUpdatedMessageAttributes(message, attrs);
+    new_attrs && message.save(new_attrs);
+  },
 
-        if (!jid) {
-          // XXX: The `validate` method will prevent this model
-          // from being persisted if there's no jid, but that gets
-          // called after model instantiation, so we have to deal
-          // with invalid models here also.
-          // This happens when the controlbox is in browser storage,
-          // but we're in embedded mode.
-          return;
-        }
+  /**
+   * Mutator for setting the chat state of this chat session.
+   * Handles clearing of any chat state notification timeouts and
+   * setting new ones if necessary.
+   * Timeouts are set when the  state being set is COMPOSING or PAUSED.
+   * After the timeout, COMPOSING will become PAUSED and PAUSED will become INACTIVE.
+   * See XEP-0085 Chat State Notifications.
+   * @private
+   * @method _converse.ChatBox#setChatState
+   * @param { string } state - The chat state (consts ACTIVE, COMPOSING, PAUSED, INACTIVE, GONE)
+   */
+  setChatState(state, options) {
+    if (this.chat_state_timeout !== undefined) {
+      window.clearTimeout(this.chat_state_timeout);
+      delete this.chat_state_timeout;
+    }
 
-        this.set({
-          'box_id': "box-".concat(jid)
-        });
-        this.initNotifications();
-        this.initMessages();
+    if (state === core_converse.COMPOSING) {
+      this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), core_converse.TIMEOUTS.PAUSED, core_converse.PAUSED);
+    } else if (state === core_converse.PAUSED) {
+      this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), core_converse.TIMEOUTS.INACTIVE, core_converse.INACTIVE);
+    }
 
-        if (this.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
-          this.presence = converse_core_converse.presences.findWhere({
-            'jid': jid
-          }) || converse_core_converse.presences.create({
-            'jid': jid
-          });
-          await this.setRosterContact(jid);
-        }
+    this.set('chat_state', state, options);
+    return this;
+  },
 
-        this.on('change:chat_state', this.sendChatState, this);
-        await this.fetchMessages();
-        /**
-         * Triggered once a {@link _converse.ChatBox} has been created and initialized.
-         * @event _converse#chatBoxInitialized
-         * @type { _converse.ChatBox}
-         * @example _converse.api.listen.on('chatBoxInitialized', model => { ... });
-         */
+  /**
+   * Given an error `<message>` stanza's attributes, find the saved message model which is
+   * referenced by that error.
+   * @param { Object } attrs
+   */
+  getMessageReferencedByError(attrs) {
+    const id = attrs.msgid;
+    return id && this.messages.models.find(m => [m.get('msgid'), m.get('retraction_id')].includes(id));
+  },
 
-        await converse_core_api.trigger('chatBoxInitialized', this, {
-          'Synchronous': true
-        });
-        this.initialized.resolve();
-      },
+  /**
+   * @private
+   * @method _converse.ChatBox#shouldShowErrorMessage
+   * @returns {boolean}
+   */
+  shouldShowErrorMessage(attrs) {
+    const msg = this.getMessageReferencedByError(attrs);
 
-      getMessagesCacheKey() {
-        return "converse.messages-".concat(this.get('jid'), "-").concat(converse_core_converse.bare_jid);
-      },
+    if (!msg && !attrs.body) {
+      // If the error refers to a message not included in our store,
+      // and it doesn't have a <body> tag, we assume that this was a
+      // CSI message (which we don't store).
+      // See https://github.com/conversejs/converse.js/issues/1317
+      return;
+    } // Gets overridden in ChatRoom
 
-      initMessages() {
-        this.messages = new this.messagesCollection();
-        this.messages.chatbox = this;
-        this.messages.browserStorage = converse_core_converse.createStore(this.getMessagesCacheKey());
-        this.listenTo(this.messages, 'change:upload', message => {
-          if (message.get('upload') === converse_core_converse.SUCCESS) {
-            converse_core_api.send(this.createMessageStanza(message));
-          }
-        });
-      },
 
-      initNotifications() {
-        this.notifications = new model_Model();
-      },
+    return true;
+  },
 
-      afterMessagesFetched() {
-        /**
-         * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
-         * `sessionStorage` but **NOT** from the server.
-         * @event _converse#afterMessagesFetched
-         * @type {_converse.ChatBox | _converse.ChatRoom}
-         * @example _converse.api.listen.on('afterMessagesFetched', view => { ... });
-         */
-        converse_core_api.trigger('afterMessagesFetched', this);
-      },
+  isSameUser(jid1, jid2) {
+    return model_u.isSameBareJID(jid1, jid2);
+  },
 
-      fetchMessages() {
-        if (this.messages.fetched) {
-          headless_log.info("Not re-fetching messages for ".concat(this.get('jid')));
-          return;
-        }
+  /**
+   * Looks whether we already have a retraction for this
+   * incoming message. If so, it's considered "dangling" because it
+   * probably hasn't been applied to anything yet, given that the
+   * relevant message is only coming in now.
+   * @private
+   * @method _converse.ChatBox#findDanglingRetraction
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMessage}
+   * @returns { _converse.Message }
+   */
+  findDanglingRetraction(attrs) {
+    if (!attrs.origin_id || !this.messages.length) {
+      return null;
+    } // Only look for dangling retractions if there are newer
+    // messages than this one, since retractions come after.
 
-        this.messages.fetched = converse_chat_u.getResolveablePromise();
-        const resolve = this.messages.fetched.resolve;
-        this.messages.fetch({
-          'add': true,
-          'success': () => {
-            this.afterMessagesFetched();
-            resolve();
-          },
-          'error': () => {
-            this.afterMessagesFetched();
-            resolve();
-          }
-        });
-        return this.messages.fetched;
-      },
 
-      async handleErrorMessageStanza(stanza) {
-        const attrs = await utils_stanza.parseMessage(stanza, converse_core_converse);
+    if (this.messages.last().get('time') > attrs.time) {
+      // Search from latest backwards
+      const messages = Array.from(this.messages.models);
+      messages.reverse();
+      return messages.find(({
+        attributes
+      }) => attributes.retracted_id === attrs.origin_id && attributes.from === attrs.from && !attributes.moderated_by);
+    }
+  },
 
-        if (!(await this.shouldShowErrorMessage(attrs))) {
-          return;
-        }
+  /**
+   * Handles message retraction based on the passed in attributes.
+   * @private
+   * @method _converse.ChatBox#handleRetraction
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMessage}
+   * @returns { Boolean } Returns `true` or `false` depending on
+   *  whether a message was retracted or not.
+   */
+  async handleRetraction(attrs) {
+    const RETRACTION_ATTRIBUTES = ['retracted', 'retracted_id', 'editable'];
 
-        const message = this.getMessageReferencedByError(attrs);
+    if (attrs.retracted) {
+      if (attrs.is_tombstone) {
+        return false;
+      }
 
-        if (message) {
-          const new_attrs = {
-            'error': attrs.error,
-            'error_condition': attrs.error_condition,
-            'error_text': attrs.error_text,
-            'error_type': attrs.error_type,
-            'editable': false
-          };
+      const message = this.messages.findWhere({
+        'origin_id': attrs.retracted_id,
+        'from': attrs.from
+      });
 
-          if (attrs.msgid === message.get('retraction_id')) {
-            // The error message refers to a retraction
-            new_attrs.retraction_id = undefined;
+      if (!message) {
+        attrs['dangling_retraction'] = true;
+        await this.createMessage(attrs);
+        return true;
+      }
 
-            if (!attrs.error) {
-              if (attrs.error_condition === 'forbidden') {
-                new_attrs.error = __("You're not allowed to retract your message.");
-              } else {
-                new_attrs.error = __('Sorry, an error occurred while trying to retract your message.');
-              }
-            }
-          } else if (!attrs.error) {
-            if (attrs.error_condition === 'forbidden') {
-              new_attrs.error = __("You're not allowed to send a message.");
-            } else {
-              new_attrs.error = __('Sorry, an error occurred while trying to send your message.');
-            }
-          }
+      message.save(lodash_es_pick(attrs, RETRACTION_ATTRIBUTES));
+      return true;
+    } else {
+      // Check if we have dangling retraction
+      const message = this.findDanglingRetraction(attrs);
 
-          message.save(new_attrs);
-        } else {
-          this.createMessage(attrs);
-        }
-      },
+      if (message) {
+        const retraction_attrs = lodash_es_pick(message.attributes, RETRACTION_ATTRIBUTES);
+        const new_attrs = Object.assign({
+          'dangling_retraction': false
+        }, attrs, retraction_attrs);
+        delete new_attrs['id']; // Delete id, otherwise a new cache entry gets created
 
-      /**
-       * Queue an incoming `chat` message stanza for processing.
-       * @async
-       * @private
-       * @method _converse.ChatRoom#queueMessage
-       * @param { Promise<MessageAttributes> } attrs - A promise which resolves to the message attributes
-       */
-      queueMessage(attrs) {
-        this.msg_chain = this.msg_chain || this.messages.fetched;
-        this.msg_chain = this.msg_chain.then(() => this.onMessage(attrs));
-        return this.msg_chain;
-      },
+        message.save(new_attrs);
+        return true;
+      }
+    }
 
-      /**
-       * @async
-       * @private
-       * @method _converse.ChatRoom#onMessage
-       * @param { MessageAttributes } attrs_promse - A promise which resolves to the message attributes.
-       */
-      async onMessage(attrs) {
-        attrs = await attrs;
+    return false;
+  },
 
-        if (converse_chat_u.isErrorObject(attrs)) {
-          attrs.stanza && headless_log.error(attrs.stanza);
-          return headless_log.error(attrs.message);
-        }
+  /**
+   * Determines whether the passed in message attributes represent a
+   * message which corrects a previously received message, or an
+   * older message which has already been corrected.
+   * In both cases, update the corrected message accordingly.
+   * @private
+   * @method _converse.ChatBox#handleCorrection
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMessage}
+   * @returns { _converse.Message|undefined } Returns the corrected
+   *  message or `undefined` if not applicable.
+   */
+  handleCorrection(attrs) {
+    if (!attrs.replace_id || !attrs.from) {
+      return;
+    }
 
-        const message = this.getDuplicateMessage(attrs);
+    const message = this.messages.findWhere({
+      'msgid': attrs.replace_id,
+      'from': attrs.from
+    });
 
-        if (message) {
-          this.updateMessage(message, attrs);
-        } else if (!this.handleReceipt(attrs) && !this.handleChatMarker(attrs) && !(await this.handleRetraction(attrs))) {
-          this.setEditable(attrs, attrs.time);
+    if (!message) {
+      return;
+    }
 
-          if (attrs['chat_state'] && attrs.sender === 'them') {
-            this.notifications.set('chat_state', attrs.chat_state);
-          }
+    const older_versions = message.get('older_versions') || {};
 
-          if (converse_chat_u.shouldCreateMessage(attrs)) {
-            const msg = this.handleCorrection(attrs) || (await this.createMessage(attrs));
-            this.notifications.set({
-              'chat_state': null
-            });
-            this.handleUnreadMessage(msg);
-          }
-        }
-      },
+    if (attrs.time < message.get('time') && message.get('edited')) {
+      // This is an older message which has been corrected afterwards
+      older_versions[attrs.time] = attrs['message'];
+      message.save({
+        'older_versions': older_versions
+      });
+    } else {
+      // This is a correction of an earlier message we already received
+      if (Object.keys(older_versions).length) {
+        older_versions[message.get('edited')] = message.get('message');
+      } else {
+        older_versions[message.get('time')] = message.get('message');
+      }
 
-      async clearMessages() {
-        try {
-          await this.messages.clearStore();
-        } catch (e) {
-          this.messages.trigger('reset');
-          headless_log.error(e);
-        } finally {
-          delete this.msg_chain;
-          delete this.messages.fetched;
-        }
-      },
+      attrs = Object.assign(attrs, {
+        'older_versions': older_versions
+      });
+      delete attrs['id']; // Delete id, otherwise a new cache entry gets created
 
-      async close() {
-        try {
-          await new Promise((success, reject) => {
-            return this.destroy({
-              success,
-              'error': (m, e) => reject(e)
-            });
-          });
-        } catch (e) {
-          headless_log.error(e);
-        } finally {
-          if (converse_core_api.settings.get('clear_messages_on_reconnection')) {
-            await this.clearMessages();
-          }
-        }
-      },
+      attrs['time'] = message.get('time');
+      message.save(attrs);
+    }
 
-      announceReconnection() {
-        /**
-         * Triggered whenever a `_converse.ChatBox` instance has reconnected after an outage
-         * @event _converse#onChatReconnected
-         * @type {_converse.ChatBox | _converse.ChatRoom}
-         * @example _converse.api.listen.on('onChatReconnected', chatbox => { ... });
-         */
-        converse_core_api.trigger('chatReconnected', this);
-      },
+    return message;
+  },
 
-      async onReconnection() {
-        if (converse_core_api.settings.get('clear_messages_on_reconnection')) {
-          await this.clearMessages();
-        }
+  /**
+   * Returns an already cached message (if it exists) based on the
+   * passed in attributes map.
+   * @private
+   * @method _converse.ChatBox#getDuplicateMessage
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMessage}
+   * @returns {Promise<_converse.Message>}
+   */
+  getDuplicateMessage(attrs) {
+    const queries = [...this.getStanzaIdQueryAttrs(attrs), this.getOriginIdQueryAttrs(attrs), this.getMessageBodyQueryAttrs(attrs)].filter(s => s);
+    const msgs = this.messages.models;
+    return lodash_es_find(msgs, m => queries.reduce((out, q) => out || lodash_es_isMatch(m.attributes, q), false));
+  },
 
-        this.announceReconnection();
-      },
+  getOriginIdQueryAttrs(attrs) {
+    return attrs.origin_id && {
+      'origin_id': attrs.origin_id,
+      'from': attrs.from
+    };
+  },
 
-      validate(attrs) {
-        if (!attrs.jid) {
-          return 'Ignored ChatBox without JID';
-        }
+  getStanzaIdQueryAttrs(attrs) {
+    const keys = Object.keys(attrs).filter(k => k.startsWith('stanza_id '));
+    return keys.map(key => {
+      const by_jid = key.replace(/^stanza_id /, '');
+      const query = {};
+      query["stanza_id ".concat(by_jid)] = attrs[key];
+      return query;
+    });
+  },
 
-        const room_jids = converse_core_converse.auto_join_rooms.map(s => lodash_es_isObject(s) ? s.jid : s);
+  getMessageBodyQueryAttrs(attrs) {
+    if (attrs.message && attrs.msgid) {
+      const query = {
+        'from': attrs.from,
+        'msgid': attrs.msgid
+      };
 
-        const auto_join = converse_core_api.settings.get('auto_join_private_chats').concat(room_jids);
+      if (!attrs.is_encrypted) {
+        // We can't match the message if it's a reflected
+        // encrypted message (e.g. via MAM or in a MUC)
+        query['message'] = attrs.message;
+      }
 
-        if (converse_core_api.settings.get("singleton") && !auto_join.includes(attrs.jid) && !converse_core_api.settings.get('auto_join_on_invite')) {
-          const msg = "".concat(attrs.jid, " is not allowed because singleton is true and it's not being auto_joined");
-          headless_log.warn(msg);
-          return msg;
-        }
-      },
+      return query;
+    }
+  },
 
-      getDisplayName() {
-        if (this.contact) {
-          return this.contact.getDisplayName();
-        } else if (this.vcard) {
-          return this.vcard.getDisplayName();
-        } else {
-          return this.get('jid');
-        }
-      },
+  /**
+   * Retract one of your messages in this chat
+   * @private
+   * @method _converse.ChatBoxView#retractOwnMessage
+   * @param { _converse.Message } message - The message which we're retracting.
+   */
+  retractOwnMessage(message) {
+    this.sendRetractionMessage(message);
+    message.save({
+      'retracted': new Date().toISOString(),
+      'retracted_id': message.get('origin_id'),
+      'retraction_id': message.get('id'),
+      'is_ephemeral': true,
+      'editable': false
+    });
+  },
 
-      async createMessageFromError(error) {
-        if (error instanceof converse_core_converse.TimeoutError) {
-          const msg = await this.createMessage({
-            'type': 'error',
-            'message': error.message,
-            'retry_event_id': error.retry_event_id
-          });
-          msg.error = error;
-        }
-      },
+  /**
+   * Sends a message stanza to retract a message in this chat
+   * @private
+   * @method _converse.ChatBox#sendRetractionMessage
+   * @param { _converse.Message } message - The message which we're retracting.
+   */
+  sendRetractionMessage(message) {
+    const origin_id = message.get('origin_id');
 
-      getOldestMessage() {
-        for (let i = 0; i < this.messages.length; i++) {
-          const message = this.messages.at(i);
+    if (!origin_id) {
+      throw new Error("Can't retract message without a XEP-0359 Origin ID");
+    }
 
-          if (message.get('type') === this.get('message_type')) {
-            return message;
-          }
-        }
-      },
+    const msg = model_$msg({
+      'id': model_u.getUniqueId(),
+      'to': this.get('jid'),
+      'type': "chat"
+    }).c('store', {
+      xmlns: model_Strophe.NS.HINTS
+    }).up().c("apply-to", {
+      'id': origin_id,
+      'xmlns': model_Strophe.NS.FASTEN
+    }).c('retract', {
+      xmlns: model_Strophe.NS.RETRACT
+    });
+    return core_converse.connection.send(msg);
+  },
 
-      getMostRecentMessage() {
-        for (let i = this.messages.length - 1; i >= 0; i--) {
-          const message = this.messages.at(i);
+  sendMarkerForMessage(msg) {
+    if (msg === null || msg === void 0 ? void 0 : msg.get('is_markable')) {
+      const from_jid = model_Strophe.getBareJidFromJid(msg.get('from'));
+      this.sendMarker(from_jid, msg.get('msgid'), 'displayed', msg.get('type'));
+    }
+  },
 
-          if (message.get('type') === this.get('message_type')) {
-            return message;
-          }
-        }
-      },
+  sendMarker(to_jid, id, type, msg_type) {
+    const stanza = model_$msg({
+      'from': core_converse.connection.jid,
+      'id': model_u.getUniqueId(),
+      'to': to_jid,
+      'type': msg_type ? msg_type : 'chat'
+    }).c(type, {
+      'xmlns': model_Strophe.NS.MARKERS,
+      'id': id
+    });
+    core_api.send(stanza);
+  },
 
-      getUpdatedMessageAttributes(message, attrs) {
-        // Filter the attrs object, restricting it to only the `is_archived` key.
-        return (({
-          is_archived
-        }) => ({
-          is_archived
-        }))(attrs);
-      },
+  handleChatMarker(attrs) {
+    const to_bare_jid = model_Strophe.getBareJidFromJid(attrs.to);
 
-      updateMessage(message, attrs) {
-        // Overridden in converse-muc and converse-mam
-        const new_attrs = this.getUpdatedMessageAttributes(message, attrs);
+    if (to_bare_jid !== core_converse.bare_jid) {
+      return false;
+    }
 
-        if (attrs) {
-          message.save(new_attrs);
-        }
-      },
+    if (attrs.is_markable) {
+      if (this.contact && !attrs.is_archived && !attrs.is_carbon) {
+        this.sendMarker(attrs.from, attrs.msgid, 'received');
+      }
 
-      /**
-       * Mutator for setting the chat state of this chat session.
-       * Handles clearing of any chat state notification timeouts and
-       * setting new ones if necessary.
-       * Timeouts are set when the  state being set is COMPOSING or PAUSED.
-       * After the timeout, COMPOSING will become PAUSED and PAUSED will become INACTIVE.
-       * See XEP-0085 Chat State Notifications.
-       * @private
-       * @method _converse.ChatBox#setChatState
-       * @param { string } state - The chat state (consts ACTIVE, COMPOSING, PAUSED, INACTIVE, GONE)
-       */
-      setChatState(state, options) {
-        if (this.chat_state_timeout !== undefined) {
-          window.clearTimeout(this.chat_state_timeout);
-          delete this.chat_state_timeout;
-        }
+      return false;
+    } else if (attrs.marker_id) {
+      const message = this.messages.findWhere({
+        'msgid': attrs.marker_id
+      });
+      const field_name = "marker_".concat(attrs.marker);
 
-        if (state === converse_core_converse.COMPOSING) {
-          this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), converse_core_converse.TIMEOUTS.PAUSED, converse_core_converse.PAUSED);
-        } else if (state === converse_core_converse.PAUSED) {
-          this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), converse_core_converse.TIMEOUTS.INACTIVE, converse_core_converse.INACTIVE);
-        }
+      if (message && !message.get(field_name)) {
+        message.save({
+          field_name: new Date().toISOString()
+        });
+      }
 
-        this.set('chat_state', state, options);
-        return this;
-      },
+      return true;
+    }
+  },
 
-      /**
-       * Given an error `<message>` stanza's attributes, find the saved message model which is
-       * referenced by that error.
-       * @param { Object } attrs
-       */
-      getMessageReferencedByError(attrs) {
-        const id = attrs.msgid;
-        return id && this.messages.models.find(m => [m.get('msgid'), m.get('retraction_id')].includes(id));
-      },
+  sendReceiptStanza(to_jid, id) {
+    const receipt_stanza = model_$msg({
+      'from': core_converse.connection.jid,
+      'id': model_u.getUniqueId(),
+      'to': to_jid,
+      'type': 'chat'
+    }).c('received', {
+      'xmlns': model_Strophe.NS.RECEIPTS,
+      'id': id
+    }).up().c('store', {
+      'xmlns': model_Strophe.NS.HINTS
+    }).up();
+    core_api.send(receipt_stanza);
+  },
 
-      /**
-       * @private
-       * @method _converse.ChatBox#shouldShowErrorMessage
-       * @returns {boolean}
-       */
-      shouldShowErrorMessage(attrs) {
-        const msg = this.getMessageReferencedByError(attrs);
-
-        if (!msg && attrs.body === null) {
-          // If the error refers to a message not included in our store,
-          // and it doesn't have a <body> tag, we assume that this was a
-          // CSI message (which we don't store).
-          // See https://github.com/conversejs/converse.js/issues/1317
-          return;
-        } // Gets overridden in ChatRoom
+  handleReceipt(attrs) {
+    if (attrs.sender === 'them') {
+      if (attrs.is_valid_receipt_request) {
+        this.sendReceiptStanza(attrs.from, attrs.msgid);
+      } else if (attrs.receipt_id) {
+        const message = this.messages.findWhere({
+          'msgid': attrs.receipt_id
+        });
 
+        if (message && !message.get('received')) {
+          message.save({
+            'received': new Date().toISOString()
+          });
+        }
 
         return true;
-      },
-
-      isSameUser(jid1, jid2) {
-        return converse_chat_u.isSameBareJID(jid1, jid2);
-      },
+      }
+    }
 
-      /**
-       * Looks whether we already have a retraction for this
-       * incoming message. If so, it's considered "dangling" because it
-       * probably hasn't been applied to anything yet, given that the
-       * relevant message is only coming in now.
-       * @private
-       * @method _converse.ChatBox#findDanglingRetraction
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMessage}
-       * @returns { _converse.Message }
-       */
-      findDanglingRetraction(attrs) {
-        if (!attrs.origin_id || !this.messages.length) {
-          return null;
-        } // Only look for dangling retractions if there are newer
-        // messages than this one, since retractions come after.
+    return false;
+  },
 
+  /**
+   * Given a {@link _converse.Message} return the XML stanza that represents it.
+   * @private
+   * @method _converse.ChatBox#createMessageStanza
+   * @param { _converse.Message } message - The message object
+   */
+  createMessageStanza(message) {
+    const stanza = model_$msg({
+      'from': core_converse.connection.jid,
+      'to': this.get('jid'),
+      'type': this.get('message_type'),
+      'id': message.get('edited') && model_u.getUniqueId() || message.get('msgid')
+    }).c('body').t(message.get('message')).up().c(core_converse.ACTIVE, {
+      'xmlns': model_Strophe.NS.CHATSTATES
+    }).root();
+
+    if (message.get('type') === 'chat') {
+      stanza.c('request', {
+        'xmlns': model_Strophe.NS.RECEIPTS
+      }).root();
+    }
+
+    if (message.get('is_spoiler')) {
+      if (message.get('spoiler_hint')) {
+        stanza.c('spoiler', {
+          'xmlns': model_Strophe.NS.SPOILER
+        }, message.get('spoiler_hint')).root();
+      } else {
+        stanza.c('spoiler', {
+          'xmlns': model_Strophe.NS.SPOILER
+        }).root();
+      }
+    }
 
-        if (this.messages.last().get('time') > attrs.time) {
-          // Search from latest backwards
-          const messages = Array.from(this.messages.models);
-          messages.reverse();
-          return messages.find(({
-            attributes
-          }) => attributes.retracted_id === attrs.origin_id && attributes.from === attrs.from && !attributes.moderated_by);
-        }
-      },
+    (message.get('references') || []).forEach(reference => {
+      const attrs = {
+        'xmlns': model_Strophe.NS.REFERENCE,
+        'begin': reference.begin,
+        'end': reference.end,
+        'type': reference.type
+      };
 
-      /**
-       * Handles message retraction based on the passed in attributes.
-       * @private
-       * @method _converse.ChatBox#handleRetraction
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMessage}
-       * @returns { Boolean } Returns `true` or `false` depending on
-       *  whether a message was retracted or not.
-       */
-      async handleRetraction(attrs) {
-        const RETRACTION_ATTRIBUTES = ['retracted', 'retracted_id', 'editable'];
+      if (reference.uri) {
+        attrs.uri = reference.uri;
+      }
 
-        if (attrs.retracted) {
-          if (attrs.is_tombstone) {
-            return false;
-          }
+      stanza.c('reference', attrs).root();
+    });
 
-          const message = this.messages.findWhere({
-            'origin_id': attrs.retracted_id,
-            'from': attrs.from
-          });
+    if (message.get('oob_url')) {
+      stanza.c('x', {
+        'xmlns': model_Strophe.NS.OUTOFBAND
+      }).c('url').t(message.get('oob_url')).root();
+    }
 
-          if (!message) {
-            attrs['dangling_retraction'] = true;
-            await this.createMessage(attrs);
-            return true;
-          }
+    if (message.get('edited')) {
+      stanza.c('replace', {
+        'xmlns': model_Strophe.NS.MESSAGE_CORRECT,
+        'id': message.get('msgid')
+      }).root();
+    }
 
-          message.save(lodash_es_pick(attrs, RETRACTION_ATTRIBUTES));
-          return true;
-        } else {
-          // Check if we have dangling retraction
-          const message = this.findDanglingRetraction(attrs);
+    if (message.get('origin_id')) {
+      stanza.c('origin-id', {
+        'xmlns': model_Strophe.NS.SID,
+        'id': message.get('origin_id')
+      }).root();
+    }
 
-          if (message) {
-            const retraction_attrs = lodash_es_pick(message.attributes, RETRACTION_ATTRIBUTES);
-            const new_attrs = Object.assign({
-              'dangling_retraction': false
-            }, attrs, retraction_attrs);
-            delete new_attrs['id']; // Delete id, otherwise a new cache entry gets created
+    return stanza;
+  },
 
-            message.save(new_attrs);
-            return true;
-          }
-        }
+  getOutgoingMessageAttributes(text, spoiler_hint) {
+    const is_spoiler = this.get('composing_spoiler');
+    const origin_id = model_u.getUniqueId();
+    const body = text ? model_u.httpToGeoUri(model_u.shortnamesToUnicode(text), core_converse) : undefined;
+    return {
+      'from': core_converse.bare_jid,
+      'fullname': core_converse.xmppstatus.get('fullname'),
+      'id': origin_id,
+      'is_only_emojis': text ? model_u.isOnlyEmojis(text) : false,
+      'jid': this.get('jid'),
+      'message': body,
+      'msgid': origin_id,
+      'nickname': this.get('nickname'),
+      'sender': 'me',
+      'spoiler_hint': is_spoiler ? spoiler_hint : undefined,
+      'time': new Date().toISOString(),
+      'type': this.get('message_type'),
+      body,
+      is_spoiler,
+      origin_id
+    };
+  },
 
-        return false;
-      },
+  /**
+   * Responsible for setting the editable attribute of messages.
+   * If api.settings.get('allow_message_corrections') is "last", then only the last
+   * message sent from me will be editable. If set to "all" all messages
+   * will be editable. Otherwise no messages will be editable.
+   * @method _converse.ChatBox#setEditable
+   * @memberOf _converse.ChatBox
+   * @param { Object } attrs An object containing message attributes.
+   * @param { String } send_time - time when the message was sent
+   */
+  setEditable(attrs, send_time) {
+    if (attrs.is_headline || model_u.isEmptyMessage(attrs) || attrs.sender !== 'me') {
+      return;
+    }
 
-      /**
-       * Determines whether the passed in message attributes represent a
-       * message which corrects a previously received message, or an
-       * older message which has already been corrected.
-       * In both cases, update the corrected message accordingly.
-       * @private
-       * @method _converse.ChatBox#handleCorrection
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMessage}
-       * @returns { _converse.Message|undefined } Returns the corrected
-       *  message or `undefined` if not applicable.
-       */
-      handleCorrection(attrs) {
-        if (!attrs.replace_id || !attrs.from) {
-          return;
-        }
+    if (core_api.settings.get('allow_message_corrections') === 'all') {
+      attrs.editable = !(attrs.file || attrs.retracted || 'oob_url' in attrs);
+    } else if (core_api.settings.get('allow_message_corrections') === 'last' && send_time > this.get('time_sent')) {
+      this.set({
+        'time_sent': send_time
+      });
+      const msg = this.messages.findWhere({
+        'editable': true
+      });
 
-        const message = this.messages.findWhere({
-          'msgid': attrs.replace_id,
-          'from': attrs.from
+      if (msg) {
+        msg.save({
+          'editable': false
         });
+      }
 
-        if (!message) {
-          return;
-        }
-
-        const older_versions = message.get('older_versions') || {};
+      attrs.editable = !(attrs.file || attrs.retracted || 'oob_url' in attrs);
+    }
+  },
 
-        if (attrs.time < message.get('time') && message.get('edited')) {
-          // This is an older message which has been corrected afterwards
-          older_versions[attrs.time] = attrs['message'];
-          message.save({
-            'older_versions': older_versions
-          });
-        } else {
-          // This is a correction of an earlier message we already received
-          older_versions[message.get('time')] = message.get('message');
-          attrs = Object.assign(attrs, {
-            'older_versions': older_versions
-          });
-          delete attrs['id']; // Delete id, otherwise a new cache entry gets created
+  /**
+   * Queue the creation of a message, to make sure that we don't run
+   * into a race condition whereby we're creating a new message
+   * before the collection has been fetched.
+   * @async
+   * @private
+   * @method _converse.ChatRoom#queueMessageCreation
+   * @param { Object } attrs
+   */
+  async createMessage(attrs, options) {
+    attrs.time = attrs.time || new Date().toISOString();
+    await this.messages.fetched;
+    const p = this.messages.create(attrs, Object.assign({
+      'wait': true,
+      'promise': true
+    }, options));
+    return p;
+  },
 
-          message.save(attrs);
-        }
+  /**
+   * Responsible for sending off a text message inside an ongoing chat conversation.
+   * @private
+   * @method _converse.ChatBox#sendMessage
+   * @memberOf _converse.ChatBox
+   * @param { String } text - The chat message text
+   * @param { String } spoiler_hint - An optional hint, if the message being sent is a spoiler
+   * @returns { _converse.Message }
+   * @example
+   * const chat = api.chats.get('buddy1@example.com');
+   * chat.sendMessage('hello world');
+   */
+  async sendMessage(text, spoiler_hint) {
+    const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint);
+    let message = this.messages.findWhere('correcting');
 
-        return message;
-      },
+    if (message) {
+      const older_versions = message.get('older_versions') || {};
+      older_versions[message.get('time')] = message.get('message');
+      message.save({
+        'correcting': false,
+        'edited': new Date().toISOString(),
+        'message': attrs.message,
+        'older_versions': older_versions,
+        'references': attrs.references,
+        'is_only_emojis': attrs.is_only_emojis,
+        'origin_id': model_u.getUniqueId(),
+        'received': undefined
+      });
+    } else {
+      this.setEditable(attrs, new Date().toISOString());
+      message = await this.createMessage(attrs);
+    }
 
-      /**
-       * Returns an already cached message (if it exists) based on the
-       * passed in attributes map.
-       * @private
-       * @method _converse.ChatBox#getDuplicateMessage
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMessage}
-       * @returns {Promise<_converse.Message>}
-       */
-      getDuplicateMessage(attrs) {
-        const queries = [...this.getStanzaIdQueryAttrs(attrs), this.getOriginIdQueryAttrs(attrs), this.getMessageBodyQueryAttrs(attrs)].filter(s => s);
-        const msgs = this.messages.models;
-        return lodash_es_find(msgs, m => queries.reduce((out, q) => out || lodash_es_isMatch(m.attributes, q), false));
-      },
+    core_api.send(this.createMessageStanza(message));
+    /**
+     * Triggered when a message is being sent out
+     * @event _converse#sendMessage
+     * @type { Object }
+     * @param { Object } data
+     * @property { (_converse.ChatBox | _converse.ChatRoom) } data.chatbox
+     * @property { (_converse.Message | _converse.ChatRoomMessage) } data.message
+     */
 
-      getOriginIdQueryAttrs(attrs) {
-        return attrs.origin_id && {
-          'origin_id': attrs.origin_id,
-          'from': attrs.from
-        };
-      },
+    core_api.trigger('sendMessage', {
+      'chatbox': this,
+      message
+    });
+    return message;
+  },
 
-      getStanzaIdQueryAttrs(attrs) {
-        const keys = Object.keys(attrs).filter(k => k.startsWith('stanza_id '));
-        return keys.map(key => {
-          const by_jid = key.replace(/^stanza_id /, '');
-          const query = {};
-          query["stanza_id ".concat(by_jid)] = attrs[key];
-          return query;
-        });
-      },
+  /**
+   * Sends a message with the current XEP-0085 chat state of the user
+   * as taken from the `chat_state` attribute of the {@link _converse.ChatBox}.
+   * @private
+   * @method _converse.ChatBox#sendChatState
+   */
+  sendChatState() {
+    if (core_api.settings.get('send_chat_state_notifications') && this.get('chat_state')) {
+      const allowed = core_api.settings.get('send_chat_state_notifications');
 
-      getMessageBodyQueryAttrs(attrs) {
-        if (attrs.message && attrs.msgid) {
-          const query = {
-            'from': attrs.from,
-            'msgid': attrs.msgid
-          };
+      if (Array.isArray(allowed) && !allowed.includes(this.get('chat_state'))) {
+        return;
+      }
 
-          if (!attrs.is_encrypted) {
-            // We can't match the message if it's a reflected
-            // encrypted message (e.g. via MAM or in a MUC)
-            query['message'] = attrs.message;
-          }
+      core_api.send(model_$msg({
+        'id': model_u.getUniqueId(),
+        'to': this.get('jid'),
+        'type': 'chat'
+      }).c(this.get('chat_state'), {
+        'xmlns': model_Strophe.NS.CHATSTATES
+      }).up().c('no-store', {
+        'xmlns': model_Strophe.NS.HINTS
+      }).up().c('no-permanent-store', {
+        'xmlns': model_Strophe.NS.HINTS
+      }));
+    }
+  },
 
-          return query;
-        }
-      },
+  async sendFiles(files) {
+    var _maxFileSize;
 
-      /**
-       * Retract one of your messages in this chat
-       * @private
-       * @method _converse.ChatBoxView#retractOwnMessage
-       * @param { _converse.Message } message - The message which we're retracting.
-       */
-      retractOwnMessage(message) {
-        this.sendRetractionMessage(message);
-        message.save({
-          'retracted': new Date().toISOString(),
-          'retracted_id': message.get('origin_id'),
-          'retraction_id': message.get('id'),
-          'is_ephemeral': true,
-          'editable': false
-        });
-      },
+    const {
+      __
+    } = core_converse;
+    const result = await core_api.disco.features.get(model_Strophe.NS.HTTPUPLOAD, core_converse.domain);
+    const item = result.pop();
+
+    if (!item) {
+      this.createMessage({
+        'message': __("Sorry, looks like file upload is not supported by your server."),
+        'type': 'error',
+        'is_ephemeral': true
+      });
+      return;
+    }
 
-      /**
-       * Sends a message stanza to retract a message in this chat
-       * @private
-       * @method _converse.ChatBox#sendRetractionMessage
-       * @param { _converse.Message } message - The message which we're retracting.
-       */
-      sendRetractionMessage(message) {
-        const origin_id = message.get('origin_id');
+    const data = item.dataforms.where({
+      'FORM_TYPE': {
+        'value': model_Strophe.NS.HTTPUPLOAD,
+        'type': "hidden"
+      }
+    }).pop();
+    const max_file_size = window.parseInt((_maxFileSize = ((data === null || data === void 0 ? void 0 : data.attributes) || {})['max-file-size']) === null || _maxFileSize === void 0 ? void 0 : _maxFileSize.value);
+    const slot_request_url = item === null || item === void 0 ? void 0 : item.id;
 
-        if (!origin_id) {
-          throw new Error("Can't retract message without a XEP-0359 Origin ID");
-        }
+    if (!slot_request_url) {
+      this.createMessage({
+        'message': __("Sorry, looks like file upload is not supported by your server."),
+        'type': 'error',
+        'is_ephemeral': true
+      });
+      return;
+    }
 
-        const msg = converse_chat_$msg({
-          'id': converse_chat_u.getUniqueId(),
-          'to': this.get('jid'),
-          'type': "chat"
-        }).c('store', {
-          xmlns: converse_chat_Strophe.NS.HINTS
-        }).up().c("apply-to", {
-          'id': origin_id,
-          'xmlns': converse_chat_Strophe.NS.FASTEN
-        }).c('retract', {
-          xmlns: converse_chat_Strophe.NS.RETRACT
+    Array.from(files).forEach(async file => {
+      if (!window.isNaN(max_file_size) && window.parseInt(file.size) > max_file_size) {
+        return this.createMessage({
+          'message': __('The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.', file.name, filesize_min_default()(max_file_size)),
+          'type': 'error',
+          'is_ephemeral': true
         });
-        return converse_core_converse.connection.send(msg);
-      },
+      } else {
+        const attrs = Object.assign(this.getOutgoingMessageAttributes(), {
+          'file': true,
+          'progress': 0,
+          'slot_request_url': slot_request_url
+        });
+        this.setEditable(attrs, new Date().toISOString());
+        const message = await this.createMessage(attrs, {
+          'silent': true
+        });
+        message.file = file;
+        this.messages.trigger('add', message);
+        message.getRequestSlotURL();
+      }
+    });
+  },
 
-      sendMarkerForMessage(msg) {
-        if (msg === null || msg === void 0 ? void 0 : msg.get('is_markable')) {
-          const from_jid = converse_chat_Strophe.getBareJidFromJid(msg.get('from'));
-          this.sendMarker(from_jid, msg.get('msgid'), 'displayed', msg.get('type'));
-        }
-      },
+  maybeShow(force) {
+    if (force) {
+      if (core_converse.isUniView()) {
+        // We only have one chat visible at any one time.
+        // So before opening a chat, we make sure all other chats are hidden.
+        const filter = c => !c.get('hidden') && c.get('jid') !== this.get('jid') && c.get('id') !== 'controlbox';
 
-      sendMarker(to_jid, id, type, msg_type) {
-        const stanza = converse_chat_$msg({
-          'from': converse_core_converse.connection.jid,
-          'id': converse_chat_u.getUniqueId(),
-          'to': to_jid,
-          'type': msg_type ? msg_type : 'chat'
-        }).c(type, {
-          'xmlns': converse_chat_Strophe.NS.MARKERS,
-          'id': id
-        });
-        converse_core_api.send(stanza);
-      },
+        core_converse.chatboxes.filter(filter).forEach(c => model_u.safeSave(c, {
+          'hidden': true
+        }));
+      }
 
-      handleChatMarker(attrs) {
-        const to_bare_jid = converse_chat_Strophe.getBareJidFromJid(attrs.to);
+      model_u.safeSave(this, {
+        'hidden': false
+      });
+    }
 
-        if (to_bare_jid !== converse_core_converse.bare_jid) {
-          return false;
-        }
+    if (core_converse.isUniView() && this.get('hidden')) {
+      return;
+    } else {
+      return this.trigger("show");
+    }
+  },
 
-        if (attrs.is_markable) {
-          if (this.contact && !attrs.is_archived && !attrs.is_carbon) {
-            this.sendMarker(attrs.from, attrs.msgid, 'received');
-          }
+  /**
+   * Indicates whether the chat is hidden and therefore
+   * whether a newly received message will be visible
+   * to the user or not.
+   * @returns {boolean}
+   */
+  isHidden() {
+    // Note: This methods gets overridden by converse-minimize
+    const hidden = core_converse.isUniView() && this.get('hidden');
+    return hidden || this.isScrolledUp() || core_converse.windowState === 'hidden';
+  },
 
-          return false;
-        } else if (attrs.marker_id) {
-          const message = this.messages.findWhere({
-            'msgid': attrs.marker_id
-          });
-          const field_name = "marker_".concat(attrs.marker);
+  /**
+   * Given a newly received {@link _converse.Message} instance,
+   * update the unread counter if necessary.
+   * @private
+   * @param {_converse.Message} message
+   */
+  handleUnreadMessage(message) {
+    if (!(message === null || message === void 0 ? void 0 : message.get('body'))) {
+      return;
+    }
 
-          if (message && !message.get(field_name)) {
-            message.save({
-              field_name: new Date().toISOString()
-            });
-          }
+    if (model_u.isNewMessage(message)) {
+      if (this.isHidden()) {
+        const settings = {
+          'num_unread': this.get('num_unread') + 1
+        };
 
-          return true;
+        if (this.get('num_unread') === 0) {
+          settings['first_unread_id'] = message.get('id');
         }
-      },
 
-      sendReceiptStanza(to_jid, id) {
-        const receipt_stanza = converse_chat_$msg({
-          'from': converse_core_converse.connection.jid,
-          'id': converse_chat_u.getUniqueId(),
-          'to': to_jid,
-          'type': 'chat'
-        }).c('received', {
-          'xmlns': converse_chat_Strophe.NS.RECEIPTS,
-          'id': id
-        }).up().c('store', {
-          'xmlns': converse_chat_Strophe.NS.HINTS
-        }).up();
-        converse_core_api.send(receipt_stanza);
-      },
+        this.save(settings);
+      } else {
+        this.sendMarkerForMessage(message);
+      }
+    }
+  },
 
-      handleReceipt(attrs) {
-        if (attrs.sender === 'them') {
-          if (attrs.is_valid_receipt_request) {
-            this.sendReceiptStanza(attrs.from, attrs.msgid);
-          } else if (attrs.receipt_id) {
-            const message = this.messages.findWhere({
-              'msgid': attrs.receipt_id
-            });
+  clearUnreadMsgCounter() {
+    if (this.get('num_unread') > 0) {
+      this.sendMarkerForMessage(this.messages.last());
+    }
 
-            if (message && !message.get('received')) {
-              message.save({
-                'received': new Date().toISOString()
-              });
-            }
+    model_u.safeSave(this, {
+      'num_unread': 0
+    });
+  },
 
-            return true;
-          }
-        }
+  isScrolledUp() {
+    return this.get('scrolled', true);
+  }
 
-        return false;
-      },
+});
+/* harmony default export */ var chat_model = (ChatBox);
+// CONCATENATED MODULE: ./src/headless/plugins/chat/message.js
 
-      /**
-       * Given a {@link _converse.Message} return the XML stanza that represents it.
-       * @private
-       * @method _converse.ChatBox#createMessageStanza
-       * @param { _converse.Message } message - The message object
-       */
-      createMessageStanza(message) {
-        const stanza = converse_chat_$msg({
-          'from': converse_core_converse.connection.jid,
-          'to': this.get('jid'),
-          'type': this.get('message_type'),
-          'id': message.get('edited') && converse_chat_u.getUniqueId() || message.get('msgid')
-        }).c('body').t(message.get('message')).up().c(converse_core_converse.ACTIVE, {
-          'xmlns': converse_chat_Strophe.NS.CHATSTATES
-        }).root();
 
-        if (message.get('type') === 'chat') {
-          stanza.c('request', {
-            'xmlns': converse_chat_Strophe.NS.RECEIPTS
-          }).root();
-        }
 
-        if (message.get('is_spoiler')) {
-          if (message.get('spoiler_hint')) {
-            stanza.c('spoiler', {
-              'xmlns': converse_chat_Strophe.NS.SPOILER
-            }, message.get('spoiler_hint')).root();
-          } else {
-            stanza.c('spoiler', {
-              'xmlns': converse_chat_Strophe.NS.SPOILER
-            }).root();
-          }
-        }
+const message_u = converse.env.utils;
+const {
+  Strophe: message_Strophe
+} = converse.env;
+/**
+ * Mixin which turns a `ModelWithContact` model into a non-MUC message. These can be either `chat` messages or `headline` messages.
+ * @mixin
+ * @namespace _converse.Message
+ * @memberOf _converse
+ * @example const msg = new _converse.Message({'message': 'hello world!'});
+ */
 
-        (message.get('references') || []).forEach(reference => {
-          const attrs = {
-            'xmlns': converse_chat_Strophe.NS.REFERENCE,
-            'begin': reference.begin,
-            'end': reference.end,
-            'type': reference.type
-          };
+const MessageMixin = {
+  defaults() {
+    return {
+      'msgid': message_u.getUniqueId(),
+      'time': new Date().toISOString(),
+      'is_ephemeral': false
+    };
+  },
 
-          if (reference.uri) {
-            attrs.uri = reference.uri;
-          }
+  async initialize() {
+    if (!this.checkValidity()) {
+      return;
+    }
 
-          stanza.c('reference', attrs).root();
-        });
+    this.initialized = message_u.getResolveablePromise();
 
-        if (message.get('oob_url')) {
-          stanza.c('x', {
-            'xmlns': converse_chat_Strophe.NS.OUTOFBAND
-          }).c('url').t(message.get('oob_url')).root();
-        }
+    if (this.get('type') === 'chat') {
+      model_with_contact.prototype.initialize.apply(this, arguments);
+      this.setRosterContact(message_Strophe.getBareJidFromJid(this.get('from')));
+    }
 
-        if (message.get('edited')) {
-          stanza.c('replace', {
-            'xmlns': converse_chat_Strophe.NS.MESSAGE_CORRECT,
-            'id': message.get('msgid')
-          }).root();
-        }
+    if (this.get('file')) {
+      this.on('change:put', this.uploadFile, this);
+    }
 
-        if (message.get('origin_id')) {
-          stanza.c('origin-id', {
-            'xmlns': converse_chat_Strophe.NS.SID,
-            'id': message.get('origin_id')
-          }).root();
-        }
+    this.setTimerForEphemeralMessage();
+    /**
+     * Triggered once a {@link _converse.Message} has been created and initialized.
+     * @event _converse#messageInitialized
+     * @type { _converse.Message}
+     * @example _converse.api.listen.on('messageInitialized', model => { ... });
+     */
 
-        return stanza;
-      },
+    await core_api.trigger('messageInitialized', this, {
+      'Synchronous': true
+    });
+    this.initialized.resolve();
+  },
 
-      getOutgoingMessageAttributes(text, spoiler_hint) {
-        const is_spoiler = this.get('composing_spoiler');
-        const origin_id = converse_chat_u.getUniqueId();
-        const body = text ? converse_chat_u.httpToGeoUri(converse_chat_u.shortnamesToUnicode(text), converse_core_converse) : undefined;
-        return {
-          'from': converse_core_converse.bare_jid,
-          'fullname': converse_core_converse.xmppstatus.get('fullname'),
-          'id': origin_id,
-          'is_only_emojis': text ? converse_chat_u.isOnlyEmojis(text) : false,
-          'jid': this.get('jid'),
-          'message': body,
-          'msgid': origin_id,
-          'nickname': this.get('nickname'),
-          'sender': 'me',
-          'spoiler_hint': is_spoiler ? spoiler_hint : undefined,
-          'time': new Date().toISOString(),
-          'type': this.get('message_type'),
-          body,
-          is_spoiler,
-          origin_id
-        };
-      },
+  /**
+   * Sets an auto-destruct timer for this message, if it's is_ephemeral.
+   * @private
+   * @method _converse.Message#setTimerForEphemeralMessage
+   * @returns { Boolean } - Indicates whether the message is
+   *   ephemeral or not, and therefore whether the timer was set or not.
+   */
+  setTimerForEphemeralMessage() {
+    const setTimer = () => {
+      this.ephemeral_timer = window.setTimeout(this.safeDestroy.bind(this), 10000);
+    };
 
-      /**
-       * Responsible for setting the editable attribute of messages.
-       * If api.settings.get('allow_message_corrections') is "last", then only the last
-       * message sent from me will be editable. If set to "all" all messages
-       * will be editable. Otherwise no messages will be editable.
-       * @method _converse.ChatBox#setEditable
-       * @memberOf _converse.ChatBox
-       * @param { Object } attrs An object containing message attributes.
-       * @param { String } send_time - time when the message was sent
-       */
-      setEditable(attrs, send_time) {
-        if (attrs.is_headline || converse_chat_u.isEmptyMessage(attrs) || attrs.sender !== 'me') {
-          return;
-        }
+    if (this.isEphemeral()) {
+      setTimer();
+      return true;
+    } else {
+      this.on('change:is_ephemeral', () => this.isEphemeral() ? setTimer() : clearTimeout(this.ephemeral_timer));
+      return false;
+    }
+  },
 
-        if (converse_core_api.settings.get('allow_message_corrections') === 'all') {
-          attrs.editable = !(attrs.file || attrs.retracted || 'oob_url' in attrs);
-        } else if (converse_core_api.settings.get('allow_message_corrections') === 'last' && send_time > this.get('time_sent')) {
-          this.set({
-            'time_sent': send_time
-          });
-          const msg = this.messages.findWhere({
-            'editable': true
-          });
+  checkValidity() {
+    if (Object.keys(this.attributes).length === 3) {
+      // XXX: This is an empty message with only the 3 default values.
+      // This seems to happen when saving a newly created message
+      // fails for some reason.
+      // TODO: This is likely fixable by setting `wait` when
+      // creating messages. See the wait-for-messages branch.
+      this.validationError = 'Empty message';
+      this.safeDestroy();
+      return false;
+    }
 
-          if (msg) {
-            msg.save({
-              'editable': false
-            });
-          }
+    return true;
+  },
 
-          attrs.editable = !(attrs.file || attrs.retracted || 'oob_url' in attrs);
-        }
-      },
+  /**
+   * Determines whether this messsage may be retracted by the current user.
+   * @private
+   * @method _converse.Messages#mayBeRetracted
+   * @returns { Boolean }
+   */
+  mayBeRetracted() {
+    const is_own_message = this.get('sender') === 'me';
+    return is_own_message && ['all', 'own'].includes(core_api.settings.get('allow_message_retraction'));
+  },
 
-      /**
-       * @async
-       * @private
-       * @method _converse.ChatBox#createMessage
-       */
-      createMessage(attrs, options) {
-        return this.messages.create(attrs, Object.assign({
-          'wait': true,
-          'promise': true
-        }, options)).catch(e => headless_log.error(e));
-      },
+  safeDestroy() {
+    try {
+      this.destroy();
+    } catch (e) {
+      headless_log.error(e);
+    }
+  },
 
-      /**
-       * Responsible for sending off a text message inside an ongoing chat conversation.
-       * @private
-       * @method _converse.ChatBox#sendMessage
-       * @memberOf _converse.ChatBox
-       * @param { String } text - The chat message text
-       * @param { String } spoiler_hint - An optional hint, if the message being sent is a spoiler
-       * @returns { _converse.Message }
-       * @example
-       * const chat = api.chats.get('buddy1@example.com');
-       * chat.sendMessage('hello world');
-       */
-      async sendMessage(text, spoiler_hint) {
-        const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint);
-        let message = this.messages.findWhere('correcting');
+  isEphemeral() {
+    return this.get('is_ephemeral');
+  },
 
-        if (message) {
-          const older_versions = message.get('older_versions') || {};
-          older_versions[message.get('time')] = message.get('message');
-          message.save({
-            'correcting': false,
-            'edited': new Date().toISOString(),
-            'message': attrs.message,
-            'older_versions': older_versions,
-            'references': attrs.references,
-            'is_only_emojis': attrs.is_only_emojis,
-            'origin_id': converse_chat_u.getUniqueId(),
-            'received': undefined
-          });
-        } else {
-          this.setEditable(attrs, new Date().toISOString());
-          message = await this.createMessage(attrs);
-        }
+  getDisplayName() {
+    if (this.get('type') === 'groupchat') {
+      return this.get('nick');
+    } else if (this.contact) {
+      return this.contact.getDisplayName();
+    } else if (this.vcard) {
+      return this.vcard.getDisplayName();
+    } else {
+      return this.get('from');
+    }
+  },
 
-        converse_core_api.send(this.createMessageStanza(message));
-        /**
-         * Triggered when a message is being sent out
-         * @event _converse#sendMessage
-         * @type { Object }
-         * @param { Object } data
-         * @property { (_converse.ChatBox | _converse.ChatRoom) } data.chatbox
-         * @property { (_converse.Message | _converse.ChatRoomMessage) } data.message
-         */
+  getMessageText() {
+    const {
+      __
+    } = core_converse;
 
-        converse_core_api.trigger('sendMessage', {
-          'chatbox': this,
-          message
-        });
-        return message;
-      },
+    if (this.get('is_encrypted')) {
+      return this.get('plaintext') || this.get('body') || __('Undecryptable OMEMO message');
+    }
 
-      /**
-       * Sends a message with the current XEP-0085 chat state of the user
-       * as taken from the `chat_state` attribute of the {@link _converse.ChatBox}.
-       * @private
-       * @method _converse.ChatBox#sendChatState
-       */
-      sendChatState() {
-        if (converse_core_api.settings.get('send_chat_state_notifications') && this.get('chat_state')) {
-          const allowed = converse_core_api.settings.get('send_chat_state_notifications');
+    return this.get('message');
+  },
 
-          if (Array.isArray(allowed) && !allowed.includes(this.get('chat_state'))) {
-            return;
-          }
+  isMeCommand() {
+    const text = this.getMessageText();
 
-          converse_core_api.send(converse_chat_$msg({
-            'id': converse_chat_u.getUniqueId(),
-            'to': this.get('jid'),
-            'type': 'chat'
-          }).c(this.get('chat_state'), {
-            'xmlns': converse_chat_Strophe.NS.CHATSTATES
-          }).up().c('no-store', {
-            'xmlns': converse_chat_Strophe.NS.HINTS
-          }).up().c('no-permanent-store', {
-            'xmlns': converse_chat_Strophe.NS.HINTS
-          }));
-        }
-      },
+    if (!text) {
+      return false;
+    }
 
-      async sendFiles(files) {
-        var _maxFileSize;
+    return text.startsWith('/me ');
+  },
 
-        const result = await converse_core_api.disco.features.get(converse_chat_Strophe.NS.HTTPUPLOAD, converse_core_converse.domain);
-        const item = result.pop();
+  /**
+   * Send out an IQ stanza to request a file upload slot.
+   * https://xmpp.org/extensions/xep-0363.html#request
+   * @private
+   * @method _converse.Message#sendSlotRequestStanza
+   */
+  sendSlotRequestStanza() {
+    if (!this.file) {
+      return Promise.reject(new Error('file is undefined'));
+    }
+
+    const iq = converse.env.$iq({
+      'from': core_converse.jid,
+      'to': this.get('slot_request_url'),
+      'type': 'get'
+    }).c('request', {
+      'xmlns': message_Strophe.NS.HTTPUPLOAD,
+      'filename': this.file.name,
+      'size': this.file.size,
+      'content-type': this.file.type
+    });
+    return core_api.sendIQ(iq);
+  },
 
-        if (!item) {
-          this.createMessage({
-            'message': __("Sorry, looks like file upload is not supported by your server."),
-            'type': 'error',
-            'is_ephemeral': true
-          });
-          return;
-        }
+  async getRequestSlotURL() {
+    const {
+      __
+    } = core_converse;
+    let stanza;
 
-        const data = item.dataforms.where({
-          'FORM_TYPE': {
-            'value': converse_chat_Strophe.NS.HTTPUPLOAD,
-            'type': "hidden"
-          }
-        }).pop();
-        const max_file_size = window.parseInt((_maxFileSize = ((data === null || data === void 0 ? void 0 : data.attributes) || {})['max-file-size']) === null || _maxFileSize === void 0 ? void 0 : _maxFileSize.value);
-        const slot_request_url = item === null || item === void 0 ? void 0 : item.id;
+    try {
+      stanza = await this.sendSlotRequestStanza();
+    } catch (e) {
+      headless_log.error(e);
+      return this.save({
+        'type': 'error',
+        'message': __('Sorry, could not determine upload URL.'),
+        'is_ephemeral': true
+      });
+    }
 
-        if (!slot_request_url) {
-          this.createMessage({
-            'message': __("Sorry, looks like file upload is not supported by your server."),
-            'type': 'error',
-            'is_ephemeral': true
-          });
-          return;
-        }
+    const slot = stanza.querySelector('slot');
 
-        Array.from(files).forEach(async file => {
-          if (!window.isNaN(max_file_size) && window.parseInt(file.size) > max_file_size) {
-            return this.createMessage({
-              'message': __('The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.', file.name, filesize_min_default()(max_file_size)),
-              'type': 'error',
-              'is_ephemeral': true
-            });
-          } else {
-            const attrs = Object.assign(this.getOutgoingMessageAttributes(), {
-              'file': true,
-              'progress': 0,
-              'slot_request_url': slot_request_url
-            });
-            this.setEditable(attrs, new Date().toISOString());
-            const message = await this.createMessage(attrs, {
-              'silent': true
-            });
-            message.file = file;
-            this.messages.trigger('add', message);
-            message.getRequestSlotURL();
-          }
-        });
-      },
+    if (slot) {
+      this.save({
+        'get': slot.querySelector('get').getAttribute('url'),
+        'put': slot.querySelector('put').getAttribute('url')
+      });
+    } else {
+      return this.save({
+        'type': 'error',
+        'message': __('Sorry, could not determine file upload URL.'),
+        'is_ephemeral': true
+      });
+    }
+  },
 
-      maybeShow(force) {
-        force && converse_chat_u.safeSave(this, {
-          'hidden': false
-        });
+  uploadFile() {
+    const xhr = new XMLHttpRequest();
 
-        if (converse_core_converse.isUniView() && this.get('hidden')) {
-          return;
+    xhr.onreadystatechange = () => {
+      if (xhr.readyState === XMLHttpRequest.DONE) {
+        headless_log.info('Status: ' + xhr.status);
+
+        if (xhr.status === 200 || xhr.status === 201) {
+          this.save({
+            'upload': core_converse.SUCCESS,
+            'oob_url': this.get('get'),
+            'message': this.get('get')
+          });
         } else {
-          return this.trigger("show");
+          xhr.onerror();
         }
-      },
+      }
+    };
 
-      /**
-       * Indicates whether the chat is hidden and therefore
-       * whether a newly received message will be visible
-       * to the user or not.
-       * @returns {boolean}
-       */
-      isHidden() {
-        // Note: This methods gets overridden by converse-minimize
-        const hidden = converse_core_converse.isUniView() && this.get('hidden');
-        return hidden || this.isScrolledUp() || converse_core_converse.windowState === 'hidden';
-      },
+    xhr.upload.addEventListener('progress', evt => {
+      if (evt.lengthComputable) {
+        this.set('progress', evt.loaded / evt.total);
+      }
+    }, false);
 
-      /**
-       * Given a newly received {@link _converse.Message} instance,
-       * update the unread counter if necessary.
-       * @private
-       * @param {_converse.Message} message
-       */
-      handleUnreadMessage(message) {
-        if (!(message === null || message === void 0 ? void 0 : message.get('body'))) {
-          return;
-        }
+    xhr.onerror = () => {
+      const {
+        __
+      } = core_converse;
+      let message;
 
-        if (utils.isNewMessage(message)) {
-          if (this.isHidden()) {
-            const settings = {
-              'num_unread': this.get('num_unread') + 1
-            };
+      if (xhr.responseText) {
+        message = __('Sorry, could not succesfully upload your file. Your server’s response: "%1$s"', xhr.responseText);
+      } else {
+        message = __('Sorry, could not succesfully upload your file.');
+      }
 
-            if (this.get('num_unread') === 0) {
-              settings['first_unread_id'] = message.get('id');
-            }
+      this.save({
+        'type': 'error',
+        'upload': core_converse.FAILURE,
+        'message': message,
+        'is_ephemeral': true
+      });
+    };
 
-            this.save(settings);
+    xhr.open('PUT', this.get('put'), true);
+    xhr.setRequestHeader('Content-type', this.file.type);
+    xhr.send(this.file);
+  }
 
-            converse_core_converse.incrementMsgCounter();
-          } else {
-            this.sendMarkerForMessage(message);
-          }
-        }
-      },
+};
+/* harmony default export */ var chat_message = (MessageMixin);
+// CONCATENATED MODULE: ./src/headless/plugins/chat/api.js
 
-      clearUnreadMsgCounter() {
-        if (this.get('num_unread') > 0) {
-          this.sendMarkerForMessage(this.messages.last());
-        }
 
-        converse_chat_u.safeSave(this, {
-          'num_unread': 0
-        });
-      },
+/* harmony default export */ var chat_api = ({
+  /**
+   * The "chats" namespace (used for one-on-one chats)
+   *
+   * @namespace api.chats
+   * @memberOf api
+   */
+  chats: {
+    /**
+     * @method api.chats.create
+     * @param {string|string[]} jid|jids An jid or array of jids
+     * @param {object} [attrs] An object containing configuration attributes.
+     */
+    async create(jids, attrs) {
+      if (typeof jids === 'string') {
+        if (attrs && !(attrs === null || attrs === void 0 ? void 0 : attrs.fullname)) {
+          var _contact$attributes;
 
-      isScrolledUp() {
-        return this.get('scrolled', true);
-      }
+          const contact = await core_api.contacts.get(jids);
+          attrs.fullname = contact === null || contact === void 0 ? void 0 : (_contact$attributes = contact.attributes) === null || _contact$attributes === void 0 ? void 0 : _contact$attributes.fullname;
+        }
 
-    });
+        const chatbox = core_api.chats.get(jids, attrs, true);
 
-    async function handleErrorMessage(stanza) {
-      const from_jid = converse_chat_Strophe.getBareJidFromJid(stanza.getAttribute('from'));
+        if (!chatbox) {
+          headless_log.error("Could not open chatbox for JID: " + jids);
+          return;
+        }
 
-      if (utils.isSameBareJID(from_jid, converse_core_converse.bare_jid)) {
-        return;
+        return chatbox;
       }
 
-      const chatbox = await converse_core_api.chatboxes.get(from_jid);
-      chatbox === null || chatbox === void 0 ? void 0 : chatbox.handleErrorMessageStanza(stanza);
-    }
-    /**
-     * Handler method for all incoming single-user chat "message" stanzas.
-     * @private
-     * @method _converse#handleMessageStanza
-     * @param { MessageAttributes } attrs - The message attributes
-     */
-
+      if (Array.isArray(jids)) {
+        return Promise.all(jids.forEach(async jid => {
+          var _contact$attributes2;
 
-    converse_core_converse.handleMessageStanza = async function (stanza) {
-      if (utils_stanza.isServerMessage(stanza)) {
-        // Prosody sends headline messages with type `chat`, so we need to filter them out here.
-        const from = stanza.getAttribute('from');
-        return headless_log.info("handleMessageStanza: Ignoring incoming server message from JID: ".concat(from));
+          const contact = await core_api.contacts.get(jids);
+          attrs.fullname = contact === null || contact === void 0 ? void 0 : (_contact$attributes2 = contact.attributes) === null || _contact$attributes2 === void 0 ? void 0 : _contact$attributes2.fullname;
+          return core_api.chats.get(jid, attrs, true).maybeShow();
+        }));
       }
 
-      const attrs = await utils_stanza.parseMessage(stanza, converse_core_converse);
+      headless_log.error("chats.create: You need to provide at least one JID");
+      return null;
+    },
+
+    /**
+     * Opens a new one-on-one chat.
+     *
+     * @method api.chats.open
+     * @param {String|string[]} name - e.g. 'buddy@example.com' or ['buddy1@example.com', 'buddy2@example.com']
+     * @param {Object} [attrs] - Attributes to be set on the _converse.ChatBox model.
+     * @param {Boolean} [attrs.minimized] - Should the chat be created in minimized state.
+     * @param {Boolean} [force=false] - By default, a minimized
+     *   chat won't be maximized (in `overlayed` view mode) and in
+     *   `fullscreen` view mode a newly opened chat won't replace
+     *   another chat already in the foreground.
+     *   Set `force` to `true` if you want to force the chat to be
+     *   maximized or shown.
+     * @returns {Promise} Promise which resolves with the
+     *   _converse.ChatBox representing the chat.
+     *
+     * @example
+     * // To open a single chat, provide the JID of the contact you're chatting with in that chat:
+     * converse.plugins.add('myplugin', {
+     *     initialize: function() {
+     *         const _converse = this._converse;
+     *         // Note, buddy@example.org must be in your contacts roster!
+     *         api.chats.open('buddy@example.com').then(chat => {
+     *             // Now you can do something with the chat model
+     *         });
+     *     }
+     * });
+     *
+     * @example
+     * // To open an array of chats, provide an array of JIDs:
+     * converse.plugins.add('myplugin', {
+     *     initialize: function () {
+     *         const _converse = this._converse;
+     *         // Note, these users must first be in your contacts roster!
+     *         api.chats.open(['buddy1@example.com', 'buddy2@example.com']).then(chats => {
+     *             // Now you can do something with the chat models
+     *         });
+     *     }
+     * });
+     */
+    async open(jids, attrs, force) {
+      if (typeof jids === 'string') {
+        const chat = await core_api.chats.get(jids, attrs, true);
+
+        if (chat) {
+          return chat.maybeShow(force);
+        }
+
+        return chat;
+      } else if (Array.isArray(jids)) {
+        return Promise.all(jids.map(j => core_api.chats.get(j, attrs, true).then(c => c && c.maybeShow(force))).filter(c => c));
+      }
+
+      const err_msg = "chats.open: You need to provide at least one JID";
+      headless_log.error(err_msg);
+      throw new Error(err_msg);
+    },
+
+    /**
+     * Retrieves a chat or all chats.
+     *
+     * @method api.chats.get
+     * @param {String|string[]} jids - e.g. 'buddy@example.com' or ['buddy1@example.com', 'buddy2@example.com']
+     * @param {Object} [attrs] - Attributes to be set on the _converse.ChatBox model.
+     * @param {Boolean} [create=false] - Whether the chat should be created if it's not found.
+     * @returns { Promise<_converse.ChatBox> }
+     *
+     * @example
+     * // To return a single chat, provide the JID of the contact you're chatting with in that chat:
+     * const model = await api.chats.get('buddy@example.com');
+     *
+     * @example
+     * // To return an array of chats, provide an array of JIDs:
+     * const models = await api.chats.get(['buddy1@example.com', 'buddy2@example.com']);
+     *
+     * @example
+     * // To return all open chats, call the method without any parameters::
+     * const models = await api.chats.get();
+     *
+     */
+    async get(jids, attrs = {}, create = false) {
+      async function _get(jid) {
+        let model = await core_api.chatboxes.get(jid);
+
+        if (!model && create) {
+          model = await core_api.chatboxes.create(jid, attrs, core_converse.ChatBox);
+        } else {
+          model = model && model.get('type') === core_converse.PRIVATE_CHAT_TYPE ? model : null;
+
+          if (model && Object.keys(attrs).length) {
+            model.save(attrs);
+          }
+        }
+
+        return model;
+      }
+
+      if (jids === undefined) {
+        const chats = await core_api.chatboxes.get();
+        return chats.filter(c => c.get('type') === core_converse.PRIVATE_CHAT_TYPE);
+      } else if (typeof jids === 'string') {
+        return _get(jids);
+      }
+
+      return Promise.all(jids.map(jid => _get(jid)));
+    }
+
+  }
+});
+// CONCATENATED MODULE: ./src/headless/plugins/chat/index.js
+/**
+ * @module converse-chat
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
+
+
+
+
+
+
+
+
+const {
+  Strophe: chat_Strophe,
+  sizzle: chat_sizzle,
+  utils
+} = converse.env;
+const chat_u = converse.env.utils;
+
+async function handleErrorMessage(stanza) {
+  const from_jid = chat_Strophe.getBareJidFromJid(stanza.getAttribute('from'));
+
+  if (utils.isSameBareJID(from_jid, core_converse.bare_jid)) {
+    return;
+  }
+
+  const chatbox = await core_api.chatboxes.get(from_jid);
+  chatbox === null || chatbox === void 0 ? void 0 : chatbox.handleErrorMessageStanza(stanza);
+}
+
+converse.plugins.add('converse-chat', {
+  /* Optional dependencies are other plugins which might be
+   * overridden or relied upon, and therefore need to be loaded before
+   * this plugin. They are called "optional" because they might not be
+   * available, in which case any overrides applicable to them will be
+   * ignored.
+   *
+   * It's possible however to make optional dependencies non-optional.
+   * If the setting "strict_plugin_dependencies" is set to true,
+   * an error will be raised if the plugin is not found.
+   *
+   * NB: These plugins need to have already been loaded via require.js.
+   */
+  dependencies: ['converse-chatboxes', 'converse-disco'],
+
+  initialize() {
+    /* The initialize function gets called as soon as the plugin is
+     * loaded by converse.js's plugin machinery.
+     */
+    Object.assign(core_api, chat_api); // Configuration values for this plugin
+    // ====================================
+    // Refer to docs/source/configuration.rst for explanations of these
+    // configuration settings.
+
+    core_api.settings.extend({
+      'allow_message_corrections': 'all',
+      'allow_message_retraction': 'all',
+      'allow_message_styling': true,
+      'auto_join_private_chats': [],
+      'clear_messages_on_reconnection': false,
+      'filter_by_resource': false,
+      'send_chat_state_notifications': true
+    });
+    core_converse.Message = model_with_contact.extend(chat_message);
+    core_converse.Messages = Collection.extend({
+      model: core_converse.Message,
+      comparator: 'time'
+    });
+    core_converse.ChatBox = chat_model;
+    /**
+     * Handler method for all incoming single-user chat "message" stanzas.
+     * @private
+     * @method _converse#handleMessageStanza
+     * @param { MessageAttributes } attrs - The message attributes
+     */
+
+    core_converse.handleMessageStanza = async function (stanza) {
+      if (utils_stanza.isServerMessage(stanza)) {
+        // Prosody sends headline messages with type `chat`, so we need to filter them out here.
+        const from = stanza.getAttribute('from');
+        return headless_log.info("handleMessageStanza: Ignoring incoming server message from JID: ".concat(from));
+      }
+
+      const attrs = await utils_stanza.parseMessage(stanza, core_converse);
 
-      if (converse_chat_u.isErrorObject(attrs)) {
+      if (chat_u.isErrorObject(attrs)) {
         attrs.stanza && headless_log.error(attrs.stanza);
         return headless_log.error(attrs.message);
       }
 
-      const has_body = !!converse_chat_sizzle("body, encrypted[xmlns=\"".concat(converse_chat_Strophe.NS.OMEMO, "\"]"), stanza).length;
-      const chatbox = await converse_core_api.chats.get(attrs.contact_jid, {
+      const has_body = !!chat_sizzle("body, encrypted[xmlns=\"".concat(chat_Strophe.NS.OMEMO, "\"]"), stanza).length;
+      const chatbox = await core_api.chats.get(attrs.contact_jid, {
         'nickname': attrs.nick
       }, has_body);
       await (chatbox === null || chatbox === void 0 ? void 0 : chatbox.queueMessage(attrs));
@@ -74452,12 +78608,12 @@ converse.plugins.add('converse-chat', {
        * @property { module:converse-chat~MessageData } data
        */
 
-      converse_core_api.trigger('message', data);
+      core_api.trigger('message', data);
     };
 
     function registerMessageHandlers() {
-      converse_core_converse.connection.addHandler(stanza => {
-        if (converse_chat_sizzle("message > result[xmlns=\"".concat(converse_chat_Strophe.NS.MAM, "\"]"), stanza).pop()) {
+      core_converse.connection.addHandler(stanza => {
+        if (chat_sizzle("message > result[xmlns=\"".concat(chat_Strophe.NS.MAM, "\"]"), stanza).pop()) {
           // MAM messages are handled in converse-mam.
           // We shouldn't get MAM messages here because
           // they shouldn't have a `type` attribute.
@@ -74465,12 +78621,12 @@ converse.plugins.add('converse-chat', {
           return true;
         }
 
-        converse_core_converse.handleMessageStanza(stanza);
+        core_converse.handleMessageStanza(stanza);
 
         return true;
       }, null, 'message', 'chat');
 
-      converse_core_converse.connection.addHandler(stanza => {
+      core_converse.connection.addHandler(stanza => {
         // Message receipts are usually without the `type` attribute. See #1353
         if (stanza.getAttribute('type') !== null) {
           // TODO: currently Strophe has no way to register a handler
@@ -74480,12 +78636,12 @@ converse.plugins.add('converse-chat', {
           return true; // Gets handled above.
         }
 
-        converse_core_converse.handleMessageStanza(stanza);
+        core_converse.handleMessageStanza(stanza);
 
         return true;
-      }, converse_chat_Strophe.NS.RECEIPTS, 'message');
+      }, chat_Strophe.NS.RECEIPTS, 'message');
 
-      converse_core_converse.connection.addHandler(stanza => {
+      core_converse.connection.addHandler(stanza => {
         handleErrorMessage(stanza);
         return true;
       }, null, 'message', 'error');
@@ -74494,15 +78650,15 @@ converse.plugins.add('converse-chat', {
     function autoJoinChats() {
       // Automatically join private chats, based on the
       // "auto_join_private_chats" configuration setting.
-      converse_core_api.settings.get('auto_join_private_chats').forEach(jid => {
-        if (converse_core_converse.chatboxes.where({
+      core_api.settings.get('auto_join_private_chats').forEach(jid => {
+        if (core_converse.chatboxes.where({
           'jid': jid
         }).length) {
           return;
         }
 
         if (typeof jid === 'string') {
-          converse_core_api.chats.open(jid);
+          core_api.chats.open(jid);
         } else {
           headless_log.error('Invalid jid criteria specified for "auto_join_private_chats"');
         }
@@ -74516,7 +78672,7 @@ converse.plugins.add('converse-chat', {
        * @example _converse.api.waitUntil('privateChatsAutoJoined').then(() => { ... });
        */
 
-      converse_core_api.trigger('privateChatsAutoJoined');
+      core_api.trigger('privateChatsAutoJoined');
     }
     /************************ BEGIN Route Handlers ************************/
 
@@ -74526,188 +78682,35 @@ converse.plugins.add('converse-chat', {
         return headless_log.warn("Invalid JID \"".concat(jid, "\" provided in URL fragment"));
       }
 
-      converse_core_api.chats.open(jid);
+      core_api.chats.open(jid);
     }
 
-    converse_core_converse.router.route('converse/chat?jid=:jid', openChat);
+    core_converse.router.route('converse/chat?jid=:jid', openChat);
     /************************ END Route Handlers ************************/
 
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('chatBoxesFetched', autoJoinChats);
-    converse_core_api.listen.on('presencesInitialized', registerMessageHandlers);
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.shouldClearCache()) {
-        return Promise.all(converse_core_converse.chatboxes.map(c => c.messages && c.messages.clearStore({
+    core_api.listen.on('chatBoxesFetched', autoJoinChats);
+    core_api.listen.on('presencesInitialized', registerMessageHandlers);
+    core_api.listen.on('clearSession', async () => {
+      if (core_converse.shouldClearCache()) {
+        await Promise.all(core_converse.chatboxes.map(c => c.messages && c.messages.clearStore({
           'silent': true
         })));
-      }
-    });
-    /************************ END Event Handlers ************************/
-
-    /************************ BEGIN API ************************/
-
-    Object.assign(converse_core_api, {
-      /**
-       * The "chats" namespace (used for one-on-one chats)
-       *
-       * @namespace api.chats
-       * @memberOf api
-       */
-      chats: {
-        /**
-         * @method api.chats.create
-         * @param {string|string[]} jid|jids An jid or array of jids
-         * @param {object} [attrs] An object containing configuration attributes.
-         */
-        async create(jids, attrs) {
-          if (typeof jids === 'string') {
-            if (attrs && !(attrs === null || attrs === void 0 ? void 0 : attrs.fullname)) {
-              var _contact$attributes;
-
-              const contact = await converse_core_api.contacts.get(jids);
-              attrs.fullname = contact === null || contact === void 0 ? void 0 : (_contact$attributes = contact.attributes) === null || _contact$attributes === void 0 ? void 0 : _contact$attributes.fullname;
-            }
-
-            const chatbox = converse_core_api.chats.get(jids, attrs, true);
-
-            if (!chatbox) {
-              headless_log.error("Could not open chatbox for JID: " + jids);
-              return;
-            }
-
-            return chatbox;
-          }
-
-          if (Array.isArray(jids)) {
-            return Promise.all(jids.forEach(async jid => {
-              var _contact$attributes2;
-
-              const contact = await converse_core_api.contacts.get(jids);
-              attrs.fullname = contact === null || contact === void 0 ? void 0 : (_contact$attributes2 = contact.attributes) === null || _contact$attributes2 === void 0 ? void 0 : _contact$attributes2.fullname;
-              return converse_core_api.chats.get(jid, attrs, true).maybeShow();
-            }));
-          }
 
-          headless_log.error("chats.create: You need to provide at least one JID");
-          return null;
-        },
-
-        /**
-         * Opens a new one-on-one chat.
-         *
-         * @method api.chats.open
-         * @param {String|string[]} name - e.g. 'buddy@example.com' or ['buddy1@example.com', 'buddy2@example.com']
-         * @param {Object} [attrs] - Attributes to be set on the _converse.ChatBox model.
-         * @param {Boolean} [attrs.minimized] - Should the chat be created in minimized state.
-         * @param {Boolean} [force=false] - By default, a minimized
-         *   chat won't be maximized (in `overlayed` view mode) and in
-         *   `fullscreen` view mode a newly opened chat won't replace
-         *   another chat already in the foreground.
-         *   Set `force` to `true` if you want to force the chat to be
-         *   maximized or shown.
-         * @returns {Promise} Promise which resolves with the
-         *   _converse.ChatBox representing the chat.
-         *
-         * @example
-         * // To open a single chat, provide the JID of the contact you're chatting with in that chat:
-         * converse.plugins.add('myplugin', {
-         *     initialize: function() {
-         *         const _converse = this._converse;
-         *         // Note, buddy@example.org must be in your contacts roster!
-         *         api.chats.open('buddy@example.com').then(chat => {
-         *             // Now you can do something with the chat model
-         *         });
-         *     }
-         * });
-         *
-         * @example
-         * // To open an array of chats, provide an array of JIDs:
-         * converse.plugins.add('myplugin', {
-         *     initialize: function () {
-         *         const _converse = this._converse;
-         *         // Note, these users must first be in your contacts roster!
-         *         api.chats.open(['buddy1@example.com', 'buddy2@example.com']).then(chats => {
-         *             // Now you can do something with the chat models
-         *         });
-         *     }
-         * });
-         */
-        async open(jids, attrs, force) {
-          if (typeof jids === 'string') {
-            const chat = await converse_core_api.chats.get(jids, attrs, true);
-
-            if (chat) {
-              return chat.maybeShow(force);
-            }
-
-            return chat;
-          } else if (Array.isArray(jids)) {
-            return Promise.all(jids.map(j => converse_core_api.chats.get(j, attrs, true).then(c => c && c.maybeShow(force))).filter(c => c));
-          }
-
-          const err_msg = "chats.open: You need to provide at least one JID";
-          headless_log.error(err_msg);
-          throw new Error(err_msg);
-        },
-
-        /**
-         * Retrieves a chat or all chats.
-         *
-         * @method api.chats.get
-         * @param {String|string[]} jids - e.g. 'buddy@example.com' or ['buddy1@example.com', 'buddy2@example.com']
-         * @param {Object} [attrs] - Attributes to be set on the _converse.ChatBox model.
-         * @param {Boolean} [create=false] - Whether the chat should be created if it's not found.
-         * @returns { Promise<_converse.ChatBox> }
-         *
-         * @example
-         * // To return a single chat, provide the JID of the contact you're chatting with in that chat:
-         * const model = await api.chats.get('buddy@example.com');
-         *
-         * @example
-         * // To return an array of chats, provide an array of JIDs:
-         * const models = await api.chats.get(['buddy1@example.com', 'buddy2@example.com']);
-         *
-         * @example
-         * // To return all open chats, call the method without any parameters::
-         * const models = await api.chats.get();
-         *
-         */
-        async get(jids, attrs = {}, create = false) {
-          async function _get(jid) {
-            let model = await converse_core_api.chatboxes.get(jid);
-
-            if (!model && create) {
-              model = await converse_core_api.chatboxes.create(jid, attrs, converse_core_converse.ChatBox);
-            } else {
-              model = model && model.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE ? model : null;
-
-              if (model && Object.keys(attrs).length) {
-                model.save(attrs);
-              }
-            }
-
-            return model;
-          }
-
-          if (jids === undefined) {
-            const chats = await converse_core_api.chatboxes.get();
-            return chats.filter(c => c.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE);
-          } else if (typeof jids === 'string') {
-            return _get(jids);
-          }
-
-          return Promise.all(jids.map(jid => _get(jid)));
-        }
+        const filter = o => o.get('type') !== core_converse.CONTROLBOX_TYPE;
 
+        core_converse.chatboxes.clearStore({
+          'silent': true
+        }, filter);
       }
     });
-    /************************ END API ************************/
+    /************************ END Event Handlers ************************/
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-disco.js
+// CONCATENATED MODULE: ./src/headless/plugins/disco.js
 /**
  * @module converse-disco
  * @copyright The Converse.js contributors
@@ -74721,9 +78724,9 @@ converse.plugins.add('converse-chat', {
 
 
 const {
-  Strophe: converse_disco_Strophe,
+  Strophe: disco_Strophe,
   $iq,
-  utils: converse_disco_utils
+  utils: disco_utils
 } = converse.env;
 converse.plugins.add('converse-disco', {
   initialize() {
@@ -74731,15 +78734,15 @@ converse.plugins.add('converse-disco', {
      * loaded by converse.js's plugin machinery.
      */
     // Promises exposed by this plugin
-    converse_core_api.promises.add('discoInitialized');
-    converse_core_api.promises.add('streamFeaturesAdded');
+    core_api.promises.add('discoInitialized');
+    core_api.promises.add('streamFeaturesAdded');
     /**
      * @class
      * @namespace _converse.DiscoEntity
      * @memberOf _converse
      */
 
-    converse_core_converse.DiscoEntity = model_Model.extend({
+    core_converse.DiscoEntity = model_Model.extend({
       /* A Disco Entity is a JID addressable entity that can be queried
        * for features.
        *
@@ -74748,25 +78751,25 @@ converse.plugins.add('converse-disco', {
       idAttribute: 'jid',
 
       initialize(attrs, options) {
-        this.waitUntilFeaturesDiscovered = converse_disco_utils.getResolveablePromise();
-        this.dataforms = new collection_Collection();
+        this.waitUntilFeaturesDiscovered = disco_utils.getResolveablePromise();
+        this.dataforms = new Collection();
         let id = "converse.dataforms-".concat(this.get('jid'));
-        this.dataforms.browserStorage = converse_core_converse.createStore(id, 'session');
-        this.features = new collection_Collection();
+        this.dataforms.browserStorage = core_converse.createStore(id, 'session');
+        this.features = new Collection();
         id = "converse.features-".concat(this.get('jid'));
-        this.features.browserStorage = converse_core_converse.createStore(id, 'session');
+        this.features.browserStorage = core_converse.createStore(id, 'session');
         this.listenTo(this.features, 'add', this.onFeatureAdded);
-        this.fields = new collection_Collection();
+        this.fields = new Collection();
         id = "converse.fields-".concat(this.get('jid'));
-        this.fields.browserStorage = converse_core_converse.createStore(id, 'session');
+        this.fields.browserStorage = core_converse.createStore(id, 'session');
         this.listenTo(this.fields, 'add', this.onFieldAdded);
-        this.identities = new collection_Collection();
+        this.identities = new Collection();
         id = "converse.identities-".concat(this.get('jid'));
-        this.identities.browserStorage = converse_core_converse.createStore(id, 'session');
+        this.identities.browserStorage = core_converse.createStore(id, 'session');
         this.fetchFeatures(options);
-        this.items = new converse_core_converse.DiscoEntities();
+        this.items = new core_converse.DiscoEntities();
         id = "converse.disco-items-".concat(this.get('jid'));
-        this.items.browserStorage = converse_core_converse.createStore(id, 'session');
+        this.items.browserStorage = core_converse.createStore(id, 'session');
         this.items.fetch();
       },
 
@@ -74813,7 +78816,7 @@ converse.plugins.add('converse-disco', {
          * @example _converse.api.listen.on('featuresDiscovered', feature => { ... });
          */
 
-        converse_core_api.trigger('serviceDiscovered', feature);
+        core_api.trigger('serviceDiscovered', feature);
       },
 
       onFieldAdded(field) {
@@ -74825,7 +78828,7 @@ converse.plugins.add('converse-disco', {
          * @example _converse.api.listen.on('discoExtensionFieldDiscovered', () => { ... });
          */
 
-        converse_core_api.trigger('discoExtensionFieldDiscovered', field);
+        core_api.trigger('discoExtensionFieldDiscovered', field);
       },
 
       async fetchFeatures(options) {
@@ -74856,7 +78859,7 @@ converse.plugins.add('converse-disco', {
         let stanza;
 
         try {
-          stanza = await converse_core_api.disco.info(this.get('jid'), null);
+          stanza = await core_api.disco.info(this.get('jid'), null);
         } catch (iq) {
           iq === null ? headless_log.error("Timeout for disco#info query for ".concat(this.get('jid'))) : headless_log.error(iq);
           this.waitUntilFeaturesDiscovered.resolve(this);
@@ -74867,7 +78870,7 @@ converse.plugins.add('converse-disco', {
       },
 
       onDiscoItems(stanza) {
-        sizzle_default()("query[xmlns=\"".concat(converse_disco_Strophe.NS.DISCO_ITEMS, "\"] item"), stanza).forEach(item => {
+        sizzle_default()("query[xmlns=\"".concat(disco_Strophe.NS.DISCO_ITEMS, "\"] item"), stanza).forEach(item => {
           if (item.getAttribute("node")) {
             // XXX: Ignore nodes for now.
             // See: https://xmpp.org/extensions/xep-0030.html#items-nodes
@@ -74877,7 +78880,7 @@ converse.plugins.add('converse-disco', {
           const jid = item.getAttribute('jid');
 
           if (this.items.get(jid) === undefined) {
-            const entity = converse_core_converse.disco_entities.get(jid);
+            const entity = core_converse.disco_entities.get(jid);
 
             if (entity) {
               this.items.add(entity);
@@ -74899,7 +78902,7 @@ converse.plugins.add('converse-disco', {
           return;
         }
 
-        const stanza = await converse_core_api.disco.items(this.get('jid'));
+        const stanza = await core_api.disco.items(this.get('jid'));
         this.onDiscoItems(stanza);
       },
 
@@ -74911,7 +78914,7 @@ converse.plugins.add('converse-disco', {
             'name': identity.getAttribute('name')
           });
         });
-        sizzle_default()("x[type=\"result\"][xmlns=\"".concat(converse_disco_Strophe.NS.XFORM, "\"]"), stanza).forEach(form => {
+        sizzle_default()("x[type=\"result\"][xmlns=\"".concat(disco_Strophe.NS.XFORM, "\"]"), stanza).forEach(form => {
           const data = {};
           sizzle_default()('field', form).forEach(field => {
             var _field$querySelector;
@@ -74924,7 +78927,7 @@ converse.plugins.add('converse-disco', {
           this.dataforms.create(data);
         });
 
-        if (stanza.querySelector("feature[var=\"".concat(converse_disco_Strophe.NS.DISCO_ITEMS, "\"]"))) {
+        if (stanza.querySelector("feature[var=\"".concat(disco_Strophe.NS.DISCO_ITEMS, "\"]"))) {
           this.queryForItems();
         }
 
@@ -74949,8 +78952,8 @@ converse.plugins.add('converse-disco', {
       }
 
     });
-    converse_core_converse.DiscoEntities = collection_Collection.extend({
-      model: converse_core_converse.DiscoEntity,
+    core_converse.DiscoEntities = Collection.extend({
+      model: core_converse.DiscoEntity,
 
       fetchEntities() {
         return new Promise((resolve, reject) => {
@@ -74971,13 +78974,13 @@ converse.plugins.add('converse-disco', {
 
     function addClientFeatures() {
       // See https://xmpp.org/registrar/disco-categories.html
-      converse_core_api.disco.own.identities.add('client', 'web', 'Converse');
-      converse_core_api.disco.own.features.add(converse_disco_Strophe.NS.CHATSTATES);
-      converse_core_api.disco.own.features.add(converse_disco_Strophe.NS.DISCO_INFO);
-      converse_core_api.disco.own.features.add(converse_disco_Strophe.NS.ROSTERX); // Limited support
+      core_api.disco.own.identities.add('client', 'web', 'Converse');
+      core_api.disco.own.features.add(disco_Strophe.NS.CHATSTATES);
+      core_api.disco.own.features.add(disco_Strophe.NS.DISCO_INFO);
+      core_api.disco.own.features.add(disco_Strophe.NS.ROSTERX); // Limited support
 
-      if (converse_core_api.settings.get("message_carbons")) {
-        converse_core_api.disco.own.features.add(converse_disco_Strophe.NS.CARBONS);
+      if (core_api.settings.get("message_carbons")) {
+        core_api.disco.own.features.add(disco_Strophe.NS.CARBONS);
       }
       /**
        * Triggered in converse-disco once the core disco features of
@@ -74987,7 +78990,7 @@ converse.plugins.add('converse-disco', {
        */
 
 
-      converse_core_api.trigger('addClientFeatures');
+      core_api.trigger('addClientFeatures');
       return this;
     }
 
@@ -74997,12 +79000,12 @@ converse.plugins.add('converse-disco', {
       // features from cache.
       // Otherwise the features will be created once we've received them
       // from the server (see populateStreamFeatures).
-      if (!converse_core_converse.stream_features) {
-        const bare_jid = converse_disco_Strophe.getBareJidFromJid(converse_core_converse.jid);
+      if (!core_converse.stream_features) {
+        const bare_jid = disco_Strophe.getBareJidFromJid(core_converse.jid);
         const id = "converse.stream-features-".concat(bare_jid);
-        converse_core_api.promises.add('streamFeaturesAdded');
-        converse_core_converse.stream_features = new collection_Collection();
-        converse_core_converse.stream_features.browserStorage = converse_core_converse.createStore(id, "session");
+        core_api.promises.add('streamFeaturesAdded');
+        core_converse.stream_features = new Collection();
+        core_converse.stream_features.browserStorage = core_converse.createStore(id, "session");
       }
     }
 
@@ -75013,8 +79016,8 @@ converse.plugins.add('converse-disco', {
       // Once this is done, we populate the _converse.stream_features collection
       // and trigger streamFeaturesAdded.
       initStreamFeatures();
-      Array.from(converse_core_converse.connection.features.childNodes).forEach(feature => {
-        converse_core_converse.stream_features.create({
+      Array.from(core_converse.connection.features.childNodes).forEach(feature => {
+        core_converse.stream_features.create({
           'name': feature.nodeName,
           'xmlns': feature.getAttribute('xmlns')
         });
@@ -75030,7 +79033,7 @@ converse.plugins.add('converse-disco', {
        * @event _converse#streamFeaturesAdded
        * @example _converse.api.listen.on('streamFeaturesAdded', () => { ... });
        */
-      converse_core_api.trigger('streamFeaturesAdded');
+      core_api.trigger('streamFeaturesAdded');
     }
 
     const plugin = this;
@@ -75040,7 +79043,7 @@ converse.plugins.add('converse-disco', {
     function onDiscoInfoRequest(stanza) {
       const node = stanza.getElementsByTagName('query')[0].getAttribute('node');
       const attrs = {
-        xmlns: converse_disco_Strophe.NS.DISCO_INFO
+        xmlns: disco_Strophe.NS.DISCO_INFO
       };
 
       if (node) {
@@ -75082,25 +79085,25 @@ converse.plugins.add('converse-disco', {
         'var': feature
       }).up());
 
-      converse_core_api.send(iqresult.tree());
+      core_api.send(iqresult.tree());
       return true;
     }
 
     async function initializeDisco() {
       addClientFeatures();
 
-      converse_core_converse.connection.addHandler(onDiscoInfoRequest, converse_disco_Strophe.NS.DISCO_INFO, 'iq', 'get', null, null);
+      core_converse.connection.addHandler(onDiscoInfoRequest, disco_Strophe.NS.DISCO_INFO, 'iq', 'get', null, null);
 
-      converse_core_converse.disco_entities = new converse_core_converse.DiscoEntities();
-      const id = "converse.disco-entities-".concat(converse_core_converse.bare_jid);
-      converse_core_converse.disco_entities.browserStorage = converse_core_converse.createStore(id, 'session');
-      const collection = await converse_core_converse.disco_entities.fetchEntities();
+      core_converse.disco_entities = new core_converse.DiscoEntities();
+      const id = "converse.disco-entities-".concat(core_converse.bare_jid);
+      core_converse.disco_entities.browserStorage = core_converse.createStore(id, 'session');
+      const collection = await core_converse.disco_entities.fetchEntities();
 
-      if (collection.length === 0 || !collection.get(converse_core_converse.domain)) {
+      if (collection.length === 0 || !collection.get(core_converse.domain)) {
         // If we don't have an entity for our own XMPP server,
         // create one.
-        converse_core_converse.disco_entities.create({
-          'jid': converse_core_converse.domain
+        core_converse.disco_entities.create({
+          'jid': core_converse.domain
         });
       }
       /**
@@ -75112,49 +79115,49 @@ converse.plugins.add('converse-disco', {
        */
 
 
-      converse_core_api.trigger('discoInitialized');
+      core_api.trigger('discoInitialized');
     }
     /******************** Event Handlers ********************/
 
 
-    converse_core_api.listen.on('userSessionInitialized', async () => {
+    core_api.listen.on('userSessionInitialized', async () => {
       initStreamFeatures();
 
-      if (converse_core_converse.connfeedback.get('connection_status') === converse_disco_Strophe.Status.ATTACHED) {
+      if (core_converse.connfeedback.get('connection_status') === disco_Strophe.Status.ATTACHED) {
         // When re-attaching to a BOSH session, we fetch the stream features from the cache.
-        await new Promise((success, error) => converse_core_converse.stream_features.fetch({
+        await new Promise((success, error) => core_converse.stream_features.fetch({
           success,
           error
         }));
         notifyStreamFeaturesAdded();
       }
     });
-    converse_core_api.listen.on('beforeResourceBinding', populateStreamFeatures);
-    converse_core_api.listen.on('reconnected', initializeDisco);
-    converse_core_api.listen.on('connected', initializeDisco);
-    converse_core_api.listen.on('beforeTearDown', async () => {
-      converse_core_api.promises.add('streamFeaturesAdded');
+    core_api.listen.on('beforeResourceBinding', populateStreamFeatures);
+    core_api.listen.on('reconnected', initializeDisco);
+    core_api.listen.on('connected', initializeDisco);
+    core_api.listen.on('beforeTearDown', async () => {
+      core_api.promises.add('streamFeaturesAdded');
 
-      if (converse_core_converse.stream_features) {
-        await converse_core_converse.stream_features.clearStore();
-        delete converse_core_converse.stream_features;
+      if (core_converse.stream_features) {
+        await core_converse.stream_features.clearStore();
+        delete core_converse.stream_features;
       }
     });
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.shouldClearCache() && converse_core_converse.disco_entities) {
-        Array.from(converse_core_converse.disco_entities.models).forEach(e => e.features.clearStore());
-        Array.from(converse_core_converse.disco_entities.models).forEach(e => e.identities.clearStore());
-        Array.from(converse_core_converse.disco_entities.models).forEach(e => e.dataforms.clearStore());
-        Array.from(converse_core_converse.disco_entities.models).forEach(e => e.fields.clearStore());
+    core_api.listen.on('clearSession', () => {
+      if (core_converse.shouldClearCache() && core_converse.disco_entities) {
+        Array.from(core_converse.disco_entities.models).forEach(e => e.features.clearStore());
+        Array.from(core_converse.disco_entities.models).forEach(e => e.identities.clearStore());
+        Array.from(core_converse.disco_entities.models).forEach(e => e.dataforms.clearStore());
+        Array.from(core_converse.disco_entities.models).forEach(e => e.fields.clearStore());
 
-        converse_core_converse.disco_entities.clearStore();
+        core_converse.disco_entities.clearStore();
 
-        delete converse_core_converse.disco_entities;
+        delete core_converse.disco_entities;
       }
     });
     /************************ API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * The XEP-0030 service discovery API
        *
@@ -75177,20 +79180,20 @@ converse.plugins.add('converse-disco', {
            * @example _converse.api.disco.stream.getFeature('ver', 'urn:xmpp:features:rosterver')
            */
           async getFeature(name, xmlns) {
-            await converse_core_api.waitUntil('streamFeaturesAdded');
+            await core_api.waitUntil('streamFeaturesAdded');
 
             if (!name || !xmlns) {
               throw new Error("name and xmlns need to be provided when calling disco.stream.getFeature");
             }
 
-            if (converse_core_converse.stream_features === undefined && !converse_core_api.connection.connected()) {
+            if (core_converse.stream_features === undefined && !core_api.connection.connected()) {
               // Happens during tests when disco lookups happen asynchronously after teardown.
               const msg = "Tried to get feature ".concat(name, " ").concat(xmlns, " but _converse.stream_features has been torn down");
               headless_log.warn(msg);
               return;
             }
 
-            return converse_core_converse.stream_features.findWhere({
+            return core_converse.stream_features.findWhere({
               'name': name,
               'xmlns': xmlns
             });
@@ -75307,7 +79310,7 @@ converse.plugins.add('converse-disco', {
          */
         info(jid, node) {
           const attrs = {
-            xmlns: converse_disco_Strophe.NS.DISCO_INFO
+            xmlns: disco_Strophe.NS.DISCO_INFO
           };
 
           if (node) {
@@ -75315,11 +79318,11 @@ converse.plugins.add('converse-disco', {
           }
 
           const info = $iq({
-            'from': converse_core_converse.connection.jid,
+            'from': core_converse.connection.jid,
             'to': jid,
             'type': 'get'
           }).c('query', attrs);
-          return converse_core_api.sendIQ(info);
+          return core_api.sendIQ(info);
         },
 
         /**
@@ -75332,15 +79335,15 @@ converse.plugins.add('converse-disco', {
          */
         items(jid, node) {
           const attrs = {
-            'xmlns': converse_disco_Strophe.NS.DISCO_ITEMS
+            'xmlns': disco_Strophe.NS.DISCO_ITEMS
           };
 
           if (node) {
             attrs.node = node;
           }
 
-          return converse_core_api.sendIQ($iq({
-            'from': converse_core_converse.connection.jid,
+          return core_api.sendIQ($iq({
+            'from': core_converse.connection.jid,
             'to': jid,
             'type': 'get'
           }).c('query', attrs));
@@ -75362,26 +79365,26 @@ converse.plugins.add('converse-disco', {
            * @example _converse.api.disco.entities.get(jid);
            */
           async get(jid, create = false) {
-            await converse_core_api.waitUntil('discoInitialized');
+            await core_api.waitUntil('discoInitialized');
 
             if (!jid) {
-              return converse_core_converse.disco_entities;
+              return core_converse.disco_entities;
             }
 
-            if (converse_core_converse.disco_entities === undefined && !converse_core_api.connection.connected()) {
+            if (core_converse.disco_entities === undefined && !core_api.connection.connected()) {
               // Happens during tests when disco lookups happen asynchronously after teardown.
               const msg = "Tried to look up entity ".concat(jid, " but _converse.disco_entities has been torn down");
               headless_log.warn(msg);
               return;
             }
 
-            const entity = converse_core_converse.disco_entities.get(jid);
+            const entity = core_converse.disco_entities.get(jid);
 
             if (entity || !create) {
               return entity;
             }
 
-            return converse_core_api.disco.entities.create(jid);
+            return core_api.disco.entities.create(jid);
           },
 
           /**
@@ -75400,7 +79403,7 @@ converse.plugins.add('converse-disco', {
            * @example _converse.api.disco.entities.create(jid, {'ignore_cache': true});
            */
           create(jid, options) {
-            return converse_core_converse.disco_entities.create({
+            return core_converse.disco_entities.create({
               'jid': jid
             }, options);
           }
@@ -75434,10 +79437,10 @@ converse.plugins.add('converse-disco', {
               throw new TypeError('You need to provide an entity JID');
             }
 
-            await converse_core_api.waitUntil('discoInitialized');
-            let entity = await converse_core_api.disco.entities.get(jid, true);
+            await core_api.waitUntil('discoInitialized');
+            let entity = await core_api.disco.entities.get(jid, true);
 
-            if (converse_core_converse.disco_entities === undefined && !converse_core_api.connection.connected()) {
+            if (core_converse.disco_entities === undefined && !core_api.connection.connected()) {
               // Happens during tests when disco lookups happen asynchronously after teardown.
               const msg = "Tried to get feature ".concat(feature, " for ").concat(jid, " but _converse.disco_entities has been torn down");
               headless_log.warn(msg);
@@ -75471,7 +79474,7 @@ converse.plugins.add('converse-disco', {
          * }
          */
         async supports(feature, jid) {
-          const features = await converse_core_api.disco.features.get(feature, jid);
+          const features = await core_api.disco.features.get(feature, jid);
           return features.length > 0;
         },
 
@@ -75489,8 +79492,8 @@ converse.plugins.add('converse-disco', {
             throw new TypeError('api.disco.refresh: You need to provide an entity JID');
           }
 
-          await converse_core_api.waitUntil('discoInitialized');
-          let entity = await converse_core_api.disco.entities.get(jid);
+          await core_api.waitUntil('discoInitialized');
+          let entity = await core_api.disco.entities.get(jid);
 
           if (entity) {
             entity.features.reset();
@@ -75498,13 +79501,13 @@ converse.plugins.add('converse-disco', {
             entity.identities.reset();
 
             if (!entity.waitUntilFeaturesDiscovered.isPending) {
-              entity.waitUntilFeaturesDiscovered = converse_disco_utils.getResolveablePromise();
+              entity.waitUntilFeaturesDiscovered = disco_utils.getResolveablePromise();
             }
 
             entity.queryInfo();
           } else {
             // Create it if it doesn't exist
-            entity = await converse_core_api.disco.entities.create(jid, {
+            entity = await core_api.disco.entities.create(jid, {
               'ignore_cache': true
             });
           }
@@ -75517,7 +79520,7 @@ converse.plugins.add('converse-disco', {
          * @method api.disco.refreshFeatures
          */
         refreshFeatures(jid) {
-          return converse_core_api.refresh(jid);
+          return core_api.refresh(jid);
         },
 
         /**
@@ -75534,8 +79537,8 @@ converse.plugins.add('converse-disco', {
             throw new TypeError('api.disco.getFeatures: You need to provide an entity JID');
           }
 
-          await converse_core_api.waitUntil('discoInitialized');
-          let entity = await converse_core_api.disco.entities.get(jid, true);
+          await core_api.waitUntil('discoInitialized');
+          let entity = await core_api.disco.entities.get(jid, true);
           entity = await entity.waitUntilFeaturesDiscovered;
           return entity.features;
         },
@@ -75556,8 +79559,8 @@ converse.plugins.add('converse-disco', {
             throw new TypeError('api.disco.getFields: You need to provide an entity JID');
           }
 
-          await converse_core_api.waitUntil('discoInitialized');
-          let entity = await converse_core_api.disco.entities.get(jid, true);
+          await core_api.waitUntil('discoInitialized');
+          let entity = await core_api.disco.entities.get(jid, true);
           entity = await entity.waitUntilFeaturesDiscovered;
           return entity.fields;
         },
@@ -75594,9 +79597,9 @@ converse.plugins.add('converse-disco', {
          * ).catch(e => log.error(e));
          */
         async getIdentity(category, type, jid) {
-          const e = await converse_core_api.disco.entities.get(jid, true);
+          const e = await core_api.disco.entities.get(jid, true);
 
-          if (e === undefined && !converse_core_api.connection.connected()) {
+          if (e === undefined && !core_api.connection.connected()) {
             // Happens during tests when disco lookups happen asynchronously after teardown.
             const msg = "Tried to look up category ".concat(category, " for ").concat(jid, " but _converse.disco_entities has been torn down");
             headless_log.warn(msg);
@@ -75611,15 +79614,15 @@ converse.plugins.add('converse-disco', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/emoji_regexes.js
+// CONCATENATED MODULE: ./src/headless/plugins/emoji/regexes.js
 const ASCII_REGEX = '(\\*\\\\0\\/\\*|\\*\\\\O\\/\\*|\\-___\\-|\\:\'\\-\\)|\'\\:\\-\\)|\'\\:\\-D|\\>\\:\\-\\)|>\\:\\-\\)|\'\\:\\-\\(|\\>\\:\\-\\(|>\\:\\-\\(|\\:\'\\-\\(|O\\:\\-\\)|0\\:\\-3|0\\:\\-\\)|0;\\^\\)|O;\\-\\)|0;\\-\\)|O\\:\\-3|\\-__\\-|\\:\\-Þ|\\:\\-Þ|\\<\\/3|<\\/3|\\:\'\\)|\\:\\-D|\'\\:\\)|\'\\=\\)|\'\\:D|\'\\=D|\\>\\:\\)|>\\:\\)|\\>;\\)|>;\\)|\\>\\=\\)|>\\=\\)|;\\-\\)|\\*\\-\\)|;\\-\\]|;\\^\\)|\'\\:\\(|\'\\=\\(|\\:\\-\\*|\\:\\^\\*|\\>\\:P|>\\:P|X\\-P|\\>\\:\\[|>\\:\\[|\\:\\-\\(|\\:\\-\\[|\\>\\:\\(|>\\:\\(|\\:\'\\(|;\\-\\(|\\>\\.\\<|>\\.<|#\\-\\)|%\\-\\)|X\\-\\)|\\\\0\\/|\\\\O\\/|0\\:3|0\\:\\)|O\\:\\)|O\\=\\)|O\\:3|B\\-\\)|8\\-\\)|B\\-D|8\\-D|\\-_\\-|\\>\\:\\\\|>\\:\\\\|\\>\\:\\/|>\\:\\/|\\:\\-\\/|\\:\\-\\.|\\:\\-P|\\:Þ|\\:Þ|\\:\\-b|\\:\\-O|O_O|\\>\\:O|>\\:O|\\:\\-X|\\:\\-#|\\:\\-\\)|\\(y\\)|\\<3|<3|\\:D|\\=D|;\\)|\\*\\)|;\\]|;D|\\:\\*|\\=\\*|\\:\\(|\\:\\[|\\=\\(|\\:@|;\\(|D\\:|\\:\\$|\\=\\$|#\\)|%\\)|X\\)|B\\)|8\\)|\\:\\/|\\:\\\\|\\=\\/|\\=\\\\|\\:L|\\=L|\\:P|\\=P|\\:b|\\:O|\\:X|\\:#|\\=X|\\=#|\\:\\)|\\=\\]|\\=\\)|\\:\\])';
 const ASCII_REPLACE_REGEX = new RegExp("<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|((\\s|^)" + ASCII_REGEX + "(?=\\s|$|[!,.?]))", "gi");
 const CODEPOINTS_REGEX = /(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;
-// CONCATENATED MODULE: ./src/headless/converse-emoji.js
+// CONCATENATED MODULE: ./src/headless/plugins/emoji/index.js
 function _templateObject3() {
   const data = _taggedTemplateLiteral(["<img class=\"emoji\"\n            draggable=\"false\"\n            title=\"", "\"\n            alt=\"", "\"\n            src=\"", "\">"]);
 
-  _templateObject3 = function _templateObject3() {
+  _templateObject3 = function () {
     return data;
   };
 
@@ -75627,9 +79630,9 @@ function _templateObject3() {
 }
 
 function _templateObject2() {
-  const data = _taggedTemplateLiteral(["<img class=\"emoji\"\n                    draggable=\"false\"\n                    alt=\"", "\"\n                    src=\"", "/72x72/", ".png\"/>"]);
+  const data = _taggedTemplateLiteral(["<img class=\"emoji\"\n                draggable=\"false\"\n                title=\"", "\"\n                alt=\"", "\"\n                src=\"", "/72x72/", ".png\"/>"]);
 
-  _templateObject2 = function _templateObject2() {
+  _templateObject2 = function () {
     return data;
   };
 
@@ -75639,7 +79642,7 @@ function _templateObject2() {
 function _templateObject() {
   const data = _taggedTemplateLiteral(["<span title=\"", "\">", "</span>"]);
 
-  _templateObject = function _templateObject() {
+  _templateObject = function () {
     return data;
   };
 
@@ -75657,10 +79660,10 @@ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(
 
 
 
-const converse_emoji_u = converse.env.utils;
+const emoji_u = converse.env.utils;
 converse.emojis = {
   'initialized': false,
-  'initialized_promise': converse_emoji_u.getResolveablePromise()
+  'initialized_promise': emoji_u.getResolveablePromise()
 };
 const ASCII_LIST = {
   '*\\0/*': '1f646',
@@ -75779,7 +79782,6 @@ const ASCII_LIST = {
   '=)': '1f642',
   ':]': '1f642'
 };
-let shortnames_regex;
 
 function toCodePoint(unicode_surrogates) {
   const r = [];
@@ -75813,7 +79815,7 @@ function fromCodePoint(codepoint) {
   return String.fromCharCode(0xD800 + (code >> 10), 0xDC00 + (code & 0x3FF));
 }
 
-function converse_emoji_convert(unicode) {
+function emoji_convert(unicode) {
   // Converts unicode code points and code pairs to their respective characters
   if (unicode.indexOf("-") > -1) {
     const parts = [],
@@ -75854,14 +79856,14 @@ function getTonedEmojis() {
 function convertASCII2Emoji(str) {
   // Replace ASCII smileys
   return str.replace(ASCII_REPLACE_REGEX, (entire, m1, m2, m3) => {
-    if (typeof m3 === 'undefined' || m3 === '' || !(converse_emoji_u.unescapeHTML(m3) in ASCII_LIST)) {
+    if (typeof m3 === 'undefined' || m3 === '' || !(emoji_u.unescapeHTML(m3) in ASCII_LIST)) {
       // if the ascii doesnt exist just return the entire match
       return entire;
     }
 
-    m3 = converse_emoji_u.unescapeHTML(m3);
+    m3 = emoji_u.unescapeHTML(m3);
     const unicode = ASCII_LIST[m3].toUpperCase();
-    return m2 + converse_emoji_convert(unicode);
+    return m2 + emoji_convert(unicode);
   });
 }
 function getEmojiMarkup(data, options = {
@@ -75872,15 +79874,17 @@ function getEmojiMarkup(data, options = {
   const shortname = data.shortname;
 
   if (emoji) {
-    if (options.add_title_wrapper) {
-      if (converse_core_api.settings.get('use_system_emojis')) {
+    if (options.unicode_only) {
+      return emoji;
+    } else if (core_api.settings.get('use_system_emojis')) {
+      if (options.add_title_wrapper) {
         return shortname ? lit_html_html(_templateObject(), shortname, emoji) : emoji;
       } else {
-        const path = converse_core_api.settings.get('emoji_image_path');
-        return lit_html_html(_templateObject2(), emoji, path, data.cp);
+        return emoji;
       }
     } else {
-      return emoji;
+      const path = core_api.settings.get('emoji_image_path');
+      return lit_html_html(_templateObject2(), shortname, emoji, path, data.cp);
     }
   } else if (options.unicode_only) {
     return shortname;
@@ -75893,7 +79897,7 @@ function getShortnameReferences(text) {
     throw new Error('getShortnameReferences called before emojis are initialized. ' + 'To avoid this problem, first await the converse.emojis.initilaized_promise.');
   }
 
-  const references = [...text.matchAll(shortnames_regex)];
+  const references = [...text.matchAll(converse.emojis.shortnames_regex)].filter(ref => ref[0].length > 0);
   return references.map(ref => {
     const cp = converse.emojis.by_sn[ref[0]].cp;
     return {
@@ -75901,7 +79905,7 @@ function getShortnameReferences(text) {
       'begin': ref.index,
       'end': ref.index + ref[0].length,
       'shortname': ref[0],
-      'emoji': cp ? converse_emoji_convert(cp) : null
+      'emoji': cp ? emoji_convert(cp) : null
     };
   });
 }
@@ -75925,7 +79929,7 @@ function getCodePointReferences(text) {
       'cp': icon_id,
       'emoji': emoji,
       'end': offset + emoji.length,
-      'shortname': ((_u$getEmojisByAtrribu = converse_emoji_u.getEmojisByAtrribute('cp')[icon_id]) === null || _u$getEmojisByAtrribu === void 0 ? void 0 : _u$getEmojisByAtrribu.sn) || ''
+      'shortname': ((_u$getEmojisByAtrribu = emoji_u.getEmojisByAtrribute('cp')[icon_id]) === null || _u$getEmojisByAtrribu === void 0 ? void 0 : _u$getEmojisByAtrribu.sn) || ''
     });
   });
   return references;
@@ -75953,8 +79957,8 @@ converse.plugins.add('converse-emoji', {
      */
     const {
       ___
-    } = converse_core_converse;
-    converse_core_api.settings.extend({
+    } = core_converse;
+    core_api.settings.extend({
       'emoji_image_path': 'https://twemoji.maxcdn.com/v/12.1.6/',
       'emoji_categories': {
         "smileys": ":grinning:",
@@ -75994,7 +79998,7 @@ converse.plugins.add('converse-emoji', {
      * @memberOf _converse
      */
 
-    converse_core_converse.EmojiPicker = model_Model.extend({
+    core_converse.EmojiPicker = model_Model.extend({
       defaults: {
         'current_category': 'smileys',
         'current_skintone': '',
@@ -76005,7 +80009,7 @@ converse.plugins.add('converse-emoji', {
     // Closured cache
 
     const emojis_by_attribute = {};
-    Object.assign(converse_emoji_u, {
+    Object.assign(emoji_u, {
       /**
        * Returns an emoji represented by the passed in shortname.
        * Scans the passed in text for shortnames and replaces them with
@@ -76048,7 +80052,7 @@ converse.plugins.add('converse-emoji', {
        * @returns { String }
        */
       shortnamesToUnicode(str) {
-        return converse_emoji_u.shortnamesToEmojis(str, {
+        return emoji_u.shortnamesToEmojis(str, {
           'unicode_only': true
         })[0];
       },
@@ -76067,7 +80071,7 @@ converse.plugins.add('converse-emoji', {
         }
 
         const emojis = words.filter(text => {
-          const refs = getCodePointReferences(converse_emoji_u.shortnamesToUnicode(text));
+          const refs = getCodePointReferences(emoji_u.shortnamesToUnicode(text));
           return refs.length === 1 && (text === refs[0]['shortname'] || text === refs[0]['emoji']);
         });
         return emojis.length === words.length;
@@ -76101,7 +80105,7 @@ converse.plugins.add('converse-emoji', {
     /************************ BEGIN API ************************/
     // We extend the default converse.js API to add methods specific to MUC groupchats.
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * @namespace api.emojis
        * @memberOf api
@@ -76117,7 +80121,7 @@ converse.plugins.add('converse-emoji', {
             converse.emojis.initialized = true;
             const {
               default: json
-            } = await __webpack_require__.e(/* import() | emojis */ 137).then(__webpack_require__.t.bind(null, 458, 3));
+            } = await __webpack_require__.e(/* import() | emojis */ 137).then(__webpack_require__.t.bind(null, 547, 3));
             converse.emojis.json = json;
             converse.emojis.by_sn = Object.keys(json).reduce((result, cat) => Object.assign(result, json[cat]), {});
             converse.emojis.list = Object.values(converse.emojis.by_sn);
@@ -76126,7 +80130,7 @@ converse.plugins.add('converse-emoji', {
 
             const getShortNames = () => converse.emojis.shortnames.map(s => s.replace(/[+]/g, "\\$&")).join('|');
 
-            shortnames_regex = new RegExp(getShortNames(), "gi");
+            converse.emojis.shortnames_regex = new RegExp(getShortNames(), "gi");
             converse.emojis.toned = getTonedEmojis();
             converse.emojis.initialized_promise.resolve();
           }
@@ -76139,181 +80143,127 @@ converse.plugins.add('converse-emoji', {
   }
 
 });
-// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js
-/**
- * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
- *
- * @private
- * @param {Array} props The property identifiers.
- * @param {Array} values The property values.
- * @param {Function} assignFunc The function to assign values.
- * @returns {Object} Returns the new object.
- */
-function baseZipObject(props, values, assignFunc) {
-  var index = -1,
-      length = props.length,
-      valsLength = values.length,
-      result = {};
-
-  while (++index < length) {
-    var value = index < valsLength ? values[index] : undefined;
-    assignFunc(result, props[index], value);
-  }
-  return result;
-}
-
-/* harmony default export */ var _baseZipObject = (baseZipObject);
-
-// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js
+// CONCATENATED MODULE: ./src/headless/plugins/muc/message.js
 
 
 
 /**
- * This method is like `_.fromPairs` except that it accepts two arrays,
- * one of property identifiers and one of corresponding values.
- *
- * @static
- * @memberOf _
- * @since 0.4.0
- * @category Array
- * @param {Array} [props=[]] The property identifiers.
- * @param {Array} [values=[]] The property values.
- * @returns {Object} Returns the new object.
- * @example
- *
- * _.zipObject(['a', 'b'], [1, 2]);
- * // => { 'a': 1, 'b': 2 }
+ * Mixing that turns a Message model into a ChatRoomMessage model.
+ * @class
+ * @namespace _converse.ChatRoomMessage
+ * @memberOf _converse
  */
-function zipObject(props, values) {
-  return _baseZipObject(props || [], values || [], _assignValue);
-}
-
-/* harmony default export */ var lodash_es_zipObject = (zipObject);
-
-// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIntersection.js
-
 
+const ChatRoomMessageMixin = {
+  initialize() {
+    if (!this.checkValidity()) {
+      return;
+    }
 
+    if (this.get('file')) {
+      this.on('change:put', this.uploadFile, this);
+    }
 
+    if (!this.setTimerForEphemeralMessage()) {
+      this.setOccupant();
+    }
+    /**
+     * Triggered once a {@link _converse.ChatRoomMessageInitialized} has been created and initialized.
+     * @event _converse#chatRoomMessageInitialized
+     * @type { _converse.ChatRoomMessages}
+     * @example _converse.api.listen.on('chatRoomMessageInitialized', model => { ... });
+     */
 
 
+    core_api.trigger('chatRoomMessageInitialized', this);
+  },
 
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var _baseIntersection_nativeMin = Math.min;
+  /**
+   * Determines whether this messsage may be moderated,
+   * based on configuration settings and server support.
+   * @async
+   * @private
+   * @method _converse.ChatRoomMessages#mayBeModerated
+   * @returns { Boolean }
+   */
+  mayBeModerated() {
+    return ['all', 'moderator'].includes(core_api.settings.get('allow_message_retraction')) && this.collection.chatbox.canModerateMessages();
+  },
 
-/**
- * The base implementation of methods like `_.intersection`, without support
- * for iteratee shorthands, that accepts an array of arrays to inspect.
- *
- * @private
- * @param {Array} arrays The arrays to inspect.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new array of shared values.
- */
-function baseIntersection(arrays, iteratee, comparator) {
-  var includes = comparator ? _arrayIncludesWith : _arrayIncludes,
-      length = arrays[0].length,
-      othLength = arrays.length,
-      othIndex = othLength,
-      caches = Array(othLength),
-      maxLength = Infinity,
-      result = [];
+  checkValidity() {
+    const result = core_converse.Message.prototype.checkValidity.call(this);
 
-  while (othIndex--) {
-    var array = arrays[othIndex];
-    if (othIndex && iteratee) {
-      array = _arrayMap(array, _baseUnary(iteratee));
-    }
-    maxLength = _baseIntersection_nativeMin(array.length, maxLength);
-    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
-      ? new _SetCache(othIndex && array)
-      : undefined;
-  }
-  array = arrays[0];
+    !result && this.collection.chatbox.debouncedRejoin();
+    return result;
+  },
 
-  var index = -1,
-      seen = caches[0];
+  onOccupantRemoved() {
+    var _this$collection;
 
-  outer:
-  while (++index < length && result.length < maxLength) {
-    var value = array[index],
-        computed = iteratee ? iteratee(value) : value;
+    this.stopListening(this.occupant);
+    delete this.occupant;
+    const chatbox = this === null || this === void 0 ? void 0 : (_this$collection = this.collection) === null || _this$collection === void 0 ? void 0 : _this$collection.chatbox;
 
-    value = (comparator || value !== 0) ? value : 0;
-    if (!(seen
-          ? _cacheHas(seen, computed)
-          : includes(result, computed, comparator)
-        )) {
-      othIndex = othLength;
-      while (--othIndex) {
-        var cache = caches[othIndex];
-        if (!(cache
-              ? _cacheHas(cache, computed)
-              : includes(arrays[othIndex], computed, comparator))
-            ) {
-          continue outer;
-        }
-      }
-      if (seen) {
-        seen.push(computed);
-      }
-      result.push(value);
+    if (!chatbox) {
+      return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
     }
-  }
-  return result;
-}
 
-/* harmony default export */ var _baseIntersection = (baseIntersection);
+    this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded);
+  },
 
-// CONCATENATED MODULE: ./node_modules/lodash-es/_castArrayLikeObject.js
+  onOccupantAdded(occupant) {
+    if (occupant.get('nick') === strophe["e" /* Strophe */].getResourceFromJid(this.get('from'))) {
+      var _this$collection2;
 
+      this.occupant = occupant;
+      this.trigger('occupantAdded');
+      this.listenTo(this.occupant, 'destroy', this.onOccupantRemoved);
+      const chatbox = this === null || this === void 0 ? void 0 : (_this$collection2 = this.collection) === null || _this$collection2 === void 0 ? void 0 : _this$collection2.chatbox;
 
-/**
- * Casts `value` to an empty array if it's not an array like object.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {Array|Object} Returns the cast array-like object.
- */
-function castArrayLikeObject(value) {
-  return lodash_es_isArrayLikeObject(value) ? value : [];
-}
+      if (!chatbox) {
+        return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
+      }
 
-/* harmony default export */ var _castArrayLikeObject = (castArrayLikeObject);
+      this.stopListening(chatbox.occupants, 'add', this.onOccupantAdded);
+    }
+  },
 
-// CONCATENATED MODULE: ./node_modules/lodash-es/intersection.js
+  setOccupant() {
+    var _this$collection3;
 
+    if (this.get('type') !== 'groupchat') {
+      return;
+    }
 
+    const chatbox = this === null || this === void 0 ? void 0 : (_this$collection3 = this.collection) === null || _this$collection3 === void 0 ? void 0 : _this$collection3.chatbox;
 
+    if (!chatbox) {
+      return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
+    }
 
+    const nick = strophe["e" /* Strophe */].getResourceFromJid(this.get('from'));
+    this.occupant = chatbox.occupants.findWhere({
+      nick
+    });
 
-/**
- * Creates an array of unique values that are included in all given arrays
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons. The order and references of result values are
- * determined by the first array.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {...Array} [arrays] The arrays to inspect.
- * @returns {Array} Returns the new array of intersecting values.
- * @example
- *
- * _.intersection([2, 1], [2, 3]);
- * // => [2]
- */
-var intersection = _baseRest(function(arrays) {
-  var mapped = _arrayMap(arrays, _castArrayLikeObject);
-  return (mapped.length && mapped[0] === arrays[0])
-    ? _baseIntersection(mapped)
-    : [];
-});
+    if (!this.occupant && core_api.settings.get('muc_send_probes')) {
+      this.occupant = chatbox.occupants.create({
+        nick,
+        'type': 'unavailable'
+      });
+      const jid = "".concat(chatbox.get('jid'), "/").concat(nick);
+      core_api.user.presence.send('probe', jid);
+    }
 
-/* harmony default export */ var lodash_es_intersection = (intersection);
+    if (this.occupant) {
+      this.listenTo(this.occupant, 'destroy', this.onOccupantRemoved);
+    } else {
+      this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded);
+    }
+  }
 
+};
+/* harmony default export */ var muc_message = (ChatRoomMessageMixin);
 // CONCATENATED MODULE: ./src/headless/utils/muc.js
 /**
  * @copyright The Converse.js contributors
@@ -76434,6 +80384,55 @@ const muc_utils = {
 
 };
 /* harmony default export */ var utils_muc = (muc_utils);
+// CONCATENATED MODULE: ./src/headless/utils/parse-helpers.js
+/**
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ * @description Pure functions to help functionally parse messages.
+ * @todo Other parsing helpers can be made more abstract and placed here.
+ */
+const helpers = {};
+
+const escapeRegexChars = (string, char) => string.replace(RegExp('\\' + char, 'ig'), '\\' + char);
+
+helpers.escapeCharacters = characters => string => characters.split('').reduce(escapeRegexChars, string);
+
+helpers.escapeRegexString = helpers.escapeCharacters('[\\^$.?*+(){}'); // `for` is ~25% faster than using `Array.find()`
+
+helpers.findFirstMatchInArray = array => text => {
+  for (let i = 0; i < array.length; i++) {
+    if (text.localeCompare(array[i], undefined, {
+      sensitivity: 'base'
+    }) === 0) {
+      return array[i];
+    }
+  }
+
+  return null;
+};
+
+const reduceReferences = ([text, refs], ref, index) => {
+  let updated_text = text;
+  let {
+    begin,
+    end
+  } = ref;
+  const {
+    value
+  } = ref;
+  begin = begin - index;
+  end = end - index - 1; // -1 to compensate for the removed @
+
+  updated_text = "".concat(updated_text.slice(0, begin)).concat(value).concat(updated_text.slice(end + 1));
+  return [updated_text, [...refs, { ...ref,
+    begin,
+    end
+  }]];
+};
+
+helpers.reduceTextFromReferences = (text, refs) => refs.reduce(reduceReferences, [text, []]);
+
+/* harmony default export */ var parse_helpers = (helpers);
 // CONCATENATED MODULE: ./src/headless/utils/form.js
 /**
  * @copyright 2020, the Converse.js contributors
@@ -76471,3356 +80470,3372 @@ utils_core.webForm2xForm = function (field) {
 };
 
 /* harmony default export */ var utils_form = (utils_core);
-// CONCATENATED MODULE: ./src/headless/utils/parse-helpers.js
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js
+/**
+ * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+ *
+ * @private
+ * @param {Array} props The property identifiers.
+ * @param {Array} values The property values.
+ * @param {Function} assignFunc The function to assign values.
+ * @returns {Object} Returns the new object.
+ */
+function baseZipObject(props, values, assignFunc) {
+  var index = -1,
+      length = props.length,
+      valsLength = values.length,
+      result = {};
+
+  while (++index < length) {
+    var value = index < valsLength ? values[index] : undefined;
+    assignFunc(result, props[index], value);
+  }
+  return result;
+}
+
+/* harmony default export */ var _baseZipObject = (baseZipObject);
+
+// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js
 
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { parse_helpers_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
 
-function parse_helpers_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
 /**
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- * @description Pure functions to help funcitonally parse messages.
- * @todo Other parsing helpers can be made more abstract and placed here.
+ * This method is like `_.fromPairs` except that it accepts two arrays,
+ * one of property identifiers and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.4.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject(['a', 'b'], [1, 2]);
+ * // => { 'a': 1, 'b': 2 }
  */
-const helpers = {}; // Captures all mentions, but includes a space before the @
+function zipObject(props, values) {
+  return _baseZipObject(props || [], values || [], _assignValue);
+}
 
-helpers.mention_regex = /(?:\s|^)([@][\w_-]+(?:\.\w+)*)/gi;
+/* harmony default export */ var lodash_es_zipObject = (zipObject);
 
-helpers.matchRegexInText = text => regex => text.matchAll(regex);
+// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIntersection.js
 
-const escapeRegexChars = (string, char) => string.replace(RegExp('\\' + char, 'ig'), '\\' + char);
 
-helpers.escapeCharacters = characters => string => characters.split('').reduce(escapeRegexChars, string);
 
-helpers.escapeRegexString = helpers.escapeCharacters('[\\^$.?*+(){}'); // `for` is ~25% faster than using `Array.find()`
 
-helpers.findFirstMatchInArray = array => text => {
-  for (let i = 0; i < array.length; i++) {
-    if (text.localeCompare(array[i], undefined, {
-      sensitivity: 'base'
-    }) === 0) {
-      return array[i];
+
+
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var _baseIntersection_nativeMin = Math.min;
+
+/**
+ * The base implementation of methods like `_.intersection`, without support
+ * for iteratee shorthands, that accepts an array of arrays to inspect.
+ *
+ * @private
+ * @param {Array} arrays The arrays to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of shared values.
+ */
+function baseIntersection(arrays, iteratee, comparator) {
+  var includes = comparator ? _arrayIncludesWith : _arrayIncludes,
+      length = arrays[0].length,
+      othLength = arrays.length,
+      othIndex = othLength,
+      caches = Array(othLength),
+      maxLength = Infinity,
+      result = [];
+
+  while (othIndex--) {
+    var array = arrays[othIndex];
+    if (othIndex && iteratee) {
+      array = _arrayMap(array, _baseUnary(iteratee));
     }
+    maxLength = _baseIntersection_nativeMin(array.length, maxLength);
+    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
+      ? new _SetCache(othIndex && array)
+      : undefined;
   }
+  array = arrays[0];
 
-  return null;
-};
-
-const reduceReferences = ([text, refs], ref, index) => {
-  let updated_text = text;
-  let {
-    begin,
-    end
-  } = ref;
-  const {
-    value
-  } = ref;
-  begin = begin - index;
-  end = end - index - 1; // -1 to compensate for the removed @
+  var index = -1,
+      seen = caches[0];
 
-  updated_text = "".concat(updated_text.slice(0, begin)).concat(value).concat(updated_text.slice(end + 1));
-  return [updated_text, [...refs, _objectSpread(_objectSpread({}, ref), {}, {
-    begin,
-    end
-  })]];
-};
+  outer:
+  while (++index < length && result.length < maxLength) {
+    var value = array[index],
+        computed = iteratee ? iteratee(value) : value;
 
-helpers.reduceTextFromReferences = (text, refs) => refs.reduce(reduceReferences, [text, []]);
+    value = (comparator || value !== 0) ? value : 0;
+    if (!(seen
+          ? _cacheHas(seen, computed)
+          : includes(result, computed, comparator)
+        )) {
+      othIndex = othLength;
+      while (--othIndex) {
+        var cache = caches[othIndex];
+        if (!(cache
+              ? _cacheHas(cache, computed)
+              : includes(arrays[othIndex], computed, comparator))
+            ) {
+          continue outer;
+        }
+      }
+      if (seen) {
+        seen.push(computed);
+      }
+      result.push(value);
+    }
+  }
+  return result;
+}
 
-/* harmony default export */ var parse_helpers = (helpers);
-// CONCATENATED MODULE: ./src/headless/converse-muc.js
-function converse_muc_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+/* harmony default export */ var _baseIntersection = (baseIntersection);
 
-function converse_muc_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { converse_muc_ownKeys(Object(source), true).forEach(function (key) { converse_muc_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { converse_muc_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+// CONCATENATED MODULE: ./node_modules/lodash-es/_castArrayLikeObject.js
 
-function converse_muc_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
 /**
- * @module converse-muc
- * @copyright The Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- * @description Implements the non-view logic for XEP-0045 Multi-User Chat
+ * Casts `value` to an empty array if it's not an array like object.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array|Object} Returns the cast array-like object.
  */
+function castArrayLikeObject(value) {
+  return lodash_es_isArrayLikeObject(value) ? value : [];
+}
 
+/* harmony default export */ var _castArrayLikeObject = (castArrayLikeObject);
 
+// CONCATENATED MODULE: ./node_modules/lodash-es/intersection.js
 
 
 
 
 
+/**
+ * Creates an array of unique values that are included in all given arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. The order and references of result values are
+ * determined by the first array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * _.intersection([2, 1], [2, 3]);
+ * // => [2]
+ */
+var intersection = _baseRest(function(arrays) {
+  var mapped = _arrayMap(arrays, _castArrayLikeObject);
+  return (mapped.length && mapped[0] === arrays[0])
+    ? _baseIntersection(mapped)
+    : [];
+});
 
+/* harmony default export */ var lodash_es_intersection = (intersection);
 
+// CONCATENATED MODULE: ./src/headless/plugins/muc/muc.js
 
 
 
-const ROLES = ['moderator', 'participant', 'visitor'];
-const AFFILIATIONS = ['owner', 'admin', 'member', 'outcast', 'none'];
-converse.AFFILIATION_CHANGES = {
-  OWNER: 'owner',
-  ADMIN: 'admin',
-  MEMBER: 'member',
-  EXADMIN: 'exadmin',
-  EXOWNER: 'exowner',
-  EXOUTCAST: 'exoutcast',
-  EXMEMBER: 'exmember'
-};
-converse.AFFILIATION_CHANGES_LIST = Object.values(converse.AFFILIATION_CHANGES);
-converse.MUC_TRAFFIC_STATES = {
-  ENTERED: 'entered',
-  EXITED: 'exited'
-};
-converse.MUC_TRAFFIC_STATES_LIST = Object.values(converse.MUC_TRAFFIC_STATES);
-converse.MUC_ROLE_CHANGES = {
-  OP: 'op',
-  DEOP: 'deop',
-  VOICE: 'voice',
-  MUTE: 'mute'
-};
-converse.MUC_ROLE_CHANGES_LIST = Object.values(converse.MUC_ROLE_CHANGES);
-const ACTION_INFO_CODES = ['301', '303', '333', '307', '321', '322'];
-converse.MUC_INFO_CODES = {
-  'visibility_changes': ['100', '102', '103', '172', '173', '174'],
-  'self': ['110'],
-  'non_privacy_changes': ['104', '201'],
-  'muc_logging_changes': ['170', '171'],
-  'nickname_changes': ['210', '303'],
-  'disconnect_messages': ['301', '307', '321', '322', '332', '333'],
-  'affiliation_changes': [...converse.AFFILIATION_CHANGES_LIST],
-  'join_leave_events': [...converse.MUC_TRAFFIC_STATES_LIST],
-  'role_changes': [...converse.MUC_ROLE_CHANGES_LIST]
-};
-const MUC_ROLE_WEIGHTS = {
-  'moderator': 1,
-  'participant': 2,
-  'visitor': 3,
-  'none': 2
-};
-const {
-  Strophe: converse_muc_Strophe,
-  $iq: converse_muc_$iq,
-  $build,
-  $msg: converse_muc_$msg,
-  $pres,
-  sizzle: converse_muc_sizzle
-} = converse.env; // Add Strophe Namespaces
 
-converse_muc_Strophe.addNamespace('MUC_ADMIN', converse_muc_Strophe.NS.MUC + "#admin");
-converse_muc_Strophe.addNamespace('MUC_OWNER', converse_muc_Strophe.NS.MUC + "#owner");
-converse_muc_Strophe.addNamespace('MUC_REGISTER', "jabber:iq:register");
-converse_muc_Strophe.addNamespace('MUC_ROOMCONF', converse_muc_Strophe.NS.MUC + "#roomconfig");
-converse_muc_Strophe.addNamespace('MUC_USER', converse_muc_Strophe.NS.MUC + "#user");
-converse_muc_Strophe.addNamespace('MUC_HATS', "xmpp:prosody.im/protocol/hats:1");
-converse.MUC_NICK_CHANGED_CODE = "303";
-converse.ROOM_FEATURES = ['passwordprotected', 'unsecured', 'hidden', 'publicroom', 'membersonly', 'open', 'persistent', 'temporary', 'nonanonymous', 'semianonymous', 'moderated', 'unmoderated', 'mam_enabled']; // No longer used in code, but useful as reference.
-//
-// const ROOM_FEATURES_MAP = {
-//     'passwordprotected': 'unsecured',
-//     'unsecured': 'passwordprotected',
-//     'hidden': 'publicroom',
-//     'publicroom': 'hidden',
-//     'membersonly': 'open',
-//     'open': 'membersonly',
-//     'persistent': 'temporary',
-//     'temporary': 'persistent',
-//     'nonanonymous': 'semianonymous',
-//     'semianonymous': 'nonanonymous',
-//     'moderated': 'unmoderated',
-//     'unmoderated': 'moderated'
-// };
 
-converse.ROOMSTATUS = {
-  CONNECTED: 0,
-  CONNECTING: 1,
-  NICKNAME_REQUIRED: 2,
-  PASSWORD_REQUIRED: 3,
-  DISCONNECTED: 4,
-  ENTERED: 5,
-  DESTROYED: 6
-};
-converse.plugins.add('converse-muc', {
-  /* Optional dependencies are other plugins which might be
-   * overridden or relied upon, and therefore need to be loaded before
-   * this plugin. They are called "optional" because they might not be
-   * available, in which case any overrides applicable to them will be
-   * ignored.
-   *
-   * It's possible however to make optional dependencies non-optional.
-   * If the setting "strict_plugin_dependencies" is set to true,
-   * an error will be raised if the plugin is not found.
-   *
-   * NB: These plugins need to have already been loaded via require.js.
-   */
-  dependencies: ["converse-chatboxes", "converse-chat", "converse-disco", "converse-controlbox"],
-  overrides: {
-    ChatBoxes: {
-      model(attrs, options) {
-        const {
-          _converse
-        } = this.__super__;
 
-        if (attrs && attrs.type == _converse.CHATROOMS_TYPE) {
-          return new _converse.ChatRoom(attrs, options);
-        } else {
-          return this.__super__.model.apply(this, arguments);
-        }
-      }
 
-    }
-  },
 
-  initialize() {
-    /* The initialize function gets called as soon as the plugin is
-     * loaded by converse.js's plugin machinery.
-     */
-    const {
-      __,
-      ___
-    } = converse_core_converse; // Configuration values for this plugin
-    // ====================================
-    // Refer to docs/source/configuration.rst for explanations of these
-    // configuration settings.
 
-    converse_core_api.settings.extend({
-      'allow_muc': true,
-      'allow_muc_invitations': true,
-      'auto_join_on_invite': false,
-      'auto_join_rooms': [],
-      'auto_register_muc_nickname': false,
-      'locked_muc_domain': false,
-      'muc_domain': undefined,
-      'muc_fetch_members': true,
-      'muc_history_max_stanzas': undefined,
-      'muc_instant_rooms': true,
-      'muc_nickname_from_jid': false,
-      'muc_send_probes': false,
-      'muc_show_info_messages': [...converse.MUC_INFO_CODES.visibility_changes, ...converse.MUC_INFO_CODES.self, ...converse.MUC_INFO_CODES.non_privacy_changes, ...converse.MUC_INFO_CODES.muc_logging_changes, ...converse.MUC_INFO_CODES.nickname_changes, ...converse.MUC_INFO_CODES.disconnect_messages, ...converse.MUC_INFO_CODES.affiliation_changes, ...converse.MUC_INFO_CODES.join_leave_events, ...converse.MUC_INFO_CODES.role_changes],
-      'muc_show_logs_before_join': false
-    });
-    converse_core_api.promises.add(['roomsAutoJoined']);
 
-    if (converse_core_api.settings.get('locked_muc_domain') && typeof converse_core_api.settings.get('muc_domain') !== 'string') {
-      throw new Error("Config Error: it makes no sense to set locked_muc_domain " + "to true when muc_domain is not set");
-    }
-    /* https://xmpp.org/extensions/xep-0045.html
-     * ----------------------------------------
-     * 100 message      Entering a groupchat         Inform user that any occupant is allowed to see the user's full JID
-     * 101 message (out of band)                     Affiliation change  Inform user that his or her affiliation changed while not in the groupchat
-     * 102 message      Configuration change         Inform occupants that groupchat now shows unavailable members
-     * 103 message      Configuration change         Inform occupants that groupchat now does not show unavailable members
-     * 104 message      Configuration change         Inform occupants that a non-privacy-related groupchat configuration change has occurred
-     * 110 presence     Any groupchat presence       Inform user that presence refers to one of its own groupchat occupants
-     * 170 message or initial presence               Configuration change    Inform occupants that groupchat logging is now enabled
-     * 171 message      Configuration change         Inform occupants that groupchat logging is now disabled
-     * 172 message      Configuration change         Inform occupants that the groupchat is now non-anonymous
-     * 173 message      Configuration change         Inform occupants that the groupchat is now semi-anonymous
-     * 174 message      Configuration change         Inform occupants that the groupchat is now fully-anonymous
-     * 201 presence     Entering a groupchat         Inform user that a new groupchat has been created
-     * 210 presence     Entering a groupchat         Inform user that the service has assigned or modified the occupant's roomnick
-     * 301 presence     Removal from groupchat       Inform user that he or she has been banned from the groupchat
-     * 303 presence     Exiting a groupchat          Inform all occupants of new groupchat nickname
-     * 307 presence     Removal from groupchat       Inform user that he or she has been kicked from the groupchat
-     * 321 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because of an affiliation change
-     * 322 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because the groupchat has been changed to members-only and the user is not a member
-     * 332 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because of a system shutdown
-     */
+const ACTION_INFO_CODES = ['301', '303', '333', '307', '321', '322'];
+const MUCSession = model_Model.extend({
+  defaults() {
+    return {
+      'connection_status': converse.ROOMSTATUS.DISCONNECTED
+    };
+  }
 
+});
+/**
+ * Represents an open/ongoing groupchat conversation.
+ * @mixin
+ * @namespace _converse.ChatRoom
+ * @memberOf _converse
+ */
 
-    converse_core_converse.muc = {
-      info_messages: {
-        100: __('This groupchat is not anonymous'),
-        102: __('This groupchat now shows unavailable members'),
-        103: __('This groupchat does not show unavailable members'),
-        104: __('The groupchat configuration has changed'),
-        170: __('Groupchat logging is now enabled'),
-        171: __('Groupchat logging is now disabled'),
-        172: __('This groupchat is now no longer anonymous'),
-        173: __('This groupchat is now semi-anonymous'),
-        174: __('This groupchat is now fully-anonymous'),
-        201: __('A new groupchat has been created')
-      },
-      new_nickname_messages: {
-        // XXX: Note the triple underscore function and not double underscore.
-        210: ___('Your nickname has been automatically set to %1$s'),
-        303: ___('Your nickname has been changed to %1$s')
-      },
-      disconnect_messages: {
-        301: __('You have been banned from this groupchat'),
-        333: __('You have exited this groupchat due to a technical problem'),
-        307: __('You have been kicked from this groupchat'),
-        321: __("You have been removed from this groupchat because of an affiliation change"),
-        322: __("You have been removed from this groupchat because the groupchat has changed to members-only and you're not a member"),
-        332: __("You have been removed from this groupchat because the service hosting it is being shut down")
-      }
+const ChatRoomMixin = {
+  defaults() {
+    return {
+      // For group chats, we distinguish between generally unread
+      // messages and those ones that specifically mention the
+      // user.
+      //
+      // To keep things simple, we reuse `num_unread` from
+      // _converse.ChatBox to indicate unread messages which
+      // mention the user and `num_unread_general` to indicate
+      // generally unread messages (which *includes* mentions!).
+      'num_unread_general': 0,
+      'bookmarked': false,
+      'chat_state': undefined,
+      'hidden': core_converse.isUniView() && !core_api.settings.get('singleton'),
+      'hidden_occupants': !!core_api.settings.get('hide_muc_participants'),
+      'message_type': 'groupchat',
+      'name': '',
+      'num_unread': 0,
+      'roomconfig': {},
+      'time_opened': this.get('time_opened') || new Date().getTime(),
+      'time_sent': new Date(0).toISOString(),
+      'type': core_converse.CHATROOMS_TYPE
     };
+  },
+
+  async initialize() {
+    this.initialized = utils_form.getResolveablePromise();
+    this.debouncedRejoin = lodash_es_debounce(this.rejoin, 250);
+    this.set('box_id', "box-".concat(this.get('jid')));
+    this.initNotifications();
+    this.initMessages();
+    this.initOccupants();
+    this.initDiscoModels(); // sendChatState depends on this.features
+
+    this.registerHandlers();
+    this.on('change:chat_state', this.sendChatState, this);
+    await this.restoreSession();
+    this.session.on('change:connection_status', this.onConnectionStatusChanged, this);
+    this.listenTo(this.occupants, 'add', this.onOccupantAdded);
+    this.listenTo(this.occupants, 'remove', this.onOccupantRemoved);
+    this.listenTo(this.occupants, 'change:show', this.onOccupantShowChanged);
+    this.listenTo(this.occupants, 'change:affiliation', this.createAffiliationChangeMessage);
+    this.listenTo(this.occupants, 'change:role', this.createRoleChangeMessage);
+    const restored = await this.restoreFromCache();
+
+    if (!restored) {
+      this.join();
+    }
     /**
-     * Determines info message visibility based on
-     * muc_show_info_messages configuration setting
-     * @param {*} code 
-     * @memberOf _converse
+     * Triggered once a {@link _converse.ChatRoom} has been created and initialized.
+     * @event _converse#chatRoomInitialized
+     * @type { _converse.ChatRoom }
+     * @example _converse.api.listen.on('chatRoomInitialized', model => { ... });
      */
 
-    converse_core_converse.isInfoVisible = function (code) {
-      const info_messages = converse_core_api.settings.get('muc_show_info_messages');
 
-      if (info_messages.includes(code)) {
-        return true;
-      }
+    await core_api.trigger('chatRoomInitialized', this, {
+      'Synchronous': true
+    });
+    this.initialized.resolve();
+  },
 
+  /**
+   * Checks whether we're still joined and if so, restores the MUC state from cache.
+   * @private
+   * @method _converse.ChatRoom#restoreFromCache
+   * @returns { Boolean } Returns `true` if we're still joined, otherwise returns `false`.
+   */
+  async restoreFromCache() {
+    if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && (await this.isJoined())) {
+      // We've restored the room from cache and we're still joined.
+      await new Promise(resolve => this.features.fetch({
+        'success': resolve,
+        'error': resolve
+      }));
+      await this.fetchOccupants().catch(e => headless_log.error(e));
+      await this.fetchMessages().catch(e => headless_log.error(e));
+      return true;
+    } else {
+      await this.clearCache();
       return false;
-    };
+    }
+  },
 
-    async function openRoom(jid) {
-      if (!utils_form.isValidMUCJID(jid)) {
-        return headless_log.warn("invalid jid \"".concat(jid, "\" provided in url fragment"));
-      }
+  /**
+   * Join the MUC
+   * @private
+   * @method _converse.ChatRoom#join
+   * @param { String } nick - The user's nickname
+   * @param { String } [password] - Optional password, if required by the groupchat.
+   *  Will fall back to the `password` value stored in the room
+   *  model (if available).
+   */
+  async join(nick, password) {
+    if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
+      // We have restored a groupchat from session storage,
+      // so we don't send out a presence stanza again.
+      return this;
+    }
+
+    await this.refreshDiscoInfo();
+    nick = await this.getAndPersistNickname(nick);
 
-      await converse_core_api.waitUntil('roomsAutoJoined');
+    if (!nick) {
+      utils_form.safeSave(this.session, {
+        'connection_status': converse.ROOMSTATUS.NICKNAME_REQUIRED
+      });
 
-      if (converse_core_api.settings.get('allow_bookmarks')) {
-        await converse_core_api.waitUntil('bookmarksInitialized');
+      if (core_api.settings.get('muc_show_logs_before_join')) {
+        await this.fetchMessages();
       }
 
-      converse_core_api.rooms.open(jid);
+      return this;
     }
 
-    converse_core_converse.router.route('converse/room?jid=:jid', openRoom);
+    const stanza = Object(strophe["d" /* $pres */])({
+      'from': core_converse.connection.jid,
+      'to': this.getRoomJIDAndNick()
+    }).c('x', {
+      'xmlns': strophe["e" /* Strophe */].NS.MUC
+    }).c('history', {
+      'maxstanzas': this.features.get('mam_enabled') ? 0 : core_api.settings.get('muc_history_max_stanzas')
+    }).up();
+    password = password || this.get('password');
 
-    converse_core_converse.getDefaultMUCNickname = function () {
-      // XXX: if anything changes here, update the docs for the
-      // locked_muc_nickname setting.
-      if (!converse_core_converse.xmppstatus) {
-        throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired.");
-      }
+    if (password) {
+      stanza.cnode(strophe["e" /* Strophe */].xmlElement('password', [], password));
+    }
 
-      const nick = converse_core_converse.xmppstatus.getNickname();
+    this.session.save('connection_status', converse.ROOMSTATUS.CONNECTING);
+    core_api.send(stanza);
+    return this;
+  },
 
-      if (nick) {
-        return nick;
-      } else if (converse_core_api.settings.get('muc_nickname_from_jid')) {
-        return converse_muc_Strophe.unescapeNode(converse_muc_Strophe.getNodeFromJid(converse_core_converse.bare_jid));
-      }
-    };
+  async clearCache() {
+    this.session.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
 
-    async function openChatRoom(jid, settings) {
-      /* Opens a groupchat, making sure that certain attributes
-       * are correct, for example that the "type" is set to
-       * "chatroom".
-       */
-      settings.type = converse_core_converse.CHATROOMS_TYPE;
-      settings.id = jid;
-      const chatbox = await converse_core_api.rooms.get(jid, settings, true);
-      chatbox.maybeShow(true);
-      return chatbox;
+    if (this.occupants.length) {
+      // Remove non-members when reconnecting
+      this.occupants.filter(o => !o.isMember()).forEach(o => o.destroy());
+    } else {
+      // Looks like we haven't restored occupants from cache, so we clear it.
+      this.occupants.clearStore();
     }
-    /**
-     * Represents a MUC message
-     * @class
-     * @namespace _converse.ChatRoomMessage
-     * @memberOf _converse
-     */
 
+    if (core_api.settings.get('clear_messages_on_reconnection')) {
+      await this.clearMessages();
+    }
+  },
 
-    converse_core_converse.ChatRoomMessage = converse_core_converse.Message.extend({
-      initialize() {
-        if (!this.checkValidity()) {
-          return;
-        }
+  onOccupantAdded(occupant) {
+    if (core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.ENTERED) && this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && occupant.get('show') === 'online') {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.ENTERED);
+    }
+  },
 
-        if (this.get('file')) {
-          this.on('change:put', this.uploadFile, this);
-        }
+  onOccupantRemoved(occupant) {
+    if (core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.EXITED) && this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && occupant.get('show') === 'online') {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.EXITED);
+    }
+  },
 
-        if (!this.setTimerForEphemeralMessage()) {
-          this.setOccupant();
-        }
-        /**
-         * Triggered once a {@link _converse.ChatRoomMessageInitialized} has been created and initialized.
-         * @event _converse#chatRoomMessageInitialized
-         * @type { _converse.ChatRoomMessages}
-         * @example _converse.api.listen.on('chatRoomMessageInitialized', model => { ... });
-         */
+  onOccupantShowChanged(occupant) {
+    if (occupant.get('states').includes('303')) {
+      return;
+    }
 
+    if (occupant.get('show') === 'offline' && core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.EXITED)) {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.EXITED);
+    } else if (occupant.get('show') === 'online' && core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.ENTERED)) {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.ENTERED);
+    }
+  },
 
-        converse_core_api.trigger('chatRoomMessageInitialized', this);
-      },
+  /**
+   * Clear stale cache and re-join a MUC we've been in before.
+   * @private
+   * @method _converse.ChatRoom#rejoin
+   */
+  rejoin() {
+    this.clearCache();
+    return this.join();
+  },
 
+  async onConnectionStatusChanged() {
+    if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
+      await this.occupants.fetchMembers();
+      await this.fetchMessages();
       /**
-       * Determines whether this messsage may be moderated,
-       * based on configuration settings and server support.
-       * @async
-       * @private
-       * @method _converse.ChatRoomMessages#mayBeModerated
-       * @returns { Boolean }
+       * Triggered when the user has entered a new MUC
+       * @event _converse#enteredNewRoom
+       * @type { _converse.ChatRoom}
+       * @example _converse.api.listen.on('enteredNewRoom', model => { ... });
        */
-      mayBeModerated() {
-        return ['all', 'moderator'].includes(converse_core_api.settings.get('allow_message_retraction')) && this.collection.chatbox.canModerateMessages();
-      },
 
-      checkValidity() {
-        const result = converse_core_converse.Message.prototype.checkValidity.call(this);
+      core_api.trigger('enteredNewRoom', this);
 
-        !result && this.collection.chatbox.debouncedRejoin();
-        return result;
-      },
-
-      onOccupantRemoved() {
-        var _this$collection;
+      if (core_api.settings.get('auto_register_muc_nickname') && (await core_api.disco.supports(strophe["e" /* Strophe */].NS.MUC_REGISTER, this.get('jid')))) {
+        this.registerNickname();
+      }
+    }
+  },
 
-        this.stopListening(this.occupant);
-        delete this.occupant;
-        const chatbox = this === null || this === void 0 ? void 0 : (_this$collection = this.collection) === null || _this$collection === void 0 ? void 0 : _this$collection.chatbox;
+  async onReconnection() {
+    this.registerHandlers();
+    await this.rejoin();
+    this.announceReconnection();
+  },
 
-        if (!chatbox) {
-          return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
-        }
+  getMessagesCollection() {
+    return new core_converse.ChatRoomMessages();
+  },
 
-        this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded);
-      },
+  restoreSession() {
+    const id = "muc.session-".concat(core_converse.bare_jid, "-").concat(this.get('jid'));
+    this.session = new MUCSession({
+      id
+    });
+    this.session.browserStorage = core_converse.createStore(id, 'session');
+    return new Promise(r => this.session.fetch({
+      'success': r,
+      'error': r
+    }));
+  },
 
-      onOccupantAdded(occupant) {
-        if (occupant.get('nick') === converse_muc_Strophe.getResourceFromJid(this.get('from'))) {
-          var _this$collection2;
+  initDiscoModels() {
+    let id = "converse.muc-features-".concat(core_converse.bare_jid, "-").concat(this.get('jid'));
+    this.features = new model_Model(Object.assign({
+      id
+    }, lodash_es_zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(() => false))));
+    this.features.browserStorage = core_converse.createStore(id, 'session');
+    id = "converse.muc-config-{_converse.bare_jid}-".concat(this.get('jid'));
+    this.config = new model_Model();
+    this.config.browserStorage = core_converse.createStore(id, 'session');
+  },
 
-          this.occupant = occupant;
-          this.trigger('occupantAdded');
-          this.listenTo(this.occupant, 'destroy', this.onOccupantRemoved);
-          const chatbox = this === null || this === void 0 ? void 0 : (_this$collection2 = this.collection) === null || _this$collection2 === void 0 ? void 0 : _this$collection2.chatbox;
+  initOccupants() {
+    this.occupants = new core_converse.ChatRoomOccupants();
+    const id = "converse.occupants-".concat(core_converse.bare_jid).concat(this.get('jid'));
+    this.occupants.browserStorage = core_converse.createStore(id, 'session');
+    this.occupants.chatroom = this;
+  },
 
-          if (!chatbox) {
-            return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
-          }
+  fetchOccupants() {
+    this.occupants.fetched = new Promise(resolve => {
+      this.occupants.fetch({
+        'add': true,
+        'silent': true,
+        'success': resolve,
+        'error': resolve
+      });
+    });
+    return this.occupants.fetched;
+  },
 
-          this.stopListening(chatbox.occupants, 'add', this.onOccupantAdded);
-        }
-      },
+  handleAffiliationChangedMessage(stanza) {
+    const item = sizzle_default()("x[xmlns=\"".concat(strophe["e" /* Strophe */].NS.MUC_USER, "\"] item"), stanza).pop();
 
-      setOccupant() {
-        var _this$collection3;
+    if (item) {
+      const from = stanza.getAttribute('from');
+      const type = stanza.getAttribute('type');
+      const affiliation = item.getAttribute('affiliation');
+      const jid = item.getAttribute('jid');
+      const data = {
+        from,
+        type,
+        affiliation,
+        'nick': strophe["e" /* Strophe */].getNodeFromJid(jid),
+        'states': [],
+        'show': type == 'unavailable' ? 'offline' : 'online',
+        'role': item.getAttribute('role'),
+        'jid': strophe["e" /* Strophe */].getBareJidFromJid(jid),
+        'resource': strophe["e" /* Strophe */].getResourceFromJid(jid)
+      };
+      const occupant = this.occupants.findOccupant({
+        'jid': data.jid
+      });
 
-        if (this.get('type') !== 'groupchat') {
-          return;
-        }
+      if (occupant) {
+        occupant.save(data);
+      } else {
+        this.occupants.create(data);
+      }
+    }
+  },
 
-        const chatbox = this === null || this === void 0 ? void 0 : (_this$collection3 = this.collection) === null || _this$collection3 === void 0 ? void 0 : _this$collection3.chatbox;
+  async handleErrorMessageStanza(stanza) {
+    const {
+      __
+    } = core_converse;
+    const attrs = await utils_stanza.parseMUCMessage(stanza, this, core_converse);
 
-        if (!chatbox) {
-          return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));
-        }
+    if (!(await this.shouldShowErrorMessage(attrs))) {
+      return;
+    }
 
-        const nick = converse_muc_Strophe.getResourceFromJid(this.get('from'));
-        this.occupant = chatbox.occupants.findWhere({
-          nick
-        });
+    const message = this.getMessageReferencedByError(attrs);
 
-        if (!this.occupant && converse_core_api.settings.get("muc_send_probes")) {
-          this.occupant = chatbox.occupants.create({
-            nick,
-            'type': 'unavailable'
-          });
-          const jid = "".concat(chatbox.get('jid'), "/").concat(nick);
-          converse_core_api.user.presence.send('probe', jid);
-        }
+    if (message) {
+      const new_attrs = {
+        'error': attrs.error,
+        'error_condition': attrs.error_condition,
+        'error_text': attrs.error_text,
+        'error_type': attrs.error_type,
+        'editable': false
+      };
 
-        if (this.occupant) {
-          this.listenTo(this.occupant, 'destroy', this.onOccupantRemoved);
+      if (attrs.msgid === message.get('retraction_id')) {
+        // The error message refers to a retraction
+        new_attrs.retraction_id = undefined;
+
+        if (!attrs.error) {
+          if (attrs.error_condition === 'forbidden') {
+            new_attrs.error = __("You're not allowed to retract your message.");
+          } else if (attrs.error_condition === 'not-acceptable') {
+            new_attrs.error = __("Your retraction was not delivered because you're not present in the groupchat.");
+          } else {
+            new_attrs.error = __('Sorry, an error occurred while trying to retract your message.');
+          }
+        }
+      } else if (!attrs.error) {
+        if (attrs.error_condition === 'forbidden') {
+          new_attrs.error = __("Your message was not delivered because you weren't allowed to send it.");
+        } else if (attrs.error_condition === 'not-acceptable') {
+          new_attrs.error = __("Your message was not delivered because you're not present in the groupchat.");
         } else {
-          this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded);
+          new_attrs.error = __('Sorry, an error occurred while trying to send your message.');
         }
       }
 
-    });
-    const MUCSession = model_Model.extend({
-      defaults() {
-        return {
-          'connection_status': converse.ROOMSTATUS.DISCONNECTED
-        };
-      }
+      message.save(new_attrs);
+    } else {
+      this.createMessage(attrs);
+    }
+  },
 
-    });
+  /**
+   * Parses an incoming message stanza and queues it for processing.
+   * @private
+   * @method _converse.ChatRoom#handleMessageStanza
+   * @param { XMLElement } stanza
+   */
+  async handleMessageStanza(stanza) {
+    if (utils_stanza.isArchived(stanza)) {
+      // MAM messages are handled in converse-mam.
+      // We shouldn't get MAM messages here because
+      // they shouldn't have a `type` attribute.
+      return headless_log.warn("Received a MAM message with type \"groupchat\"");
+    }
+
+    this.createInfoMessages(stanza);
+    this.fetchFeaturesIfConfigurationChanged(stanza);
     /**
-     * Collection which stores MUC messages
-     * @class
-     * @namespace _converse.ChatRoomMessages
-     * @memberOf _converse
+     * @typedef { Object } MUCMessageData
+     * An object containing the original groupchat message stanza,
+     * as well as the parsed attributes.
+     * @property { XMLElement } stanza
+     * @property { MUCMessageAttributes } attrs
+     * @property { ChatRoom } chatbox
      */
 
-    converse_core_converse.ChatRoomMessages = collection_Collection.extend({
-      model: converse_core_converse.ChatRoomMessage,
-      comparator: 'time'
-    });
+    const attrs = await utils_stanza.parseMUCMessage(stanza, this, core_converse);
+    const data = {
+      stanza,
+      attrs,
+      'chatbox': this
+    };
     /**
-     * Represents an open/ongoing groupchat conversation.
-     * @class
-     * @namespace _converse.ChatRoom
-     * @memberOf _converse
+     * Triggered when a groupchat message stanza has been received and parsed.
+     * @event _converse#message
+     * @type { object }
+     * @property { module:converse-muc~MUCMessageData } data
      */
 
-    converse_core_converse.ChatRoom = converse_core_converse.ChatBox.extend({
-      messagesCollection: converse_core_converse.ChatRoomMessages,
+    core_api.trigger('message', data);
+    return attrs && this.queueMessage(attrs);
+  },
 
-      defaults() {
-        return {
-          // For group chats, we distinguish between generally unread
-          // messages and those ones that specifically mention the
-          // user.
-          //
-          // To keep things simple, we reuse `num_unread` from
-          // _converse.ChatBox to indicate unread messages which
-          // mention the user and `num_unread_general` to indicate
-          // generally unread messages (which *includes* mentions!).
-          'num_unread_general': 0,
-          'bookmarked': false,
-          'chat_state': undefined,
-          'hidden': converse_core_converse.isUniView() && !converse_core_api.settings.get('singleton'),
-          'message_type': 'groupchat',
-          'name': '',
-          'num_unread': 0,
-          'roomconfig': {},
-          'time_opened': this.get('time_opened') || new Date().getTime(),
-          'time_sent': new Date(0).toISOString(),
-          'type': converse_core_converse.CHATROOMS_TYPE
-        };
-      },
+  registerHandlers() {
+    // Register presence and message handlers for this groupchat
+    const room_jid = this.get('jid');
+    this.removeHandlers();
+    this.presence_handler = core_converse.connection.addHandler(stanza => this.onPresence(stanza) || true, null, 'presence', null, null, room_jid, {
+      'ignoreNamespaceFragment': true,
+      'matchBareFromJid': true
+    });
+    this.message_handler = core_converse.connection.addHandler(stanza => !!this.handleMessageStanza(stanza) || true, null, 'message', 'groupchat', null, room_jid, {
+      'matchBareFromJid': true
+    });
+    this.affiliation_message_handler = core_converse.connection.addHandler(stanza => this.handleAffiliationChangedMessage(stanza) || true, strophe["e" /* Strophe */].NS.MUC_USER, 'message', null, null, room_jid);
+  },
 
-      async initialize() {
-        this.initialized = utils_form.getResolveablePromise();
-        this.debouncedRejoin = lodash_es_debounce(this.rejoin, 250);
-        this.set('box_id', "box-".concat(this.get('jid')));
-        this.initNotifications();
-        this.initMessages();
-        this.initOccupants();
-        this.initDiscoModels(); // sendChatState depends on this.features
-
-        this.registerHandlers();
-        this.on('change:chat_state', this.sendChatState, this);
-        await this.restoreSession();
-        this.session.on('change:connection_status', this.onConnectionStatusChanged, this);
-        this.listenTo(this.occupants, 'add', this.onOccupantAdded);
-        this.listenTo(this.occupants, 'remove', this.onOccupantRemoved);
-        this.listenTo(this.occupants, 'change:show', this.onOccupantShowChanged);
-        this.listenTo(this.occupants, 'change:affiliation', this.createAffiliationChangeMessage);
-        this.listenTo(this.occupants, 'change:role', this.createRoleChangeMessage);
-        const restored = await this.restoreFromCache();
-
-        if (!restored) {
-          this.join();
-        }
-        /**
-         * Triggered once a {@link _converse.ChatRoom} has been created and initialized.
-         * @event _converse#chatRoomInitialized
-         * @type { _converse.ChatRoom }
-         * @example _converse.api.listen.on('chatRoomInitialized', model => { ... });
-         */
+  removeHandlers() {
+    // Remove the presence and message handlers that were
+    // registered for this groupchat.
+    if (this.message_handler) {
+      core_converse.connection && core_converse.connection.deleteHandler(this.message_handler);
+      delete this.message_handler;
+    }
 
+    if (this.presence_handler) {
+      core_converse.connection && core_converse.connection.deleteHandler(this.presence_handler);
+      delete this.presence_handler;
+    }
 
-        await converse_core_api.trigger('chatRoomInitialized', this, {
-          'Synchronous': true
-        });
-        this.initialized.resolve();
-      },
+    if (this.affiliation_message_handler) {
+      core_converse.connection && core_converse.connection.deleteHandler(this.affiliation_message_handler);
+      delete this.affiliation_message_handler;
+    }
 
-      /**
-       * Checks whether we're still joined and if so, restores the MUC state from cache.
-       * @private
-       * @method _converse.ChatRoom#restoreFromCache
-       * @returns { Boolean } Returns `true` if we're still joined, otherwise returns `false`.
-       */
-      async restoreFromCache() {
-        if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && (await this.isJoined())) {
-          // We've restored the room from cache and we're still joined.
-          await new Promise(resolve => this.features.fetch({
-            'success': resolve,
-            'error': resolve
-          }));
-          await this.fetchOccupants();
-          await this.fetchMessages();
-          return true;
-        } else {
-          await this.clearCache();
-          return false;
-        }
-      },
+    return this;
+  },
 
-      /**
-       * Join the MUC
-       * @private
-       * @method _converse.ChatRoom#join
-       * @param { String } nick - The user's nickname
-       * @param { String } [password] - Optional password, if required by the groupchat.
-       *  Will fall back to the `password` value stored in the room
-       *  model (if available).
-       */
-      async join(nick, password) {
-        if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
-          // We have restored a groupchat from session storage,
-          // so we don't send out a presence stanza again.
-          return this;
-        }
+  invitesAllowed() {
+    return core_api.settings.get('allow_muc_invitations') && (this.features.get('open') || this.getOwnAffiliation() === 'owner');
+  },
 
-        await this.refreshDiscoInfo();
-        nick = await this.getAndPersistNickname(nick);
+  getDisplayName() {
+    const name = this.get('name');
 
-        if (!nick) {
-          utils_form.safeSave(this.session, {
-            'connection_status': converse.ROOMSTATUS.NICKNAME_REQUIRED
-          });
+    if (name) {
+      return name;
+    } else if (core_api.settings.get('locked_muc_domain') === 'hidden') {
+      return strophe["e" /* Strophe */].getNodeFromJid(this.get('jid'));
+    } else {
+      return this.get('jid');
+    }
+  },
 
-          if (converse_core_api.settings.get('muc_show_logs_before_join')) {
-            await this.fetchMessages();
-          }
+  /**
+   * Sends a message stanza to the XMPP server and expects a reflection
+   * or error message within a specific timeout period.
+   * @private
+   * @method _converse.ChatRoom#sendTimedMessage
+   * @param { _converse.Message|XMLElement } message
+   * @returns { Promise<XMLElement>|Promise<_converse.TimeoutError> } Returns a promise
+   *  which resolves with the reflected message stanza or rejects
+   *  with an error stanza or with a {@link _converse.TimeoutError}.
+   */
+  sendTimedMessage(el) {
+    if (typeof el.tree === 'function') {
+      el = el.tree();
+    }
 
-          return this;
-        }
+    let id = el.getAttribute('id');
 
-        const stanza = $pres({
-          'from': converse_core_converse.connection.jid,
-          'to': this.getRoomJIDAndNick()
-        }).c("x", {
-          'xmlns': converse_muc_Strophe.NS.MUC
-        }).c("history", {
-          'maxstanzas': this.features.get('mam_enabled') ? 0 : converse_core_api.settings.get('muc_history_max_stanzas')
-        }).up();
-        password = password || this.get('password');
+    if (!id) {
+      // inject id if not found
+      id = this.getUniqueId('sendIQ');
+      el.setAttribute('id', id);
+    }
 
-        if (password) {
-          stanza.cnode(converse_muc_Strophe.xmlElement("password", [], password));
-        }
+    const promise = utils_form.getResolveablePromise();
 
-        this.session.save('connection_status', converse.ROOMSTATUS.CONNECTING);
-        converse_core_api.send(stanza);
-        return this;
-      },
+    const timeoutHandler = core_converse.connection.addTimedHandler(core_converse.STANZA_TIMEOUT, () => {
+      core_converse.connection.deleteHandler(handler);
 
-      async fetchMessages() {
-        await converse_core_converse.ChatBox.prototype.fetchMessages.call(this);
-        const queued_messages = this.message_queue.map(m => this.queueMessage(m));
-        this.message_queue = [];
-        return Promise.all(queued_messages);
-      },
+      promise.reject(new core_converse.TimeoutError('Timeout Error: No response from server'));
+      return false;
+    });
 
-      async clearCache() {
-        this.session.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
+    const handler = core_converse.connection.addHandler(stanza => {
+      timeoutHandler && core_converse.connection.deleteTimedHandler(timeoutHandler);
 
-        if (this.occupants.length) {
-          // Remove non-members when reconnecting
-          this.occupants.filter(o => !o.isMember()).forEach(o => o.destroy());
-        } else {
-          // Looks like we haven't restored occupants from cache, so we clear it.
-          this.occupants.clearStore();
-        }
+      if (stanza.getAttribute('type') === 'groupchat') {
+        promise.resolve(stanza);
+      } else {
+        promise.reject(stanza);
+      }
+    }, null, 'message', ['error', 'groupchat'], id);
 
-        if (converse_core_api.settings.get('clear_messages_on_reconnection')) {
-          await this.clearMessages();
-        }
-      },
+    core_api.send(el);
+    return promise;
+  },
 
-      onOccupantAdded(occupant) {
-        if (converse_core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.ENTERED) && this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && occupant.get('show') === 'online') {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.ENTERED);
-        }
-      },
+  /**
+   * Retract one of your messages in this groupchat
+   * @private
+   * @method _converse.ChatRoom#retractOwnMessage
+   * @param { _converse.Message } message - The message which we're retracting.
+   */
+  async retractOwnMessage(message) {
+    const __ = core_converse.__;
+    const origin_id = message.get('origin_id');
+
+    if (!origin_id) {
+      throw new Error("Can't retract message without a XEP-0359 Origin ID");
+    }
+
+    const editable = message.get('editable');
+    const stanza = Object(strophe["c" /* $msg */])({
+      'id': utils_form.getUniqueId(),
+      'to': this.get('jid'),
+      'type': 'groupchat'
+    }).c('store', {
+      xmlns: strophe["e" /* Strophe */].NS.HINTS
+    }).up().c('apply-to', {
+      'id': origin_id,
+      'xmlns': strophe["e" /* Strophe */].NS.FASTEN
+    }).c('retract', {
+      xmlns: strophe["e" /* Strophe */].NS.RETRACT
+    }); // Optimistic save
+
+    message.set({
+      'retracted': new Date().toISOString(),
+      'retracted_id': origin_id,
+      'retraction_id': stanza.nodeTree.getAttribute('id'),
+      'editable': false
+    });
 
-      onOccupantRemoved(occupant) {
-        if (converse_core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.EXITED) && this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED && occupant.get('show') === 'online') {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.EXITED);
-        }
-      },
+    try {
+      await this.sendTimedMessage(stanza);
+    } catch (e) {
+      message.save({
+        editable,
+        'error_type': 'timeout',
+        'error': __('A timeout happened while while trying to retract your message.'),
+        'retracted': undefined,
+        'retracted_id': undefined
+      });
+      throw e;
+    }
+  },
 
-      onOccupantShowChanged(occupant) {
-        if (occupant.get('states').includes('303')) {
-          return;
-        }
+  /**
+   * Retract someone else's message in this groupchat.
+   * @private
+   * @method _converse.ChatRoom#retractOtherMessage
+   * @param { _converse.Message } message - The message which we're retracting.
+   * @param { string } [reason] - The reason for retracting the message.
+   */
+  async retractOtherMessage(message, reason) {
+    const editable = message.get('editable'); // Optimistic save
+
+    message.save({
+      'moderated': 'retracted',
+      'moderated_by': core_converse.bare_jid,
+      'moderated_id': message.get('msgid'),
+      'moderation_reason': reason,
+      'editable': false
+    });
+    const result = await this.sendRetractionIQ(message, reason);
+
+    if (result === null || utils_form.isErrorStanza(result)) {
+      // Undo the save if something went wrong
+      message.save({
+        editable,
+        'moderated': undefined,
+        'moderated_by': undefined,
+        'moderated_id': undefined,
+        'moderation_reason': undefined
+      });
+    }
 
-        if (occupant.get('show') === 'offline' && converse_core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.EXITED)) {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.EXITED);
-        } else if (occupant.get('show') === 'online' && converse_core_converse.isInfoVisible(converse.MUC_TRAFFIC_STATES.ENTERED)) {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_TRAFFIC_STATES.ENTERED);
-        }
-      },
+    return result;
+  },
 
-      /**
-       * Clear stale cache and re-join a MUC we've been in before.
-       * @private
-       * @method _converse.ChatRoom#rejoin
-       */
-      rejoin() {
-        this.clearCache();
-        return this.join();
-      },
+  /**
+   * Sends an IQ stanza to the XMPP server to retract a message in this groupchat.
+   * @private
+   * @method _converse.ChatRoom#sendRetractionIQ
+   * @param { _converse.Message } message - The message which we're retracting.
+   * @param { string } [reason] - The reason for retracting the message.
+   */
+  sendRetractionIQ(message, reason) {
+    const iq = Object(strophe["b" /* $iq */])({
+      'to': this.get('jid'),
+      'type': 'set'
+    }).c('apply-to', {
+      'id': message.get("stanza_id ".concat(this.get('jid'))),
+      'xmlns': strophe["e" /* Strophe */].NS.FASTEN
+    }).c('moderate', {
+      xmlns: strophe["e" /* Strophe */].NS.MODERATE
+    }).c('retract', {
+      xmlns: strophe["e" /* Strophe */].NS.RETRACT
+    }).up().c('reason').t(reason || '');
+    return core_api.sendIQ(iq, null, false);
+  },
+
+  /**
+   * Sends an IQ stanza to the XMPP server to destroy this groupchat. Not
+   * to be confused with the {@link _converse.ChatRoom#destroy}
+   * method, which simply removes the room from the local browser storage cache.
+   * @private
+   * @method _converse.ChatRoom#sendDestroyIQ
+   * @param { string } [reason] - The reason for destroying the groupchat.
+   * @param { string } [new_jid] - The JID of the new groupchat which replaces this one.
+   */
+  sendDestroyIQ(reason, new_jid) {
+    const destroy = Object(strophe["a" /* $build */])('destroy');
 
-      initMessages() {
-        this.message_queue = [];
+    if (new_jid) {
+      destroy.attrs({
+        'jid': new_jid
+      });
+    }
 
-        converse_core_converse.ChatBox.prototype.initMessages.call(this);
-      },
+    const iq = Object(strophe["b" /* $iq */])({
+      'to': this.get('jid'),
+      'type': 'set'
+    }).c('query', {
+      'xmlns': strophe["e" /* Strophe */].NS.MUC_OWNER
+    }).cnode(destroy.node);
 
-      async onConnectionStatusChanged() {
-        if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
-          await this.occupants.fetchMembers();
-          await this.fetchMessages();
-          /**
-           * Triggered when the user has entered a new MUC
-           * @event _converse#enteredNewRoom
-           * @type { _converse.ChatRoom}
-           * @example _converse.api.listen.on('enteredNewRoom', model => { ... });
-           */
+    if (reason && reason.length > 0) {
+      iq.c('reason', reason);
+    }
 
-          converse_core_api.trigger('enteredNewRoom', this);
+    return core_api.sendIQ(iq);
+  },
 
-          if (converse_core_api.settings.get('auto_register_muc_nickname') && (await converse_core_api.disco.supports(converse_muc_Strophe.NS.MUC_REGISTER, this.get('jid')))) {
-            this.registerNickname();
-          }
-        }
-      },
+  /**
+   * Leave the groupchat.
+   * @private
+   * @method _converse.ChatRoom#leave
+   * @param { string } [exit_msg] - Message to indicate your reason for leaving
+   */
+  async leave(exit_msg) {
+    this.features.destroy();
+    this.occupants.clearStore();
 
-      async onReconnection() {
-        this.registerHandlers();
-        await this.rejoin();
-        this.announceReconnection();
-      },
+    if (core_converse.disco_entities) {
+      const disco_entity = core_converse.disco_entities.get(this.get('jid'));
 
-      restoreSession() {
-        const id = "muc.session-".concat(converse_core_converse.bare_jid, "-").concat(this.get('jid'));
-        this.session = new MUCSession({
-          id
-        });
-        this.session.browserStorage = converse_core_converse.createStore(id, "session");
-        return new Promise(r => this.session.fetch({
-          'success': r,
-          'error': r
+      if (disco_entity) {
+        await new Promise((success, error) => disco_entity.destroy({
+          success,
+          error
         }));
-      },
+      }
+    }
 
-      initDiscoModels() {
-        let id = "converse.muc-features-".concat(converse_core_converse.bare_jid, "-").concat(this.get('jid'));
-        this.features = new model_Model(Object.assign({
-          id
-        }, lodash_es_zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(() => false))));
-        this.features.browserStorage = converse_core_converse.createStore(id, "session");
-        id = "converse.muc-config-{_converse.bare_jid}-".concat(this.get('jid'));
-        this.config = new model_Model();
-        this.config.browserStorage = converse_core_converse.createStore(id, "session");
-      },
+    if (core_api.connection.connected()) {
+      core_api.user.presence.send('unavailable', this.getRoomJIDAndNick(), exit_msg);
+    }
 
-      initOccupants() {
-        this.occupants = new converse_core_converse.ChatRoomOccupants();
-        const id = "converse.occupants-".concat(converse_core_converse.bare_jid).concat(this.get('jid'));
-        this.occupants.browserStorage = converse_core_converse.createStore(id, 'session');
-        this.occupants.chatroom = this;
-      },
+    utils_form.safeSave(this.session, {
+      'connection_status': converse.ROOMSTATUS.DISCONNECTED
+    });
+    this.removeHandlers();
+  },
 
-      fetchOccupants() {
-        this.occupants.fetched = new Promise(resolve => {
-          this.occupants.fetch({
-            'add': true,
-            'silent': true,
-            'success': resolve,
-            'error': resolve
-          });
-        });
-        return this.occupants.fetched;
-      },
+  async close() {
+    // Delete the session model
+    await new Promise(resolve => this.session.destroy({
+      'success': resolve,
+      'error': (m, e) => {
+        headless_log.error(e);
+        resolve();
+      }
+    })); // Delete the features model
 
-      handleAffiliationChangedMessage(stanza) {
-        const item = converse_muc_sizzle("x[xmlns=\"".concat(converse_muc_Strophe.NS.MUC_USER, "\"] item"), stanza).pop();
+    await new Promise(resolve => this.features.destroy({
+      'success': resolve,
+      'error': (m, e) => {
+        headless_log.error(e);
+        resolve();
+      }
+    }));
+    return core_converse.ChatBox.prototype.close.call(this);
+  },
 
-        if (item) {
-          const from = stanza.getAttribute("from");
-          const type = stanza.getAttribute("type");
-          const affiliation = item.getAttribute('affiliation');
-          const jid = item.getAttribute('jid');
-          const data = {
-            from,
-            type,
-            affiliation,
-            'nick': converse_muc_Strophe.getNodeFromJid(jid),
-            'states': [],
-            'show': type == 'unavailable' ? 'offline' : 'online',
-            'role': item.getAttribute('role'),
-            'jid': converse_muc_Strophe.getBareJidFromJid(jid),
-            'resource': converse_muc_Strophe.getResourceFromJid(jid)
-          };
-          const occupant = this.occupants.findOccupant({
-            'jid': data.jid
-          });
+  canModerateMessages() {
+    const self = this.getOwnOccupant();
+    return self && self.isModerator() && core_api.disco.supports(strophe["e" /* Strophe */].NS.MODERATE, this.get('jid'));
+  },
 
-          if (occupant) {
-            occupant.save(data);
-          } else {
-            this.occupants.create(data);
-          }
-        }
-      },
+  /**
+   * Return an array of unique nicknames based on all occupants and messages in this MUC.
+   * @private
+   * @method _converse.ChatRoom#getAllKnownNicknames
+   * @returns { String[] }
+   */
+  getAllKnownNicknames() {
+    return [...new Set([...this.occupants.map(o => o.get('nick')), ...this.messages.map(m => m.get('nick'))])].filter(n => n);
+  },
 
-      async handleErrorMessageStanza(stanza) {
-        const attrs = await utils_stanza.parseMUCMessage(stanza, this, converse_core_converse);
+  getAllKnownNicknamesRegex() {
+    const longNickString = this.getAllKnownNicknames().join('|');
+    const escapedLongNickString = parse_helpers.escapeRegexString(longNickString);
+    return RegExp("(?:\\p{P}|\\p{Z}|^)@(".concat(escapedLongNickString, ")(?![\\w@-])"), 'uig');
+  },
 
-        if (!(await this.shouldShowErrorMessage(attrs))) {
-          return;
-        }
+  getOccupantByJID(jid) {
+    return this.occupants.findOccupant({
+      jid
+    });
+  },
 
-        const message = this.getMessageReferencedByError(attrs);
+  getOccupantByNickname(nick) {
+    return this.occupants.findOccupant({
+      nick
+    });
+  },
 
-        if (message) {
-          const new_attrs = {
-            'error': attrs.error,
-            'error_condition': attrs.error_condition,
-            'error_text': attrs.error_text,
-            'error_type': attrs.error_type,
-            'editable': false
-          };
+  /**
+   * Given a text message, look for `@` mentions and turn them into
+   * XEP-0372 references
+   * @param { String } text
+   */
+  parseTextForReferences(text) {
+    const mentions_regex = /(\p{P}|\p{Z}|^)([@][\w_-]+(?:\.\w+)*)/giu;
 
-          if (attrs.msgid === message.get('retraction_id')) {
-            // The error message refers to a retraction
-            new_attrs.retraction_id = undefined;
+    if (!text || !mentions_regex.test(text)) {
+      return [text, []];
+    }
 
-            if (!attrs.error) {
-              if (attrs.error_condition === 'forbidden') {
-                new_attrs.error = __("You're not allowed to retract your message.");
-              } else if (attrs.error_condition === 'not-acceptable') {
-                new_attrs.error = __("Your retraction was not delivered because you're not present in the groupchat.");
-              } else {
-                new_attrs.error = __('Sorry, an error occurred while trying to retract your message.');
-              }
-            }
-          } else if (!attrs.error) {
-            if (attrs.error_condition === 'forbidden') {
-              new_attrs.error = __("Your message was not delivered because you weren't allowed to send it.");
-            } else if (attrs.error_condition === 'not-acceptable') {
-              new_attrs.error = __("Your message was not delivered because you're not present in the groupchat.");
-            } else {
-              new_attrs.error = __('Sorry, an error occurred while trying to send your message.');
-            }
-          }
+    const getMatchingNickname = parse_helpers.findFirstMatchInArray(this.getAllKnownNicknames());
 
-          message.save(new_attrs);
-        } else {
-          this.createMessage(attrs);
-        }
-      },
+    const uriFromNickname = nickname => {
+      const jid = this.get('jid');
+      const occupant = this.getOccupant(nickname) || this.getOccupant(jid);
+      const uri = occupant && occupant.get('jid') || "".concat(jid, "/").concat(nickname);
+      return encodeURI("xmpp:".concat(uri));
+    };
 
-      /**
-       * Parses an incoming message stanza and queues it for processing.
-       * @private
-       * @method _converse.ChatRoom#handleMessageStanza
-       * @param { XMLElement } stanza
-       */
-      async handleMessageStanza(stanza) {
-        if (utils_stanza.isArchived(stanza)) {
-          // MAM messages are handled in converse-mam.
-          // We shouldn't get MAM messages here because
-          // they shouldn't have a `type` attribute.
-          return headless_log.warn("Received a MAM message with type \"groupchat\"");
-        }
+    const matchToReference = match => {
+      let at_sign_index = match[0].indexOf('@');
 
-        this.createInfoMessages(stanza);
-        this.fetchFeaturesIfConfigurationChanged(stanza);
-        /**
-         * @typedef { Object } MUCMessageData
-         * An object containing the original groupchat message stanza,
-         * as well as the parsed attributes.
-         * @property { XMLElement } stanza
-         * @property { MUCMessageAttributes } attrs
-         * @property { ChatRoom } chatbox
-         */
+      if (match[0][at_sign_index + 1] === '@') {
+        // edge-case
+        at_sign_index += 1;
+      }
 
-        const attrs = await utils_stanza.parseMUCMessage(stanza, this, converse_core_converse);
-        const data = {
-          stanza,
-          attrs,
-          'chatbox': this
-        };
-        /**
-         * Triggered when a groupchat message stanza has been received and parsed.
-         * @event _converse#message
-         * @type { object }
-         * @property { module:converse-muc~MUCMessageData } data
-         */
+      const begin = match.index + at_sign_index;
+      const end = begin + match[0].length - at_sign_index;
+      const value = getMatchingNickname(match[1]);
+      const type = 'mention';
+      const uri = uriFromNickname(value);
+      return {
+        begin,
+        end,
+        value,
+        type,
+        uri
+      };
+    };
 
-        converse_core_api.trigger('message', data);
-        return attrs && this.queueMessage(attrs);
-      },
+    const regex = this.getAllKnownNicknamesRegex();
+    const mentions = [...text.matchAll(regex)].filter(m => !m[0].startsWith('/'));
+    const references = mentions.map(matchToReference);
+    const [updated_message, updated_references] = parse_helpers.reduceTextFromReferences(text, references);
+    return [updated_message, updated_references];
+  },
 
-      registerHandlers() {
-        // Register presence and message handlers for this groupchat
-        const room_jid = this.get('jid');
-        this.removeHandlers();
-        this.presence_handler = converse_core_converse.connection.addHandler(stanza => this.onPresence(stanza) || true, null, 'presence', null, null, room_jid, {
-          'ignoreNamespaceFragment': true,
-          'matchBareFromJid': true
-        });
-        this.message_handler = converse_core_converse.connection.addHandler(stanza => !!this.handleMessageStanza(stanza) || true, null, 'message', 'groupchat', null, room_jid, {
-          'matchBareFromJid': true
-        });
-        this.affiliation_message_handler = converse_core_converse.connection.addHandler(stanza => this.handleAffiliationChangedMessage(stanza) || true, converse_muc_Strophe.NS.MUC_USER, 'message', null, null, room_jid);
-      },
+  getOutgoingMessageAttributes(original_message, spoiler_hint) {
+    const is_spoiler = this.get('composing_spoiler');
+    const [text, references] = this.parseTextForReferences(original_message);
+    const origin_id = utils_form.getUniqueId();
+    const body = text ? utils_form.httpToGeoUri(utils_form.shortnamesToUnicode(text), core_converse) : undefined;
+    return {
+      body,
+      is_spoiler,
+      origin_id,
+      references,
+      'id': origin_id,
+      'msgid': origin_id,
+      'from': "".concat(this.get('jid'), "/").concat(this.get('nick')),
+      'fullname': this.get('nick'),
+      'is_only_emojis': text ? utils_form.isOnlyEmojis(text) : false,
+      'message': body,
+      'nick': this.get('nick'),
+      'sender': 'me',
+      'spoiler_hint': is_spoiler ? spoiler_hint : undefined,
+      'type': 'groupchat'
+    };
+  },
 
-      removeHandlers() {
-        // Remove the presence and message handlers that were
-        // registered for this groupchat.
-        if (this.message_handler) {
-          converse_core_converse.connection && converse_core_converse.connection.deleteHandler(this.message_handler);
-          delete this.message_handler;
-        }
+  /**
+   * Utility method to construct the JID for the current user as occupant of the groupchat.
+   * @private
+   * @method _converse.ChatRoom#getRoomJIDAndNick
+   * @returns {string} - The groupchat JID with the user's nickname added at the end.
+   * @example groupchat@conference.example.org/nickname
+   */
+  getRoomJIDAndNick() {
+    const nick = this.get('nick');
+    const jid = strophe["e" /* Strophe */].getBareJidFromJid(this.get('jid'));
+    return jid + (nick !== null ? "/".concat(nick) : '');
+  },
 
-        if (this.presence_handler) {
-          converse_core_converse.connection && converse_core_converse.connection.deleteHandler(this.presence_handler);
-          delete this.presence_handler;
-        }
+  /**
+   * Sends a message with the current XEP-0085 chat state of the user
+   * as taken from the `chat_state` attribute of the {@link _converse.ChatRoom}.
+   * @private
+   * @method _converse.ChatRoom#sendChatState
+   */
+  sendChatState() {
+    if (!core_api.settings.get('send_chat_state_notifications') || !this.get('chat_state') || this.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED || this.features.get('moderated') && this.getOwnRole() === 'visitor') {
+      return;
+    }
 
-        if (this.affiliation_message_handler) {
-          converse_core_converse.connection && converse_core_converse.connection.deleteHandler(this.affiliation_message_handler);
-          delete this.affiliation_message_handler;
-        }
+    const allowed = core_api.settings.get('send_chat_state_notifications');
 
-        return this;
-      },
+    if (Array.isArray(allowed) && !allowed.includes(this.get('chat_state'))) {
+      return;
+    }
 
-      invitesAllowed() {
-        return converse_core_api.settings.get('allow_muc_invitations') && (this.features.get('open') || this.getOwnAffiliation() === "owner");
-      },
+    const chat_state = this.get('chat_state');
 
-      getDisplayName() {
-        const name = this.get('name');
+    if (chat_state === core_converse.GONE) {
+      // <gone/> is not applicable within MUC context
+      return;
+    }
 
-        if (name) {
-          return name;
-        } else if (converse_core_api.settings.get('locked_muc_domain') === 'hidden') {
-          return converse_muc_Strophe.getNodeFromJid(this.get('jid'));
-        } else {
-          return this.get('jid');
-        }
-      },
+    core_api.send(Object(strophe["c" /* $msg */])({
+      'to': this.get('jid'),
+      'type': 'groupchat'
+    }).c(chat_state, {
+      'xmlns': strophe["e" /* Strophe */].NS.CHATSTATES
+    }).up().c('no-store', {
+      'xmlns': strophe["e" /* Strophe */].NS.HINTS
+    }).up().c('no-permanent-store', {
+      'xmlns': strophe["e" /* Strophe */].NS.HINTS
+    }));
+  },
 
-      /**
-       * Sends a message stanza to the XMPP server and expects a reflection
-       * or error message within a specific timeout period.
-       * @private
-       * @method _converse.ChatRoom#sendTimedMessage
-       * @param { _converse.Message|XMLElement } message
-       * @returns { Promise<XMLElement>|Promise<_converse.TimeoutError> } Returns a promise
-       *  which resolves with the reflected message stanza or rejects
-       *  with an error stanza or with a {@link _converse.TimeoutError}.
-       */
-      sendTimedMessage(el) {
-        if (typeof el.tree === "function") {
-          el = el.tree();
-        }
+  /**
+   * Send a direct invitation as per XEP-0249
+   * @private
+   * @method _converse.ChatRoom#directInvite
+   * @param { String } recipient - JID of the person being invited
+   * @param { String } [reason] - Reason for the invitation
+   */
+  directInvite(recipient, reason) {
+    if (this.features.get('membersonly')) {
+      // When inviting to a members-only groupchat, we first add
+      // the person to the member list by giving them an
+      // affiliation of 'member' otherwise they won't be able to join.
+      this.updateMemberLists([{
+        'jid': recipient,
+        'affiliation': 'member',
+        'reason': reason
+      }]);
+    }
 
-        let id = el.getAttribute('id');
+    const attrs = {
+      'xmlns': 'jabber:x:conference',
+      'jid': this.get('jid')
+    };
 
-        if (!id) {
-          // inject id if not found
-          id = this.getUniqueId("sendIQ");
-          el.setAttribute("id", id);
-        }
+    if (reason !== null) {
+      attrs.reason = reason;
+    }
 
-        const promise = utils_form.getResolveablePromise();
+    if (this.get('password')) {
+      attrs.password = this.get('password');
+    }
 
-        const timeoutHandler = converse_core_converse.connection.addTimedHandler(converse_core_converse.STANZA_TIMEOUT, () => {
-          converse_core_converse.connection.deleteHandler(handler);
+    const invitation = Object(strophe["c" /* $msg */])({
+      'from': core_converse.connection.jid,
+      'to': recipient,
+      'id': utils_form.getUniqueId()
+    }).c('x', attrs);
+    core_api.send(invitation);
+    /**
+     * After the user has sent out a direct invitation (as per XEP-0249),
+     * to a roster contact, asking them to join a room.
+     * @event _converse#chatBoxMaximized
+     * @type {object}
+     * @property {_converse.ChatRoom} room
+     * @property {string} recipient - The JID of the person being invited
+     * @property {string} reason - The original reason for the invitation
+     * @example _converse.api.listen.on('chatBoxMaximized', view => { ... });
+     */
 
-          promise.reject(new converse_core_converse.TimeoutError("Timeout Error: No response from server"));
-          return false;
-        });
+    core_api.trigger('roomInviteSent', {
+      'room': this,
+      'recipient': recipient,
+      'reason': reason
+    });
+  },
 
-        const handler = converse_core_converse.connection.addHandler(stanza => {
-          timeoutHandler && converse_core_converse.connection.deleteTimedHandler(timeoutHandler);
+  /**
+   * Refresh the disco identity, features and fields for this {@link _converse.ChatRoom}.
+   * *features* are stored on the features {@link Model} attribute on this {@link _converse.ChatRoom}.
+   * *fields* are stored on the config {@link Model} attribute on this {@link _converse.ChatRoom}.
+   * @private
+   * @returns {Promise}
+   */
+  refreshDiscoInfo() {
+    return core_api.disco.refresh(this.get('jid')).then(() => this.getDiscoInfo()).catch(e => headless_log.error(e));
+  },
 
-          if (stanza.getAttribute('type') === 'groupchat') {
-            promise.resolve(stanza);
-          } else {
-            promise.reject(stanza);
-          }
-        }, null, 'message', ['error', 'groupchat'], id);
+  /**
+   * Fetch the *extended* MUC info from the server and cache it locally
+   * https://xmpp.org/extensions/xep-0045.html#disco-roominfo
+   * @private
+   * @method _converse.ChatRoom#getDiscoInfo
+   * @returns {Promise}
+   */
+  getDiscoInfo() {
+    return core_api.disco.getIdentity('conference', 'text', this.get('jid')).then(identity => this.save({
+      'name': identity === null || identity === void 0 ? void 0 : identity.get('name')
+    })).then(() => this.getDiscoInfoFields()).then(() => this.getDiscoInfoFeatures()).catch(e => headless_log.error(e));
+  },
 
-        converse_core_api.send(el);
-        return promise;
-      },
+  /**
+   * Fetch the *extended* MUC info fields from the server and store them locally
+   * in the `config` {@link Model} attribute.
+   * See: https://xmpp.org/extensions/xep-0045.html#disco-roominfo
+   * @private
+   * @method _converse.ChatRoom#getDiscoInfoFields
+   * @returns {Promise}
+   */
+  async getDiscoInfoFields() {
+    const fields = await core_api.disco.getFields(this.get('jid'));
+    const config = fields.reduce((config, f) => {
+      const name = f.get('var');
 
-      /**
-       * Retract one of your messages in this groupchat
-       * @private
-       * @method _converse.ChatRoom#retractOwnMessage
-       * @param { _converse.Message } message - The message which we're retracting.
-       */
-      async retractOwnMessage(message) {
-        const origin_id = message.get('origin_id');
+      if (name && name.startsWith('muc#roominfo_')) {
+        config[name.replace('muc#roominfo_', '')] = f.get('value');
+      }
 
-        if (!origin_id) {
-          throw new Error("Can't retract message without a XEP-0359 Origin ID");
-        }
+      return config;
+    }, {});
+    this.config.save(config);
+  },
 
-        const editable = message.get('editable');
-        const stanza = converse_muc_$msg({
-          'id': utils_form.getUniqueId(),
-          'to': this.get('jid'),
-          'type': "groupchat"
-        }).c('store', {
-          xmlns: converse_muc_Strophe.NS.HINTS
-        }).up().c("apply-to", {
-          'id': origin_id,
-          'xmlns': converse_muc_Strophe.NS.FASTEN
-        }).c('retract', {
-          xmlns: converse_muc_Strophe.NS.RETRACT
-        }); // Optimistic save
-
-        message.set({
-          'retracted': new Date().toISOString(),
-          'retracted_id': origin_id,
-          'retraction_id': stanza.nodeTree.getAttribute('id'),
-          'editable': false
-        });
+  /**
+   * Use converse-disco to populate the features {@link Model} which
+   * is stored as an attibute on this {@link _converse.ChatRoom}.
+   * The results may be cached. If you want to force fetching the features from the
+   * server, call {@link _converse.ChatRoom#refreshDiscoInfo} instead.
+   * @private
+   * @returns {Promise}
+   */
+  async getDiscoInfoFeatures() {
+    const features = await core_api.disco.getFeatures(this.get('jid'));
+    const attrs = Object.assign(lodash_es_zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(() => false)), {
+      'fetched': new Date().toISOString()
+    });
+    features.each(feature => {
+      const fieldname = feature.get('var');
 
-        try {
-          await this.sendTimedMessage(stanza);
-        } catch (e) {
-          message.save({
-            editable,
-            'error_type': 'timeout',
-            'error': __('A timeout happened while while trying to retract your message.'),
-            'retracted': undefined,
-            'retracted_id': undefined
-          });
-          throw e;
+      if (!fieldname.startsWith('muc_')) {
+        if (fieldname === strophe["e" /* Strophe */].NS.MAM) {
+          attrs.mam_enabled = true;
         }
-      },
 
-      /**
-       * Retract someone else's message in this groupchat.
-       * @private
-       * @method _converse.ChatRoom#retractOtherMessage
-       * @param { _converse.Message } message - The message which we're retracting.
-       * @param { string } [reason] - The reason for retracting the message.
-       */
-      async retractOtherMessage(message, reason) {
-        const editable = message.get('editable'); // Optimistic save
+        return;
+      }
 
-        message.save({
-          'moderated': 'retracted',
-          'moderated_by': converse_core_converse.bare_jid,
-          'moderated_id': message.get('msgid'),
-          'moderation_reason': reason,
-          'editable': false
-        });
-        const result = await this.sendRetractionIQ(message, reason);
+      attrs[fieldname.replace('muc_', '')] = true;
+    });
+    this.features.save(attrs);
+  },
 
-        if (result === null || utils_form.isErrorStanza(result)) {
-          // Undo the save if something went wrong
-          message.save({
-            editable,
-            'moderated': undefined,
-            'moderated_by': undefined,
-            'moderated_id': undefined,
-            'moderation_reason': undefined
-          });
-        }
+  /**
+   * Send IQ stanzas to the server to set an affiliation for
+   * the provided JIDs.
+   * See: https://xmpp.org/extensions/xep-0045.html#modifymember
+   *
+   * Prosody doesn't accept multiple JIDs' affiliations
+   * being set in one IQ stanza, so as a workaround we send
+   * a separate stanza for each JID.
+   * Related ticket: https://issues.prosody.im/345
+   *
+   * @private
+   * @method _converse.ChatRoom#setAffiliation
+   * @param { string } affiliation - The affiliation
+   * @param { object } members - A map of jids, affiliations and
+   *      optionally reasons. Only those entries with the
+   *      same affiliation as being currently set will be considered.
+   * @returns { Promise } A promise which resolves and fails depending on the XMPP server response.
+   */
+  setAffiliation(affiliation, members) {
+    members = members.filter(m => m.affiliation === undefined || m.affiliation === affiliation);
+    return Promise.all(members.map(m => this.sendAffiliationIQ(affiliation, m)));
+  },
 
-        return result;
-      },
+  /**
+   * Given a <field> element, return a copy with a <value> child if
+   * we can find a value for it in this rooms config.
+   * @private
+   * @method _converse.ChatRoom#addFieldValue
+   * @returns { Element }
+   */
+  addFieldValue(field) {
+    const type = field.getAttribute('type');
 
-      /**
-       * Sends an IQ stanza to the XMPP server to retract a message in this groupchat.
-       * @private
-       * @method _converse.ChatRoom#sendRetractionIQ
-       * @param { _converse.Message } message - The message which we're retracting.
-       * @param { string } [reason] - The reason for retracting the message.
-       */
-      sendRetractionIQ(message, reason) {
-        const iq = converse_muc_$iq({
-          'to': this.get('jid'),
-          'type': "set"
-        }).c("apply-to", {
-          'id': message.get("stanza_id ".concat(this.get('jid'))),
-          'xmlns': converse_muc_Strophe.NS.FASTEN
-        }).c('moderate', {
-          xmlns: converse_muc_Strophe.NS.MODERATE
-        }).c('retract', {
-          xmlns: converse_muc_Strophe.NS.RETRACT
-        }).up().c('reason').t(reason || '');
-        return converse_core_api.sendIQ(iq, null, false);
-      },
+    if (type === 'fixed') {
+      return field;
+    }
 
-      /**
-       * Sends an IQ stanza to the XMPP server to destroy this groupchat. Not
-       * to be confused with the {@link _converse.ChatRoom#destroy}
-       * method, which simply removes the room from the local browser storage cache.
-       * @private
-       * @method _converse.ChatRoom#sendDestroyIQ
-       * @param { string } [reason] - The reason for destroying the groupchat.
-       * @param { string } [new_jid] - The JID of the new groupchat which replaces this one.
-       */
-      sendDestroyIQ(reason, new_jid) {
-        const destroy = $build("destroy");
+    const fieldname = field.getAttribute('var').replace('muc#roomconfig_', '');
+    const config = this.get('roomconfig');
 
-        if (new_jid) {
-          destroy.attrs({
-            'jid': new_jid
-          });
-        }
+    if (fieldname in config) {
+      let values;
 
-        const iq = converse_muc_$iq({
-          'to': this.get('jid'),
-          'type': "set"
-        }).c("query", {
-          'xmlns': converse_muc_Strophe.NS.MUC_OWNER
-        }).cnode(destroy.node);
+      switch (type) {
+        case 'boolean':
+          values = [config[fieldname] ? 1 : 0];
+          break;
 
-        if (reason && reason.length > 0) {
-          iq.c("reason", reason);
-        }
+        case 'list-multi':
+          values = config[fieldname];
+          break;
 
-        return converse_core_api.sendIQ(iq);
-      },
+        default:
+          values = [config[fieldname]];
+      }
 
-      /**
-       * Leave the groupchat.
-       * @private
-       * @method _converse.ChatRoom#leave
-       * @param { string } [exit_msg] - Message to indicate your reason for leaving
-       */
-      async leave(exit_msg) {
-        this.features.destroy();
-        this.occupants.clearStore();
+      field.innerHTML = values.map(v => Object(strophe["a" /* $build */])('value').t(v)).join('');
+    }
 
-        if (converse_core_converse.disco_entities) {
-          const disco_entity = converse_core_converse.disco_entities.get(this.get('jid'));
+    return field;
+  },
 
-          if (disco_entity) {
-            await new Promise((success, error) => disco_entity.destroy({
-              success,
-              error
-            }));
-          }
-        }
+  /**
+   * Automatically configure the groupchat based on this model's
+   * 'roomconfig' data.
+   * @private
+   * @method _converse.ChatRoom#autoConfigureChatRoom
+   * @returns { Promise<XMLElement> }
+   * Returns a promise which resolves once a response IQ has
+   * been received.
+   */
+  async autoConfigureChatRoom() {
+    const stanza = await this.fetchRoomConfiguration();
+    const fields = sizzle_default()('field', stanza);
+    const configArray = fields.map(f => this.addFieldValue(f));
 
-        if (converse_core_api.connection.connected()) {
-          converse_core_api.user.presence.send('unavailable', this.getRoomJIDAndNick(), exit_msg);
-        }
+    if (configArray.length) {
+      return this.sendConfiguration(configArray);
+    }
+  },
 
-        utils_form.safeSave(this.session, {
-          'connection_status': converse.ROOMSTATUS.DISCONNECTED
-        });
-        this.removeHandlers();
-      },
+  /**
+   * Send an IQ stanza to fetch the groupchat configuration data.
+   * Returns a promise which resolves once the response IQ
+   * has been received.
+   * @private
+   * @method _converse.ChatRoom#fetchRoomConfiguration
+   * @returns { Promise<XMLElement> }
+   */
+  fetchRoomConfiguration() {
+    return core_api.sendIQ(Object(strophe["b" /* $iq */])({
+      'to': this.get('jid'),
+      'type': 'get'
+    }).c('query', {
+      xmlns: strophe["e" /* Strophe */].NS.MUC_OWNER
+    }));
+  },
 
-      async close() {
-        // Delete the session model
-        await new Promise(resolve => this.session.destroy({
-          'success': resolve,
-          'error': (m, e) => {
-            headless_log.error(e);
-            resolve();
-          }
-        })); // Delete the features model
+  /**
+   * Sends an IQ stanza with the groupchat configuration.
+   * @private
+   * @method _converse.ChatRoom#sendConfiguration
+   * @param { Array } config - The groupchat configuration
+   * @returns { Promise<XMLElement> } - A promise which resolves with
+   * the `result` stanza received from the XMPP server.
+   */
+  sendConfiguration(config = []) {
+    const iq = Object(strophe["b" /* $iq */])({
+      to: this.get('jid'),
+      type: 'set'
+    }).c('query', {
+      xmlns: strophe["e" /* Strophe */].NS.MUC_OWNER
+    }).c('x', {
+      xmlns: strophe["e" /* Strophe */].NS.XFORM,
+      type: 'submit'
+    });
+    config.forEach(node => iq.cnode(node).up());
+    return core_api.sendIQ(iq);
+  },
 
-        await new Promise(resolve => this.features.destroy({
-          'success': resolve,
-          'error': (m, e) => {
-            headless_log.error(e);
-            resolve();
-          }
-        }));
-        return converse_core_converse.ChatBox.prototype.close.call(this);
-      },
+  /**
+   * Returns the `role` which the current user has in this MUC
+   * @private
+   * @method _converse.ChatRoom#getOwnRole
+   * @returns { ('none'|'visitor'|'participant'|'moderator') }
+   */
+  getOwnRole() {
+    var _this$getOwnOccupant, _this$getOwnOccupant$;
 
-      canModerateMessages() {
-        const self = this.getOwnOccupant();
-        return self && self.isModerator() && converse_core_api.disco.supports(converse_muc_Strophe.NS.MODERATE, this.get('jid'));
-      },
+    return (_this$getOwnOccupant = this.getOwnOccupant()) === null || _this$getOwnOccupant === void 0 ? void 0 : (_this$getOwnOccupant$ = _this$getOwnOccupant.attributes) === null || _this$getOwnOccupant$ === void 0 ? void 0 : _this$getOwnOccupant$.role;
+  },
 
-      /**
-       * Return an array of unique nicknames based on all occupants and messages in this MUC.
-       * @private
-       * @method _converse.ChatRoom#getAllKnownNicknames
-       * @returns { String[] }
-       */
-      getAllKnownNicknames() {
-        return [...new Set([...this.occupants.map(o => o.get('nick')), ...this.messages.map(m => m.get('nick'))])].filter(n => n);
-      },
+  /**
+   * Returns the `affiliation` which the current user has in this MUC
+   * @private
+   * @method _converse.ChatRoom#getOwnAffiliation
+   * @returns { ('none'|'outcast'|'member'|'admin'|'owner') }
+   */
+  getOwnAffiliation() {
+    var _this$getOwnOccupant2, _this$getOwnOccupant3;
 
-      getAllKnownNicknamesRegex() {
-        const longNickString = this.getAllKnownNicknames().join('|');
-        const escapedLongNickString = parse_helpers.escapeRegexString(longNickString);
-        const mention_boundaries = converse.MENTION_BOUNDARIES.join('|');
-        const escaped_mention_boundaries = parse_helpers.escapeRegexString(mention_boundaries);
-        return RegExp("(?:\\s|^)[".concat(escaped_mention_boundaries, "]?@(").concat(escapedLongNickString, ")(?![\\w@-])"), 'ig');
-      },
+    return (_this$getOwnOccupant2 = this.getOwnOccupant()) === null || _this$getOwnOccupant2 === void 0 ? void 0 : (_this$getOwnOccupant3 = _this$getOwnOccupant2.attributes) === null || _this$getOwnOccupant3 === void 0 ? void 0 : _this$getOwnOccupant3.affiliation;
+  },
 
-      getOccupantByJID(jid) {
-        return this.occupants.findOccupant({
-          jid
-        });
-      },
+  /**
+   * Get the {@link _converse.ChatRoomOccupant} instance which
+   * represents the current user.
+   * @private
+   * @method _converse.ChatRoom#getOwnOccupant
+   * @returns { _converse.ChatRoomOccupant }
+   */
+  getOwnOccupant() {
+    return this.occupants.findWhere({
+      'jid': core_converse.bare_jid
+    });
+  },
 
-      getOccupantByNickname(nick) {
-        return this.occupants.findOccupant({
-          nick
-        });
-      },
+  /**
+   * Send an IQ stanza specifying an affiliation change.
+   * @private
+   * @method _converse.ChatRoom#
+   * @param { String } affiliation: affiliation
+   *     (could also be stored on the member object).
+   * @param { Object } member: Map containing the member's jid and
+   *     optionally a reason and affiliation.
+   */
+  sendAffiliationIQ(affiliation, member) {
+    const iq = Object(strophe["b" /* $iq */])({
+      to: this.get('jid'),
+      type: 'set'
+    }).c('query', {
+      xmlns: strophe["e" /* Strophe */].NS.MUC_ADMIN
+    }).c('item', {
+      'affiliation': member.affiliation || affiliation,
+      'nick': member.nick,
+      'jid': member.jid
+    });
 
-      parseTextForReferences(original_message) {
-        if (!original_message) return ['', []];
-        const findRegexInMessage = parse_helpers.matchRegexInText(original_message);
-        const raw_mentions = findRegexInMessage(parse_helpers.mention_regex);
-        if (!raw_mentions) return [original_message, []];
-        const known_nicknames = this.getAllKnownNicknames();
-        const getMatchingNickname = parse_helpers.findFirstMatchInArray(known_nicknames);
-
-        const uriFromNickname = nickname => {
-          const jid = this.get('jid');
-          const occupant = this.getOccupant(nickname) || this.getOccupant(jid);
-          const uri = occupant && occupant.get('jid') || "".concat(jid, "/").concat(nickname);
-          return encodeURI("xmpp:".concat(uri));
-        };
+    if (member.reason !== undefined) {
+      iq.c('reason', member.reason);
+    }
 
-        const matchToReference = match => {
-          const at_sign_index = match[0].indexOf('@');
-          const begin = match.index + at_sign_index;
-          const end = begin + match[0].length - at_sign_index;
-          const value = getMatchingNickname(match[1]);
-          const type = 'mention';
-          const uri = uriFromNickname(value);
-          return {
-            begin,
-            end,
-            value,
-            type,
-            uri
-          };
-        };
+    return core_api.sendIQ(iq);
+  },
 
-        const mentions = [...findRegexInMessage(this.getAllKnownNicknamesRegex())];
-        const references = mentions.map(matchToReference);
-        const [updated_message, updated_references] = parse_helpers.reduceTextFromReferences(original_message, references);
-        return [updated_message, updated_references];
-      },
+  /**
+   * Send IQ stanzas to the server to modify affiliations for users in this groupchat.
+   *
+   * See: https://xmpp.org/extensions/xep-0045.html#modifymember
+   * @private
+   * @method _converse.ChatRoom#setAffiliations
+   * @param { Object[] } members
+   * @param { string } members[].jid - The JID of the user whose affiliation will change
+   * @param { Array } members[].affiliation - The new affiliation for this user
+   * @param { string } [members[].reason] - An optional reason for the affiliation change
+   * @returns { Promise }
+   */
+  setAffiliations(members) {
+    const affiliations = [...new Set(members.map(m => m.affiliation))];
+    return Promise.all(affiliations.map(a => this.setAffiliation(a, members)));
+  },
 
-      getOutgoingMessageAttributes(original_message, spoiler_hint) {
-        const is_spoiler = this.get('composing_spoiler');
-        const [text, references] = this.parseTextForReferences(original_message);
-        const origin_id = utils_form.getUniqueId();
-        const body = text ? utils_form.httpToGeoUri(utils_form.shortnamesToUnicode(text), converse_core_converse) : undefined;
-        return {
-          body,
-          is_spoiler,
-          origin_id,
-          references,
-          'id': origin_id,
-          'msgid': origin_id,
-          'from': "".concat(this.get('jid'), "/").concat(this.get('nick')),
-          'fullname': this.get('nick'),
-          'is_only_emojis': text ? utils_form.isOnlyEmojis(text) : false,
-          'message': body,
-          'nick': this.get('nick'),
-          'sender': 'me',
-          'spoiler_hint': is_spoiler ? spoiler_hint : undefined,
-          'type': 'groupchat'
-        };
-      },
+  /**
+   * Send an IQ stanza to modify an occupant's role
+   * @private
+   * @method _converse.ChatRoom#setRole
+   * @param { _converse.ChatRoomOccupant } occupant
+   * @param { String } role
+   * @param { String } reason
+   * @param { function } onSuccess - callback for a succesful response
+   * @param { function } onError - callback for an error response
+   */
+  setRole(occupant, role, reason, onSuccess, onError) {
+    const item = Object(strophe["a" /* $build */])('item', {
+      'nick': occupant.get('nick'),
+      role
+    });
+    const iq = Object(strophe["b" /* $iq */])({
+      'to': this.get('jid'),
+      'type': 'set'
+    }).c('query', {
+      xmlns: strophe["e" /* Strophe */].NS.MUC_ADMIN
+    }).cnode(item.node);
 
-      /**
-       * Utility method to construct the JID for the current user as occupant of the groupchat.
-       * @private
-       * @method _converse.ChatRoom#getRoomJIDAndNick
-       * @returns {string} - The groupchat JID with the user's nickname added at the end.
-       * @example groupchat@conference.example.org/nickname
-       */
-      getRoomJIDAndNick() {
-        const nick = this.get('nick');
-        const jid = converse_muc_Strophe.getBareJidFromJid(this.get('jid'));
-        return jid + (nick !== null ? "/".concat(nick) : "");
-      },
+    if (reason !== null) {
+      iq.c('reason', reason);
+    }
 
-      /**
-       * Sends a message with the current XEP-0085 chat state of the user
-       * as taken from the `chat_state` attribute of the {@link _converse.ChatRoom}.
-       * @private
-       * @method _converse.ChatRoom#sendChatState
-       */
-      sendChatState() {
-        if (!converse_core_api.settings.get('send_chat_state_notifications') || !this.get('chat_state') || this.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED || this.features.get('moderated') && this.getOwnRole() === 'visitor') {
-          return;
-        }
+    return core_api.sendIQ(iq).then(onSuccess).catch(onError);
+  },
 
-        const allowed = converse_core_api.settings.get('send_chat_state_notifications');
+  /**
+   * @private
+   * @method _converse.ChatRoom#getOccupant
+   * @param { String } nickname_or_jid - The nickname or JID of the occupant to be returned
+   * @returns { _converse.ChatRoomOccupant }
+   */
+  getOccupant(nickname_or_jid) {
+    return utils_form.isValidJID(nickname_or_jid) ? this.getOccupantByJID(nickname_or_jid) : this.getOccupantByNickname(nickname_or_jid);
+  },
 
-        if (Array.isArray(allowed) && !allowed.includes(this.get('chat_state'))) {
-          return;
-        }
+  /**
+   * Return an array of occupant models that have the required role
+   * @private
+   * @method _converse.ChatRoom#getOccupantsWithRole
+   * @param { String } role
+   * @returns { _converse.ChatRoomOccupant[] }
+   */
+  getOccupantsWithRole(role) {
+    return this.getOccupantsSortedBy('nick').filter(o => o.get('role') === role).map(item => {
+      return {
+        'jid': item.get('jid'),
+        'nick': item.get('nick'),
+        'role': item.get('role')
+      };
+    });
+  },
 
-        const chat_state = this.get('chat_state');
+  /**
+   * Return an array of occupant models that have the required affiliation
+   * @private
+   * @method _converse.ChatRoom#getOccupantsWithAffiliation
+   * @param { String } affiliation
+   * @returns { _converse.ChatRoomOccupant[] }
+   */
+  getOccupantsWithAffiliation(affiliation) {
+    return this.getOccupantsSortedBy('nick').filter(o => o.get('affiliation') === affiliation).map(item => {
+      return {
+        'jid': item.get('jid'),
+        'nick': item.get('nick'),
+        'affiliation': item.get('affiliation')
+      };
+    });
+  },
 
-        if (chat_state === converse_core_converse.GONE) {
-          // <gone/> is not applicable within MUC context
-          return;
-        }
-
-        converse_core_api.send(converse_muc_$msg({
-          'to': this.get('jid'),
-          'type': 'groupchat'
-        }).c(chat_state, {
-          'xmlns': converse_muc_Strophe.NS.CHATSTATES
-        }).up().c('no-store', {
-          'xmlns': converse_muc_Strophe.NS.HINTS
-        }).up().c('no-permanent-store', {
-          'xmlns': converse_muc_Strophe.NS.HINTS
-        }));
-      },
+  /**
+   * Return an array of occupant models, sorted according to the passed-in attribute.
+   * @private
+   * @method _converse.ChatRoom#getOccupantsSortedBy
+   * @param { String } attr - The attribute to sort the returned array by
+   * @returns { _converse.ChatRoomOccupant[] }
+   */
+  getOccupantsSortedBy(attr) {
+    return Array.from(this.occupants.models).sort((a, b) => a.get(attr) < b.get(attr) ? -1 : a.get(attr) > b.get(attr) ? 1 : 0);
+  },
 
-      /**
-       * Send a direct invitation as per XEP-0249
-       * @private
-       * @method _converse.ChatRoom#directInvite
-       * @param { String } recipient - JID of the person being invited
-       * @param { String } [reason] - Reason for the invitation
-       */
-      directInvite(recipient, reason) {
-        if (this.features.get('membersonly')) {
-          // When inviting to a members-only groupchat, we first add
-          // the person to the member list by giving them an
-          // affiliation of 'member' otherwise they won't be able to join.
-          this.updateMemberLists([{
-            'jid': recipient,
-            'affiliation': 'member',
-            'reason': reason
-          }]);
-        }
+  /**
+   * Sends an IQ stanza to the server, asking it for the relevant affiliation list .
+   * Returns an array of {@link MemberListItem} objects, representing occupants
+   * that have the given affiliation.
+   * See: https://xmpp.org/extensions/xep-0045.html#modifymember
+   * @private
+   * @method _converse.ChatRoom#getAffiliationList
+   * @param { ("admin"|"owner"|"member") } affiliation
+   * @returns { Promise<MemberListItem[]> }
+   */
+  async getAffiliationList(affiliation) {
+    const iq = Object(strophe["b" /* $iq */])({
+      to: this.get('jid'),
+      type: 'get'
+    }).c('query', {
+      xmlns: strophe["e" /* Strophe */].NS.MUC_ADMIN
+    }).c('item', {
+      'affiliation': affiliation
+    });
+    const result = await core_api.sendIQ(iq, null, false);
 
-        const attrs = {
-          'xmlns': 'jabber:x:conference',
-          'jid': this.get('jid')
-        };
+    if (result === null) {
+      const err_msg = "Error: timeout while fetching ".concat(affiliation, " list for MUC ").concat(this.get('jid'));
+      const err = new Error(err_msg);
+      headless_log.warn(err_msg);
+      headless_log.warn(result);
+      return err;
+    }
 
-        if (reason !== null) {
-          attrs.reason = reason;
-        }
+    if (utils_form.isErrorStanza(result)) {
+      const err_msg = "Error: not allowed to fetch ".concat(affiliation, " list for MUC ").concat(this.get('jid'));
+      const err = new Error(err_msg);
+      headless_log.warn(err_msg);
+      headless_log.warn(result);
+      return err;
+    }
 
-        if (this.get('password')) {
-          attrs.password = this.get('password');
-        }
+    return utils_muc.parseMemberListIQ(result).filter(p => p).sort((a, b) => a.nick < b.nick ? -1 : a.nick > b.nick ? 1 : 0);
+  },
 
-        const invitation = converse_muc_$msg({
-          'from': converse_core_converse.connection.jid,
-          'to': recipient,
-          'id': utils_form.getUniqueId()
-        }).c('x', attrs);
-        converse_core_api.send(invitation);
-        /**
-         * After the user has sent out a direct invitation (as per XEP-0249),
-         * to a roster contact, asking them to join a room.
-         * @event _converse#chatBoxMaximized
-         * @type {object}
-         * @property {_converse.ChatRoom} room
-         * @property {string} recipient - The JID of the person being invited
-         * @property {string} reason - The original reason for the invitation
-         * @example _converse.api.listen.on('chatBoxMaximized', view => { ... });
-         */
+  /**
+   * Fetch the lists of users with the given affiliations.
+   * Then compute the delta between those users and
+   * the passed in members, and if it exists, send the delta
+   * to the XMPP server to update the member list.
+   * @private
+   * @method _converse.ChatRoom#updateMemberLists
+   * @param { object } members - Map of member jids and affiliations.
+   * @returns { Promise }
+   *  A promise which is resolved once the list has been
+   *  updated or once it's been established there's no need
+   *  to update the list.
+   */
+  async updateMemberLists(members) {
+    const all_affiliations = ['member', 'admin', 'owner'];
+    const aff_lists = await Promise.all(all_affiliations.map(a => this.getAffiliationList(a)));
+    const old_members = aff_lists.reduce((acc, val) => utils_form.isErrorObject(val) ? acc : [...val, ...acc], []);
+    await this.setAffiliations(utils_muc.computeAffiliationsDelta(true, false, members, old_members));
+    await this.occupants.fetchMembers();
+  },
 
-        converse_core_api.trigger('roomInviteSent', {
-          'room': this,
-          'recipient': recipient,
-          'reason': reason
-        });
-      },
+  /**
+   * Given a nick name, save it to the model state, otherwise, look
+   * for a server-side reserved nickname or default configured
+   * nickname and if found, persist that to the model state.
+   * @private
+   * @method _converse.ChatRoom#getAndPersistNickname
+   * @returns { Promise<string> } A promise which resolves with the nickname
+   */
+  async getAndPersistNickname(nick) {
+    nick = nick || this.get('nick') || (await this.getReservedNick()) || core_converse.getDefaultMUCNickname();
 
-      /**
-       * Refresh the disco identity, features and fields for this {@link _converse.ChatRoom}.
-       * *features* are stored on the features {@link Model} attribute on this {@link _converse.ChatRoom}.
-       * *fields* are stored on the config {@link Model} attribute on this {@link _converse.ChatRoom}.
-       * @private
-       * @returns {Promise}
-       */
-      refreshDiscoInfo() {
-        return converse_core_api.disco.refresh(this.get('jid')).then(() => this.getDiscoInfo()).catch(e => headless_log.error(e));
-      },
+    if (nick) {
+      this.save({
+        nick
+      }, {
+        'silent': true
+      });
+    }
 
-      /**
-       * Fetch the *extended* MUC info from the server and cache it locally
-       * https://xmpp.org/extensions/xep-0045.html#disco-roominfo
-       * @private
-       * @method _converse.ChatRoom#getDiscoInfo
-       * @returns {Promise}
-       */
-      getDiscoInfo() {
-        return converse_core_api.disco.getIdentity('conference', 'text', this.get('jid')).then(identity => this.save({
-          'name': identity && identity.get('name')
-        })).then(() => this.getDiscoInfoFields()).then(() => this.getDiscoInfoFeatures()).catch(e => headless_log.error(e));
-      },
+    return nick;
+  },
 
-      /**
-       * Fetch the *extended* MUC info fields from the server and store them locally
-       * in the `config` {@link Model} attribute.
-       * See: https://xmpp.org/extensions/xep-0045.html#disco-roominfo
-       * @private
-       * @method _converse.ChatRoom#getDiscoInfoFields
-       * @returns {Promise}
-       */
-      async getDiscoInfoFields() {
-        const fields = await converse_core_api.disco.getFields(this.get('jid'));
-        const config = fields.reduce((config, f) => {
-          const name = f.get('var');
+  /**
+   * Use service-discovery to ask the XMPP server whether
+   * this user has a reserved nickname for this groupchat.
+   * If so, we'll use that, otherwise we render the nickname form.
+   * @private
+   * @method _converse.ChatRoom#getReservedNick
+   * @returns { Promise<string> } A promise which resolves with the reserved nick or null
+   */
+  async getReservedNick() {
+    const stanza = Object(strophe["b" /* $iq */])({
+      'to': this.get('jid'),
+      'from': core_converse.connection.jid,
+      'type': 'get'
+    }).c('query', {
+      'xmlns': strophe["e" /* Strophe */].NS.DISCO_INFO,
+      'node': 'x-roomuser-item'
+    });
+    const result = await core_api.sendIQ(stanza, null, false);
 
-          if (name && name.startsWith('muc#roominfo_')) {
-            config[name.replace('muc#roominfo_', '')] = f.get('value');
-          }
+    if (utils_form.isErrorObject(result)) {
+      throw result;
+    }
 
-          return config;
-        }, {});
-        this.config.save(config);
-      },
+    const identity_el = result.querySelector('query[node="x-roomuser-item"] identity');
+    return identity_el ? identity_el.getAttribute('name') : null;
+  },
 
-      /**
-       * Use converse-disco to populate the features {@link Model} which
-       * is stored as an attibute on this {@link _converse.ChatRoom}.
-       * The results may be cached. If you want to force fetching the features from the
-       * server, call {@link _converse.ChatRoom#refreshDiscoInfo} instead.
-       * @private
-       * @returns {Promise}
-       */
-      async getDiscoInfoFeatures() {
-        const features = await converse_core_api.disco.getFeatures(this.get('jid'));
-        const attrs = Object.assign(lodash_es_zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(() => false)), {
-          'fetched': new Date().toISOString()
-        });
-        features.each(feature => {
-          const fieldname = feature.get('var');
+  async registerNickname() {
+    // See https://xmpp.org/extensions/xep-0045.html#register
+    const __ = core_converse.__;
+    const nick = this.get('nick');
+    const jid = this.get('jid');
+    let iq, err_msg;
 
-          if (!fieldname.startsWith('muc_')) {
-            if (fieldname === converse_muc_Strophe.NS.MAM) {
-              attrs.mam_enabled = true;
-            }
+    try {
+      iq = await core_api.sendIQ(Object(strophe["b" /* $iq */])({
+        'to': jid,
+        'from': core_converse.connection.jid,
+        'type': 'get'
+      }).c('query', {
+        'xmlns': strophe["e" /* Strophe */].NS.MUC_REGISTER
+      }));
+    } catch (e) {
+      if (sizzle_default()("not-allowed[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), e).length) {
+        err_msg = __("You're not allowed to register yourself in this groupchat.");
+      } else if (sizzle_default()("registration-required[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), e).length) {
+        err_msg = __("You're not allowed to register in this groupchat because it's members-only.");
+      }
 
-            return;
-          }
+      headless_log.error(e);
+      return err_msg;
+    }
 
-          attrs[fieldname.replace('muc_', '')] = true;
-        });
-        this.features.save(attrs);
-      },
+    const required_fields = sizzle_default()('field required', iq).map(f => f.parentElement);
 
-      /**
-       * Send IQ stanzas to the server to set an affiliation for
-       * the provided JIDs.
-       * See: https://xmpp.org/extensions/xep-0045.html#modifymember
-       *
-       * Prosody doesn't accept multiple JIDs' affiliations
-       * being set in one IQ stanza, so as a workaround we send
-       * a separate stanza for each JID.
-       * Related ticket: https://issues.prosody.im/345
-       *
-       * @private
-       * @method _converse.ChatRoom#setAffiliation
-       * @param { string } affiliation - The affiliation
-       * @param { object } members - A map of jids, affiliations and
-       *      optionally reasons. Only those entries with the
-       *      same affiliation as being currently set will be considered.
-       * @returns { Promise } A promise which resolves and fails depending on the XMPP server response.
-       */
-      setAffiliation(affiliation, members) {
-        members = members.filter(m => m.affiliation === undefined || m.affiliation === affiliation);
-        return Promise.all(members.map(m => this.sendAffiliationIQ(affiliation, m)));
-      },
+    if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') {
+      return headless_log.error("Can't register the user register in the groupchat ".concat(jid, " due to the required fields"));
+    }
 
-      /**
-       * Given a <field> element, return a copy with a <value> child if
-       * we can find a value for it in this rooms config.
-       * @private
-       * @method _converse.ChatRoom#addFieldValue
-       * @returns { Element }
-       */
-      addFieldValue(field) {
-        const type = field.getAttribute('type');
+    try {
+      await core_api.sendIQ(Object(strophe["b" /* $iq */])({
+        'to': jid,
+        'from': core_converse.connection.jid,
+        'type': 'set'
+      }).c('query', {
+        'xmlns': strophe["e" /* Strophe */].NS.MUC_REGISTER
+      }).c('x', {
+        'xmlns': strophe["e" /* Strophe */].NS.XFORM,
+        'type': 'submit'
+      }).c('field', {
+        'var': 'FORM_TYPE'
+      }).c('value').t('http://jabber.org/protocol/muc#register').up().up().c('field', {
+        'var': 'muc#register_roomnick'
+      }).c('value').t(nick));
+    } catch (e) {
+      if (sizzle_default()("service-unavailable[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), e).length) {
+        err_msg = __("Can't register your nickname in this groupchat, it doesn't support registration.");
+      } else if (sizzle_default()("bad-request[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), e).length) {
+        err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied.");
+      }
 
-        if (type === 'fixed') {
-          return field;
-        }
+      headless_log.error(err_msg);
+      headless_log.error(e);
+      return err_msg;
+    }
+  },
 
-        const fieldname = field.getAttribute('var').replace('muc#roomconfig_', '');
-        const config = this.get('roomconfig');
+  /**
+   * Given a presence stanza, update the occupant model based on its contents.
+   * @private
+   * @method _converse.ChatRoom#updateOccupantsOnPresence
+   * @param { XMLElement } pres - The presence stanza
+   */
+  updateOccupantsOnPresence(pres) {
+    var _occupant$attributes, _occupant$attributes2;
 
-        if (fieldname in config) {
-          let values;
+    const data = utils_stanza.parseMUCPresence(pres);
 
-          switch (type) {
-            case 'boolean':
-              values = [config[fieldname] ? 1 : 0];
-              break;
+    if (data.type === 'error' || !data.jid && !data.nick) {
+      return true;
+    }
 
-            case 'list-multi':
-              values = config[fieldname];
-              break;
+    const occupant = this.occupants.findOccupant(data); // Destroy an unavailable occupant if this isn't a nick change operation and if they're not affiliated
 
-            default:
-              values = [config[fieldname]];
-          }
+    if (data.type === 'unavailable' && occupant && !data.states.includes(converse.MUC_NICK_CHANGED_CODE) && !['admin', 'owner', 'member'].includes(data['affiliation'])) {
+      // Before destroying we set the new data, so that we can show the disconnection message
+      occupant.set(data);
+      occupant.destroy();
+      return;
+    }
 
-          field.innerHTML = values.map(v => $build('value').t(v)).join('');
-        }
+    const jid = data.jid || '';
+    const attributes = Object.assign(data, {
+      'jid': strophe["e" /* Strophe */].getBareJidFromJid(jid) || (occupant === null || occupant === void 0 ? void 0 : (_occupant$attributes = occupant.attributes) === null || _occupant$attributes === void 0 ? void 0 : _occupant$attributes.jid),
+      'resource': strophe["e" /* Strophe */].getResourceFromJid(jid) || (occupant === null || occupant === void 0 ? void 0 : (_occupant$attributes2 = occupant.attributes) === null || _occupant$attributes2 === void 0 ? void 0 : _occupant$attributes2.resource)
+    });
 
-        return field;
-      },
+    if (occupant) {
+      occupant.save(attributes);
+    } else {
+      this.occupants.create(attributes);
+    }
+  },
 
-      /**
-       * Automatically configure the groupchat based on this model's
-       * 'roomconfig' data.
-       * @private
-       * @method _converse.ChatRoom#autoConfigureChatRoom
-       * @returns { Promise<XMLElement> }
-       * Returns a promise which resolves once a response IQ has
-       * been received.
-       */
-      async autoConfigureChatRoom() {
-        const stanza = await this.fetchRoomConfiguration();
-        const fields = converse_muc_sizzle('field', stanza);
-        const configArray = fields.map(f => this.addFieldValue(f));
+  fetchFeaturesIfConfigurationChanged(stanza) {
+    // 104: configuration change
+    // 170: logging enabled
+    // 171: logging disabled
+    // 172: room no longer anonymous
+    // 173: room now semi-anonymous
+    // 174: room now fully anonymous
+    const codes = ['104', '170', '171', '172', '173', '174'];
 
-        if (configArray.length) {
-          return this.sendConfiguration(configArray);
-        }
-      },
+    if (sizzle_default()('status', stanza).filter(e => codes.includes(e.getAttribute('status'))).length) {
+      this.refreshDiscoInfo();
+    }
+  },
 
-      /**
-       * Send an IQ stanza to fetch the groupchat configuration data.
-       * Returns a promise which resolves once the response IQ
-       * has been received.
-       * @private
-       * @method _converse.ChatRoom#fetchRoomConfiguration
-       * @returns { Promise<XMLElement> }
-       */
-      fetchRoomConfiguration() {
-        return converse_core_api.sendIQ(converse_muc_$iq({
-          'to': this.get('jid'),
-          'type': "get"
-        }).c("query", {
-          xmlns: converse_muc_Strophe.NS.MUC_OWNER
-        }));
-      },
+  /**
+   * Given two JIDs, which can be either user JIDs or MUC occupant JIDs,
+   * determine whether they belong to the same user.
+   * @private
+   * @method _converse.ChatRoom#isSameUser
+   * @param { String } jid1
+   * @param { String } jid2
+   * @returns { Boolean }
+   */
+  isSameUser(jid1, jid2) {
+    const bare_jid1 = strophe["e" /* Strophe */].getBareJidFromJid(jid1);
+    const bare_jid2 = strophe["e" /* Strophe */].getBareJidFromJid(jid2);
+    const resource1 = strophe["e" /* Strophe */].getResourceFromJid(jid1);
+    const resource2 = strophe["e" /* Strophe */].getResourceFromJid(jid2);
 
-      /**
-       * Sends an IQ stanza with the groupchat configuration.
-       * @private
-       * @method _converse.ChatRoom#sendConfiguration
-       * @param { Array } config - The groupchat configuration
-       * @returns { Promise<XMLElement> } - A promise which resolves with
-       * the `result` stanza received from the XMPP server.
-       */
-      sendConfiguration(config = []) {
-        const iq = converse_muc_$iq({
-          to: this.get('jid'),
-          type: "set"
-        }).c("query", {
-          xmlns: converse_muc_Strophe.NS.MUC_OWNER
-        }).c("x", {
-          xmlns: converse_muc_Strophe.NS.XFORM,
-          type: "submit"
-        });
-        config.forEach(node => iq.cnode(node).up());
-        return converse_core_api.sendIQ(iq);
-      },
+    if (utils_form.isSameBareJID(jid1, jid2)) {
+      if (bare_jid1 === this.get('jid')) {
+        // MUC JIDs
+        return resource1 === resource2;
+      } else {
+        return true;
+      }
+    } else {
+      const occupant1 = bare_jid1 === this.get('jid') ? this.occupants.findOccupant({
+        'nick': resource1
+      }) : this.occupants.findOccupant({
+        'jid': bare_jid1
+      });
+      const occupant2 = bare_jid2 === this.get('jid') ? this.occupants.findOccupant({
+        'nick': resource2
+      }) : this.occupants.findOccupant({
+        'jid': bare_jid2
+      });
+      return occupant1 === occupant2;
+    }
+  },
 
-      /**
-       * Returns the `role` which the current user has in this MUC
-       * @private
-       * @method _converse.ChatRoom#getOwnRole
-       * @returns { ('none'|'visitor'|'participant'|'moderator') }
-       */
-      getOwnRole() {
-        var _this$getOwnOccupant, _this$getOwnOccupant$;
+  async isSubjectHidden() {
+    const jids = await core_api.user.settings.get('mucs_with_hidden_subject', []);
+    return jids.includes(this.get('jid'));
+  },
 
-        return (_this$getOwnOccupant = this.getOwnOccupant()) === null || _this$getOwnOccupant === void 0 ? void 0 : (_this$getOwnOccupant$ = _this$getOwnOccupant.attributes) === null || _this$getOwnOccupant$ === void 0 ? void 0 : _this$getOwnOccupant$.role;
-      },
+  async toggleSubjectHiddenState() {
+    const muc_jid = this.get('jid');
+    const jids = await core_api.user.settings.get('mucs_with_hidden_subject', []);
 
-      /**
-       * Returns the `affiliation` which the current user has in this MUC
-       * @private
-       * @method _converse.ChatRoom#getOwnAffiliation
-       * @returns { ('none'|'outcast'|'member'|'admin'|'owner') }
-       */
-      getOwnAffiliation() {
-        var _this$getOwnOccupant2, _this$getOwnOccupant3;
+    if (jids.includes(this.get('jid'))) {
+      core_api.user.settings.set('mucs_with_hidden_subject', jids.filter(jid => jid !== muc_jid));
+    } else {
+      core_api.user.settings.set('mucs_with_hidden_subject', [...jids, muc_jid]);
+    }
+  },
 
-        return (_this$getOwnOccupant2 = this.getOwnOccupant()) === null || _this$getOwnOccupant2 === void 0 ? void 0 : (_this$getOwnOccupant3 = _this$getOwnOccupant2.attributes) === null || _this$getOwnOccupant3 === void 0 ? void 0 : _this$getOwnOccupant3.affiliation;
-      },
+  /**
+   * Handle a possible subject change and return `true` if so.
+   * @private
+   * @method _converse.ChatRoom#handleSubjectChange
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMUCMessage}
+   */
+  async handleSubjectChange(attrs) {
+    const __ = core_converse.__;
+
+    if (typeof attrs.subject === 'string' && !attrs.thread && !attrs.message) {
+      // https://xmpp.org/extensions/xep-0045.html#subject-mod
+      // -----------------------------------------------------
+      // The subject is changed by sending a message of type "groupchat" to the <room@service>,
+      // where the <message/> MUST contain a <subject/> element that specifies the new subject but
+      // MUST NOT contain a <body/> element (or a <thread/> element).
+      const subject = attrs.subject;
+      const author = attrs.nick;
+      utils_form.safeSave(this, {
+        'subject': {
+          author,
+          'text': attrs.subject || ''
+        }
+      });
 
-      /**
-       * Get the {@link _converse.ChatRoomOccupant} instance which
-       * represents the current user.
-       * @private
-       * @method _converse.ChatRoom#getOwnOccupant
-       * @returns { _converse.ChatRoomOccupant }
-       */
-      getOwnOccupant() {
-        return this.occupants.findWhere({
-          'jid': converse_core_converse.bare_jid
-        });
-      },
+      if (!attrs.is_delayed && author) {
+        const message = subject ? __('Topic set by %1$s', author) : __('Topic cleared by %1$s', author);
+        const prev_msg = this.messages.last();
 
-      /**
-       * Send an IQ stanza specifying an affiliation change.
-       * @private
-       * @method _converse.ChatRoom#
-       * @param { String } affiliation: affiliation
-       *     (could also be stored on the member object).
-       * @param { Object } member: Map containing the member's jid and
-       *     optionally a reason and affiliation.
-       */
-      sendAffiliationIQ(affiliation, member) {
-        const iq = converse_muc_$iq({
-          to: this.get('jid'),
-          type: "set"
-        }).c("query", {
-          xmlns: converse_muc_Strophe.NS.MUC_ADMIN
-        }).c("item", {
-          'affiliation': member.affiliation || affiliation,
-          'nick': member.nick,
-          'jid': member.jid
-        });
+        if ((prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('nick')) !== attrs.nick || (prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('type')) !== 'info' || (prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('message')) !== message) {
+          this.createMessage({
+            message,
+            'nick': attrs.nick,
+            'type': 'info'
+          });
+        }
 
-        if (member.reason !== undefined) {
-          iq.c("reason", member.reason);
+        if (await this.isSubjectHidden()) {
+          this.toggleSubjectHiddenState();
         }
+      }
 
-        return converse_core_api.sendIQ(iq);
-      },
+      return true;
+    }
 
-      /**
-       * Send IQ stanzas to the server to modify affiliations for users in this groupchat.
-       *
-       * See: https://xmpp.org/extensions/xep-0045.html#modifymember
-       * @private
-       * @method _converse.ChatRoom#setAffiliations
-       * @param { Object[] } members
-       * @param { string } members[].jid - The JID of the user whose affiliation will change
-       * @param { Array } members[].affiliation - The new affiliation for this user
-       * @param { string } [members[].reason] - An optional reason for the affiliation change
-       * @returns { Promise }
-       */
-      setAffiliations(members) {
-        const affiliations = [...new Set(members.map(m => m.affiliation))];
-        return Promise.all(affiliations.map(a => this.setAffiliation(a, members)));
-      },
+    return false;
+  },
 
-      /**
-       * Send an IQ stanza to modify an occupant's role
-       * @private
-       * @method _converse.ChatRoom#setRole
-       * @param { _converse.ChatRoomOccupant } occupant
-       * @param { String } role
-       * @param { String } reason
-       * @param { function } onSuccess - callback for a succesful response
-       * @param { function } onError - callback for an error response
-       */
-      setRole(occupant, role, reason, onSuccess, onError) {
-        const item = $build("item", {
-          'nick': occupant.get('nick'),
-          role
-        });
-        const iq = converse_muc_$iq({
-          'to': this.get('jid'),
-          'type': 'set'
-        }).c("query", {
-          xmlns: converse_muc_Strophe.NS.MUC_ADMIN
-        }).cnode(item.node);
+  /**
+   * Set the subject for this {@link _converse.ChatRoom}
+   * @private
+   * @method _converse.ChatRoom#setSubject
+   * @param { String } value
+   */
+  setSubject(value = '') {
+    core_api.send(Object(strophe["c" /* $msg */])({
+      to: this.get('jid'),
+      from: core_converse.connection.jid,
+      type: 'groupchat'
+    }).c('subject', {
+      xmlns: 'jabber:client'
+    }).t(value).tree());
+  },
 
-        if (reason !== null) {
-          iq.c("reason", reason);
-        }
+  /**
+   * Is this a chat state notification that can be ignored,
+   * because it's old or because it's from us.
+   * @private
+   * @method _converse.ChatRoom#ignorableCSN
+   * @param { Object } attrs - The message attributes
+   */
+  ignorableCSN(attrs) {
+    return attrs.chat_state && !attrs.body && (attrs.is_delayed || this.isOwnMessage(attrs));
+  },
 
-        return converse_core_api.sendIQ(iq).then(onSuccess).catch(onError);
-      },
+  /**
+   * Determines whether the message is from ourselves by checking
+   * the `from` attribute. Doesn't check the `type` attribute.
+   * @private
+   * @method _converse.ChatRoom#isOwnMessage
+   * @param { Object|XMLElement|_converse.Message } msg
+   * @returns { boolean }
+   */
+  isOwnMessage(msg) {
+    let from;
 
-      /**
-       * @private
-       * @method _converse.ChatRoom#getOccupant
-       * @param { String } nickname_or_jid - The nickname or JID of the occupant to be returned
-       * @returns { _converse.ChatRoomOccupant }
-       */
-      getOccupant(nickname_or_jid) {
-        return utils_form.isValidJID(nickname_or_jid) ? this.getOccupantByJID(nickname_or_jid) : this.getOccupantByNickname(nickname_or_jid);
-      },
+    if (lodash_es_isElement(msg)) {
+      from = msg.getAttribute('from');
+    } else if (msg instanceof core_converse.Message) {
+      from = msg.get('from');
+    } else {
+      from = msg.from;
+    }
 
-      /**
-       * Return an array of occupant models that have the required role
-       * @private
-       * @method _converse.ChatRoom#getOccupantsWithRole
-       * @param { String } role
-       * @returns { _converse.ChatRoomOccupant[] }
-       */
-      getOccupantsWithRole(role) {
-        return this.getOccupantsSortedBy('nick').filter(o => o.get('role') === role).map(item => {
-          return {
-            'jid': item.get('jid'),
-            'nick': item.get('nick'),
-            'role': item.get('role')
-          };
-        });
-      },
+    return strophe["e" /* Strophe */].getResourceFromJid(from) == this.get('nick');
+  },
 
-      /**
-       * Return an array of occupant models that have the required affiliation
-       * @private
-       * @method _converse.ChatRoom#getOccupantsWithAffiliation
-       * @param { String } affiliation
-       * @returns { _converse.ChatRoomOccupant[] }
-       */
-      getOccupantsWithAffiliation(affiliation) {
-        return this.getOccupantsSortedBy('nick').filter(o => o.get('affiliation') === affiliation).map(item => {
-          return {
-            'jid': item.get('jid'),
-            'nick': item.get('nick'),
-            'affiliation': item.get('affiliation')
-          };
-        });
-      },
+  getUpdatedMessageAttributes(message, attrs) {
+    const new_attrs = core_converse.ChatBox.prototype.getUpdatedMessageAttributes.call(this, message, attrs);
 
-      /**
-       * Return an array of occupant models, sorted according to the passed-in attribute.
-       * @private
-       * @method _converse.ChatRoom#getOccupantsSortedBy
-       * @param { String } attr - The attribute to sort the returned array by
-       * @returns { _converse.ChatRoomOccupant[] }
-       */
-      getOccupantsSortedBy(attr) {
-        return Array.from(this.occupants.models).sort((a, b) => a.get(attr) < b.get(attr) ? -1 : a.get(attr) > b.get(attr) ? 1 : 0);
-      },
+    if (this.isOwnMessage(attrs)) {
+      const stanza_id_keys = Object.keys(attrs).filter(k => k.startsWith('stanza_id'));
+      Object.assign(new_attrs, lodash_es_pick(attrs, stanza_id_keys));
 
-      /**
-       * Sends an IQ stanza to the server, asking it for the relevant affiliation list .
-       * Returns an array of {@link MemberListItem} objects, representing occupants
-       * that have the given affiliation.
-       * See: https://xmpp.org/extensions/xep-0045.html#modifymember
-       * @private
-       * @method _converse.ChatRoom#getAffiliationList
-       * @param { ("admin"|"owner"|"member") } affiliation
-       * @returns { Promise<MemberListItem[]> }
-       */
-      async getAffiliationList(affiliation) {
-        const iq = converse_muc_$iq({
-          to: this.get('jid'),
-          type: "get"
-        }).c("query", {
-          xmlns: converse_muc_Strophe.NS.MUC_ADMIN
-        }).c("item", {
-          'affiliation': affiliation
-        });
-        const result = await converse_core_api.sendIQ(iq, null, false);
+      if (!message.get('received')) {
+        new_attrs.received = new Date().toISOString();
+      }
+    }
 
-        if (result === null) {
-          const err_msg = "Error: timeout while fetching ".concat(affiliation, " list for MUC ").concat(this.get('jid'));
-          const err = new Error(err_msg);
-          headless_log.warn(err_msg);
-          headless_log.warn(result);
-          return err;
-        }
+    return new_attrs;
+  },
 
-        if (utils_form.isErrorStanza(result)) {
-          const err_msg = "Error: not allowed to fetch ".concat(affiliation, " list for MUC ").concat(this.get('jid'));
-          const err = new Error(err_msg);
-          headless_log.warn(err_msg);
-          headless_log.warn(result);
-          return err;
-        }
+  /**
+   * Send a MUC-0410 MUC Self-Ping stanza to room to determine
+   * whether we're still joined.
+   * @async
+   * @private
+   * @method _converse.ChatRoom#isJoined
+   * @returns {Promise<boolean>}
+   */
+  async isJoined() {
+    const jid = this.get('jid');
+    const ping = Object(strophe["b" /* $iq */])({
+      'to': "".concat(jid, "/").concat(this.get('nick')),
+      'type': 'get'
+    }).c('ping', {
+      'xmlns': strophe["e" /* Strophe */].NS.PING
+    });
 
-        return utils_muc.parseMemberListIQ(result).filter(p => p).sort((a, b) => a.nick < b.nick ? -1 : a.nick > b.nick ? 1 : 0);
-      },
+    try {
+      await core_api.sendIQ(ping);
+    } catch (e) {
+      if (e === null) {
+        headless_log.warn("isJoined: Timeout error while checking whether we're joined to MUC: ".concat(jid));
+      } else {
+        headless_log.warn("isJoined: Apparently we're no longer connected to MUC: ".concat(jid));
+      }
 
-      /**
-       * Fetch the lists of users with the given affiliations.
-       * Then compute the delta between those users and
-       * the passed in members, and if it exists, send the delta
-       * to the XMPP server to update the member list.
-       * @private
-       * @method _converse.ChatRoom#updateMemberLists
-       * @param { object } members - Map of member jids and affiliations.
-       * @returns { Promise }
-       *  A promise which is resolved once the list has been
-       *  updated or once it's been established there's no need
-       *  to update the list.
-       */
-      async updateMemberLists(members) {
-        const all_affiliations = ['member', 'admin', 'owner'];
-        const aff_lists = await Promise.all(all_affiliations.map(a => this.getAffiliationList(a)));
-        const old_members = aff_lists.reduce((acc, val) => utils_form.isErrorObject(val) ? acc : [...val, ...acc], []);
-        await this.setAffiliations(utils_muc.computeAffiliationsDelta(true, false, members, old_members));
-        await this.occupants.fetchMembers();
-      },
+      return false;
+    }
 
-      /**
-       * Given a nick name, save it to the model state, otherwise, look
-       * for a server-side reserved nickname or default configured
-       * nickname and if found, persist that to the model state.
-       * @private
-       * @method _converse.ChatRoom#getAndPersistNickname
-       * @returns { Promise<string> } A promise which resolves with the nickname
-       */
-      async getAndPersistNickname(nick) {
-        nick = nick || this.get('nick') || (await this.getReservedNick()) || converse_core_converse.getDefaultMUCNickname();
+    return true;
+  },
 
-        if (nick) {
-          this.save({
-            nick
-          }, {
-            'silent': true
-          });
-        }
+  /**
+   * Check whether we're still joined and re-join if not
+   * @async
+   * @private
+   * @method _converse.ChatRoom#rejoinIfNecessary
+   */
+  async rejoinIfNecessary() {
+    if (!(await this.isJoined())) {
+      this.rejoin();
+      return true;
+    }
+  },
 
-        return nick;
-      },
+  /**
+   * @private
+   * @method _converse.ChatRoom#shouldShowErrorMessage
+   * @returns {Promise<boolean>}
+   */
+  async shouldShowErrorMessage(attrs) {
+    if (attrs['error_condition'] === 'not-acceptable' && (await this.rejoinIfNecessary())) {
+      return false;
+    }
 
-      /**
-       * Use service-discovery to ask the XMPP server whether
-       * this user has a reserved nickname for this groupchat.
-       * If so, we'll use that, otherwise we render the nickname form.
-       * @private
-       * @method _converse.ChatRoom#getReservedNick
-       * @returns { Promise<string> } A promise which resolves with the reserved nick or null
-       */
-      async getReservedNick() {
-        const stanza = converse_muc_$iq({
-          'to': this.get('jid'),
-          'from': converse_core_converse.connection.jid,
-          'type': "get"
-        }).c("query", {
-          'xmlns': converse_muc_Strophe.NS.DISCO_INFO,
-          'node': 'x-roomuser-item'
-        });
-        const result = await converse_core_api.sendIQ(stanza, null, false);
+    return core_converse.ChatBox.prototype.shouldShowErrorMessage.call(this, attrs);
+  },
 
-        if (utils_form.isErrorObject(result)) {
-          throw result;
-        }
+  /**
+   * Looks whether we already have a moderation message for this
+   * incoming message. If so, it's considered "dangling" because
+   * it probably hasn't been applied to anything yet, given that
+   * the relevant message is only coming in now.
+   * @private
+   * @method _converse.ChatRoom#findDanglingModeration
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMUCMessage}
+   * @returns { _converse.ChatRoomMessage }
+   */
+  findDanglingModeration(attrs) {
+    if (!this.messages.length) {
+      return null;
+    } // Only look for dangling moderation if there are newer
+    // messages than this one, since moderation come after.
 
-        const identity_el = result.querySelector('query[node="x-roomuser-item"] identity');
-        return identity_el ? identity_el.getAttribute('name') : null;
-      },
 
-      async registerNickname() {
-        // See https://xmpp.org/extensions/xep-0045.html#register
-        const nick = this.get('nick');
-        const jid = this.get('jid');
-        let iq, err_msg;
+    if (this.messages.last().get('time') > attrs.time) {
+      // Search from latest backwards
+      const messages = Array.from(this.messages.models);
+      const stanza_id = attrs["stanza_id ".concat(this.get('jid'))];
 
-        try {
-          iq = await converse_core_api.sendIQ(converse_muc_$iq({
-            'to': jid,
-            'from': converse_core_converse.connection.jid,
-            'type': 'get'
-          }).c('query', {
-            'xmlns': converse_muc_Strophe.NS.MUC_REGISTER
-          }));
-        } catch (e) {
-          if (converse_muc_sizzle("not-allowed[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), e).length) {
-            err_msg = __("You're not allowed to register yourself in this groupchat.");
-          } else if (converse_muc_sizzle("registration-required[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), e).length) {
-            err_msg = __("You're not allowed to register in this groupchat because it's members-only.");
-          }
+      if (!stanza_id) {
+        return null;
+      }
 
-          headless_log.error(e);
-          return err_msg;
-        }
+      messages.reverse();
+      return messages.find(({
+        attributes
+      }) => attributes.moderated === 'retracted' && attributes.moderated_id === stanza_id && attributes.moderated_by);
+    }
+  },
 
-        const required_fields = converse_muc_sizzle('field required', iq).map(f => f.parentElement);
+  /**
+   * Handles message moderation based on the passed in attributes.
+   * @private
+   * @method _converse.ChatRoom#handleModeration
+   * @param { object } attrs - Attributes representing a received
+   *  message, as returned by {@link st.parseMUCMessage}
+   * @returns { Boolean } Returns `true` or `false` depending on
+   *  whether a message was moderated or not.
+   */
+  async handleModeration(attrs) {
+    const MODERATION_ATTRIBUTES = ['editable', 'moderated', 'moderated_by', 'moderated_id', 'moderation_reason'];
 
-        if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') {
-          return headless_log.error("Can't register the user register in the groupchat ".concat(jid, " due to the required fields"));
-        }
+    if (attrs.moderated === 'retracted') {
+      const query = {};
+      const key = "stanza_id ".concat(this.get('jid'));
+      query[key] = attrs.moderated_id;
+      const message = this.messages.findWhere(query);
 
-        try {
-          await converse_core_api.sendIQ(converse_muc_$iq({
-            'to': jid,
-            'from': converse_core_converse.connection.jid,
-            'type': 'set'
-          }).c('query', {
-            'xmlns': converse_muc_Strophe.NS.MUC_REGISTER
-          }).c('x', {
-            'xmlns': converse_muc_Strophe.NS.XFORM,
-            'type': 'submit'
-          }).c('field', {
-            'var': 'FORM_TYPE'
-          }).c('value').t('http://jabber.org/protocol/muc#register').up().up().c('field', {
-            'var': 'muc#register_roomnick'
-          }).c('value').t(nick));
-        } catch (e) {
-          if (converse_muc_sizzle("service-unavailable[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), e).length) {
-            err_msg = __("Can't register your nickname in this groupchat, it doesn't support registration.");
-          } else if (converse_muc_sizzle("bad-request[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), e).length) {
-            err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied.");
-          }
+      if (!message) {
+        attrs['dangling_moderation'] = true;
+        await this.createMessage(attrs);
+        return true;
+      }
 
-          headless_log.error(err_msg);
-          headless_log.error(e);
-          return err_msg;
-        }
-      },
+      message.save(lodash_es_pick(attrs, MODERATION_ATTRIBUTES));
+      return true;
+    } else {
+      // Check if we have dangling moderation message
+      const message = this.findDanglingModeration(attrs);
 
-      /**
-       * Given a presence stanza, update the occupant model based on its contents.
-       * @private
-       * @method _converse.ChatRoom#updateOccupantsOnPresence
-       * @param { XMLElement } pres - The presence stanza
-       */
-      updateOccupantsOnPresence(pres) {
-        var _occupant$attributes, _occupant$attributes2;
+      if (message) {
+        const moderation_attrs = lodash_es_pick(message.attributes, MODERATION_ATTRIBUTES);
+        const new_attrs = Object.assign({
+          'dangling_moderation': false
+        }, attrs, moderation_attrs);
+        delete new_attrs['id']; // Delete id, otherwise a new cache entry gets created
 
-        const data = utils_stanza.parseMUCPresence(pres);
+        message.save(new_attrs);
+        return true;
+      }
+    }
 
-        if (data.type === 'error' || !data.jid && !data.nick) {
-          return true;
-        }
+    return false;
+  },
 
-        const occupant = this.occupants.findOccupant(data); // Destroy an unavailable occupant if this isn't a nick change operation and if they're not affiliated
+  /**
+   * @param {String} actor - The nickname of the actor that caused the notification
+   * @param {String|Array<String>} states - The state or states representing the type of notificcation
+   */
+  removeNotification(actor, states) {
+    const actors_per_state = this.notifications.toJSON();
+    states = Array.isArray(states) ? states : [states];
+    states.forEach(state => {
+      const existing_actors = Array.from(actors_per_state[state] || []);
 
-        if (data.type === 'unavailable' && occupant && !data.states.includes(converse.MUC_NICK_CHANGED_CODE) && !['admin', 'owner', 'member'].includes(data['affiliation'])) {
-          // Before destroying we set the new data, so that we can show the disconnection message
-          occupant.set(data);
-          occupant.destroy();
-          return;
-        }
+      if (existing_actors.includes(actor)) {
+        const idx = existing_actors.indexOf(actor);
+        existing_actors.splice(idx, 1);
+        this.notifications.set(state, Array.from(existing_actors));
+      }
+    });
+  },
 
-        const jid = data.jid || '';
-        const attributes = Object.assign(data, {
-          'jid': converse_muc_Strophe.getBareJidFromJid(jid) || (occupant === null || occupant === void 0 ? void 0 : (_occupant$attributes = occupant.attributes) === null || _occupant$attributes === void 0 ? void 0 : _occupant$attributes.jid),
-          'resource': converse_muc_Strophe.getResourceFromJid(jid) || (occupant === null || occupant === void 0 ? void 0 : (_occupant$attributes2 = occupant.attributes) === null || _occupant$attributes2 === void 0 ? void 0 : _occupant$attributes2.resource)
-        });
+  /**
+   * Update the notifications model by adding the passed in nickname
+   * to the array of nicknames that all match a particular state.
+   *
+   * Removes the nickname from any other states it might be associated with.
+   *
+   * The state can be a XEP-0085 Chat State or a XEP-0045 join/leave
+   * state.
+   * @param {String} actor - The nickname of the actor that causes the notification
+   * @param {String} state - The state representing the type of notificcation
+   */
+  updateNotifications(actor, state) {
+    const actors_per_state = this.notifications.toJSON();
+    const existing_actors = actors_per_state[state] || [];
 
-        if (occupant) {
-          occupant.save(attributes);
-        } else {
-          this.occupants.create(attributes);
-        }
-      },
+    if (existing_actors.includes(actor)) {
+      return;
+    }
 
-      fetchFeaturesIfConfigurationChanged(stanza) {
-        // 104: configuration change
-        // 170: logging enabled
-        // 171: logging disabled
-        // 172: room no longer anonymous
-        // 173: room now semi-anonymous
-        // 174: room now fully anonymous
-        const codes = ['104', '170', '171', '172', '173', '174'];
+    const reducer = (out, s) => {
+      if (s === state) {
+        out[s] = [...existing_actors, actor];
+      } else {
+        out[s] = (actors_per_state[s] || []).filter(a => a !== actor);
+      }
 
-        if (converse_muc_sizzle('status', stanza).filter(e => codes.includes(e.getAttribute('status'))).length) {
-          this.refreshDiscoInfo();
-        }
-      },
+      return out;
+    };
 
-      /**
-       * Given two JIDs, which can be either user JIDs or MUC occupant JIDs,
-       * determine whether they belong to the same user.
-       * @private
-       * @method _converse.ChatRoom#isSameUser
-       * @param { String } jid1
-       * @param { String } jid2
-       * @returns { Boolean }
-       */
-      isSameUser(jid1, jid2) {
-        const bare_jid1 = converse_muc_Strophe.getBareJidFromJid(jid1);
-        const bare_jid2 = converse_muc_Strophe.getBareJidFromJid(jid2);
-        const resource1 = converse_muc_Strophe.getResourceFromJid(jid1);
-        const resource2 = converse_muc_Strophe.getResourceFromJid(jid2);
-
-        if (utils_form.isSameBareJID(jid1, jid2)) {
-          if (bare_jid1 === this.get('jid')) {
-            // MUC JIDs
-            return resource1 === resource2;
-          } else {
-            return true;
-          }
-        } else {
-          const occupant1 = bare_jid1 === this.get('jid') ? this.occupants.findOccupant({
-            'nick': resource1
-          }) : this.occupants.findOccupant({
-            'jid': bare_jid1
-          });
-          const occupant2 = bare_jid2 === this.get('jid') ? this.occupants.findOccupant({
-            'nick': resource2
-          }) : this.occupants.findOccupant({
-            'jid': bare_jid2
-          });
-          return occupant1 === occupant2;
-        }
-      },
+    const actors_per_chat_state = converse.CHAT_STATES.reduce(reducer, {});
+    const actors_per_traffic_state = converse.MUC_TRAFFIC_STATES_LIST.reduce(reducer, {});
+    const actors_per_role_change = converse.MUC_ROLE_CHANGES_LIST.reduce(reducer, {});
+    this.notifications.set(Object.assign(actors_per_chat_state, actors_per_traffic_state, actors_per_role_change));
+    window.setTimeout(() => this.removeNotification(actor, state), 10000);
+  },
 
-      async isSubjectHidden() {
-        const jids = await converse_core_api.user.settings.get('mucs_with_hidden_subject', []);
-        return jids.includes(this.get('jid'));
-      },
+  /**
+   * Handler for all MUC messages sent to this groupchat. This method
+   * shouldn't be called directly, instead {@link _converse.ChatRoom#queueMessage}
+   * should be called.
+   * @private
+   * @method _converse.ChatRoom#onMessage
+   * @param { MessageAttributes } attrs - A promise which resolves to the message attributes.
+   */
+  async onMessage(attrs) {
+    attrs = await attrs;
 
-      async toggleSubjectHiddenState() {
-        const muc_jid = this.get('jid');
-        const jids = await converse_core_api.user.settings.get('mucs_with_hidden_subject', []);
+    if (utils_form.isErrorObject(attrs)) {
+      attrs.stanza && headless_log.error(attrs.stanza);
+      return headless_log.error(attrs.message);
+    }
 
-        if (jids.includes(this.get('jid'))) {
-          converse_core_api.user.settings.set('mucs_with_hidden_subject', jids.filter(jid => jid !== muc_jid));
-        } else {
-          converse_core_api.user.settings.set('mucs_with_hidden_subject', [...jids, muc_jid]);
-        }
-      },
+    const message = this.getDuplicateMessage(attrs);
 
-      /**
-       * Handle a possible subject change and return `true` if so.
-       * @private
-       * @method _converse.ChatRoom#handleSubjectChange
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMUCMessage}
-       */
-      async handleSubjectChange(attrs) {
-        if (typeof attrs.subject === 'string' && !attrs.thread && !attrs.message) {
-          // https://xmpp.org/extensions/xep-0045.html#subject-mod
-          // -----------------------------------------------------
-          // The subject is changed by sending a message of type "groupchat" to the <room@service>,
-          // where the <message/> MUST contain a <subject/> element that specifies the new subject but
-          // MUST NOT contain a <body/> element (or a <thread/> element).
-          const subject = attrs.subject;
-          const author = attrs.nick;
-          utils_form.safeSave(this, {
-            'subject': {
-              author,
-              'text': attrs.subject || ''
-            }
-          });
+    if (message) {
+      return this.updateMessage(message, attrs);
+    } else if (attrs.is_valid_receipt_request || attrs.is_marker || this.ignorableCSN(attrs)) {
+      return;
+    }
 
-          if (!attrs.is_delayed && author) {
-            const message = subject ? __('Topic set by %1$s', author) : __('Topic cleared by %1$s', author);
-            const prev_msg = this.messages.last();
+    if ((await this.handleRetraction(attrs)) || (await this.handleModeration(attrs)) || (await this.handleSubjectChange(attrs))) {
+      return this.removeNotification(attrs.nick, ['composing', 'paused']);
+    }
 
-            if ((prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('nick')) !== attrs.nick || (prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('type')) !== 'info' || (prev_msg === null || prev_msg === void 0 ? void 0 : prev_msg.get('message')) !== message) {
-              this.createMessage({
-                message,
-                'nick': attrs.nick,
-                'type': 'info'
-              });
-            }
+    this.setEditable(attrs, attrs.time);
 
-            if (await this.isSubjectHidden()) {
-              this.toggleSubjectHiddenState();
-            }
-          }
+    if (attrs['chat_state']) {
+      this.updateNotifications(attrs.nick, attrs.chat_state);
+    }
 
-          return true;
-        }
+    if (utils_form.shouldCreateGroupchatMessage(attrs)) {
+      const msg = this.handleCorrection(attrs) || (await this.createMessage(attrs));
+      this.removeNotification(attrs.nick, ['composing', 'paused']);
+      this.handleUnreadMessage(msg);
+    }
+  },
 
-        return false;
-      },
+  handleModifyError(pres) {
+    var _pres$querySelector;
 
-      /**
-       * Set the subject for this {@link _converse.ChatRoom}
-       * @private
-       * @method _converse.ChatRoom#setSubject
-       * @param { String } value
-       */
-      setSubject(value = '') {
-        converse_core_api.send(converse_muc_$msg({
-          to: this.get('jid'),
-          from: converse_core_converse.connection.jid,
-          type: "groupchat"
-        }).c("subject", {
-          xmlns: "jabber:client"
-        }).t(value).tree());
-      },
+    const text = (_pres$querySelector = pres.querySelector('error text')) === null || _pres$querySelector === void 0 ? void 0 : _pres$querySelector.textContent;
 
-      /**
-       * Is this a chat state notification that can be ignored,
-       * because it's old or because it's from us.
-       * @private
-       * @method _converse.ChatRoom#ignorableCSN
-       * @param { Object } attrs - The message attributes
-       */
-      ignorableCSN(attrs) {
-        return attrs.chat_state && !attrs.body && (attrs.is_delayed || this.isOwnMessage(attrs));
-      },
+    if (text) {
+      if (this.session.get('connection_status') === converse.ROOMSTATUS.CONNECTING) {
+        this.setDisconnectionMessage(text);
+      } else {
+        const attrs = {
+          'type': 'error',
+          'message': text,
+          'is_ephemeral': true
+        };
+        this.createMessage(attrs);
+      }
+    }
+  },
 
-      /**
-       * Determines whether the message is from ourselves by checking
-       * the `from` attribute. Doesn't check the `type` attribute.
-       * @private
-       * @method _converse.ChatRoom#isOwnMessage
-       * @param { Object|XMLElement|_converse.Message } msg
-       * @returns { boolean }
-       */
-      isOwnMessage(msg) {
-        let from;
+  /**
+   * Handle a presence stanza that disconnects the user from the MUC
+   * @param { XMLElement } stanza
+   */
+  handleDisconnection(stanza) {
+    var _item$querySelector;
 
-        if (lodash_es_isElement(msg)) {
-          from = msg.getAttribute('from');
-        } else if (msg instanceof converse_core_converse.Message) {
-          from = msg.get('from');
-        } else {
-          from = msg.from;
-        }
+    const is_self = stanza.querySelector("status[code='110']") !== null;
+    const x = sizzle_default()("x[xmlns=\"".concat(strophe["e" /* Strophe */].NS.MUC_USER, "\"]"), stanza).pop();
 
-        return converse_muc_Strophe.getResourceFromJid(from) == this.get('nick');
-      },
+    if (!x) {
+      return;
+    }
 
-      getUpdatedMessageAttributes(message, attrs) {
-        // Overridden in converse-muc and converse-mam
-        const new_attrs = converse_core_converse.ChatBox.prototype.getUpdatedMessageAttributes.call(this, message, attrs);
+    const codes = sizzle_default()('status', x).map(s => s.getAttribute('code'));
+    const disconnection_codes = lodash_es_intersection(codes, Object.keys(core_converse.muc.disconnect_messages));
+    const disconnected = is_self && disconnection_codes.length > 0;
 
-        if (this.isOwnMessage(attrs)) {
-          const stanza_id_keys = Object.keys(attrs).filter(k => k.startsWith('stanza_id'));
-          Object.assign(new_attrs, lodash_es_pick(attrs, stanza_id_keys));
+    if (!disconnected) {
+      return;
+    } // By using querySelector we assume here there is
+    // one <item> per <x xmlns='http://jabber.org/protocol/muc#user'>
+    // element. This appears to be a safe assumption, since
+    // each <x/> element pertains to a single user.
 
-          if (!message.get('received')) {
-            new_attrs.received = new Date().toISOString();
-          }
-        }
 
-        return new_attrs;
-      },
+    const item = x.querySelector('item');
+    const reason = item ? (_item$querySelector = item.querySelector('reason')) === null || _item$querySelector === void 0 ? void 0 : _item$querySelector.textContent : undefined;
+    const actor = item ? lodash_es_invoke(item.querySelector('actor'), 'getAttribute', 'nick') : undefined;
+    const message = core_converse.muc.disconnect_messages[disconnection_codes[0]];
+    this.setDisconnectionMessage(message, reason, actor);
+  },
 
-      /**
-       * Send a MUC-0410 MUC Self-Ping stanza to room to determine
-       * whether we're still joined.
-       * @async
-       * @private
-       * @method _converse.ChatRoom#isJoined
-       * @returns {Promise<boolean>}
-       */
-      async isJoined() {
-        const ping = converse_muc_$iq({
-          'to': "".concat(this.get('jid'), "/").concat(this.get('nick')),
-          'type': "get"
-        }).c("ping", {
-          'xmlns': converse_muc_Strophe.NS.PING
-        });
+  getActionInfoMessage(code, nick, actor) {
+    const __ = core_converse.__;
 
-        try {
-          await converse_core_api.sendIQ(ping);
-        } catch (e) {
-          if (e === null) {
-            headless_log.error("Timeout error while checking whether we're joined to MUC: ".concat(this.get('jid')));
-          } else {
-            headless_log.error("Apparently we're no longer connected to MUC: ".concat(this.get('jid')));
-            headless_log.error(e);
-          }
+    if (code === '301') {
+      return actor ? __('%1$s has been banned by %2$s', nick, actor) : __('%1$s has been banned', nick);
+    } else if (code === '303') {
+      return __("%1$s's nickname has changed", nick);
+    } else if (code === '307') {
+      return actor ? __('%1$s has been kicked out by %2$s', nick, actor) : __('%1$s has been kicked out', nick);
+    } else if (code === '321') {
+      return __('%1$s has been removed because of an affiliation change', nick);
+    } else if (code === '322') {
+      return __('%1$s has been removed for not being a member', nick);
+    }
+  },
 
-          return false;
-        }
+  createAffiliationChangeMessage(occupant) {
+    const __ = core_converse.__;
+    const previous_affiliation = occupant._previousAttributes.affiliation;
 
-        return true;
-      },
+    if (!previous_affiliation) {
+      // If no previous affiliation was set, then we don't
+      // interpret this as an affiliation change.
+      // For example, if muc_send_probes is true, then occupants
+      // are created based on incoming messages, in which case
+      // we don't yet know the affiliation
+      return;
+    }
 
-      /**
-       * Check whether we're still joined and re-join if not
-       * @async
-       * @private
-       * @method _converse.ChatRoom#rejoinIfNecessary
-       */
-      async rejoinIfNecessary() {
-        if (!(await this.isJoined())) {
-          this.rejoin();
-          return true;
-        }
-      },
+    const current_affiliation = occupant.get('affiliation');
 
-      /**
-       * @private
-       * @method _converse.ChatRoom#shouldShowErrorMessage
-       * @returns {Promise<boolean>}
-       */
-      async shouldShowErrorMessage(attrs) {
-        if (attrs['error_condition'] === 'not-acceptable' && (await this.rejoinIfNecessary())) {
-          return false;
-        }
+    if (previous_affiliation === 'admin' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXADMIN)) {
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is no longer an admin of this groupchat', occupant.get('nick'))
+      });
+    } else if (previous_affiliation === 'owner' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXOWNER)) {
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is no longer an owner of this groupchat', occupant.get('nick'))
+      });
+    } else if (previous_affiliation === 'outcast' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXOUTCAST)) {
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is no longer banned from this groupchat', occupant.get('nick'))
+      });
+    }
 
-        return converse_core_converse.ChatBox.prototype.shouldShowErrorMessage.call(this, attrs);
-      },
+    if (current_affiliation === 'none' && previous_affiliation === 'member' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXMEMBER)) {
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is no longer a member of this groupchat', occupant.get('nick'))
+      });
+    }
 
-      /**
-       * Looks whether we already have a moderation message for this
-       * incoming message. If so, it's considered "dangling" because
-       * it probably hasn't been applied to anything yet, given that
-       * the relevant message is only coming in now.
-       * @private
-       * @method _converse.ChatRoom#findDanglingModeration
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMUCMessage}
-       * @returns { _converse.ChatRoomMessage }
-       */
-      findDanglingModeration(attrs) {
-        if (!this.messages.length) {
-          return null;
-        } // Only look for dangling moderation if there are newer
-        // messages than this one, since moderation come after.
+    if (current_affiliation === 'member' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.MEMBER)) {
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is now a member of this groupchat', occupant.get('nick'))
+      });
+    } else if (current_affiliation === 'admin' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.ADMIN) || current_affiliation == 'owner' && core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.OWNER)) {
+      // For example: AppleJack is now an (admin|owner) of this groupchat
+      this.createMessage({
+        'type': 'info',
+        'message': __('%1$s is now an %2$s of this groupchat', occupant.get('nick'), current_affiliation)
+      });
+    }
+  },
 
+  createRoleChangeMessage(occupant, changed) {
+    if (changed === 'none' || occupant.changed.affiliation) {
+      // We don't inform of role changes if they accompany affiliation changes.
+      return;
+    }
 
-        if (this.messages.last().get('time') > attrs.time) {
-          // Search from latest backwards
-          const messages = Array.from(this.messages.models);
-          const stanza_id = attrs["stanza_id ".concat(this.get('jid'))];
+    const previous_role = occupant._previousAttributes.role;
 
-          if (!stanza_id) {
-            return null;
-          }
+    if (previous_role === 'moderator' && core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.DEOP)) {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.DEOP);
+    } else if (previous_role === 'visitor' && core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.VOICE)) {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.VOICE);
+    }
 
-          messages.reverse();
-          return messages.find(({
-            attributes
-          }) => attributes.moderated === 'retracted' && attributes.moderated_id === stanza_id && attributes.moderated_by);
-        }
-      },
+    if (occupant.get('role') === 'visitor' && core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.MUTE)) {
+      this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.MUTE);
+    } else if (occupant.get('role') === 'moderator') {
+      if (!['owner', 'admin'].includes(occupant.get('affiliation')) && core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.OP)) {
+        // Oly show this message if the user isn't already
+        // an admin or owner, otherwise this isn't new information.
+        this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.OP);
+      }
+    }
+  },
 
-      /**
-       * Handles message moderation based on the passed in attributes.
-       * @private
-       * @method _converse.ChatRoom#handleModeration
-       * @param { object } attrs - Attributes representing a received
-       *  message, as returned by {@link st.parseMUCMessage}
-       * @returns { Boolean } Returns `true` or `false` depending on
-       *  whether a message was moderated or not.
-       */
-      async handleModeration(attrs) {
-        const MODERATION_ATTRIBUTES = ['editable', 'moderated', 'moderated_by', 'moderated_id', 'moderation_reason'];
-
-        if (attrs.moderated === 'retracted') {
-          const query = {};
-          const key = "stanza_id ".concat(this.get('jid'));
-          query[key] = attrs.moderated_id;
-          const message = this.messages.findWhere(query);
-
-          if (!message) {
-            attrs['dangling_moderation'] = true;
-            await this.createMessage(attrs);
-            return true;
-          }
+  /**
+   * Create an info message based on a received MUC status code
+   * @private
+   * @method _converse.ChatRoom#createInfoMessage
+   * @param { string } code - The MUC status code
+   * @param { XMLElement } stanza - The original stanza that contains the code
+   * @param { Boolean } is_self - Whether this stanza refers to our own presence
+   */
+  createInfoMessage(code, stanza, is_self) {
+    const __ = core_converse.__;
+    const data = {
+      'type': 'info'
+    };
 
-          message.save(lodash_es_pick(attrs, MODERATION_ATTRIBUTES));
-          return true;
-        } else {
-          // Check if we have dangling moderation message
-          const message = this.findDanglingModeration(attrs);
+    if (!core_converse.isInfoVisible(code)) {
+      return;
+    }
 
-          if (message) {
-            const moderation_attrs = lodash_es_pick(message.attributes, MODERATION_ATTRIBUTES);
-            const new_attrs = Object.assign({
-              'dangling_moderation': false
-            }, attrs, moderation_attrs);
-            delete new_attrs['id']; // Delete id, otherwise a new cache entry gets created
+    if (code === '110' || code === '100' && !is_self) {
+      return;
+    } else if (code in core_converse.muc.info_messages) {
+      data.message = core_converse.muc.info_messages[code];
+    } else if (!is_self && ACTION_INFO_CODES.includes(code)) {
+      var _item$querySelector2, _item$querySelector3;
 
-            message.save(new_attrs);
-            return true;
-          }
-        }
+      const nick = strophe["e" /* Strophe */].getResourceFromJid(stanza.getAttribute('from'));
+      const item = stanza.querySelector("x[xmlns=\"".concat(strophe["e" /* Strophe */].NS.MUC_USER, "\"] item"));
+      data.actor = item ? (_item$querySelector2 = item.querySelector('actor')) === null || _item$querySelector2 === void 0 ? void 0 : _item$querySelector2.getAttribute('nick') : undefined;
+      data.reason = item ? (_item$querySelector3 = item.querySelector('reason')) === null || _item$querySelector3 === void 0 ? void 0 : _item$querySelector3.textContent : undefined;
+      data.message = this.getActionInfoMessage(code, nick, data.actor);
+    } else if (is_self && code in core_converse.muc.new_nickname_messages) {
+      // XXX: Side-effect of setting the nick. Should ideally be refactored out of this method
+      let nick;
 
-        return false;
-      },
-
-      /**
-       * Queue an incoming message stanza meant for this {@link _converse.Chatroom} for processing.
-       * @async
-       * @private
-       * @method _converse.ChatRoom#queueMessage
-       * @param { Promise<MessageAttributes> } attrs - A promise which resolves to the message attributes
-       */
-      queueMessage(attrs) {
-        var _this$messages;
-
-        if ((_this$messages = this.messages) === null || _this$messages === void 0 ? void 0 : _this$messages.fetched) {
-          this.msg_chain = this.msg_chain || this.messages.fetched;
-          this.msg_chain = this.msg_chain.then(() => this.onMessage(attrs));
-          return this.msg_chain;
-        } else {
-          this.message_queue.push(attrs);
-          return Promise.resolve();
-        }
-      },
-
-      /**
-       * @param {String} actor - The nickname of the actor that caused the notification
-       * @param {String|Array<String>} states - The state or states representing the type of notificcation
-       */
-      removeNotification(actor, states) {
-        const actors_per_state = this.notifications.toJSON();
-        states = Array.isArray(states) ? states : [states];
-        states.forEach(state => {
-          const existing_actors = Array.from(actors_per_state[state] || []);
-
-          if (existing_actors.includes(actor)) {
-            const idx = existing_actors.indexOf(actor);
-            existing_actors.splice(idx, 1);
-            this.notifications.set(state, Array.from(existing_actors));
-          }
-        });
-      },
-
-      /**
-       * Update the notifications model by adding the passed in nickname
-       * to the array of nicknames that all match a particular state.
-       *
-       * Removes the nickname from any other states it might be associated with.
-       *
-       * The state can be a XEP-0085 Chat State or a XEP-0045 join/leave
-       * state.
-       * @param {String} actor - The nickname of the actor that causes the notification
-       * @param {String} state - The state representing the type of notificcation
-       */
-      updateNotifications(actor, state) {
-        const actors_per_state = this.notifications.toJSON();
-        const existing_actors = actors_per_state[state] || [];
-
-        if (existing_actors.includes(actor)) {
-          return;
-        }
+      if (is_self && code === '210') {
+        nick = strophe["e" /* Strophe */].getResourceFromJid(stanza.getAttribute('from'));
+      } else if (is_self && code === '303') {
+        nick = stanza.querySelector("x[xmlns=\"".concat(strophe["e" /* Strophe */].NS.MUC_USER, "\"] item")).getAttribute('nick');
+      }
 
-        const reducer = (out, s) => {
-          if (s === state) {
-            out[s] = [...existing_actors, actor];
-          } else {
-            out[s] = (actors_per_state[s] || []).filter(a => a !== actor);
-          }
+      this.save('nick', nick);
+      data.message = __(core_converse.muc.new_nickname_messages[code], nick);
+    }
 
-          return out;
-        };
+    if (data.message) {
+      if (code === '201' && this.messages.findWhere(data)) {
+        return;
+      } else if (code in core_converse.muc.info_messages && this.messages.length && this.messages.pop().get('message') === data.message) {
+        // XXX: very naive duplication checking
+        return;
+      }
 
-        const actors_per_chat_state = converse.CHAT_STATES.reduce(reducer, {});
-        const actors_per_traffic_state = converse.MUC_TRAFFIC_STATES_LIST.reduce(reducer, {});
-        const actors_per_role_change = converse.MUC_ROLE_CHANGES_LIST.reduce(reducer, {});
-        this.notifications.set(Object.assign(actors_per_chat_state, actors_per_traffic_state, actors_per_role_change));
-        window.setTimeout(() => this.removeNotification(actor, state), 10000);
-      },
+      this.createMessage(data);
+    }
+  },
 
-      /**
-       * Handler for all MUC messages sent to this groupchat. This method
-       * shouldn't be called directly, instead {@link _converse.ChatRoom#queueMessage}
-       * should be called.
-       * @private
-       * @method _converse.ChatRoom#onMessage
-       * @param { MessageAttributes } attrs - A promise which resolves to the message attributes.
-       */
-      async onMessage(attrs) {
-        attrs = await attrs;
+  /**
+   * Create info messages based on a received presence or message stanza
+   * @private
+   * @method _converse.ChatRoom#createInfoMessages
+   * @param { XMLElement } stanza
+   */
+  createInfoMessages(stanza) {
+    const codes = sizzle_default()("x[xmlns=\"".concat(strophe["e" /* Strophe */].NS.MUC_USER, "\"] status"), stanza).map(s => s.getAttribute('code'));
 
-        if (utils_form.isErrorObject(attrs)) {
-          attrs.stanza && headless_log.error(attrs.stanza);
-          return headless_log.error(attrs.message);
-        }
+    if (codes.includes('333') && codes.includes('307')) {
+      // See: https://github.com/xsf/xeps/pull/969/files#diff-ac5113766e59219806793c1f7d967f1bR4966
+      codes.splice(codes.indexOf('307'), 1);
+    }
 
-        const message = this.getDuplicateMessage(attrs);
+    const is_self = codes.includes('110');
+    codes.forEach(code => this.createInfoMessage(code, stanza, is_self));
+  },
 
-        if (message) {
-          return this.updateMessage(message, attrs);
-        } else if (attrs.is_valid_receipt_request || attrs.is_marker || this.ignorableCSN(attrs)) {
-          return;
-        }
+  setDisconnectionMessage(message, reason, actor) {
+    this.save({
+      'disconnection_message': message,
+      'disconnection_reason': reason,
+      'disconnection_actor': actor
+    });
+    this.session.save({
+      'connection_status': converse.ROOMSTATUS.DISCONNECTED
+    });
+  },
 
-        if ((await this.handleRetraction(attrs)) || (await this.handleModeration(attrs)) || (await this.handleSubjectChange(attrs))) {
-          return this.removeNotification(attrs.nick, ['composing', 'paused']);
-        }
+  onNicknameClash(presence) {
+    const __ = core_converse.__;
 
-        this.setEditable(attrs, attrs.time);
+    if (core_api.settings.get('muc_nickname_from_jid')) {
+      const nick = presence.getAttribute('from').split('/')[1];
 
-        if (attrs['chat_state']) {
-          this.updateNotifications(attrs.nick, attrs.chat_state);
-        }
+      if (nick === core_converse.getDefaultMUCNickname()) {
+        this.join(nick + '-2');
+      } else {
+        const del = nick.lastIndexOf('-');
+        const num = nick.substring(del + 1, nick.length);
+        this.join(nick.substring(0, del + 1) + String(Number(num) + 1));
+      }
+    } else {
+      this.save({
+        'nickname_validation_message': __('The nickname you chose is reserved or ' + 'currently in use, please choose a different one.')
+      });
+      this.session.save({
+        'connection_status': converse.ROOMSTATUS.NICKNAME_REQUIRED
+      });
+    }
+  },
 
-        if (utils_form.shouldCreateGroupchatMessage(attrs)) {
-          const msg = this.handleCorrection(attrs) || (await this.createMessage(attrs));
-          this.removeNotification(attrs.nick, ['composing', 'paused']);
-          this.handleUnreadMessage(msg);
-        }
-      },
+  /**
+   * Parses a <presence> stanza with type "error" and sets the proper
+   * `connection_status` value for this {@link _converse.ChatRoom} as
+   * well as any additional output that can be shown to the user.
+   * @private
+   * @param { XMLElement } stanza - The presence stanza
+   */
+  onErrorPresence(stanza) {
+    var _sizzle$pop;
 
-      handleModifyError(pres) {
-        var _pres$querySelector;
+    const __ = core_converse.__;
+    const error = stanza.querySelector('error');
+    const error_type = error.getAttribute('type');
+    const reason = (_sizzle$pop = sizzle_default()("text[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent;
 
-        const text = (_pres$querySelector = pres.querySelector('error text')) === null || _pres$querySelector === void 0 ? void 0 : _pres$querySelector.textContent;
+    if (error_type === 'modify') {
+      this.handleModifyError(stanza);
+    } else if (error_type === 'auth') {
+      if (sizzle_default()("not-authorized[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), error).length) {
+        this.save({
+          'password_validation_message': reason || __('Password incorrect')
+        });
+        this.session.save({
+          'connection_status': converse.ROOMSTATUS.PASSWORD_REQUIRED
+        });
+      }
 
-        if (text) {
-          if (this.session.get('connection_status') === converse.ROOMSTATUS.CONNECTING) {
-            this.setDisconnectionMessage(text);
-          } else {
-            const attrs = {
-              'type': 'error',
-              'message': text,
-              'is_ephemeral': true
-            };
-            this.createMessage(attrs);
-          }
-        }
-      },
+      if (error.querySelector('registration-required')) {
+        const message = __('You are not on the member list of this groupchat.');
 
-      /**
-       * Handle a presence stanza that disconnects the user from the MUC
-       * @param { XMLElement } stanza
-       */
-      handleDisconnection(stanza) {
-        var _item$querySelector;
+        this.setDisconnectionMessage(message, reason);
+      } else if (error.querySelector('forbidden')) {
+        const message = __('You have been banned from this groupchat.');
 
-        const is_self = stanza.querySelector("status[code='110']") !== null;
-        const x = converse_muc_sizzle("x[xmlns=\"".concat(converse_muc_Strophe.NS.MUC_USER, "\"]"), stanza).pop();
+        this.setDisconnectionMessage(message, reason);
+      }
+    } else if (error_type === 'cancel') {
+      if (error.querySelector('not-allowed')) {
+        const message = __('You are not allowed to create new groupchats.');
 
-        if (!x) {
-          return;
-        }
+        this.setDisconnectionMessage(message, reason);
+      } else if (error.querySelector('not-acceptable')) {
+        const message = __("Your nickname doesn't conform to this groupchat's policies.");
 
-        const codes = converse_muc_sizzle('status', x).map(s => s.getAttribute('code'));
-        const disconnection_codes = lodash_es_intersection(codes, Object.keys(converse_core_converse.muc.disconnect_messages));
-        const disconnected = is_self && disconnection_codes.length > 0;
+        this.setDisconnectionMessage(message, reason);
+      } else if (sizzle_default()("gone[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), error).length) {
+        var _sizzle$pop2;
 
-        if (!disconnected) {
-          return;
-        } // By using querySelector we assume here there is
-        // one <item> per <x xmlns='http://jabber.org/protocol/muc#user'>
-        // element. This appears to be a safe assumption, since
-        // each <x/> element pertains to a single user.
+        const moved_jid = (_sizzle$pop2 = sizzle_default()("gone[xmlns=\"".concat(strophe["e" /* Strophe */].NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent.replace(/^xmpp:/, '').replace(/\?join$/, '');
+        this.save({
+          moved_jid,
+          'destroyed_reason': reason
+        });
+        this.session.save({
+          'connection_status': converse.ROOMSTATUS.DESTROYED
+        });
+      } else if (error.querySelector('conflict')) {
+        this.onNicknameClash(stanza);
+      } else if (error.querySelector('item-not-found')) {
+        const message = __('This groupchat does not (yet) exist.');
 
+        this.setDisconnectionMessage(message, reason);
+      } else if (error.querySelector('service-unavailable')) {
+        const message = __('This groupchat has reached its maximum number of participants.');
 
-        const item = x.querySelector('item');
-        const reason = item ? (_item$querySelector = item.querySelector('reason')) === null || _item$querySelector === void 0 ? void 0 : _item$querySelector.textContent : undefined;
-        const actor = item ? lodash_es_invoke(item.querySelector('actor'), 'getAttribute', 'nick') : undefined;
-        const message = converse_core_converse.muc.disconnect_messages[disconnection_codes[0]];
-        this.setDisconnectionMessage(message, reason, actor);
-      },
+        this.setDisconnectionMessage(message, reason);
+      } else if (error.querySelector('remote-server-not-found')) {
+        const message = __('Remote server not found');
 
-      getActionInfoMessage(code, nick, actor) {
-        if (code === '301') {
-          return actor ? __("%1$s has been banned by %2$s", nick, actor) : __("%1$s has been banned", nick);
-        } else if (code === '303') {
-          return __("%1$s\'s nickname has changed", nick);
-        } else if (code === '307') {
-          return actor ? __("%1$s has been kicked out by %2$s", nick, actor) : __("%1$s has been kicked out", nick);
-        } else if (code === '321') {
-          return __("%1$s has been removed because of an affiliation change", nick);
-        } else if (code === '322') {
-          return __("%1$s has been removed for not being a member", nick);
-        }
-      },
+        const feedback = reason ? __('The explanation given is: "%1$s".', reason) : undefined;
+        this.setDisconnectionMessage(message, feedback);
+      }
+    }
+  },
 
-      createAffiliationChangeMessage(occupant) {
-        const previous_affiliation = occupant._previousAttributes.affiliation;
+  /**
+   * Handles all MUC presence stanzas.
+   * @private
+   * @method _converse.ChatRoom#onPresence
+   * @param { XMLElement } stanza
+   */
+  onPresence(stanza) {
+    if (stanza.getAttribute('type') === 'error') {
+      return this.onErrorPresence(stanza);
+    }
 
-        if (!previous_affiliation) {
-          // If no previous affiliation was set, then we don't
-          // interpret this as an affiliation change.
-          // For example, if muc_send_probes is true, then occupants
-          // are created based on incoming messages, in which case
-          // we don't yet know the affiliation
-          return;
-        }
+    this.createInfoMessages(stanza);
 
-        const current_affiliation = occupant.get('affiliation');
+    if (stanza.querySelector("status[code='110']")) {
+      this.onOwnPresence(stanza);
 
-        if (previous_affiliation === 'admin' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXADMIN)) {
-          this.createMessage({
-            'type': 'info',
-            'message': __("%1$s is no longer an admin of this groupchat", occupant.get('nick'))
-          });
-        } else if (previous_affiliation === 'owner' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXOWNER)) {
-          this.createMessage({
-            'type': 'info',
-            'message': __("%1$s is no longer an owner of this groupchat", occupant.get('nick'))
-          });
-        } else if (previous_affiliation === 'outcast' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXOUTCAST)) {
-          this.createMessage({
-            'type': 'info',
-            'message': __("%1$s is no longer banned from this groupchat", occupant.get('nick'))
-          });
-        }
+      if (this.getOwnRole() !== 'none' && this.session.get('connection_status') === converse.ROOMSTATUS.CONNECTING) {
+        this.session.save('connection_status', converse.ROOMSTATUS.CONNECTED);
+      }
+    } else {
+      this.updateOccupantsOnPresence(stanza);
+    }
+  },
 
-        if (current_affiliation === 'none' && previous_affiliation === 'member' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.EXMEMBER)) {
-          this.createMessage({
-            'type': 'info',
-            'message': __("%1$s is no longer a member of this groupchat", occupant.get('nick'))
-          });
-        }
+  /**
+   * Handles a received presence relating to the current user.
+   *
+   * For locked groupchats (which are by definition "new"), the
+   * groupchat will either be auto-configured or created instantly
+   * (with default config) or a configuration groupchat will be
+   * rendered.
+   *
+   * If the groupchat is not locked, then the groupchat will be
+   * auto-configured only if applicable and if the current
+   * user is the groupchat's owner.
+   * @private
+   * @method _converse.ChatRoom#onOwnPresence
+   * @param { XMLElement } pres - The stanza
+   */
+  onOwnPresence(stanza) {
+    if (stanza.getAttribute('type') !== 'unavailable') {
+      const old_status = this.session.get('connection_status');
+
+      if (old_status !== converse.ROOMSTATUS.ENTERED) {
+        // Set connection_status before creating the occupant, but
+        // only trigger afterwards, so that plugins can access the
+        // occupant in their event handlers.
+        this.session.save('connection_status', converse.ROOMSTATUS.ENTERED, {
+          'silent': true
+        });
+        this.updateOccupantsOnPresence(stanza);
+        this.session.trigger('change:connection_status', this.session, old_status);
+      } else {
+        this.updateOccupantsOnPresence(stanza);
+      }
+    } else {
+      this.updateOccupantsOnPresence(stanza);
+    }
 
-        if (current_affiliation === 'member' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.MEMBER)) {
-          this.createMessage({
-            'type': 'info',
-            'message': __("%1$s is now a member of this groupchat", occupant.get('nick'))
-          });
-        } else if (current_affiliation === 'admin' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.ADMIN) || current_affiliation == 'owner' && converse_core_converse.isInfoVisible(converse.AFFILIATION_CHANGES.OWNER)) {
-          // For example: AppleJack is now an (admin|owner) of this groupchat
-          this.createMessage({
-            'type': 'info',
-            'message': __('%1$s is now an %2$s of this groupchat', occupant.get('nick'), current_affiliation)
-          });
+    if (stanza.getAttribute('type') === 'unavailable') {
+      this.handleDisconnection(stanza);
+    } else {
+      const locked_room = stanza.querySelector("status[code='201']");
+
+      if (locked_room) {
+        if (this.get('auto_configure')) {
+          this.autoConfigureChatRoom().then(() => this.refreshDiscoInfo());
+        } else if (core_api.settings.get('muc_instant_rooms')) {
+          // Accept default configuration
+          this.sendConfiguration().then(() => this.refreshDiscoInfo());
+        } else {
+          /**
+           * Triggered when a new room has been created which first needs to be configured
+           * and when `auto_configure` is set to `false`.
+           * Used by `_converse.ChatRoomView` in order to know when to render the
+           * configuration form for a new room.
+           * @event _converse.ChatRoom#configurationNeeded
+           * @example _converse.api.listen.on('configurationNeeded', () => { ... });
+           */
+          this.trigger('configurationNeeded');
+          return; // We haven't yet entered the groupchat, so bail here.
+        }
+      } else if (!this.features.get('fetched')) {
+        // The features for this groupchat weren't fetched.
+        // That must mean it's a new groupchat without locking
+        // (in which case Prosody doesn't send a 201 status),
+        // otherwise the features would have been fetched in
+        // the "initialize" method already.
+        if (this.getOwnAffiliation() === 'owner' && this.get('auto_configure')) {
+          this.autoConfigureChatRoom().then(() => this.refreshDiscoInfo());
+        } else {
+          this.getDiscoInfo();
         }
-      },
+      }
+    }
 
-      createRoleChangeMessage(occupant, changed) {
-        if (changed === "none" || occupant.changed.affiliation) {
-          // We don't inform of role changes if they accompany affiliation changes.
-          return;
-        }
+    this.session.save({
+      'connection_status': converse.ROOMSTATUS.ENTERED
+    });
+  },
 
-        const previous_role = occupant._previousAttributes.role;
+  /**
+   * Returns a boolean to indicate whether the current user
+   * was mentioned in a message.
+   * @private
+   * @method _converse.ChatRoom#isUserMentioned
+   * @param { String } - The text message
+   */
+  isUserMentioned(message) {
+    const nick = this.get('nick');
 
-        if (previous_role === 'moderator' && converse_core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.DEOP)) {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.DEOP);
-        } else if (previous_role === 'visitor' && converse_core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.VOICE)) {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.VOICE);
-        }
+    if (message.get('references').length) {
+      const mentions = message.get('references').filter(ref => ref.type === 'mention').map(ref => ref.value);
+      return mentions.includes(nick);
+    } else {
+      return new RegExp("\\b".concat(nick, "\\b")).test(message.get('message'));
+    }
+  },
 
-        if (occupant.get('role') === 'visitor' && converse_core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.MUTE)) {
-          this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.MUTE);
-        } else if (occupant.get('role') === 'moderator') {
-          if (!['owner', 'admin'].includes(occupant.get('affiliation')) && converse_core_converse.isInfoVisible(converse.MUC_ROLE_CHANGES.OP)) {
-            // Oly show this message if the user isn't already
-            // an admin or owner, otherwise this isn't new information.
-            this.updateNotifications(occupant.get('nick'), converse.MUC_ROLE_CHANGES.OP);
-          }
-        }
-      },
+  /* Given a newly received message, update the unread counter if necessary.
+   * @private
+   * @method _converse.ChatRoom#handleUnreadMessage
+   * @param { XMLElement } - The <messsage> stanza
+   */
+  handleUnreadMessage(message) {
+    if (!(message === null || message === void 0 ? void 0 : message.get('body'))) {
+      return;
+    }
 
-      /**
-       * Create an info message based on a received MUC status code
-       * @private
-       * @method _converse.ChatRoom#createInfoMessage
-       * @param { string } code - The MUC status code
-       * @param { XMLElement } stanza - The original stanza that contains the code
-       * @param { Boolean } is_self - Whether this stanza refers to our own presence
-       */
-      createInfoMessage(code, stanza, is_self) {
-        const data = {
-          'type': 'info'
+    if (utils_form.isNewMessage(message)) {
+      if (this.isHidden()) {
+        const settings = {
+          'num_unread_general': this.get('num_unread_general') + 1
         };
 
-        if (!converse_core_converse.isInfoVisible(code)) {
-          return;
-        }
-
-        if (code === '110' || code === '100' && !is_self) {
-          return;
-        } else if (code in converse_core_converse.muc.info_messages) {
-          data.message = converse_core_converse.muc.info_messages[code];
-        } else if (!is_self && ACTION_INFO_CODES.includes(code)) {
-          var _item$querySelector2, _item$querySelector3;
-
-          const nick = converse_muc_Strophe.getResourceFromJid(stanza.getAttribute('from'));
-          const item = stanza.querySelector("x[xmlns=\"".concat(converse_muc_Strophe.NS.MUC_USER, "\"] item"));
-          data.actor = item ? (_item$querySelector2 = item.querySelector('actor')) === null || _item$querySelector2 === void 0 ? void 0 : _item$querySelector2.getAttribute('nick') : undefined;
-          data.reason = item ? (_item$querySelector3 = item.querySelector('reason')) === null || _item$querySelector3 === void 0 ? void 0 : _item$querySelector3.textContent : undefined;
-          data.message = this.getActionInfoMessage(code, nick, data.actor);
-        } else if (is_self && code in converse_core_converse.muc.new_nickname_messages) {
-          // XXX: Side-effect of setting the nick. Should ideally be refactored out of this method
-          let nick;
-
-          if (is_self && code === '210') {
-            nick = converse_muc_Strophe.getResourceFromJid(stanza.getAttribute('from'));
-          } else if (is_self && code === '303') {
-            nick = stanza.querySelector("x[xmlns=\"".concat(converse_muc_Strophe.NS.MUC_USER, "\"] item")).getAttribute('nick');
-          }
-
-          this.save('nick', nick);
-          data.message = __(converse_core_converse.muc.new_nickname_messages[code], nick);
+        if (this.get('num_unread_general') === 0) {
+          settings['first_unread_id'] = message.get('id');
         }
 
-        if (data.message) {
-          if (code === '201' && this.messages.findWhere(data)) {
-            return;
-          } else if (code in converse_core_converse.muc.info_messages && this.messages.length && this.messages.pop().get('message') === data.message) {
-            // XXX: very naive duplication checking
-            return;
-          }
-
-          this.createMessage(data);
+        if (this.isUserMentioned(message)) {
+          settings.num_unread = this.get('num_unread') + 1;
         }
-      },
-
-      /**
-       * Create info messages based on a received presence or message stanza
-       * @private
-       * @method _converse.ChatRoom#createInfoMessages
-       * @param { XMLElement } stanza
-       */
-      createInfoMessages(stanza) {
-        const codes = converse_muc_sizzle("x[xmlns=\"".concat(converse_muc_Strophe.NS.MUC_USER, "\"] status"), stanza).map(s => s.getAttribute('code'));
 
-        if (codes.includes('333') && codes.includes('307')) {
-          // See: https://github.com/xsf/xeps/pull/969/files#diff-ac5113766e59219806793c1f7d967f1bR4966
-          codes.splice(codes.indexOf('307'), 1);
-        }
+        this.save(settings);
+      } else {
+        this.sendMarkerForMessage(message);
+      }
+    }
+  },
 
-        const is_self = codes.includes('110');
-        codes.forEach(code => this.createInfoMessage(code, stanza, is_self));
-      },
+  clearUnreadMsgCounter() {
+    if (this.get('num_unread_general') > 0 || this.get('num_unread') > 0) {
+      this.sendMarkerForMessage(this.messages.last());
+    }
 
-      setDisconnectionMessage(message, reason, actor) {
-        this.save({
-          'disconnection_message': message,
-          'disconnection_reason': reason,
-          'disconnection_actor': actor
-        });
-        this.session.save({
-          'connection_status': converse.ROOMSTATUS.DISCONNECTED
-        });
-      },
+    utils_form.safeSave(this, {
+      'num_unread': 0,
+      'num_unread_general': 0
+    });
+  }
 
-      onNicknameClash(presence) {
-        if (converse_core_api.settings.get('muc_nickname_from_jid')) {
-          const nick = presence.getAttribute('from').split('/')[1];
+};
+/* harmony default export */ var muc_muc = (ChatRoomMixin);
+// CONCATENATED MODULE: ./src/headless/plugins/muc/occupant.js
 
-          if (nick === converse_core_converse.getDefaultMUCNickname()) {
-            this.join(nick + '-2');
-          } else {
-            const del = nick.lastIndexOf("-");
-            const num = nick.substring(del + 1, nick.length);
-            this.join(nick.substring(0, del + 1) + String(Number(num) + 1));
-          }
-        } else {
-          this.save({
-            'nickname_validation_message': __("The nickname you chose is reserved or " + "currently in use, please choose a different one.")
-          });
-          this.session.save({
-            'connection_status': converse.ROOMSTATUS.NICKNAME_REQUIRED
-          });
-        }
-      },
 
-      /**
-       * Parses a <presence> stanza with type "error" and sets the proper
-       * `connection_status` value for this {@link _converse.ChatRoom} as
-       * well as any additional output that can be shown to the user.
-       * @private
-       * @param { XMLElement } stanza - The presence stanza
-       */
-      onErrorPresence(stanza) {
-        var _sizzle$pop;
-
-        const error = stanza.querySelector('error');
-        const error_type = error.getAttribute('type');
-        const reason = (_sizzle$pop = converse_muc_sizzle("text[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent;
-
-        if (error_type === 'modify') {
-          this.handleModifyError(stanza);
-        } else if (error_type === 'auth') {
-          if (converse_muc_sizzle("not-authorized[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), error).length) {
-            this.save({
-              'password_validation_message': reason || __("Password incorrect")
-            });
-            this.session.save({
-              'connection_status': converse.ROOMSTATUS.PASSWORD_REQUIRED
-            });
-          }
 
-          if (error.querySelector('registration-required')) {
-            const message = __('You are not on the member list of this groupchat.');
+/**
+ * Represents a participant in a MUC
+ * @class
+ * @namespace _converse.ChatRoomOccupant
+ * @memberOf _converse
+ */
 
-            this.setDisconnectionMessage(message, reason);
-          } else if (error.querySelector('forbidden')) {
-            const message = __('You have been banned from this groupchat.');
+const ChatRoomOccupant = model_Model.extend({
+  defaults: {
+    'hats': [],
+    'show': 'offline',
+    'states': []
+  },
 
-            this.setDisconnectionMessage(message, reason);
-          }
-        } else if (error_type === 'cancel') {
-          if (error.querySelector('not-allowed')) {
-            const message = __('You are not allowed to create new groupchats.');
-
-            this.setDisconnectionMessage(message, reason);
-          } else if (error.querySelector('not-acceptable')) {
-            const message = __("Your nickname doesn't conform to this groupchat's policies.");
-
-            this.setDisconnectionMessage(message, reason);
-          } else if (converse_muc_sizzle("gone[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), error).length) {
-            var _sizzle$pop2;
-
-            const moved_jid = (_sizzle$pop2 = converse_muc_sizzle("gone[xmlns=\"".concat(converse_muc_Strophe.NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent.replace(/^xmpp:/, '').replace(/\?join$/, '');
-            this.save({
-              moved_jid,
-              'destroyed_reason': reason
-            });
-            this.session.save({
-              'connection_status': converse.ROOMSTATUS.DESTROYED
-            });
-          } else if (error.querySelector('conflict')) {
-            this.onNicknameClash(stanza);
-          } else if (error.querySelector('item-not-found')) {
-            const message = __("This groupchat does not (yet) exist.");
+  initialize(attributes) {
+    this.set(Object.assign({
+      'id': utils_form.getUniqueId()
+    }, attributes));
+    this.on('change:image_hash', this.onAvatarChanged, this);
+  },
 
-            this.setDisconnectionMessage(message, reason);
-          } else if (error.querySelector('service-unavailable')) {
-            const message = __("This groupchat has reached its maximum number of participants.");
+  onAvatarChanged() {
+    const hash = this.get('image_hash');
+    const vcards = [];
 
-            this.setDisconnectionMessage(message, reason);
-          } else if (error.querySelector('remote-server-not-found')) {
-            const message = __("Remote server not found");
+    if (this.get('jid')) {
+      vcards.push(core_converse.vcards.findWhere({
+        'jid': this.get('jid')
+      }));
+    }
 
-            const feedback = reason ? __('The explanation given is: "%1$s".', reason) : undefined;
-            this.setDisconnectionMessage(message, feedback);
-          }
-        }
-      },
+    vcards.push(core_converse.vcards.findWhere({
+      'jid': this.get('from')
+    }));
+    vcards.filter(v => v).forEach(vcard => {
+      if (hash && vcard.get('image_hash') !== hash) {
+        core_api.vcard.update(vcard, true);
+      }
+    });
+  },
 
-      /**
-       * Handles all MUC presence stanzas.
-       * @private
-       * @method _converse.ChatRoom#onPresence
-       * @param { XMLElement } stanza
-       */
-      onPresence(stanza) {
-        if (stanza.getAttribute('type') === 'error') {
-          return this.onErrorPresence(stanza);
-        }
+  getDisplayName() {
+    return this.get('nick') || this.get('jid');
+  },
 
-        this.createInfoMessages(stanza);
+  isMember() {
+    return ['admin', 'owner', 'member'].includes(this.get('affiliation'));
+  },
 
-        if (stanza.querySelector("status[code='110']")) {
-          this.onOwnPresence(stanza);
+  isModerator() {
+    return ['admin', 'owner'].includes(this.get('affiliation')) || this.get('role') === 'moderator';
+  },
 
-          if (this.getOwnRole() !== 'none' && this.session.get('connection_status') === converse.ROOMSTATUS.CONNECTING) {
-            this.session.save('connection_status', converse.ROOMSTATUS.CONNECTED);
-          }
-        } else {
-          this.updateOccupantsOnPresence(stanza);
-        }
-      },
+  isSelf() {
+    return this.get('states').includes('110');
+  }
 
-      /**
-       * Handles a received presence relating to the current user.
-       *
-       * For locked groupchats (which are by definition "new"), the
-       * groupchat will either be auto-configured or created instantly
-       * (with default config) or a configuration groupchat will be
-       * rendered.
-       *
-       * If the groupchat is not locked, then the groupchat will be
-       * auto-configured only if applicable and if the current
-       * user is the groupchat's owner.
-       * @private
-       * @method _converse.ChatRoom#onOwnPresence
-       * @param { XMLElement } pres - The stanza
-       */
-      onOwnPresence(stanza) {
-        if (stanza.getAttribute('type') !== 'unavailable') {
-          const old_status = this.session.get('connection_status');
-
-          if (old_status !== converse.ROOMSTATUS.ENTERED) {
-            // Set connection_status before creating the occupant, but
-            // only trigger afterwards, so that plugins can access the
-            // occupant in their event handlers.
-            this.session.save('connection_status', converse.ROOMSTATUS.ENTERED, {
-              'silent': true
-            });
-            this.updateOccupantsOnPresence(stanza);
-            this.session.trigger('change:connection_status', this.session, old_status);
-          } else {
-            this.updateOccupantsOnPresence(stanza);
-          }
-        } else {
-          this.updateOccupantsOnPresence(stanza);
-        }
+});
+/* harmony default export */ var muc_occupant = (ChatRoomOccupant);
+// CONCATENATED MODULE: ./src/headless/plugins/muc/occupants.js
 
-        if (stanza.getAttribute('type') === 'unavailable') {
-          this.handleDisconnection(stanza);
-        } else {
-          const locked_room = stanza.querySelector("status[code='201']");
-
-          if (locked_room) {
-            if (this.get('auto_configure')) {
-              this.autoConfigureChatRoom().then(() => this.refreshDiscoInfo());
-            } else if (converse_core_api.settings.get('muc_instant_rooms')) {
-              // Accept default configuration
-              this.sendConfiguration().then(() => this.refreshDiscoInfo());
-            } else {
-              /**
-               * Triggered when a new room has been created which first needs to be configured
-               * and when `auto_configure` is set to `false`.
-               * Used by `_converse.ChatRoomView` in order to know when to render the
-               * configuration form for a new room.
-               * @event _converse.ChatRoom#configurationNeeded
-               * @example _converse.api.listen.on('configurationNeeded', () => { ... });
-               */
-              this.trigger('configurationNeeded');
-              return; // We haven't yet entered the groupchat, so bail here.
-            }
-          } else if (!this.features.get('fetched')) {
-            // The features for this groupchat weren't fetched.
-            // That must mean it's a new groupchat without locking
-            // (in which case Prosody doesn't send a 201 status),
-            // otherwise the features would have been fetched in
-            // the "initialize" method already.
-            if (this.getOwnAffiliation() === 'owner' && this.get('auto_configure')) {
-              this.autoConfigureChatRoom().then(() => this.refreshDiscoInfo());
-            } else {
-              this.getDiscoInfo();
-            }
-          }
-        }
 
-        this.session.save({
-          'connection_status': converse.ROOMSTATUS.ENTERED
-        });
-      },
 
-      /**
-       * Returns a boolean to indicate whether the current user
-       * was mentioned in a message.
-       * @private
-       * @method _converse.ChatRoom#isUserMentioned
-       * @param { String } - The text message
-       */
-      isUserMentioned(message) {
-        const nick = this.get('nick');
 
-        if (message.get('references').length) {
-          const mentions = message.get('references').filter(ref => ref.type === 'mention').map(ref => ref.value);
-          return mentions.includes(nick);
-        } else {
-          return new RegExp("\\b".concat(nick, "\\b")).test(message.get('message'));
-        }
-      },
 
-      /* Given a newly received message, update the unread counter if necessary.
-       * @private
-       * @method _converse.ChatRoom#handleUnreadMessage
-       * @param { XMLElement } - The <messsage> stanza
-       */
-      handleUnreadMessage(message) {
-        if (!(message === null || message === void 0 ? void 0 : message.get('body'))) {
-          return;
-        }
+const MUC_ROLE_WEIGHTS = {
+  'moderator': 1,
+  'participant': 2,
+  'visitor': 3,
+  'none': 2
+};
+/**
+ * A list of {@link _converse.ChatRoomOccupant} instances, representing participants in a MUC.
+ * @class
+ * @namespace _converse.ChatRoomOccupants
+ * @memberOf _converse
+ */
 
-        if (utils_form.isNewMessage(message)) {
-          if (this.isHidden()) {
-            const settings = {
-              'num_unread_general': this.get('num_unread_general') + 1
-            };
+const ChatRoomOccupants = Collection.extend({
+  model: muc_occupant,
 
-            if (this.get('num_unread_general') === 0) {
-              settings['first_unread_id'] = message.get('id');
-            }
+  comparator(occupant1, occupant2) {
+    const role1 = occupant1.get('role') || 'none';
+    const role2 = occupant2.get('role') || 'none';
 
-            if (this.isUserMentioned(message)) {
-              settings.num_unread = this.get('num_unread') + 1;
+    if (MUC_ROLE_WEIGHTS[role1] === MUC_ROLE_WEIGHTS[role2]) {
+      const nick1 = occupant1.getDisplayName().toLowerCase();
+      const nick2 = occupant2.getDisplayName().toLowerCase();
+      return nick1 < nick2 ? -1 : nick1 > nick2 ? 1 : 0;
+    } else {
+      return MUC_ROLE_WEIGHTS[role1] < MUC_ROLE_WEIGHTS[role2] ? -1 : 1;
+    }
+  },
 
-              converse_core_converse.incrementMsgCounter();
-            }
+  getAutoFetchedAffiliationLists() {
+    const affs = core_api.settings.get('muc_fetch_members');
+    return Array.isArray(affs) ? affs : affs ? ['member', 'admin', 'owner'] : [];
+  },
 
-            this.save(settings);
-          } else {
-            this.sendMarkerForMessage(message);
-          }
-        }
-      },
+  async fetchMembers() {
+    const affiliations = this.getAutoFetchedAffiliationLists();
 
-      clearUnreadMsgCounter() {
-        if (this.get('num_unread_general') > 0 || this.get('num_unread') > 0) {
-          this.sendMarkerForMessage(this.messages.last());
-        }
+    if (affiliations.length === 0) {
+      return;
+    }
 
-        utils_form.safeSave(this, {
-          'num_unread': 0,
-          'num_unread_general': 0
-        });
+    const aff_lists = await Promise.all(affiliations.map(a => this.chatroom.getAffiliationList(a)));
+    const new_members = aff_lists.reduce((acc, val) => utils_form.isErrorObject(val) ? acc : [...val, ...acc], []);
+    const known_affiliations = affiliations.filter(a => !utils_form.isErrorObject(aff_lists[affiliations.indexOf(a)]));
+    const new_jids = new_members.map(m => m.jid).filter(m => m !== undefined);
+    const new_nicks = new_members.map(m => !m.jid && m.nick || undefined).filter(m => m !== undefined);
+    const removed_members = this.filter(m => {
+      return known_affiliations.includes(m.get('affiliation')) && !new_nicks.includes(m.get('nick')) && !new_jids.includes(m.get('jid'));
+    });
+    removed_members.forEach(occupant => {
+      if (occupant.get('jid') === core_converse.bare_jid) {
+        return;
       }
 
+      if (occupant.get('show') === 'offline') {
+        occupant.destroy();
+      } else {
+        occupant.save('affiliation', null);
+      }
     });
-    /**
-     * Represents a participant in a MUC
-     * @class
-     * @namespace _converse.ChatRoomOccupant
-     * @memberOf _converse
-     */
-
-    converse_core_converse.ChatRoomOccupant = model_Model.extend({
-      defaults: {
-        'hats': [],
-        'show': 'offline',
-        'states': []
-      },
-
-      initialize(attributes) {
-        this.set(Object.assign({
-          'id': utils_form.getUniqueId()
-        }, attributes));
-        this.on('change:image_hash', this.onAvatarChanged, this);
-      },
-
-      onAvatarChanged() {
-        const hash = this.get('image_hash');
-        const vcards = [];
-
-        if (this.get('jid')) {
-          vcards.push(converse_core_converse.vcards.findWhere({
-            'jid': this.get('jid')
-          }));
-        }
-
-        vcards.push(converse_core_converse.vcards.findWhere({
-          'jid': this.get('from')
-        }));
-        vcards.filter(v => v).forEach(vcard => {
-          if (hash && vcard.get('image_hash') !== hash) {
-            converse_core_api.vcard.update(vcard, true);
-          }
-        });
-      },
-
-      getDisplayName() {
-        return this.get('nick') || this.get('jid');
-      },
-
-      isMember() {
-        return ['admin', 'owner', 'member'].includes(this.get('affiliation'));
-      },
-
-      isModerator() {
-        return ['admin', 'owner'].includes(this.get('affiliation')) || this.get('role') === 'moderator';
-      },
+    new_members.forEach(attrs => {
+      const occupant = attrs.jid ? this.findOccupant({
+        'jid': attrs.jid
+      }) : this.findOccupant({
+        'nick': attrs.nick
+      });
 
-      isSelf() {
-        return this.get('states').includes('110');
+      if (occupant) {
+        occupant.save(attrs);
+      } else {
+        this.create(attrs);
       }
-
     });
     /**
-     * A list of {@link _converse.ChatRoomOccupant} instances, representing participants in a MUC.
-     * @class
-     * @namespace _converse.ChatRoomOccupants
-     * @memberOf _converse
+     * Triggered once the member lists for this MUC have been fetched and processed.
+     * @event _converse#membersFetched
+     * @example _converse.api.listen.on('membersFetched', () => { ... });
      */
 
-    converse_core_converse.ChatRoomOccupants = collection_Collection.extend({
-      model: converse_core_converse.ChatRoomOccupant,
-
-      comparator(occupant1, occupant2) {
-        const role1 = occupant1.get('role') || 'none';
-        const role2 = occupant2.get('role') || 'none';
-
-        if (MUC_ROLE_WEIGHTS[role1] === MUC_ROLE_WEIGHTS[role2]) {
-          const nick1 = occupant1.getDisplayName().toLowerCase();
-          const nick2 = occupant2.getDisplayName().toLowerCase();
-          return nick1 < nick2 ? -1 : nick1 > nick2 ? 1 : 0;
-        } else {
-          return MUC_ROLE_WEIGHTS[role1] < MUC_ROLE_WEIGHTS[role2] ? -1 : 1;
-        }
-      },
-
-      getAutoFetchedAffiliationLists() {
-        const affs = converse_core_api.settings.get('muc_fetch_members');
-        return Array.isArray(affs) ? affs : affs ? ['member', 'admin', 'owner'] : [];
-      },
+    core_api.trigger('membersFetched');
+  },
 
-      async fetchMembers() {
-        const affiliations = this.getAutoFetchedAffiliationLists();
+  /**
+   * @typedef { Object} OccupantData
+   * @property { String } [jid]
+   * @property { String } [nick]
+   */
 
-        if (affiliations.length === 0) {
-          return;
-        }
+  /**
+   * Try to find an existing occupant based on the passed in
+   * data object.
+   *
+   * If we have a JID, we use that as lookup variable,
+   * otherwise we use the nick. We don't always have both,
+   * but should have at least one or the other.
+   * @private
+   * @method _converse.ChatRoomOccupants#findOccupant
+   * @param { OccupantData } data
+   */
+  findOccupant(data) {
+    const jid = strophe["e" /* Strophe */].getBareJidFromJid(data.jid);
+    return jid && this.findWhere({
+      jid
+    }) || this.findWhere({
+      'nick': data.nick
+    });
+  }
 
-        const aff_lists = await Promise.all(affiliations.map(a => this.chatroom.getAffiliationList(a)));
-        const new_members = aff_lists.reduce((acc, val) => utils_form.isErrorObject(val) ? acc : [...val, ...acc], []);
-        const known_affiliations = affiliations.filter(a => !utils_form.isErrorObject(aff_lists[affiliations.indexOf(a)]));
-        const new_jids = new_members.map(m => m.jid).filter(m => m !== undefined);
-        const new_nicks = new_members.map(m => !m.jid && m.nick || undefined).filter(m => m !== undefined);
-        const removed_members = this.filter(m => {
-          return known_affiliations.includes(m.get('affiliation')) && !new_nicks.includes(m.get('nick')) && !new_jids.includes(m.get('jid'));
-        });
-        removed_members.forEach(occupant => {
-          if (occupant.get('jid') === converse_core_converse.bare_jid) {
-            return;
-          }
+});
+/* harmony default export */ var occupants = (ChatRoomOccupants);
+// CONCATENATED MODULE: ./src/headless/plugins/muc/api.js
 
-          if (occupant.get('show') === 'offline') {
-            occupant.destroy();
-          } else {
-            occupant.save('affiliation', null);
-          }
-        });
-        new_members.forEach(attrs => {
-          const occupant = attrs.jid ? this.findOccupant({
-            'jid': attrs.jid
-          }) : this.findOccupant({
-            'nick': attrs.nick
-          });
 
-          if (occupant) {
-            occupant.save(attrs);
-          } else {
-            this.create(attrs);
-          }
-        });
-        /**
-         * Triggered once the member lists for this MUC have been fetched and processed.
-         * @event _converse#membersFetched
-         * @example _converse.api.listen.on('membersFetched', () => { ... });
-         */
 
-        converse_core_api.trigger('membersFetched');
-      },
 
-      /**
-       * @typedef { Object} OccupantData
-       * @property { String } [jid]
-       * @property { String } [nick]
-       */
+/* harmony default export */ var muc_api = ({
+  /**
+   * The "rooms" namespace groups methods relevant to chatrooms
+   * (aka groupchats).
+   *
+   * @namespace api.rooms
+   * @memberOf api
+   */
+  rooms: {
+    /**
+     * Creates a new MUC chatroom (aka groupchat)
+     *
+     * Similar to {@link api.rooms.open}, but creates
+     * the chatroom in the background (i.e. doesn't cause a view to open).
+     *
+     * @method api.rooms.create
+     * @param {(string[]|string)} jid|jids The JID or array of
+     *     JIDs of the chatroom(s) to create
+     * @param {object} [attrs] attrs The room attributes
+     * @returns {Promise} Promise which resolves with the Model representing the chat.
+     */
+    create(jids, attrs = {}) {
+      attrs = typeof attrs === 'string' ? {
+        'nick': attrs
+      } : attrs || {};
 
-      /**
-       * Try to find an existing occupant based on the passed in
-       * data object.
-       *
-       * If we have a JID, we use that as lookup variable,
-       * otherwise we use the nick. We don't always have both,
-       * but should have at least one or the other.
-       * @private
-       * @method _converse.ChatRoomOccupants#findOccupant
-       * @param { OccupantData } data
-       */
-      findOccupant(data) {
-        const jid = converse_muc_Strophe.getBareJidFromJid(data.jid);
-        return jid && this.findWhere({
-          jid
-        }) || this.findWhere({
-          'nick': data.nick
-        });
+      if (!attrs.nick && core_api.settings.get('muc_nickname_from_jid')) {
+        attrs.nick = strophe["e" /* Strophe */].getNodeFromJid(core_converse.bare_jid);
       }
 
-    });
-    converse_core_converse.RoomsPanelModel = model_Model.extend({
-      defaults: function defaults() {
-        return {
-          'muc_domain': converse_core_api.settings.get('muc_domain'),
-          'nick': converse_core_converse.getDefaultMUCNickname()
-        };
-      },
-
-      setDomain(jid) {
-        if (!converse_core_api.settings.get('locked_muc_domain')) {
-          this.save('muc_domain', converse_muc_Strophe.getDomainFromJid(jid));
-        }
+      if (jids === undefined) {
+        throw new TypeError('rooms.create: You need to provide at least one JID');
+      } else if (typeof jids === 'string') {
+        return core_api.rooms.get(utils_form.getJIDFromURI(jids), attrs, true);
       }
 
-    });
+      return jids.map(jid => core_api.rooms.get(utils_form.getJIDFromURI(jid), attrs, true));
+    },
+
     /**
-     * A direct MUC invitation to join a groupchat has been received
-     * See XEP-0249: Direct MUC invitations.
-     * @private
-     * @method _converse.ChatRoom#onDirectMUCInvitation
-     * @param { XMLElement } message - The message stanza containing the invitation.
+     * Opens a MUC chatroom (aka groupchat)
+     *
+     * Similar to {@link api.chats.open}, but for groupchats.
+     *
+     * @method api.rooms.open
+     * @param {string} jid The room JID or JIDs (if not specified, all
+     *     currently open rooms will be returned).
+     * @param {string} attrs A map  containing any extra room attributes.
+     * @param {string} [attrs.nick] The current user's nickname for the MUC
+     * @param {boolean} [attrs.auto_configure] A boolean, indicating
+     *     whether the room should be configured automatically or not.
+     *     If set to `true`, then it makes sense to pass in configuration settings.
+     * @param {object} [attrs.roomconfig] A map of configuration settings to be used when the room gets
+     *     configured automatically. Currently it doesn't make sense to specify
+     *     `roomconfig` values if `auto_configure` is set to `false`.
+     *     For a list of configuration values that can be passed in, refer to these values
+     *     in the [XEP-0045 MUC specification](https://xmpp.org/extensions/xep-0045.html#registrar-formtype-owner).
+     *     The values should be named without the `muc#roomconfig_` prefix.
+     * @param {boolean} [attrs.minimized] A boolean, indicating whether the room should be opened minimized or not.
+     * @param {boolean} [attrs.bring_to_foreground] A boolean indicating whether the room should be
+     *     brought to the foreground and therefore replace the currently shown chat.
+     *     If there is no chat currently open, then this option is ineffective.
+     * @param {Boolean} [force=false] - By default, a minimized
+     *   room won't be maximized (in `overlayed` view mode) and in
+     *   `fullscreen` view mode a newly opened room won't replace
+     *   another chat already in the foreground.
+     *   Set `force` to `true` if you want to force the room to be
+     *   maximized or shown.
+     * @returns {Promise} Promise which resolves with the Model representing the chat.
+     *
+     * @example
+     * this.api.rooms.open('group@muc.example.com')
+     *
+     * @example
+     * // To return an array of rooms, provide an array of room JIDs:
+     * api.rooms.open(['group1@muc.example.com', 'group2@muc.example.com'])
+     *
+     * @example
+     * // To setup a custom nickname when joining the room, provide the optional nick argument:
+     * api.rooms.open('group@muc.example.com', {'nick': 'mycustomnick'})
+     *
+     * @example
+     * // For example, opening a room with a specific default configuration:
+     * api.rooms.open(
+     *     'myroom@conference.example.org',
+     *     { 'nick': 'coolguy69',
+     *       'auto_configure': true,
+     *       'roomconfig': {
+     *           'changesubject': false,
+     *           'membersonly': true,
+     *           'persistentroom': true,
+     *           'publicroom': true,
+     *           'roomdesc': 'Comfy room for hanging out',
+     *           'whois': 'anyone'
+     *       }
+     *     }
+     * );
      */
+    async open(jids, attrs = {}, force = false) {
+      await core_api.waitUntil('chatBoxesFetched');
 
-    converse_core_converse.onDirectMUCInvitation = async function (message) {
-      const x_el = converse_muc_sizzle('x[xmlns="jabber:x:conference"]', message).pop(),
-            from = converse_muc_Strophe.getBareJidFromJid(message.getAttribute('from')),
-            room_jid = x_el.getAttribute('jid'),
-            reason = x_el.getAttribute('reason');
-      let result;
-
-      if (converse_core_api.settings.get('auto_join_on_invite')) {
-        result = true;
+      if (jids === undefined) {
+        const err_msg = 'rooms.open: You need to provide at least one JID';
+        headless_log.error(err_msg);
+        throw new TypeError(err_msg);
+      } else if (typeof jids === 'string') {
+        const room = await core_api.rooms.get(jids, attrs, true);
+        room && room.maybeShow(force);
+        return room;
       } else {
-        // Invite request might come from someone not your roster list
-        let contact = converse_core_converse.roster.get(from);
-
-        contact = contact ? contact.getDisplayName() : from;
-
-        if (!reason) {
-          result = confirm(__("%1$s has invited you to join a groupchat: %2$s", contact, room_jid));
-        } else {
-          result = confirm(__('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"', contact, room_jid, reason));
-        }
-      }
-
-      if (result === true) {
-        const chatroom = await openChatRoom(room_jid, {
-          'password': x_el.getAttribute('password')
-        });
-
-        if (chatroom.session.get('connection_status') === converse.ROOMSTATUS.DISCONNECTED) {
-          converse_core_converse.chatboxes.get(room_jid).rejoin();
-        }
+        const rooms = await Promise.all(jids.map(jid => core_api.rooms.get(jid, attrs, true)));
+        rooms.forEach(r => r.maybeShow(force));
+        return rooms;
       }
-    };
-
-    if (converse_core_api.settings.get('allow_muc_invitations')) {
-      const registerDirectInvitationHandler = function registerDirectInvitationHandler() {
-        converse_core_converse.connection.addHandler(message => {
-          converse_core_converse.onDirectMUCInvitation(message);
-
-          return true;
-        }, 'jabber:x:conference', 'message');
-      };
+    },
 
-      converse_core_api.listen.on('connected', registerDirectInvitationHandler);
-      converse_core_api.listen.on('reconnected', registerDirectInvitationHandler);
-    }
-    /* Automatically join groupchats, based on the
-     * "auto_join_rooms" configuration setting, which is an array
-     * of strings (groupchat JIDs) or objects (with groupchat JID and other settings).
+    /**
+     * Fetches the object representing a MUC chatroom (aka groupchat)
+     *
+     * @method api.rooms.get
+     * @param {string} [jid] The room JID (if not specified, all rooms will be returned).
+     * @param {object} [attrs] A map containing any extra room attributes For example, if you want
+     *     to specify a nickname and password, use `{'nick': 'bloodninja', 'password': 'secret'}`.
+     * @param {boolean} create A boolean indicating whether the room should be created
+     *     if not found (default: `false`)
+     * @returns { Promise<_converse.ChatRoom> }
+     * @example
+     * api.waitUntil('roomsAutoJoined').then(() => {
+     *     const create_if_not_found = true;
+     *     api.rooms.get(
+     *         'group@muc.example.com',
+     *         {'nick': 'dread-pirate-roberts'},
+     *         create_if_not_found
+     *     )
+     * });
      */
+    async get(jids, attrs = {}, create = false) {
+      async function _get(jid) {
+        jid = utils_form.getJIDFromURI(jid);
+        let model = await core_api.chatboxes.get(jid);
 
+        if (!model && create) {
+          model = await core_api.chatboxes.create(jid, attrs, core_converse.ChatRoom);
+        } else {
+          model = model && model.get('type') === core_converse.CHATROOMS_TYPE ? model : null;
 
-    async function autoJoinRooms() {
-      await Promise.all(converse_core_api.settings.get('auto_join_rooms').map(muc => {
-        if (typeof muc === 'string') {
-          if (converse_core_converse.chatboxes.where({
-            'jid': muc
-          }).length) {
-            return Promise.resolve();
+          if (model && Object.keys(attrs).length) {
+            model.save(attrs);
           }
-
-          return converse_core_api.rooms.open(muc);
-        } else if (lodash_es_isObject(muc)) {
-          return converse_core_api.rooms.open(muc.jid, converse_muc_objectSpread({}, muc));
-        } else {
-          headless_log.error('Invalid muc criteria specified for "auto_join_rooms"');
-          return Promise.resolve();
         }
-      }));
-      /**
-       * Triggered once any rooms that have been configured to be automatically joined,
-       * specified via the _`auto_join_rooms` setting, have been entered.
-       * @event _converse#roomsAutoJoined
-       * @example _converse.api.listen.on('roomsAutoJoined', () => { ... });
-       * @example _converse.api.waitUntil('roomsAutoJoined').then(() => { ... });
-       */
 
-      converse_core_api.trigger('roomsAutoJoined');
-    }
+        return model;
+      }
 
-    async function onWindowStateChanged(data) {
-      if (data.state === 'visible' && converse_core_api.connection.connected()) {
-        const rooms = await converse_core_api.rooms.get();
-        rooms.forEach(room => room.rejoinIfNecessary());
+      if (jids === undefined) {
+        const chats = await core_api.chatboxes.get();
+        return chats.filter(c => c.get('type') === core_converse.CHATROOMS_TYPE);
+      } else if (typeof jids === 'string') {
+        return _get(jids);
       }
-    }
-    /************************ BEGIN Event Handlers ************************/
 
+      return Promise.all(jids.map(jid => _get(jid)));
+    }
 
-    converse_core_api.listen.on('beforeTearDown', () => {
-      const groupchats = converse_core_converse.chatboxes.where({
-        'type': converse_core_converse.CHATROOMS_TYPE
-      });
+  }
+});
+// CONCATENATED MODULE: ./src/headless/plugins/muc/index.js
+/**
+ * @module converse-muc
+ * @copyright The Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ * @description Implements the non-view logic for XEP-0045 Multi-User Chat
+ */
 
-      groupchats.forEach(muc => utils_form.safeSave(muc.session, {
-        'connection_status': converse.ROOMSTATUS.DISCONNECTED
-      }));
-    });
-    converse_core_api.listen.on('windowStateChanged', onWindowStateChanged);
-    converse_core_api.listen.on('addClientFeatures', () => {
-      if (converse_core_api.settings.get('allow_muc')) {
-        converse_core_api.disco.own.features.add(converse_muc_Strophe.NS.MUC);
-      }
 
-      if (converse_core_api.settings.get('allow_muc_invitations')) {
-        converse_core_api.disco.own.features.add('jabber:x:conference'); // Invites
-      }
-    });
-    converse_core_api.listen.on('chatBoxesFetched', autoJoinRooms);
-    converse_core_api.listen.on('beforeResourceBinding', () => {
-      converse_core_converse.connection.addHandler(stanza => {
-        const muc_jid = converse_muc_Strophe.getBareJidFromJid(stanza.getAttribute('from'));
 
-        if (!converse_core_converse.chatboxes.get(muc_jid)) {
-          converse_core_api.waitUntil('chatBoxesFetched').then(async () => {
-            const muc = converse_core_converse.chatboxes.get(muc_jid);
 
-            if (muc) {
-              await muc.initialized;
-              await muc.messages.fetched;
-              muc.message_handler.run(stanza);
-            }
-          });
-        }
 
-        return true;
-      }, null, 'message', 'groupchat');
-    });
 
-    function disconnectChatRooms() {
-      /* When disconnecting, mark all groupchats as
-       * disconnected, so that they will be properly entered again
-       * when fetched from session storage.
-       */
-      return converse_core_converse.chatboxes.filter(m => m.get('type') === converse_core_converse.CHATROOMS_TYPE).forEach(m => m.session.save({
-        'connection_status': converse.ROOMSTATUS.DISCONNECTED
-      }));
-    }
 
-    converse_core_api.listen.on('disconnected', disconnectChatRooms);
-    converse_core_api.listen.on('statusInitialized', () => {
-      window.addEventListener(converse_core_converse.unloadevent, () => {
-        const using_websocket = converse_core_api.connection.isType('websocket');
 
-        if (using_websocket && (!converse_core_api.settings.get('enable_smacks') || !converse_core_converse.session.get('smacks_stream_id'))) {
-          // For non-SMACKS websocket connections, or non-resumeable
-          // connections, we disconnect all chatrooms when the page unloads.
-          // See issue #1111
-          disconnectChatRooms();
-        }
-      });
-    });
-    /************************ END Event Handlers ************************/
 
-    /************************ BEGIN API ************************/
 
-    converse.env.muc_utils = utils_muc; // We extend the default converse.js API to add methods specific to MUC groupchats.
 
-    Object.assign(converse_core_api, {
-      /**
-       * The "rooms" namespace groups methods relevant to chatrooms
-       * (aka groupchats).
-       *
-       * @namespace api.rooms
-       * @memberOf api
-       */
-      rooms: {
-        /**
-         * Creates a new MUC chatroom (aka groupchat)
-         *
-         * Similar to {@link api.rooms.open}, but creates
-         * the chatroom in the background (i.e. doesn't cause a view to open).
-         *
-         * @method api.rooms.create
-         * @param {(string[]|string)} jid|jids The JID or array of
-         *     JIDs of the chatroom(s) to create
-         * @param {object} [attrs] attrs The room attributes
-         * @returns {Promise} Promise which resolves with the Model representing the chat.
-         */
-        create(jids, attrs = {}) {
-          attrs = typeof attrs === 'string' ? {
-            'nick': attrs
-          } : attrs || {};
 
-          if (!attrs.nick && converse_core_api.settings.get('muc_nickname_from_jid')) {
-            attrs.nick = converse_muc_Strophe.getNodeFromJid(converse_core_converse.bare_jid);
-          }
 
-          if (jids === undefined) {
-            throw new TypeError('rooms.create: You need to provide at least one JID');
-          } else if (typeof jids === 'string') {
-            return converse_core_api.rooms.get(utils_form.getJIDFromURI(jids), attrs, true);
-          }
 
-          return jids.map(jid => converse_core_api.rooms.get(utils_form.getJIDFromURI(jid), attrs, true));
-        },
 
-        /**
-         * Opens a MUC chatroom (aka groupchat)
-         *
-         * Similar to {@link api.chats.open}, but for groupchats.
-         *
-         * @method api.rooms.open
-         * @param {string} jid The room JID or JIDs (if not specified, all
-         *     currently open rooms will be returned).
-         * @param {string} attrs A map  containing any extra room attributes.
-         * @param {string} [attrs.nick] The current user's nickname for the MUC
-         * @param {boolean} [attrs.auto_configure] A boolean, indicating
-         *     whether the room should be configured automatically or not.
-         *     If set to `true`, then it makes sense to pass in configuration settings.
-         * @param {object} [attrs.roomconfig] A map of configuration settings to be used when the room gets
-         *     configured automatically. Currently it doesn't make sense to specify
-         *     `roomconfig` values if `auto_configure` is set to `false`.
-         *     For a list of configuration values that can be passed in, refer to these values
-         *     in the [XEP-0045 MUC specification](https://xmpp.org/extensions/xep-0045.html#registrar-formtype-owner).
-         *     The values should be named without the `muc#roomconfig_` prefix.
-         * @param {boolean} [attrs.minimized] A boolean, indicating whether the room should be opened minimized or not.
-         * @param {boolean} [attrs.bring_to_foreground] A boolean indicating whether the room should be
-         *     brought to the foreground and therefore replace the currently shown chat.
-         *     If there is no chat currently open, then this option is ineffective.
-         * @param {Boolean} [force=false] - By default, a minimized
-         *   room won't be maximized (in `overlayed` view mode) and in
-         *   `fullscreen` view mode a newly opened room won't replace
-         *   another chat already in the foreground.
-         *   Set `force` to `true` if you want to force the room to be
-         *   maximized or shown.
-         * @returns {Promise} Promise which resolves with the Model representing the chat.
-         *
-         * @example
-         * this.api.rooms.open('group@muc.example.com')
-         *
-         * @example
-         * // To return an array of rooms, provide an array of room JIDs:
-         * api.rooms.open(['group1@muc.example.com', 'group2@muc.example.com'])
-         *
-         * @example
-         * // To setup a custom nickname when joining the room, provide the optional nick argument:
-         * api.rooms.open('group@muc.example.com', {'nick': 'mycustomnick'})
-         *
-         * @example
-         * // For example, opening a room with a specific default configuration:
-         * api.rooms.open(
-         *     'myroom@conference.example.org',
-         *     { 'nick': 'coolguy69',
-         *       'auto_configure': true,
-         *       'roomconfig': {
-         *           'changesubject': false,
-         *           'membersonly': true,
-         *           'persistentroom': true,
-         *           'publicroom': true,
-         *           'roomdesc': 'Comfy room for hanging out',
-         *           'whois': 'anyone'
-         *       }
-         *     }
-         * );
-         */
-        async open(jids, attrs, force = false) {
-          await converse_core_api.waitUntil('chatBoxesFetched');
+const ROLES = ['moderator', 'participant', 'visitor'];
+const AFFILIATIONS = ['owner', 'admin', 'member', 'outcast', 'none'];
+converse.AFFILIATION_CHANGES = {
+  OWNER: 'owner',
+  ADMIN: 'admin',
+  MEMBER: 'member',
+  EXADMIN: 'exadmin',
+  EXOWNER: 'exowner',
+  EXOUTCAST: 'exoutcast',
+  EXMEMBER: 'exmember'
+};
+converse.AFFILIATION_CHANGES_LIST = Object.values(converse.AFFILIATION_CHANGES);
+converse.MUC_TRAFFIC_STATES = {
+  ENTERED: 'entered',
+  EXITED: 'exited'
+};
+converse.MUC_TRAFFIC_STATES_LIST = Object.values(converse.MUC_TRAFFIC_STATES);
+converse.MUC_ROLE_CHANGES = {
+  OP: 'op',
+  DEOP: 'deop',
+  VOICE: 'voice',
+  MUTE: 'mute'
+};
+converse.MUC_ROLE_CHANGES_LIST = Object.values(converse.MUC_ROLE_CHANGES);
+converse.MUC_INFO_CODES = {
+  'visibility_changes': ['100', '102', '103', '172', '173', '174'],
+  'self': ['110'],
+  'non_privacy_changes': ['104', '201'],
+  'muc_logging_changes': ['170', '171'],
+  'nickname_changes': ['210', '303'],
+  'disconnect_messages': ['301', '307', '321', '322', '332', '333'],
+  'affiliation_changes': [...converse.AFFILIATION_CHANGES_LIST],
+  'join_leave_events': [...converse.MUC_TRAFFIC_STATES_LIST],
+  'role_changes': [...converse.MUC_ROLE_CHANGES_LIST]
+};
+const {
+  Strophe: plugins_muc_Strophe,
+  sizzle: plugins_muc_sizzle
+} = converse.env; // Add Strophe Namespaces
 
-          if (jids === undefined) {
-            const err_msg = 'rooms.open: You need to provide at least one JID';
-            headless_log.error(err_msg);
-            throw new TypeError(err_msg);
-          } else if (typeof jids === 'string') {
-            const room = await converse_core_api.rooms.get(jids, attrs, true);
-            room && room.maybeShow(force);
-            return room;
-          } else {
-            const rooms = await Promise.all(jids.map(jid => converse_core_api.rooms.get(jid, attrs, true)));
-            rooms.forEach(r => r.maybeShow(force));
-            return rooms;
-          }
-        },
+plugins_muc_Strophe.addNamespace('MUC_ADMIN', plugins_muc_Strophe.NS.MUC + '#admin');
+plugins_muc_Strophe.addNamespace('MUC_OWNER', plugins_muc_Strophe.NS.MUC + '#owner');
+plugins_muc_Strophe.addNamespace('MUC_REGISTER', 'jabber:iq:register');
+plugins_muc_Strophe.addNamespace('MUC_ROOMCONF', plugins_muc_Strophe.NS.MUC + '#roomconfig');
+plugins_muc_Strophe.addNamespace('MUC_USER', plugins_muc_Strophe.NS.MUC + '#user');
+plugins_muc_Strophe.addNamespace('MUC_HATS', 'xmpp:prosody.im/protocol/hats:1');
+converse.MUC_NICK_CHANGED_CODE = '303';
+converse.ROOM_FEATURES = ['passwordprotected', 'unsecured', 'hidden', 'publicroom', 'membersonly', 'open', 'persistent', 'temporary', 'nonanonymous', 'semianonymous', 'moderated', 'unmoderated', 'mam_enabled']; // No longer used in code, but useful as reference.
+//
+// const ROOM_FEATURES_MAP = {
+//     'passwordprotected': 'unsecured',
+//     'unsecured': 'passwordprotected',
+//     'hidden': 'publicroom',
+//     'publicroom': 'hidden',
+//     'membersonly': 'open',
+//     'open': 'membersonly',
+//     'persistent': 'temporary',
+//     'temporary': 'persistent',
+//     'nonanonymous': 'semianonymous',
+//     'semianonymous': 'nonanonymous',
+//     'moderated': 'unmoderated',
+//     'unmoderated': 'moderated'
+// };
 
-        /**
-         * Fetches the object representing a MUC chatroom (aka groupchat)
-         *
-         * @method api.rooms.get
-         * @param {string} [jid] The room JID (if not specified, all rooms will be returned).
-         * @param {object} [attrs] A map containing any extra room attributes For example, if you want
-         *     to specify a nickname and password, use `{'nick': 'bloodninja', 'password': 'secret'}`.
-         * @param {boolean} create A boolean indicating whether the room should be created
-         *     if not found (default: `false`)
-         * @returns { Promise<_converse.ChatRoom> }
-         * @example
-         * api.waitUntil('roomsAutoJoined').then(() => {
-         *     const create_if_not_found = true;
-         *     api.rooms.get(
-         *         'group@muc.example.com',
-         *         {'nick': 'dread-pirate-roberts'},
-         *         create_if_not_found
-         *     )
-         * });
-         */
-        async get(jids, attrs = {}, create = false) {
-          async function _get(jid) {
-            jid = utils_form.getJIDFromURI(jid);
-            let model = await converse_core_api.chatboxes.get(jid);
+converse.ROOMSTATUS = {
+  CONNECTED: 0,
+  CONNECTING: 1,
+  NICKNAME_REQUIRED: 2,
+  PASSWORD_REQUIRED: 3,
+  DISCONNECTED: 4,
+  ENTERED: 5,
+  DESTROYED: 6
+};
 
-            if (!model && create) {
-              model = await converse_core_api.chatboxes.create(jid, attrs, converse_core_converse.ChatRoom);
-            } else {
-              model = model && model.get('type') === converse_core_converse.CHATROOMS_TYPE ? model : null;
+function disconnectChatRooms() {
+  /* When disconnecting, mark all groupchats as
+   * disconnected, so that they will be properly entered again
+   * when fetched from session storage.
+   */
+  return core_converse.chatboxes.filter(m => m.get('type') === core_converse.CHATROOMS_TYPE).forEach(m => m.session.save({
+    'connection_status': converse.ROOMSTATUS.DISCONNECTED
+  }));
+}
 
-              if (model && Object.keys(attrs).length) {
-                model.save(attrs);
-              }
-            }
+async function muc_onWindowStateChanged(data) {
+  if (data.state === 'visible' && core_api.connection.connected()) {
+    const rooms = await core_api.rooms.get();
+    rooms.forEach(room => room.rejoinIfNecessary());
+  }
+}
 
-            return model;
-          }
+async function routeToRoom(jid) {
+  if (!utils_form.isValidMUCJID(jid)) {
+    return headless_log.warn("invalid jid \"".concat(jid, "\" provided in url fragment"));
+  }
 
-          if (jids === undefined) {
-            const chats = await converse_core_api.chatboxes.get();
-            return chats.filter(c => c.get('type') === converse_core_converse.CHATROOMS_TYPE);
-          } else if (typeof jids === 'string') {
-            return _get(jids);
-          }
+  await core_api.waitUntil('roomsAutoJoined');
 
-          return Promise.all(jids.map(jid => _get(jid)));
+  if (core_api.settings.get('allow_bookmarks')) {
+    await core_api.waitUntil('bookmarksInitialized');
+  }
+
+  core_api.rooms.open(jid);
+}
+/* Opens a groupchat, making sure that certain attributes
+ * are correct, for example that the "type" is set to
+ * "chatroom".
+ */
+
+
+async function openChatRoom(jid, settings) {
+  settings.type = core_converse.CHATROOMS_TYPE;
+  settings.id = jid;
+  const chatbox = await core_api.rooms.get(jid, settings, true);
+  chatbox.maybeShow(true);
+  return chatbox;
+}
+/* Automatically join groupchats, based on the
+ * "auto_join_rooms" configuration setting, which is an array
+ * of strings (groupchat JIDs) or objects (with groupchat JID and other settings).
+ */
+
+
+async function autoJoinRooms() {
+  await Promise.all(core_api.settings.get('auto_join_rooms').map(muc => {
+    if (typeof muc === 'string') {
+      if (core_converse.chatboxes.where({
+        'jid': muc
+      }).length) {
+        return Promise.resolve();
+      }
+
+      return core_api.rooms.open(muc);
+    } else if (lodash_es_isObject(muc)) {
+      return core_api.rooms.open(muc.jid, { ...muc
+      });
+    } else {
+      headless_log.error('Invalid muc criteria specified for "auto_join_rooms"');
+      return Promise.resolve();
+    }
+  }));
+  /**
+   * Triggered once any rooms that have been configured to be automatically joined,
+   * specified via the _`auto_join_rooms` setting, have been entered.
+   * @event _converse#roomsAutoJoined
+   * @example _converse.api.listen.on('roomsAutoJoined', () => { ... });
+   * @example _converse.api.waitUntil('roomsAutoJoined').then(() => { ... });
+   */
+
+  core_api.trigger('roomsAutoJoined');
+}
+
+converse.plugins.add('converse-muc', {
+  /* Optional dependencies are other plugins which might be
+   * overridden or relied upon, and therefore need to be loaded before
+   * this plugin. They are called "optional" because they might not be
+   * available, in which case any overrides applicable to them will be
+   * ignored.
+   *
+   * It's possible however to make optional dependencies non-optional.
+   * If the setting "strict_plugin_dependencies" is set to true,
+   * an error will be raised if the plugin is not found.
+   *
+   * NB: These plugins need to have already been loaded via require.js.
+   */
+  dependencies: ['converse-chatboxes', 'converse-chat', 'converse-disco', 'converse-controlbox'],
+  overrides: {
+    ChatBoxes: {
+      model(attrs, options) {
+        const {
+          _converse
+        } = this.__super__;
+
+        if (attrs && attrs.type == _converse.CHATROOMS_TYPE) {
+          return new _converse.ChatRoom(attrs, options);
+        } else {
+          return this.__super__.model.apply(this, arguments);
         }
+      }
 
+    }
+  },
+
+  initialize() {
+    /* The initialize function gets called as soon as the plugin is
+     * loaded by converse.js's plugin machinery.
+     */
+    const {
+      __,
+      ___
+    } = core_converse; // Configuration values for this plugin
+    // ====================================
+    // Refer to docs/source/configuration.rst for explanations of these
+    // configuration settings.
+
+    core_api.settings.extend({
+      'allow_muc': true,
+      'allow_muc_invitations': true,
+      'auto_join_on_invite': false,
+      'auto_join_rooms': [],
+      'auto_register_muc_nickname': false,
+      'hide_muc_participants': false,
+      'locked_muc_domain': false,
+      'muc_domain': undefined,
+      'muc_fetch_members': true,
+      'muc_history_max_stanzas': undefined,
+      'muc_instant_rooms': true,
+      'muc_nickname_from_jid': false,
+      'muc_send_probes': false,
+      'muc_show_info_messages': [...converse.MUC_INFO_CODES.visibility_changes, ...converse.MUC_INFO_CODES.self, ...converse.MUC_INFO_CODES.non_privacy_changes, ...converse.MUC_INFO_CODES.muc_logging_changes, ...converse.MUC_INFO_CODES.nickname_changes, ...converse.MUC_INFO_CODES.disconnect_messages, ...converse.MUC_INFO_CODES.affiliation_changes, ...converse.MUC_INFO_CODES.join_leave_events, ...converse.MUC_INFO_CODES.role_changes],
+      'muc_show_logs_before_join': false
+    });
+    core_api.promises.add(['roomsAutoJoined']);
+
+    if (core_api.settings.get('locked_muc_domain') && typeof core_api.settings.get('muc_domain') !== 'string') {
+      throw new Error('Config Error: it makes no sense to set locked_muc_domain ' + 'to true when muc_domain is not set');
+    }
+
+    converse.env.muc_utils = utils_muc;
+    Object.assign(core_api, muc_api);
+    /* https://xmpp.org/extensions/xep-0045.html
+     * ----------------------------------------
+     * 100 message      Entering a groupchat         Inform user that any occupant is allowed to see the user's full JID
+     * 101 message (out of band)                     Affiliation change  Inform user that his or her affiliation changed while not in the groupchat
+     * 102 message      Configuration change         Inform occupants that groupchat now shows unavailable members
+     * 103 message      Configuration change         Inform occupants that groupchat now does not show unavailable members
+     * 104 message      Configuration change         Inform occupants that a non-privacy-related groupchat configuration change has occurred
+     * 110 presence     Any groupchat presence       Inform user that presence refers to one of its own groupchat occupants
+     * 170 message or initial presence               Configuration change    Inform occupants that groupchat logging is now enabled
+     * 171 message      Configuration change         Inform occupants that groupchat logging is now disabled
+     * 172 message      Configuration change         Inform occupants that the groupchat is now non-anonymous
+     * 173 message      Configuration change         Inform occupants that the groupchat is now semi-anonymous
+     * 174 message      Configuration change         Inform occupants that the groupchat is now fully-anonymous
+     * 201 presence     Entering a groupchat         Inform user that a new groupchat has been created
+     * 210 presence     Entering a groupchat         Inform user that the service has assigned or modified the occupant's roomnick
+     * 301 presence     Removal from groupchat       Inform user that he or she has been banned from the groupchat
+     * 303 presence     Exiting a groupchat          Inform all occupants of new groupchat nickname
+     * 307 presence     Removal from groupchat       Inform user that he or she has been kicked from the groupchat
+     * 321 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because of an affiliation change
+     * 322 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because the groupchat has been changed to members-only and the user is not a member
+     * 332 presence     Removal from groupchat       Inform user that he or she is being removed from the groupchat because of a system shutdown
+     */
+
+    core_converse.muc = {
+      info_messages: {
+        100: __('This groupchat is not anonymous'),
+        102: __('This groupchat now shows unavailable members'),
+        103: __('This groupchat does not show unavailable members'),
+        104: __('The groupchat configuration has changed'),
+        170: __('Groupchat logging is now enabled'),
+        171: __('Groupchat logging is now disabled'),
+        172: __('This groupchat is now no longer anonymous'),
+        173: __('This groupchat is now semi-anonymous'),
+        174: __('This groupchat is now fully-anonymous'),
+        201: __('A new groupchat has been created')
+      },
+      new_nickname_messages: {
+        // XXX: Note the triple underscore function and not double underscore.
+        210: ___('Your nickname has been automatically set to %1$s'),
+        303: ___('Your nickname has been changed to %1$s')
+      },
+      disconnect_messages: {
+        301: __('You have been banned from this groupchat'),
+        333: __('You have exited this groupchat due to a technical problem'),
+        307: __('You have been kicked from this groupchat'),
+        321: __('You have been removed from this groupchat because of an affiliation change'),
+        322: __("You have been removed from this groupchat because the groupchat has changed to members-only and you're not a member"),
+        332: __('You have been removed from this groupchat because the service hosting it is being shut down')
+      }
+    };
+    /**
+     * Determines info message visibility based on
+     * muc_show_info_messages configuration setting
+     * @param {*} code
+     * @memberOf _converse
+     */
+
+    core_converse.isInfoVisible = function (code) {
+      const info_messages = core_api.settings.get('muc_show_info_messages');
+
+      if (info_messages.includes(code)) {
+        return true;
       }
+
+      return false;
+    };
+
+    core_converse.router.route('converse/room?jid=:jid', routeToRoom);
+
+    core_converse.ChatRoom = core_converse.ChatBox.extend(muc_muc);
+    core_converse.ChatRoomMessage = core_converse.Message.extend(muc_message);
+    core_converse.ChatRoomOccupants = occupants;
+    core_converse.ChatRoomOccupant = muc_occupant;
+
+    core_converse.getDefaultMUCNickname = function () {
+      // XXX: if anything changes here, update the docs for the
+      // locked_muc_nickname setting.
+      if (!core_converse.xmppstatus) {
+        throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired.");
+      }
+
+      const nick = core_converse.xmppstatus.getNickname();
+
+      if (nick) {
+        return nick;
+      } else if (core_api.settings.get('muc_nickname_from_jid')) {
+        return plugins_muc_Strophe.unescapeNode(plugins_muc_Strophe.getNodeFromJid(core_converse.bare_jid));
+      }
+    };
+    /**
+     * Collection which stores MUC messages
+     * @class
+     * @namespace _converse.ChatRoomMessages
+     * @memberOf _converse
+     */
+
+
+    core_converse.ChatRoomMessages = Collection.extend({
+      model: core_converse.ChatRoomMessage,
+      comparator: 'time'
+    });
+    core_converse.RoomsPanelModel = model_Model.extend({
+      defaults: function () {
+        return {
+          'muc_domain': core_api.settings.get('muc_domain'),
+          'nick': core_converse.getDefaultMUCNickname()
+        };
+      },
+
+      setDomain(jid) {
+        if (!core_api.settings.get('locked_muc_domain')) {
+          this.save('muc_domain', plugins_muc_Strophe.getDomainFromJid(jid));
+        }
+      }
+
+    });
+    /**
+     * A direct MUC invitation to join a groupchat has been received
+     * See XEP-0249: Direct MUC invitations.
+     * @private
+     * @method _converse.ChatRoom#onDirectMUCInvitation
+     * @param { XMLElement } message - The message stanza containing the invitation.
+     */
+
+    core_converse.onDirectMUCInvitation = async function (message) {
+      const x_el = plugins_muc_sizzle('x[xmlns="jabber:x:conference"]', message).pop(),
+            from = plugins_muc_Strophe.getBareJidFromJid(message.getAttribute('from')),
+            room_jid = x_el.getAttribute('jid'),
+            reason = x_el.getAttribute('reason');
+      let result;
+
+      if (core_api.settings.get('auto_join_on_invite')) {
+        result = true;
+      } else {
+        // Invite request might come from someone not your roster list
+        let contact = core_converse.roster.get(from);
+
+        contact = contact ? contact.getDisplayName() : from;
+
+        if (!reason) {
+          result = confirm(__('%1$s has invited you to join a groupchat: %2$s', contact, room_jid));
+        } else {
+          result = confirm(__('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"', contact, room_jid, reason));
+        }
+      }
+
+      if (result === true) {
+        const chatroom = await openChatRoom(room_jid, {
+          'password': x_el.getAttribute('password')
+        });
+
+        if (chatroom.session.get('connection_status') === converse.ROOMSTATUS.DISCONNECTED) {
+          core_converse.chatboxes.get(room_jid).rejoin();
+        }
+      }
+    };
+
+    if (core_api.settings.get('allow_muc_invitations')) {
+      const registerDirectInvitationHandler = function () {
+        core_converse.connection.addHandler(message => {
+          core_converse.onDirectMUCInvitation(message);
+
+          return true;
+        }, 'jabber:x:conference', 'message');
+      };
+
+      core_api.listen.on('connected', registerDirectInvitationHandler);
+      core_api.listen.on('reconnected', registerDirectInvitationHandler);
+    }
+    /************************ BEGIN Event Handlers ************************/
+
+
+    core_api.listen.on('beforeTearDown', () => {
+      const groupchats = core_converse.chatboxes.where({
+        'type': core_converse.CHATROOMS_TYPE
+      });
+
+      groupchats.forEach(muc => utils_form.safeSave(muc.session, {
+        'connection_status': converse.ROOMSTATUS.DISCONNECTED
+      }));
+    });
+    core_api.listen.on('windowStateChanged', muc_onWindowStateChanged);
+    core_api.listen.on('addClientFeatures', () => {
+      if (core_api.settings.get('allow_muc')) {
+        core_api.disco.own.features.add(plugins_muc_Strophe.NS.MUC);
+      }
+
+      if (core_api.settings.get('allow_muc_invitations')) {
+        core_api.disco.own.features.add('jabber:x:conference'); // Invites
+      }
+    });
+    core_api.listen.on('chatBoxesFetched', autoJoinRooms);
+    core_api.listen.on('beforeResourceBinding', () => {
+      core_converse.connection.addHandler(stanza => {
+        const muc_jid = plugins_muc_Strophe.getBareJidFromJid(stanza.getAttribute('from'));
+
+        if (!core_converse.chatboxes.get(muc_jid)) {
+          core_api.waitUntil('chatBoxesFetched').then(async () => {
+            const muc = core_converse.chatboxes.get(muc_jid);
+
+            if (muc) {
+              await muc.initialized;
+              muc.message_handler.run(stanza);
+            }
+          });
+        }
+
+        return true;
+      }, null, 'message', 'groupchat');
+    });
+    core_api.listen.on('disconnected', disconnectChatRooms);
+    core_api.listen.on('statusInitialized', () => {
+      window.addEventListener(core_converse.unloadevent, () => {
+        const using_websocket = core_api.connection.isType('websocket');
+
+        if (using_websocket && (!core_api.settings.get('enable_smacks') || !core_converse.session.get('smacks_stream_id'))) {
+          // For non-SMACKS websocket connections, or non-resumeable
+          // connections, we disconnect all chatrooms when the page unloads.
+          // See issue #1111
+          disconnectChatRooms();
+        }
+      });
     });
-    /************************ END API ************************/
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-bookmarks.js
+// CONCATENATED MODULE: ./src/headless/plugins/bookmarks.js
 /**
  * @module converse-bookmarks
  * @description
@@ -79834,11 +83849,21 @@ converse.plugins.add('converse-muc', {
 
 
 const {
-  Strophe: converse_bookmarks_Strophe,
-  $iq: converse_bookmarks_$iq,
-  sizzle: converse_bookmarks_sizzle
+  Strophe: bookmarks_Strophe,
+  $iq: bookmarks_$iq,
+  sizzle: bookmarks_sizzle
 } = converse.env;
-const converse_bookmarks_u = converse.env.utils;
+const bookmarks_u = converse.env.utils;
+bookmarks_Strophe.addNamespace('BOOKMARKS', 'storage:bookmarks');
+
+function handleBookmarksPush(message) {
+  if (bookmarks_sizzle("event[xmlns=\"".concat(bookmarks_Strophe.NS.PUBSUB, "#event\"] items[node=\"").concat(bookmarks_Strophe.NS.BOOKMARKS, "\"]"), message).length) {
+    core_api.waitUntil('bookmarksInitialized').then(() => core_converse.bookmarks.createBookmarksFromStanza(message)).catch(e => headless_log.fatal(e));
+  }
+
+  return true;
+}
+
 converse.plugins.add('converse-bookmarks', {
   /* Plugin dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -79893,17 +83918,17 @@ converse.plugins.add('converse-bookmarks', {
      */
     const {
       __
-    } = converse_core_converse; // Configuration values for this plugin
+    } = core_converse; // Configuration values for this plugin
     // ====================================
     // Refer to docs/source/configuration.rst for explanations of these
     // configuration settings.
 
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       allow_bookmarks: true,
       allow_public_bookmarks: false,
       muc_respect_autojoin: true
     });
-    converse_core_api.promises.add('bookmarksInitialized');
+    core_api.promises.add('bookmarksInitialized');
     /**
       * Check if the user has a bookmark with a saved nickanme
       * for this groupchat and return it.
@@ -79911,12 +83936,12 @@ converse.plugins.add('converse-bookmarks', {
       * @method _converse#getNicknameFromBookmark
       */
 
-    converse_core_converse.getNicknameFromBookmark = function (jid) {
-      if (!converse_core_converse.bookmarks || !converse_core_api.settings.get('allow_bookmarks')) {
+    core_converse.getNicknameFromBookmark = function (jid) {
+      if (!core_converse.bookmarks || !core_api.settings.get('allow_bookmarks')) {
         return null;
       }
 
-      const bookmark = converse_core_converse.bookmarks.findWhere({
+      const bookmark = core_converse.bookmarks.findWhere({
         'jid': jid
       });
 
@@ -79925,28 +83950,30 @@ converse.plugins.add('converse-bookmarks', {
       }
     };
 
-    converse_core_converse.Bookmark = model_Model.extend({
+    core_converse.Bookmark = model_Model.extend({
+      idAttribute: 'jid',
+
       getDisplayName() {
-        return converse_bookmarks_Strophe.xmlunescape(this.get('name'));
+        return bookmarks_Strophe.xmlunescape(this.get('name'));
       }
 
     });
-    converse_core_converse.Bookmarks = collection_Collection.extend({
-      model: converse_core_converse.Bookmark,
+    core_converse.Bookmarks = Collection.extend({
+      model: core_converse.Bookmark,
       comparator: item => item.get('name').toLowerCase(),
 
       initialize() {
         this.on('add', bm => this.openBookmarkedRoom(bm).then(bm => this.markRoomAsBookmarked(bm)).catch(e => headless_log.fatal(e)));
         this.on('remove', this.markRoomAsUnbookmarked, this);
         this.on('remove', this.sendBookmarkStanza, this);
-        const cache_key = "converse.room-bookmarks".concat(converse_core_converse.bare_jid);
+        const cache_key = "converse.room-bookmarks".concat(core_converse.bare_jid);
         this.fetched_flag = cache_key + 'fetched';
-        this.browserStorage = converse_core_converse.createStore(cache_key);
+        this.browserStorage = core_converse.createStore(cache_key);
       },
 
       async openBookmarkedRoom(bookmark) {
-        if (converse_core_api.settings.get('muc_respect_autojoin') && bookmark.get('autojoin')) {
-          const groupchat = await converse_core_api.rooms.create(bookmark.get('jid'), {
+        if (core_api.settings.get('muc_respect_autojoin') && bookmark.get('autojoin')) {
+          const groupchat = await core_api.rooms.create(bookmark.get('jid'), {
             'nick': bookmark.get('nick')
           });
           groupchat.maybeShow();
@@ -79956,7 +83983,7 @@ converse.plugins.add('converse-bookmarks', {
       },
 
       fetchBookmarks() {
-        const deferred = converse_bookmarks_u.getResolveablePromise();
+        const deferred = bookmarks_u.getResolveablePromise();
 
         if (window.sessionStorage.getItem(this.fetched_flag)) {
           this.fetch({
@@ -79976,17 +84003,17 @@ converse.plugins.add('converse-bookmarks', {
       },
 
       sendBookmarkStanza() {
-        const stanza = converse_bookmarks_$iq({
+        const stanza = bookmarks_$iq({
           'type': 'set',
-          'from': converse_core_converse.connection.jid
+          'from': core_converse.connection.jid
         }).c('pubsub', {
-          'xmlns': converse_bookmarks_Strophe.NS.PUBSUB
+          'xmlns': bookmarks_Strophe.NS.PUBSUB
         }).c('publish', {
-          'node': 'storage:bookmarks'
+          'node': bookmarks_Strophe.NS.BOOKMARKS
         }).c('item', {
           'id': 'current'
         }).c('storage', {
-          'xmlns': 'storage:bookmarks'
+          'xmlns': bookmarks_Strophe.NS.BOOKMARKS
         });
         this.forEach(model => {
           stanza.c('conference', {
@@ -79997,7 +84024,7 @@ converse.plugins.add('converse-bookmarks', {
         });
         stanza.up().up().up();
         stanza.c('publish-options').c('x', {
-          'xmlns': converse_bookmarks_Strophe.NS.XFORM,
+          'xmlns': bookmarks_Strophe.NS.XFORM,
           'type': 'submit'
         }).c('field', {
           'var': 'FORM_TYPE',
@@ -80007,32 +84034,32 @@ converse.plugins.add('converse-bookmarks', {
         }).c('value').t('true').up().up().c('field', {
           'var': 'pubsub#access_model'
         }).c('value').t('whitelist');
-        return converse_core_api.sendIQ(stanza);
+        return core_api.sendIQ(stanza);
       },
 
       onBookmarkError(iq, options) {
         headless_log.error("Error while trying to add bookmark");
         headless_log.error(iq);
-        converse_core_api.alert('error', __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]);
+        core_api.alert('error', __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]);
         this.findWhere({
           'jid': options.jid
         }).destroy();
       },
 
       fetchBookmarksFromServer(deferred) {
-        const stanza = converse_bookmarks_$iq({
-          'from': converse_core_converse.connection.jid,
+        const stanza = bookmarks_$iq({
+          'from': core_converse.connection.jid,
           'type': 'get'
         }).c('pubsub', {
-          'xmlns': converse_bookmarks_Strophe.NS.PUBSUB
+          'xmlns': bookmarks_Strophe.NS.PUBSUB
         }).c('items', {
-          'node': 'storage:bookmarks'
+          'node': bookmarks_Strophe.NS.BOOKMARKS
         });
-        converse_core_api.sendIQ(stanza).then(iq => this.onBookmarksReceived(deferred, iq)).catch(iq => this.onBookmarksReceivedError(deferred, iq));
+        core_api.sendIQ(stanza).then(iq => this.onBookmarksReceived(deferred, iq)).catch(iq => this.onBookmarksReceivedError(deferred, iq));
       },
 
       markRoomAsBookmarked(bookmark) {
-        const groupchat = converse_core_converse.chatboxes.get(bookmark.get('jid'));
+        const groupchat = core_converse.chatboxes.get(bookmark.get('jid'));
 
         if (groupchat !== undefined) {
           groupchat.save('bookmarked', true);
@@ -80040,7 +84067,7 @@ converse.plugins.add('converse-bookmarks', {
       },
 
       markRoomAsUnbookmarked(bookmark) {
-        const groupchat = converse_core_converse.chatboxes.get(bookmark.get('jid'));
+        const groupchat = core_converse.chatboxes.get(bookmark.get('jid'));
 
         if (groupchat !== undefined) {
           groupchat.save('bookmarked', false);
@@ -80048,17 +84075,20 @@ converse.plugins.add('converse-bookmarks', {
       },
 
       createBookmarksFromStanza(stanza) {
-        const bookmarks = converse_bookmarks_sizzle("items[node=\"storage:bookmarks\"] item storage[xmlns=\"storage:bookmarks\"] conference", stanza);
-        bookmarks.forEach(bookmark => {
-          var _bookmark$querySelect;
+        const xmlns = bookmarks_Strophe.NS.BOOKMARKS;
+        const sel = "items[node=\"".concat(xmlns, "\"] item storage[xmlns=\"").concat(xmlns, "\"] conference");
+        bookmarks_sizzle(sel, stanza).forEach(el => {
+          var _el$querySelector;
 
-          const jid = bookmark.getAttribute('jid');
-          this.create({
+          const jid = el.getAttribute('jid');
+          const bookmark = this.get(jid);
+          const attrs = {
             'jid': jid,
-            'name': bookmark.getAttribute('name') || jid,
-            'autojoin': bookmark.getAttribute('autojoin') === 'true',
-            'nick': ((_bookmark$querySelect = bookmark.querySelector('nick')) === null || _bookmark$querySelect === void 0 ? void 0 : _bookmark$querySelect.textContent) || ''
-          });
+            'name': el.getAttribute('name') || jid,
+            'autojoin': el.getAttribute('autojoin') === 'true',
+            'nick': ((_el$querySelector = el.querySelector('nick')) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.textContent) || ''
+          };
+          bookmark ? bookmark.save(attrs) : this.create(attrs);
         });
       },
 
@@ -80074,7 +84104,7 @@ converse.plugins.add('converse-bookmarks', {
       onBookmarksReceivedError(deferred, iq) {
         if (iq === null) {
           headless_log.error('Error: timeout while fetching bookmarks');
-          converse_core_api.alert('error', __('Timeout Error'), [__("The server did not return your bookmarks within the allowed time. " + "You can reload the page to request them again.")]);
+          core_api.alert('error', __('Timeout Error'), [__("The server did not return your bookmarks within the allowed time. " + "You can reload the page to request them again.")]);
         } else if (deferred) {
           if (iq.querySelector('error[type="cancel"] item-not-found')) {
             // Not an exception, the user simply doesn't have any bookmarks.
@@ -80092,34 +84122,34 @@ converse.plugins.add('converse-bookmarks', {
       },
 
       getUnopenedBookmarks() {
-        return this.filter(b => !converse_core_converse.chatboxes.get(b.get('jid')));
+        return this.filter(b => !core_converse.chatboxes.get(b.get('jid')));
       }
 
     });
-    converse_core_converse.BookmarksList = model_Model.extend({
+    core_converse.BookmarksList = model_Model.extend({
       defaults: {
-        "toggle-state": converse_core_converse.OPENED
+        "toggle-state": core_converse.OPENED
       }
     });
 
-    converse_core_converse.checkBookmarksSupport = async function () {
-      const identity = await converse_core_api.disco.getIdentity('pubsub', 'pep', converse_core_converse.bare_jid);
+    core_converse.checkBookmarksSupport = async function () {
+      const identity = await core_api.disco.getIdentity('pubsub', 'pep', core_converse.bare_jid);
 
-      if (converse_core_converse.allow_public_bookmarks) {
+      if (core_converse.allow_public_bookmarks) {
         return !!identity;
       } else {
-        return converse_core_api.disco.supports(converse_bookmarks_Strophe.NS.PUBSUB + '#publish-options', converse_core_converse.bare_jid);
+        return core_api.disco.supports(bookmarks_Strophe.NS.PUBSUB + '#publish-options', core_converse.bare_jid);
       }
     };
 
-    const initBookmarks = async function initBookmarks() {
-      if (!converse_core_api.settings.get('allow_bookmarks')) {
+    const initBookmarks = async function () {
+      if (!core_api.settings.get('allow_bookmarks')) {
         return;
       }
 
-      if (await converse_core_converse.checkBookmarksSupport()) {
-        converse_core_converse.bookmarks = new converse_core_converse.Bookmarks();
-        await converse_core_converse.bookmarks.fetchBookmarks();
+      if (await core_converse.checkBookmarksSupport()) {
+        core_converse.bookmarks = new core_converse.Bookmarks();
+        await core_converse.bookmarks.fetchBookmarks();
         /**
          * Triggered once the _converse.Bookmarks collection
          * has been created and cached bookmarks have been fetched.
@@ -80127,39 +84157,42 @@ converse.plugins.add('converse-bookmarks', {
          * @example _converse.api.listen.on('bookmarksInitialized', () => { ... });
          */
 
-        converse_core_api.trigger('bookmarksInitialized');
+        core_api.trigger('bookmarksInitialized');
       }
     };
 
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.bookmarks !== undefined) {
-        converse_core_converse.bookmarks.clearStore({
+    core_api.listen.on('addClientFeatures', () => {
+      if (core_api.settings.get('allow_bookmarks')) {
+        core_api.disco.own.features.add(bookmarks_Strophe.NS.BOOKMARKS + '+notify');
+      }
+    });
+    core_api.listen.on('clearSession', () => {
+      if (core_converse.bookmarks !== undefined) {
+        core_converse.bookmarks.clearStore({
           'silent': true
         });
 
-        window.sessionStorage.removeItem(converse_core_converse.bookmarks.fetched_flag);
-        delete converse_core_converse.bookmarks;
+        window.sessionStorage.removeItem(core_converse.bookmarks.fetched_flag);
+        delete core_converse.bookmarks;
       }
     });
-    converse_core_api.listen.on('reconnected', initBookmarks);
-    converse_core_api.listen.on('connected', async () => {
+    core_api.listen.on('reconnected', initBookmarks);
+    core_api.listen.on('connected', async () => {
       // Add a handler for bookmarks pushed from other connected clients
-      converse_core_converse.connection.addHandler(message => {
-        if (converse_bookmarks_sizzle('event[xmlns="' + converse_bookmarks_Strophe.NS.PUBSUB + '#event"] items[node="storage:bookmarks"]', message).length) {
-          converse_core_api.waitUntil('bookmarksInitialized').then(() => converse_core_converse.bookmarks.createBookmarksFromStanza(message)).catch(e => headless_log.fatal(e));
-        }
-      }, null, 'message', 'headline', null, converse_core_converse.bare_jid);
-
-      await Promise.all([converse_core_api.waitUntil('chatBoxesFetched')]);
+      const {
+        connection
+      } = core_converse;
+      connection.addHandler(handleBookmarksPush, null, 'message', 'headline', null, core_converse.bare_jid);
+      await Promise.all([core_api.waitUntil('chatBoxesFetched')]);
       initBookmarks();
     });
   }
 
 });
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/bosh.js
-var bosh = __webpack_require__(115);
+var bosh = __webpack_require__(154);
 
-// CONCATENATED MODULE: ./src/headless/converse-bosh.js
+// CONCATENATED MODULE: ./src/headless/plugins/bosh.js
 /**
  * @module converse-bosh
  * @copyright The Converse.js contributors
@@ -80171,16 +84204,16 @@ var bosh = __webpack_require__(115);
 
 
 const {
-  Strophe: converse_bosh_Strophe
+  Strophe: bosh_Strophe
 } = converse.env;
 const BOSH_SESSION_ID = 'converse.bosh-session';
 converse.plugins.add('converse-bosh', {
   enabled() {
-    return !converse_core_converse.api.settings.get("blacklisted_plugins").includes('converse-bosh');
+    return !core_converse.api.settings.get("blacklisted_plugins").includes('converse-bosh');
   },
 
   initialize() {
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       bosh_service_url: undefined,
       prebind_url: null
     });
@@ -80188,61 +84221,61 @@ converse.plugins.add('converse-bosh', {
     async function initBOSHSession() {
       const id = BOSH_SESSION_ID;
 
-      if (!converse_core_converse.bosh_session) {
-        converse_core_converse.bosh_session = new model_Model({
+      if (!core_converse.bosh_session) {
+        core_converse.bosh_session = new model_Model({
           id
         });
-        converse_core_converse.bosh_session.browserStorage = converse_core_converse.createStore(id, "session");
-        await new Promise(resolve => converse_core_converse.bosh_session.fetch({
+        core_converse.bosh_session.browserStorage = core_converse.createStore(id, "session");
+        await new Promise(resolve => core_converse.bosh_session.fetch({
           'success': resolve,
           'error': resolve
         }));
       }
 
-      if (converse_core_converse.jid) {
-        if (converse_core_converse.bosh_session.get('jid') !== converse_core_converse.jid) {
-          const jid = await converse_core_converse.setUserJID(converse_core_converse.jid);
+      if (core_converse.jid) {
+        if (core_converse.bosh_session.get('jid') !== core_converse.jid) {
+          const jid = await core_converse.setUserJID(core_converse.jid);
 
-          converse_core_converse.bosh_session.clear({
+          core_converse.bosh_session.clear({
             'silent': true
           });
 
-          converse_core_converse.bosh_session.save({
+          core_converse.bosh_session.save({
             jid
           });
         }
       } else {
         // Keepalive
-        const jid = converse_core_converse.bosh_session.get('jid');
+        const jid = core_converse.bosh_session.get('jid');
 
-        jid && (await converse_core_converse.setUserJID(jid));
+        jid && (await core_converse.setUserJID(jid));
       }
 
-      return converse_core_converse.bosh_session;
+      return core_converse.bosh_session;
     }
 
-    converse_core_converse.startNewPreboundBOSHSession = function () {
-      if (!converse_core_api.settings.get('prebind_url')) {
+    core_converse.startNewPreboundBOSHSession = function () {
+      if (!core_api.settings.get('prebind_url')) {
         throw new Error("startNewPreboundBOSHSession: If you use prebind then you MUST supply a prebind_url");
       }
 
       const xhr = new XMLHttpRequest();
-      xhr.open('GET', converse_core_api.settings.get('prebind_url'), true);
+      xhr.open('GET', core_api.settings.get('prebind_url'), true);
       xhr.setRequestHeader('Accept', 'application/json, text/javascript');
 
       xhr.onload = async function () {
         if (xhr.status >= 200 && xhr.status < 400) {
           const data = JSON.parse(xhr.responseText);
-          const jid = await converse_core_converse.setUserJID(data.jid);
+          const jid = await core_converse.setUserJID(data.jid);
 
-          converse_core_converse.connection.attach(jid, data.sid, data.rid, converse_core_converse.connection.onConnectStatusChanged);
+          core_converse.connection.attach(jid, data.sid, data.rid, core_converse.connection.onConnectStatusChanged);
         } else {
           xhr.onerror();
         }
       };
 
       xhr.onerror = function () {
-        delete converse_core_converse.connection;
+        delete core_converse.connection;
         /**
          * Triggered when fetching prebind tokens failed
          * @event _converse#noResumeableBOSHSession
@@ -80250,22 +84283,22 @@ converse.plugins.add('converse-bosh', {
          * @example _converse.api.listen.on('noResumeableBOSHSession', _converse => { ... });
          */
 
-        converse_core_api.trigger('noResumeableBOSHSession', converse_core_converse);
+        core_api.trigger('noResumeableBOSHSession', core_converse);
       };
 
       xhr.send();
     };
 
-    converse_core_converse.restoreBOSHSession = async function () {
+    core_converse.restoreBOSHSession = async function () {
       const jid = (await initBOSHSession()).get('jid');
 
-      if (jid && converse_core_converse.connection._proto instanceof converse_bosh_Strophe.Bosh) {
+      if (jid && core_converse.connection._proto instanceof bosh_Strophe.Bosh) {
         try {
-          converse_core_converse.connection.restore(jid, converse_core_converse.connection.onConnectStatusChanged);
+          core_converse.connection.restore(jid, core_converse.connection.onConnectStatusChanged);
 
           return true;
         } catch (e) {
-          !converse_core_converse.isTestEnv() && headless_log.warn("Could not restore session for jid: " + jid + " Error message: " + e.message);
+          !core_converse.isTestEnv() && headless_log.warn("Could not restore session for jid: " + jid + " Error message: " + e.message);
           return false;
         }
       }
@@ -80275,32 +84308,32 @@ converse.plugins.add('converse-bosh', {
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.bosh_session === undefined) {
+    core_api.listen.on('clearSession', () => {
+      if (core_converse.bosh_session === undefined) {
         // Remove manually, even if we don't have the corresponding
         // model, to avoid trying to reconnect to a stale BOSH session
         const id = BOSH_SESSION_ID;
         sessionStorage.removeItem(id);
         sessionStorage.removeItem("".concat(id, "-").concat(id));
       } else {
-        converse_core_converse.bosh_session.destroy();
+        core_converse.bosh_session.destroy();
 
-        delete converse_core_converse.bosh_session;
+        delete core_converse.bosh_session;
       }
     });
-    converse_core_api.listen.on('setUserJID', () => {
-      if (converse_core_converse.bosh_session !== undefined) {
-        converse_core_converse.bosh_session.save({
-          'jid': converse_core_converse.jid
+    core_api.listen.on('setUserJID', () => {
+      if (core_converse.bosh_session !== undefined) {
+        core_converse.bosh_session.save({
+          'jid': core_converse.jid
         });
       }
     });
-    converse_core_api.listen.on('addClientFeatures', () => converse_core_api.disco.own.features.add(converse_bosh_Strophe.NS.BOSH));
+    core_api.listen.on('addClientFeatures', () => core_api.disco.own.features.add(bosh_Strophe.NS.BOSH));
     /************************ END Event Handlers ************************/
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * This namespace lets you access the BOSH tokens
        *
@@ -80315,14 +84348,14 @@ converse.plugins.add('converse-bosh', {
          * @example _converse.api.tokens.get('rid');
          */
         get(id) {
-          if (converse_core_converse.connection === undefined) {
+          if (core_converse.connection === undefined) {
             return null;
           }
 
           if (id.toLowerCase() === 'rid') {
-            return converse_core_converse.connection.rid || converse_core_converse.connection._proto.rid;
+            return core_converse.connection.rid || core_converse.connection._proto.rid;
           } else if (id.toLowerCase() === 'sid') {
-            return converse_core_converse.connection.sid || converse_core_converse.connection._proto.sid;
+            return core_converse.connection.sid || core_converse.connection._proto.sid;
           }
         }
 
@@ -80335,7 +84368,7 @@ converse.plugins.add('converse-bosh', {
 // EXTERNAL MODULE: ./src/headless/node_modules/strophe.js/src/sha1.js
 var sha1 = __webpack_require__(7);
 
-// CONCATENATED MODULE: ./src/headless/converse-caps.js
+// CONCATENATED MODULE: ./src/headless/plugins/caps.js
 /**
  * @module converse-caps
  * @copyright 2020, the Converse.js contributors
@@ -80344,10 +84377,10 @@ var sha1 = __webpack_require__(7);
 
 
 const {
-  Strophe: converse_caps_Strophe,
-  $build: converse_caps_$build
+  Strophe: caps_Strophe,
+  $build
 } = converse.env;
-converse_caps_Strophe.addNamespace('CAPS', "http://jabber.org/protocol/caps");
+caps_Strophe.addNamespace('CAPS', "http://jabber.org/protocol/caps");
 
 function propertySort(array, property) {
   return array.sort((a, b) => {
@@ -80377,8 +84410,8 @@ function generateVerificationString(_converse) {
 }
 
 function createCapsNode(_converse) {
-  return converse_caps_$build("c", {
-    'xmlns': converse_caps_Strophe.NS.CAPS,
+  return $build("c", {
+    'xmlns': caps_Strophe.NS.CAPS,
     'hash': "sha-1",
     'node': "https://conversejs.org",
     'ver': generateVerificationString(_converse)
@@ -80401,7 +84434,7 @@ converse.plugins.add('converse-caps', {
     }
   }
 });
-// CONCATENATED MODULE: ./src/headless/converse-carbons.js
+// CONCATENATED MODULE: ./src/headless/plugins/carbons.js
 /**
  * @module converse-carbons
  * @copyright The Converse.js contributors
@@ -80415,46 +84448,57 @@ converse.plugins.add('converse-caps', {
  * See XEP-0280 https://xmpp.org/extensions/xep-0280.html#enabling
  */
 
-function enableCarbons() {
-  var _converse$session;
+function enableCarbons(reconnecting) {
+  var _converse$session2;
+
+  if (reconnecting) {
+    var _converse$session;
+
+    (_converse$session = core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.set({
+      'carbons_enabled': false
+    });
+  }
 
-  if (!converse_core_api.settings.get("message_carbons") || ((_converse$session = converse_core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.get('carbons_enabled'))) {
+  if (!core_api.settings.get("message_carbons") || ((_converse$session2 = core_converse.session) === null || _converse$session2 === void 0 ? void 0 : _converse$session2.get('carbons_enabled'))) {
     return;
   }
 
   const carbons_iq = new strophe["e" /* Strophe */].Builder('iq', {
-    'from': converse_core_converse.connection.jid,
+    'from': core_converse.connection.jid,
     'id': 'enablecarbons',
     'type': 'set'
   }).c('enable', {
     xmlns: strophe["e" /* Strophe */].NS.CARBONS
   });
 
-  converse_core_converse.connection.addHandler(iq => {
+  core_converse.connection.addHandler(iq => {
     if (iq.querySelectorAll('error').length > 0) {
       headless_log.warn('An error occurred while trying to enable message carbons.');
     } else {
-      converse_core_converse.session.save({
+      core_converse.session.set({
         'carbons_enabled': true
       });
 
       headless_log.debug('Message carbons have been enabled.');
     }
+
+    core_converse.session.save(); // Gather multiple sets into one save
+
   }, null, "iq", null, "enablecarbons");
 
-  converse_core_converse.connection.send(carbons_iq);
+  core_converse.connection.send(carbons_iq);
 }
 
 converse.plugins.add('converse-carbons', {
   initialize() {
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       message_carbons: true
     });
-    converse_core_api.listen.on('afterResourceBinding', () => enableCarbons());
+    core_api.listen.on('afterResourceBinding', enableCarbons);
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-chatboxes.js
+// CONCATENATED MODULE: ./src/headless/plugins/chatboxes.js
 /**
  * @module converse-chatboxes
  * @copyright 2020, the Converse.js contributors
@@ -80465,12 +84509,12 @@ converse.plugins.add('converse-carbons', {
 
 
 const {
-  Strophe: converse_chatboxes_Strophe
+  Strophe: chatboxes_Strophe
 } = converse.env;
-converse_chatboxes_Strophe.addNamespace('MESSAGE_CORRECT', 'urn:xmpp:message-correct:0');
-converse_chatboxes_Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
-converse_chatboxes_Strophe.addNamespace('REFERENCE', 'urn:xmpp:reference:0');
-converse_chatboxes_Strophe.addNamespace('MARKERS', 'urn:xmpp:chat-markers:0');
+chatboxes_Strophe.addNamespace('MESSAGE_CORRECT', 'urn:xmpp:message-correct:0');
+chatboxes_Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
+chatboxes_Strophe.addNamespace('REFERENCE', 'urn:xmpp:reference:0');
+chatboxes_Strophe.addNamespace('MARKERS', 'urn:xmpp:chat-markers:0');
 converse.plugins.add('converse-chatboxes', {
   dependencies: ["converse-emoji", "converse-roster", "converse-vcard"],
 
@@ -80478,57 +84522,27 @@ converse.plugins.add('converse-chatboxes', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.promises.add(['chatBoxesFetched', 'chatBoxesInitialized', 'privateChatsAutoJoined']);
-    let msg_counter = 0;
-
-    converse_core_converse.incrementMsgCounter = function () {
-      msg_counter += 1;
-      const title = document.title;
-
-      if (!title) {
-        return;
-      }
-
-      if (title.search(/^Messages \(\d+\) /) === -1) {
-        document.title = "Messages (".concat(msg_counter, ") ").concat(title);
-      } else {
-        document.title = title.replace(/^Messages \(\d+\) /, "Messages (".concat(msg_counter, ") "));
-      }
-    };
-
-    converse_core_converse.clearMsgCounter = function () {
-      msg_counter = 0;
-      const title = document.title;
-
-      if (!title) {
-        return;
-      }
-
-      if (title.search(/^Messages \(\d+\) /) !== -1) {
-        document.title = title.replace(/^Messages \(\d+\) /, "");
-      }
-    };
-
-    converse_core_converse.ChatBoxes = collection_Collection.extend({
+    core_api.promises.add(['chatBoxesFetched', 'chatBoxesInitialized', 'privateChatsAutoJoined']);
+    core_converse.ChatBoxes = Collection.extend({
       comparator: 'time_opened',
 
       model(attrs, options) {
-        return new converse_core_converse.ChatBox(attrs, options);
+        return new core_converse.ChatBox(attrs, options);
       },
 
       onChatBoxesFetched(collection) {
         collection.filter(c => !c.isValid()).forEach(c => c.destroy());
         /**
-         * Triggered when a message stanza is been received and processed.
+         * Triggered once all chat boxes have been recreated from the browser cache
          * @event _converse#chatBoxesFetched
          * @type { object }
          * @property { _converse.ChatBox | _converse.ChatRoom } chatbox
          * @property { XMLElement } stanza
-         * @example _converse.api.listen.on('message', obj => { ... });
+         * @example _converse.api.listen.on('chatBoxesFetched', obj => { ... });
          * @example _converse.api.waitUntil('chatBoxesFetched').then(() => { ... });
          */
 
-        converse_core_api.trigger('chatBoxesFetched');
+        core_api.trigger('chatBoxesFetched');
       },
 
       onConnected(reconnecting) {
@@ -80536,7 +84550,7 @@ converse.plugins.add('converse-chatboxes', {
           return;
         }
 
-        this.browserStorage = converse_core_converse.createStore("converse.chatboxes-".concat(converse_core_converse.bare_jid));
+        this.browserStorage = core_converse.createStore("converse.chatboxes-".concat(core_converse.bare_jid));
         this.fetch({
           'add': true,
           'success': c => this.onChatBoxesFetched(c)
@@ -80546,7 +84560,7 @@ converse.plugins.add('converse-chatboxes', {
     });
 
     async function createChatBox(jid, attrs, Model) {
-      jid = converse_chatboxes_Strophe.getBareJidFromJid(jid.toLowerCase());
+      jid = chatboxes_Strophe.getBareJidFromJid(jid.toLowerCase());
       Object.assign(attrs, {
         'jid': jid,
         'id': jid
@@ -80555,7 +84569,7 @@ converse.plugins.add('converse-chatboxes', {
 
       try {
         chatbox = new Model(attrs, {
-          'collection': converse_core_converse.chatboxes
+          'collection': core_converse.chatboxes
         });
       } catch (e) {
         headless_log.error(e);
@@ -80569,21 +84583,20 @@ converse.plugins.add('converse-chatboxes', {
         return null;
       }
 
-      converse_core_converse.chatboxes.add(chatbox);
+      core_converse.chatboxes.add(chatbox);
 
-      await chatbox.messages.fetched;
       return chatbox;
     }
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('addClientFeatures', () => {
-      converse_core_api.disco.own.features.add(converse_chatboxes_Strophe.NS.MESSAGE_CORRECT);
-      converse_core_api.disco.own.features.add(converse_chatboxes_Strophe.NS.HTTPUPLOAD);
-      converse_core_api.disco.own.features.add(converse_chatboxes_Strophe.NS.OUTOFBAND);
+    core_api.listen.on('addClientFeatures', () => {
+      core_api.disco.own.features.add(chatboxes_Strophe.NS.MESSAGE_CORRECT);
+      core_api.disco.own.features.add(chatboxes_Strophe.NS.HTTPUPLOAD);
+      core_api.disco.own.features.add(chatboxes_Strophe.NS.OUTOFBAND);
     });
-    converse_core_api.listen.on('pluginsInitialized', () => {
-      converse_core_converse.chatboxes = new converse_core_converse.ChatBoxes();
+    core_api.listen.on('pluginsInitialized', () => {
+      core_converse.chatboxes = new core_converse.ChatBoxes();
       /**
        * Triggered once the _converse.ChatBoxes collection has been initialized.
        * @event _converse#chatBoxesInitialized
@@ -80591,16 +84604,15 @@ converse.plugins.add('converse-chatboxes', {
        * @example _converse.api.waitUntil('chatBoxesInitialized').then(() => { ... });
        */
 
-      converse_core_api.trigger('chatBoxesInitialized');
+      core_api.trigger('chatBoxesInitialized');
     });
-    converse_core_api.listen.on('presencesInitialized', reconnecting => converse_core_converse.chatboxes.onConnected(reconnecting));
-    converse_core_api.listen.on('reconnected', () => converse_core_converse.chatboxes.forEach(m => m.onReconnection()));
-    converse_core_api.listen.on('windowStateChanged', d => d.state === 'visible' && converse_core_converse.clearMsgCounter());
+    core_api.listen.on('presencesInitialized', reconnecting => core_converse.chatboxes.onConnected(reconnecting));
+    core_api.listen.on('reconnected', () => core_converse.chatboxes.forEach(m => m.onReconnection()));
     /************************ END Event Handlers ************************/
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * The "chatboxes" namespace.
        *
@@ -80615,7 +84627,7 @@ converse.plugins.add('converse-chatboxes', {
          * @param { Model } model - The type of chatbox that should be created
          */
         async create(jids = [], attrs = {}, model) {
-          await converse_core_api.waitUntil('chatBoxesFetched');
+          await core_api.waitUntil('chatBoxesFetched');
 
           if (typeof jids === 'string') {
             return createChatBox(jids, attrs, model);
@@ -80629,15 +84641,15 @@ converse.plugins.add('converse-chatboxes', {
          * @param { String|String[] } jids - A JID or array of JIDs
          */
         async get(jids) {
-          await converse_core_api.waitUntil('chatBoxesFetched');
+          await core_api.waitUntil('chatBoxesFetched');
 
           if (jids === undefined) {
-            return converse_core_converse.chatboxes.models;
+            return core_converse.chatboxes.models;
           } else if (typeof jids === 'string') {
-            return converse_core_converse.chatboxes.get(jids.toLowerCase());
+            return core_converse.chatboxes.get(jids.toLowerCase());
           } else {
             jids = jids.map(j => j.toLowerCase());
-            return converse_core_converse.chatboxes.models.filter(m => jids.includes(m.get('jid')));
+            return core_converse.chatboxes.models.filter(m => jids.includes(m.get('jid')));
           }
         }
 
@@ -80647,7 +84659,7 @@ converse.plugins.add('converse-chatboxes', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-headlines.js
+// CONCATENATED MODULE: ./src/headless/plugins/headlines.js
 /**
  * @module converse-headlines
  * @copyright 2020, the Converse.js contributors
@@ -80700,23 +84712,24 @@ converse.plugins.add('converse-headlines', {
      * @namespace _converse.HeadlinesBox
      * @memberOf _converse
      */
-    converse_core_converse.HeadlinesBox = converse_core_converse.ChatBox.extend({
+    core_converse.HeadlinesBox = core_converse.ChatBox.extend({
       defaults() {
         return {
           'bookmarked': false,
-          'hidden': ['mobile', 'fullscreen'].includes(converse_core_api.settings.get("view_mode")),
+          'hidden': ['mobile', 'fullscreen'].includes(core_api.settings.get("view_mode")),
           'message_type': 'headline',
           'num_unread': 0,
           'time_opened': this.get('time_opened') || new Date().getTime(),
-          'type': converse_core_converse.HEADLINES_TYPE
+          'type': core_converse.HEADLINES_TYPE
         };
       },
 
-      initialize() {
-        this.initMessages();
+      async initialize() {
         this.set({
           'box_id': "box-".concat(this.get('jid'))
         });
+        this.initMessages();
+        await this.fetchMessages();
         /**
          * Triggered once a {@link _converse.HeadlinesBox} has been created and initialized.
          * @event _converse#headlinesBoxInitialized
@@ -80724,7 +84737,7 @@ converse.plugins.add('converse-headlines', {
          * @example _converse.api.listen.on('headlinesBoxInitialized', model => { ... });
          */
 
-        converse_core_api.trigger('headlinesBoxInitialized', this);
+        core_api.trigger('headlinesBoxInitialized', this);
       }
 
     });
@@ -80734,7 +84747,7 @@ converse.plugins.add('converse-headlines', {
       if (utils_stanza.isHeadline(stanza) || utils_stanza.isServerMessage(stanza)) {
         const from_jid = stanza.getAttribute('from');
 
-        if (from_jid.includes('@') && !converse_core_converse.roster.get(from_jid) && !converse_core_api.settings.get("allow_non_roster_messaging")) {
+        if (from_jid.includes('@') && !core_converse.roster.get(from_jid) && !core_api.settings.get("allow_non_roster_messaging")) {
           return;
         }
 
@@ -80743,16 +84756,16 @@ converse.plugins.add('converse-headlines', {
           return;
         }
 
-        const chatbox = converse_core_converse.chatboxes.create({
+        const chatbox = core_converse.chatboxes.create({
           'id': from_jid,
           'jid': from_jid,
-          'type': converse_core_converse.HEADLINES_TYPE,
+          'type': core_converse.HEADLINES_TYPE,
           'from': from_jid
         });
 
-        const attrs = await utils_stanza.parseMessage(stanza, converse_core_converse);
+        const attrs = await utils_stanza.parseMessage(stanza, core_converse);
         await chatbox.createMessage(attrs);
-        converse_core_api.trigger('message', {
+        core_api.trigger('message', {
           chatbox,
           stanza,
           attrs
@@ -80763,16 +84776,16 @@ converse.plugins.add('converse-headlines', {
 
 
     function registerHeadlineHandler() {
-      converse_core_converse.connection.addHandler(message => onHeadlineMessage(message) || true, null, 'message');
+      core_converse.connection.addHandler(message => onHeadlineMessage(message) || true, null, 'message');
     }
 
-    converse_core_api.listen.on('connected', registerHeadlineHandler);
-    converse_core_api.listen.on('reconnected', registerHeadlineHandler);
+    core_api.listen.on('connected', registerHeadlineHandler);
+    core_api.listen.on('reconnected', registerHeadlineHandler);
     /************************ END Event Handlers ************************/
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * The "headlines" namespace, which is used for headline-channels
        * which are read-only channels containing messages of type
@@ -80793,12 +84806,12 @@ converse.plugins.add('converse-headlines', {
          */
         async get(jids, attrs = {}, create = false) {
           async function _get(jid) {
-            let model = await converse_core_api.chatboxes.get(jid);
+            let model = await core_api.chatboxes.get(jid);
 
             if (!model && create) {
-              model = await converse_core_api.chatboxes.create(jid, attrs, converse_core_converse.HeadlinesBox);
+              model = await core_api.chatboxes.create(jid, attrs, core_converse.HeadlinesBox);
             } else {
-              model = model && model.get('type') === converse_core_converse.HEADLINES_TYPE ? model : null;
+              model = model && model.get('type') === core_converse.HEADLINES_TYPE ? model : null;
 
               if (model && Object.keys(attrs).length) {
                 model.save(attrs);
@@ -80809,8 +84822,8 @@ converse.plugins.add('converse-headlines', {
           }
 
           if (jids === undefined) {
-            const chats = await converse_core_api.chatboxes.get();
-            return chats.filter(c => c.get('type') === converse_core_converse.HEADLINES_TYPE);
+            const chats = await core_api.chatboxes.get();
+            return chats.filter(c => c.get('type') === core_converse.HEADLINES_TYPE);
           } else if (typeof jids === 'string') {
             return _get(jids);
           }
@@ -80824,7 +84837,7 @@ converse.plugins.add('converse-headlines', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-rsm.js
+// CONCATENATED MODULE: ./src/headless/shared/rsm.js
 /**
  * @module converse-rsm
  * @copyright The Converse.js contributors
@@ -80836,10 +84849,10 @@ converse.plugins.add('converse-headlines', {
 
 
 const {
-  Strophe: converse_rsm_Strophe,
-  $build: converse_rsm_$build
+  Strophe: rsm_Strophe,
+  $build: rsm_$build
 } = converse.env;
-converse_rsm_Strophe.addNamespace('RSM', 'http://jabber.org/protocol/rsm');
+rsm_Strophe.addNamespace('RSM', 'http://jabber.org/protocol/rsm');
 /**
  * @typedef { Object } RSMQueryParameters
  * [XEP-0059 RSM](https://xmpp.org/extensions/xep-0059.html) Attributes that can be used to filter query results
@@ -80851,18 +84864,18 @@ converse_rsm_Strophe.addNamespace('RSM', 'http://jabber.org/protocol/rsm');
 
 const RSM_QUERY_PARAMETERS = ['after', 'before', 'index', 'max'];
 
-const converse_rsm_toNumber = v => Number(v);
+const rsm_toNumber = v => Number(v);
 
-const converse_rsm_toString = v => v.toString();
+const rsm_toString = v => v.toString();
 
 const RSM_TYPES = {
-  'after': converse_rsm_toString,
-  'before': converse_rsm_toString,
-  'count': converse_rsm_toNumber,
-  'first': converse_rsm_toString,
-  'index': converse_rsm_toNumber,
-  'last': converse_rsm_toString,
-  'max': converse_rsm_toNumber
+  'after': rsm_toString,
+  'before': rsm_toString,
+  'count': rsm_toNumber,
+  'first': rsm_toString,
+  'index': rsm_toNumber,
+  'last': rsm_toString,
+  'max': rsm_toNumber
 };
 
 const isUndefined = x => typeof x === 'undefined'; // This array contains both query attributes and response attributes
@@ -80874,7 +84887,7 @@ const RSM_ATTRIBUTES = Object.keys(RSM_TYPES);
  * @class RSM
  */
 
-class converse_rsm_RSM {
+class rsm_RSM {
   static getQueryParameters(options = {}) {
     return lodash_es_pick(options, RSM_QUERY_PARAMETERS);
   }
@@ -80887,7 +84900,7 @@ class converse_rsm_RSM {
       const elem = set.getElementsByTagName(attr)[0];
 
       if (!isUndefined(elem) && elem !== null) {
-        result[attr] = RSM_TYPES[attr](converse_rsm_Strophe.getText(elem));
+        result[attr] = RSM_TYPES[attr](rsm_Strophe.getText(elem));
 
         if (attr == 'first') {
           result.index = RSM_TYPES['index'](elem.getAttribute('index'));
@@ -80905,8 +84918,8 @@ class converse_rsm_RSM {
 
 
   constructor(options = {}) {
-    this.query = converse_rsm_RSM.getQueryParameters(options);
-    this.result = options.xml ? converse_rsm_RSM.parseXMLResult(options.xml) : {};
+    this.query = rsm_RSM.getQueryParameters(options);
+    this.result = options.xml ? rsm_RSM.parseXMLResult(options.xml) : {};
   }
   /**
    * Returns a `<set>` XML element that confirms to XEP-0059 Result Set Management.
@@ -80917,8 +84930,8 @@ class converse_rsm_RSM {
 
 
   toXML() {
-    const xml = converse_rsm_$build('set', {
-      xmlns: converse_rsm_Strophe.NS.RSM
+    const xml = rsm_$build('set', {
+      xmlns: rsm_Strophe.NS.RSM
     });
 
     const reducer = (xml, a) => !isUndefined(this.query[a]) ? xml.c(a).t((this.query[a] || '').toString()).up() : xml;
@@ -80932,7 +84945,7 @@ class converse_rsm_RSM {
       before,
       max
     });
-    return new converse_rsm_RSM(options);
+    return new rsm_RSM(options);
   }
 
   previous(max, after) {
@@ -80941,19 +84954,13 @@ class converse_rsm_RSM {
       before: this.result.first,
       max
     });
-    return new converse_rsm_RSM(options);
+    return new rsm_RSM(options);
   }
 
 }
-converse_core_converse.RSM_ATTRIBUTES = RSM_ATTRIBUTES;
-converse_core_converse.RSM = converse_rsm_RSM;
-// CONCATENATED MODULE: ./src/headless/converse-mam.js
-function converse_mam_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
-
-function converse_mam_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { converse_mam_ownKeys(Object(source), true).forEach(function (key) { converse_mam_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { converse_mam_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
-
-function converse_mam_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
+core_converse.RSM_ATTRIBUTES = RSM_ATTRIBUTES;
+core_converse.RSM = rsm_RSM;
+// CONCATENATED MODULE: ./src/headless/plugins/mam.js
 /**
  * @module converse-mam
  * @description XEP-0313 Message Archive Management
@@ -80966,16 +84973,15 @@ function converse_mam_defineProperty(obj, key, value) { if (key in obj) { Object
 
 
 
-
 const {
-  Strophe: converse_mam_Strophe,
-  $iq: converse_mam_$iq,
+  Strophe: mam_Strophe,
+  $iq: mam_$iq,
   dayjs
 } = converse.env;
 const {
-  NS: converse_mam_NS
-} = converse_mam_Strophe;
-const converse_mam_u = converse.env.utils;
+  NS: mam_NS
+} = mam_Strophe;
+const mam_u = converse.env.utils;
 /**
  * The MUC utils object. Contains utility functions related to multi-user chat.
  * @mixin MAMEnabledChat
@@ -80996,7 +85002,7 @@ const MAMEnabledChat = {
     // must have been received *after* connection and we instead must query
     // for earlier messages
 
-    if (most_recent_msg && !converse_core_api.settings.get('clear_messages_on_reconnection')) {
+    if (most_recent_msg && !core_api.settings.get('clear_messages_on_reconnection')) {
       const stanza_id = most_recent_msg.get("stanza_id ".concat(this.get('jid')));
 
       if (stanza_id) {
@@ -81016,11 +85022,11 @@ const MAMEnabledChat = {
   },
 
   async handleMAMResult(result, query, options, page_direction) {
-    await converse_core_api.emojis.initialize();
+    await core_api.emojis.initialize();
 
-    const is_muc = this.get('type') === converse_core_converse.CHATROOMS_TYPE;
+    const is_muc = this.get('type') === core_converse.CHATROOMS_TYPE;
 
-    result.messages = result.messages.map(s => is_muc ? utils_stanza.parseMUCMessage(s, this, converse_core_converse) : utils_stanza.parseMessage(s, converse_core_converse));
+    result.messages = result.messages.map(s => is_muc ? utils_stanza.parseMUCMessage(s, this, core_converse) : utils_stanza.parseMessage(s, core_converse));
     /**
      * Synchronous event which allows listeners to first do some
      * work based on the MAM result before calling the handlers here.
@@ -81032,14 +85038,14 @@ const MAMEnabledChat = {
       'chatbox': this,
       'messages': result.messages
     };
-    await converse_core_api.trigger('MAMResult', data, {
+    await core_api.trigger('MAMResult', data, {
       'synchronous': true
     });
     result.messages.forEach(m => this.queueMessage(m));
 
     if (result.error) {
-      const event_id = result.error.retry_event_id = converse_mam_u.getUniqueId();
-      converse_core_api.listen.once(event_id, () => this.fetchArchivedMessages(options, page_direction));
+      const event_id = result.error.retry_event_id = mam_u.getUniqueId();
+      core_api.listen.once(event_id, () => this.fetchArchivedMessages(options, page_direction));
       this.createMessageFromError(result.error);
     }
   },
@@ -81069,21 +85075,21 @@ const MAMEnabledChat = {
       return;
     }
 
-    const is_muc = this.get('type') === converse_core_converse.CHATROOMS_TYPE;
+    const is_muc = this.get('type') === core_converse.CHATROOMS_TYPE;
 
-    const mam_jid = is_muc ? this.get('jid') : converse_core_converse.bare_jid;
+    const mam_jid = is_muc ? this.get('jid') : core_converse.bare_jid;
 
-    if (!(await converse_core_api.disco.supports(converse_mam_NS.MAM, mam_jid))) {
+    if (!(await core_api.disco.supports(mam_NS.MAM, mam_jid))) {
       return;
     }
 
-    const max = converse_core_api.settings.get('archived_messages_page_size');
+    const max = core_api.settings.get('archived_messages_page_size');
     const query = Object.assign({
       'groupchat': is_muc,
       'max': max,
       'with': this.get('jid')
     }, options);
-    const result = await converse_core_api.archive.query(query);
+    const result = await core_api.archive.query(query);
     await this.handleMAMResult(result, query, options, page_direction);
 
     if (page_direction && result.rsm && !result.complete) {
@@ -81108,16 +85114,16 @@ converse.plugins.add('converse-mam', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by Converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       archived_messages_page_size: '50',
       message_archiving: undefined,
       // Supported values are 'always', 'never', 'roster' (https://xmpp.org/extensions/xep-0313.html#prefs)
       message_archiving_timeout: 20000 // Time (in milliseconds) to wait before aborting MAM request
 
     });
-    Object.assign(converse_core_converse.ChatBox.prototype, MAMEnabledChat);
+    Object.assign(core_converse.ChatBox.prototype, MAMEnabledChat);
 
-    converse_core_converse.onMAMError = function (iq) {
+    core_converse.onMAMError = function (iq) {
       if (iq === null || iq === void 0 ? void 0 : iq.querySelectorAll('feature-not-implemented').length) {
         headless_log.warn("Message Archive Management (XEP-0313) not supported by ".concat(iq.getAttribute('from')));
       } else {
@@ -81126,7 +85132,7 @@ converse.plugins.add('converse-mam', {
       }
     };
 
-    converse_core_converse.onMAMPreferences = function (iq, feature) {
+    core_converse.onMAMPreferences = function (iq, feature) {
       /* Handle returned IQ stanza containing Message Archive
        * Management (XEP-0313) preferences.
        *
@@ -81137,29 +85143,29 @@ converse.plugins.add('converse-mam', {
        * Per JID preferences will be set in chat boxes, so it'll
        * probbaly be handled elsewhere in any case.
        */
-      const preference = sizzle_default()("prefs[xmlns=\"".concat(converse_mam_NS.MAM, "\"]"), iq).pop();
+      const preference = sizzle_default()("prefs[xmlns=\"".concat(mam_NS.MAM, "\"]"), iq).pop();
       const default_pref = preference.getAttribute('default');
 
-      if (default_pref !== converse_core_api.settings.get('message_archiving')) {
-        const stanza = converse_mam_$iq({
+      if (default_pref !== core_api.settings.get('message_archiving')) {
+        const stanza = mam_$iq({
           'type': 'set'
         }).c('prefs', {
-          'xmlns': converse_mam_NS.MAM,
-          'default': converse_core_api.settings.get('message_archiving')
+          'xmlns': mam_NS.MAM,
+          'default': core_api.settings.get('message_archiving')
         });
         Array.from(preference.children).forEach(child => stanza.cnode(child).up()); // XXX: Strictly speaking, the server should respond with the updated prefs
         // (see example 18: https://xmpp.org/extensions/xep-0313.html#config)
         // but Prosody doesn't do this, so we don't rely on it.
 
-        converse_core_api.sendIQ(stanza).then(() => feature.save({
+        core_api.sendIQ(stanza).then(() => feature.save({
           'preferences': {
-            'default': converse_core_api.settings.get('message_archiving')
+            'default': core_api.settings.get('message_archiving')
           }
-        })).catch(converse_core_converse.onMAMError);
+        })).catch(core_converse.onMAMError);
       } else {
         feature.save({
           'preferences': {
-            'default': converse_core_api.settings.get('message_archiving')
+            'default': core_api.settings.get('message_archiving')
           }
         });
       }
@@ -81168,21 +85174,21 @@ converse.plugins.add('converse-mam', {
     function getMAMPrefsFromFeature(feature) {
       const prefs = feature.get('preferences') || {};
 
-      if (feature.get('var') !== converse_mam_NS.MAM || converse_core_api.settings.get('message_archiving') === undefined) {
+      if (feature.get('var') !== mam_NS.MAM || core_api.settings.get('message_archiving') === undefined) {
         return;
       }
 
-      if (prefs['default'] !== converse_core_api.settings.get('message_archiving')) {
-        converse_core_api.sendIQ(converse_mam_$iq({
+      if (prefs['default'] !== core_api.settings.get('message_archiving')) {
+        core_api.sendIQ(mam_$iq({
           'type': 'get'
         }).c('prefs', {
-          'xmlns': converse_mam_NS.MAM
-        })).then(iq => converse_core_converse.onMAMPreferences(iq, feature)).catch(converse_core_converse.onMAMError);
+          'xmlns': mam_NS.MAM
+        })).then(iq => core_converse.onMAMPreferences(iq, feature)).catch(core_converse.onMAMError);
       }
     }
 
     function preMUCJoinMAMFetch(room) {
-      if (!converse_core_api.settings.get('muc_show_logs_before_join') || !room.features.get('mam_enabled') || room.get('prejoin_mam_fetched')) {
+      if (!core_api.settings.get('muc_show_logs_before_join') || !room.features.get('mam_enabled') || room.get('prejoin_mam_fetched')) {
         return;
       }
 
@@ -81194,30 +85200,30 @@ converse.plugins.add('converse-mam', {
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('addClientFeatures', () => converse_core_api.disco.own.features.add(converse_mam_NS.MAM));
-    converse_core_api.listen.on('serviceDiscovered', getMAMPrefsFromFeature);
-    converse_core_api.listen.on('chatRoomViewInitialized', view => {
-      if (converse_core_api.settings.get('muc_show_logs_before_join')) {
+    core_api.listen.on('addClientFeatures', () => core_api.disco.own.features.add(mam_NS.MAM));
+    core_api.listen.on('serviceDiscovered', getMAMPrefsFromFeature);
+    core_api.listen.on('chatRoomViewInitialized', view => {
+      if (core_api.settings.get('muc_show_logs_before_join')) {
         preMUCJoinMAMFetch(view.model); // If we want to show MAM logs before entering the MUC, we need
         // to be informed once it's clear that this MUC supports MAM.
 
         view.model.features.on('change:mam_enabled', () => preMUCJoinMAMFetch(view.model));
       }
     });
-    converse_core_api.listen.on('enteredNewRoom', room => room.features.get('mam_enabled') && room.fetchNewestMessages());
-    converse_core_api.listen.on('chatReconnected', chat => {
+    core_api.listen.on('enteredNewRoom', room => room.features.get('mam_enabled') && room.fetchNewestMessages());
+    core_api.listen.on('chatReconnected', chat => {
       // XXX: For MUCs, we listen to enteredNewRoom instead
-      if (chat.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
+      if (chat.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
         chat.fetchNewestMessages();
       }
     });
-    converse_core_api.listen.on('afterMessagesFetched', chat => {
+    core_api.listen.on('afterMessagesFetched', chat => {
       // XXX: We don't want to query MAM every time this is triggered
       // since it's not necessary when the chat is restored from cache.
       // (given that BOSH or SMACKS will ensure that you get messages
       // sent during the reload).
       // With MUCs we can listen for `enteredNewRoom`.
-      if (chat.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE && !converse_core_converse.connection.restored) {
+      if (chat.get('type') === core_converse.PRIVATE_CHAT_TYPE && !core_converse.connection.restored) {
         chat.fetchNewestMessages();
       }
     });
@@ -81225,7 +85231,7 @@ converse.plugins.add('converse-mam', {
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * The [XEP-0313](https://xmpp.org/extensions/xep-0313.html) Message Archive Management API
        *
@@ -81412,7 +85418,7 @@ converse.plugins.add('converse-mam', {
          *
          */
         async query(options) {
-          if (!converse_core_api.connection.connected()) {
+          if (!core_api.connection.connected()) {
             throw new Error('Can\'t call `api.archive.query` before having established an XMPP session');
           }
 
@@ -81428,30 +85434,30 @@ converse.plugins.add('converse-mam', {
             attrs.to = options['with'];
           }
 
-          const jid = attrs.to || converse_core_converse.bare_jid;
-          const supported = await converse_core_api.disco.supports(converse_mam_NS.MAM, jid);
+          const jid = attrs.to || core_converse.bare_jid;
+          const supported = await core_api.disco.supports(mam_NS.MAM, jid);
 
           if (!supported) {
-            headless_log.warn("Did not fetch MAM archive for ".concat(jid, " because it doesn't support ").concat(converse_mam_NS.MAM));
+            headless_log.warn("Did not fetch MAM archive for ".concat(jid, " because it doesn't support ").concat(mam_NS.MAM));
             return {
               'messages': []
             };
           }
 
-          const queryid = converse_mam_u.getUniqueId();
-          const stanza = converse_mam_$iq(attrs).c('query', {
-            'xmlns': converse_mam_NS.MAM,
+          const queryid = mam_u.getUniqueId();
+          const stanza = mam_$iq(attrs).c('query', {
+            'xmlns': mam_NS.MAM,
             'queryid': queryid
           });
 
           if (options) {
             stanza.c('x', {
-              'xmlns': converse_mam_NS.XFORM,
+              'xmlns': mam_NS.XFORM,
               'type': 'submit'
             }).c('field', {
               'var': 'FORM_TYPE',
               'type': 'hidden'
-            }).c('value').t(converse_mam_NS.MAM).up().up();
+            }).c('value').t(mam_NS.MAM).up().up();
 
             if (options['with'] && !options.groupchat) {
               stanza.c('field', {
@@ -81473,7 +85479,7 @@ converse.plugins.add('converse-mam', {
               }
             });
             stanza.up();
-            const rsm = new converse_rsm_RSM(options);
+            const rsm = new rsm_RSM(options);
 
             if (Object.keys(rsm.query).length) {
               stanza.cnode(rsm.toXML());
@@ -81482,49 +85488,49 @@ converse.plugins.add('converse-mam', {
 
           const messages = [];
 
-          const message_handler = converse_core_converse.connection.addHandler(stanza => {
-            const result = sizzle_default()("message > result[xmlns=\"".concat(converse_mam_NS.MAM, "\"]"), stanza).pop();
+          const message_handler = core_converse.connection.addHandler(stanza => {
+            const result = sizzle_default()("message > result[xmlns=\"".concat(mam_NS.MAM, "\"]"), stanza).pop();
 
             if (result === undefined || result.getAttribute('queryid') !== queryid) {
               return true;
             }
 
-            const from = stanza.getAttribute('from') || converse_core_converse.bare_jid;
+            const from = stanza.getAttribute('from') || core_converse.bare_jid;
 
             if (options.groupchat) {
               if (from !== options['with']) {
                 headless_log.warn("Ignoring alleged groupchat MAM message from ".concat(stanza.getAttribute('from')));
                 return true;
               }
-            } else if (from !== converse_core_converse.bare_jid) {
+            } else if (from !== core_converse.bare_jid) {
               headless_log.warn("Ignoring alleged MAM message from ".concat(stanza.getAttribute('from')));
               return true;
             }
 
             messages.push(stanza);
             return true;
-          }, converse_mam_NS.MAM);
+          }, mam_NS.MAM);
 
           let error;
-          const iq_result = await converse_core_api.sendIQ(stanza, converse_core_api.settings.get('message_archiving_timeout'), false);
+          const iq_result = await core_api.sendIQ(stanza, core_api.settings.get('message_archiving_timeout'), false);
 
           if (iq_result === null) {
             const {
               __
-            } = converse_core_converse;
+            } = core_converse;
 
             const err_msg = __("Timeout while trying to fetch archived messages.");
 
             headless_log.error(err_msg);
-            error = new converse_core_converse.TimeoutError(err_msg);
+            error = new core_converse.TimeoutError(err_msg);
             return {
               messages,
               error
             };
-          } else if (converse_mam_u.isErrorStanza(iq_result)) {
+          } else if (mam_u.isErrorStanza(iq_result)) {
             const {
               __
-            } = converse_core_converse;
+            } = core_converse;
 
             const err_msg = __('An error occurred while querying for archived messages.');
 
@@ -81537,17 +85543,17 @@ converse.plugins.add('converse-mam', {
             };
           }
 
-          converse_core_converse.connection.deleteHandler(message_handler);
+          core_converse.connection.deleteHandler(message_handler);
 
           let rsm;
-          const fin = iq_result && sizzle_default()("fin[xmlns=\"".concat(converse_mam_NS.MAM, "\"]"), iq_result).pop();
+          const fin = iq_result && sizzle_default()("fin[xmlns=\"".concat(mam_NS.MAM, "\"]"), iq_result).pop();
           const complete = (fin === null || fin === void 0 ? void 0 : fin.getAttribute('complete')) === 'true';
-          const set = sizzle_default()("set[xmlns=\"".concat(converse_mam_NS.RSM, "\"]"), fin).pop();
+          const set = sizzle_default()("set[xmlns=\"".concat(mam_NS.RSM, "\"]"), fin).pop();
 
           if (set) {
-            rsm = new converse_rsm_RSM(converse_mam_objectSpread(converse_mam_objectSpread({}, options), {}, {
+            rsm = new rsm_RSM({ ...options,
               'xml': set
-            }));
+            });
           }
           /**
            * @typedef { Object } MAMQueryResult
@@ -81574,7 +85580,7 @@ converse.plugins.add('converse-mam', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-ping.js
+// CONCATENATED MODULE: ./src/headless/plugins/ping.js
 /**
  * @module converse-ping
  * @description
@@ -81586,18 +85592,18 @@ converse.plugins.add('converse-mam', {
 
 
 const {
-  Strophe: converse_ping_Strophe,
-  $iq: converse_ping_$iq
+  Strophe: ping_Strophe,
+  $iq: ping_$iq
 } = converse.env;
-const converse_ping_u = converse.env.utils;
-converse_ping_Strophe.addNamespace('PING', "urn:xmpp:ping");
+const ping_u = converse.env.utils;
+ping_Strophe.addNamespace('PING', "urn:xmpp:ping");
 converse.plugins.add('converse-ping', {
   initialize() {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
     let lastStanzaDate;
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       ping_interval: 60 //in seconds
 
     });
@@ -81606,28 +85612,28 @@ converse.plugins.add('converse-ping', {
       lastStanzaDate = new Date();
       const from = ping.getAttribute('from');
       const id = ping.getAttribute('id');
-      const iq = converse_ping_$iq({
+      const iq = ping_$iq({
         type: 'result',
         to: from,
         id: id
       });
 
-      converse_core_converse.connection.sendIQ(iq);
+      core_converse.connection.sendIQ(iq);
 
       return true;
     }
 
     function registerPongHandler() {
-      if (converse_core_converse.connection.disco !== undefined) {
-        converse_core_api.disco.own.features.add(converse_ping_Strophe.NS.PING);
+      if (core_converse.connection.disco !== undefined) {
+        core_api.disco.own.features.add(ping_Strophe.NS.PING);
       }
 
-      return converse_core_converse.connection.addHandler(pong, converse_ping_Strophe.NS.PING, "iq", "get");
+      return core_converse.connection.addHandler(pong, ping_Strophe.NS.PING, "iq", "get");
     }
 
     function registerPingHandler() {
-      converse_core_converse.connection.addHandler(() => {
-        if (converse_core_api.settings.get('ping_interval') > 0) {
+      core_converse.connection.addHandler(() => {
+        if (core_api.settings.get('ping_interval') > 0) {
           // Handler on each stanza, saves the received date
           // in order to ping only when needed.
           lastStanzaDate = new Date();
@@ -81637,15 +85643,15 @@ converse.plugins.add('converse-ping', {
     }
 
     setTimeout(() => {
-      if (converse_core_api.settings.get('ping_interval') > 0) {
+      if (core_api.settings.get('ping_interval') > 0) {
         const now = new Date();
 
         if (!lastStanzaDate) {
           lastStanzaDate = now;
         }
 
-        if ((now - lastStanzaDate) / 1000 > converse_core_api.settings.get('ping_interval')) {
-          return converse_core_api.ping();
+        if ((now - lastStanzaDate) / 1000 > core_api.settings.get('ping_interval')) {
+          return core_api.ping();
         }
 
         return true;
@@ -81653,27 +85659,27 @@ converse.plugins.add('converse-ping', {
     }, 1000);
     /************************ BEGIN Event Handlers ************************/
 
-    const onConnected = function onConnected() {
+    const onConnected = function () {
       // Wrapper so that we can spy on registerPingHandler in tests
       registerPongHandler();
       registerPingHandler();
     };
 
-    converse_core_api.listen.on('connected', onConnected);
-    converse_core_api.listen.on('reconnected', onConnected);
+    core_api.listen.on('connected', onConnected);
+    core_api.listen.on('reconnected', onConnected);
 
     function onWindowStateChanged(data) {
-      if (data.state === 'visible' && converse_core_api.connection.connected()) {
-        converse_core_api.ping(null, 5000);
+      if (data.state === 'visible' && core_api.connection.connected()) {
+        core_api.ping(null, 5000);
       }
     }
 
-    converse_core_api.listen.on('windowStateChanged', onWindowStateChanged);
+    core_api.listen.on('windowStateChanged', onWindowStateChanged);
     /************************ END Event Handlers ************************/
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_api, {
+    Object.assign(core_api, {
       /**
        * Pings the service represented by the passed in JID by sending an IQ stanza.
        * @private
@@ -81688,25 +85694,25 @@ converse.plugins.add('converse-ping', {
         //
         // const feature = _converse.disco_entities[_converse.domain].features.findWhere({'var': Strophe.NS.PING});
         lastStanzaDate = new Date();
-        jid = jid || converse_ping_Strophe.getDomainFromJid(converse_core_converse.bare_jid);
+        jid = jid || ping_Strophe.getDomainFromJid(core_converse.bare_jid);
 
-        if (converse_core_converse.connection) {
-          const iq = converse_ping_$iq({
+        if (core_converse.connection) {
+          const iq = ping_$iq({
             'type': 'get',
             'to': jid,
-            'id': converse_ping_u.getUniqueId('ping')
+            'id': ping_u.getUniqueId('ping')
           }).c('ping', {
-            'xmlns': converse_ping_Strophe.NS.PING
+            'xmlns': ping_Strophe.NS.PING
           });
-          const result = await converse_core_api.sendIQ(iq, timeout || 10000, false);
+          const result = await core_api.sendIQ(iq, timeout || 10000, false);
 
           if (result === null) {
             headless_log.warn("Timeout while pinging ".concat(jid));
 
-            if (jid === converse_ping_Strophe.getDomainFromJid(converse_core_converse.bare_jid)) {
-              converse_core_api.connection.reconnect();
+            if (jid === ping_Strophe.getDomainFromJid(core_converse.bare_jid)) {
+              core_api.connection.reconnect();
             }
-          } else if (converse_ping_u.isErrorStanza(result)) {
+          } else if (ping_u.isErrorStanza(result)) {
             headless_log.error("Error while pinging ".concat(jid));
             headless_log.error(result);
           }
@@ -81721,7 +85727,7 @@ converse.plugins.add('converse-ping', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-pubsub.js
+// CONCATENATED MODULE: ./src/headless/plugins/pubsub.js
 /**
  * @module converse-pubsub
  * @copyright The Converse.js contributors
@@ -81731,17 +85737,17 @@ converse.plugins.add('converse-ping', {
 
 
 const {
-  Strophe: converse_pubsub_Strophe,
-  $iq: converse_pubsub_$iq
+  Strophe: pubsub_Strophe,
+  $iq: pubsub_$iq
 } = converse.env;
-converse_pubsub_Strophe.addNamespace('PUBSUB_ERROR', converse_pubsub_Strophe.NS.PUBSUB + "#errors");
+pubsub_Strophe.addNamespace('PUBSUB_ERROR', pubsub_Strophe.NS.PUBSUB + "#errors");
 converse.plugins.add('converse-pubsub', {
   dependencies: ["converse-disco"],
 
   initialize() {
     /************************ BEGIN API ************************/
     // We extend the default converse.js API to add methods specific to MUC groupchats.
-    Object.assign(converse_core_converse.api, {
+    Object.assign(core_converse.api, {
       /**
        * The "pubsub" namespace groups methods relevant to PubSub
        *
@@ -81764,27 +85770,27 @@ converse.plugins.add('converse-pubsub', {
          *      the publish options precondication cannot be met.
          */
         async 'publish'(jid, node, item, options, strict_options = true) {
-          const stanza = converse_pubsub_$iq({
-            'from': converse_core_converse.bare_jid,
+          const stanza = pubsub_$iq({
+            'from': core_converse.bare_jid,
             'type': 'set',
             'to': jid
           }).c('pubsub', {
-            'xmlns': converse_pubsub_Strophe.NS.PUBSUB
+            'xmlns': pubsub_Strophe.NS.PUBSUB
           }).c('publish', {
             'node': node
           }).cnode(item.tree()).up().up();
 
           if (options) {
-            jid = jid || converse_core_converse.bare_jid;
+            jid = jid || core_converse.bare_jid;
 
-            if (await converse_core_api.disco.supports(converse_pubsub_Strophe.NS.PUBSUB + '#publish-options', jid)) {
+            if (await core_api.disco.supports(pubsub_Strophe.NS.PUBSUB + '#publish-options', jid)) {
               stanza.c('publish-options').c('x', {
-                'xmlns': converse_pubsub_Strophe.NS.XFORM,
+                'xmlns': pubsub_Strophe.NS.XFORM,
                 'type': 'submit'
               }).c('field', {
                 'var': 'FORM_TYPE',
                 'type': 'hidden'
-              }).c('value').t("".concat(converse_pubsub_Strophe.NS.PUBSUB, "#publish-options")).up().up();
+              }).c('value').t("".concat(pubsub_Strophe.NS.PUBSUB, "#publish-options")).up().up();
               Object.keys(options).forEach(k => stanza.c('field', {
                 'var': k
               }).c('value').t(options[k]).up().up());
@@ -81794,15 +85800,15 @@ converse.plugins.add('converse-pubsub', {
           }
 
           try {
-            await converse_core_api.sendIQ(stanza);
+            await core_api.sendIQ(stanza);
           } catch (iq) {
-            if (iq instanceof Element && strict_options && iq.querySelector("precondition-not-met[xmlns=\"".concat(converse_pubsub_Strophe.NS.PUBSUB_ERROR, "\"]"))) {
+            if (iq instanceof Element && strict_options && iq.querySelector("precondition-not-met[xmlns=\"".concat(pubsub_Strophe.NS.PUBSUB_ERROR, "\"]"))) {
               // The publish-options precondition couldn't be
               // met. We re-publish but without publish-options.
               const el = stanza.nodeTree;
               el.querySelector('publish-options').outerHTML = '';
               headless_log.warn("PubSub: Republishing without publish options. ".concat(el.outerHTML));
-              await converse_core_api.sendIQ(el);
+              await core_api.sendIQ(el);
             } else {
               throw iq;
             }
@@ -81895,7 +85901,7 @@ function isNaN_isNaN(value) {
 
 /* harmony default export */ var lodash_es_isNaN = (isNaN_isNaN);
 
-// CONCATENATED MODULE: ./src/headless/converse-status.js
+// CONCATENATED MODULE: ./src/headless/plugins/status.js
 /**
  * @module converse-status
  * @copyright The Converse.js contributors
@@ -81905,13 +85911,13 @@ function isNaN_isNaN(value) {
 
 
 const {
-  Strophe: converse_status_Strophe,
-  $build: converse_status_$build,
-  $pres: converse_status_$pres
+  Strophe: status_Strophe,
+  $build: status_$build,
+  $pres
 } = converse.env;
 converse.plugins.add('converse-status', {
   initialize() {
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       auto_away: 0,
       // Seconds after which user status is set to 'away'
       auto_xa: 0,
@@ -81921,11 +85927,11 @@ converse.plugins.add('converse-status', {
       default_state: 'online',
       priority: 0
     });
-    converse_core_api.promises.add(['statusInitialized']);
-    converse_core_converse.XMPPStatus = model_Model.extend({
+    core_api.promises.add(['statusInitialized']);
+    core_converse.XMPPStatus = model_Model.extend({
       defaults() {
         return {
-          "status": converse_core_api.settings.get("default_state")
+          "status": core_api.settings.get("default_state")
         };
       },
 
@@ -81936,13 +85942,13 @@ converse.plugins.add('converse-status', {
           }
 
           if ('status' in item.changed || 'status_message' in item.changed) {
-            converse_core_api.user.presence.send(this.get('status'), null, this.get('status_message'));
+            core_api.user.presence.send(this.get('status'), null, this.get('status_message'));
           }
         });
       },
 
       getNickname() {
-        return converse_core_converse.nickname;
+        return core_converse.nickname;
       },
 
       getFullname() {
@@ -81951,7 +85957,7 @@ converse.plugins.add('converse-status', {
       },
 
       constructPresence(type, to = null, status_message) {
-        type = typeof type === 'string' ? type : this.get('status') || converse_core_api.settings.get("default_state");
+        type = typeof type === 'string' ? type : this.get('status') || core_api.settings.get("default_state");
         status_message = typeof status_message === 'string' ? status_message : this.get('status_message');
         let presence;
         const attrs = {
@@ -81960,28 +85966,28 @@ converse.plugins.add('converse-status', {
 
         if (type === 'unavailable' || type === 'probe' || type === 'error' || type === 'unsubscribe' || type === 'unsubscribed' || type === 'subscribe' || type === 'subscribed') {
           attrs['type'] = type;
-          presence = converse_status_$pres(attrs);
+          presence = $pres(attrs);
         } else if (type === 'offline') {
           attrs['type'] = 'unavailable';
-          presence = converse_status_$pres(attrs);
+          presence = $pres(attrs);
         } else if (type === 'online') {
-          presence = converse_status_$pres(attrs);
+          presence = $pres(attrs);
         } else {
-          presence = converse_status_$pres(attrs).c('show').t(type).up();
+          presence = $pres(attrs).c('show').t(type).up();
         }
 
         if (status_message) {
           presence.c('status').t(status_message).up();
         }
 
-        const priority = converse_core_api.settings.get("priority");
+        const priority = core_api.settings.get("priority");
         presence.c('priority').t(lodash_es_isNaN(Number(priority)) ? 0 : priority).up();
 
-        if (converse_core_converse.idle) {
+        if (core_converse.idle) {
           const idle_since = new Date();
-          idle_since.setSeconds(idle_since.getSeconds() - converse_core_converse.idle_seconds);
+          idle_since.setSeconds(idle_since.getSeconds() - core_converse.idle_seconds);
           presence.c('idle', {
-            xmlns: converse_status_Strophe.NS.IDLE,
+            xmlns: status_Strophe.NS.IDLE,
             since: idle_since.toISOString()
           });
         }
@@ -81998,114 +86004,114 @@ converse.plugins.add('converse-status', {
      * @param { String } stat - The user's chat status
      */
 
-    converse_core_converse.sendCSI = function (stat) {
-      converse_core_api.send(converse_status_$build(stat, {
-        xmlns: converse_status_Strophe.NS.CSI
+    core_converse.sendCSI = function (stat) {
+      core_api.send(status_$build(stat, {
+        xmlns: status_Strophe.NS.CSI
       }));
-      converse_core_converse.inactive = stat === converse_core_converse.INACTIVE ? true : false;
+      core_converse.inactive = stat === core_converse.INACTIVE ? true : false;
     };
 
-    converse_core_converse.onUserActivity = function () {
+    core_converse.onUserActivity = function () {
       var _converse$connection;
 
       /* Resets counters and flags relating to CSI and auto_away/auto_xa */
-      if (converse_core_converse.idle_seconds > 0) {
-        converse_core_converse.idle_seconds = 0;
+      if (core_converse.idle_seconds > 0) {
+        core_converse.idle_seconds = 0;
       }
 
-      if (!((_converse$connection = converse_core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.authenticated)) {
+      if (!((_converse$connection = core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.authenticated)) {
         // We can't send out any stanzas when there's no authenticated connection.
         // This can happen when the connection reconnects.
         return;
       }
 
-      if (converse_core_converse.inactive) {
-        converse_core_converse.sendCSI(converse_core_converse.ACTIVE);
+      if (core_converse.inactive) {
+        core_converse.sendCSI(core_converse.ACTIVE);
       }
 
-      if (converse_core_converse.idle) {
-        converse_core_converse.idle = false;
-        converse_core_api.user.presence.send();
+      if (core_converse.idle) {
+        core_converse.idle = false;
+        core_api.user.presence.send();
       }
 
-      if (converse_core_converse.auto_changed_status === true) {
-        converse_core_converse.auto_changed_status = false; // XXX: we should really remember the original state here, and
+      if (core_converse.auto_changed_status === true) {
+        core_converse.auto_changed_status = false; // XXX: we should really remember the original state here, and
         // then set it back to that...
 
-        converse_core_converse.xmppstatus.set('status', converse_core_api.settings.get("default_state"));
+        core_converse.xmppstatus.set('status', core_api.settings.get("default_state"));
       }
     };
 
-    converse_core_converse.onEverySecond = function () {
+    core_converse.onEverySecond = function () {
       var _converse$connection2;
 
       /* An interval handler running every second.
        * Used for CSI and the auto_away and auto_xa features.
        */
-      if (!((_converse$connection2 = converse_core_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.authenticated)) {
+      if (!((_converse$connection2 = core_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.authenticated)) {
         // We can't send out any stanzas when there's no authenticated connection.
         // This can happen when the connection reconnects.
         return;
       }
 
-      const stat = converse_core_converse.xmppstatus.get('status');
+      const stat = core_converse.xmppstatus.get('status');
 
-      converse_core_converse.idle_seconds++;
+      core_converse.idle_seconds++;
 
-      if (converse_core_api.settings.get("csi_waiting_time") > 0 && converse_core_converse.idle_seconds > converse_core_api.settings.get("csi_waiting_time") && !converse_core_converse.inactive) {
-        converse_core_converse.sendCSI(converse_core_converse.INACTIVE);
+      if (core_api.settings.get("csi_waiting_time") > 0 && core_converse.idle_seconds > core_api.settings.get("csi_waiting_time") && !core_converse.inactive) {
+        core_converse.sendCSI(core_converse.INACTIVE);
       }
 
-      if (converse_core_api.settings.get("idle_presence_timeout") > 0 && converse_core_converse.idle_seconds > converse_core_api.settings.get("idle_presence_timeout") && !converse_core_converse.idle) {
-        converse_core_converse.idle = true;
-        converse_core_api.user.presence.send();
+      if (core_api.settings.get("idle_presence_timeout") > 0 && core_converse.idle_seconds > core_api.settings.get("idle_presence_timeout") && !core_converse.idle) {
+        core_converse.idle = true;
+        core_api.user.presence.send();
       }
 
-      if (converse_core_api.settings.get("auto_away") > 0 && converse_core_converse.idle_seconds > converse_core_api.settings.get("auto_away") && stat !== 'away' && stat !== 'xa' && stat !== 'dnd') {
-        converse_core_converse.auto_changed_status = true;
+      if (core_api.settings.get("auto_away") > 0 && core_converse.idle_seconds > core_api.settings.get("auto_away") && stat !== 'away' && stat !== 'xa' && stat !== 'dnd') {
+        core_converse.auto_changed_status = true;
 
-        converse_core_converse.xmppstatus.set('status', 'away');
-      } else if (converse_core_api.settings.get("auto_xa") > 0 && converse_core_converse.idle_seconds > converse_core_api.settings.get("auto_xa") && stat !== 'xa' && stat !== 'dnd') {
-        converse_core_converse.auto_changed_status = true;
+        core_converse.xmppstatus.set('status', 'away');
+      } else if (core_api.settings.get("auto_xa") > 0 && core_converse.idle_seconds > core_api.settings.get("auto_xa") && stat !== 'xa' && stat !== 'dnd') {
+        core_converse.auto_changed_status = true;
 
-        converse_core_converse.xmppstatus.set('status', 'xa');
+        core_converse.xmppstatus.set('status', 'xa');
       }
     };
 
-    converse_core_converse.registerIntervalHandler = function () {
+    core_converse.registerIntervalHandler = function () {
       /* Set an interval of one second and register a handler for it.
        * Required for the auto_away, auto_xa and csi_waiting_time features.
        */
-      if (converse_core_api.settings.get("auto_away") < 1 && converse_core_api.settings.get("auto_xa") < 1 && converse_core_api.settings.get("csi_waiting_time") < 1 && converse_core_api.settings.get("idle_presence_timeout") < 1) {
+      if (core_api.settings.get("auto_away") < 1 && core_api.settings.get("auto_xa") < 1 && core_api.settings.get("csi_waiting_time") < 1 && core_api.settings.get("idle_presence_timeout") < 1) {
         // Waiting time of less then one second means features aren't used.
         return;
       }
 
-      converse_core_converse.idle_seconds = 0;
-      converse_core_converse.auto_changed_status = false; // Was the user's status changed by Converse?
+      core_converse.idle_seconds = 0;
+      core_converse.auto_changed_status = false; // Was the user's status changed by Converse?
 
       const {
         unloadevent
-      } = converse_core_converse;
-      window.addEventListener('click', converse_core_converse.onUserActivity);
-      window.addEventListener('focus', converse_core_converse.onUserActivity);
-      window.addEventListener('keypress', converse_core_converse.onUserActivity);
-      window.addEventListener('mousemove', converse_core_converse.onUserActivity);
-      window.addEventListener(unloadevent, converse_core_converse.onUserActivity, {
+      } = core_converse;
+      window.addEventListener('click', core_converse.onUserActivity);
+      window.addEventListener('focus', core_converse.onUserActivity);
+      window.addEventListener('keypress', core_converse.onUserActivity);
+      window.addEventListener('mousemove', core_converse.onUserActivity);
+      window.addEventListener(unloadevent, core_converse.onUserActivity, {
         'once': true,
         'passive': true
       });
       window.addEventListener(unloadevent, () => {
         var _converse$session;
 
-        return (_converse$session = converse_core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.save('active', false);
+        return (_converse$session = core_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.save('active', false);
       });
-      converse_core_converse.everySecondTrigger = window.setInterval(converse_core_converse.onEverySecond, 1000);
+      core_converse.everySecondTrigger = window.setInterval(core_converse.onEverySecond, 1000);
     };
 
-    converse_core_api.listen.on('presencesInitialized', reconnecting => {
+    core_api.listen.on('presencesInitialized', reconnecting => {
       if (!reconnecting) {
-        converse_core_converse.registerIntervalHandler();
+        core_converse.registerIntervalHandler();
       }
     });
 
@@ -82116,24 +86122,24 @@ converse.plugins.add('converse-status', {
        * @example _converse.api.listen.on('statusInitialized', status => { ... });
        * @example _converse.api.waitUntil('statusInitialized').then(() => { ... });
        */
-      converse_core_api.trigger('statusInitialized', reconnecting);
+      core_api.trigger('statusInitialized', reconnecting);
     }
 
     function initStatus(reconnecting) {
       // If there's no xmppstatus obj, then we were never connected to
       // begin with, so we set reconnecting to false.
-      reconnecting = converse_core_converse.xmppstatus === undefined ? false : reconnecting;
+      reconnecting = core_converse.xmppstatus === undefined ? false : reconnecting;
 
       if (reconnecting) {
         onStatusInitialized(reconnecting);
       } else {
-        const id = "converse.xmppstatus-".concat(converse_core_converse.bare_jid);
-        converse_core_converse.xmppstatus = new converse_core_converse.XMPPStatus({
+        const id = "converse.xmppstatus-".concat(core_converse.bare_jid);
+        core_converse.xmppstatus = new core_converse.XMPPStatus({
           'id': id
         });
-        converse_core_converse.xmppstatus.browserStorage = converse_core_converse.createStore(id, "session");
+        core_converse.xmppstatus.browserStorage = core_converse.createStore(id, "session");
 
-        converse_core_converse.xmppstatus.fetch({
+        core_converse.xmppstatus.fetch({
           'success': () => onStatusInitialized(reconnecting),
           'error': () => onStatusInitialized(reconnecting),
           'silent': true
@@ -82143,21 +86149,21 @@ converse.plugins.add('converse-status', {
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.shouldClearCache() && converse_core_converse.xmppstatus) {
-        converse_core_converse.xmppstatus.destroy();
+    core_api.listen.on('clearSession', () => {
+      if (core_converse.shouldClearCache() && core_converse.xmppstatus) {
+        core_converse.xmppstatus.destroy();
 
-        delete converse_core_converse.xmppstatus;
-        converse_core_api.promises.add(['statusInitialized']);
+        delete core_converse.xmppstatus;
+        core_api.promises.add(['statusInitialized']);
       }
     });
-    converse_core_api.listen.on('connected', () => initStatus(false));
-    converse_core_api.listen.on('reconnected', () => initStatus(true));
+    core_api.listen.on('connected', () => initStatus(false));
+    core_api.listen.on('reconnected', () => initStatus(true));
     /************************ END Event Handlers ************************/
 
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_converse.api.user, {
+    Object.assign(core_converse.api.user, {
       /**
        * @namespace _converse.api.user.presence
        * @memberOf _converse.api.user
@@ -82171,8 +86177,8 @@ converse.plugins.add('converse-status', {
          * @param { String } [status] - An optional status message
          */
         async send(type, to, status) {
-          await converse_core_api.waitUntil('statusInitialized');
-          converse_core_api.send(converse_core_converse.xmppstatus.constructPresence(type, to, status));
+          await core_api.waitUntil('statusInitialized');
+          core_api.send(core_converse.xmppstatus.constructPresence(type, to, status));
         }
 
       },
@@ -82190,8 +86196,8 @@ converse.plugins.add('converse-status', {
          * @example _converse.api.user.status.get();
          */
         async get() {
-          await converse_core_api.waitUntil('statusInitialized');
-          return converse_core_converse.xmppstatus.get('status');
+          await core_api.waitUntil('statusInitialized');
+          return core_converse.xmppstatus.get('status');
         },
 
         /**
@@ -82210,7 +86216,7 @@ converse.plugins.add('converse-status', {
             'status': value
           };
 
-          if (!Object.keys(converse_core_converse.STATUS_WEIGHTS).includes(value)) {
+          if (!Object.keys(core_converse.STATUS_WEIGHTS).includes(value)) {
             throw new Error('Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1');
           }
 
@@ -82218,9 +86224,9 @@ converse.plugins.add('converse-status', {
             data.status_message = message;
           }
 
-          await converse_core_api.waitUntil('statusInitialized');
+          await core_api.waitUntil('statusInitialized');
 
-          converse_core_converse.xmppstatus.save(data);
+          core_converse.xmppstatus.save(data);
         },
 
         /**
@@ -82237,8 +86243,8 @@ converse.plugins.add('converse-status', {
            * @example const message = _converse.api.user.status.message.get()
            */
           async get() {
-            await converse_core_api.waitUntil('statusInitialized');
-            return converse_core_converse.xmppstatus.get('status_message');
+            await core_api.waitUntil('statusInitialized');
+            return core_converse.xmppstatus.get('status_message');
           },
 
           /**
@@ -82248,9 +86254,9 @@ converse.plugins.add('converse-status', {
            * @example _converse.api.user.status.message.set('In a meeting');
            */
           async set(status) {
-            await converse_core_api.waitUntil('statusInitialized');
+            await core_api.waitUntil('statusInitialized');
 
-            converse_core_converse.xmppstatus.save({
+            core_converse.xmppstatus.save({
               status_message: status
             });
           }
@@ -82345,7 +86351,7 @@ function sum(array) {
 
 /* harmony default export */ var lodash_es_sum = (sum);
 
-// CONCATENATED MODULE: ./src/headless/converse-roster.js
+// CONCATENATED MODULE: ./src/headless/plugins/roster.js
 /**
  * @module converse-roster
  * @copyright The Converse.js contributors
@@ -82358,13 +86364,13 @@ function sum(array) {
 
 
 const {
-  Strophe: converse_roster_Strophe,
-  $iq: converse_roster_$iq,
-  $pres: converse_roster_$pres,
-  dayjs: converse_roster_dayjs,
-  sizzle: converse_roster_sizzle
+  Strophe: roster_Strophe,
+  $iq: roster_$iq,
+  $pres: roster_$pres,
+  dayjs: roster_dayjs,
+  sizzle: roster_sizzle
 } = converse.env;
-const converse_roster_u = converse.env.utils;
+const roster_u = converse.env.utils;
 converse.plugins.add('converse-roster', {
   dependencies: ['converse-status'],
 
@@ -82374,30 +86380,30 @@ converse.plugins.add('converse-roster', {
      */
     const {
       __
-    } = converse_core_converse;
-    converse_core_api.settings.extend({
+    } = core_converse;
+    core_api.settings.extend({
       'allow_contact_requests': true,
       'auto_subscribe': false,
       'synchronize_availability': true
     });
-    converse_core_api.promises.add(['cachedRoster', 'roster', 'rosterContactsFetched', 'rosterGroupsFetched', 'rosterInitialized']);
-    converse_core_converse.HEADER_CURRENT_CONTACTS = __('My contacts');
-    converse_core_converse.HEADER_PENDING_CONTACTS = __('Pending contacts');
-    converse_core_converse.HEADER_REQUESTING_CONTACTS = __('Contact requests');
-    converse_core_converse.HEADER_UNGROUPED = __('Ungrouped');
-    converse_core_converse.HEADER_UNREAD = __('New messages');
+    core_api.promises.add(['cachedRoster', 'roster', 'rosterContactsFetched', 'rosterGroupsFetched', 'rosterInitialized']);
+    core_converse.HEADER_CURRENT_CONTACTS = __('My contacts');
+    core_converse.HEADER_PENDING_CONTACTS = __('Pending contacts');
+    core_converse.HEADER_REQUESTING_CONTACTS = __('Contact requests');
+    core_converse.HEADER_UNGROUPED = __('Ungrouped');
+    core_converse.HEADER_UNREAD = __('New messages');
     const HEADER_WEIGHTS = {};
-    HEADER_WEIGHTS[converse_core_converse.HEADER_UNREAD] = 0;
-    HEADER_WEIGHTS[converse_core_converse.HEADER_REQUESTING_CONTACTS] = 1;
-    HEADER_WEIGHTS[converse_core_converse.HEADER_CURRENT_CONTACTS] = 2;
-    HEADER_WEIGHTS[converse_core_converse.HEADER_UNGROUPED] = 3;
-    HEADER_WEIGHTS[converse_core_converse.HEADER_PENDING_CONTACTS] = 4;
+    HEADER_WEIGHTS[core_converse.HEADER_UNREAD] = 0;
+    HEADER_WEIGHTS[core_converse.HEADER_REQUESTING_CONTACTS] = 1;
+    HEADER_WEIGHTS[core_converse.HEADER_CURRENT_CONTACTS] = 2;
+    HEADER_WEIGHTS[core_converse.HEADER_UNGROUPED] = 3;
+    HEADER_WEIGHTS[core_converse.HEADER_PENDING_CONTACTS] = 4;
 
-    converse_core_converse.registerPresenceHandler = function () {
-      converse_core_converse.unregisterPresenceHandler();
+    core_converse.registerPresenceHandler = function () {
+      core_converse.unregisterPresenceHandler();
 
-      converse_core_converse.presence_ref = converse_core_converse.connection.addHandler(presence => {
-        converse_core_converse.roster.presenceHandler(presence);
+      core_converse.presence_ref = core_converse.connection.addHandler(presence => {
+        core_converse.roster.presenceHandler(presence);
 
         return true;
       }, null, 'presence', null);
@@ -82412,8 +86418,8 @@ converse.plugins.add('converse-roster', {
      */
 
 
-    converse_core_converse.rejectPresenceSubscription = function (jid, message) {
-      const pres = converse_roster_$pres({
+    core_converse.rejectPresenceSubscription = function (jid, message) {
+      const pres = roster_$pres({
         to: jid,
         type: "unsubscribed"
       });
@@ -82422,12 +86428,12 @@ converse.plugins.add('converse-roster', {
         pres.c("status").t(message);
       }
 
-      converse_core_api.send(pres);
+      core_api.send(pres);
     };
 
-    converse_core_converse.sendInitialPresence = function () {
-      if (converse_core_converse.send_initial_presence) {
-        converse_core_api.user.presence.send();
+    core_converse.sendInitialPresence = function () {
+      if (core_converse.send_initial_presence) {
+        core_api.user.presence.send();
       }
     };
     /**
@@ -82441,13 +86447,13 @@ converse.plugins.add('converse-roster', {
      */
 
 
-    converse_core_converse.populateRoster = async function (ignore_cache = false) {
+    core_converse.populateRoster = async function (ignore_cache = false) {
       if (ignore_cache) {
-        converse_core_converse.send_initial_presence = true;
+        core_converse.send_initial_presence = true;
       }
 
       try {
-        await converse_core_converse.rostergroups.fetchRosterGroups();
+        await core_converse.rostergroups.fetchRosterGroups();
         /**
          * Triggered once roster groups have been fetched. Used by the
          * `converse-rosterview.js` plugin to know when it can start alphabetically
@@ -82457,23 +86463,23 @@ converse.plugins.add('converse-roster', {
          * @example _converse.api.waitUntil('rosterGroupsFetched').then(() => { ... });
          */
 
-        converse_core_api.trigger('rosterGroupsFetched');
-        await converse_core_converse.roster.fetchRosterContacts();
-        converse_core_api.trigger('rosterContactsFetched');
+        core_api.trigger('rosterGroupsFetched');
+        await core_converse.roster.fetchRosterContacts();
+        core_api.trigger('rosterContactsFetched');
       } catch (reason) {
         headless_log.error(reason);
       } finally {
-        converse_core_converse.sendInitialPresence();
+        core_converse.sendInitialPresence();
       }
     };
 
     const Resource = model_Model.extend({
       'idAttribute': 'name'
     });
-    const Resources = collection_Collection.extend({
+    const Resources = Collection.extend({
       'model': Resource
     });
-    converse_core_converse.Presence = model_Model.extend({
+    core_converse.Presence = model_Model.extend({
       defaults: {
         'show': 'offline'
       },
@@ -82481,7 +86487,7 @@ converse.plugins.add('converse-roster', {
       initialize() {
         this.resources = new Resources();
         const id = "converse.identities-".concat(this.get('jid'));
-        this.resources.browserStorage = converse_core_converse.createStore(id, "session");
+        this.resources.browserStorage = core_converse.createStore(id, "session");
         this.listenTo(this.resources, 'update', this.onResourcesChanged);
         this.listenTo(this.resources, 'change', this.onResourcesChanged);
       },
@@ -82517,15 +86523,15 @@ converse.plugins.add('converse-roster', {
        */
       addResource(presence) {
         const jid = presence.getAttribute('from'),
-              name = converse_roster_Strophe.getResourceFromJid(jid),
-              delay = converse_roster_sizzle("delay[xmlns=\"".concat(converse_roster_Strophe.NS.DELAY, "\"]"), presence).pop(),
+              name = roster_Strophe.getResourceFromJid(jid),
+              delay = roster_sizzle("delay[xmlns=\"".concat(roster_Strophe.NS.DELAY, "\"]"), presence).pop(),
               priority = lodash_es_propertyOf(presence.querySelector('priority'))('textContent') || 0,
               resource = this.resources.get(name),
               settings = {
           'name': name,
           'priority': lodash_es_isNaN(parseInt(priority, 10)) ? 0 : parseInt(priority, 10),
           'show': lodash_es_propertyOf(presence.querySelector('show'))('textContent') || 'online',
-          'timestamp': delay ? converse_roster_dayjs(delay.getAttribute('stamp')).toISOString() : new Date().toISOString()
+          'timestamp': delay ? roster_dayjs(delay.getAttribute('stamp')).toISOString() : new Date().toISOString()
         };
 
         if (resource) {
@@ -82551,8 +86557,8 @@ converse.plugins.add('converse-roster', {
       }
 
     });
-    converse_core_converse.Presences = collection_Collection.extend({
-      model: converse_core_converse.Presence
+    core_converse.Presences = Collection.extend({
+      model: core_converse.Presence
     });
     /**
      * @class
@@ -82560,28 +86566,28 @@ converse.plugins.add('converse-roster', {
      * @memberOf _converse
      */
 
-    converse_core_converse.RosterContact = model_Model.extend({
+    core_converse.RosterContact = model_Model.extend({
       defaults: {
         'chat_state': undefined,
-        'image': converse_core_converse.DEFAULT_IMAGE,
-        'image_type': converse_core_converse.DEFAULT_IMAGE_TYPE,
+        'image': core_converse.DEFAULT_IMAGE,
+        'image_type': core_converse.DEFAULT_IMAGE_TYPE,
         'num_unread': 0,
         'status': undefined
       },
 
       async initialize(attributes) {
-        this.initialized = converse_roster_u.getResolveablePromise();
+        this.initialized = roster_u.getResolveablePromise();
         this.setPresence();
         const {
           jid
         } = attributes;
-        const bare_jid = converse_roster_Strophe.getBareJidFromJid(jid).toLowerCase();
+        const bare_jid = roster_Strophe.getBareJidFromJid(jid).toLowerCase();
         attributes.jid = bare_jid;
         this.set(Object.assign({
           'groups': [],
           'id': bare_jid,
           'jid': bare_jid,
-          'user_id': converse_roster_Strophe.getNodeFromJid(jid)
+          'user_id': roster_Strophe.getNodeFromJid(jid)
         }, attributes));
         /**
          * When a contact's presence status has changed.
@@ -82591,7 +86597,7 @@ converse.plugins.add('converse-roster', {
          * @example _converse.api.listen.on('contactPresenceChanged', contact => { ... });
          */
 
-        this.listenTo(this.presence, 'change:show', () => converse_core_api.trigger('contactPresenceChanged', this));
+        this.listenTo(this.presence, 'change:show', () => core_api.trigger('contactPresenceChanged', this));
         this.listenTo(this.presence, 'change:show', () => this.trigger('presenceChanged'));
         /**
          * Synchronous event which provides a hook for further initializing a RosterContact
@@ -82599,7 +86605,7 @@ converse.plugins.add('converse-roster', {
          * @param { _converse.RosterContact } contact
          */
 
-        await converse_core_api.trigger('rosterContactInitialized', this, {
+        await core_api.trigger('rosterContactInitialized', this, {
           'Synchronous': true
         });
         this.initialized.resolve();
@@ -82607,16 +86613,16 @@ converse.plugins.add('converse-roster', {
 
       setPresence() {
         const jid = this.get('jid');
-        this.presence = converse_core_converse.presences.findWhere({
+        this.presence = core_converse.presences.findWhere({
           'jid': jid
-        }) || converse_core_converse.presences.create({
+        }) || core_converse.presences.create({
           'jid': jid
         });
       },
 
       openChat() {
         const attrs = this.attributes;
-        converse_core_api.chats.open(attrs.jid, attrs, true);
+        core_api.chats.open(attrs.jid, attrs, true);
       },
 
       /**
@@ -82658,7 +86664,7 @@ converse.plugins.add('converse-roster', {
        *      reason for the subscription request.
        */
       subscribe(message) {
-        const pres = converse_roster_$pres({
+        const pres = roster_$pres({
           to: this.get('jid'),
           type: "subscribe"
         });
@@ -82667,15 +86673,15 @@ converse.plugins.add('converse-roster', {
           pres.c("status").t(message).up();
         }
 
-        const nick = converse_core_converse.xmppstatus.getNickname() || converse_core_converse.xmppstatus.getFullname();
+        const nick = core_converse.xmppstatus.getNickname() || core_converse.xmppstatus.getFullname();
 
         if (nick) {
           pres.c('nick', {
-            'xmlns': converse_roster_Strophe.NS.NICK
+            'xmlns': roster_Strophe.NS.NICK
           }).t(nick).up();
         }
 
-        converse_core_api.send(pres);
+        core_api.send(pres);
         this.save('ask', "subscribe"); // ask === 'subscribe' Means we have asked to subscribe to them.
 
         return this;
@@ -82690,7 +86696,7 @@ converse.plugins.add('converse-roster', {
        * @method _converse.RosterContacts#ackSubscribe
        */
       ackSubscribe() {
-        converse_core_api.send(converse_roster_$pres({
+        core_api.send(roster_$pres({
           'type': 'subscribe',
           'to': this.get('jid')
         }));
@@ -82707,7 +86713,7 @@ converse.plugins.add('converse-roster', {
        * @param { String } jid - The Jabber ID of the user who is unsubscribing
        */
       ackUnsubscribe() {
-        converse_core_api.send(converse_roster_$pres({
+        core_api.send(roster_$pres({
           'type': 'unsubscribe',
           'to': this.get('jid')
         }));
@@ -82722,7 +86728,7 @@ converse.plugins.add('converse-roster', {
        * @param { String } message - Optional message to send to the person being unauthorized
        */
       unauthorize(message) {
-        converse_core_converse.rejectPresenceSubscription(this.get('jid'), message);
+        core_converse.rejectPresenceSubscription(this.get('jid'), message);
 
         return this;
       },
@@ -82734,7 +86740,7 @@ converse.plugins.add('converse-roster', {
        * @param { String } message - Optional message to send to the person being authorized
        */
       authorize(message) {
-        const pres = converse_roster_$pres({
+        const pres = roster_$pres({
           'to': this.get('jid'),
           'type': "subscribed"
         });
@@ -82743,7 +86749,7 @@ converse.plugins.add('converse-roster', {
           pres.c("status").t(message);
         }
 
-        converse_core_api.send(pres);
+        core_api.send(pres);
         return this;
       },
 
@@ -82754,15 +86760,15 @@ converse.plugins.add('converse-roster', {
        * @returns { Promise }
        */
       removeFromRoster() {
-        const iq = converse_roster_$iq({
+        const iq = roster_$iq({
           type: 'set'
         }).c('query', {
-          xmlns: converse_roster_Strophe.NS.ROSTER
+          xmlns: roster_Strophe.NS.ROSTER
         }).c('item', {
           jid: this.get('jid'),
           subscription: "remove"
         });
-        return converse_core_api.sendIQ(iq);
+        return core_api.sendIQ(iq);
       }
 
     });
@@ -82772,8 +86778,8 @@ converse.plugins.add('converse-roster', {
      * @memberOf _converse
      */
 
-    converse_core_converse.RosterContacts = collection_Collection.extend({
-      model: converse_core_converse.RosterContact,
+    core_converse.RosterContacts = Collection.extend({
+      model: core_converse.RosterContact,
 
       comparator(contact1, contact2) {
         // Groups are sorted alphabetically, ignoring case.
@@ -82782,12 +86788,12 @@ converse.plugins.add('converse-roster', {
         const status1 = contact1.presence.get('show') || 'offline';
         const status2 = contact2.presence.get('show') || 'offline';
 
-        if (converse_core_converse.STATUS_WEIGHTS[status1] === converse_core_converse.STATUS_WEIGHTS[status2]) {
+        if (core_converse.STATUS_WEIGHTS[status1] === core_converse.STATUS_WEIGHTS[status2]) {
           const name1 = contact1.getDisplayName().toLowerCase();
           const name2 = contact2.getDisplayName().toLowerCase();
           return name1 < name2 ? -1 : name1 > name2 ? 1 : 0;
         } else {
-          return converse_core_converse.STATUS_WEIGHTS[status1] < converse_core_converse.STATUS_WEIGHTS[status2] ? -1 : 1;
+          return core_converse.STATUS_WEIGHTS[status1] < core_converse.STATUS_WEIGHTS[status2] ? -1 : 1;
         }
       },
 
@@ -82802,11 +86808,11 @@ converse.plugins.add('converse-roster', {
       registerRosterHandler() {
         // Register a handler for roster IQ "set" stanzas, which update
         // roster contacts.
-        converse_core_converse.connection.addHandler(iq => {
-          converse_core_converse.roster.onRosterPush(iq);
+        core_converse.connection.addHandler(iq => {
+          core_converse.roster.onRosterPush(iq);
 
           return true;
-        }, converse_roster_Strophe.NS.ROSTER, 'iq', "set");
+        }, roster_Strophe.NS.ROSTER, 'iq', "set");
       },
 
       registerRosterXHandler() {
@@ -82814,15 +86820,15 @@ converse.plugins.add('converse-roster', {
         // used to suggest roster contacts to a user.
         let t = 0;
 
-        converse_core_converse.connection.addHandler(function (msg) {
+        core_converse.connection.addHandler(function (msg) {
           window.setTimeout(function () {
-            converse_core_converse.connection.flush();
+            core_converse.connection.flush();
 
-            converse_core_converse.roster.subscribeToSuggestedItems.bind(converse_core_converse.roster)(msg);
+            core_converse.roster.subscribeToSuggestedItems.bind(core_converse.roster)(msg);
           }, t);
           t += msg.querySelectorAll('item').length * 250;
           return true;
-        }, converse_roster_Strophe.NS.ROSTERX, 'message', null);
+        }, roster_Strophe.NS.ROSTERX, 'message', null);
       },
 
       /**
@@ -82841,15 +86847,15 @@ converse.plugins.add('converse-roster', {
           });
         });
 
-        if (converse_roster_u.isErrorObject(result)) {
+        if (roster_u.isErrorObject(result)) {
           headless_log.error(result); // Force a full roster refresh
 
-          converse_core_converse.session.set('roster_cached', false);
+          core_converse.session.set('roster_cached', false);
 
           this.data.save('version', undefined);
         }
 
-        if (converse_core_converse.session.get('roster_cached')) {
+        if (core_converse.session.get('roster_cached')) {
           /**
            * The contacts roster has been retrieved from the local cache (`sessionStorage`).
            * @event _converse#cachedRoster
@@ -82857,24 +86863,24 @@ converse.plugins.add('converse-roster', {
            * @example _converse.api.listen.on('cachedRoster', (items) => { ... });
            * @example _converse.api.waitUntil('cachedRoster').then(items => { ... });
            */
-          converse_core_api.trigger('cachedRoster', result);
+          core_api.trigger('cachedRoster', result);
         } else {
-          converse_core_converse.send_initial_presence = true;
-          return converse_core_converse.roster.fetchFromServer();
+          core_converse.send_initial_presence = true;
+          return core_converse.roster.fetchFromServer();
         }
       },
 
       subscribeToSuggestedItems(msg) {
         Array.from(msg.querySelectorAll('item')).forEach(item => {
           if (item.getAttribute('action') === 'add') {
-            converse_core_converse.roster.addAndSubscribe(item.getAttribute('jid'), converse_core_converse.xmppstatus.getNickname() || converse_core_converse.xmppstatus.getFullname());
+            core_converse.roster.addAndSubscribe(item.getAttribute('jid'), core_converse.xmppstatus.getNickname() || core_converse.xmppstatus.getFullname());
           }
         });
         return true;
       },
 
       isSelf(jid) {
-        return converse_roster_u.isSameBareJID(jid, converse_core_converse.connection.jid);
+        return roster_u.isSameBareJID(jid, core_converse.connection.jid);
       },
 
       /**
@@ -82891,7 +86897,7 @@ converse.plugins.add('converse-roster', {
       async addAndSubscribe(jid, name, groups, message, attributes) {
         const contact = await this.addContactToRoster(jid, name, groups, attributes);
 
-        if (contact instanceof converse_core_converse.RosterContact) {
+        if (contact instanceof core_converse.RosterContact) {
           contact.subscribe(message);
         }
       },
@@ -82908,16 +86914,16 @@ converse.plugins.add('converse-roster', {
        */
       sendContactAddIQ(jid, name, groups) {
         name = name ? name : null;
-        const iq = converse_roster_$iq({
+        const iq = roster_$iq({
           'type': 'set'
         }).c('query', {
-          'xmlns': converse_roster_Strophe.NS.ROSTER
+          'xmlns': roster_Strophe.NS.ROSTER
         }).c('item', {
           jid,
           name
         });
         groups.forEach(g => iq.c('group').t(g).up());
-        return converse_core_api.sendIQ(iq);
+        return core_api.sendIQ(iq);
       },
 
       /**
@@ -82932,7 +86938,7 @@ converse.plugins.add('converse-roster', {
        * @param { Object } attributes - Any additional attributes to be stored on the user's model.
        */
       async addContactToRoster(jid, name, groups, attributes) {
-        await converse_core_api.waitUntil('rosterContactsFetched');
+        await core_api.waitUntil('rosterContactsFetched');
         groups = groups || [];
 
         try {
@@ -82958,18 +86964,18 @@ converse.plugins.add('converse-roster', {
       async subscribeBack(bare_jid, presence) {
         const contact = this.get(bare_jid);
 
-        if (contact instanceof converse_core_converse.RosterContact) {
+        if (contact instanceof core_converse.RosterContact) {
           contact.authorize().subscribe();
         } else {
           var _sizzle$pop;
 
           // Can happen when a subscription is retried or roster was deleted
-          const nickname = ((_sizzle$pop = converse_roster_sizzle("nick[xmlns=\"".concat(converse_roster_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent) || null;
+          const nickname = ((_sizzle$pop = roster_sizzle("nick[xmlns=\"".concat(roster_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent) || null;
           const contact = await this.addContactToRoster(bare_jid, nickname, [], {
             'subscription': 'from'
           });
 
-          if (contact instanceof converse_core_converse.RosterContact) {
+          if (contact instanceof core_converse.RosterContact) {
             contact.authorize().subscribe();
           }
         }
@@ -82991,7 +86997,7 @@ converse.plugins.add('converse-roster', {
         const id = iq.getAttribute('id');
         const from = iq.getAttribute('from');
 
-        if (from && from !== converse_core_converse.bare_jid) {
+        if (from && from !== core_converse.bare_jid) {
           // https://tools.ietf.org/html/rfc6121#page-15
           //
           // A receiving client MUST ignore the stanza unless it has no 'from'
@@ -83002,14 +87008,14 @@ converse.plugins.add('converse-roster', {
           return;
         }
 
-        converse_core_api.send(converse_roster_$iq({
+        core_api.send(roster_$iq({
           type: 'result',
           id,
-          from: converse_core_converse.connection.jid
+          from: core_converse.connection.jid
         }));
-        const query = converse_roster_sizzle("query[xmlns=\"".concat(converse_roster_Strophe.NS.ROSTER, "\"]"), iq).pop();
+        const query = roster_sizzle("query[xmlns=\"".concat(roster_Strophe.NS.ROSTER, "\"]"), iq).pop();
         this.data.save('version', query.getAttribute('ver'));
-        const items = converse_roster_sizzle("item", query);
+        const items = roster_sizzle("item", query);
 
         if (items.length > 1) {
           headless_log.error(iq);
@@ -83030,12 +87036,12 @@ converse.plugins.add('converse-roster', {
          * @example _converse.api.listen.on('rosterPush', iq => { ... });
          */
 
-        converse_core_api.trigger('rosterPush', iq);
+        core_api.trigger('rosterPush', iq);
         return;
       },
 
       rosterVersioningSupported() {
-        return converse_core_api.disco.stream.getFeature('ver', 'urn:xmpp:features:rosterver') && this.data.get('version');
+        return core_api.disco.stream.getFeature('ver', 'urn:xmpp:features:rosterver') && this.data.get('version');
       },
 
       /**
@@ -83045,11 +87051,11 @@ converse.plugins.add('converse-roster', {
        * @returns {promise}
        */
       async fetchFromServer() {
-        const stanza = converse_roster_$iq({
+        const stanza = roster_$iq({
           'type': 'get',
-          'id': converse_roster_u.getUniqueId('roster')
+          'id': roster_u.getUniqueId('roster')
         }).c('query', {
-          xmlns: converse_roster_Strophe.NS.ROSTER
+          xmlns: roster_Strophe.NS.ROSTER
         });
 
         if (this.rosterVersioningSupported()) {
@@ -83058,24 +87064,24 @@ converse.plugins.add('converse-roster', {
           });
         }
 
-        const iq = await converse_core_api.sendIQ(stanza, null, false);
+        const iq = await core_api.sendIQ(stanza, null, false);
 
         if (iq.getAttribute('type') !== 'error') {
-          const query = converse_roster_sizzle("query[xmlns=\"".concat(converse_roster_Strophe.NS.ROSTER, "\"]"), iq).pop();
+          const query = roster_sizzle("query[xmlns=\"".concat(roster_Strophe.NS.ROSTER, "\"]"), iq).pop();
 
           if (query) {
-            const items = converse_roster_sizzle("item", query);
+            const items = roster_sizzle("item", query);
             items.forEach(item => this.updateContact(item));
             this.data.save('version', query.getAttribute('ver'));
           }
-        } else if (!converse_roster_u.isServiceUnavailableError(iq)) {
+        } else if (!roster_u.isServiceUnavailableError(iq)) {
           // Some unknown error happened, so we will try to fetch again if the page reloads.
           headless_log.error(iq);
           headless_log.error("Error while trying to fetch roster from the server");
           return;
         }
 
-        converse_core_converse.session.save('roster_cached', true);
+        core_converse.session.save('roster_cached', true);
         /**
          * When the roster has been received from the XMPP server.
          * See also the `cachedRoster` event further up, which gets called instead of
@@ -83087,7 +87093,7 @@ converse.plugins.add('converse-roster', {
          */
 
 
-        converse_core_api.trigger('roster', iq);
+        core_api.trigger('roster', iq);
       },
 
       /* Update or create RosterContact models based on the given `item` XML
@@ -83138,8 +87144,8 @@ converse.plugins.add('converse-roster', {
       createRequestingContact(presence) {
         var _sizzle$pop2;
 
-        const bare_jid = converse_roster_Strophe.getBareJidFromJid(presence.getAttribute('from'));
-        const nickname = ((_sizzle$pop2 = converse_roster_sizzle("nick[xmlns=\"".concat(converse_roster_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent) || null;
+        const bare_jid = roster_Strophe.getBareJidFromJid(presence.getAttribute('from'));
+        const nickname = ((_sizzle$pop2 = roster_sizzle("nick[xmlns=\"".concat(roster_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent) || null;
         const user_data = {
           'jid': bare_jid,
           'subscription': 'none',
@@ -83154,19 +87160,19 @@ converse.plugins.add('converse-roster', {
          * @example _converse.api.listen.on('contactRequest', contact => { ... });
          */
 
-        converse_core_api.trigger('contactRequest', this.create(user_data));
+        core_api.trigger('contactRequest', this.create(user_data));
       },
 
       handleIncomingSubscription(presence) {
         const jid = presence.getAttribute('from'),
-              bare_jid = converse_roster_Strophe.getBareJidFromJid(jid),
+              bare_jid = roster_Strophe.getBareJidFromJid(jid),
               contact = this.get(bare_jid);
 
-        if (!converse_core_api.settings.get('allow_contact_requests')) {
-          converse_core_converse.rejectPresenceSubscription(jid, __("This client does not allow presence subscriptions"));
+        if (!core_api.settings.get('allow_contact_requests')) {
+          core_converse.rejectPresenceSubscription(jid, __("This client does not allow presence subscriptions"));
         }
 
-        if (converse_core_api.settings.get('auto_subscribe')) {
+        if (core_api.settings.get('auto_subscribe')) {
           if (!contact || contact.get('subscription') !== 'to') {
             this.subscribeBack(bare_jid, presence);
           } else {
@@ -83187,16 +87193,16 @@ converse.plugins.add('converse-roster', {
 
       handleOwnPresence(presence) {
         const jid = presence.getAttribute('from'),
-              resource = converse_roster_Strophe.getResourceFromJid(jid),
+              resource = roster_Strophe.getResourceFromJid(jid),
               presence_type = presence.getAttribute('type');
 
-        if (converse_core_converse.connection.jid !== jid && presence_type !== 'unavailable' && (converse_core_api.settings.get('synchronize_availability') === true || converse_core_api.settings.get('synchronize_availability') === resource)) {
+        if (core_converse.connection.jid !== jid && presence_type !== 'unavailable' && (core_api.settings.get('synchronize_availability') === true || core_api.settings.get('synchronize_availability') === resource)) {
           // Another resource has changed its status and
           // synchronize_availability option set to update,
           // we'll update ours as well.
           const show = lodash_es_propertyOf(presence.querySelector('show'))('textContent') || 'online';
 
-          converse_core_converse.xmppstatus.save({
+          core_converse.xmppstatus.save({
             'status': show
           }, {
             'silent': true
@@ -83205,13 +87211,13 @@ converse.plugins.add('converse-roster', {
           const status_message = lodash_es_propertyOf(presence.querySelector('status'))('textContent');
 
           if (status_message) {
-            converse_core_converse.xmppstatus.save({
+            core_converse.xmppstatus.save({
               'status_message': status_message
             });
           }
         }
 
-        if (converse_core_converse.jid === jid && presence_type === 'unavailable') {
+        if (core_converse.jid === jid && presence_type === 'unavailable') {
           // XXX: We've received an "unavailable" presence from our
           // own resource. Apparently this happens due to a
           // Prosody bug, whereby we send an IQ stanza to remove
@@ -83226,7 +87232,7 @@ converse.plugins.add('converse-roster', {
           //
           // As a workaround for now we simply send our presence again,
           // otherwise we're treated as offline.
-          converse_core_api.user.presence.send();
+          core_api.user.presence.send();
         }
       },
 
@@ -83238,11 +87244,11 @@ converse.plugins.add('converse-roster', {
         }
 
         const jid = presence.getAttribute('from'),
-              bare_jid = converse_roster_Strophe.getBareJidFromJid(jid);
+              bare_jid = roster_Strophe.getBareJidFromJid(jid);
 
         if (this.isSelf(bare_jid)) {
           return this.handleOwnPresence(presence);
-        } else if (converse_roster_sizzle("query[xmlns=\"".concat(converse_roster_Strophe.NS.MUC, "\"]"), presence).length) {
+        } else if (roster_sizzle("query[xmlns=\"".concat(roster_Strophe.NS.MUC, "\"]"), presence).length) {
           return; // Ignore MUC
         }
 
@@ -83264,7 +87270,7 @@ converse.plugins.add('converse-roster', {
         } else if (presence_type === 'subscribe') {
           this.handleIncomingSubscription(presence);
         } else if (presence_type === 'unavailable' && contact) {
-          const resource = converse_roster_Strophe.getResourceFromJid(jid);
+          const resource = roster_Strophe.getResourceFromJid(jid);
           contact.presence.removeResource(resource);
         } else if (contact) {
           // presence_type is undefined
@@ -83273,14 +87279,14 @@ converse.plugins.add('converse-roster', {
       }
 
     });
-    converse_core_converse.RosterGroup = model_Model.extend({
+    core_converse.RosterGroup = model_Model.extend({
       initialize(attributes) {
         this.set(Object.assign({
           description: __('Click to hide these contacts'),
-          state: converse_core_converse.OPENED
+          state: core_converse.OPENED
         }, attributes)); // Collection of contacts belonging to this group.
 
-        this.contacts = new converse_core_converse.RosterContacts();
+        this.contacts = new core_converse.RosterContacts();
       }
 
     });
@@ -83290,8 +87296,8 @@ converse.plugins.add('converse-roster', {
      * @memberOf _converse
      */
 
-    converse_core_converse.RosterGroups = collection_Collection.extend({
-      model: converse_core_converse.RosterGroup,
+    core_converse.RosterGroups = Collection.extend({
+      model: core_converse.RosterGroup,
 
       comparator(a, b) {
         a = a.get('name');
@@ -83306,10 +87312,10 @@ converse.plugins.add('converse-roster', {
         } else if (a_is_special && b_is_special) {
           return WEIGHTS[a] < WEIGHTS[b] ? -1 : WEIGHTS[a] > WEIGHTS[b] ? 1 : 0;
         } else if (!a_is_special && b_is_special) {
-          const a_header = converse_core_converse.HEADER_CURRENT_CONTACTS;
+          const a_header = core_converse.HEADER_CURRENT_CONTACTS;
           return WEIGHTS[a_header] < WEIGHTS[b] ? -1 : WEIGHTS[a_header] > WEIGHTS[b] ? 1 : 0;
         } else if (a_is_special && !b_is_special) {
-          const b_header = converse_core_converse.HEADER_CURRENT_CONTACTS;
+          const b_header = core_converse.HEADER_CURRENT_CONTACTS;
           return WEIGHTS[a] < WEIGHTS[b_header] ? -1 : WEIGHTS[a] > WEIGHTS[b_header] ? 1 : 0;
         }
       },
@@ -83334,18 +87340,18 @@ converse.plugins.add('converse-roster', {
 
     });
 
-    converse_core_converse.unregisterPresenceHandler = function () {
-      if (converse_core_converse.presence_ref !== undefined) {
-        converse_core_converse.connection.deleteHandler(converse_core_converse.presence_ref);
+    core_converse.unregisterPresenceHandler = function () {
+      if (core_converse.presence_ref !== undefined) {
+        core_converse.connection.deleteHandler(core_converse.presence_ref);
 
-        delete converse_core_converse.presence_ref;
+        delete core_converse.presence_ref;
       }
     };
     /******************** Event Handlers ********************/
 
 
     function updateUnreadCounter(chatbox) {
-      const contact = converse_core_converse.roster && converse_core_converse.roster.findWhere({
+      const contact = core_converse.roster && core_converse.roster.findWhere({
         'jid': chatbox.get('jid')
       });
 
@@ -83356,22 +87362,22 @@ converse.plugins.add('converse-roster', {
       }
     }
 
-    converse_core_api.listen.on('chatBoxesInitialized', () => {
-      converse_core_converse.chatboxes.on('change:num_unread', updateUnreadCounter);
+    core_api.listen.on('chatBoxesInitialized', () => {
+      core_converse.chatboxes.on('change:num_unread', updateUnreadCounter);
 
-      converse_core_converse.chatboxes.on('add', chatbox => {
-        if (chatbox.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
+      core_converse.chatboxes.on('add', chatbox => {
+        if (chatbox.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
           chatbox.setRosterContact(chatbox.get('jid'));
         }
       });
     });
-    converse_core_api.listen.on('beforeTearDown', () => converse_core_converse.unregisterPresenceHandler());
-    converse_core_api.waitUntil('rosterContactsFetched').then(() => {
-      converse_core_converse.roster.on('add', contact => {
+    core_api.listen.on('beforeTearDown', () => core_converse.unregisterPresenceHandler());
+    core_api.waitUntil('rosterContactsFetched').then(() => {
+      core_converse.roster.on('add', contact => {
         /* When a new contact is added, check if we already have a
          * chatbox open for it, and if so attach it to the chatbox.
          */
-        const chatbox = converse_core_converse.chatboxes.findWhere({
+        const chatbox = core_converse.chatboxes.findWhere({
           'jid': contact.get('jid')
         });
 
@@ -83382,39 +87388,39 @@ converse.plugins.add('converse-roster', {
     });
 
     async function clearPresences() {
-      converse_core_converse.presences && (await converse_core_converse.presences.clearStore());
+      core_converse.presences && (await core_converse.presences.clearStore());
     }
 
-    converse_core_api.listen.on('streamResumptionFailed', () => converse_core_converse.session.set('roster_cached', false));
-    converse_core_api.listen.on('clearSession', async () => {
+    core_api.listen.on('streamResumptionFailed', () => core_converse.session.set('roster_cached', false));
+    core_api.listen.on('clearSession', async () => {
       await clearPresences();
 
-      if (converse_core_converse.shouldClearCache()) {
-        if (converse_core_converse.rostergroups) {
-          await converse_core_converse.rostergroups.clearStore();
-          delete converse_core_converse.rostergroups;
+      if (core_converse.shouldClearCache()) {
+        if (core_converse.rostergroups) {
+          await core_converse.rostergroups.clearStore();
+          delete core_converse.rostergroups;
         }
 
-        if (converse_core_converse.roster) {
-          lodash_es_invoke(converse_core_converse, 'roster.data.destroy');
-          await converse_core_converse.roster.clearStore();
-          delete converse_core_converse.roster;
+        if (core_converse.roster) {
+          lodash_es_invoke(core_converse, 'roster.data.destroy');
+          await core_converse.roster.clearStore();
+          delete core_converse.roster;
         }
       }
     });
-    converse_core_api.listen.on('statusInitialized', async reconnecting => {
+    core_api.listen.on('statusInitialized', async reconnecting => {
       if (reconnecting) {
         // When reconnecting and not resuming a previous session,
         // we clear all cached presence data, since it might be stale
         // and we'll receive new presence updates
-        !converse_core_converse.connection.hasResumed() && (await clearPresences());
+        !core_converse.connection.hasResumed() && (await clearPresences());
       } else {
-        converse_core_converse.presences = new converse_core_converse.Presences();
-        const id = "converse.presences-".concat(converse_core_converse.bare_jid);
-        converse_core_converse.presences.browserStorage = converse_core_converse.createStore(id, "session"); // We might be continuing an existing session, so we fetch
+        core_converse.presences = new core_converse.Presences();
+        const id = "converse.presences-".concat(core_converse.bare_jid);
+        core_converse.presences.browserStorage = core_converse.createStore(id, "session"); // We might be continuing an existing session, so we fetch
         // cached presence data.
 
-        converse_core_converse.presences.fetch();
+        core_converse.presences.fetch();
       }
       /**
        * Triggered once the _converse.Presences collection has been
@@ -83427,26 +87433,26 @@ converse.plugins.add('converse-roster', {
        */
 
 
-      converse_core_api.trigger('presencesInitialized', reconnecting);
+      core_api.trigger('presencesInitialized', reconnecting);
     });
 
     async function initRoster() {
       // Initialize the Bakcbone collections that represent the contats
       // roster and the roster groups.
-      await converse_core_api.waitUntil('VCardsInitialized');
-      converse_core_converse.roster = new converse_core_converse.RosterContacts();
-      let id = "converse.contacts-".concat(converse_core_converse.bare_jid);
-      converse_core_converse.roster.browserStorage = converse_core_converse.createStore(id);
-      converse_core_converse.roster.data = new model_Model();
-      id = "converse-roster-model-".concat(converse_core_converse.bare_jid);
-      converse_core_converse.roster.data.id = id;
-      converse_core_converse.roster.data.browserStorage = converse_core_converse.createStore(id);
-
-      converse_core_converse.roster.data.fetch();
-
-      id = "converse.roster.groups".concat(converse_core_converse.bare_jid);
-      converse_core_converse.rostergroups = new converse_core_converse.RosterGroups();
-      converse_core_converse.rostergroups.browserStorage = converse_core_converse.createStore(id);
+      await core_api.waitUntil('VCardsInitialized');
+      core_converse.roster = new core_converse.RosterContacts();
+      let id = "converse.contacts-".concat(core_converse.bare_jid);
+      core_converse.roster.browserStorage = core_converse.createStore(id);
+      core_converse.roster.data = new model_Model();
+      id = "converse-roster-model-".concat(core_converse.bare_jid);
+      core_converse.roster.data.id = id;
+      core_converse.roster.data.browserStorage = core_converse.createStore(id);
+
+      core_converse.roster.data.fetch();
+
+      id = "converse.roster.groups".concat(core_converse.bare_jid);
+      core_converse.rostergroups = new core_converse.RosterGroups();
+      core_converse.rostergroups.browserStorage = core_converse.createStore(id);
       /**
        * Triggered once the `_converse.RosterContacts` and `_converse.RosterGroups` have
        * been created, but not yet populated with data.
@@ -83456,10 +87462,10 @@ converse.plugins.add('converse-roster', {
        * @example _converse.api.waitUntil('rosterInitialized').then(() => { ... });
        */
 
-      converse_core_api.trigger('rosterInitialized');
+      core_api.trigger('rosterInitialized');
     }
 
-    converse_core_api.listen.on('presencesInitialized', async reconnecting => {
+    core_api.listen.on('presencesInitialized', async reconnecting => {
       if (reconnecting) {
         /**
          * Similar to `rosterInitialized`, but instead pertaining to reconnection.
@@ -83468,21 +87474,21 @@ converse.plugins.add('converse-roster', {
          * @event _converse#rosterReadyAfterReconnection
          * @example _converse.api.listen.on('rosterReadyAfterReconnection', () => { ... });
          */
-        converse_core_api.trigger('rosterReadyAfterReconnection');
+        core_api.trigger('rosterReadyAfterReconnection');
       } else {
         await initRoster();
       }
 
-      converse_core_converse.roster.onConnected();
+      core_converse.roster.onConnected();
 
-      converse_core_converse.registerPresenceHandler();
+      core_converse.registerPresenceHandler();
 
-      converse_core_converse.populateRoster(!converse_core_converse.connection.restored);
+      core_converse.populateRoster(!core_converse.connection.restored);
     });
     /************************ API ************************/
     // API methods only available to plugins
 
-    Object.assign(converse_core_converse.api, {
+    Object.assign(core_converse.api, {
       /**
        * @namespace _converse.api.contacts
        * @memberOf _converse.api
@@ -83521,12 +87527,12 @@ converse.plugins.add('converse-roster', {
          * });
          */
         async get(jids) {
-          await converse_core_api.waitUntil('rosterContactsFetched');
+          await core_api.waitUntil('rosterContactsFetched');
 
-          const _getter = jid => converse_core_converse.roster.get(converse_roster_Strophe.getBareJidFromJid(jid));
+          const _getter = jid => core_converse.roster.get(roster_Strophe.getBareJidFromJid(jid));
 
           if (jids === undefined) {
-            jids = converse_core_converse.roster.pluck('jid');
+            jids = core_converse.roster.pluck('jid');
           } else if (typeof jids === 'string') {
             return _getter(jids);
           }
@@ -83546,13 +87552,13 @@ converse.plugins.add('converse-roster', {
          *     _converse.api.contacts.add('buddy@example.com', 'Buddy')
          */
         async add(jid, name) {
-          await converse_core_api.waitUntil('rosterContactsFetched');
+          await core_api.waitUntil('rosterContactsFetched');
 
           if (typeof jid !== 'string' || !jid.includes('@')) {
             throw new TypeError('contacts.add: invalid jid');
           }
 
-          return converse_core_converse.roster.addAndSubscribe(jid, name);
+          return core_converse.roster.addAndSubscribe(jid, name);
         }
 
       }
@@ -83560,7 +87566,7 @@ converse.plugins.add('converse-roster', {
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-smacks.js
+// CONCATENATED MODULE: ./src/headless/plugins/smacks.js
 /**
  * @module converse-smacks
  * @copyright The Converse.js contributors
@@ -83570,284 +87576,290 @@ converse.plugins.add('converse-roster', {
 
 
 const {
-  Strophe: converse_smacks_Strophe
+  Strophe: smacks_Strophe
 } = converse.env;
-const converse_smacks_u = converse.env.utils;
-converse_smacks_Strophe.addNamespace('SM', 'urn:xmpp:sm:3');
-converse.plugins.add('converse-smacks', {
-  initialize() {
-    // Configuration values for this plugin
-    // ====================================
-    // Refer to docs/source/configuration.rst for explanations of these
-    // configuration settings.
-    converse_core_api.settings.extend({
-      'enable_smacks': true,
-      'smacks_max_unacked_stanzas': 5
-    });
-
-    function isStreamManagementSupported() {
-      if (converse_core_api.connection.isType('bosh') && !converse_core_converse.isTestEnv()) {
-        return false;
-      }
+const smacks_u = converse.env.utils;
+smacks_Strophe.addNamespace('SM', 'urn:xmpp:sm:3');
 
-      return converse_core_api.disco.stream.getFeature('sm', converse_smacks_Strophe.NS.SM);
-    }
+function isStreamManagementSupported() {
+  if (core_api.connection.isType('bosh') && !core_converse.isTestEnv()) {
+    return false;
+  }
 
-    function handleAck(el) {
-      if (!converse_core_converse.session.get('smacks_enabled')) {
-        return true;
-      }
+  return core_api.disco.stream.getFeature('sm', smacks_Strophe.NS.SM);
+}
 
-      const handled = parseInt(el.getAttribute('h'), 10);
+function handleAck(el) {
+  if (!core_converse.session.get('smacks_enabled')) {
+    return true;
+  }
 
-      const last_known_handled = converse_core_converse.session.get('num_stanzas_handled_by_server');
+  const handled = parseInt(el.getAttribute('h'), 10);
 
-      const delta = handled - last_known_handled;
+  const last_known_handled = core_converse.session.get('num_stanzas_handled_by_server');
 
-      if (delta < 0) {
-        const err_msg = "New reported stanza count lower than previous. " + "New: ".concat(handled, " - Previous: ").concat(last_known_handled);
-        headless_log.error(err_msg);
-      }
+  const delta = handled - last_known_handled;
 
-      const unacked_stanzas = converse_core_converse.session.get('unacked_stanzas');
+  if (delta < 0) {
+    const err_msg = "New reported stanza count lower than previous. " + "New: ".concat(handled, " - Previous: ").concat(last_known_handled);
+    headless_log.error(err_msg);
+  }
 
-      if (delta > unacked_stanzas.length) {
-        const err_msg = "Higher reported acknowledge count than unacknowledged stanzas. " + "Reported Acknowledged Count: ".concat(delta, " -") + "Unacknowledged Stanza Count: ".concat(unacked_stanzas.length, " -") + "New: ".concat(handled, " - Previous: ").concat(last_known_handled);
-        headless_log.error(err_msg);
-      }
+  const unacked_stanzas = core_converse.session.get('unacked_stanzas');
 
-      converse_core_converse.session.save({
-        'num_stanzas_handled_by_server': handled,
-        'num_stanzas_since_last_ack': 0,
-        'unacked_stanzas': unacked_stanzas.slice(delta)
-      });
+  if (delta > unacked_stanzas.length) {
+    const err_msg = "Higher reported acknowledge count than unacknowledged stanzas. " + "Reported Acknowledged Count: ".concat(delta, " -") + "Unacknowledged Stanza Count: ".concat(unacked_stanzas.length, " -") + "New: ".concat(handled, " - Previous: ").concat(last_known_handled);
+    headless_log.error(err_msg);
+  }
 
-      return true;
-    }
+  core_converse.session.save({
+    'num_stanzas_handled_by_server': handled,
+    'num_stanzas_since_last_ack': 0,
+    'unacked_stanzas': unacked_stanzas.slice(delta)
+  });
 
-    function sendAck() {
-      if (converse_core_converse.session.get('smacks_enabled')) {
-        const h = converse_core_converse.session.get('num_stanzas_handled');
+  return true;
+}
 
-        const stanza = converse_smacks_u.toStanza("<a xmlns=\"".concat(converse_smacks_Strophe.NS.SM, "\" h=\"").concat(h, "\"/>"));
-        converse_core_api.send(stanza);
-      }
+function sendAck() {
+  if (core_converse.session.get('smacks_enabled')) {
+    const h = core_converse.session.get('num_stanzas_handled');
 
-      return true;
-    }
+    const stanza = smacks_u.toStanza("<a xmlns=\"".concat(smacks_Strophe.NS.SM, "\" h=\"").concat(h, "\"/>"));
+    core_api.send(stanza);
+  }
 
-    function stanzaHandler(el) {
-      if (converse_core_converse.session.get('smacks_enabled')) {
-        if (converse_smacks_u.isTagEqual(el, 'iq') || converse_smacks_u.isTagEqual(el, 'presence') || converse_smacks_u.isTagEqual(el, 'message')) {
-          const h = converse_core_converse.session.get('num_stanzas_handled');
+  return true;
+}
 
-          converse_core_converse.session.save('num_stanzas_handled', h + 1);
-        }
-      }
+function stanzaHandler(el) {
+  if (core_converse.session.get('smacks_enabled')) {
+    if (smacks_u.isTagEqual(el, 'iq') || smacks_u.isTagEqual(el, 'presence') || smacks_u.isTagEqual(el, 'message')) {
+      const h = core_converse.session.get('num_stanzas_handled');
 
-      return true;
+      core_converse.session.save('num_stanzas_handled', h + 1);
     }
+  }
 
-    function initSessionData() {
-      converse_core_converse.session.save({
-        'smacks_enabled': converse_core_converse.session.get('smacks_enabled') || false,
-        'num_stanzas_handled': converse_core_converse.session.get('num_stanzas_handled') || 0,
-        'num_stanzas_handled_by_server': converse_core_converse.session.get('num_stanzas_handled_by_server') || 0,
-        'num_stanzas_since_last_ack': converse_core_converse.session.get('num_stanzas_since_last_ack') || 0,
-        'unacked_stanzas': converse_core_converse.session.get('unacked_stanzas') || []
-      });
-    }
+  return true;
+}
 
-    function resetSessionData() {
-      converse_core_converse.session && converse_core_converse.session.save({
-        'smacks_enabled': false,
-        'num_stanzas_handled': 0,
-        'num_stanzas_handled_by_server': 0,
-        'num_stanzas_since_last_ack': 0,
-        'unacked_stanzas': []
-      });
-    }
+function initSessionData() {
+  core_converse.session.save({
+    'smacks_enabled': core_converse.session.get('smacks_enabled') || false,
+    'num_stanzas_handled': core_converse.session.get('num_stanzas_handled') || 0,
+    'num_stanzas_handled_by_server': core_converse.session.get('num_stanzas_handled_by_server') || 0,
+    'num_stanzas_since_last_ack': core_converse.session.get('num_stanzas_since_last_ack') || 0,
+    'unacked_stanzas': core_converse.session.get('unacked_stanzas') || []
+  });
+}
 
-    function saveSessionData(el) {
-      const data = {
-        'smacks_enabled': true
-      };
+function resetSessionData() {
+  core_converse.session && core_converse.session.save({
+    'smacks_enabled': false,
+    'num_stanzas_handled': 0,
+    'num_stanzas_handled_by_server': 0,
+    'num_stanzas_since_last_ack': 0,
+    'unacked_stanzas': []
+  });
+}
 
-      if (['1', 'true'].includes(el.getAttribute('resume'))) {
-        data['smacks_stream_id'] = el.getAttribute('id');
-      }
+function saveSessionData(el) {
+  const data = {
+    'smacks_enabled': true
+  };
 
-      converse_core_converse.session.save(data);
+  if (['1', 'true'].includes(el.getAttribute('resume'))) {
+    data['smacks_stream_id'] = el.getAttribute('id');
+  }
 
-      return true;
-    }
+  core_converse.session.save(data);
 
-    function onFailedStanza(el) {
-      if (el.querySelector('item-not-found')) {
-        // Stream resumption must happen before resource binding but
-        // enabling a new stream must happen after resource binding.
-        // Since resumption failed, we simply continue.
-        //
-        // After resource binding, sendEnableStanza will be called
-        // based on the afterResourceBinding event.
-        headless_log.warn('Could not resume previous SMACKS session, session id not found. ' + 'A new session will be established.');
-      } else {
-        headless_log.error('Failed to enable stream management');
-        headless_log.error(el.outerHTML);
-      }
+  return true;
+}
 
-      resetSessionData();
-      /**
-       * Triggered when the XEP-0198 stream could not be resumed.
-       * @event _converse#streamResumptionFailed
-       */
+function onFailedStanza(el) {
+  if (el.querySelector('item-not-found')) {
+    // Stream resumption must happen before resource binding but
+    // enabling a new stream must happen after resource binding.
+    // Since resumption failed, we simply continue.
+    //
+    // After resource binding, sendEnableStanza will be called
+    // based on the afterResourceBinding event.
+    headless_log.warn('Could not resume previous SMACKS session, session id not found. ' + 'A new session will be established.');
+  } else {
+    headless_log.error('Failed to enable stream management');
+    headless_log.error(el.outerHTML);
+  }
 
-      converse_core_api.trigger('streamResumptionFailed');
-      return true;
-    }
+  resetSessionData();
+  /**
+   * Triggered when the XEP-0198 stream could not be resumed.
+   * @event _converse#streamResumptionFailed
+   */
 
-    function resendUnackedStanzas() {
-      const stanzas = converse_core_converse.session.get('unacked_stanzas'); // We clear the unacked_stanzas array because it'll get populated
-      // again in `onStanzaSent`
+  core_api.trigger('streamResumptionFailed');
+  return true;
+}
 
+function resendUnackedStanzas() {
+  const stanzas = core_converse.session.get('unacked_stanzas'); // We clear the unacked_stanzas array because it'll get populated
+  // again in `onStanzaSent`
 
-      converse_core_converse.session.save('unacked_stanzas', []); // XXX: Currently we're resending *all* unacked stanzas, including
-      // IQ[type="get"] stanzas that longer have handlers (because the
-      // page reloaded or we reconnected, causing removal of handlers).
-      //
-      // *Side-note:* Is it necessary to clear handlers upon reconnection?
-      //
-      // I've considered not resending those stanzas, but then keeping
-      // track of what's been sent and ack'd and their order gets
-      // prohibitively complex.
-      //
-      // It's unclear how much of a problem this poses.
-      //
-      // Two possible solutions are running @converse/headless as a
-      // service worker or handling IQ[type="result"] stanzas
-      // differently, more like push stanzas, so that they don't need
-      // explicit handlers.
 
+  core_converse.session.save('unacked_stanzas', []); // XXX: Currently we're resending *all* unacked stanzas, including
+  // IQ[type="get"] stanzas that longer have handlers (because the
+  // page reloaded or we reconnected, causing removal of handlers).
+  //
+  // *Side-note:* Is it necessary to clear handlers upon reconnection?
+  //
+  // I've considered not resending those stanzas, but then keeping
+  // track of what's been sent and ack'd and their order gets
+  // prohibitively complex.
+  //
+  // It's unclear how much of a problem this poses.
+  //
+  // Two possible solutions are running @converse/headless as a
+  // service worker or handling IQ[type="result"] stanzas
+  // differently, more like push stanzas, so that they don't need
+  // explicit handlers.
 
-      stanzas.forEach(s => converse_core_api.send(s));
-    }
 
-    function onResumedStanza(el) {
-      saveSessionData(el);
-      handleAck(el);
-      resendUnackedStanzas();
-      converse_core_converse.connection.do_bind = false; // No need to bind our resource anymore
+  stanzas.forEach(s => core_api.send(s));
+}
+
+function onResumedStanza(el) {
+  saveSessionData(el);
+  handleAck(el);
+  resendUnackedStanzas();
+  core_converse.connection.do_bind = false; // No need to bind our resource anymore
 
-      converse_core_converse.connection.authenticated = true;
-      converse_core_converse.connection.restored = true;
+  core_converse.connection.authenticated = true;
+  core_converse.connection.restored = true;
 
-      converse_core_converse.connection._changeConnectStatus(converse_smacks_Strophe.Status.CONNECTED, null);
-    }
+  core_converse.connection._changeConnectStatus(smacks_Strophe.Status.CONNECTED, null);
+}
 
-    async function sendResumeStanza() {
-      const promise = converse_smacks_u.getResolveablePromise();
+async function sendResumeStanza() {
+  const promise = smacks_u.getResolveablePromise();
 
-      converse_core_converse.connection._addSysHandler(el => promise.resolve(onResumedStanza(el)), converse_smacks_Strophe.NS.SM, 'resumed');
+  core_converse.connection._addSysHandler(el => promise.resolve(onResumedStanza(el)), smacks_Strophe.NS.SM, 'resumed');
 
-      converse_core_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), converse_smacks_Strophe.NS.SM, 'failed');
+  core_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), smacks_Strophe.NS.SM, 'failed');
 
-      const previous_id = converse_core_converse.session.get('smacks_stream_id');
+  const previous_id = core_converse.session.get('smacks_stream_id');
 
-      const h = converse_core_converse.session.get('num_stanzas_handled');
+  const h = core_converse.session.get('num_stanzas_handled');
 
-      const stanza = converse_smacks_u.toStanza("<resume xmlns=\"".concat(converse_smacks_Strophe.NS.SM, "\" h=\"").concat(h, "\" previd=\"").concat(previous_id, "\"/>"));
-      converse_core_api.send(stanza);
+  const stanza = smacks_u.toStanza("<resume xmlns=\"".concat(smacks_Strophe.NS.SM, "\" h=\"").concat(h, "\" previd=\"").concat(previous_id, "\"/>"));
+  core_api.send(stanza);
 
-      converse_core_converse.connection.flush();
+  core_converse.connection.flush();
 
-      await promise;
-    }
+  await promise;
+}
 
-    async function sendEnableStanza() {
-      if (!converse_core_api.settings.get('enable_smacks') || converse_core_converse.session.get('smacks_enabled')) {
-        return;
-      }
+async function sendEnableStanza() {
+  if (!core_api.settings.get('enable_smacks') || core_converse.session.get('smacks_enabled')) {
+    return;
+  }
 
-      if (await isStreamManagementSupported()) {
-        const promise = converse_smacks_u.getResolveablePromise();
+  if (await isStreamManagementSupported()) {
+    const promise = smacks_u.getResolveablePromise();
 
-        converse_core_converse.connection._addSysHandler(el => promise.resolve(saveSessionData(el)), converse_smacks_Strophe.NS.SM, 'enabled');
+    core_converse.connection._addSysHandler(el => promise.resolve(saveSessionData(el)), smacks_Strophe.NS.SM, 'enabled');
 
-        converse_core_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), converse_smacks_Strophe.NS.SM, 'failed');
+    core_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), smacks_Strophe.NS.SM, 'failed');
 
-        const resume = converse_core_api.connection.isType('websocket') || converse_core_converse.isTestEnv();
+    const resume = core_api.connection.isType('websocket') || core_converse.isTestEnv();
 
-        const stanza = converse_smacks_u.toStanza("<enable xmlns=\"".concat(converse_smacks_Strophe.NS.SM, "\" resume=\"").concat(resume, "\"/>"));
-        converse_core_api.send(stanza);
+    const stanza = smacks_u.toStanza("<enable xmlns=\"".concat(smacks_Strophe.NS.SM, "\" resume=\"").concat(resume, "\"/>"));
+    core_api.send(stanza);
 
-        converse_core_converse.connection.flush();
+    core_converse.connection.flush();
 
-        await promise;
-      }
-    }
+    await promise;
+  }
+}
 
-    async function enableStreamManagement() {
-      if (!converse_core_api.settings.get('enable_smacks')) {
-        return;
-      }
+const smacks_handlers = [];
 
-      if (!(await isStreamManagementSupported())) {
-        return;
-      }
+async function enableStreamManagement() {
+  if (!core_api.settings.get('enable_smacks')) {
+    return;
+  }
 
-      converse_core_converse.connection.addHandler(stanzaHandler);
+  if (!(await isStreamManagementSupported())) {
+    return;
+  }
 
-      converse_core_converse.connection.addHandler(sendAck, converse_smacks_Strophe.NS.SM, 'r');
+  const conn = core_converse.connection;
 
-      converse_core_converse.connection.addHandler(handleAck, converse_smacks_Strophe.NS.SM, 'a');
+  while (smacks_handlers.length) {
+    conn.deleteHandler(smacks_handlers.pop());
+  }
 
-      if (converse_core_converse.session.get('smacks_stream_id')) {
-        await sendResumeStanza();
-      } else {
-        resetSessionData();
-      }
-    }
+  smacks_handlers.push(conn.addHandler(stanzaHandler));
+  smacks_handlers.push(conn.addHandler(sendAck, smacks_Strophe.NS.SM, 'r'));
+  smacks_handlers.push(conn.addHandler(handleAck, smacks_Strophe.NS.SM, 'a'));
 
-    function onStanzaSent(stanza) {
-      if (!converse_core_converse.session) {
-        headless_log.warn('No _converse.session!');
-        return;
-      }
+  if (core_converse.session.get('smacks_stream_id')) {
+    await sendResumeStanza();
+  } else {
+    resetSessionData();
+  }
+}
 
-      if (!converse_core_converse.session.get('smacks_enabled')) {
-        return;
-      }
+function onStanzaSent(stanza) {
+  if (!core_converse.session) {
+    headless_log.warn('No _converse.session!');
+    return;
+  }
 
-      if (converse_smacks_u.isTagEqual(stanza, 'iq') || converse_smacks_u.isTagEqual(stanza, 'presence') || converse_smacks_u.isTagEqual(stanza, 'message')) {
-        const stanza_string = converse_smacks_Strophe.serialize(stanza);
+  if (!core_converse.session.get('smacks_enabled')) {
+    return;
+  }
 
-        converse_core_converse.session.save('unacked_stanzas', (converse_core_converse.session.get('unacked_stanzas') || []).concat([stanza_string]));
+  if (smacks_u.isTagEqual(stanza, 'iq') || smacks_u.isTagEqual(stanza, 'presence') || smacks_u.isTagEqual(stanza, 'message')) {
+    const stanza_string = smacks_Strophe.serialize(stanza);
 
-        const max_unacked = converse_core_api.settings.get('smacks_max_unacked_stanzas');
+    core_converse.session.save('unacked_stanzas', (core_converse.session.get('unacked_stanzas') || []).concat([stanza_string]));
 
-        if (max_unacked > 0) {
-          const num = converse_core_converse.session.get('num_stanzas_since_last_ack') + 1;
+    const max_unacked = core_api.settings.get('smacks_max_unacked_stanzas');
 
-          if (num % max_unacked === 0) {
-            // Request confirmation of sent stanzas
-            converse_core_api.send(converse_smacks_u.toStanza("<r xmlns=\"".concat(converse_smacks_Strophe.NS.SM, "\"/>")));
-          }
+    if (max_unacked > 0) {
+      const num = core_converse.session.get('num_stanzas_since_last_ack') + 1;
 
-          converse_core_converse.session.save({
-            'num_stanzas_since_last_ack': num
-          });
-        }
+      if (num % max_unacked === 0) {
+        // Request confirmation of sent stanzas
+        core_api.send(smacks_u.toStanza("<r xmlns=\"".concat(smacks_Strophe.NS.SM, "\"/>")));
       }
+
+      core_converse.session.save({
+        'num_stanzas_since_last_ack': num
+      });
     }
+  }
+}
 
-    converse_core_api.listen.on('userSessionInitialized', initSessionData);
-    converse_core_api.listen.on('beforeResourceBinding', enableStreamManagement);
-    converse_core_api.listen.on('afterResourceBinding', sendEnableStanza);
-    converse_core_api.listen.on('send', onStanzaSent);
+converse.plugins.add('converse-smacks', {
+  initialize() {
+    // Configuration values for this plugin
+    // ====================================
+    // Refer to docs/source/configuration.rst for explanations of these
+    // configuration settings.
+    core_api.settings.extend({
+      'enable_smacks': true,
+      'smacks_max_unacked_stanzas': 5
+    });
+    core_api.listen.on('afterResourceBinding', sendEnableStanza);
+    core_api.listen.on('beforeResourceBinding', enableStreamManagement);
+    core_api.listen.on('send', onStanzaSent);
+    core_api.listen.on('userSessionInitialized', initSessionData);
   }
 
 });
-// CONCATENATED MODULE: ./src/headless/converse-vcard.js
+// CONCATENATED MODULE: ./src/headless/plugins/vcard.js
 /**
  * @module converse-vcard
  * @copyright The Converse.js contributors
@@ -83859,11 +87871,11 @@ converse.plugins.add('converse-smacks', {
 
 
 const {
-  Strophe: converse_vcard_Strophe,
-  $iq: converse_vcard_$iq,
-  dayjs: converse_vcard_dayjs
+  Strophe: vcard_Strophe,
+  $iq: vcard_$iq,
+  dayjs: vcard_dayjs
 } = converse.env;
-const converse_vcard_u = converse.env.utils;
+const vcard_u = converse.env.utils;
 converse.plugins.add('converse-vcard', {
   dependencies: ["converse-status", "converse-roster"],
   overrides: {
@@ -83921,7 +87933,7 @@ converse.plugins.add('converse-vcard', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.promises.add('VCardsInitialized');
+    core_api.promises.add('VCardsInitialized');
     /**
      * Represents a VCard
      * @class
@@ -83929,10 +87941,10 @@ converse.plugins.add('converse-vcard', {
      * @memberOf _converse
      */
 
-    converse_core_converse.VCard = model_Model.extend({
+    core_converse.VCard = model_Model.extend({
       defaults: {
-        'image': converse_core_converse.DEFAULT_IMAGE,
-        'image_type': converse_core_converse.DEFAULT_IMAGE_TYPE
+        'image': core_converse.DEFAULT_IMAGE,
+        'image_type': core_converse.DEFAULT_IMAGE_TYPE
       },
 
       set(key, val, options) {
@@ -83948,8 +87960,8 @@ converse.plugins.add('converse-vcard', {
         }
 
         if ('image' in attrs && !attrs['image']) {
-          attrs['image'] = converse_core_converse.DEFAULT_IMAGE;
-          attrs['image_type'] = converse_core_converse.DEFAULT_IMAGE_TYPE;
+          attrs['image'] = core_converse.DEFAULT_IMAGE;
+          attrs['image_type'] = core_converse.DEFAULT_IMAGE_TYPE;
           return model_Model.prototype.set.call(this, attrs, options);
         } else {
           return model_Model.prototype.set.apply(this, arguments);
@@ -83961,11 +87973,11 @@ converse.plugins.add('converse-vcard', {
       }
 
     });
-    converse_core_converse.VCards = collection_Collection.extend({
-      model: converse_core_converse.VCard,
+    core_converse.VCards = Collection.extend({
+      model: core_converse.VCard,
 
       initialize() {
-        this.on('add', vcard => vcard.get('jid') && converse_core_api.vcard.update(vcard));
+        this.on('add', vcard => vcard.get('jid') && core_api.vcard.update(vcard));
       }
 
     });
@@ -83992,16 +88004,16 @@ converse.plugins.add('converse-vcard', {
       }
 
       if (result.image) {
-        const buffer = converse_vcard_u.base64ToArrayBuffer(result['image']);
+        const buffer = vcard_u.base64ToArrayBuffer(result['image']);
         const ab = await crypto.subtle.digest('SHA-1', buffer);
-        result['image_hash'] = converse_vcard_u.arrayBufferToHex(ab);
+        result['image_hash'] = vcard_u.arrayBufferToHex(ab);
       }
 
       return result;
     }
 
     function createStanza(type, jid, vcard_el) {
-      const iq = converse_vcard_$iq(jid ? {
+      const iq = vcard_$iq(jid ? {
         'type': type,
         'to': jid
       } : {
@@ -84010,7 +88022,7 @@ converse.plugins.add('converse-vcard', {
 
       if (!vcard_el) {
         iq.c("vCard", {
-          'xmlns': converse_vcard_Strophe.NS.VCARD
+          'xmlns': vcard_Strophe.NS.VCARD
         });
       } else {
         iq.cnode(vcard_el);
@@ -84020,11 +88032,11 @@ converse.plugins.add('converse-vcard', {
     }
 
     async function getVCard(_converse, jid) {
-      const to = converse_vcard_Strophe.getBareJidFromJid(jid) === _converse.bare_jid ? null : jid;
+      const to = vcard_Strophe.getBareJidFromJid(jid) === _converse.bare_jid ? null : jid;
       let iq;
 
       try {
-        iq = await converse_core_api.sendIQ(createStanza("get", to));
+        iq = await core_api.sendIQ(createStanza("get", to));
       } catch (iq) {
         return {
           'stanza': iq,
@@ -84039,7 +88051,7 @@ converse.plugins.add('converse-vcard', {
     async function setVCardOnModel(model) {
       let jid;
 
-      if (model instanceof converse_core_converse.Message) {
+      if (model instanceof core_converse.Message) {
         if (model.get('type') === 'error') {
           return;
         }
@@ -84049,13 +88061,13 @@ converse.plugins.add('converse-vcard', {
         jid = model.get('jid');
       }
 
-      await converse_core_api.waitUntil('VCardsInitialized');
-      model.vcard = converse_core_converse.vcards.findWhere({
+      await core_api.waitUntil('VCardsInitialized');
+      model.vcard = core_converse.vcards.findWhere({
         'jid': jid
       });
 
       if (!model.vcard) {
-        model.vcard = converse_core_converse.vcards.create({
+        model.vcard = core_converse.vcards.create({
           'jid': jid
         });
       }
@@ -84067,17 +88079,17 @@ converse.plugins.add('converse-vcard', {
       var _message$collection;
 
       const chatbox = message === null || message === void 0 ? void 0 : (_message$collection = message.collection) === null || _message$collection === void 0 ? void 0 : _message$collection.chatbox;
-      const nick = converse_vcard_Strophe.getResourceFromJid(message.get('from'));
+      const nick = vcard_Strophe.getResourceFromJid(message.get('from'));
 
       if (chatbox && chatbox.get('nick') === nick) {
-        return converse_core_converse.xmppstatus.vcard;
+        return core_converse.xmppstatus.vcard;
       } else {
         const jid = message.occupant && message.occupant.get('jid') || message.get('from');
 
         if (jid) {
-          return converse_core_converse.vcards.findWhere({
+          return core_converse.vcards.findWhere({
             jid
-          }) || converse_core_converse.vcards.create({
+          }) || core_converse.vcards.create({
             jid
           });
         } else {
@@ -84088,7 +88100,7 @@ converse.plugins.add('converse-vcard', {
     }
 
     async function setVCardOnMUCMessage(message) {
-      await converse_core_api.waitUntil('VCardsInitialized');
+      await core_api.waitUntil('VCardsInitialized');
 
       if (['error', 'info'].includes(message.get('type'))) {
         return;
@@ -84097,23 +88109,23 @@ converse.plugins.add('converse-vcard', {
       }
     }
 
-    converse_core_converse.initVCardCollection = async function () {
-      converse_core_converse.vcards = new converse_core_converse.VCards();
-      converse_core_converse.vcards.browserStorage = converse_core_converse.createStore("".concat(converse_core_converse.bare_jid, "-converse.vcards"));
+    core_converse.initVCardCollection = async function () {
+      core_converse.vcards = new core_converse.VCards();
+      core_converse.vcards.browserStorage = core_converse.createStore("".concat(core_converse.bare_jid, "-converse.vcards"));
       await new Promise(resolve => {
-        converse_core_converse.vcards.fetch({
+        core_converse.vcards.fetch({
           'success': resolve,
           'error': resolve
         }, {
           'silent': true
         });
       });
-      const vcards = converse_core_converse.vcards;
+      const vcards = core_converse.vcards;
 
-      if (converse_core_converse.session) {
-        const jid = converse_core_converse.session.get('bare_jid');
+      if (core_converse.session) {
+        const jid = core_converse.session.get('bare_jid');
 
-        converse_core_converse.xmppstatus.vcard = vcards.findWhere({
+        core_converse.xmppstatus.vcard = vcards.findWhere({
           'jid': jid
         }) || vcards.create({
           'jid': jid
@@ -84125,34 +88137,34 @@ converse.plugins.add('converse-vcard', {
        */
 
 
-      converse_core_api.trigger('VCardsInitialized');
+      core_api.trigger('VCardsInitialized');
     };
 
     function clearVCardsSession() {
-      if (converse_core_converse.shouldClearCache()) {
-        converse_core_api.promises.add('VCardsInitialized');
+      if (core_converse.shouldClearCache()) {
+        core_api.promises.add('VCardsInitialized');
 
-        if (converse_core_converse.vcards) {
-          converse_core_converse.vcards.clearStore();
+        if (core_converse.vcards) {
+          core_converse.vcards.clearStore();
 
-          delete converse_core_converse.vcards;
+          delete core_converse.vcards;
         }
       }
     }
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('chatBoxInitialized', m => setVCardOnModel(m));
-    converse_core_api.listen.on('chatRoomInitialized', m => setVCardOnModel(m));
-    converse_core_api.listen.on('chatRoomMessageInitialized', m => setVCardOnMUCMessage(m));
-    converse_core_api.listen.on('addClientFeatures', () => converse_core_api.disco.own.features.add(converse_vcard_Strophe.NS.VCARD));
-    converse_core_api.listen.on('clearSession', () => clearVCardsSession());
-    converse_core_api.listen.on('messageInitialized', m => setVCardOnModel(m));
-    converse_core_api.listen.on('rosterContactInitialized', m => setVCardOnModel(m));
-    converse_core_api.listen.on('statusInitialized', converse_core_converse.initVCardCollection);
+    core_api.listen.on('chatBoxInitialized', m => setVCardOnModel(m));
+    core_api.listen.on('chatRoomInitialized', m => setVCardOnModel(m));
+    core_api.listen.on('chatRoomMessageInitialized', m => setVCardOnMUCMessage(m));
+    core_api.listen.on('addClientFeatures', () => core_api.disco.own.features.add(vcard_Strophe.NS.VCARD));
+    core_api.listen.on('clearSession', () => clearVCardsSession());
+    core_api.listen.on('messageInitialized', m => setVCardOnModel(m));
+    core_api.listen.on('rosterContactInitialized', m => setVCardOnModel(m));
+    core_api.listen.on('statusInitialized', core_converse.initVCardCollection);
     /************************ BEGIN API ************************/
 
-    Object.assign(converse_core_converse.api, {
+    Object.assign(core_converse.api, {
       /**
        * The XEP-0054 VCard API
        *
@@ -84189,16 +88201,16 @@ converse.plugins.add('converse-vcard', {
           }
 
           const div = document.createElement('div');
-          const vcard_el = converse_vcard_u.toStanza("\n                        <vCard xmlns=\"vcard-temp\">\n                            <FN>".concat(data.fn, "</FN>\n                            <NICKNAME>").concat(data.nickname, "</NICKNAME>\n                            <URL>").concat(data.url, "</URL>\n                            <ROLE>").concat(data.role, "</ROLE>\n                            <EMAIL><INTERNET/><PREF/><USERID>").concat(data.email, "</USERID></EMAIL>\n                            <PHOTO>\n                                <TYPE>").concat(data.image_type, "</TYPE>\n                                <BINVAL>").concat(data.image, "</BINVAL>\n                            </PHOTO>\n                        </vCard>"), div);
+          const vcard_el = vcard_u.toStanza("\n                        <vCard xmlns=\"vcard-temp\">\n                            <FN>".concat(data.fn, "</FN>\n                            <NICKNAME>").concat(data.nickname, "</NICKNAME>\n                            <URL>").concat(data.url, "</URL>\n                            <ROLE>").concat(data.role, "</ROLE>\n                            <EMAIL><INTERNET/><PREF/><USERID>").concat(data.email, "</USERID></EMAIL>\n                            <PHOTO>\n                                <TYPE>").concat(data.image_type, "</TYPE>\n                                <BINVAL>").concat(data.image, "</BINVAL>\n                            </PHOTO>\n                        </vCard>"), div);
           let result;
 
           try {
-            result = await converse_core_api.sendIQ(createStanza("set", jid, vcard_el));
+            result = await core_api.sendIQ(createStanza("set", jid, vcard_el));
           } catch (e) {
             throw e;
           }
 
-          await converse_core_api.vcard.update(jid, true);
+          await core_api.vcard.update(jid, true);
           return result;
         },
 
@@ -84224,15 +88236,15 @@ converse.plugins.add('converse-vcard', {
          */
         get(model, force) {
           if (typeof model === 'string') {
-            return getVCard(converse_core_converse, model);
-          } else if (force || !model.get('vcard_updated') || !converse_vcard_dayjs(model.get('vcard_error')).isSame(new Date(), "day")) {
+            return getVCard(core_converse, model);
+          } else if (force || !model.get('vcard_updated') || !vcard_dayjs(model.get('vcard_error')).isSame(new Date(), "day")) {
             const jid = model.get('jid');
 
             if (!jid) {
               headless_log.error("No JID to get vcard for");
             }
 
-            return getVCard(converse_core_converse, jid);
+            return getVCard(core_converse, jid);
           } else {
             return Promise.resolve({});
           }
@@ -84256,7 +88268,7 @@ converse.plugins.add('converse-vcard', {
          */
         async update(model, force) {
           const data = await this.get(model, force);
-          model = typeof model === 'string' ? converse_core_converse.vcards.findWhere({
+          model = typeof model === 'string' ? core_converse.vcards.findWhere({
             'jid': model
           }) : model;
 
@@ -84317,7 +88329,7 @@ converse.plugins.add('converse-vcard', {
 
 /* harmony default export */ var headless = (converse);
 // EXTERNAL MODULE: ./node_modules/jed/jed.js
-var jed = __webpack_require__(53);
+var jed = __webpack_require__(67);
 var jed_default = /*#__PURE__*/__webpack_require__.n(jed);
 
 // CONCATENATED MODULE: ./src/i18n/index.js
@@ -84407,6 +88419,7 @@ async function fetchTranslations(_converse) {
     api,
     locale
   } = _converse;
+  const dayjs_locale = locale.toLowerCase().replace('_', '-');
 
   if (!isConverseLocale(locale, api.settings.get("locales")) || locale === 'en') {
     return;
@@ -84414,9 +88427,9 @@ async function fetchTranslations(_converse) {
 
   const {
     default: data
-  } = await __webpack_require__(406)("./".concat(locale, "/LC_MESSAGES/converse.po"));
-  await __webpack_require__(407)("./".concat(locale.toLowerCase().replace('_', '-')));
-  dayjs_min_default.a.locale(getLocale(locale, l => dayjs_min_default.a.locale(l)));
+  } = await __webpack_require__(494)("./".concat(locale, "/LC_MESSAGES/converse.po"));
+  await __webpack_require__(495)("./".concat(dayjs_locale));
+  dayjs_min_default.a.locale(getLocale(dayjs_locale, l => dayjs_min_default.a.locale(l)));
   jed_instance = new jed_default.a(data);
 }
 
@@ -84445,15 +88458,15 @@ Object.assign(i18n, {
   },
 
   async initialize() {
-    if (converse_core_converse.isTestEnv()) {
-      converse_core_converse.locale = 'en';
+    if (core_converse.isTestEnv()) {
+      core_converse.locale = 'en';
     } else {
       try {
-        converse_core_converse.locale = i18n.getLocale(converse_core_api.settings.get('i18n'), converse_core_api.settings.get("locales"));
-        await fetchTranslations(converse_core_converse);
+        core_converse.locale = i18n.getLocale(core_api.settings.get('i18n'), core_api.settings.get("locales"));
+        await fetchTranslations(core_converse);
       } catch (e) {
         headless_log.fatal(e.message);
-        converse_core_converse.locale = 'en';
+        core_converse.locale = 'en';
       }
     }
   },
@@ -84464,7 +88477,7 @@ Object.assign(i18n, {
 
 });
 const i18n_ = i18n.__;
-// CONCATENATED MODULE: ./src/converse-registry.js
+// CONCATENATED MODULE: ./src/shared/registry.js
 
 const registry = {};
 
@@ -84472,7 +88485,7 @@ function define(name, constructor) {
   this.registry[name] = constructor;
 }
 
-function converse_registry_register() {
+function registry_register() {
   Object.keys(registry).forEach(name => {
     if (!customElements.get(name)) {
       customElements.define(name, registry[name]);
@@ -84480,12 +88493,12 @@ function converse_registry_register() {
   });
 }
 
-converse_core_api.elements = {
+core_api.elements = {
   registry,
   define,
-  register: converse_registry_register
+  register: registry_register
 };
-// CONCATENATED MODULE: ./src/converse-autocomplete.js
+// CONCATENATED MODULE: ./src/plugins/autocomplete.js
 /**
  * @module converse-autocomplete
  * @copyright Lea Verou and the Converse.js contributors
@@ -84496,16 +88509,15 @@ converse_core_api.elements = {
  */
 
 
-converse.MENTION_BOUNDARIES = ['"', '(', '<', '#', '!', '\\', '/', '+', '~', '[', '{', '^', '>'];
-const converse_autocomplete_u = converse.env.utils;
-const FILTER_CONTAINS = function FILTER_CONTAINS(text, input) {
-  return RegExp(converse_autocomplete_helpers.regExpEscape(input.trim()), "i").test(text);
+const autocomplete_u = converse.env.utils;
+const FILTER_CONTAINS = function (text, input) {
+  return RegExp(autocomplete_helpers.regExpEscape(input.trim()), "i").test(text);
 };
-const FILTER_STARTSWITH = function FILTER_STARTSWITH(text, input) {
-  return RegExp("^" + converse_autocomplete_helpers.regExpEscape(input.trim()), "i").test(text);
+const FILTER_STARTSWITH = function (text, input) {
+  return RegExp("^" + autocomplete_helpers.regExpEscape(input.trim()), "i").test(text);
 };
 
-const SORT_BY_LENGTH = function SORT_BY_LENGTH(a, b) {
+const SORT_BY_LENGTH = function (a, b) {
   if (a.length !== b.length) {
     return a.length - b.length;
   }
@@ -84513,7 +88525,7 @@ const SORT_BY_LENGTH = function SORT_BY_LENGTH(a, b) {
   return a < b ? -1 : 1;
 };
 
-const SORT_BY_QUERY_POSITION = function SORT_BY_QUERY_POSITION(a, b) {
+const SORT_BY_QUERY_POSITION = function (a, b) {
   const query = a.query.toLowerCase();
   const x = a.label.toLowerCase().indexOf(query);
   const y = b.label.toLowerCase().indexOf(query);
@@ -84543,7 +88555,7 @@ const ITEM = (text, input) => {
   return element;
 };
 
-const converse_autocomplete_helpers = {
+const autocomplete_helpers = {
   getElement(expr, el) {
     return typeof expr === "string" ? (el || document).querySelector(expr) : expr || null;
   },
@@ -84578,8 +88590,8 @@ const converse_autocomplete_helpers = {
     return s.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&");
   },
 
-  isMention(word, ac_triggers, mention_boundaries) {
-    return ac_triggers.includes(word[0]) || mention_boundaries.includes(word[0]) && ac_triggers.includes(word[1]);
+  isMention(word, ac_triggers) {
+    return ac_triggers.includes(word[0]) || autocomplete_u.isMentionBoundary(word[0]) && ac_triggers.includes(word[1]);
   }
 
 };
@@ -84621,11 +88633,11 @@ class Suggestion extends String {
 
 }
 
-class converse_autocomplete_AutoComplete {
+class autocomplete_AutoComplete {
   constructor(el, config = {}) {
     this.is_opened = false;
 
-    if (converse_autocomplete_u.hasClass('suggestion-box', el)) {
+    if (autocomplete_u.hasClass('suggestion-box', el)) {
       this.container = el;
     } else {
       this.container = el.querySelector('.suggestion-box');
@@ -84688,9 +88700,9 @@ class converse_autocomplete_AutoComplete {
         "mouseover": ev => this.onMouseOver(ev)
       }
     };
-    converse_autocomplete_helpers.bind(this.input, this._events.input);
-    converse_autocomplete_helpers.bind(this.input.form, this._events.form);
-    converse_autocomplete_helpers.bind(this.ul, this._events.ul);
+    autocomplete_helpers.bind(this.input, this._events.input);
+    autocomplete_helpers.bind(this.input.form, this._events.form);
+    autocomplete_helpers.bind(this.ul, this._events.ul);
   }
 
   set list(list) {
@@ -84702,7 +88714,7 @@ class converse_autocomplete_AutoComplete {
       var _helpers$getElement;
 
       // Element or CSS selector
-      const children = ((_helpers$getElement = converse_autocomplete_helpers.getElement(list)) === null || _helpers$getElement === void 0 ? void 0 : _helpers$getElement.children) || [];
+      const children = ((_helpers$getElement = autocomplete_helpers.getElement(list)) === null || _helpers$getElement === void 0 ? void 0 : _helpers$getElement.children) || [];
       this._list = Array.from(children).filter(el => !el.disabled).map(el => {
         const text = el.textContent.trim();
         const value = el.value || text;
@@ -84744,7 +88756,7 @@ class converse_autocomplete_AutoComplete {
 
   insertValue(suggestion) {
     if (this.match_current_word) {
-      converse_autocomplete_u.replaceCurrentWord(this.input, suggestion.value, converse.MENTION_BOUNDARIES);
+      autocomplete_u.replaceCurrentWord(this.input, suggestion.value);
     } else {
       this.input.value = suggestion.value;
     }
@@ -84763,8 +88775,8 @@ class converse_autocomplete_AutoComplete {
 
   destroy() {
     //remove events from the input and its form
-    converse_autocomplete_helpers.unbind(this.input, this._events.input);
-    converse_autocomplete_helpers.unbind(this.input.form, this._events.form);
+    autocomplete_helpers.unbind(this.input, this._events.input);
+    autocomplete_helpers.unbind(this.input.form, this._events.form);
     this.input.removeAttribute("aria-autocomplete");
   }
 
@@ -84803,7 +88815,7 @@ class converse_autocomplete_AutoComplete {
 
   select(selected) {
     if (selected) {
-      this.index = converse_autocomplete_u.siblingIndex(selected);
+      this.index = autocomplete_u.siblingIndex(selected);
     } else {
       selected = this.ul.children[this.index];
     }
@@ -84822,7 +88834,7 @@ class converse_autocomplete_AutoComplete {
   }
 
   onMouseOver(ev) {
-    const li = converse_autocomplete_u.ancestor(ev.target, 'li');
+    const li = autocomplete_u.ancestor(ev.target, 'li');
 
     if (li) {
       this.goto(Array.prototype.slice.call(this.ul.children).indexOf(li));
@@ -84834,7 +88846,7 @@ class converse_autocomplete_AutoComplete {
       return; // Only select on left click
     }
 
-    const li = converse_autocomplete_u.ancestor(ev.target, 'li');
+    const li = autocomplete_u.ancestor(ev.target, 'li');
 
     if (li) {
       ev.preventDefault();
@@ -84873,9 +88885,9 @@ class converse_autocomplete_AutoComplete {
 
       this.auto_completing = true;
     } else if (ev.key === "Backspace") {
-      const word = converse_autocomplete_u.getCurrentWord(ev.target, ev.target.selectionEnd - 1);
+      const word = autocomplete_u.getCurrentWord(ev.target, ev.target.selectionEnd - 1);
 
-      if (converse_autocomplete_helpers.isMention(word, this.ac_triggers, converse.MENTION_BOUNDARIES)) {
+      if (autocomplete_helpers.isMention(word, this.ac_triggers)) {
         this.auto_completing = true;
       }
     }
@@ -84894,14 +88906,14 @@ class converse_autocomplete_AutoComplete {
       return;
     }
 
-    let value = this.match_current_word ? converse_autocomplete_u.getCurrentWord(this.input) : this.input.value;
-    const contains_trigger = converse_autocomplete_helpers.isMention(value, this.ac_triggers, converse.MENTION_BOUNDARIES);
+    let value = this.match_current_word ? autocomplete_u.getCurrentWord(this.input) : this.input.value;
+    const contains_trigger = autocomplete_helpers.isMention(value, this.ac_triggers);
 
     if (contains_trigger) {
       this.auto_completing = true;
 
       if (!this.include_triggers.includes(ev.key)) {
-        value = converse.MENTION_BOUNDARIES.includes(value[0]) ? value.slice('2') : value.slice('1');
+        value = autocomplete_u.isMentionBoundary(value[0]) ? value.slice('2') : value.slice('1');
       }
     }
 
@@ -84938,13 +88950,13 @@ class converse_autocomplete_AutoComplete {
 
 } // Make it an event emitter
 
-Object.assign(converse_autocomplete_AutoComplete.prototype, Events);
+Object.assign(autocomplete_AutoComplete.prototype, Events);
 converse.plugins.add("converse-autocomplete", {
   initialize() {
     const _converse = this._converse;
     _converse.FILTER_CONTAINS = FILTER_CONTAINS;
     _converse.FILTER_STARTSWITH = FILTER_STARTSWITH;
-    _converse.AutoComplete = converse_autocomplete_AutoComplete;
+    _converse.AutoComplete = autocomplete_AutoComplete;
   }
 
 });
@@ -84952,7 +88964,7 @@ converse.plugins.add("converse-autocomplete", {
 function bookmarks_list_templateObject2() {
   const data = bookmarks_list_taggedTemplateLiteral(["\n        <div class=\"list-container list-container--bookmarks ", "\">\n            <a class=\"list-toggle bookmarks-toggle controlbox-padded\"\n            title=\"", "\"\n            @click=", ">\n\n                <span class=\"fa ", "\">\n                </span> ", "</a>\n            <div class=\"items-list bookmarks rooms-list ", "\">\n            ", "\n            </div>\n        </div>\n    "]);
 
-  bookmarks_list_templateObject2 = function _templateObject2() {
+  bookmarks_list_templateObject2 = function () {
     return data;
   };
 
@@ -84962,7 +88974,7 @@ function bookmarks_list_templateObject2() {
 function bookmarks_list_templateObject() {
   const data = bookmarks_list_taggedTemplateLiteral(["\n        <div class=\"list-item controlbox-padded room-item available-chatroom d-flex flex-row ", "\" data-room-jid=\"", "\">\n            <a class=\"list-item-link open-room w-100\" data-room-jid=\"", "\"\n            title=\"", "\"\n            @click=", ">", "</a>\n\n            <a class=\"list-item-action remove-bookmark fa fa-bookmark align-self-center ", "\"\n            data-room-jid=\"", "\"\n            data-bookmark-name=\"", "\"\n            title=\"", "\"\n            @click=", "></a>\n        </div>\n    "]);
 
-  bookmarks_list_templateObject = function _templateObject() {
+  bookmarks_list_templateObject = function () {
     return data;
   };
 
@@ -84995,7 +89007,7 @@ const bookmark_item = o => {
 function muc_bookmark_form_templateObject() {
   const data = muc_bookmark_form_taggedTemplateLiteral(["\n        <form class=\"converse-form chatroom-form\" @submit=", ">\n            <legend>", "</legend>\n            <fieldset class=\"form-group\">\n                <label for=\"converse_muc_bookmark_name\">", "</label>\n                <input class=\"form-control\" type=\"text\" value=\"", "\" name=\"name\" required=\"required\" id=\"converse_muc_bookmark_name\"/>\n            </fieldset>\n            <fieldset class=\"form-group\">\n                <label for=\"converse_muc_bookmark_nick\">", "</label>\n                <input class=\"form-control\" type=\"text\" name=\"nick\" value=\"", "\" id=\"converse_muc_bookmark_nick\"/>\n            </fieldset>\n            <fieldset class=\"form-group form-check\">\n                <input class=\"form-check-input\" id=\"converse_muc_bookmark_autojoin\" type=\"checkbox\" name=\"autojoin\"/>\n                <label class=\"form-check-label\" for=\"converse_muc_bookmark_autojoin\">", "</label>\n            </fieldset>\n            <fieldset class=\"form-group\">\n                <input class=\"btn btn-primary\" type=\"submit\" value=\"", "\">\n                <input class=\"btn btn-secondary button-cancel\" type=\"button\" value=\"", "\" @click=", ">\n            </fieldset>\n        </form>\n    "]);
 
-  muc_bookmark_form_templateObject = function _templateObject() {
+  muc_bookmark_form_templateObject = function () {
     return data;
   };
 
@@ -85047,7 +89059,7 @@ const paddedLt = /^\s*</; // Caches a local reference to `Element.prototype` for
 
 const ElementProto = typeof Element !== 'undefined' && Element.prototype || {};
 
-const view_indexOf = function indexOf(array, item) {
+const view_indexOf = function (array, item) {
   for (let i = 0, len = array.length; i < len; i++) if (array[i] === item) return i;
 
   return -1;
@@ -85055,7 +89067,7 @@ const view_indexOf = function indexOf(array, item) {
 // if an existing element is not provided...
 
 
-const view_View = function View(options) {
+const View = function (options) {
   this.cid = lodash_es_uniqueId('view');
   this._domEvents = [];
   this.preinitialize.apply(this, arguments);
@@ -85065,28 +89077,28 @@ const view_View = function View(options) {
 
   this.initialize.apply(this, arguments);
 };
-view_View.extend = inherits; // Cached regex to split keys for `delegate`.
+View.extend = inherits; // Cached regex to split keys for `delegate`.
 
 const delegateEventSplitter = /^(\S+)\s*(.*)$/; // List of view options to be set as properties.
 
 const viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; // Set up all inheritable **View** properties and methods.
 
-Object.assign(view_View.prototype, Events, {
+Object.assign(View.prototype, Events, {
   // The default `tagName` of a View's element is `"div"`.
   tagName: 'div',
-  $: function $(selector) {
+  $: function (selector) {
     return this.el.querySelectorAll(selector);
   },
   // preinitialize is an empty function by default. You can override it with a function
   // or object.  preinitialize will run before any instantiation logic is run in the View
-  preinitialize: function preinitialize() {},
+  preinitialize: function () {},
   // Initialize is an empty function by default. Override it with your own
   // initialization logic.
-  initialize: function initialize() {},
+  initialize: function () {},
   // **render** is the core function that your view should override, in order
   // to populate its element (`this.el`), with the appropriate HTML. The
   // convention is for **render** to always return `this`.
-  render: function render() {
+  render: function () {
     lodash_es_isFunction(this.beforeRender) && this.beforeRender();
     lodash_es_isFunction(this.toHTML) && render_render(this.toHTML(), this.el);
     lodash_es_isFunction(this.afterRender) && this.afterRender();
@@ -85094,7 +89106,7 @@ Object.assign(view_View.prototype, Events, {
   },
   // Remove this view by taking the element out of the DOM, and removing any
   // applicable Backbone.Events listeners.
-  remove: function remove() {
+  remove: function () {
     this._removeElement();
 
     this.stopListening();
@@ -85103,13 +89115,13 @@ Object.assign(view_View.prototype, Events, {
   // Remove this view's element from the document and all event listeners
   // attached to it. Exposed for subclasses using an alternative DOM
   // manipulation API.
-  _removeElement: function _removeElement() {
+  _removeElement: function () {
     this.undelegateEvents();
     if (this.el.parentNode) this.el.parentNode.removeChild(this.el);
   },
   // Change the view's element (`this.el` property) and re-delegate the
   // view's events on the new element.
-  setElement: function setElement(element) {
+  setElement: function (element) {
     this.undelegateEvents();
 
     this._setElement(element);
@@ -85120,7 +89132,7 @@ Object.assign(view_View.prototype, Events, {
   // Apply the `element` to the view. `element` can be a CSS selector,
   // a string of HTML, or an Element node. If passed a NodeList or CSS
   // selector, uses just the first match.
-  _setElement: function _setElement(element) {
+  _setElement: function (element) {
     if (typeof element == 'string') {
       if (paddedLt.test(element)) {
         const el = document.createElement('div');
@@ -85148,7 +89160,7 @@ Object.assign(view_View.prototype, Events, {
   // pairs. Callbacks will be bound to the view, with `this` set properly.
   // Uses event delegation for efficiency.
   // Omitting the selector binds the event to `this.el`.
-  delegateEvents: function delegateEvents(events) {
+  delegateEvents: function (events) {
     events || (events = lodash_es_result(this, 'events'));
     if (!events) return this;
     this.undelegateEvents();
@@ -85171,7 +89183,7 @@ Object.assign(view_View.prototype, Events, {
   // the event's `delegateTarget` property is set to it and the return the
   // result of calling bound `listener` with the parameters given to the
   // handler.
-  delegate: function delegate(eventName, selector, listener) {
+  delegate: function (eventName, selector, listener) {
     const root = this.el;
 
     if (!root) {
@@ -85226,7 +89238,7 @@ Object.assign(view_View.prototype, Events, {
   // Clears all callbacks previously bound to the view by `delegateEvents`.
   // You usually don't need to use this, but may wish to if you have multiple
   // Backbone views attached to the same DOM element.
-  undelegateEvents: function undelegateEvents() {
+  undelegateEvents: function () {
     if (this.el) {
       for (let i = 0, len = this._domEvents.length; i < len; i++) {
         const item = this._domEvents[i];
@@ -85240,7 +89252,7 @@ Object.assign(view_View.prototype, Events, {
   },
   // A finer-grained `undelegateEvents` for removing a single delegated event.
   // `selector` and `listener` are both optional.
-  undelegate: function undelegate(eventName, selector, listener) {
+  undelegate: function (eventName, selector, listener) {
     if (typeof selector === 'function') {
       listener = selector;
       selector = null;
@@ -85269,14 +89281,14 @@ Object.assign(view_View.prototype, Events, {
   },
   // Produces a DOM element to be assigned to your view. Exposed for
   // subclasses using an alternative DOM manipulation API.
-  _createElement: function _createElement(tagName) {
+  _createElement: function (tagName) {
     return document.createElement(tagName);
   },
   // Ensure that the View has a DOM element to render into.
   // If `this.el` is a string, pass it through `$()`, take the first
   // matching element, and re-assign it to `el`. Otherwise, create
   // an element from the `id`, `className` and `tagName` properties.
-  _ensureElement: function _ensureElement() {
+  _ensureElement: function () {
     if (!this.el) {
       const attrs = lodash_es_assignIn({}, lodash_es_result(this, 'attributes'));
       if (this.id) attrs.id = lodash_es_result(this, 'id');
@@ -85290,7 +89302,7 @@ Object.assign(view_View.prototype, Events, {
   },
   // Set attributes from a hash on this view's element.  Exposed for
   // subclasses using an alternative DOM manipulation API.
-  _setAttributes: function _setAttributes(attrs) {
+  _setAttributes: function (attrs) {
     for (const attr in attrs) {
       attr in this.el ? this.el[attr] = attrs[attr] : this.el.setAttribute(attr, attrs[attr]);
     }
@@ -85339,7 +89351,7 @@ var invokeMap = _baseRest(function(collection, path, args) {
 
 /* harmony default export */ var lodash_es_invokeMap = (invokeMap);
 
-// CONCATENATED MODULE: ./src/converse-bookmark-views.js
+// CONCATENATED MODULE: ./src/plugins/bookmark-views.js
 /**
  * @module converse-bookmark-views
  * @description Converse.js plugin which adds views for XEP-0048 bookmarks
@@ -85355,9 +89367,9 @@ var invokeMap = _baseRest(function(collection, path, args) {
 
 
 const {
-  Strophe: converse_bookmark_views_Strophe
+  Strophe: bookmark_views_Strophe
 } = converse.env;
-const converse_bookmark_views_u = converse.env.utils;
+const bookmark_views_u = converse.env.utils;
 converse.plugins.add('converse-bookmark-views', {
   /* Plugin dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -85379,10 +89391,10 @@ converse.plugins.add('converse-bookmark-views', {
     // ====================================
     // Refer to docs/source/configuration.rst for explanations of these
     // configuration settings.
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       hide_open_bookmarks: true
     });
-    Object.assign(converse_core_converse, {
+    Object.assign(core_converse, {
       removeBookmarkViaEvent(ev) {
         /* Remove a bookmark as determined by the passed in
          * event.
@@ -85392,7 +89404,7 @@ converse.plugins.add('converse-bookmark-views', {
         const jid = ev.target.getAttribute('data-room-jid');
 
         if (confirm(i18n_("Are you sure you want to remove the bookmark \"%1$s\"?", name))) {
-          lodash_es_invokeMap(converse_core_converse.bookmarks.where({
+          lodash_es_invokeMap(core_converse.bookmarks.where({
             'jid': jid
           }), model_Model.prototype.destroy);
         }
@@ -85404,11 +89416,11 @@ converse.plugins.add('converse-bookmark-views', {
          */
         ev.preventDefault();
         const jid = ev.target.getAttribute('data-room-jid');
-        converse_core_api.rooms.open(jid, {
+        core_api.rooms.open(jid, {
           'bring_to_foreground': true
         });
 
-        converse_core_converse.chatboxviews.get(jid).renderBookmarkForm();
+        core_converse.chatboxviews.get(jid).renderBookmarkForm();
       }
 
     });
@@ -85418,8 +89430,8 @@ converse.plugins.add('converse-bookmark-views', {
        * @private
        */
       setBookmarkState() {
-        if (converse_core_converse.bookmarks !== undefined) {
-          const models = converse_core_converse.bookmarks.where({
+        if (core_converse.bookmarks !== undefined) {
+          const models = core_converse.bookmarks.where({
             'jid': this.model.get('jid')
           });
 
@@ -85435,7 +89447,7 @@ converse.plugins.add('converse-bookmark-views', {
         this.hideChatRoomContents();
 
         if (!this.bookmark_form) {
-          this.bookmark_form = new converse_core_converse.MUCBookmarkForm({
+          this.bookmark_form = new core_converse.MUCBookmarkForm({
             'model': this.model,
             'chatroomview': this
           });
@@ -85443,13 +89455,13 @@ converse.plugins.add('converse-bookmark-views', {
           container_el.insertAdjacentElement('beforeend', this.bookmark_form.el);
         }
 
-        converse_bookmark_views_u.showElement(this.bookmark_form.el);
+        bookmark_views_u.showElement(this.bookmark_form.el);
       },
 
       toggleBookmark(ev) {
         ev === null || ev === void 0 ? void 0 : ev.preventDefault();
 
-        const models = converse_core_converse.bookmarks.where({
+        const models = core_converse.bookmarks.where({
           'jid': this.model.get('jid')
         });
 
@@ -85461,8 +89473,8 @@ converse.plugins.add('converse-bookmark-views', {
       }
 
     };
-    Object.assign(converse_core_converse.ChatRoomView.prototype, bookmarkableChatRoomView);
-    converse_core_converse.MUCBookmarkForm = view_View.extend({
+    Object.assign(core_converse.ChatRoomView.prototype, bookmarkableChatRoomView);
+    core_converse.MUCBookmarkForm = View.extend({
       className: 'muc-bookmark-form chatroom-form-container',
 
       initialize(attrs) {
@@ -85482,7 +89494,7 @@ converse.plugins.add('converse-bookmark-views', {
 
         ev.preventDefault();
 
-        converse_core_converse.bookmarks.createBookmark({
+        core_converse.bookmarks.createBookmark({
           'jid': this.model.get('jid'),
           'autojoin': ((_ev$target$querySelec = ev.target.querySelector('input[name="autojoin"]')) === null || _ev$target$querySelec === void 0 ? void 0 : _ev$target$querySelec.checked) || false,
           'name': (_ev$target$querySelec2 = ev.target.querySelector('input[name=name]')) === null || _ev$target$querySelec2 === void 0 ? void 0 : _ev$target$querySelec2.value,
@@ -85498,19 +89510,19 @@ converse.plugins.add('converse-bookmark-views', {
       }
 
     });
-    converse_core_converse.BookmarksView = view_View.extend({
+    core_converse.BookmarksView = View.extend({
       tagName: 'span',
 
       initialize() {
         this.listenTo(this.model, 'add', this.render);
         this.listenTo(this.model, 'remove', this.render);
-        this.listenTo(converse_core_converse.chatboxes, 'add', this.render);
-        this.listenTo(converse_core_converse.chatboxes, 'remove', this.render);
-        const id = "converse.room-bookmarks".concat(converse_core_converse.bare_jid, "-list-model");
-        this.list_model = new converse_core_converse.BookmarksList({
+        this.listenTo(core_converse.chatboxes, 'add', this.render);
+        this.listenTo(core_converse.chatboxes, 'remove', this.render);
+        const id = "converse.room-bookmarks".concat(core_converse.bare_jid, "-list-model");
+        this.list_model = new core_converse.BookmarksList({
           id
         });
-        this.list_model.browserStorage = converse_core_converse.createStore(id);
+        this.list_model.browserStorage = core_converse.createStore(id);
 
         const render = () => {
           this.render();
@@ -85524,10 +89536,10 @@ converse.plugins.add('converse-bookmark-views', {
       },
 
       toHTML() {
-        const is_hidden = b => !!(converse_core_api.settings.get('hide_open_bookmarks') && converse_core_converse.chatboxes.get(b.get('jid')));
+        const is_hidden = b => !!(core_api.settings.get('hide_open_bookmarks') && core_converse.chatboxes.get(b.get('jid')));
 
         return bookmarks_list({
-          '_converse': converse_core_converse,
+          '_converse': core_converse,
           'bookmarks': this.model,
           'hidden': this.model.getUnopenedBookmarks().length && true,
           'is_hidden': is_hidden,
@@ -85539,9 +89551,9 @@ converse.plugins.add('converse-bookmark-views', {
       },
 
       insertIntoControlBox() {
-        const controlboxview = converse_core_converse.chatboxviews.get('controlbox');
+        const controlboxview = core_converse.chatboxviews.get('controlbox');
 
-        if (controlboxview !== undefined && !converse_bookmark_views_u.rootContains(converse_core_converse.root, this.el)) {
+        if (controlboxview !== undefined && !bookmark_views_u.rootContains(core_converse.root, this.el)) {
           const el = controlboxview.el.querySelector('.list-container--bookmarks');
           el && el.parentNode.replaceChild(this.el, el);
         }
@@ -85552,12 +89564,12 @@ converse.plugins.add('converse-bookmark-views', {
         const name = ev.target.textContent;
         const jid = ev.target.getAttribute('data-room-jid');
         const data = {
-          'name': name || converse_bookmark_views_Strophe.unescapeNode(converse_bookmark_views_Strophe.getNodeFromJid(jid)) || jid
+          'name': name || bookmark_views_Strophe.unescapeNode(bookmark_views_Strophe.getNodeFromJid(jid)) || jid
         };
-        converse_core_api.rooms.open(jid, data, true);
+        core_api.rooms.open(jid, data, true);
       },
 
-      removeBookmark: converse_core_converse.removeBookmarkViaEvent,
+      removeBookmark: core_converse.removeBookmarkViaEvent,
 
       toggleBookmarksList(ev) {
         if (ev && ev.preventDefault) {
@@ -85566,19 +89578,19 @@ converse.plugins.add('converse-bookmark-views', {
 
         const icon_el = ev.target.matches('.fa') ? ev.target : ev.target.querySelector('.fa');
 
-        if (converse_bookmark_views_u.hasClass('fa-caret-down', icon_el)) {
-          converse_bookmark_views_u.slideIn(this.el.querySelector('.bookmarks'));
+        if (bookmark_views_u.hasClass('fa-caret-down', icon_el)) {
+          bookmark_views_u.slideIn(this.el.querySelector('.bookmarks'));
           this.list_model.save({
-            'toggle-state': converse_core_converse.CLOSED
+            'toggle-state': core_converse.CLOSED
           });
           icon_el.classList.remove("fa-caret-down");
           icon_el.classList.add("fa-caret-right");
         } else {
           icon_el.classList.remove("fa-caret-right");
           icon_el.classList.add("fa-caret-down");
-          converse_bookmark_views_u.slideOut(this.el.querySelector('.bookmarks'));
+          bookmark_views_u.slideOut(this.el.querySelector('.bookmarks'));
           this.list_model.save({
-            'toggle-state': converse_core_converse.OPENED
+            'toggle-state': core_converse.OPENED
           });
         }
       }
@@ -85586,10 +89598,10 @@ converse.plugins.add('converse-bookmark-views', {
     });
     /************************ BEGIN Event Handlers ************************/
 
-    const initBookmarkViews = async function initBookmarkViews() {
-      await converse_core_api.waitUntil('roomsPanelRendered');
-      converse_core_converse.bookmarksview = new converse_core_converse.BookmarksView({
-        'model': converse_core_converse.bookmarks
+    const initBookmarkViews = async function () {
+      await core_api.waitUntil('roomsPanelRendered');
+      core_converse.bookmarksview = new core_converse.BookmarksView({
+        'model': core_converse.bookmarks
       });
       /**
        * Triggered once the _converse.Bookmarks collection and _converse.BookmarksView view
@@ -85598,11 +89610,11 @@ converse.plugins.add('converse-bookmark-views', {
        * @example _converse.api.listen.on('bookmarkViewsInitialized', () => { ... });
        */
 
-      converse_core_api.trigger('bookmarkViewsInitialized');
+      core_api.trigger('bookmarkViewsInitialized');
     };
 
-    converse_core_api.listen.on('getHeadingButtons', (view, buttons) => {
-      if (converse_core_converse.allow_bookmarks && view.model.get('type') === converse_core_converse.CHATROOMS_TYPE) {
+    core_api.listen.on('getHeadingButtons', (view, buttons) => {
+      if (core_converse.allow_bookmarks && view.model.get('type') === core_converse.CHATROOMS_TYPE) {
         const bookmarked = view.model.get('bookmarked');
         const data = {
           'i18n_title': bookmarked ? i18n_('Unbookmark this groupchat') : i18n_('Bookmark this groupchat'),
@@ -85615,135 +89627,186 @@ converse.plugins.add('converse-bookmark-views', {
         const names = buttons.map(t => t.name);
         const idx = names.indexOf('details');
 
-        const data_promise = converse_core_converse.checkBookmarksSupport().then(s => s ? data : '');
+        const data_promise = core_converse.checkBookmarksSupport().then(s => s ? data : '');
 
         return idx > -1 ? [...buttons.slice(0, idx), data_promise, ...buttons.slice(idx)] : [data_promise, ...buttons];
       }
 
       return buttons;
     });
-    converse_core_api.listen.on('bookmarksInitialized', initBookmarkViews);
-    converse_core_api.listen.on('chatRoomViewInitialized', view => view.setBookmarkState());
+    core_api.listen.on('bookmarksInitialized', initBookmarkViews);
+    core_api.listen.on('chatRoomViewInitialized', view => view.setBookmarkState());
     /************************ END Event Handlers ************************/
   }
 
 });
-// EXTERNAL MODULE: ./node_modules/bootstrap.native/dist/bootstrap-native.js
-var bootstrap_native = __webpack_require__(27);
-var bootstrap_native_default = /*#__PURE__*/__webpack_require__.n(bootstrap_native);
+// EXTERNAL MODULE: ./node_modules/urijs/src/URI.js
+var URI = __webpack_require__(35);
+var URI_default = /*#__PURE__*/__webpack_require__.n(URI);
 
-// CONCATENATED MODULE: ./src/templates/alert.js
-function alert_templateObject() {
-  const data = alert_taggedTemplateLiteral(["<div class=\"alert ", "\" role=\"alert\"><p>", "</p></div>"]);
+// CONCATENATED MODULE: ./src/templates/audio.js
+function audio_templateObject() {
+  const data = audio_taggedTemplateLiteral(["\n    <audio controls src=\"", "\"></audio>\n    <a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>\n"]);
 
-  alert_templateObject = function _templateObject() {
+  audio_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function alert_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function audio_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
-/* harmony default export */ var templates_alert = (o => lit_html_html(alert_templateObject(), o.type, o.message));
-// CONCATENATED MODULE: ./src/templates/buttons.js
-function buttons_templateObject2() {
-  const data = buttons_taggedTemplateLiteral(["<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"", "\"><span aria-hidden=\"true\">\xD7</span></button>"]);
+/* harmony default export */ var audio = (o => lit_html_html(audio_templateObject(), o.url, o.url, o.label_download));
+// CONCATENATED MODULE: ./src/templates/file.js
+function file_templateObject() {
+  const data = file_taggedTemplateLiteral(["<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>"]);
 
-  buttons_templateObject2 = function _templateObject2() {
+  file_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function buttons_templateObject() {
-  const data = buttons_taggedTemplateLiteral(["<button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">", "</button>"]);
+function file_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  buttons_templateObject = function _templateObject() {
-    return data;
-  };
 
-  return data;
-}
+/* harmony default export */ var templates_file = (o => lit_html_html(file_templateObject(), o.url, o.label_download));
+// EXTERNAL MODULE: ./src/templates/form_captcha.html
+var form_captcha = __webpack_require__(170);
+var form_captcha_default = /*#__PURE__*/__webpack_require__.n(form_captcha);
 
-function buttons_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+// EXTERNAL MODULE: ./src/templates/form_checkbox.html
+var form_checkbox = __webpack_require__(171);
+var form_checkbox_default = /*#__PURE__*/__webpack_require__.n(form_checkbox);
 
+// EXTERNAL MODULE: ./src/templates/form_input.html
+var form_input = __webpack_require__(64);
+var form_input_default = /*#__PURE__*/__webpack_require__.n(form_input);
 
+// EXTERNAL MODULE: ./src/templates/form_select.html
+var form_select = __webpack_require__(172);
+var form_select_default = /*#__PURE__*/__webpack_require__.n(form_select);
 
-const modal_close_button = lit_html_html(buttons_templateObject(), i18n_('Close'));
-const modal_header_close_button = lit_html_html(buttons_templateObject2(), i18n_('Close'));
-// CONCATENATED MODULE: ./src/templates/alert_modal.js
-function alert_modal_templateObject2() {
-  const data = alert_modal_taggedTemplateLiteral(["<p>", "</p>"]);
+// EXTERNAL MODULE: ./src/templates/form_textarea.html
+var form_textarea = __webpack_require__(173);
+var form_textarea_default = /*#__PURE__*/__webpack_require__.n(form_textarea);
+
+// EXTERNAL MODULE: ./src/templates/form_url.html
+var form_url = __webpack_require__(174);
+var form_url_default = /*#__PURE__*/__webpack_require__.n(form_url);
+
+// EXTERNAL MODULE: ./src/templates/form_username.html
+var form_username = __webpack_require__(65);
+var form_username_default = /*#__PURE__*/__webpack_require__.n(form_username);
 
-  alert_modal_templateObject2 = function _templateObject2() {
+// CONCATENATED MODULE: ./src/templates/directives/image.js
+function image_templateObject() {
+  const data = image_taggedTemplateLiteral(["<a href=\"", "\"\n                class=\"chat-image__link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            ><img class=\"chat-image img-thumbnail\" src=\"", "\" @click=", " @error=", " @load=", "/></a>"]);
+
+  image_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function alert_modal_templateObject() {
-  const data = alert_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header ", "\">\n              <h5 class=\"modal-title\">", "</h5>\n              ", "\n            </div>\n            <div class=\"modal-body\">\n              <span class=\"modal-alert\"></span>\n              ", "\n            </div>\n        </div>\n    </div>\n"]);
+function image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+/**
+ * lit-html directive which attempts to render an <img> element from a URL.
+ * It will fall back to rendering an <a> element if it can't.
+ *
+ * @param { String } src - The value that will be assigned to the `src` attribute of the `<img>` element.
+ * @param { String } href - The value that will be assigned to the `href` attribute of the `<img>` element.
+ * @param { Function } onLoad - A callback function to be called once the image has loaded.
+ * @param { Function } onClick - A callback function to be called once the image has been clicked.
+*/
+
+const renderImage = directive_directive((src, href, onLoad, onClick) => part => {
+  function onError() {
+    const u = converse.env.utils;
+
+    if (u.isURLWithImageExtension(src)) {
+      part.setValue(u.convertUrlToHyperlink(href));
+      part.commit();
+    } else {
+      // Before giving up and falling back to just rendering a hyperlink,
+      // we attach `.png` and try one more time.
+      // This works with some Imgur URLs
+      part.setValue(renderImage("".concat(src, ".png"), href, onLoad, onClick));
+      part.commit();
+    }
+  }
+
+  part.setValue(lit_html_html(image_templateObject(), href, src, onClick, onError, onLoad));
+});
+// CONCATENATED MODULE: ./src/templates/image.js
+function templates_image_templateObject() {
+  const data = templates_image_taggedTemplateLiteral(["", ""]);
 
-  alert_modal_templateObject = function _templateObject() {
+  templates_image_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function alert_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function templates_image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
 
 
+/* harmony default export */ var templates_image = (o => lit_html_html(templates_image_templateObject(), renderImage(o.url, o.url, o.onLoad, o.onClick)));
+// EXTERNAL MODULE: ./src/templates/select_option.html
+var select_option = __webpack_require__(175);
+var select_option_default = /*#__PURE__*/__webpack_require__.n(select_option);
 
-/* harmony default export */ var alert_modal = (o => lit_html_html(alert_modal_templateObject(), o.level, o.title, modal_header_close_button, o.messages.map(message => lit_html_html(alert_modal_templateObject2(), message))));
-// CONCATENATED MODULE: ./src/templates/prompt.js
-function prompt_templateObject3() {
-  const data = prompt_taggedTemplateLiteral(["<p>", "</p>"]);
+// CONCATENATED MODULE: ./src/templates/video.js
+function video_templateObject() {
+  const data = video_taggedTemplateLiteral(["<video controls preload=\"metadata\" src=\"", "\" style=\"max-height: 50vh\"></video>"]);
 
-  prompt_templateObject3 = function _templateObject3() {
+  video_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function prompt_templateObject2() {
-  const data = prompt_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header ", "\">\n          <h5 class=\"modal-title\">", "</h5>\n          <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n            <span aria-hidden=\"true\">\xD7</span>\n          </button>\n        </div>\n        <div class=\"modal-body\">\n            <span class=\"modal-alert\"></span>\n            <form class=\"converse-form converse-form--modal confirm\" action=\"#\">\n              <div class=\"form-group\">\n                  ", "\n              </div>\n              ", "\n              <div class=\"form-group\">\n                  <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                  <input type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\" value=\"", "\"/>\n              </div>\n          </form>\n        </div>\n      </div>\n    </div>\n"]);
+function video_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+/* harmony default export */ var video = (o => lit_html_html(video_templateObject(), o.url));
+// CONCATENATED MODULE: ./src/utils/html.js
+function html_templateObject2() {
+  const data = html_taggedTemplateLiteral(["<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>"]);
 
-  prompt_templateObject2 = function _templateObject2() {
+  html_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function prompt_templateObject() {
-  const data = prompt_taggedTemplateLiteral(["\n    <div class=\"form-group\">\n        <label>\n            ", "\n            <input type=\"text\"\n                name=\"", "\"\n                class=\"", " form-control form-control--labeled\"\n                ?required=\"", "\"\n                placeholder=\"", "\" />\n        </label>\n    </div>\n"]);
+function html_templateObject() {
+  const data = html_taggedTemplateLiteral(["\n            <a target=\"_blank\"\n               rel=\"noopener\"\n               @click=", "\n               href=\"", "\">", "</a>"]);
 
-  prompt_templateObject = function _templateObject() {
+  html_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function prompt_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-const tpl_field = f => lit_html_html(prompt_templateObject(), f.label || '', f.name, f.challenge_failed ? 'error' : '', f.required, f.placeholder);
+function html_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-/* harmony default export */ var templates_prompt = (o => lit_html_html(prompt_templateObject2(), o.level || '', o.title, o.messages.map(message => lit_html_html(prompt_templateObject3(), message)), o.fields.map(f => tpl_field(f)), i18n_('OK'), i18n_('Cancel')));
-// CONCATENATED MODULE: ./src/converse-modal.js
 /**
- * @module converse-modal
- * @copyright The Converse.js contributors
+ * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
+ * @description This is the DOM/HTML utilities module.
  */
 
 
@@ -85755,563 +89818,409 @@ const tpl_field = f => lit_html_html(prompt_templateObject(), f.label || '', f.n
 
 
 
-const {
-  sizzle: converse_modal_sizzle
-} = converse.env;
-const converse_modal_u = converse.env.utils;
 
-let converse_modal_converse;
 
-const BootstrapModal = view_View.extend({
-  className: "modal",
-  events: {
-    'click  .nav-item .nav-link': 'switchTab'
-  },
 
-  initialize() {
-    this.render();
-    this.el.setAttribute('tabindex', '-1');
-    this.el.setAttribute('role', 'dialog');
-    this.el.setAttribute('aria-hidden', 'true');
-    const label_id = this.el.querySelector('.modal-title').getAttribute('id');
-    label_id && this.el.setAttribute('aria-labelledby', label_id);
-    this.insertIntoDOM();
-    const Modal = bootstrap_native_default.a.Modal;
-    this.modal = new Modal(this.el, {
-      backdrop: true,
-      keyboard: true
-    });
-    this.el.addEventListener('hide.bs.modal', () => converse_modal_u.removeClass('selected', this.trigger_el), false);
-  },
 
-  insertIntoDOM() {
-    const container_el = converse_modal_converse.chatboxviews.el.querySelector("#converse-modals");
 
-    container_el.insertAdjacentElement('beforeEnd', this.el);
-  },
 
-  switchTab(ev) {
-    ev.stopPropagation();
-    ev.preventDefault();
-    converse_modal_sizzle('.nav-link.active', this.el).forEach(el => {
-      converse_modal_u.removeClass('active', this.el.querySelector(el.getAttribute('href')));
-      converse_modal_u.removeClass('active', el);
-    });
-    converse_modal_u.addClass('active', ev.target);
-    converse_modal_u.addClass('active', this.el.querySelector(ev.target.getAttribute('href')));
-  },
 
-  alert(message, type = 'primary') {
-    const body = this.el.querySelector('.modal-alert');
 
-    if (body === null) {
-      headless_log.error("Could not find a .modal-alert element in the modal to show an alert message in!");
-      return;
-    } // FIXME: Instead of adding the alert imperatively, we should
-    // find a way to let the modal rerender with an alert message
 
+const APPROVED_URL_PROTOCOLS = ['http', 'https', 'xmpp', 'mailto'];
 
-    render_render(templates_alert({
-      'type': "alert-".concat(type),
-      'message': message
-    }), body);
-    const el = body.firstElementChild;
-    setTimeout(() => {
-      converse_modal_u.addClass('fade-out', el);
-      setTimeout(() => converse_modal_u.removeElement(el), 600);
-    }, 5000);
-  },
+function getAutoCompleteProperty(name, options) {
+  return {
+    'muc#roomconfig_lang': 'language',
+    'muc#roomconfig_roomsecret': (options === null || options === void 0 ? void 0 : options.new_password) ? 'new-password' : 'current-password'
+  }[name];
+}
 
-  show(ev) {
-    if (ev) {
-      ev.preventDefault();
-      this.trigger_el = ev.target;
-      this.trigger_el.classList.add('selected');
-    }
+const XFORM_TYPE_MAP = {
+  'text-private': 'password',
+  'text-single': 'text',
+  'fixed': 'label',
+  'boolean': 'checkbox',
+  'hidden': 'hidden',
+  'jid-multi': 'textarea',
+  'list-single': 'dropdown',
+  'list-multi': 'dropdown'
+};
 
-    this.modal.show();
+function slideOutWrapup(el) {
+  /* Wrapup function for slideOut. */
+  el.removeAttribute('data-slider-marker');
+  el.classList.remove('collapsed');
+  el.style.overflow = "";
+  el.style.height = "";
+}
+
+function getURI(url) {
+  try {
+    return url instanceof URI_default.a ? url : new URI_default.a(url);
+  } catch (error) {
+    headless_log.debug(error);
+    return null;
   }
+}
 
-});
-const Confirm = BootstrapModal.extend({
-  events: {
-    'submit .confirm': 'onConfimation'
-  },
+function checkTLS(uri) {
+  return window.location.protocol === 'http:' || window.location.protocol === 'https:' && uri.protocol().toLowerCase() === "https";
+}
 
-  initialize() {
-    this.confirmation = converse_modal_u.getResolveablePromise();
-    BootstrapModal.prototype.initialize.apply(this, arguments);
-    this.listenTo(this.model, 'change', this.render);
-    this.el.addEventListener('closed.bs.modal', () => this.confirmation.reject(), false);
-  },
+function checkFileTypes(types, url) {
+  const uri = getURI(url);
 
-  toHTML() {
-    return templates_prompt(this.model.toJSON());
-  },
+  if (uri === null || !checkTLS(uri)) {
+    return false;
+  }
 
-  afterRender() {
-    if (!this.close_handler_registered) {
-      this.el.addEventListener('closed.bs.modal', () => {
-        if (!this.confirmation.isResolved) {
-          this.confirmation.reject();
-        }
-      }, false);
-      this.close_handler_registered = true;
-    }
-  },
+  const filename = uri.filename().toLowerCase();
+  return !!types.filter(ext => filename.endsWith(ext)).length;
+}
 
-  onConfimation(ev) {
-    ev.preventDefault();
-    const form_data = new FormData(ev.target);
-    const fields = (this.model.get('fields') || []).map(field => {
-      const value = form_data.get(field.name).trim();
-      field.value = value;
+utils_core.isAudioURL = url => checkFileTypes(['.ogg', '.mp3', '.m4a'], url);
 
-      if (field.challenge) {
-        field.challenge_failed = value !== field.challenge;
-      }
+utils_core.isVideoURL = url => checkFileTypes(['.mp4', '.webm'], url);
 
-      return field;
-    });
+utils_core.isURLWithImageExtension = url => checkFileTypes(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.svg'], url);
 
-    if (fields.filter(c => c.challenge_failed).length) {
-      this.model.set('fields', fields); // Setting an array doesn't trigger a change event
+utils_core.isImageURL = url => {
+  const regex = core_api.settings.get('image_urls_regex');
+  return (regex === null || regex === void 0 ? void 0 : regex.test(url)) || utils_core.isURLWithImageExtension(url);
+};
 
-      this.model.trigger('change');
-      return;
-    }
+utils_core.isImageDomainAllowed = url => {
+  const show_images_inline = core_api.settings.get('show_images_inline');
 
-    this.confirmation.resolve(fields);
-    this.modal.hide();
+  if (!Array.isArray(show_images_inline)) {
+    return true;
   }
 
-});
-const Alert = BootstrapModal.extend({
-  initialize() {
-    BootstrapModal.prototype.initialize.apply(this, arguments);
-    this.listenTo(this.model, 'change', this.render);
-  },
+  try {
+    const image_domain = getURI(url).domain();
+    return show_images_inline.includes(image_domain);
+  } catch (error) {
+    headless_log.debug(error);
+    return true;
+  }
+};
 
-  toHTML() {
-    return alert_modal(Object.assign({
-      __: i18n_
-    }, this.model.toJSON()));
+function getFileName(uri) {
+  try {
+    return decodeURI(uri.filename());
+  } catch (error) {
+    headless_log.debug(error);
+    return uri.filename();
   }
+}
 
-});
-converse.plugins.add('converse-modal', {
-  initialize() {
-    converse_modal_converse = this._converse;
-    /************************ BEGIN Event Listeners ************************/
+function renderAudioURL(_converse, uri) {
+  const {
+    __
+  } = _converse;
+  return audio({
+    'url': uri.toString(),
+    'label_download': __('Download audio file "%1$s"', getFileName(uri))
+  });
+}
 
-    converse_modal_converse.api.listen.on('disconnect', () => {
-      const container = document.querySelector("#converse-modals");
+function renderImageURL(_converse, uri) {
+  const {
+    __
+  } = _converse;
+  return templates_file({
+    'url': uri.toString(),
+    'label_download': __('Download image file "%1$s"', getFileName(uri))
+  });
+}
 
-      if (container) {
-        container.innerHTML = '';
-      }
-    });
-    /************************ BEGIN API ************************/
-    // We extend the default converse.js API to add methods specific to MUC chat rooms.
+function renderFileURL(_converse, uri) {
+  const {
+    __
+  } = _converse;
+  return templates_file({
+    'url': uri.toString(),
+    'label_download': __('Download file "%1$s"', getFileName(uri))
+  });
+}
+/**
+ * Returns the markup for a URL that points to a downloadable asset
+ * (such as a video, image or audio file).
+ * @method u#getOOBURLMarkup
+ * @param { String } url
+ * @returns { String }
+ */
 
 
-    let alert;
-    Object.assign(converse_modal_converse.api, {
-      /**
-       * Show a confirm modal to the user.
-       * @method _converse.api.confirm
-       * @param { String } title - The header text for the confirmation dialog
-       * @param { (String[]|String) } messages - The text to show to the user
-       * @param { Array<Field> } fields - An object representing a fields presented to the user.
-       * @property { String } Field.label - The form label for the input field.
-       * @property { String } Field.name - The name for the input field.
-       * @property { String } [Field.challenge] - A challenge value that must be provided by the user.
-       * @property { String } [Field.placeholder] - The placeholder for the input field.
-       * @property { Boolean} [Field.required] - Whether the field is required or not
-       * @returns { Promise<Array|false> } A promise which resolves with an array of
-       *  filled in fields or `false` if the confirm dialog was closed or canceled.
-       */
-      async confirm(title, messages = [], fields = []) {
-        if (typeof messages === 'string') {
-          messages = [messages];
-        }
+utils_core.getOOBURLMarkup = function (_converse, url) {
+  const uri = getURI(url);
 
-        const model = new model_Model({
-          title,
-          messages,
-          fields,
-          'type': 'confirm'
-        });
-        const confirm = new Confirm({
-          model
-        });
-        confirm.show();
-        let result;
+  if (uri === null) {
+    return url;
+  }
 
-        try {
-          result = await confirm.confirmation;
-        } catch (e) {
-          result = false;
-        }
+  if (utils_core.isVideoURL(uri)) {
+    return video({
+      url
+    });
+  } else if (utils_core.isAudioURL(uri)) {
+    return renderAudioURL(_converse, uri);
+  } else if (utils_core.isImageURL(uri)) {
+    return renderImageURL(_converse, uri);
+  } else {
+    return renderFileURL(_converse, uri);
+  }
+};
+/**
+ * Applies some resistance to `value` around the `default_value`.
+ * If value is close enough to `default_value`, then it is returned, otherwise
+ * `value` is returned.
+ * @method u#applyDragResistance
+ * @param { Integer } value
+ * @param { Integer } default_value
+ * @returns { Integer }
+ */
 
-        confirm.remove();
-        return result;
-      },
 
-      /**
-       * Show a prompt modal to the user.
-       * @method _converse.api.prompt
-       * @param { String } title - The header text for the prompt
-       * @param { (String[]|String) } messages - The prompt text to show to the user
-       * @param { String } placeholder - The placeholder text for the prompt input
-       * @returns { Promise<String|false> } A promise which resolves with the text provided by the
-       *  user or `false` if the user canceled the prompt.
-       */
-      async prompt(title, messages = [], placeholder = '') {
-        if (typeof messages === 'string') {
-          messages = [messages];
-        }
-
-        const model = new model_Model({
-          title,
-          messages,
-          'fields': [{
-            'name': 'reason',
-            'placeholder': placeholder
-          }],
-          'type': 'prompt'
-        });
-        const prompt = new Confirm({
-          model
-        });
-        prompt.show();
-        let result;
-
-        try {
-          var _await$prompt$confirm;
-
-          result = (_await$prompt$confirm = (await prompt.confirmation).pop()) === null || _await$prompt$confirm === void 0 ? void 0 : _await$prompt$confirm.value;
-        } catch (e) {
-          result = false;
-        }
+utils_core.applyDragResistance = function (value, default_value) {
+  if (value === undefined) {
+    return undefined;
+  } else if (default_value === undefined) {
+    return value;
+  }
 
-        prompt.remove();
-        return result;
-      },
+  const resistance = 10;
 
-      /**
-       * Show an alert modal to the user.
-       * @method _converse.api.alert
-       * @param { ('info'|'warn'|'error') } type - The type of alert.
-       * @param { String } title - The header text for the alert.
-       * @param { (String[]|String) } messages - The alert text to show to the user.
-       */
-      alert(type, title, messages) {
-        if (typeof messages === 'string') {
-          messages = [messages];
-        }
+  if (value !== default_value && Math.abs(value - default_value) < resistance) {
+    return default_value;
+  }
 
-        let level;
+  return value;
+};
+/**
+ * Return the height of the passed in DOM element,
+ * based on the heights of its children.
+ * @method u#calculateElementHeight
+ * @param {HTMLElement} el
+ * @returns {integer}
+ */
 
-        if (type === 'error') {
-          level = 'alert-danger';
-        } else if (type === 'info') {
-          level = 'alert-info';
-        } else if (type === 'warn') {
-          level = 'alert-warning';
-        }
 
-        if (alert === undefined) {
-          const model = new model_Model({
-            'title': title,
-            'messages': messages,
-            'level': level,
-            'type': 'alert'
-          });
-          alert = new Alert({
-            model
-          });
-        } else {
-          alert.model.set({
-            'title': title,
-            'messages': messages,
-            'level': level
-          });
-        }
+utils_core.calculateElementHeight = function (el) {
+  return Array.from(el.children).reduce((result, child) => result + child.offsetHeight, 0);
+};
 
-        alert.show();
-      }
+utils_core.getNextElement = function (el, selector = '*') {
+  let next_el = el.nextElementSibling;
 
-    });
+  while (next_el !== null && !sizzle_default.a.matchesSelector(next_el, selector)) {
+    next_el = next_el.nextElementSibling;
   }
 
-});
-// CONCATENATED MODULE: ./src/templates/image_modal.js
-function image_modal_templateObject() {
-  const data = image_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog fit-content\" role=\"document\">\n        <div class=\"modal-content fit-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"message-versions-modal-label\">", "<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a></h4>\n                ", "\n            </div>\n            <div class=\"modal-body fit-content\">\n                <img class=\"chat-image\" src=\"", "\"/>\n            </div>\n            <div class=\"modal-footer\">", "</div>\n        </div>\n    </div>\n"]);
-
-  image_modal_templateObject = function _templateObject() {
-    return data;
-  };
+  return next_el;
+};
 
-  return data;
-}
+utils_core.getPreviousElement = function (el, selector = '*') {
+  let prev_el = el.previousElementSibling;
 
-function image_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+  while (prev_el !== null && !sizzle_default.a.matchesSelector(prev_el, selector)) {
+    prev_el = prev_el.previousElementSibling;
+  }
 
+  return prev_el;
+};
 
+utils_core.getFirstChildElement = function (el, selector = '*') {
+  let first_el = el.firstElementChild;
 
+  while (first_el !== null && !sizzle_default.a.matchesSelector(first_el, selector)) {
+    first_el = first_el.nextElementSibling;
+  }
 
-/* harmony default export */ var image_modal = (o => lit_html_html(image_modal_templateObject(), i18n_('Image: '), o.src, o.src, modal_header_close_button, o.src, modal_close_button));
-// CONCATENATED MODULE: ./src/modals/image.js
+  return first_el;
+};
 
+utils_core.getLastChildElement = function (el, selector = '*') {
+  let last_el = el.lastElementChild;
 
-/* harmony default export */ var modals_image = (BootstrapModal.extend({
-  toHTML() {
-    return image_modal({
-      'src': this.src
-    });
+  while (last_el !== null && !sizzle_default.a.matchesSelector(last_el, selector)) {
+    last_el = last_el.previousElementSibling;
   }
 
-}));
-// EXTERNAL MODULE: ./node_modules/urijs/src/URI.js
-var URI = __webpack_require__(28);
-var URI_default = /*#__PURE__*/__webpack_require__.n(URI);
+  return last_el;
+};
 
-// CONCATENATED MODULE: ./node_modules/lit-html/directives/until.js
+utils_core.hasClass = function (className, el) {
+  return el instanceof Element && el.classList.contains(className);
+};
+
+utils_core.toggleClass = function (className, el) {
+  utils_core.hasClass(className, el) ? utils_core.removeClass(className, el) : utils_core.addClass(className, el);
+};
 /**
- * @license
- * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at
- * http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at
- * http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at
- * http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at
- * http://polymer.github.io/PATENTS.txt
+ * Add a class to an element.
+ * @method u#addClass
+ * @param {string} className
+ * @param {Element} el
  */
 
 
-const _state = new WeakMap();
-// Effectively infinity, but a SMI.
-const _infinity = 0x7fffffff;
+utils_core.addClass = function (className, el) {
+  el instanceof Element && el.classList.add(className);
+  return el;
+};
 /**
- * Renders one of a series of values, including Promises, to a Part.
- *
- * Values are rendered in priority order, with the first argument having the
- * highest priority and the last argument having the lowest priority. If a
- * value is a Promise, low-priority values will be rendered until it resolves.
- *
- * The priority of values can be used to create placeholder content for async
- * data. For example, a Promise with pending content can be the first,
- * highest-priority, argument, and a non_promise loading indicator template can
- * be used as the second, lower-priority, argument. The loading indicator will
- * render immediately, and the primary content will render when the Promise
- * resolves.
- *
- * Example:
- *
- *     const content = fetch('./content.txt').then(r => r.text());
- *     html`${until(content, html`<span>Loading...</span>`)}`
+ * Remove a class from an element.
+ * @method u#removeClass
+ * @param {string} className
+ * @param {Element} el
  */
-const until = directive_directive((...args) => (part) => {
-    let state = _state.get(part);
-    if (state === undefined) {
-        state = {
-            lastRenderedIndex: _infinity,
-            values: [],
-        };
-        _state.set(part, state);
-    }
-    const previousValues = state.values;
-    let previousLength = previousValues.length;
-    state.values = args;
-    for (let i = 0; i < args.length; i++) {
-        // If we've rendered a higher-priority value already, stop.
-        if (i > state.lastRenderedIndex) {
-            break;
-        }
-        const value = args[i];
-        // Render non-Promise values immediately
-        if (isPrimitive(value) ||
-            typeof value.then !== 'function') {
-            part.setValue(value);
-            state.lastRenderedIndex = i;
-            // Since a lower-priority value will never overwrite a higher-priority
-            // synchronous value, we can stop processing now.
-            break;
-        }
-        // If this is a Promise we've already handled, skip it.
-        if (i < previousLength && value === previousValues[i]) {
-            continue;
-        }
-        // We have a Promise that we haven't seen before, so priorities may have
-        // changed. Forget what we rendered before.
-        state.lastRenderedIndex = _infinity;
-        previousLength = 0;
-        Promise.resolve(value).then((resolvedValue) => {
-            const index = state.values.indexOf(value);
-            // If state.values doesn't contain the value, we've re-rendered without
-            // the value, so don't render it. Then, only render if the value is
-            // higher-priority than what's already been rendered.
-            if (index > -1 && index < state.lastRenderedIndex) {
-                state.lastRenderedIndex = index;
-                part.setValue(resolvedValue);
-                part.commit();
-            }
-        });
-    }
-});
-//# sourceMappingURL=until.js.map
-// CONCATENATED MODULE: ./src/templates/directives/body.js
-function _templateObject4() {
-  const data = body_taggedTemplateLiteral(["", ""]);
-
-  _templateObject4 = function _templateObject4() {
-    return data;
-  };
-
-  return data;
-}
-
-function body_templateObject3() {
-  const data = body_taggedTemplateLiteral(["", ""]);
-
-  body_templateObject3 = function _templateObject3() {
-    return data;
-  };
-
-  return data;
-}
-
-function body_templateObject2() {
-  const data = body_taggedTemplateLiteral(["<span class=\"mention\">", "</span>"]);
 
-  body_templateObject2 = function _templateObject2() {
-    return data;
-  };
 
-  return data;
-}
+utils_core.removeClass = function (className, el) {
+  el instanceof Element && el.classList.remove(className);
+  return el;
+};
 
-function body_templateObject() {
-  const data = body_taggedTemplateLiteral(["<span class=\"mention mention--self badge badge-info\">", "</span>"]);
+utils_core.removeElement = function (el) {
+  el instanceof Element && el.parentNode && el.parentNode.removeChild(el);
+  return el;
+};
 
-  body_templateObject = function _templateObject() {
-    return data;
-  };
+utils_core.getElementFromTemplateResult = function (tr) {
+  const div = document.createElement('div');
+  render_render(tr, div);
+  return div.firstElementChild;
+};
 
-  return data;
-}
+utils_core.showElement = el => {
+  utils_core.removeClass('collapsed', el);
+  utils_core.removeClass('hidden', el);
+};
 
-function body_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+utils_core.hideElement = function (el) {
+  el instanceof Element && el.classList.add('hidden');
+  return el;
+};
 
+utils_core.ancestor = function (el, selector) {
+  let parent = el;
 
+  while (parent !== null && !sizzle_default.a.matchesSelector(parent, selector)) {
+    parent = parent.parentElement;
+  }
 
+  return parent;
+};
+/**
+ * Return the element's siblings until one matches the selector.
+ * @private
+ * @method u#nextUntil
+ * @param { HTMLElement } el
+ * @param { String } selector
+ */
 
 
+utils_core.nextUntil = function (el, selector) {
+  const matches = [];
+  let sibling_el = el.nextElementSibling;
 
+  while (sibling_el !== null && !sibling_el.matches(selector)) {
+    matches.push(sibling_el);
+    sibling_el = sibling_el.nextElementSibling;
+  }
 
-const body_u = converse.env.utils;
+  return matches;
+};
 /**
- * @class MessageText
- * A String subclass that is used to represent the rich text
- * of a chat message.
- *
- * The "rich" parts of the text is represented by lit-html TemplateResult
- * objects which are added via the {@link MessageText.addTemplateResult}
- * method and saved as metadata.
- *
- * By default Converse adds TemplateResults to support emojis, hyperlinks,
- * images, map URIs and mentions.
- *
- * 3rd party plugins can listen for the `beforeMessageBodyTransformed`
- * and/or `afterMessageBodyTransformed` events and then call
- * `addTemplateResult` on the MessageText instance in order to add their own
- * rich features.
+ * Helper method that replace HTML-escaped symbols with equivalent characters
+ * (e.g. transform occurrences of '&amp;' to '&')
+ * @private
+ * @method u#unescapeHTML
+ * @param { String } string - a String containing the HTML-escaped symbols.
  */
 
-class body_MessageText extends String {
-  /**
-   * Create a new {@link MessageText} instance.
-   * @param { String } text - The plain text that was received from the `<message>` stanza.
-   */
-  constructor(text) {
-    super(text);
-    this.references = [];
-  }
-  /**
-   * The "rich" markup parts of a chat message are represented by lit-html
-   * TemplateResult objects.
-   *
-   * This method can be used to add new template results to this message's
-   * text.
-   *
-   * @method MessageText.addTemplateResult
-   * @param { Number } begin - The starting index of the plain message text
-   * which is being replaced with markup.
-   * @param { Number } end - The ending index of the plain message text
-   * which is being replaced with markup.
-   * @param { Object } template - The lit-html TemplateResult instance
-   */
 
+utils_core.unescapeHTML = function (string) {
+  var div = document.createElement('div');
+  div.innerHTML = string;
+  return div.innerText;
+};
 
-  addTemplateResult(begin, end, template) {
-    this.references.push({
-      begin,
-      end,
-      template
-    });
-  }
+utils_core.escapeHTML = function (string) {
+  return string.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
+};
 
-  isMeCommand() {
-    const text = this.toString();
+utils_core.convertToImageTag = function (url, onLoad, onClick) {
+  return templates_image({
+    url,
+    onClick,
+    onLoad
+  });
+};
 
-    if (!text) {
-      return false;
-    }
+function onClickXMPPURI(ev) {
+  ev.preventDefault();
+  core_api.rooms.open(ev.target.href);
+}
 
-    return text.startsWith('/me ');
+utils_core.convertURIoHyperlink = function (uri, urlAsTyped) {
+  let normalized_url = uri.normalize()._string;
+
+  const pretty_url = uri._parts.urn ? normalized_url : uri.readable();
+  const visible_url = urlAsTyped || pretty_url;
+
+  if (!uri._parts.protocol && !normalized_url.startsWith('http://') && !normalized_url.startsWith('https://')) {
+    normalized_url = 'http://' + normalized_url;
   }
 
-  static replaceText(text) {
-    return convertASCII2Emoji(text.replace(/\n\n+/g, '\n\n'));
+  if (uri._parts.protocol === 'xmpp' && uri._parts.query === 'join') {
+    return lit_html_html(html_templateObject(), onClickXMPPURI, normalized_url, visible_url);
   }
 
-  marshall() {
-    let list = [this.toString()];
-    this.references.sort((a, b) => b.begin - a.begin).forEach(ref => {
-      const text = list.shift();
-      list = [text.slice(0, ref.begin), ref.template, text.slice(ref.end), ...list];
-    }); // Subtract `/me ` from 3rd person messages
+  return lit_html_html(html_templateObject2(), normalized_url, visible_url);
+};
 
-    if (this.isMeCommand()) list[0] = list[0].substring(4);
+function isProtocolApproved(protocol, safeProtocolsList = APPROVED_URL_PROTOCOLS) {
+  return !!safeProtocolsList.includes(protocol);
+} // Will return false if URL is malformed or contains disallowed characters
 
-    const isString = s => typeof s === 'string';
 
-    return list.reduce((acc, i) => isString(i) ? [...acc, body_MessageText.replaceText(i)] : [...acc, i], []);
+function isUrlValid(urlString) {
+  try {
+    const url = new URL(urlString);
+    return !!url;
+  } catch (error) {
+    return false;
   }
-
 }
 
-function addMapURLs(text) {
-  const regex = /geo:([\-0-9.]+),([\-0-9.]+)(?:,([\-0-9.]+))?(?:\?(.*))?/g;
-  const matches = text.matchAll(regex);
+utils_core.convertUrlToHyperlink = function (url) {
+  const http_url = RegExp('^w{3}.', 'ig').test(url) ? "http://".concat(url) : url;
+  const uri = getURI(url);
 
-  for (const m of matches) {
-    text.addTemplateResult(m.index, m.index + m.input.length, body_u.convertUrlToHyperlink(m.input.replace(regex, converse_core_converse.geouri_replacement)));
+  if (uri !== null && isUrlValid(http_url) && (isProtocolApproved(uri._parts.protocol) || !uri._parts.protocol)) {
+    return this.convertURIoHyperlink(uri, url);
   }
-}
 
-function addHyperlinks(text, onImgLoad, onImgClick) {
+  return url;
+};
+
+utils_core.filterQueryParamsFromURL = function (url) {
+  const paramsArray = core_api.settings.get("filter_url_query_params");
+  if (!paramsArray) return url;
+  const parsed_uri = getURI(url);
+  return parsed_uri.removeQuery(paramsArray).toString();
+};
+
+utils_core.addHyperlinks = function (text) {
   const objs = [];
+  const parse_options = {
+    'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
+  };
 
   try {
-    const parse_options = {
-      'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
-    };
     URI_default.a.withinString(text, (url, start, end) => {
       objs.push({
         url,
@@ -86322,1788 +90231,2101 @@ function addHyperlinks(text, onImgLoad, onImgClick) {
     }, parse_options);
   } catch (error) {
     headless_log.debug(error);
-    return;
+    return [text];
   }
 
-  const show_images = converse_core_api.settings.get('show_images_inline');
-  objs.forEach(url_obj => {
-    const url_text = text.slice(url_obj.start, url_obj.end);
-    const filtered_url = body_u.filterQueryParamsFromURL(url_text);
-    text.addTemplateResult(url_obj.start, url_obj.end, show_images && body_u.isImageURL(url_text) && body_u.isImageDomainAllowed(url_text) ? body_u.convertToImageTag(filtered_url, onImgLoad, onImgClick) : body_u.convertUrlToHyperlink(filtered_url));
-  });
-}
+  let list = [text];
 
-async function addEmojis(text) {
-  await converse_core_api.emojis.initialize();
-  const references = [...getShortnameReferences(text.toString()), ...getCodePointReferences(text.toString())];
-  references.forEach(e => {
-    text.addTemplateResult(e.begin, e.end, getEmojiMarkup(e, {
-      'add_title_wrapper': true
-    }));
-  });
-}
+  if (objs.length) {
+    objs.sort((a, b) => b.start - a.start).forEach(url_obj => {
+      const text = list.shift();
+      const url_text = text.slice(url_obj.start, url_obj.end);
+      list = [text.slice(0, url_obj.start), utils_core.convertUrlToHyperlink(url_text), text.slice(url_obj.end), ...list];
+    });
+  } else {
+    list = [text];
+  }
 
-const tpl_mention_with_nick = o => lit_html_html(body_templateObject(), o.mention);
+  return list;
+};
 
-const tpl_mention = o => lit_html_html(body_templateObject2(), o.mention);
+utils_core.httpToGeoUri = function (text, _converse) {
+  const replacement = 'geo:$1,$2';
+  return text.replace(_converse.api.settings.get("geouri_regex"), replacement);
+};
 
-function addReferences(text, model) {
-  var _model$get;
+utils_core.slideInAllElements = function (elements, duration = 300) {
+  return Promise.all(Array.from(elements).map(e => utils_core.slideIn(e, duration)));
+};
 
-  const nick = model.collection.chatbox.get('nick');
-  (_model$get = model.get('references')) === null || _model$get === void 0 ? void 0 : _model$get.forEach(ref => {
-    const mention = text.slice(ref.begin, ref.end);
+utils_core.slideToggleElement = function (el, duration) {
+  if (utils_core.hasClass('collapsed', el) || utils_core.hasClass('hidden', el)) {
+    return utils_core.slideOut(el, duration);
+  } else {
+    return utils_core.slideIn(el, duration);
+  }
+};
+/**
+ * Shows/expands an element by sliding it out of itself
+ * @private
+ * @method u#slideOut
+ * @param { HTMLElement } el - The HTML string
+ * @param { Number } duration - The duration amount in milliseconds
+ */
 
-    if (mention === nick) {
-      text.addTemplateResult(ref.begin, ref.end, tpl_mention_with_nick({
-        mention
-      }));
-    } else {
-      text.addTemplateResult(ref.begin, ref.end, tpl_mention({
-        mention
-      }));
+
+utils_core.slideOut = function (el, duration = 200) {
+  return new Promise((resolve, reject) => {
+    if (!el) {
+      const err = "An element needs to be passed in to slideOut";
+      headless_log.warn(err);
+      reject(new Error(err));
+      return;
     }
-  });
-}
 
-class body_MessageBodyRenderer {
-  constructor(component) {
-    var _u$ancestor;
+    const marker = el.getAttribute('data-slider-marker');
 
-    this.model = component.model;
-    this.component = component;
-    this.chatview = (_u$ancestor = body_u.ancestor(this.component, 'converse-chat-message')) === null || _u$ancestor === void 0 ? void 0 : _u$ancestor.chatview; // We jot down whether we were scrolled down before rendering, because when an
-    // image loads, it triggers 'scroll' and the chat will be marked as scrolled,
-    // which is technically true, but not what we want because the user
-    // didn't initiate the scrolling.
+    if (marker) {
+      el.removeAttribute('data-slider-marker');
+      window.cancelAnimationFrame(marker);
+    }
 
-    this.was_scrolled_up = this.chatview.model.get('scrolled');
-    this.text = this.component.model.getMessageText();
-  }
+    const end_height = utils_core.calculateElementHeight(el);
 
-  scrollDownOnImageLoad() {
-    if (!this.was_scrolled_up) {
-      this.chatview.scrollDown();
+    if (window.converse_disable_effects) {
+      // Effects are disabled (for tests)
+      el.style.height = end_height + 'px';
+      slideOutWrapup(el);
+      resolve();
+      return;
     }
-  }
 
-  async transform() {
-    const text = new body_MessageText(this.text);
-    /**
-     * Synchronous event which provides a hook for transforming a chat message's body text
-     * before the default transformations have been applied.
-     * @event _converse#beforeMessageBodyTransformed
-     * @param { _converse.Message } model - The model representing the message
-     * @param { MessageText } text - A {@link MessageText } instance. You
-     * can call {@link MessageText#addTemplateResult } on it in order to
-     * add TemplateResult objects meant to render rich parts of the
-     * message.
-     * @example _converse.api.listen.on('beforeMessageBodyTransformed', (view, text) => { ... });
-     */
+    if (!utils_core.hasClass('collapsed', el) && !utils_core.hasClass('hidden', el)) {
+      resolve();
+      return;
+    }
 
-    await converse_core_api.trigger('beforeMessageBodyTransformed', this.model, text, {
-      'Synchronous': true
-    });
-    addHyperlinks(text, () => this.scrollDownOnImageLoad(), ev => this.component.showImageModal(ev));
-    addMapURLs(text);
-    await addEmojis(text);
-    addReferences(text, this.model);
-    /**
-     * Synchronous event which provides a hook for transforming a chat message's body text
-     * after the default transformations have been applied.
-     * @event _converse#afterMessageBodyTransformed
-     * @param { _converse.Message } model - The model representing the message
-     * @param { MessageText } text - A {@link MessageText } instance. You
-     * can call {@link MessageText#addTemplateResult} on it in order to
-     * add TemplateResult objects meant to render rich parts of the
-     * message.
-     * @example _converse.api.listen.on('afterMessageBodyTransformed', (view, text) => { ... });
-     */
+    const steps = duration / 17; // We assume 17ms per animation which is ~60FPS
 
-    await converse_core_api.trigger('afterMessageBodyTransformed', this.model, text, {
-      'Synchronous': true
-    });
-    return text.marshall();
-  }
+    let height = 0;
 
-  render() {
-    return lit_html_html(body_templateObject3(), until(this.transform(), lit_html_html(_templateObject4(), this.text)));
-  }
+    function draw() {
+      height += end_height / steps;
 
-}
+      if (height < end_height) {
+        el.style.height = height + 'px';
+        el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
+      } else {
+        // We recalculate the height to work around an apparent
+        // browser bug where browsers don't know the correct
+        // offsetHeight beforehand.
+        el.removeAttribute('data-slider-marker');
+        el.style.height = utils_core.calculateElementHeight(el) + 'px';
+        el.style.overflow = "";
+        el.style.height = "";
+        resolve();
+      }
+    }
 
-const renderBodyText = directive_directive(component => part => {
-  var _model$collection;
+    el.style.height = '0';
+    el.style.overflow = 'hidden';
+    el.classList.remove('hidden');
+    el.classList.remove('collapsed');
+    el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
+  });
+};
 
-  const renderer = new body_MessageBodyRenderer(component);
-  part.setValue(renderer.render());
-  const model = component.model;
-  (_model$collection = model.collection) === null || _model$collection === void 0 ? void 0 : _model$collection.trigger('rendered', model);
-});
-// CONCATENATED MODULE: ./src/components/message-body.js
+utils_core.slideIn = function (el, duration = 200) {
+  /* Hides/collapses an element by sliding it into itself. */
+  return new Promise((resolve, reject) => {
+    if (!el) {
+      const err = "An element needs to be passed in to slideIn";
+      headless_log.warn(err);
+      return reject(new Error(err));
+    } else if (utils_core.hasClass('collapsed', el)) {
+      return resolve(el);
+    } else if (window.converse_disable_effects) {
+      // Effects are disabled (for tests)
+      el.classList.add('collapsed');
+      el.style.height = "";
+      return resolve(el);
+    }
 
+    const marker = el.getAttribute('data-slider-marker');
 
+    if (marker) {
+      el.removeAttribute('data-slider-marker');
+      window.cancelAnimationFrame(marker);
+    }
 
+    const original_height = el.offsetHeight,
+          steps = duration / 17; // We assume 17ms per animation which is ~60FPS
 
+    let height = original_height;
+    el.style.overflow = 'hidden';
 
-class message_body_MessageBody extends element_CustomElement {
-  static get properties() {
-    return {
-      model: {
-        type: Object
-      },
-      is_me_message: {
-        type: Boolean
-      },
-      text: {
-        type: String
+    function draw() {
+      height -= original_height / steps;
+
+      if (height > 0) {
+        el.style.height = height + 'px';
+        el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
+      } else {
+        el.removeAttribute('data-slider-marker');
+        el.classList.add('collapsed');
+        el.style.height = "";
+        resolve(el);
       }
-    };
-  }
+    }
 
-  showImageModal(ev) {
-    ev.preventDefault();
+    el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
+  });
+};
 
-    if (this.image_modal === undefined) {
-      this.image_modal = new modals_image();
-    }
+function afterAnimationEnds(el, callback) {
+  el.classList.remove('visible');
 
-    this.image_modal.src = ev.target.src;
-    this.image_modal.render();
-    this.image_modal.show(ev);
+  if (lodash_es_isFunction(callback)) {
+    callback();
   }
+}
 
-  render() {
-    return renderBodyText(this);
+utils_core.isInDOM = function (el) {
+  return document.querySelector('body').contains(el);
+};
+
+utils_core.isVisible = function (el) {
+  if (el === null) {
+    return false;
   }
 
-}
-converse_core_api.elements.define('converse-chat-message-body', message_body_MessageBody);
-// CONCATENATED MODULE: ./src/templates/audio.js
-function audio_templateObject() {
-  const data = audio_taggedTemplateLiteral(["\n    <audio controls src=\"", "\"></audio>\n    <a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>\n"]);
+  if (utils_core.hasClass('hidden', el)) {
+    return false;
+  } // XXX: Taken from jQuery's "visible" implementation
 
-  audio_templateObject = function _templateObject() {
-    return data;
-  };
 
-  return data;
-}
-
-function audio_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+  return el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0;
+};
 
+utils_core.fadeIn = function (el, callback) {
+  if (!el) {
+    headless_log.warn("An element needs to be passed in to fadeIn");
+  }
 
-/* harmony default export */ var audio = (o => lit_html_html(audio_templateObject(), o.url, o.url, o.label_download));
-// CONCATENATED MODULE: ./src/templates/file.js
-function file_templateObject() {
-  const data = file_taggedTemplateLiteral(["<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>"]);
+  if (window.converse_disable_effects) {
+    el.classList.remove('hidden');
+    return afterAnimationEnds(el, callback);
+  }
 
-  file_templateObject = function _templateObject() {
-    return data;
-  };
+  if (utils_core.hasClass('hidden', el)) {
+    el.classList.add('visible');
+    el.classList.remove('hidden');
+    el.addEventListener("webkitAnimationEnd", () => afterAnimationEnds(el, callback));
+    el.addEventListener("animationend", () => afterAnimationEnds(el, callback));
+    el.addEventListener("oanimationend", () => afterAnimationEnds(el, callback));
+  } else {
+    afterAnimationEnds(el, callback);
+  }
+};
+/**
+ * Takes a field in XMPP XForm (XEP-004: Data Forms) format
+ * and turns it into an HTML field.
+ * Returns either text or a DOM element (which is not ideal, but fine for now).
+ * @private
+ * @method u#xForm2webForm
+ * @param { XMLElement } field - the field to convert
+ */
 
-  return data;
-}
 
-function file_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+utils_core.xForm2webForm = function (field, stanza, options) {
+  if (field.getAttribute('type') === 'list-single' || field.getAttribute('type') === 'list-multi') {
+    const values = utils_core.queryChildren(field, 'value').map(el => el === null || el === void 0 ? void 0 : el.textContent);
+    const options = utils_core.queryChildren(field, 'option').map(option => {
+      var _option$querySelector;
 
+      const value = (_option$querySelector = option.querySelector('value')) === null || _option$querySelector === void 0 ? void 0 : _option$querySelector.textContent;
+      return select_option_default()({
+        'value': value,
+        'label': option.getAttribute('label'),
+        'selected': values.includes(value),
+        'required': !!field.querySelector('required')
+      });
+    });
+    return form_select_default()({
+      'id': utils_core.getUniqueId(),
+      'name': field.getAttribute('var'),
+      'label': field.getAttribute('label'),
+      'options': options.join(''),
+      'multiple': field.getAttribute('type') === 'list-multi',
+      'required': !!field.querySelector('required')
+    });
+  } else if (field.getAttribute('type') === 'fixed') {
+    var _field$querySelector;
 
-/* harmony default export */ var templates_file = (o => lit_html_html(file_templateObject(), o.url, o.label_download));
-// EXTERNAL MODULE: ./src/templates/form_captcha.html
-var form_captcha = __webpack_require__(129);
-var form_captcha_default = /*#__PURE__*/__webpack_require__.n(form_captcha);
+    const text = (_field$querySelector = field.querySelector('value')) === null || _field$querySelector === void 0 ? void 0 : _field$querySelector.textContent;
+    return '<p class="form-help">' + text + '</p>';
+  } else if (field.getAttribute('type') === 'jid-multi') {
+    var _field$querySelector2;
 
-// EXTERNAL MODULE: ./src/templates/form_checkbox.html
-var form_checkbox = __webpack_require__(130);
-var form_checkbox_default = /*#__PURE__*/__webpack_require__.n(form_checkbox);
+    return form_textarea_default()({
+      'name': field.getAttribute('var'),
+      'label': field.getAttribute('label') || '',
+      'value': (_field$querySelector2 = field.querySelector('value')) === null || _field$querySelector2 === void 0 ? void 0 : _field$querySelector2.textContent,
+      'required': !!field.querySelector('required')
+    });
+  } else if (field.getAttribute('type') === 'boolean') {
+    var _field$querySelector3;
 
-// EXTERNAL MODULE: ./src/templates/form_input.html
-var form_input = __webpack_require__(50);
-var form_input_default = /*#__PURE__*/__webpack_require__.n(form_input);
+    const value = (_field$querySelector3 = field.querySelector('value')) === null || _field$querySelector3 === void 0 ? void 0 : _field$querySelector3.textContent;
+    return form_checkbox_default()({
+      'id': utils_core.getUniqueId(),
+      'name': field.getAttribute('var'),
+      'label': field.getAttribute('label') || '',
+      'checked': (value === "1" || value === "true") && 'checked="1"' || '',
+      'required': !!field.querySelector('required')
+    });
+  } else if (field.getAttribute('var') === 'url') {
+    var _field$querySelector4;
 
-// EXTERNAL MODULE: ./src/templates/form_select.html
-var form_select = __webpack_require__(131);
-var form_select_default = /*#__PURE__*/__webpack_require__.n(form_select);
+    return form_url_default()({
+      'label': field.getAttribute('label') || '',
+      'value': (_field$querySelector4 = field.querySelector('value')) === null || _field$querySelector4 === void 0 ? void 0 : _field$querySelector4.textContent
+    });
+  } else if (field.getAttribute('var') === 'username') {
+    var _field$querySelector5;
 
-// EXTERNAL MODULE: ./src/templates/form_textarea.html
-var form_textarea = __webpack_require__(132);
-var form_textarea_default = /*#__PURE__*/__webpack_require__.n(form_textarea);
+    return form_username_default()({
+      'domain': ' @' + options.domain,
+      'name': field.getAttribute('var'),
+      'type': XFORM_TYPE_MAP[field.getAttribute('type')],
+      'label': field.getAttribute('label') || '',
+      'value': (_field$querySelector5 = field.querySelector('value')) === null || _field$querySelector5 === void 0 ? void 0 : _field$querySelector5.textContent,
+      'required': !!field.querySelector('required')
+    });
+  } else if (field.getAttribute('var') === 'ocr') {
+    // Captcha
+    const uri = field.querySelector('uri');
+    const el = sizzle_default()('data[cid="' + uri.textContent.replace(/^cid:/, '') + '"]', stanza)[0];
+    return form_captcha_default()({
+      'label': field.getAttribute('label'),
+      'name': field.getAttribute('var'),
+      'data': el === null || el === void 0 ? void 0 : el.textContent,
+      'type': uri.getAttribute('type'),
+      'required': !!field.querySelector('required')
+    });
+  } else {
+    var _field$querySelector6;
 
-// EXTERNAL MODULE: ./src/templates/form_url.html
-var form_url = __webpack_require__(133);
-var form_url_default = /*#__PURE__*/__webpack_require__.n(form_url);
+    const name = field.getAttribute('var');
+    return form_input_default()({
+      'id': utils_core.getUniqueId(),
+      'label': field.getAttribute('label') || '',
+      'name': name,
+      'fixed_username': options === null || options === void 0 ? void 0 : options.fixed_username,
+      'autocomplete': getAutoCompleteProperty(name, options),
+      'placeholder': null,
+      'required': !!field.querySelector('required'),
+      'type': XFORM_TYPE_MAP[field.getAttribute('type')],
+      'value': (_field$querySelector6 = field.querySelector('value')) === null || _field$querySelector6 === void 0 ? void 0 : _field$querySelector6.textContent
+    });
+  }
+};
 
-// EXTERNAL MODULE: ./src/templates/form_username.html
-var form_username = __webpack_require__(51);
-var form_username_default = /*#__PURE__*/__webpack_require__.n(form_username);
+/* harmony default export */ var utils_html = (utils_core);
+// CONCATENATED MODULE: ./src/shared/dom-navigator.js
+/**
+ * @module dom-navigator
+ * @description A class for navigating the DOM with the keyboard
+ * This module started as a fork of Rubens Mariuzzo's dom-navigator.
+ * @copyright Rubens Mariuzzo, JC Brand
+ */
 
-// CONCATENATED MODULE: ./src/templates/directives/image.js
-function image_templateObject() {
-  const data = image_taggedTemplateLiteral(["<a href=\"", "\"\n                class=\"chat-image__link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            ><img class=\"chat-image img-thumbnail\" src=\"", "\" @click=", " @error=", " @load=", "/></a>"]);
 
-  image_templateObject = function _templateObject() {
-    return data;
-  };
+const {
+  keycodes
+} = converse;
+/**
+ * Indicates if a given element is fully visible in the viewport.
+ * @param { Element } el The element to check.
+ * @return { Boolean } True if the given element is fully visible in the viewport, otherwise false.
+ */
 
-  return data;
+function inViewport(el) {
+  const rect = el.getBoundingClientRect();
+  return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;
 }
+/**
+ * Return the absolute offset top of an element.
+ * @param el { Element } The element.
+ * @return { Number } The offset top.
+ */
 
-function image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
+function absoluteOffsetTop(el) {
+  let offsetTop = 0;
 
+  do {
+    if (!isNaN(el.offsetTop)) {
+      offsetTop += el.offsetTop;
+    }
+  } while (el = el.offsetParent);
 
+  return offsetTop;
+}
 /**
- * lit-html directive which attempts to render an <img> element from a URL.
- * It will fall back to rendering an <a> element if it can't.
- *
- * @param { String } src - The value that will be assigned to the `src` attribute of the `<img>` element.
- * @param { String } href - The value that will be assigned to the `href` attribute of the `<img>` element.
- * @param { Function } onLoad - A callback function to be called once the image has loaded.
- * @param { Function } onClick - A callback function to be called once the image has been clicked.
-*/
+ * Return the absolute offset left of an element.
+ * @param el { Element } The element.
+ * @return { Number } The offset left.
+ */
 
-const renderImage = directive_directive((src, href, onLoad, onClick) => part => {
-  function onError() {
-    const u = converse.env.utils;
 
-    if (u.isURLWithImageExtension(src)) {
-      part.setValue(u.convertUrlToHyperlink(href));
-      part.commit();
-    } else {
-      // Before giving up and falling back to just rendering a hyperlink,
-      // we attach `.png` and try one more time.
-      // This works with some Imgur URLs
-      part.setValue(renderImage("".concat(src, ".png"), href, onLoad, onClick));
-      part.commit();
+function absoluteOffsetLeft(el) {
+  let offsetLeft = 0;
+
+  do {
+    if (!isNaN(el.offsetLeft)) {
+      offsetLeft += el.offsetLeft;
     }
+  } while (el = el.offsetParent);
+
+  return offsetLeft;
+}
+/**
+ * Adds the ability to navigate the DOM with the arrow keys
+ * @class DOMNavigator
+ */
+
+
+class dom_navigator_DOMNavigator {
+  /**
+   * Directions.
+   * @returns {{left: string, up: string, right: string, down: string}}
+   * @constructor
+   */
+  static get DIRECTION() {
+    return {
+      down: 'down',
+      end: 'end',
+      home: 'home',
+      left: 'left',
+      right: 'right',
+      up: 'up'
+    };
   }
+  /**
+   * The default options for the DOM navigator.
+   * @returns {{
+   *     down: number,
+   *     getSelector: null,
+   *     jump_to_picked: null,
+   *     jump_to_picked_direction: null,
+   *     jump_to_picked_selector: string,
+   *     left: number,
+   *     onSelected: null,
+   *     right: number,
+   *     selected: string,
+   *     up: number
+   * }}
+   */
 
-  part.setValue(lit_html_html(image_templateObject(), href, src, onClick, onError, onLoad));
-});
-// CONCATENATED MODULE: ./src/templates/image.js
-function templates_image_templateObject() {
-  const data = templates_image_taggedTemplateLiteral(["", ""]);
 
-  templates_image_templateObject = function _templateObject() {
-    return data;
-  };
+  static get DEFAULTS() {
+    return {
+      home: ["".concat(keycodes.SHIFT, "+").concat(keycodes.UP_ARROW)],
+      end: ["".concat(keycodes.SHIFT, "+").concat(keycodes.DOWN_ARROW)],
+      up: [keycodes.UP_ARROW],
+      down: [keycodes.DOWN_ARROW],
+      left: [keycodes.LEFT_ARROW, "".concat(keycodes.SHIFT, "+").concat(keycodes.TAB)],
+      right: [keycodes.RIGHT_ARROW, keycodes.TAB],
+      getSelector: null,
+      jump_to_picked: null,
+      jump_to_picked_direction: null,
+      jump_to_picked_selector: 'picked',
+      onSelected: null,
+      selected: 'selected',
+      selector: 'li'
+    };
+  }
 
-  return data;
-}
+  static getClosestElement(els, getDistance) {
+    const next = els.reduce((prev, curr) => {
+      const current_distance = getDistance(curr);
 
-function templates_image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+      if (current_distance < prev.distance) {
+        return {
+          distance: current_distance,
+          element: curr
+        };
+      }
 
+      return prev;
+    }, {
+      distance: Infinity
+    });
+    return next.element;
+  }
+  /**
+   * Create a new DOM Navigator.
+   * @param { Element } container The container of the element to navigate.
+   * @param { Object } options The options to configure the DOM navigator.
+   * @param { Function } options.getSelector
+   * @param { Number } [options.down] - The keycode for navigating down
+   * @param { Number } [options.left] - The keycode for navigating left
+   * @param { Number } [options.right] - The keycode for navigating right
+   * @param { Number } [options.up] - The keycode for navigating up
+   * @param { String } [options.selected] - The class that should be added to the currently selected DOM element.
+   * @param { String } [options.jump_to_picked] - A selector, which if
+   * matched by the next element being navigated to, based on the direction
+   * given by `jump_to_picked_direction`, will cause navigation
+   * to jump to the element that matches the `jump_to_picked_selector`.
+   * For example, this is useful when navigating to tabs. You want to
+   * immediately navigate to the currently active tab instead of just
+   * navigating to the first tab.
+   * @param { String } [options.jump_to_picked_selector=picked] - The selector
+   * indicating the currently picked element to jump to.
+   * @param { String } [options.jump_to_picked_direction] - The direction for
+   * which jumping to the picked element should be enabled.
+   * @param { Function } [options.onSelected] - The callback function which
+   * should be called when en element gets selected.
+   * @constructor
+   */
 
 
-/* harmony default export */ var templates_image = (o => lit_html_html(templates_image_templateObject(), renderImage(o.url, o.url, o.onLoad, o.onClick)));
-// EXTERNAL MODULE: ./src/templates/select_option.html
-var select_option = __webpack_require__(134);
-var select_option_default = /*#__PURE__*/__webpack_require__.n(select_option);
+  constructor(container, options) {
+    this.doc = window.document;
+    this.container = container;
+    this.scroll_container = options.scroll_container || container;
+    this.options = Object.assign({}, dom_navigator_DOMNavigator.DEFAULTS, options);
+    this.init();
+  }
+  /**
+   * Initialize the navigator.
+   */
 
-// CONCATENATED MODULE: ./src/templates/video.js
-function video_templateObject() {
-  const data = video_taggedTemplateLiteral(["<video controls preload=\"metadata\" src=\"", "\" style=\"max-height: 50vh\"></video>"]);
 
-  video_templateObject = function _templateObject() {
-    return data;
-  };
+  init() {
+    this.selected = null;
+    this.keydownHandler = null;
+    this.elements = {}; // Create hotkeys map.
 
-  return data;
-}
+    this.keys = {};
+    this.options.down.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.down);
+    this.options.end.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.end);
+    this.options.home.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.home);
+    this.options.left.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.left);
+    this.options.right.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.right);
+    this.options.up.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.up);
+  }
+  /**
+   * Enable this navigator.
+   */
 
-function video_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
+  enable() {
+    this.getElements();
 
-/* harmony default export */ var video = (o => lit_html_html(video_templateObject(), o.url));
-// CONCATENATED MODULE: ./src/utils/html.js
-function html_templateObject2() {
-  const data = html_taggedTemplateLiteral(["<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a>"]);
+    this.keydownHandler = event => this.handleKeydown(event);
 
-  html_templateObject2 = function _templateObject2() {
-    return data;
-  };
+    this.doc.addEventListener('keydown', this.keydownHandler);
+    this.enabled = true;
+  }
+  /**
+   * Disable this navigator.
+   */
 
-  return data;
-}
 
-function html_templateObject() {
-  const data = html_taggedTemplateLiteral(["\n            <a target=\"_blank\"\n               rel=\"noopener\"\n               @click=", "\n               href=\"", "\">", "</a>"]);
+  disable() {
+    if (this.keydownHandler) {
+      this.doc.removeEventListener('keydown', this.keydownHandler);
+    }
 
-  html_templateObject = function _templateObject() {
-    return data;
-  };
+    this.unselect();
+    this.elements = {};
+    this.enabled = false;
+  }
+  /**
+   * Destroy this navigator removing any event registered and any other data.
+   */
 
-  return data;
-}
 
-function html_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+  destroy() {
+    this.disable();
 
-/**
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- * @description This is the DOM/HTML utilities module.
- */
+    if (this.container.domNavigator) {
+      delete this.container.domNavigator;
+    }
+  }
+  /**
+   * @param {'down'|'right'|'left'|'up'} direction
+   * @returns { HTMLElement }
+   */
 
 
+  getNextElement(direction) {
+    let el;
 
+    if (direction === dom_navigator_DOMNavigator.DIRECTION.home) {
+      el = this.getElements(direction)[0];
+    } else if (direction === dom_navigator_DOMNavigator.DIRECTION.end) {
+      el = Array.from(this.getElements(direction)).pop();
+    } else if (this.selected) {
+      if (direction === dom_navigator_DOMNavigator.DIRECTION.right) {
+        const els = this.getElements(direction);
+        el = els.slice(els.indexOf(this.selected))[1];
+      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.left) {
+        const els = this.getElements(direction);
+        el = els.slice(0, els.indexOf(this.selected)).pop() || this.selected;
+      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.down) {
+        const left = this.selected.offsetLeft;
+        const top = this.selected.offsetTop + this.selected.offsetHeight;
+        const els = this.elementsAfter(0, top);
 
+        const getDistance = el => Math.abs(el.offsetLeft - left) + Math.abs(el.offsetTop - top);
 
+        el = dom_navigator_DOMNavigator.getClosestElement(els, getDistance);
+      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.up) {
+        const left = this.selected.offsetLeft;
+        const top = this.selected.offsetTop - 1;
+        const els = this.elementsBefore(Infinity, top);
 
+        const getDistance = el => Math.abs(left - el.offsetLeft) + Math.abs(top - el.offsetTop);
 
+        el = dom_navigator_DOMNavigator.getClosestElement(els, getDistance);
+      } else {
+        throw new Error("getNextElement: invalid direction value");
+      }
+    } else {
+      if (direction === dom_navigator_DOMNavigator.DIRECTION.right || direction === dom_navigator_DOMNavigator.DIRECTION.down) {
+        // If nothing is selected, we pretend that the first element is
+        // selected, so we return the next.
+        el = this.getElements(direction)[1];
+      } else {
+        el = this.getElements(direction)[0];
+      }
+    }
 
+    if (this.options.jump_to_picked && el && el.matches(this.options.jump_to_picked) && direction === this.options.jump_to_picked_direction) {
+      el = this.container.querySelector(this.options.jump_to_picked_selector) || el;
+    }
 
+    return el;
+  }
+  /**
+   * Select the given element.
+   * @param { Element } el The DOM element to select.
+   * @param { string } [direction] The direction.
+   */
 
 
+  select(el, direction) {
+    if (!el || el === this.selected) {
+      return;
+    }
 
+    this.unselect();
+    direction && this.scrollTo(el, direction);
 
+    if (el.matches('input')) {
+      el.focus();
+    } else {
+      utils_html.addClass(this.options.selected, el);
+    }
 
+    this.selected = el;
+    this.options.onSelected && this.options.onSelected(el);
+  }
+  /**
+   * Remove the current selection
+   */
 
 
+  unselect() {
+    if (this.selected) {
+      utils_html.removeClass(this.options.selected, this.selected);
+      delete this.selected;
+    }
+  }
+  /**
+   * Scroll the container to an element.
+   * @param { HTMLElement } el The destination element.
+   * @param { String } direction The direction of the current navigation.
+   * @return void.
+   */
 
 
+  scrollTo(el, direction) {
+    if (!this.inScrollContainerViewport(el)) {
+      const container = this.scroll_container;
 
-const APPROVED_URL_PROTOCOLS = ['http', 'https', 'xmpp', 'mailto'];
+      if (!container.contains(el)) {
+        return;
+      }
 
-function getAutoCompleteProperty(name, options) {
-  return {
-    'muc#roomconfig_lang': 'language',
-    'muc#roomconfig_roomsecret': (options === null || options === void 0 ? void 0 : options.new_password) ? 'new-password' : 'current-password'
-  }[name];
-}
+      switch (direction) {
+        case dom_navigator_DOMNavigator.DIRECTION.left:
+          container.scrollLeft = el.offsetLeft - container.offsetLeft;
+          container.scrollTop = el.offsetTop - container.offsetTop;
+          break;
 
-const XFORM_TYPE_MAP = {
-  'text-private': 'password',
-  'text-single': 'text',
-  'fixed': 'label',
-  'boolean': 'checkbox',
-  'hidden': 'hidden',
-  'jid-multi': 'textarea',
-  'list-single': 'dropdown',
-  'list-multi': 'dropdown'
-};
+        case dom_navigator_DOMNavigator.DIRECTION.up:
+          container.scrollTop = el.offsetTop - container.offsetTop;
+          break;
 
-function slideOutWrapup(el) {
-  /* Wrapup function for slideOut. */
-  el.removeAttribute('data-slider-marker');
-  el.classList.remove('collapsed');
-  el.style.overflow = "";
-  el.style.height = "";
-}
+        case dom_navigator_DOMNavigator.DIRECTION.right:
+          container.scrollLeft = el.offsetLeft - container.offsetLeft - (container.offsetWidth - el.offsetWidth);
+          container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight);
+          break;
 
-function getURI(url) {
-  try {
-    return url instanceof URI_default.a ? url : new URI_default.a(url);
-  } catch (error) {
-    headless_log.debug(error);
-    return null;
-  }
-}
+        case dom_navigator_DOMNavigator.DIRECTION.down:
+          container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight);
+          break;
+      }
+    } else if (!inViewport(el)) {
+      switch (direction) {
+        case dom_navigator_DOMNavigator.DIRECTION.left:
+          document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft;
+          break;
 
-function checkTLS(uri) {
-  return window.location.protocol === 'http:' || window.location.protocol === 'https:' && uri.protocol().toLowerCase() === "https";
-}
+        case dom_navigator_DOMNavigator.DIRECTION.up:
+          document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop;
+          break;
 
-function checkFileTypes(types, url) {
-  const uri = getURI(url);
+        case dom_navigator_DOMNavigator.DIRECTION.right:
+          document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft - (document.documentElement.clientWidth - el.offsetWidth);
+          break;
 
-  if (uri === null || !checkTLS(uri)) {
-    return false;
+        case dom_navigator_DOMNavigator.DIRECTION.down:
+          document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop - (document.documentElement.clientHeight - el.offsetHeight);
+          break;
+      }
+    }
   }
+  /**
+   * Indicate if an element is in the container viewport.
+   * @param { HTMLElement } el The element to check.
+   * @return { Boolean } true if the given element is in the container viewport, otherwise false.
+   */
 
-  const filename = uri.filename().toLowerCase();
-  return !!types.filter(ext => filename.endsWith(ext)).length;
-}
 
-utils_core.isAudioURL = url => checkFileTypes(['.ogg', '.mp3', '.m4a'], url);
+  inScrollContainerViewport(el) {
+    const container = this.scroll_container; // Check on left side.
 
-utils_core.isVideoURL = url => checkFileTypes(['.mp4', '.webm'], url);
+    if (el.offsetLeft - container.scrollLeft < container.offsetLeft) {
+      return false;
+    } // Check on top side.
 
-utils_core.isURLWithImageExtension = url => checkFileTypes(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.svg'], url);
 
-utils_core.isImageURL = url => {
-  const regex = converse_core_api.settings.get('image_urls_regex');
-  return (regex === null || regex === void 0 ? void 0 : regex.test(url)) || utils_core.isURLWithImageExtension(url);
-};
+    if (el.offsetTop - container.scrollTop < container.offsetTop) {
+      return false;
+    } // Check on right side.
 
-utils_core.isImageDomainAllowed = url => {
-  const show_images_inline = converse_core_api.settings.get('show_images_inline');
 
-  if (!Array.isArray(show_images_inline)) {
+    if (el.offsetLeft + el.offsetWidth - container.scrollLeft > container.offsetLeft + container.offsetWidth) {
+      return false;
+    } // Check on down side.
+
+
+    if (el.offsetTop + el.offsetHeight - container.scrollTop > container.offsetTop + container.offsetHeight) {
+      return false;
+    }
+
     return true;
   }
+  /**
+   * Find and store the navigable elements
+   */
 
-  try {
-    const image_domain = getURI(url).domain();
-    return show_images_inline.includes(image_domain);
-  } catch (error) {
-    headless_log.debug(error);
-    return true;
+
+  getElements(direction) {
+    const selector = this.options.getSelector ? this.options.getSelector(direction) : this.options.selector;
+
+    if (!this.elements[selector]) {
+      this.elements[selector] = Array.from(this.container.querySelectorAll(selector));
+    }
+
+    return this.elements[selector];
   }
-};
+  /**
+   * Return an array of navigable elements after an offset.
+   * @param { number } left The left offset.
+   * @param { number } top The top offset.
+   * @return { Array } An array of elements.
+   */
 
-function getFileName(uri) {
-  try {
-    return decodeURI(uri.filename());
-  } catch (error) {
-    headless_log.debug(error);
-    return uri.filename();
+
+  elementsAfter(left, top) {
+    return this.getElements(dom_navigator_DOMNavigator.DIRECTION.down).filter(el => el.offsetLeft >= left && el.offsetTop >= top);
   }
-}
+  /**
+   * Return an array of navigable elements before an offset.
+   * @param { number } left The left offset.
+   * @param { number } top The top offset.
+   * @return { Array } An array of elements.
+   */
 
-function renderAudioURL(_converse, uri) {
-  const {
-    __
-  } = _converse;
-  return audio({
-    'url': uri.toString(),
-    'label_download': __('Download audio file "%1$s"', getFileName(uri))
-  });
-}
 
-function renderImageURL(_converse, uri) {
-  const {
-    __
-  } = _converse;
-  return templates_file({
-    'url': uri.toString(),
-    'label_download': __('Download image file "%1$s"', getFileName(uri))
-  });
+  elementsBefore(left, top) {
+    return this.getElements(dom_navigator_DOMNavigator.DIRECTION.up).filter(el => el.offsetLeft <= left && el.offsetTop <= top);
+  }
+  /**
+   * Handle the key down event.
+   * @param { Event } event The event object.
+   */
+
+
+  handleKeydown(ev) {
+    const keys = keycodes;
+    const direction = ev.shiftKey ? this.keys["".concat(keys.SHIFT, "+").concat(ev.which)] : this.keys[ev.which];
+
+    if (direction) {
+      ev.preventDefault();
+      ev.stopPropagation();
+      const next = this.getNextElement(direction, ev);
+      this.select(next, direction);
+    }
+  }
+
 }
 
-function renderFileURL(_converse, uri) {
-  const {
-    __
-  } = _converse;
-  return templates_file({
-    'url': uri.toString(),
-    'label_download': __('Download file "%1$s"', getFileName(uri))
-  });
+/* harmony default export */ var dom_navigator = (dom_navigator_DOMNavigator);
+// CONCATENATED MODULE: ./node_modules/lit-html/directives/until.js
+/**
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at
+ * http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at
+ * http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at
+ * http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at
+ * http://polymer.github.io/PATENTS.txt
+ */
+
+
+const _state = new WeakMap();
+// Effectively infinity, but a SMI.
+const _infinity = 0x7fffffff;
+/**
+ * Renders one of a series of values, including Promises, to a Part.
+ *
+ * Values are rendered in priority order, with the first argument having the
+ * highest priority and the last argument having the lowest priority. If a
+ * value is a Promise, low-priority values will be rendered until it resolves.
+ *
+ * The priority of values can be used to create placeholder content for async
+ * data. For example, a Promise with pending content can be the first,
+ * highest-priority, argument, and a non_promise loading indicator template can
+ * be used as the second, lower-priority, argument. The loading indicator will
+ * render immediately, and the primary content will render when the Promise
+ * resolves.
+ *
+ * Example:
+ *
+ *     const content = fetch('./content.txt').then(r => r.text());
+ *     html`${until(content, html`<span>Loading...</span>`)}`
+ */
+const until = directive_directive((...args) => (part) => {
+    let state = _state.get(part);
+    if (state === undefined) {
+        state = {
+            lastRenderedIndex: _infinity,
+            values: [],
+        };
+        _state.set(part, state);
+    }
+    const previousValues = state.values;
+    let previousLength = previousValues.length;
+    state.values = args;
+    for (let i = 0; i < args.length; i++) {
+        // If we've rendered a higher-priority value already, stop.
+        if (i > state.lastRenderedIndex) {
+            break;
+        }
+        const value = args[i];
+        // Render non-Promise values immediately
+        if (isPrimitive(value) ||
+            typeof value.then !== 'function') {
+            part.setValue(value);
+            state.lastRenderedIndex = i;
+            // Since a lower-priority value will never overwrite a higher-priority
+            // synchronous value, we can stop processing now.
+            break;
+        }
+        // If this is a Promise we've already handled, skip it.
+        if (i < previousLength && value === previousValues[i]) {
+            continue;
+        }
+        // We have a Promise that we haven't seen before, so priorities may have
+        // changed. Forget what we rendered before.
+        state.lastRenderedIndex = _infinity;
+        previousLength = 0;
+        Promise.resolve(value).then((resolvedValue) => {
+            const index = state.values.indexOf(value);
+            // If state.values doesn't contain the value, we've re-rendered without
+            // the value, so don't render it. Then, only render if the value is
+            // higher-priority than what's already been rendered.
+            if (index > -1 && index < state.lastRenderedIndex) {
+                state.lastRenderedIndex = index;
+                part.setValue(resolvedValue);
+                part.commit();
+            }
+        });
+    }
+});
+//# sourceMappingURL=until.js.map
+// CONCATENATED MODULE: ./src/components/dropdown.js
+function dropdown_templateObject() {
+  const data = dropdown_taggedTemplateLiteral(["\n            <div class=\"dropleft\">\n                <button type=\"button\" class=\"btn btn--transparent btn--standalone\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n                    <i class=\"", " only-icon\"></i>\n                </button>\n                <div class=\"dropdown-menu\">\n                    ", "\n                </div>\n            </div>\n        "]);
+
+  dropdown_templateObject = function () {
+    return data;
+  };
+
+  return data;
 }
-/**
- * Returns the markup for a URL that points to a downloadable asset
- * (such as a video, image or audio file).
- * @method u#getOOBURLMarkup
- * @param { String } url
- * @returns { String }
- */
 
+function dropdown_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-utils_core.getOOBURLMarkup = function (_converse, url) {
-  const uri = getURI(url);
 
-  if (uri === null) {
-    return url;
-  }
 
-  if (utils_core.isVideoURL(uri)) {
-    return video({
-      url
-    });
-  } else if (utils_core.isAudioURL(uri)) {
-    return renderAudioURL(_converse, uri);
-  } else if (utils_core.isImageURL(uri)) {
-    return renderImageURL(_converse, uri);
-  } else {
-    return renderFileURL(_converse, uri);
-  }
-};
-/**
- * Applies some resistance to `value` around the `default_value`.
- * If value is close enough to `default_value`, then it is returned, otherwise
- * `value` is returned.
- * @method u#applyDragResistance
- * @param { Integer } value
- * @param { Integer } default_value
- * @returns { Integer }
- */
 
 
-utils_core.applyDragResistance = function (value, default_value) {
-  if (value === undefined) {
-    return undefined;
-  } else if (default_value === undefined) {
-    return value;
+
+const dropdown_u = converse.env.utils;
+class dropdown_BaseDropdown extends element_CustomElement {
+  firstUpdated() {
+    this.menu = this.querySelector('.dropdown-menu');
+    this.dropdown = this.firstElementChild;
+    this.button = this.dropdown.querySelector('button');
+    this.dropdown.addEventListener('click', ev => this.toggleMenu(ev));
+    this.dropdown.addEventListener('keyup', ev => this.handleKeyUp(ev));
+    document.addEventListener('click', ev => !this.contains(ev.composedPath()[0]) && this.hideMenu(ev));
   }
 
-  const resistance = 10;
+  hideMenu() {
+    var _this$button, _this$button2;
 
-  if (value !== default_value && Math.abs(value - default_value) < resistance) {
-    return default_value;
+    dropdown_u.removeClass('show', this.menu);
+    (_this$button = this.button) === null || _this$button === void 0 ? void 0 : _this$button.setAttribute('aria-expanded', false);
+    (_this$button2 = this.button) === null || _this$button2 === void 0 ? void 0 : _this$button2.blur();
   }
 
-  return value;
-};
-/**
- * Return the height of the passed in DOM element,
- * based on the heights of its children.
- * @method u#calculateElementHeight
- * @param {HTMLElement} el
- * @returns {integer}
- */
+  showMenu() {
+    dropdown_u.addClass('show', this.menu);
+    this.button.setAttribute('aria-expanded', true);
+  }
 
+  toggleMenu(ev) {
+    ev.preventDefault();
 
-utils_core.calculateElementHeight = function (el) {
-  return Array.from(el.children).reduce((result, child) => result + child.offsetHeight, 0);
-};
+    if (dropdown_u.hasClass('show', this.menu)) {
+      this.hideMenu();
+    } else {
+      this.showMenu();
+    }
+  }
 
-utils_core.getNextElement = function (el, selector = '*') {
-  let next_el = el.nextElementSibling;
+  handleKeyUp(ev) {
+    if (ev.keyCode === converse.keycodes.ESCAPE) {
+      this.hideMenu();
+    } else if (ev.keyCode === converse.keycodes.DOWN_ARROW && this.navigator && !this.navigator.enabled) {
+      this.enableArrowNavigation(ev);
+    }
+  }
 
-  while (next_el !== null && !sizzle_default.a.matchesSelector(next_el, selector)) {
-    next_el = next_el.nextElementSibling;
+}
+class dropdown_DropdownList extends dropdown_BaseDropdown {
+  static get properties() {
+    return {
+      'icon_classes': {
+        type: String
+      },
+      'items': {
+        type: Array
+      }
+    };
   }
 
-  return next_el;
-};
+  render() {
+    const icon_classes = this.icon_classes || "fa fa-bars";
+    return lit_html_html(dropdown_templateObject(), icon_classes, this.items.map(b => until(b, '')));
+  }
 
-utils_core.getPreviousElement = function (el, selector = '*') {
-  let prev_el = el.previousElementSibling;
+  hideMenu() {
+    super.hideMenu();
+    this.navigator.disable();
+  }
 
-  while (prev_el !== null && !sizzle_default.a.matchesSelector(prev_el, selector)) {
-    prev_el = prev_el.previousElementSibling;
+  firstUpdated() {
+    super.firstUpdated();
+    this.initArrowNavigation();
   }
 
-  return prev_el;
-};
+  initArrowNavigation() {
+    if (!this.navigator) {
+      const options = {
+        'selector': '.dropdown-item',
+        'onSelected': el => el.focus()
+      };
+      this.navigator = new dom_navigator(this.menu, options);
+    }
+  }
 
-utils_core.getFirstChildElement = function (el, selector = '*') {
-  let first_el = el.firstElementChild;
+  enableArrowNavigation(ev) {
+    if (ev) {
+      ev.preventDefault();
+      ev.stopPropagation();
+    }
 
-  while (first_el !== null && !sizzle_default.a.matchesSelector(first_el, selector)) {
-    first_el = first_el.nextElementSibling;
+    this.navigator.enable();
+    this.navigator.select(this.menu.firstElementChild);
   }
 
-  return first_el;
-};
-
-utils_core.getLastChildElement = function (el, selector = '*') {
-  let last_el = el.lastElementChild;
+  handleKeyUp(ev) {
+    super.handleKeyUp(ev);
 
-  while (last_el !== null && !sizzle_default.a.matchesSelector(last_el, selector)) {
-    last_el = last_el.previousElementSibling;
+    if (ev.keyCode === converse.keycodes.DOWN_ARROW && !this.navigator.enabled) {
+      this.enableArrowNavigation(ev);
+    }
   }
 
-  return last_el;
-};
+}
+core_api.elements.define('converse-dropdown', dropdown_DropdownList);
+// CONCATENATED MODULE: ./src/components/message-actions.js
+function message_actions_templateObject3() {
+  const data = message_actions_taggedTemplateLiteral(["<converse-dropdown class=\"chat-msg__actions\" .items=", "></converse-dropdown>"]);
 
-utils_core.hasClass = function (className, el) {
-  return el instanceof Element && el.classList.contains(className);
-};
+  message_actions_templateObject3 = function () {
+    return data;
+  };
 
-utils_core.toggleClass = function (className, el) {
-  utils_core.hasClass(className, el) ? utils_core.removeClass(className, el) : utils_core.addClass(className, el);
-};
-/**
- * Add a class to an element.
- * @method u#addClass
- * @param {string} className
- * @param {Element} el
- */
+  return data;
+}
 
+function message_actions_templateObject2() {
+  const data = message_actions_taggedTemplateLiteral(["\n            <button class=\"chat-msg__action ", "\" @click=", ">\n                <converse-icon class=\"", "\"\n                    path-prefix=\"", "\"\n                    color=\"var(--text-color-lighten-15-percent)\"\n                    size=\"1em\"></converse-icon>\n                ", "\n            </button>\n        "]);
 
-utils_core.addClass = function (className, el) {
-  el instanceof Element && el.classList.add(className);
-  return el;
-};
-/**
- * Remove a class from an element.
- * @method u#removeClass
- * @param {string} className
- * @param {Element} el
- */
+  message_actions_templateObject2 = function () {
+    return data;
+  };
 
+  return data;
+}
 
-utils_core.removeClass = function (className, el) {
-  el instanceof Element && el.classList.remove(className);
-  return el;
-};
+function message_actions_templateObject() {
+  const data = message_actions_taggedTemplateLiteral(["", ""]);
 
-utils_core.removeElement = function (el) {
-  el instanceof Element && el.parentNode && el.parentNode.removeChild(el);
-  return el;
-};
+  message_actions_templateObject = function () {
+    return data;
+  };
 
-utils_core.getElementFromTemplateResult = function (tr) {
-  const div = document.createElement('div');
-  render_render(tr, div);
-  return div.firstElementChild;
-};
+  return data;
+}
 
-utils_core.showElement = el => {
-  utils_core.removeClass('collapsed', el);
-  utils_core.removeClass('hidden', el);
-};
+function message_actions_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-utils_core.hideElement = function (el) {
-  el instanceof Element && el.classList.add('hidden');
-  return el;
-};
 
-utils_core.ancestor = function (el, selector) {
-  let parent = el;
 
-  while (parent !== null && !sizzle_default.a.matchesSelector(parent, selector)) {
-    parent = parent.parentElement;
-  }
 
-  return parent;
-};
-/**
- * Return the element's siblings until one matches the selector.
- * @private
- * @method u#nextUntil
- * @param { HTMLElement } el
- * @param { String } selector
- */
 
 
-utils_core.nextUntil = function (el, selector) {
-  const matches = [];
-  let sibling_el = el.nextElementSibling;
 
-  while (sibling_el !== null && !sibling_el.matches(selector)) {
-    matches.push(sibling_el);
-    sibling_el = sibling_el.nextElementSibling;
+class message_actions_MessageActions extends element_CustomElement {
+  static get properties() {
+    return {
+      chatview: {
+        type: Object
+      },
+      model: {
+        type: Object
+      },
+      editable: {
+        type: Boolean
+      },
+      correcting: {
+        type: Boolean
+      },
+      message_type: {
+        type: String
+      },
+      is_retracted: {
+        type: Boolean
+      }
+    };
   }
 
-  return matches;
-};
-/**
- * Helper method that replace HTML-escaped symbols with equivalent characters
- * (e.g. transform occurrences of '&amp;' to '&')
- * @private
- * @method u#unescapeHTML
- * @param { String } string - a String containing the HTML-escaped symbols.
- */
-
-
-utils_core.unescapeHTML = function (string) {
-  var div = document.createElement('div');
-  div.innerHTML = string;
-  return div.innerText;
-};
-
-utils_core.escapeHTML = function (string) {
-  return string.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
-};
-
-utils_core.convertToImageTag = function (url, onLoad, onClick) {
-  return templates_image({
-    url,
-    onClick,
-    onLoad
-  });
-};
-
-utils_core.convertURIoHyperlink = function (uri, urlAsTyped) {
-  let normalized_url = uri.normalize()._string;
-
-  const pretty_url = uri._parts.urn ? normalized_url : uri.readable();
-  const visible_url = urlAsTyped || pretty_url;
-
-  if (!uri._parts.protocol && !normalized_url.startsWith('http://') && !normalized_url.startsWith('https://')) {
-    normalized_url = 'http://' + normalized_url;
+  render() {
+    return lit_html_html(message_actions_templateObject(), until(this.renderActions(), ''));
   }
 
-  if (uri._parts.protocol === 'xmpp' && uri._parts.query === 'join') {
-    return lit_html_html(html_templateObject(), ev => converse_core_api.rooms.open(ev.target.href), normalized_url, visible_url);
+  static getActionsDropdownItem(o) {
+    return lit_html_html(message_actions_templateObject2(), o.button_class, o.handler, o.icon_class, core_api.settings.get("assets_path"), o.i18n_text);
   }
 
-  return lit_html_html(html_templateObject2(), normalized_url, visible_url);
-};
-
-function isProtocolApproved(protocol, safeProtocolsList = APPROVED_URL_PROTOCOLS) {
-  return !!safeProtocolsList.includes(protocol);
-} // Will return false if URL is malformed or contains disallowed characters
-
-
-function isUrlValid(urlString) {
-  try {
-    const url = new URL(urlString);
-    return !!url;
-  } catch (error) {
-    return false;
+  onMessageEditButtonClicked(ev) {
+    ev.preventDefault();
+    this.chatview.onMessageEditButtonClicked(this.model);
   }
-}
-
-utils_core.convertUrlToHyperlink = function (url) {
-  const http_url = RegExp('^w{3}.', 'ig').test(url) ? "http://".concat(url) : url;
-  const uri = getURI(url);
 
-  if (uri !== null && isUrlValid(http_url) && (isProtocolApproved(uri._parts.protocol) || !uri._parts.protocol)) {
-    return this.convertURIoHyperlink(uri, url);
+  onMessageRetractButtonClicked(ev) {
+    ev.preventDefault();
+    this.chatview.onMessageRetractButtonClicked(this.model);
   }
 
-  return url;
-};
+  async getActionButtons() {
+    const buttons = [];
 
-utils_core.filterQueryParamsFromURL = function (url) {
-  const paramsArray = converse_core_api.settings.get("filter_url_query_params");
-  if (!paramsArray) return url;
-  const parsed_uri = getURI(url);
-  return parsed_uri.removeQuery(paramsArray).toString();
-};
+    if (this.editable) {
+      buttons.push({
+        'i18n_text': this.correcting ? i18n_('Cancel Editing') : i18n_('Edit'),
+        'handler': ev => this.onMessageEditButtonClicked(ev),
+        'button_class': 'chat-msg__action-edit',
+        'icon_class': 'fa fa-pencil-alt',
+        'name': 'edit'
+      });
+    }
 
-utils_core.addHyperlinks = function (text) {
-  const objs = [];
-  const parse_options = {
-    'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
-  };
+    const may_be_moderated = this.model.get('type') === 'groupchat' && (await this.model.mayBeModerated());
+    const retractable = !this.is_retracted && (this.model.mayBeRetracted() || may_be_moderated);
 
-  try {
-    URI_default.a.withinString(text, (url, start, end) => {
-      objs.push({
-        url,
-        start,
-        end
+    if (retractable) {
+      buttons.push({
+        'i18n_text': i18n_('Retract'),
+        'handler': ev => this.onMessageRetractButtonClicked(ev),
+        'button_class': 'chat-msg__action-retract',
+        'icon_class': 'fas fa-trash-alt',
+        'name': 'retract'
       });
-      return url;
-    }, parse_options);
-  } catch (error) {
-    headless_log.debug(error);
-    return [text];
+    }
+    /**
+     * *Hook* which allows plugins to add more message action buttons
+     * @event _converse#getMessageActionButtons
+     * @example
+     *  api.listen.on('getMessageActionButtons', (el, buttons) => {
+     *      buttons.push({
+     *          'i18n_text': 'Foo',
+     *          'handler': ev => alert('Foo!'),
+     *          'button_class': 'chat-msg__action-foo',
+     *          'icon_class': 'fa fa-check',
+     *          'name': 'foo'
+     *      });
+     *      return buttons;
+     *  });
+     */
+
+
+    return core_api.hook('getMessageActionButtons', this, buttons);
   }
 
-  let list = [text];
+  async renderActions() {
+    const buttons = await this.getActionButtons();
+    const items = buttons.map(b => message_actions_MessageActions.getActionsDropdownItem(b));
 
-  if (objs.length) {
-    objs.sort((a, b) => b.start - a.start).forEach(url_obj => {
-      const text = list.shift();
-      const url_text = text.slice(url_obj.start, url_obj.end);
-      list = [text.slice(0, url_obj.start), utils_core.convertUrlToHyperlink(url_text), text.slice(url_obj.end), ...list];
-    });
-  } else {
-    list = [text];
+    if (items.length) {
+      return lit_html_html(message_actions_templateObject3(), items);
+    } else {
+      return '';
+    }
   }
 
-  return list;
-};
+}
 
-utils_core.httpToGeoUri = function (text, _converse) {
-  const replacement = 'geo:$1,$2';
-  return text.replace(_converse.api.settings.get("geouri_regex"), replacement);
-};
+core_api.elements.define('converse-message-actions', message_actions_MessageActions);
+// EXTERNAL MODULE: ./node_modules/bootstrap.native/dist/bootstrap-native.js
+var bootstrap_native = __webpack_require__(34);
+var bootstrap_native_default = /*#__PURE__*/__webpack_require__.n(bootstrap_native);
 
-utils_core.slideInAllElements = function (elements, duration = 300) {
-  return Promise.all(Array.from(elements).map(e => utils_core.slideIn(e, duration)));
-};
+// CONCATENATED MODULE: ./src/templates/alert.js
+function alert_templateObject() {
+  const data = alert_taggedTemplateLiteral(["<div class=\"alert ", "\" role=\"alert\"><p>", "</p></div>"]);
 
-utils_core.slideToggleElement = function (el, duration) {
-  if (utils_core.hasClass('collapsed', el) || utils_core.hasClass('hidden', el)) {
-    return utils_core.slideOut(el, duration);
-  } else {
-    return utils_core.slideIn(el, duration);
-  }
-};
-/**
- * Shows/expands an element by sliding it out of itself
- * @private
- * @method u#slideOut
- * @param { HTMLElement } el - The HTML string
- * @param { Number } duration - The duration amount in milliseconds
- */
+  alert_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
-utils_core.slideOut = function (el, duration = 200) {
-  return new Promise((resolve, reject) => {
-    if (!el) {
-      const err = "An element needs to be passed in to slideOut";
-      headless_log.warn(err);
-      reject(new Error(err));
-      return;
-    }
+function alert_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-    const marker = el.getAttribute('data-slider-marker');
 
-    if (marker) {
-      el.removeAttribute('data-slider-marker');
-      window.cancelAnimationFrame(marker);
-    }
+/* harmony default export */ var templates_alert = (o => lit_html_html(alert_templateObject(), o.type, o.message));
+// CONCATENATED MODULE: ./src/modals/base.js
 
-    const end_height = utils_core.calculateElementHeight(el);
 
-    if (window.converse_disable_effects) {
-      // Effects are disabled (for tests)
-      el.style.height = end_height + 'px';
-      slideOutWrapup(el);
-      resolve();
-      return;
-    }
 
-    if (!utils_core.hasClass('collapsed', el) && !utils_core.hasClass('hidden', el)) {
-      resolve();
-      return;
-    }
 
-    const steps = duration / 17; // We assume 17ms per animation which is ~60FPS
 
-    let height = 0;
 
-    function draw() {
-      height += end_height / steps;
+const {
+  sizzle: base_sizzle
+} = converse.env;
+const base_u = converse.env.utils;
+const BaseModal = View.extend({
+  className: "modal",
+  persistent: false,
+  // Whether this modal should persist in the DOM once it's been closed
+  events: {
+    'click  .nav-item .nav-link': 'switchTab'
+  },
 
-      if (height < end_height) {
-        el.style.height = height + 'px';
-        el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
-      } else {
-        // We recalculate the height to work around an apparent
-        // browser bug where browsers don't know the correct
-        // offsetHeight beforehand.
-        el.removeAttribute('data-slider-marker');
-        el.style.height = utils_core.calculateElementHeight(el) + 'px';
-        el.style.overflow = "";
-        el.style.height = "";
-        resolve();
-      }
+  initialize(options) {
+    if (!this.id) {
+      throw new Error("Each modal class must have a unique id attribute");
     }
 
-    el.style.height = '0';
-    el.style.overflow = 'hidden';
-    el.classList.remove('hidden');
-    el.classList.remove('collapsed');
-    el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
-  });
-};
+    this.render(); // Allow properties to be set via passed in options
 
-utils_core.slideIn = function (el, duration = 200) {
-  /* Hides/collapses an element by sliding it into itself. */
-  return new Promise((resolve, reject) => {
-    if (!el) {
-      const err = "An element needs to be passed in to slideIn";
-      headless_log.warn(err);
-      return reject(new Error(err));
-    } else if (utils_core.hasClass('collapsed', el)) {
-      return resolve(el);
-    } else if (window.converse_disable_effects) {
-      // Effects are disabled (for tests)
-      el.classList.add('collapsed');
-      el.style.height = "";
-      return resolve(el);
-    }
+    Object.assign(this, options);
+    this.el.setAttribute('tabindex', '-1');
+    this.el.setAttribute('role', 'dialog');
+    this.el.setAttribute('aria-hidden', 'true');
+    const label_id = this.el.querySelector('.modal-title').getAttribute('id');
+    label_id && this.el.setAttribute('aria-labelledby', label_id);
+    this.insertIntoDOM();
+    const Modal = bootstrap_native_default.a.Modal;
+    this.modal = new Modal(this.el, {
+      backdrop: true,
+      keyboard: true
+    });
+    this.el.addEventListener('hide.bs.modal', () => this.onHide(), false);
+  },
 
-    const marker = el.getAttribute('data-slider-marker');
+  onHide() {
+    base_u.removeClass('selected', this.trigger_el);
+    !this.persistent && core_api.modal.remove(this);
+  },
 
-    if (marker) {
-      el.removeAttribute('data-slider-marker');
-      window.cancelAnimationFrame(marker);
-    }
+  insertIntoDOM() {
+    const container_el = core_converse.chatboxviews.el.querySelector("#converse-modals");
 
-    const original_height = el.offsetHeight,
-          steps = duration / 17; // We assume 17ms per animation which is ~60FPS
+    container_el.insertAdjacentElement('beforeEnd', this.el);
+  },
 
-    let height = original_height;
-    el.style.overflow = 'hidden';
+  switchTab(ev) {
+    ev.stopPropagation();
+    ev.preventDefault();
+    base_sizzle('.nav-link.active', this.el).forEach(el => {
+      base_u.removeClass('active', this.el.querySelector(el.getAttribute('href')));
+      base_u.removeClass('active', el);
+    });
+    base_u.addClass('active', ev.target);
+    base_u.addClass('active', this.el.querySelector(ev.target.getAttribute('href')));
+  },
 
-    function draw() {
-      height -= original_height / steps;
+  alert(message, type = 'primary') {
+    const body = this.el.querySelector('.modal-alert');
 
-      if (height > 0) {
-        el.style.height = height + 'px';
-        el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
-      } else {
-        el.removeAttribute('data-slider-marker');
-        el.classList.add('collapsed');
-        el.style.height = "";
-        resolve(el);
-      }
-    }
+    if (body === null) {
+      headless_log.error("Could not find a .modal-alert element in the modal to show an alert message in!");
+      return;
+    } // FIXME: Instead of adding the alert imperatively, we should
+    // find a way to let the modal rerender with an alert message
 
-    el.setAttribute('data-slider-marker', window.requestAnimationFrame(draw));
-  });
-};
 
-function afterAnimationEnds(el, callback) {
-  el.classList.remove('visible');
+    render_render(templates_alert({
+      'type': "alert-".concat(type),
+      'message': message
+    }), body);
+    const el = body.firstElementChild;
+    setTimeout(() => {
+      base_u.addClass('fade-out', el);
+      setTimeout(() => base_u.removeElement(el), 600);
+    }, 5000);
+  },
 
-  if (lodash_es_isFunction(callback)) {
-    callback();
+  show(ev) {
+    if (ev) {
+      ev.preventDefault();
+      this.trigger_el = ev.target;
+      this.trigger_el.classList.add('selected');
+    }
+
+    this.modal.show();
   }
+
+});
+/* harmony default export */ var modals_base = (BaseModal);
+// CONCATENATED MODULE: ./src/modals/templates/buttons.js
+function buttons_templateObject2() {
+  const data = buttons_taggedTemplateLiteral(["<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"", "\"><span aria-hidden=\"true\">\xD7</span></button>"]);
+
+  buttons_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
 }
 
-utils_core.isInDOM = function (el) {
-  return document.querySelector('body').contains(el);
-};
+function buttons_templateObject() {
+  const data = buttons_taggedTemplateLiteral(["<button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">", "</button>"]);
 
-utils_core.isVisible = function (el) {
-  if (el === null) {
-    return false;
-  }
+  buttons_templateObject = function () {
+    return data;
+  };
 
-  if (utils_core.hasClass('hidden', el)) {
-    return false;
-  } // XXX: Taken from jQuery's "visible" implementation
+  return data;
+}
 
+function buttons_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  return el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0;
-};
 
-utils_core.fadeIn = function (el, callback) {
-  if (!el) {
-    headless_log.warn("An element needs to be passed in to fadeIn");
-  }
 
-  if (window.converse_disable_effects) {
-    el.classList.remove('hidden');
-    return afterAnimationEnds(el, callback);
-  }
+const modal_close_button = lit_html_html(buttons_templateObject(), i18n_('Close'));
+const modal_header_close_button = lit_html_html(buttons_templateObject2(), i18n_('Close'));
+// CONCATENATED MODULE: ./src/modals/templates/image.js
+function modals_templates_image_templateObject() {
+  const data = modals_templates_image_taggedTemplateLiteral(["\n        <div class=\"modal-dialog fit-content\" role=\"document\">\n            <div class=\"modal-content fit-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"message-versions-modal-label\">", "<a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a></h4>\n                    ", "\n                </div>\n                <div class=\"modal-body modal-body--image fit-content\">\n                    <img class=\"chat-image\" src=\"", "\" @load=", ">\n                </div>\n                <div class=\"modal-footer\">", "</div>\n            </div>\n        </div>"]);
 
-  if (utils_core.hasClass('hidden', el)) {
-    el.classList.add('visible');
-    el.classList.remove('hidden');
-    el.addEventListener("webkitAnimationEnd", () => afterAnimationEnds(el, callback));
-    el.addEventListener("animationend", () => afterAnimationEnds(el, callback));
-    el.addEventListener("oanimationend", () => afterAnimationEnds(el, callback));
-  } else {
-    afterAnimationEnds(el, callback);
-  }
-};
-/**
- * Takes a field in XMPP XForm (XEP-004: Data Forms) format
- * and turns it into an HTML field.
- * Returns either text or a DOM element (which is not ideal, but fine for now).
- * @private
- * @method u#xForm2webForm
- * @param { XMLElement } field - the field to convert
- */
+  modals_templates_image_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
-utils_core.xForm2webForm = function (field, stanza, options) {
-  if (field.getAttribute('type') === 'list-single' || field.getAttribute('type') === 'list-multi') {
-    const values = utils_core.queryChildren(field, 'value').map(el => el === null || el === void 0 ? void 0 : el.textContent);
-    const options = utils_core.queryChildren(field, 'option').map(option => {
-      var _option$querySelector;
+function modals_templates_image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-      const value = (_option$querySelector = option.querySelector('value')) === null || _option$querySelector === void 0 ? void 0 : _option$querySelector.textContent;
-      return select_option_default()({
-        'value': value,
-        'label': option.getAttribute('label'),
-        'selected': values.includes(value),
-        'required': !!field.querySelector('required')
-      });
-    });
-    return form_select_default()({
-      'id': utils_core.getUniqueId(),
-      'name': field.getAttribute('var'),
-      'label': field.getAttribute('label'),
-      'options': options.join(''),
-      'multiple': field.getAttribute('type') === 'list-multi',
-      'required': !!field.querySelector('required')
-    });
-  } else if (field.getAttribute('type') === 'fixed') {
-    var _field$querySelector;
 
-    const text = (_field$querySelector = field.querySelector('value')) === null || _field$querySelector === void 0 ? void 0 : _field$querySelector.textContent;
-    return '<p class="form-help">' + text + '</p>';
-  } else if (field.getAttribute('type') === 'jid-multi') {
-    var _field$querySelector2;
 
-    return form_textarea_default()({
-      'name': field.getAttribute('var'),
-      'label': field.getAttribute('label') || '',
-      'value': (_field$querySelector2 = field.querySelector('value')) === null || _field$querySelector2 === void 0 ? void 0 : _field$querySelector2.textContent,
-      'required': !!field.querySelector('required')
-    });
-  } else if (field.getAttribute('type') === 'boolean') {
-    var _field$querySelector3;
 
-    const value = (_field$querySelector3 = field.querySelector('value')) === null || _field$querySelector3 === void 0 ? void 0 : _field$querySelector3.textContent;
-    return form_checkbox_default()({
-      'id': utils_core.getUniqueId(),
-      'name': field.getAttribute('var'),
-      'label': field.getAttribute('label') || '',
-      'checked': (value === "1" || value === "true") && 'checked="1"' || '',
-      'required': !!field.querySelector('required')
-    });
-  } else if (field.getAttribute('var') === 'url') {
-    var _field$querySelector4;
+/* harmony default export */ var modals_templates_image = (o => {
+  return lit_html_html(modals_templates_image_templateObject(), i18n_('Image: '), o.src, o.src, modal_header_close_button, o.src, o.onload, modal_close_button);
+});
+// CONCATENATED MODULE: ./src/modals/image.js
 
-    return form_url_default()({
-      'label': field.getAttribute('label') || '',
-      'value': (_field$querySelector4 = field.querySelector('value')) === null || _field$querySelector4 === void 0 ? void 0 : _field$querySelector4.textContent
-    });
-  } else if (field.getAttribute('var') === 'username') {
-    var _field$querySelector5;
 
-    return form_username_default()({
-      'domain': ' @' + options.domain,
-      'name': field.getAttribute('var'),
-      'type': XFORM_TYPE_MAP[field.getAttribute('type')],
-      'label': field.getAttribute('label') || '',
-      'value': (_field$querySelector5 = field.querySelector('value')) === null || _field$querySelector5 === void 0 ? void 0 : _field$querySelector5.textContent,
-      'required': !!field.querySelector('required')
-    });
-  } else if (field.getAttribute('var') === 'ocr') {
-    // Captcha
-    const uri = field.querySelector('uri');
-    const el = sizzle_default()('data[cid="' + uri.textContent.replace(/^cid:/, '') + '"]', stanza)[0];
-    return form_captcha_default()({
-      'label': field.getAttribute('label'),
-      'name': field.getAttribute('var'),
-      'data': el === null || el === void 0 ? void 0 : el.textContent,
-      'type': uri.getAttribute('type'),
-      'required': !!field.querySelector('required')
-    });
-  } else {
-    var _field$querySelector6;
+/* harmony default export */ var modals_image = (modals_base.extend({
+  id: 'image-modal',
 
-    const name = field.getAttribute('var');
-    return form_input_default()({
-      'id': utils_core.getUniqueId(),
-      'label': field.getAttribute('label') || '',
-      'name': name,
-      'fixed_username': options === null || options === void 0 ? void 0 : options.fixed_username,
-      'autocomplete': getAutoCompleteProperty(name, options),
-      'placeholder': null,
-      'required': !!field.querySelector('required'),
-      'type': XFORM_TYPE_MAP[field.getAttribute('type')],
-      'value': (_field$querySelector6 = field.querySelector('value')) === null || _field$querySelector6 === void 0 ? void 0 : _field$querySelector6.textContent
+  toHTML() {
+    return modals_templates_image({
+      'src': this.src,
+      'onload': ev => ev.target.parentElement.style.height = "".concat(ev.target.height, "px")
     });
   }
-};
 
-/* harmony default export */ var utils_html = (utils_core);
-// CONCATENATED MODULE: ./src/dom-navigator.js
-/**
- * @module dom-navigator
- * @description A class for navigating the DOM with the keyboard
- * This module started as a fork of Rubens Mariuzzo's dom-navigator.
- * @copyright Rubens Mariuzzo, JC Brand
- */
+}));
+// CONCATENATED MODULE: ./src/templates/directives/styling.js
+function styling_templateObject2() {
+  const data = styling_taggedTemplateLiteral(["", ""]);
 
+  styling_templateObject2 = function () {
+    return data;
+  };
 
-const {
-  keycodes
-} = converse;
-/**
- * Indicates if a given element is fully visible in the viewport.
- * @param { Element } el The element to check.
- * @return { Boolean } True if the given element is fully visible in the viewport, otherwise false.
- */
+  return data;
+}
 
-function inViewport(el) {
-  const rect = el.getBoundingClientRect();
-  return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;
+function styling_templateObject() {
+  const data = styling_taggedTemplateLiteral(["", ""]);
+
+  styling_templateObject = function () {
+    return data;
+  };
+
+  return data;
 }
-/**
- * Return the absolute offset top of an element.
- * @param el { Element } The element.
- * @return { Number } The offset top.
- */
 
+function styling_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-function absoluteOffsetTop(el) {
-  let offsetTop = 0;
 
-  do {
-    if (!isNaN(el.offsetTop)) {
-      offsetTop += el.offsetTop;
-    }
-  } while (el = el.offsetParent);
 
-  return offsetTop;
+
+
+async function styling_transform(t) {
+  await t.addTemplates();
+  return t.payload;
+}
+
+function styling_renderer(text, model, offset) {
+  const t = new text_MessageText(text, model, offset, false);
+  return lit_html_html(styling_templateObject(), until(styling_transform(t), lit_html_html(styling_templateObject2(), t)));
 }
-/**
- * Return the absolute offset left of an element.
- * @param el { Element } The element.
- * @return { Number } The offset left.
- */
 
+const renderStylingDirectiveBody = directive_directive((text, model, offset) => p => p.setValue(styling_renderer(text, model, offset)));
+// CONCATENATED MODULE: ./src/shared/message/styling.js
+function _templateObject6() {
+  const data = message_styling_taggedTemplateLiteral(["<span class=\"styling-directive\">*</span><b>", "</b><span class=\"styling-directive\">*</span>"]);
 
-function absoluteOffsetLeft(el) {
-  let offsetLeft = 0;
+  _templateObject6 = function () {
+    return data;
+  };
 
-  do {
-    if (!isNaN(el.offsetLeft)) {
-      offsetLeft += el.offsetLeft;
-    }
-  } while (el = el.offsetParent);
+  return data;
+}
 
-  return offsetLeft;
+function _templateObject5() {
+  const data = message_styling_taggedTemplateLiteral(["<span class=\"styling-directive\">~</span><del>", "</del><span class=\"styling-directive\">~</span>"]);
+
+  _templateObject5 = function () {
+    return data;
+  };
+
+  return data;
 }
-/**
- * Adds the ability to navigate the DOM with the arrow keys
- * @class DOMNavigator
- */
 
+function _templateObject4() {
+  const data = message_styling_taggedTemplateLiteral(["<blockquote>", "</blockquote>"]);
 
-class dom_navigator_DOMNavigator {
-  /**
-   * Directions.
-   * @returns {{left: string, up: string, right: string, down: string}}
-   * @constructor
-   */
-  static get DIRECTION() {
-    return {
-      down: 'down',
-      end: 'end',
-      home: 'home',
-      left: 'left',
-      right: 'right',
-      up: 'up'
-    };
-  }
-  /**
-   * The default options for the DOM navigator.
-   * @returns {{
-   *     down: number,
-   *     getSelector: null,
-   *     jump_to_picked: null,
-   *     jump_to_picked_direction: null,
-   *     jump_to_picked_selector: string,
-   *     left: number,
-   *     onSelected: null,
-   *     right: number,
-   *     selected: string,
-   *     up: number
-   * }}
-   */
+  _templateObject4 = function () {
+    return data;
+  };
 
+  return data;
+}
 
-  static get DEFAULTS() {
-    return {
-      home: ["".concat(keycodes.SHIFT, "+").concat(keycodes.UP_ARROW)],
-      end: ["".concat(keycodes.SHIFT, "+").concat(keycodes.DOWN_ARROW)],
-      up: [keycodes.UP_ARROW],
-      down: [keycodes.DOWN_ARROW],
-      left: [keycodes.LEFT_ARROW, "".concat(keycodes.SHIFT, "+").concat(keycodes.TAB)],
-      right: [keycodes.RIGHT_ARROW, keycodes.TAB],
-      getSelector: null,
-      jump_to_picked: null,
-      jump_to_picked_direction: null,
-      jump_to_picked_selector: 'picked',
-      onSelected: null,
-      selected: 'selected',
-      selector: 'li'
-    };
-  }
+function styling_templateObject3() {
+  const data = message_styling_taggedTemplateLiteral(["<div class=\"styling-directive\">```</div><code class=\"block\">", "</code><div class=\"styling-directive\">```</div>"], ["<div class=\"styling-directive\">\\`\\`\\`</div><code class=\"block\">", "</code><div class=\"styling-directive\">\\`\\`\\`</div>"]);
 
-  static getClosestElement(els, getDistance) {
-    const next = els.reduce((prev, curr) => {
-      const current_distance = getDistance(curr);
+  styling_templateObject3 = function () {
+    return data;
+  };
 
-      if (current_distance < prev.distance) {
-        return {
-          distance: current_distance,
-          element: curr
-        };
-      }
+  return data;
+}
 
-      return prev;
-    }, {
-      distance: Infinity
-    });
-    return next.element;
-  }
-  /**
-   * Create a new DOM Navigator.
-   * @param { Element } container The container of the element to navigate.
-   * @param { Object } options The options to configure the DOM navigator.
-   * @param { Function } options.getSelector
-   * @param { Number } [options.down] - The keycode for navigating down
-   * @param { Number } [options.left] - The keycode for navigating left
-   * @param { Number } [options.right] - The keycode for navigating right
-   * @param { Number } [options.up] - The keycode for navigating up
-   * @param { String } [options.selected] - The class that should be added to the currently selected DOM element.
-   * @param { String } [options.jump_to_picked] - A selector, which if
-   * matched by the next element being navigated to, based on the direction
-   * given by `jump_to_picked_direction`, will cause navigation
-   * to jump to the element that matches the `jump_to_picked_selector`.
-   * For example, this is useful when navigating to tabs. You want to
-   * immediately navigate to the currently active tab instead of just
-   * navigating to the first tab.
-   * @param { String } [options.jump_to_picked_selector=picked] - The selector
-   * indicating the currently picked element to jump to.
-   * @param { String } [options.jump_to_picked_direction] - The direction for
-   * which jumping to the picked element should be enabled.
-   * @param { Function } [options.onSelected] - The callback function which
-   * should be called when en element gets selected.
-   * @constructor
-   */
+function message_styling_templateObject2() {
+  const data = message_styling_taggedTemplateLiteral(["<span class=\"styling-directive\">`</span><code>", "</code><span class=\"styling-directive\">`</span>"], ["<span class=\"styling-directive\">\\`</span><code>", "</code><span class=\"styling-directive\">\\`</span>"]);
 
+  message_styling_templateObject2 = function () {
+    return data;
+  };
 
-  constructor(container, options) {
-    this.doc = window.document;
-    this.container = container;
-    this.scroll_container = options.scroll_container || container;
-    this.options = Object.assign({}, dom_navigator_DOMNavigator.DEFAULTS, options);
-    this.init();
-  }
-  /**
-   * Initialize the navigator.
-   */
+  return data;
+}
 
+function message_styling_templateObject() {
+  const data = message_styling_taggedTemplateLiteral(["<span class=\"styling-directive\">_</span><i>", "</i><span class=\"styling-directive\">_</span>"]);
 
-  init() {
-    this.selected = null;
-    this.keydownHandler = null;
-    this.elements = {}; // Create hotkeys map.
+  message_styling_templateObject = function () {
+    return data;
+  };
 
-    this.keys = {};
-    this.options.down.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.down);
-    this.options.end.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.end);
-    this.options.home.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.home);
-    this.options.left.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.left);
-    this.options.right.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.right);
-    this.options.up.forEach(key => this.keys[key] = dom_navigator_DOMNavigator.DIRECTION.up);
-  }
-  /**
-   * Enable this navigator.
-   */
+  return data;
+}
 
+function message_styling_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  enable() {
-    this.getElements();
+/**
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ * @description Utility functions to help with parsing XEP-393 message styling hints
+ * @todo Other parsing helpers can be made more abstract and placed here.
+ */
 
-    this.keydownHandler = event => this.handleKeydown(event);
 
-    this.doc.addEventListener('keydown', this.keydownHandler);
-    this.enabled = true;
+const styling_directives = ['*', '_', '~', '`', '```', '>'];
+const styling_map = {
+  '*': {
+    'name': 'strong',
+    'type': 'span'
+  },
+  '_': {
+    'name': 'emphasis',
+    'type': 'span'
+  },
+  '~': {
+    'name': 'strike',
+    'type': 'span'
+  },
+  '`': {
+    'name': 'preformatted',
+    'type': 'span'
+  },
+  '```': {
+    'name': 'preformatted_block',
+    'type': 'block'
+  },
+  '>': {
+    'name': 'quote',
+    'type': 'block'
   }
-  /**
-   * Disable this navigator.
-   */
+};
+const dont_escape = ['_', '>', '`', '~'];
+const styling_templates = {
+  // m is the chatbox model
+  // i is the offset of this directive relative to the start of the original message
+  'emphasis': (txt, m, i) => lit_html_html(message_styling_templateObject(), renderStylingDirectiveBody(txt, m, i)),
+  'preformatted': txt => lit_html_html(message_styling_templateObject2(), txt),
+  'preformatted_block': txt => lit_html_html(styling_templateObject3(), txt),
+  'quote': (txt, m, i) => lit_html_html(_templateObject4(), renderStylingDirectiveBody(txt, m, i)),
+  'strike': (txt, m, i) => lit_html_html(_templateObject5(), renderStylingDirectiveBody(txt, m, i)),
+  'strong': (txt, m, i) => lit_html_html(_templateObject6(), renderStylingDirectiveBody(txt, m, i))
+};
+/**
+ * Checks whether a given character "d" at index "i" of "text" is a valid opening or closing directive.
+ * @param { String } d - The potential directive
+ * @param { String } text - The text in which  the directive appears
+ * @param { Number } i - The directive index
+ * @param { Boolean } opening - Check for a valid opening or closing directive
+ */
 
+function isValidDirective(d, text, i, opening) {
+  // Ignore directives that are parts of words
+  // More info on the Regexes used here: https://javascript.info/regexp-unicode#unicode-properties-p
+  if (opening) {
+    const regex = RegExp(dont_escape.includes(d) ? "^(\\p{L}|\\p{N})".concat(d) : "^(\\p{L}|\\p{N})\\".concat(d), 'u');
 
-  disable() {
-    if (this.keydownHandler) {
-      this.doc.removeEventListener('keydown', this.keydownHandler);
+    if (i > 1 && regex.test(text.slice(i - 1))) {
+      return false;
     }
 
-    this.unselect();
-    this.elements = {};
-    this.enabled = false;
-  }
-  /**
-   * Destroy this navigator removing any event registered and any other data.
-   */
-
+    const is_quote = isQuoteDirective(d);
 
-  destroy() {
-    this.disable();
+    if (is_quote && i > 0 && text[i - 1] !== '\n') {
+      // Quote directives must be on newlines
+      return false;
+    } else if (!is_quote && d === text[i + 1]) {
+      // Immediately followed by another directive of the same type
+      return false;
+    }
+  } else {
+    const regex = RegExp(dont_escape.includes(d) ? "^".concat(d, "(\\p{L}|\\p{N})") : "^\\".concat(d, "(\\p{L}|\\p{N})"), 'u');
 
-    if (this.container.domNavigator) {
-      delete this.container.domNavigator;
+    if (i < text.length - 1 && regex.test(text.slice(i))) {
+      return false;
     }
   }
-  /**
-   * @param {'down'|'right'|'left'|'up'} direction
-   * @returns { HTMLElement }
-   */
 
+  return true;
+}
+/**
+ * Given a specific index "i" of "text", return the directive it matches or
+ * null otherwise.
+ * @param { String } text - The text in which  the directive appears
+ * @param { Number } i - The directive index
+ * @param { Boolean } opening - Whether we're looking for an opening or closing directive
+ */
 
-  getNextElement(direction) {
-    let el;
 
-    if (direction === dom_navigator_DOMNavigator.DIRECTION.home) {
-      el = this.getElements(direction)[0];
-    } else if (direction === dom_navigator_DOMNavigator.DIRECTION.end) {
-      el = Array.from(this.getElements(direction)).pop();
-    } else if (this.selected) {
-      if (direction === dom_navigator_DOMNavigator.DIRECTION.right) {
-        const els = this.getElements(direction);
-        el = els.slice(els.indexOf(this.selected))[1];
-      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.left) {
-        const els = this.getElements(direction);
-        el = els.slice(0, els.indexOf(this.selected)).pop() || this.selected;
-      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.down) {
-        const left = this.selected.offsetLeft;
-        const top = this.selected.offsetTop + this.selected.offsetHeight;
-        const els = this.elementsAfter(0, top);
+function getDirective(text, i, opening = true) {
+  let d;
 
-        const getDistance = el => Math.abs(el.offsetLeft - left) + Math.abs(el.offsetTop - top);
+  if (/(^```\s*\n|^```\s*$)/.test(text.slice(i)) && (i === 0 || text[i - 1] === '\n' || text[i - 1] === '>')) {
+    d = text.slice(i, i + 3);
+  } else if (styling_directives.includes(text.slice(i, i + 1))) {
+    d = text.slice(i, i + 1);
+    if (!isValidDirective(d, text, i, opening)) return null;
+  } else {
+    return null;
+  }
 
-        el = dom_navigator_DOMNavigator.getClosestElement(els, getDistance);
-      } else if (direction == dom_navigator_DOMNavigator.DIRECTION.up) {
-        const left = this.selected.offsetLeft;
-        const top = this.selected.offsetTop - 1;
-        const els = this.elementsBefore(Infinity, top);
+  return d;
+}
+/**
+ * Given an opening directive "d", an index "i" and the text, check whether
+ * we've found the closing directive.
+ * @param { String } d -The directive
+ * @param { Number } i - The directive index
+ * @param { String } text -The text in which the directive appears
+ */
 
-        const getDistance = el => Math.abs(left - el.offsetLeft) + Math.abs(top - el.offsetTop);
 
-        el = dom_navigator_DOMNavigator.getClosestElement(els, getDistance);
-      } else {
-        throw new Error("getNextElement: invalid direction value");
-      }
-    } else {
-      if (direction === dom_navigator_DOMNavigator.DIRECTION.right || direction === dom_navigator_DOMNavigator.DIRECTION.down) {
-        // If nothing is selected, we pretend that the first element is
-        // selected, so we return the next.
-        el = this.getElements(direction)[1];
-      } else {
-        el = this.getElements(direction)[0];
-      }
-    }
+function isDirectiveEnd(d, i, text) {
+  const dtype = styling_map[d].type; // directive type
 
-    if (this.options.jump_to_picked && el && el.matches(this.options.jump_to_picked) && direction === this.options.jump_to_picked_direction) {
-      el = this.container.querySelector(this.options.jump_to_picked_selector) || el;
-    }
+  return i === text.length || getDirective(text, i, false) === d || dtype === 'span' && text[i] === '\n';
+}
+/**
+ * Given a directive "d", which occurs in "text" at index "i", check that it
+ * has a valid closing directive and return the length from start to end of the
+ * directive.
+ * @param { String } d -The directive
+ * @param { Number } i - The directive index
+ * @param { String } text -The text in which the directive appears
+ */
 
-    return el;
+
+function getDirectiveLength(d, text, i) {
+  if (!d) {
+    return 0;
   }
-  /**
-   * Select the given element.
-   * @param { Element } el The DOM element to select.
-   * @param { string } [direction] The direction.
-   */
 
+  const begin = i;
+  i += d.length;
 
-  select(el, direction) {
-    if (!el || el === this.selected) {
-      return;
+  if (isQuoteDirective(d)) {
+    i += text.slice(i).split(/\n[^>]/).shift().length;
+    return i - begin;
+  } else if (styling_map[d].type === 'span') {
+    const line = text.slice(i + 1).split('\n').shift();
+    let j = 0;
+    let idx = line.indexOf(d);
+
+    while (idx !== -1) {
+      if (isDirectiveEnd(d, i + 1 + idx, text)) return idx + 1 + 2 * d.length;
+      idx = line.indexOf(d, j++);
     }
 
-    this.unselect();
-    direction && this.scrollTo(el, direction);
+    return 0;
+  } else {
+    const substring = text.slice(i + 1);
+    let j;
+    let idx = substring.indexOf(d);
 
-    if (el.matches('input')) {
-      el.focus();
-    } else {
-      utils_html.addClass(this.options.selected, el);
+    while (idx !== -1) {
+      if (isDirectiveEnd(d, i + 1 + idx, text)) return idx + 1 + 2 * d.length;
+      idx = substring.indexOf(d, j++);
     }
 
-    this.selected = el;
-    this.options.onSelected && this.options.onSelected(el);
+    return 0;
   }
-  /**
-   * Remove the current selection
-   */
+}
 
+function getDirectiveAndLength(text, i) {
+  const d = getDirective(text, i);
+  const length = d ? getDirectiveLength(d, text, i) : 0;
+  return length > 0 ? {
+    d,
+    length
+  } : {};
+}
+const isQuoteDirective = d => ['>', '&gt;'].includes(d);
+function getDirectiveTemplate(d, text, model, offset) {
+  const template = styling_templates[styling_map[d].name];
 
-  unselect() {
-    if (this.selected) {
-      utils_html.removeClass(this.options.selected, this.selected);
-      delete this.selected;
+  if (isQuoteDirective(d)) {
+    const newtext = text.replace(/\n>/g, '\n') // Don't show the directive itself
+    .replace(/\n$/, ''); // Trim line-break at the end
+
+    return template(newtext, model, offset);
+  } else {
+    return template(text, model, offset);
+  }
+}
+function containsDirectives(text) {
+  for (let i = 0; i < styling_directives.length; i++) {
+    if (text.includes(styling_directives[i])) {
+      return true;
     }
   }
-  /**
-   * Scroll the container to an element.
-   * @param { HTMLElement } el The destination element.
-   * @param { String } direction The direction of the current navigation.
-   * @return void.
-   */
-
-
-  scrollTo(el, direction) {
-    if (!this.inScrollContainerViewport(el)) {
-      const container = this.scroll_container;
+}
+// CONCATENATED MODULE: ./src/shared/message/text.js
+function text_templateObject2() {
+  const data = text_taggedTemplateLiteral(["<span class=\"mention\">", "</span>"]);
 
-      if (!container.contains(el)) {
-        return;
-      }
+  text_templateObject2 = function () {
+    return data;
+  };
 
-      switch (direction) {
-        case dom_navigator_DOMNavigator.DIRECTION.left:
-          container.scrollLeft = el.offsetLeft - container.offsetLeft;
-          container.scrollTop = el.offsetTop - container.offsetTop;
-          break;
+  return data;
+}
 
-        case dom_navigator_DOMNavigator.DIRECTION.up:
-          container.scrollTop = el.offsetTop - container.offsetTop;
-          break;
+function text_templateObject() {
+  const data = text_taggedTemplateLiteral(["<span class=\"mention mention--self badge badge-info\">", "</span>"]);
 
-        case dom_navigator_DOMNavigator.DIRECTION.right:
-          container.scrollLeft = el.offsetLeft - container.offsetLeft - (container.offsetWidth - el.offsetWidth);
-          container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight);
-          break;
+  text_templateObject = function () {
+    return data;
+  };
 
-        case dom_navigator_DOMNavigator.DIRECTION.down:
-          container.scrollTop = el.offsetTop - container.offsetTop - (container.offsetHeight - el.offsetHeight);
-          break;
-      }
-    } else if (!inViewport(el)) {
-      switch (direction) {
-        case dom_navigator_DOMNavigator.DIRECTION.left:
-          document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft;
-          break;
+  return data;
+}
 
-        case dom_navigator_DOMNavigator.DIRECTION.up:
-          document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop;
-          break;
+function text_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-        case dom_navigator_DOMNavigator.DIRECTION.right:
-          document.body.scrollLeft = absoluteOffsetLeft(el) - document.body.offsetLeft - (document.documentElement.clientWidth - el.offsetWidth);
-          break;
 
-        case dom_navigator_DOMNavigator.DIRECTION.down:
-          document.body.scrollTop = absoluteOffsetTop(el) - document.body.offsetTop - (document.documentElement.clientHeight - el.offsetHeight);
-          break;
-      }
-    }
-  }
-  /**
-   * Indicate if an element is in the container viewport.
-   * @param { HTMLElement } el The element to check.
-   * @return { Boolean } true if the given element is in the container viewport, otherwise false.
-   */
 
 
-  inScrollContainerViewport(el) {
-    const container = this.scroll_container; // Check on left side.
 
-    if (el.offsetLeft - container.scrollLeft < container.offsetLeft) {
-      return false;
-    } // Check on top side.
 
 
-    if (el.offsetTop - container.scrollTop < container.offsetTop) {
-      return false;
-    } // Check on right side.
+const text_u = converse.env.utils;
 
+const text_isString = s => typeof s === 'string';
 
-    if (el.offsetLeft + el.offsetWidth - container.scrollLeft > container.offsetLeft + container.offsetWidth) {
-      return false;
-    } // Check on down side.
+const tpl_mention_with_nick = o => lit_html_html(text_templateObject(), o.mention);
 
+const tpl_mention = o => lit_html_html(text_templateObject2(), o.mention);
+/**
+ * @class MessageText
+ * A String subclass that is used to represent the rich text
+ * of a chat message.
+ *
+ * The "rich" parts of the text is represented by lit-html TemplateResult
+ * objects which are added via the {@link MessageText.addTemplateResult}
+ * method and saved as metadata.
+ *
+ * By default Converse adds TemplateResults to support emojis, hyperlinks,
+ * images, map URIs and mentions.
+ *
+ * 3rd party plugins can listen for the `beforeMessageBodyTransformed`
+ * and/or `afterMessageBodyTransformed` events and then call
+ * `addTemplateResult` on the MessageText instance in order to add their own
+ * rich features.
+ */
 
-    if (el.offsetTop + el.offsetHeight - container.scrollTop > container.offsetTop + container.offsetHeight) {
-      return false;
-    }
 
-    return true;
+class text_MessageText extends String {
+  /**
+   * Create a new {@link MessageText} instance.
+   * @param { String } text - The text to be annotated
+   * @param { Message } model - The model representing the message to which
+   *  this MessageText instance belongs
+   * @param { Integer } offset - The offset of this particular piece of text
+   *  from the start of the original message text. This is necessary because
+   *  MessageText instances can be nested when templates call directives
+   *  which create new MessageText instances (as happens with XEP-393 styling directives).
+   * @param { Boolean } show_images - Whether image URLs should be rendered as <img> tags.
+   * @param { Function } onImgLoad - Callback for when an inline rendered image has been loaded
+   * @param { Function } onImgClick - Callback for when an inline rendered image has been clicked
+   */
+  constructor(text, model, offset = 0, show_images, onImgLoad, onImgClick) {
+    super(text);
+    this.model = model;
+    this.offset = offset;
+    this.onImgClick = onImgClick;
+    this.onImgLoad = onImgLoad;
+    this.references = [];
+    this.show_images = show_images;
+    this.payload = [];
   }
   /**
-   * Find and store the navigable elements
+   * Look for `http` URIs and return templates that render them as URL links
+   * @param { String } text
+   * @param { Integer } offset - The index of the passed in text relative to
+   *  the start of the message body text.
    */
 
 
-  getElements(direction) {
-    const selector = this.options.getSelector ? this.options.getSelector(direction) : this.options.selector;
+  addHyperlinks(text, offset) {
+    const objs = [];
 
-    if (!this.elements[selector]) {
-      this.elements[selector] = Array.from(this.container.querySelectorAll(selector));
+    try {
+      const parse_options = {
+        'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi
+      };
+      URI_default.a.withinString(text, (url, start, end) => {
+        objs.push({
+          url,
+          start,
+          end
+        });
+        return url;
+      }, parse_options);
+    } catch (error) {
+      headless_log.debug(error);
+      return;
     }
 
-    return this.elements[selector];
+    objs.forEach(url_obj => {
+      const url_text = text.slice(url_obj.start, url_obj.end);
+      const filtered_url = text_u.filterQueryParamsFromURL(url_text);
+      this.addTemplateResult(url_obj.start + offset, url_obj.end + offset, this.show_images && text_u.isImageURL(url_text) && text_u.isImageDomainAllowed(url_text) ? text_u.convertToImageTag(filtered_url, this.onImgLoad, this.onImgClick) : text_u.convertUrlToHyperlink(filtered_url));
+    });
   }
   /**
-   * Return an array of navigable elements after an offset.
-   * @param { number } left The left offset.
-   * @param { number } top The top offset.
-   * @return { Array } An array of elements.
+   * Look for `geo` URIs and return templates that render them as URL links
+   * @param { String } text
+   * @param { Integer } offset - The index of the passed in text relative to
+   *  the start of the message body text.
    */
 
 
-  elementsAfter(left, top) {
-    return this.getElements(dom_navigator_DOMNavigator.DIRECTION.down).filter(el => el.offsetLeft >= left && el.offsetTop >= top);
+  addMapURLs(text, offset) {
+    const regex = /geo:([\-0-9.]+),([\-0-9.]+)(?:,([\-0-9.]+))?(?:\?(.*))?/g;
+    const matches = text.matchAll(regex);
+
+    for (const m of matches) {
+      this.addTemplateResult(m.index + offset, m.index + m[0].length + offset, text_u.convertUrlToHyperlink(m[0].replace(regex, core_converse.geouri_replacement)));
+    }
   }
   /**
-   * Return an array of navigable elements before an offset.
-   * @param { number } left The left offset.
-   * @param { number } top The top offset.
-   * @return { Array } An array of elements.
+   * Look for emojis (shortnames or unicode) and add templates for rendering them.
+   * @param { String } text
+   * @param { Integer } offset - The index of the passed in text relative to
+   *  the start of the message body text.
    */
 
 
-  elementsBefore(left, top) {
-    return this.getElements(dom_navigator_DOMNavigator.DIRECTION.up).filter(el => el.offsetLeft <= left && el.offsetTop <= top);
+  addEmojis(text, offset) {
+    const references = [...getShortnameReferences(text.toString()), ...getCodePointReferences(text.toString())];
+    references.forEach(e => {
+      this.addTemplateResult(e.begin + offset, e.end + offset, getEmojiMarkup(e, {
+        'add_title_wrapper': true
+      }));
+    });
   }
   /**
-   * Handle the key down event.
-   * @param { Event } event The event object.
+   * Look for mentions included as XEP-0372 references and add templates for
+   * rendering them.
+   * @param { String } text
+   * @param { Integer } local_offset - The index of the passed in text relative to
+   *  the start of this MessageText instance (which is not necessarily the same as the
+   *  offset from the start of the original message stanza's body text).
    */
 
 
-  handleKeydown(ev) {
-    const keys = keycodes;
-    const direction = ev.shiftKey ? this.keys["".concat(keys.SHIFT, "+").concat(ev.which)] : this.keys[ev.which];
+  addMentions(text, local_offset) {
+    var _this$model$get;
 
-    if (direction) {
-      ev.preventDefault();
-      ev.stopPropagation();
-      const next = this.getNextElement(direction, ev);
-      this.select(next, direction);
+    const full_offset = local_offset + this.offset;
+
+    if (!this.model.collection) {
+      // This model doesn't belong to a collection anymore, so it must be
+      // have been removed in the meantime and can be ignored.
+      headless_log.debug('addMentions: ignoring dangling model');
+      return;
     }
-  }
 
-}
+    const nick = this.model.collection.chatbox.get('nick');
+    (_this$model$get = this.model.get('references')) === null || _this$model$get === void 0 ? void 0 : _this$model$get.forEach(ref => {
+      const begin = Number(ref.begin) - full_offset;
 
-/* harmony default export */ var dom_navigator = (dom_navigator_DOMNavigator);
-// CONCATENATED MODULE: ./src/components/dropdown.js
-function dropdown_templateObject() {
-  const data = dropdown_taggedTemplateLiteral(["\n            <div class=\"dropleft\">\n                <button type=\"button\" class=\"btn btn--transparent btn--standalone\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n                    <i class=\"", " only-icon\"></i>\n                </button>\n                <div class=\"dropdown-menu\">\n                    ", "\n                </div>\n            </div>\n        "]);
+      if (begin < 0 || begin >= full_offset + text.length) {
+        return;
+      }
 
-  dropdown_templateObject = function _templateObject() {
-    return data;
-  };
+      const end = Number(ref.end) - full_offset;
+      const mention = text.slice(begin, end);
 
-  return data;
-}
+      if (mention === nick) {
+        this.addTemplateResult(begin + local_offset, end + local_offset, tpl_mention_with_nick({
+          mention
+        }));
+      } else {
+        this.addTemplateResult(begin + local_offset, end + local_offset, tpl_mention({
+          mention
+        }));
+      }
+    });
+  }
+  /**
+   * Look for XEP-0393 styling directives and add templates for rendering
+   * them.
+   */
 
-function dropdown_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
+  addStyling() {
+    if (this.model.get('is_unstyled') || !core_api.settings.get('allow_message_styling')) {
+      return;
+    }
 
+    let i = 0;
+    const references = [];
 
+    if (containsDirectives(this)) {
+      while (i < this.length) {
+        const {
+          d,
+          length
+        } = getDirectiveAndLength(this, i);
+
+        if (d && length) {
+          const is_quote = isQuoteDirective(d);
+          const end = i + length;
+          const slice_end = is_quote ? end : end - d.length;
+          let slice_begin = d === '```' ? i + d.length + 1 : i + d.length;
+
+          if (is_quote && this[slice_begin] === ' ') {
+            // Trim leading space inside codeblock
+            slice_begin += 1;
+          }
 
+          const offset = slice_begin;
+          const text = this.slice(slice_begin, slice_end);
+          references.push({
+            'begin': i,
+            'template': getDirectiveTemplate(d, text, this.model, offset),
+            end
+          });
+          i = end;
+        }
 
+        i++;
+      }
+    }
 
-const dropdown_u = converse.env.utils;
-class dropdown_BaseDropdown extends element_CustomElement {
-  firstUpdated() {
-    this.menu = this.querySelector('.dropdown-menu');
-    this.dropdown = this.firstElementChild;
-    this.button = this.dropdown.querySelector('button');
-    this.dropdown.addEventListener('click', ev => this.toggleMenu(ev));
-    this.dropdown.addEventListener('keyup', ev => this.handleKeyUp(ev));
-    document.addEventListener('click', ev => !this.contains(ev.composedPath()[0]) && this.hideMenu(ev));
+    references.forEach(ref => this.addTemplateResult(ref.begin, ref.end, ref.template));
   }
 
-  hideMenu() {
-    var _this$button, _this$button2;
-
-    dropdown_u.removeClass('show', this.menu);
-    (_this$button = this.button) === null || _this$button === void 0 ? void 0 : _this$button.setAttribute('aria-expanded', false);
-    (_this$button2 = this.button) === null || _this$button2 === void 0 ? void 0 : _this$button2.blur();
+  trimMeMessage() {
+    if (this.offset === 0) {
+      // Subtract `/me ` from 3rd person messages
+      if (this.isMeCommand()) {
+        this.payload[0] = this.payload[0].substring(4);
+      }
+    }
   }
+  /**
+   * Look for plaintext (i.e. non-templated) sections of this MessageText
+   * instance and add references via the passed in function.
+   * @param { Function } func
+   */
 
-  showMenu() {
-    dropdown_u.addClass('show', this.menu);
-    this.button.setAttribute('aria-expanded', true);
-  }
 
-  toggleMenu(ev) {
-    ev.preventDefault();
+  addAnnotations(func) {
+    const payload = this.marshall();
+    let idx = 0; // The text index of the element in the payload
 
-    if (dropdown_u.hasClass('show', this.menu)) {
-      this.hideMenu();
-    } else {
-      this.showMenu();
+    for (const text of payload) {
+      if (!text) {
+        continue;
+      } else if (text_isString(text)) {
+        func.call(this, text, idx);
+        idx += text.length;
+      } else {
+        idx = text.end;
+      }
     }
   }
+  /**
+   * Parse the text and add template references for rendering the "rich" parts.
+   *
+   * @param { MessageText } text
+   * @param { Boolean } show_images - Should URLs of images be rendered as `<img>` tags?
+   * @param { Function } onImgLoad
+   * @param { Function } onImgClick
+   **/
 
-  handleKeyUp(ev) {
-    if (ev.keyCode === converse.keycodes.ESCAPE) {
-      this.hideMenu();
-    } else if (ev.keyCode === converse.keycodes.DOWN_ARROW && this.navigator && !this.navigator.enabled) {
-      this.enableArrowNavigation(ev);
-    }
-  }
 
-}
-class dropdown_DropdownList extends dropdown_BaseDropdown {
-  static get properties() {
-    return {
-      'icon_classes': {
-        type: String
-      },
-      'items': {
-        type: Array
-      }
-    };
-  }
+  async addTemplates() {
+    /**
+     * Synchronous event which provides a hook for transforming a chat message's body text
+     * before the default transformations have been applied.
+     * @event _converse#beforeMessageBodyTransformed
+     * @param { MessageText } text - A {@link MessageText } instance. You
+     *  can call {@link MessageText#addTemplateResult } on it in order to
+     *  add TemplateResult objects meant to render rich parts of the message.
+     * @example _converse.api.listen.on('beforeMessageBodyTransformed', (view, text) => { ... });
+     */
+    await core_api.trigger('beforeMessageBodyTransformed', this, {
+      'Synchronous': true
+    });
+    this.addStyling();
+    this.addAnnotations(this.addMentions);
+    this.addAnnotations(this.addHyperlinks);
+    this.addAnnotations(this.addMapURLs);
+    await core_api.emojis.initialize();
+    this.addAnnotations(this.addEmojis);
+    /**
+     * Synchronous event which provides a hook for transforming a chat message's body text
+     * after the default transformations have been applied.
+     * @event _converse#afterMessageBodyTransformed
+     * @param { MessageText } text - A {@link MessageText } instance. You
+     *  can call {@link MessageText#addTemplateResult} on it in order to
+     *  add TemplateResult objects meant to render rich parts of the message.
+     * @example _converse.api.listen.on('afterMessageBodyTransformed', (view, text) => { ... });
+     */
 
-  render() {
-    const icon_classes = this.icon_classes || "fa fa-bars";
-    return lit_html_html(dropdown_templateObject(), icon_classes, this.items.map(b => until(b, '')));
+    await core_api.trigger('afterMessageBodyTransformed', this, {
+      'Synchronous': true
+    });
+    this.payload = this.marshall();
+    this.trimMeMessage();
+    this.payload = this.payload.map(item => text_isString(item) ? item : item.template);
   }
+  /**
+   * The "rich" markup parts of a chat message are represented by lit-html
+   * TemplateResult objects.
+   *
+   * This method can be used to add new template results to this message's
+   * text.
+   *
+   * @method MessageText.addTemplateResult
+   * @param { Number } begin - The starting index of the plain message text
+   * which is being replaced with markup.
+   * @param { Number } end - The ending index of the plain message text
+   * which is being replaced with markup.
+   * @param { Object } template - The lit-html TemplateResult instance
+   */
 
-  hideMenu() {
-    super.hideMenu();
-    this.navigator.disable();
-  }
 
-  firstUpdated() {
-    super.firstUpdated();
-    this.initArrowNavigation();
+  addTemplateResult(begin, end, template) {
+    this.references.push({
+      begin,
+      end,
+      template
+    });
   }
 
-  initArrowNavigation() {
-    if (!this.navigator) {
-      const options = {
-        'selector': '.dropdown-item',
-        'onSelected': el => el.focus()
-      };
-      this.navigator = new dom_navigator(this.menu, options);
-    }
-  }
+  isMeCommand() {
+    const text = this.toString();
 
-  enableArrowNavigation(ev) {
-    if (ev) {
-      ev.preventDefault();
-      ev.stopPropagation();
+    if (!text) {
+      return false;
     }
 
-    this.navigator.enable();
-    this.navigator.select(this.menu.firstElementChild);
+    return text.startsWith('/me ');
   }
 
-  handleKeyUp(ev) {
-    super.handleKeyUp(ev);
+  static replaceText(text) {
+    return convertASCII2Emoji(text.replace(/\n\n+/g, '\n\n'));
+  }
+  /**
+   * Take the annotations and return an array of text and TemplateResult
+   * instances to be rendered to the DOM.
+   * @method MessageText#marshall
+   */
 
-    if (ev.keyCode === converse.keycodes.DOWN_ARROW && !this.navigator.enabled) {
-      this.enableArrowNavigation(ev);
-    }
+
+  marshall() {
+    let list = [this.toString()];
+    this.references.sort((a, b) => b.begin - a.begin).forEach(ref => {
+      const text = list.shift();
+      list = [text.slice(0, ref.begin), ref, text.slice(ref.end), ...list];
+    });
+    return list.reduce((acc, i) => text_isString(i) ? [...acc, text_MessageText.replaceText(i)] : [...acc, i], []);
   }
 
 }
-converse_core_api.elements.define('converse-dropdown', dropdown_DropdownList);
-// CONCATENATED MODULE: ./src/components/message-actions.js
-function message_actions_templateObject3() {
-  const data = message_actions_taggedTemplateLiteral(["<converse-dropdown class=\"chat-msg__actions\" .items=", "></converse-dropdown>"]);
+// CONCATENATED MODULE: ./src/templates/directives/body.js
+function body_templateObject2() {
+  const data = body_taggedTemplateLiteral(["", ""]);
 
-  message_actions_templateObject3 = function _templateObject3() {
+  body_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function message_actions_templateObject2() {
-  const data = message_actions_taggedTemplateLiteral(["\n            <button class=\"chat-msg__action ", "\" @click=", ">\n                <converse-icon class=\"", "\"\n                    path-prefix=\"", "\"\n                    color=\"var(--text-color-lighten-15-percent)\"\n                    size=\"1em\"></converse-icon>\n                ", "\n            </button>\n        "]);
+function body_templateObject() {
+  const data = body_taggedTemplateLiteral(["", ""]);
 
-  message_actions_templateObject2 = function _templateObject2() {
+  body_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function message_actions_templateObject() {
-  const data = message_actions_taggedTemplateLiteral(["", ""]);
+function body_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
 
-  message_actions_templateObject = function _templateObject() {
-    return data;
-  };
 
-  return data;
-}
 
-function message_actions_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
+const body_u = converse.env.utils;
+
+class body_MessageBodyRenderer {
+  constructor(component) {
+    var _u$ancestor;
 
+    this.model = component.model;
+    this.component = component;
+    this.chatview = (_u$ancestor = body_u.ancestor(this.component, 'converse-chat-message')) === null || _u$ancestor === void 0 ? void 0 : _u$ancestor.chatview; // We jot down whether we were scrolled down before rendering, because when an
+    // image loads, it triggers 'scroll' and the chat will be marked as scrolled,
+    // which is technically true, but not what we want because the user
+    // didn't initiate the scrolling.
 
+    this.was_scrolled_up = this.chatview.model.get('scrolled');
+    this.text = this.component.model.getMessageText();
+  }
 
+  scrollDownOnImageLoad() {
+    if (!this.was_scrolled_up) {
+      this.chatview.scrollDown();
+    }
+  }
 
+  async transform() {
+    const show_images = core_api.settings.get('show_images_inline');
+    const offset = 0;
+    const text = new text_MessageText(this.text, this.model, offset, show_images, () => this.scrollDownOnImageLoad(), ev => this.component.showImageModal(ev));
+    await text.addTemplates();
+    return text.payload;
+  }
 
+  render() {
+    return lit_html_html(body_templateObject(), until(this.transform(), lit_html_html(body_templateObject2(), this.text)));
+  }
 
-class message_actions_MessageActions extends element_CustomElement {
+}
+
+const renderBodyText = directive_directive(component => part => {
+  var _model$collection;
+
+  const renderer = new body_MessageBodyRenderer(component);
+  part.setValue(renderer.render());
+  const model = component.model;
+  (_model$collection = model.collection) === null || _model$collection === void 0 ? void 0 : _model$collection.trigger('rendered', model);
+});
+// CONCATENATED MODULE: ./src/components/message-body.js
+
+
+
+
+
+class message_body_MessageBody extends element_CustomElement {
   static get properties() {
     return {
-      chatview: {
-        type: Object
-      },
       model: {
         type: Object
       },
-      editable: {
-        type: Boolean
-      },
-      correcting: {
+      is_me_message: {
         type: Boolean
       },
-      message_type: {
+      text: {
         type: String
-      },
-      is_retracted: {
-        type: Boolean
       }
     };
   }
 
-  render() {
-    return lit_html_html(message_actions_templateObject(), until(this.renderActions(), ''));
-  }
-
-  static getActionsDropdownItem(o) {
-    return lit_html_html(message_actions_templateObject2(), o.button_class, o.handler, o.icon_class, converse_core_api.settings.get("assets_path"), o.i18n_text);
-  }
-
-  onMessageEditButtonClicked(ev) {
-    ev.preventDefault();
-    this.chatview.onMessageEditButtonClicked(this.model);
-  }
-
-  onMessageRetractButtonClicked(ev) {
+  showImageModal(ev) {
+    // eslint-disable-line class-methods-use-this
     ev.preventDefault();
-    this.chatview.onMessageRetractButtonClicked(this.model);
+    core_api.modal.create(modals_image, {
+      'src': ev.target.src
+    }, ev).show(ev);
   }
 
-  async renderActions() {
-    const buttons = [];
-
-    if (this.editable) {
-      buttons.push({
-        'i18n_text': this.correcting ? i18n_('Cancel Editing') : i18n_('Edit'),
-        'handler': ev => this.onMessageEditButtonClicked(ev),
-        'button_class': 'chat-msg__action-edit',
-        'icon_class': 'fa fa-pencil-alt',
-        'name': 'edit'
-      });
-    }
-
-    const may_be_moderated = this.model.get('type') === 'groupchat' && (await this.model.mayBeModerated());
-    const retractable = !this.is_retracted && (this.model.mayBeRetracted() || may_be_moderated);
-
-    if (retractable) {
-      buttons.push({
-        'i18n_text': i18n_('Retract'),
-        'handler': ev => this.onMessageRetractButtonClicked(ev),
-        'button_class': 'chat-msg__action-retract',
-        'icon_class': 'fas fa-trash-alt',
-        'name': 'retract'
-      });
-    }
-
-    const items = buttons.map(b => message_actions_MessageActions.getActionsDropdownItem(b));
-
-    if (items.length) {
-      return lit_html_html(message_actions_templateObject3(), items);
-    } else {
-      return '';
-    }
+  render() {
+    return renderBodyText(this);
   }
 
 }
+core_api.elements.define('converse-chat-message-body', message_body_MessageBody);
+// CONCATENATED MODULE: ./src/modals/templates/message-versions.js
+function message_versions_templateObject2() {
+  const data = message_versions_taggedTemplateLiteral(["<p class=\"older-msg\"><time>", "</time>: ", "</p>"]);
 
-converse_core_api.elements.define('converse-message-actions', message_actions_MessageActions);
-// CONCATENATED MODULE: ./src/templates/message_versions_modal.js
-function message_versions_modal_templateObject2() {
-  const data = message_versions_modal_taggedTemplateLiteral(["<p class=\"older-msg\"><time>", "</time>: ", "</p>"]);
-
-  message_versions_modal_templateObject2 = function _templateObject2() {
+  message_versions_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function message_versions_modal_templateObject() {
-  const data = message_versions_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"message-versions-modal-label\">", "</h4>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                <h4>Older versions</h4>\n                ", "\n                <hr/>\n                <h4>Current version</h4>\n                <p>", "</p>\n            </div>\n            <div class=\"modal-footer\">", "</div>\n        </div>\n    </div>\n"]);
+function message_versions_templateObject() {
+  const data = message_versions_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"message-versions-modal-label\">", "</h4>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                <h4>Older versions</h4>\n                ", "\n                <hr/>\n                <h4>Current version</h4>\n                <p>", "</p>\n            </div>\n            <div class=\"modal-footer\">", "</div>\n        </div>\n    </div>\n"]);
 
-  message_versions_modal_templateObject = function _templateObject() {
+  message_versions_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function message_versions_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function message_versions_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
 
-/* harmony default export */ var message_versions_modal = (o => lit_html_html(message_versions_modal_templateObject(), i18n_('Message versions'), modal_header_close_button, Object.keys(o.older_versions).map(k => lit_html_html(message_versions_modal_templateObject2(), dayjs_min_default()(k).format('MMM D, YYYY, HH:mm:ss'), o.older_versions[k])), o.message, modal_close_button));
+/* harmony default export */ var message_versions = (o => lit_html_html(message_versions_templateObject(), i18n_('Message versions'), modal_header_close_button, Object.keys(o.older_versions).map(k => lit_html_html(message_versions_templateObject2(), dayjs_min_default()(k).format('MMM D, YYYY, HH:mm:ss'), o.older_versions[k])), o.message, modal_close_button));
 // CONCATENATED MODULE: ./src/modals/message-versions.js
 
 
-/* harmony default export */ var message_versions = (BootstrapModal.extend({
-  // FIXME: this isn't globally unique
+/* harmony default export */ var modals_message_versions = (modals_base.extend({
   id: "message-versions-modal",
 
   toHTML() {
-    return message_versions_modal(this.model.toJSON());
+    return message_versions(this.model.toJSON());
   }
 
 }));
 // EXTERNAL MODULE: ./node_modules/filesize/lib/filesize.min.js
-var lib_filesize_min = __webpack_require__(135);
+var lib_filesize_min = __webpack_require__(176);
 var lib_filesize_min_default = /*#__PURE__*/__webpack_require__.n(lib_filesize_min);
 
 // CONCATENATED MODULE: ./src/templates/avatar.js
 function avatar_templateObject() {
   const data = avatar_taggedTemplateLiteral(["\n    <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"avatar ", "\" width=\"", "\" height=\"", "\">\n        <image width=\"", "\" height=\"", "\" preserveAspectRatio=\"xMidYMid meet\" href=\"", "\"/>\n    </svg>"]);
 
-  avatar_templateObject = function _templateObject() {
+  avatar_templateObject = function () {
     return data;
   };
 
@@ -88118,7 +92340,7 @@ const getImgHref = (image, image_type) => {
   return image.startsWith('data:') ? image : "data:".concat(image_type, ";base64,").concat(image);
 };
 
-/* harmony default export */ var avatar = (o => lit_html_html(avatar_templateObject(), o.classes, o.width, o.height, o.width, o.height, getImgHref(o.image, o.image_type)));
+/* harmony default export */ var templates_avatar = (o => lit_html_html(avatar_templateObject(), o.classes, o.width, o.height, o.width, o.height, getImgHref(o.image, o.image_type)));
 // CONCATENATED MODULE: ./src/templates/directives/avatar.js
 
 
@@ -88130,13 +92352,13 @@ const renderAvatar = directive_directive(o => part => {
     'image_type': o.image_type,
     'width': o.height || 36
   };
-  part.setValue(avatar(data));
+  part.setValue(templates_avatar(data));
 });
 // CONCATENATED MODULE: ./src/templates/chat_message.js
-function _templateObject5() {
+function chat_message_templateObject5() {
   const data = chat_message_taggedTemplateLiteral(["\n                            <time timestamp=\"", "\" class=\"chat-msg__time\">", "</time>&nbsp;\n                            <span class=\"chat-msg__author\">", "", "</span>&nbsp;"]);
 
-  _templateObject5 = function _templateObject5() {
+  chat_message_templateObject5 = function () {
     return data;
   };
 
@@ -88146,7 +92368,7 @@ function _templateObject5() {
 function chat_message_templateObject4() {
   const data = chat_message_taggedTemplateLiteral(["<span class=\"fa fa-lock\"></span>"]);
 
-  chat_message_templateObject4 = function _templateObject4() {
+  chat_message_templateObject4 = function () {
     return data;
   };
 
@@ -88154,9 +92376,9 @@ function chat_message_templateObject4() {
 }
 
 function chat_message_templateObject3() {
-  const data = chat_message_taggedTemplateLiteral(["\n                    <span class=\"chat-msg__heading\">\n                        <span class=\"chat-msg__author\">", "</span>\n                        ", "\n                        ", "\n                    </span>"]);
+  const data = chat_message_taggedTemplateLiteral(["\n                    <span class=\"chat-msg__heading\">\n                        <span class=\"chat-msg__author\"><a class=\"show-msg-author-modal\" @click=", ">", "</a></span>\n                        ", "\n                        ", "\n                    </span>"]);
 
-  chat_message_templateObject3 = function _templateObject3() {
+  chat_message_templateObject3 = function () {
     return data;
   };
 
@@ -88166,7 +92388,7 @@ function chat_message_templateObject3() {
 function chat_message_templateObject2() {
   const data = chat_message_taggedTemplateLiteral(["<div class=\"message separator\"><hr class=\"separator\"><span class=\"separator-text\">", "</span></div>"]);
 
-  chat_message_templateObject2 = function _templateObject2() {
+  chat_message_templateObject2 = function () {
     return data;
   };
 
@@ -88174,9 +92396,9 @@ function chat_message_templateObject2() {
 }
 
 function chat_message_templateObject() {
-  const data = chat_message_taggedTemplateLiteral(["\n        ", "\n        <div class=\"message chat-msg ", "\"\n                data-isodate=\"", "\"\n                data-msgid=\"", "\"\n                data-from=\"", "\"\n                data-encrypted=\"", "\">\n\n            ", "\n            <div class=\"chat-msg__content chat-msg__content--", " ", "\">\n\n                ", "\n                <div class=\"chat-msg__body chat-msg__body--", " ", " ", "\">\n                    <div class=\"chat-msg__message\">\n                        ", "\n                        ", "\n                    </div>\n                    <converse-message-actions\n                        .chatview=", "\n                        .model=", "\n                        ?correcting=\"", "\"\n                        ?editable=\"", "\"\n                        ?is_retracted=\"", "\"\n                        message_type=\"", "\"></converse-message-actions>\n                </div>\n            </div>\n        </div>"]);
+  const data = chat_message_taggedTemplateLiteral(["\n        ", "\n        <div class=\"message chat-msg ", "\"\n                data-isodate=\"", "\"\n                data-msgid=\"", "\"\n                data-from=\"", "\"\n                data-encrypted=\"", "\">\n\n            <!-- Anchor to allow us to scroll the message into view -->\n            <a id=\"", "\"></a>\n\n            <a class=\"show-msg-author-modal\" @click=", ">", "</a>\n            <div class=\"chat-msg__content chat-msg__content--", " ", "\">\n\n                ", "\n                <div class=\"chat-msg__body chat-msg__body--", " ", " ", "\">\n                    <div class=\"chat-msg__message\">\n                        ", "\n                        ", "\n                    </div>\n                    <converse-message-actions\n                        .chatview=", "\n                        .model=", "\n                        ?correcting=\"", "\"\n                        ?editable=\"", "\"\n                        ?is_retracted=\"", "\"\n                        message_type=\"", "\"></converse-message-actions>\n                </div>\n            </div>\n        </div>"]);
 
-  chat_message_templateObject = function _templateObject() {
+  chat_message_templateObject = function () {
     return data;
   };
 
@@ -88188,16 +92410,16 @@ function chat_message_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st
 
 
 
-/* harmony default export */ var chat_message = (o => {
+/* harmony default export */ var templates_chat_message = (o => {
   const i18n_new_messages = i18n_('New messages');
 
-  return lit_html_html(chat_message_templateObject(), o.is_first_unread ? lit_html_html(chat_message_templateObject2(), i18n_new_messages) : '', o.getExtraMessageClasses(), o.time, o.msgid, o.from, o.is_encrypted, o.shouldShowAvatar() ? renderAvatar(o.getAvatarData()) : '', o.sender, o.is_me_message ? 'chat-msg__content--action' : '', !o.is_me_message ? lit_html_html(chat_message_templateObject3(), o.username, o.renderAvatarByline(), o.is_encrypted ? lit_html_html(chat_message_templateObject4()) : '') : '', o.message_type, o.received ? 'chat-msg__body--received' : '', o.is_delayed ? 'chat-msg__body--delayed' : '', o.is_me_message ? lit_html_html(_templateObject5(), o.time, o.pretty_time, o.is_me_message ? '**' : '', o.username) : '', o.is_retracted ? o.renderRetraction() : o.renderMessageText(), o.chatview, o.model, o.correcting, o.editable, o.is_retracted, o.message_type);
+  return lit_html_html(chat_message_templateObject(), o.is_first_unread ? lit_html_html(chat_message_templateObject2(), i18n_new_messages) : '', o.getExtraMessageClasses(), o.time, o.msgid, o.from, o.is_encrypted, o.msgid, o.showUserModal, o.shouldShowAvatar() ? renderAvatar(o.getAvatarData()) : '', o.sender, o.is_me_message ? 'chat-msg__content--action' : '', !o.is_me_message ? lit_html_html(chat_message_templateObject3(), o.showUserModal, o.username, o.renderAvatarByline(), o.is_encrypted ? lit_html_html(chat_message_templateObject4()) : '') : '', o.message_type, o.received ? 'chat-msg__body--received' : '', o.is_delayed ? 'chat-msg__body--delayed' : '', o.is_me_message ? lit_html_html(chat_message_templateObject5(), o.edited || o.time, o.pretty_time, o.is_me_message ? '**' : '', o.username) : '', o.is_retracted ? o.renderRetraction() : o.renderMessageText(), o.chatview, o.model, o.correcting, o.editable, o.is_retracted, o.message_type);
 });
 // CONCATENATED MODULE: ./src/templates/spinner.js
 function spinner_templateObject() {
   const data = spinner_taggedTemplateLiteral(["<span class=\"spinner fa fa-spinner centered ", "\"/>"]);
 
-  spinner_templateObject = function _templateObject() {
+  spinner_templateObject = function () {
     return data;
   };
 
@@ -88212,7 +92434,7 @@ function spinner_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings
 function _templateObject15() {
   const data = message_taggedTemplateLiteral(["<span class=\"badge badge-secondary\">", "</span>"]);
 
-  _templateObject15 = function _templateObject15() {
+  _templateObject15 = function () {
     return data;
   };
 
@@ -88222,7 +92444,7 @@ function _templateObject15() {
 function _templateObject14() {
   const data = message_taggedTemplateLiteral(["\n            ", "\n            <time timestamp=\"", "\" class=\"chat-msg__time\">", "</time>\n        "]);
 
-  _templateObject14 = function _templateObject14() {
+  _templateObject14 = function () {
     return data;
   };
 
@@ -88232,7 +92454,7 @@ function _templateObject14() {
 function _templateObject13() {
   const data = message_taggedTemplateLiteral(["<div class=\"chat-msg__media\">", "</div>"]);
 
-  _templateObject13 = function _templateObject13() {
+  _templateObject13 = function () {
     return data;
   };
 
@@ -88242,7 +92464,7 @@ function _templateObject13() {
 function _templateObject12() {
   const data = message_taggedTemplateLiteral(["<i title=\"", "\" class=\"fa fa-edit chat-msg__edit-modal\" @click=", "></i>"]);
 
-  _templateObject12 = function _templateObject12() {
+  _templateObject12 = function () {
     return data;
   };
 
@@ -88252,7 +92474,7 @@ function _templateObject12() {
 function _templateObject11() {
   const data = message_taggedTemplateLiteral(["<span class=\"fa fa-check chat-msg__receipt\"></span>"]);
 
-  _templateObject11 = function _templateObject11() {
+  _templateObject11 = function () {
     return data;
   };
 
@@ -88262,7 +92484,7 @@ function _templateObject11() {
 function _templateObject10() {
   const data = message_taggedTemplateLiteral(["<div class=\"chat-msg__subject\">", "</div>"]);
 
-  _templateObject10 = function _templateObject10() {
+  _templateObject10 = function () {
     return data;
   };
 
@@ -88272,7 +92494,7 @@ function _templateObject10() {
 function _templateObject9() {
   const data = message_taggedTemplateLiteral(["\n            ", "\n            ", "\n            <span>\n                <converse-chat-message-body\n                    class=\"chat-msg__text ", " ", "\"\n                    .model=\"", "\"\n                    ?is_me_message=\"", "\"\n                    ?is_only_emojis=\"", "\"\n                    ?is_spoiler=\"", "\"\n                    ?is_spoiler_visible=\"", "\"\n                    text=\"", "\"></converse-chat-message-body>\n                ", "\n                ", "\n            </span>\n            ", "\n            <div class=\"chat-msg__error\">", "</div>\n        "]);
 
-  _templateObject9 = function _templateObject9() {
+  _templateObject9 = function () {
     return data;
   };
 
@@ -88282,7 +92504,7 @@ function _templateObject9() {
 function _templateObject8() {
   const data = message_taggedTemplateLiteral(["\n            <div class=\"chat-msg__spoiler-hint\">\n                <span class=\"spoiler-hint\">", "</span>\n                <a class=\"badge badge-info spoiler-toggle\" href=\"#\" @click=", ">\n                    <i class=\"fa ", "\"></i>\n                    ", "\n                </a>\n            </div>\n        "]);
 
-  _templateObject8 = function _templateObject8() {
+  _templateObject8 = function () {
     return data;
   };
 
@@ -88292,17 +92514,17 @@ function _templateObject8() {
 function _templateObject7() {
   const data = message_taggedTemplateLiteral(["<q class=\"chat-msg--retracted__reason\">", "</q>"]);
 
-  _templateObject7 = function _templateObject7() {
+  _templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function _templateObject6() {
+function message_templateObject6() {
   const data = message_taggedTemplateLiteral(["\n            <div>", "</div>\n            ", "\n        "]);
 
-  _templateObject6 = function _templateObject6() {
+  message_templateObject6 = function () {
     return data;
   };
 
@@ -88312,7 +92534,7 @@ function _templateObject6() {
 function message_templateObject5() {
   const data = message_taggedTemplateLiteral(["\n            <div class=\"message chat-msg\">\n                ", "\n                <div class=\"chat-msg__content\">\n                    <span class=\"chat-msg__text\">", " <strong>", "</strong>, ", "</span>\n                    <progress value=\"", "\"/>\n                </div>\n            </div>"]);
 
-  message_templateObject5 = function _templateObject5() {
+  message_templateObject5 = function () {
     return data;
   };
 
@@ -88322,7 +92544,7 @@ function message_templateObject5() {
 function message_templateObject4() {
   const data = message_taggedTemplateLiteral(["<a class=\"retry\" @click=", ">", "</a>"]);
 
-  message_templateObject4 = function _templateObject4() {
+  message_templateObject4 = function () {
     return data;
   };
 
@@ -88332,7 +92554,7 @@ function message_templateObject4() {
 function message_templateObject3() {
   const data = message_taggedTemplateLiteral(["<q class=\"reason\">", "</q>"]);
 
-  message_templateObject3 = function _templateObject3() {
+  message_templateObject3 = function () {
     return data;
   };
 
@@ -88342,7 +92564,7 @@ function message_templateObject3() {
 function message_templateObject2() {
   const data = message_taggedTemplateLiteral(["<q class=\"reason\">", "</q>"]);
 
-  message_templateObject2 = function _templateObject2() {
+  message_templateObject2 = function () {
     return data;
   };
 
@@ -88352,7 +92574,7 @@ function message_templateObject2() {
 function message_templateObject() {
   const data = message_taggedTemplateLiteral(["\n            <div class=\"message chat-info chat-", "\"\n                data-isodate=\"", "\"\n                data-type=\"", "\"\n                data-value=\"", "\">\n\n                <div class=\"chat-info__message\">\n                    ", "\n                </div>\n                ", "\n                ", "\n                ", "\n            </div>\n        "]);
 
-  message_templateObject = function _templateObject() {
+  message_templateObject = function () {
     return data;
   };
 
@@ -88377,9 +92599,9 @@ function message_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings
 
 
 const {
-  Strophe: message_Strophe
+  Strophe: components_message_Strophe
 } = converse.env;
-const message_u = converse.env.utils;
+const components_message_u = converse.env.utils;
 class message_Message extends element_CustomElement {
   static get properties() {
     return {
@@ -88495,8 +92717,8 @@ class message_Message extends element_CustomElement {
   }
 
   render() {
-    const format = converse_core_api.settings.get('time_format');
-    this.pretty_time = dayjs_min_default()(this.time).format(format);
+    const format = core_api.settings.get('time_format');
+    this.pretty_time = dayjs_min_default()(this.edited || this.time).format(format);
 
     if (this.show_spinner) {
       return spinner();
@@ -88550,18 +92772,18 @@ class message_Message extends element_CustomElement {
   }
 
   renderChatMessage() {
-    return chat_message(this);
+    return templates_chat_message(this);
   }
 
   shouldShowAvatar() {
-    return converse_core_api.settings.get('show_message_avatar') && !this.is_me_message && this.type !== 'headline';
+    return core_api.settings.get('show_message_avatar') && !this.is_me_message && this.type !== 'headline';
   }
 
   getAvatarData() {
     var _this$model$vcard, _this$model$vcard2;
 
-    const image_type = ((_this$model$vcard = this.model.vcard) === null || _this$model$vcard === void 0 ? void 0 : _this$model$vcard.get('image_type')) || converse_core_converse.DEFAULT_IMAGE_TYPE;
-    const image_data = ((_this$model$vcard2 = this.model.vcard) === null || _this$model$vcard2 === void 0 ? void 0 : _this$model$vcard2.get('image')) || converse_core_converse.DEFAULT_IMAGE;
+    const image_type = ((_this$model$vcard = this.model.vcard) === null || _this$model$vcard === void 0 ? void 0 : _this$model$vcard.get('image_type')) || core_converse.DEFAULT_IMAGE_TYPE;
+    const image_data = ((_this$model$vcard2 = this.model.vcard) === null || _this$model$vcard2 === void 0 ? void 0 : _this$model$vcard2.get('image')) || core_converse.DEFAULT_IMAGE;
     const image = "data:" + image_type + ";base64," + image_data;
     return {
       'classes': 'chat-msg__avatar',
@@ -88573,7 +92795,7 @@ class message_Message extends element_CustomElement {
 
   async onRetryClicked() {
     this.show_spinner = true;
-    await converse_core_api.trigger(this.retry_event_id, {
+    await core_api.trigger(this.retry_event_id, {
       'synchronous': true
     });
     this.model.destroy();
@@ -88618,7 +92840,7 @@ class message_Message extends element_CustomElement {
         this.model.mod = chatbox.occupants.findOccupant({
           'jid': retracted_by_mod
         }) || chatbox.occupants.findOccupant({
-          'nick': message_Strophe.getResourceFromJid(retracted_by_mod)
+          'nick': components_message_Strophe.getResourceFromJid(retracted_by_mod)
         });
       }
 
@@ -88631,7 +92853,7 @@ class message_Message extends element_CustomElement {
 
   renderRetraction() {
     const retraction_text = this.is_retracted ? this.getRetractionText() : null;
-    return lit_html_html(_templateObject6(), retraction_text, this.moderation_reason ? lit_html_html(_templateObject7(), this.moderation_reason) : '');
+    return lit_html_html(message_templateObject6(), retraction_text, this.moderation_reason ? lit_html_html(_templateObject7(), this.moderation_reason) : '');
   }
 
   renderMessageText() {
@@ -88645,18 +92867,28 @@ class message_Message extends element_CustomElement {
 
     const tpl_spoiler_hint = lit_html_html(_templateObject8(), this.spoiler_hint, this.toggleSpoilerMessage, this.is_spoiler_visible ? 'fa-eye-slash' : 'fa-eye', this.is_spoiler_visible ? i18n_show_less : i18n_show);
     const spoiler_classes = this.is_spoiler ? "spoiler ".concat(this.is_spoiler_visible ? '' : 'hidden') : '';
-    return lit_html_html(_templateObject9(), this.is_spoiler ? tpl_spoiler_hint : '', this.subject ? lit_html_html(_templateObject10(), this.subject) : '', this.is_only_emojis ? 'chat-msg__text--larger' : '', spoiler_classes, this.model, this.is_me_message, this.is_only_emojis, this.is_spoiler, this.is_spoiler_visible, this.model.getMessageText(), this.received && !this.is_me_message && !is_groupchat_message ? lit_html_html(_templateObject11()) : '', this.edited ? lit_html_html(_templateObject12(), i18n_edited, this.showMessageVersionsModal) : '', this.oob_url ? lit_html_html(_templateObject13(), message_u.getOOBURLMarkup(converse_core_converse, this.oob_url)) : '', this.error_text || this.error);
+    return lit_html_html(_templateObject9(), this.is_spoiler ? tpl_spoiler_hint : '', this.subject ? lit_html_html(_templateObject10(), this.subject) : '', this.is_only_emojis ? 'chat-msg__text--larger' : '', spoiler_classes, this.model, this.is_me_message, this.is_only_emojis, this.is_spoiler, this.is_spoiler_visible, this.model.getMessageText(), this.received && !this.is_me_message && !is_groupchat_message ? lit_html_html(_templateObject11()) : '', this.edited ? lit_html_html(_templateObject12(), i18n_edited, this.showMessageVersionsModal) : '', this.oob_url ? lit_html_html(_templateObject13(), components_message_u.getOOBURLMarkup(core_converse, this.oob_url)) : '', this.error_text || this.error);
   }
 
   renderAvatarByline() {
-    return lit_html_html(_templateObject14(), this.hats.map(h => lit_html_html(_templateObject15(), h.title)), this.time, this.pretty_time);
+    return lit_html_html(_templateObject14(), this.hats.map(h => lit_html_html(_templateObject15(), h.title)), this.edited || this.time, this.pretty_time);
+  }
+
+  showUserModal(ev) {
+    if (this.model.get('sender') === 'me') {
+      core_converse.xmppstatusview.showProfileModal(ev);
+    } else if (this.message_type === 'groupchat') {
+      this.chatview.showOccupantDetailsModal(ev, this.model);
+    } else {
+      this.chatview.showUserDetailsModal(ev, this.model);
+    }
   }
 
   showMessageVersionsModal(ev) {
     ev.preventDefault();
 
     if (this.message_versions_modal === undefined) {
-      this.message_versions_modal = new message_versions({
+      this.message_versions_modal = new modals_message_versions({
         'model': this.model
       });
     }
@@ -88672,12 +92904,12 @@ class message_Message extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-chat-message', message_Message);
+core_api.elements.define('converse-chat-message', message_Message);
 // CONCATENATED MODULE: ./src/templates/new_day.js
 function new_day_templateObject() {
   const data = new_day_taggedTemplateLiteral(["\n    <div class=\"message date-separator\" data-isodate=\"", "\">\n        <hr class=\"separator\"/>\n        <time class=\"separator-text\" datetime=\"", "\"><span>", "</span></time>\n    </div>\n"]);
 
-  new_day_templateObject = function _templateObject() {
+  new_day_templateObject = function () {
     return data;
   };
 
@@ -89108,7 +93340,7 @@ const repeat = directive_directive((items, keyFnOrTemplate, template) => {
 function message_history_templateObject3() {
   const data = message_history_taggedTemplateLiteral(["<div class=\"empty-history-feedback form-help\"><span>", "</span></div>"]);
 
-  message_history_templateObject3 = function _templateObject3() {
+  message_history_templateObject3 = function () {
     return data;
   };
 
@@ -89118,7 +93350,7 @@ function message_history_templateObject3() {
 function message_history_templateObject2() {
   const data = message_history_taggedTemplateLiteral(["", ""]);
 
-  message_history_templateObject2 = function _templateObject2() {
+  message_history_templateObject2 = function () {
     return data;
   };
 
@@ -89128,7 +93360,7 @@ function message_history_templateObject2() {
 function message_history_templateObject() {
   const data = message_history_taggedTemplateLiteral(["\n    <converse-chat-message\n        .chatview=", "\n        .hats=", "\n        .model=", "\n        ?correcting=", "\n        ?editable=", "\n        ?has_mentions=", "\n        ?is_delayed=", "\n        ?is_encrypted=", "\n        ?is_first_unread=", "\n        ?is_me_message=", "\n        ?is_only_emojis=", "\n        ?is_retracted=", "\n        ?is_spoiler=", "\n        ?is_spoiler_visible=", "\n        ?retractable=", "\n        edited=", "\n        error=", "\n        error_text=", "\n        filename=", "\n        filesize=", "\n        from=", "\n        message_type=", "\n        moderated_by=", "\n        moderation_reason=", "\n        msgid=", "\n        occupant_affiliation=", "\n        occupant_role=", "\n        oob_url=", "\n        pretty_type=", "\n        progress=", "\n        reason=", "\n        received=", "\n        retry_event_id=", "\n        sender=", "\n        spoiler_hint=", "\n        subject=", "\n        time=", "\n        username=", "></converse-chat-message>\n"]);
 
-  message_history_templateObject = function _templateObject() {
+  message_history_templateObject = function () {
     return data;
   };
 
@@ -89165,13 +93397,16 @@ function getDayIndicator(model) {
       'datestring': day_date.format("dddd MMM Do YYYY")
     });
   }
-}
+} // This is set to _converse so that it can be overriden. An attempt was made to use
+// a hook instead, but hook returns a promise and it forces the asynchronicity up
+// to the render method.
+
 
-function getHats(model) {
+core_converse.getHats = function (model) {
   if (model.get('type') === 'groupchat') {
     var _model$occupant;
 
-    const allowed_hats = converse_core_api.settings.get('muc_hats').filter(hat => hat).map(hat => hat.toLowerCase());
+    const allowed_hats = core_api.settings.get('muc_hats').filter(hat => hat).map(hat => hat.toLowerCase());
     let vcard_roles = [];
 
     if (allowed_hats.includes('vcard_roles')) {
@@ -89183,38 +93418,21 @@ function getHats(model) {
 
     const muc_role = model.occupant ? [model.occupant.get('role')] : [];
     const muc_affiliation = model.occupant ? [model.occupant.get('affiliation')] : [];
-    let affiliation_role_hats = [...muc_role, ...muc_affiliation].filter(hat => hat).filter(hat => allowed_hats.includes(hat.toLowerCase())).map(hat => ({
+    const affiliation_role_hats = [...muc_role, ...muc_affiliation].filter(hat => hat).filter(hat => allowed_hats.includes(hat.toLowerCase())).map(hat => ({
       title: hat
     }));
-    const hat_conversions = converse_core_api.settings.get('role_affiliation_hat_conversions') || '';
-
-    if (hat_conversions) {
-      const role_affiliations = Object.keys(hat_conversions);
-      affiliation_role_hats = affiliation_role_hats.map(hat => {
-        const role_affiliations = Object.keys(hat_conversions);
-
-        if (role_affiliations.includes(hat.title)) {
-          return {
-            title: hat_conversions[hat.title]
-          };
-        } else {
-          return hat;
-        }
-      });
-    }
-
     const hats = allowed_hats.includes('xep317') ? ((_model$occupant = model.occupant) === null || _model$occupant === void 0 ? void 0 : _model$occupant.get('hats')) || [] : [];
     return [...hats, ...vcard_roles, ...affiliation_role_hats];
   }
 
   return [];
-}
+};
 
 function getDerivedMessageProps(chatbox, model) {
   const is_groupchat = model.get('type') === 'groupchat';
   return {
     'has_mentions': is_groupchat && model.get('sender') === 'them' && chatbox.isUserMentioned(model),
-    'hats': getHats(model),
+    'hats': core_converse.getHats(model),
     'is_first_unread': chatbox.get('first_unread_id') === model.get('id'),
     'is_me_message': model.isMeCommand(),
     'is_retracted': model.get('retracted') || model.get('moderated') === 'retracted',
@@ -89239,7 +93457,6 @@ class message_history_MessageHistory extends element_CustomElement {
   }
 
   renderMessage(model) {
-    // XXX: leaky abstraction "is_only_key" from converse-omemo
     if (model.get('dangling_retraction') || model.get('is_only_key')) {
       return '';
     }
@@ -89254,9 +93471,9 @@ class message_history_MessageHistory extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-message-history', message_history_MessageHistory);
+core_api.elements.define('converse-message-history', message_history_MessageHistory);
 // EXTERNAL MODULE: ./node_modules/xss/dist/xss.js
-var xss = __webpack_require__(16);
+var xss = __webpack_require__(18);
 var xss_default = /*#__PURE__*/__webpack_require__.n(xss);
 
 // CONCATENATED MODULE: ./node_modules/lit-html/directives/unsafe-html.js
@@ -89308,7 +93525,7 @@ const unsafeHTML = directive_directive((value) => (part) => {
 function chat_content_templateObject() {
   const data = chat_content_taggedTemplateLiteral(["\n            <converse-message-history\n                .chatview=", "\n                .messages=", ">\n            </converse-message-history>\n            <div class=\"chat-content__notifications\">", "</div>\n        "]);
 
-  chat_content_templateObject = function _templateObject() {
+  chat_content_templateObject = function () {
     return data;
   };
 
@@ -89346,12 +93563,12 @@ class chat_content_ChatContent extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-chat-content', chat_content_ChatContent);
+core_api.elements.define('converse-chat-content', chat_content_ChatContent);
 // CONCATENATED MODULE: ./src/components/icons.js
 function icons_templateObject2() {
   const data = icons_taggedTemplateLiteral(["<svg .style=\"", "\"> <use href=\"", "\"> </use> </svg>"]);
 
-  icons_templateObject2 = function _templateObject2() {
+  icons_templateObject2 = function () {
     return data;
   };
 
@@ -89361,7 +93578,7 @@ function icons_templateObject2() {
 function icons_templateObject() {
   const data = icons_taggedTemplateLiteral(["\n            :host {\n                display: inline-block;\n                padding: 0;\n                margin: 0;\n            }\n        "]);
 
-  icons_templateObject = function _templateObject() {
+  icons_templateObject = function () {
     return data;
   };
 
@@ -89424,7 +93641,7 @@ customElements.define("converse-icon", icons_ConverseIcon);
 function help_messages_templateObject2() {
   const data = help_messages_taggedTemplateLiteral(["<div class=\"message chat-", "\" data-isodate=\"", "\">", "</div>"]);
 
-  help_messages_templateObject2 = function _templateObject2() {
+  help_messages_templateObject2 = function () {
     return data;
   };
 
@@ -89434,7 +93651,7 @@ function help_messages_templateObject2() {
 function help_messages_templateObject() {
   const data = help_messages_taggedTemplateLiteral(["<converse-icon class=\"fas fa-times close-chat-help\"\n                    @click=", "\n                    path-prefix=\"", "\"\n                    size=\"1em\"></converse-icon>"]);
 
-  help_messages_templateObject = function _templateObject() {
+  help_messages_templateObject = function () {
     return data;
   };
 
@@ -89469,7 +93686,7 @@ class help_messages_ChatHelp extends element_CustomElement {
 
   render() {
     const isodate = new Date().toISOString();
-    return [lit_html_html(help_messages_templateObject(), this.close, converse_core_api.settings.get("assets_path")), ...this.messages.map(m => this.renderHelpMessage({
+    return [lit_html_html(help_messages_templateObject(), this.close, core_api.settings.get("assets_path")), ...this.messages.map(m => this.renderHelpMessage({
       isodate,
       'markup': xss_default.a.filterXSS(m, {
         'whiteList': {
@@ -89490,12 +93707,12 @@ class help_messages_ChatHelp extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-chat-help', help_messages_ChatHelp);
+core_api.elements.define('converse-chat-help', help_messages_ChatHelp);
 // CONCATENATED MODULE: ./src/templates/emoji_picker.js
 function emoji_picker_templateObject9() {
   const data = emoji_picker_taggedTemplateLiteral(["<converse-emoji-picker-content\n                .chatview=", "\n                .model=", "\n                .search_results=\"", "\"\n                current_skintone=\"", "\"\n                query=\"", "\"></converse-emoji-picker-content>"]);
 
-  emoji_picker_templateObject9 = function _templateObject9() {
+  emoji_picker_templateObject9 = function () {
     return data;
   };
 
@@ -89505,7 +93722,7 @@ function emoji_picker_templateObject9() {
 function emoji_picker_templateObject8() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <div class=\"emoji-picker__header\">\n            <input class=\"form-control emoji-search\" name=\"emoji-search\" placeholder=\"", "\"\n                .value=", "\n                @keydown=", "\n                @blur=", "\n                @focus=", ">\n            ", "\n        </div>\n        ", "\n\n        <div class=\"emoji-skintone-picker\">\n            <label>Skin tone</label>\n            <ul>", "</ul>\n        </div>"]);
 
-  emoji_picker_templateObject8 = function _templateObject8() {
+  emoji_picker_templateObject8 = function () {
     return data;
   };
 
@@ -89515,7 +93732,7 @@ function emoji_picker_templateObject8() {
 function emoji_picker_templateObject7() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <li data-skintone=\"", "\" class=\"emoji-skintone ", "\">\n            <a class=\"pick-skintone\" href=\"#\" data-skintone=\"", "\" @click=", ">", "</a>\n        </li>"]);
 
-  emoji_picker_templateObject7 = function _templateObject7() {
+  emoji_picker_templateObject7 = function () {
     return data;
   };
 
@@ -89525,7 +93742,7 @@ function emoji_picker_templateObject7() {
 function emoji_picker_templateObject6() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <span ?hidden=", " class=\"emoji-lists__container emoji-lists__container--browse\">\n            ", "\n        </span>"]);
 
-  emoji_picker_templateObject6 = function _templateObject6() {
+  emoji_picker_templateObject6 = function () {
     return data;
   };
 
@@ -89535,7 +93752,7 @@ function emoji_picker_templateObject6() {
 function emoji_picker_templateObject5() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <a id=\"emoji-picker-", "\" class=\"emoji-category__heading\" data-category=\"", "\">", "</a>\n        <ul class=\"emoji-picker\" data-category=\"", "\">\n            ", "\n        </ul>"]);
 
-  emoji_picker_templateObject5 = function _templateObject5() {
+  emoji_picker_templateObject5 = function () {
     return data;
   };
 
@@ -89545,7 +93762,7 @@ function emoji_picker_templateObject5() {
 function emoji_picker_templateObject4() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <span ?hidden=", " class=\"emoji-lists__container emojis-lists__container--search\">\n        <a id=\"emoji-picker-search-results\" class=\"emoji-category__heading\">", "</a>\n        <ul class=\"emoji-picker\">\n            ", "\n        </ul>\n        </span>\n    "]);
 
-  emoji_picker_templateObject4 = function _templateObject4() {
+  emoji_picker_templateObject4 = function () {
     return data;
   };
 
@@ -89555,7 +93772,7 @@ function emoji_picker_templateObject4() {
 function emoji_picker_templateObject3() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <li class=\"emoji insert-emoji ", "\" data-emoji=\"", "\" title=\"", "\">\n            <a href=\"#\" @click=", " data-emoji=\"", "\">", "</a>\n        </li>\n    "]);
 
-  emoji_picker_templateObject3 = function _templateObject3() {
+  emoji_picker_templateObject3 = function () {
     return data;
   };
 
@@ -89565,7 +93782,7 @@ function emoji_picker_templateObject3() {
 function emoji_picker_templateObject2() {
   const data = emoji_picker_taggedTemplateLiteral(["<ul>", "</ul>"]);
 
-  emoji_picker_templateObject2 = function _templateObject2() {
+  emoji_picker_templateObject2 = function () {
     return data;
   };
 
@@ -89575,7 +93792,7 @@ function emoji_picker_templateObject2() {
 function emoji_picker_templateObject() {
   const data = emoji_picker_taggedTemplateLiteral(["\n        <li data-category=\"", "\"\n            class=\"emoji-category ", " ", "\"\n            title=\"", "\">\n\n            <a class=\"pick-category\"\n               @click=", "\n               href=\"#emoji-picker-", "\"\n               data-category=\"", "\">", " </a>\n        </li>\n    "]);
 
-  emoji_picker_templateObject = function _templateObject() {
+  emoji_picker_templateObject = function () {
     return data;
   };
 
@@ -89590,11 +93807,11 @@ function emoji_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st
 const emoji_picker_u = converse.env.utils;
 
 const emoji_category = o => {
-  return lit_html_html(emoji_picker_templateObject(), o.category, o.category, o.current_category === o.category ? 'picked' : '', i18n_(converse_core_converse.emoji_category_labels[o.category]), o.onCategoryPicked, o.category, o.category, o.emoji);
+  return lit_html_html(emoji_picker_templateObject(), o.category, o.category, o.current_category === o.category ? 'picked' : '', i18n_(core_converse.emoji_category_labels[o.category]), o.onCategoryPicked, o.category, o.category, o.emoji);
 };
 
 const emoji_picker_header = o => {
-  const cats = converse_core_api.settings.get('emoji_categories');
+  const cats = core_api.settings.get('emoji_categories');
 
   const transform = c => cats[c] ? emoji_category(Object.assign({
     'category': c,
@@ -89617,13 +93834,13 @@ const tpl_search_results = o => {
 };
 
 const emojis_for_category = o => {
-  return lit_html_html(emoji_picker_templateObject5(), o.category, o.category, i18n_(converse_core_api.settings.get('emoji_category_labels')[o.category]), o.category, Object.values(converse.emojis.json[o.category]).map(emoji => emoji_item(Object.assign({
+  return lit_html_html(emoji_picker_templateObject5(), o.category, o.category, i18n_(core_api.settings.get('emoji_category_labels')[o.category]), o.category, Object.values(converse.emojis.json[o.category]).map(emoji => emoji_item(Object.assign({
     emoji
   }, o))));
 };
 
 const tpl_all_emojis = o => {
-  const cats = converse_core_api.settings.get('emoji_categories');
+  const cats = core_api.settings.get('emoji_categories');
   return lit_html_html(emoji_picker_templateObject6(), o.query, Object.keys(cats).map(c => cats[c] ? emojis_for_category(Object.assign({
     'category': c
   }, o)) : ''));
@@ -89645,7 +93862,7 @@ const tpl_emoji_picker = o => {
 function emoji_picker_content_templateObject() {
   const data = emoji_picker_content_taggedTemplateLiteral(["\n          <div class=\"emoji-picker__lists\">\n              ", "\n              ", "\n          </div>\n      "]);
 
-  emoji_picker_content_templateObject = function _templateObject() {
+  emoji_picker_content_templateObject = function () {
     return data;
   };
 
@@ -89761,7 +93978,7 @@ class emoji_picker_content_EmojiPickerContent extends element_CustomElement {
       }
     }
 
-    if (this.query && !converse_core_converse.FILTER_CONTAINS(shortname, this.query)) {
+    if (this.query && !core_converse.FILTER_CONTAINS(shortname, this.query)) {
       return true;
     }
 
@@ -89769,12 +93986,12 @@ class emoji_picker_content_EmojiPickerContent extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-emoji-picker-content', emoji_picker_content_EmojiPickerContent);
+core_api.elements.define('converse-emoji-picker-content', emoji_picker_content_EmojiPickerContent);
 // CONCATENATED MODULE: ./src/components/emoji-picker.js
 function components_emoji_picker_templateObject2() {
   const data = components_emoji_picker_taggedTemplateLiteral(["\n                        <converse-emoji-picker\n                                .chatview=", "\n                                .model=", "\n                                ?render_emojis=", "\n                                current_category=\"", "\"\n                                current_skintone=\"", "\"\n                                query=\"", "\"\n                        ></converse-emoji-picker>"]);
 
-  components_emoji_picker_templateObject2 = function _templateObject2() {
+  components_emoji_picker_templateObject2 = function () {
     return data;
   };
 
@@ -89784,7 +94001,7 @@ function components_emoji_picker_templateObject2() {
 function components_emoji_picker_templateObject() {
   const data = components_emoji_picker_taggedTemplateLiteral(["\n            <div class=\"dropup\">\n                <button class=\"toggle-emojis\"\n                        title=\"", "\"\n                        data-toggle=\"dropdown\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\">\n                    <converse-icon\n                        class=\"fa fa-smile \"\n                        path-prefix=\"", "\"\n                        size=\"1em\"></converse-icon>\n                </button>\n                <div class=\"dropdown-menu\">\n                    ", "\n                </div>\n            </div>"]);
 
-  components_emoji_picker_templateObject = function _templateObject() {
+  components_emoji_picker_templateObject = function () {
     return data;
   };
 
@@ -89901,7 +94118,7 @@ class emoji_picker_EmojiPicker extends element_CustomElement {
 
   updateSearchResults(changed) {
     const old_query = changed.get('query');
-    const contains = converse_core_converse.FILTER_CONTAINS;
+    const contains = core_converse.FILTER_CONTAINS;
 
     if (this.query) {
       if (this.query === old_query) {
@@ -89999,7 +94216,7 @@ class emoji_picker_EmojiPicker extends element_CustomElement {
     if (ev.keyCode === converse.keycodes.TAB) {
       if (ev.target.value) {
         ev.preventDefault();
-        const match = converse.emojis.shortnames.find(sn => converse_core_converse.FILTER_CONTAINS(sn, ev.target.value));
+        const match = converse.emojis.shortnames.find(sn => core_converse.FILTER_CONTAINS(sn, ev.target.value));
         match && this.model.set({
           'query': match
         });
@@ -90117,12 +94334,12 @@ class emoji_picker_EmojiDropdown extends dropdown_BaseDropdown {
   initModel() {
     if (!this.init_promise) {
       this.init_promise = (async () => {
-        await converse_core_api.emojis.initialize();
-        const id = "converse.emoji-".concat(converse_core_converse.bare_jid, "-").concat(this.chatview.model.get('jid'));
-        this.model = new converse_core_converse.EmojiPicker({
+        await core_api.emojis.initialize();
+        const id = "converse.emoji-".concat(core_converse.bare_jid, "-").concat(this.chatview.model.get('jid'));
+        this.model = new core_converse.EmojiPicker({
           'id': id
         });
-        this.model.browserStorage = converse_core_converse.createStore(id);
+        this.model.browserStorage = core_converse.createStore(id);
         await new Promise(resolve => this.model.fetch({
           'success': resolve,
           'error': resolve
@@ -90139,7 +94356,7 @@ class emoji_picker_EmojiDropdown extends dropdown_BaseDropdown {
   }
 
   render() {
-    return lit_html_html(components_emoji_picker_templateObject(), i18n_('Insert emojis'), converse_core_api.settings.get('assets_path'), until(this.initModel().then(() => lit_html_html(components_emoji_picker_templateObject2(), this.chatview, this.model, this.render_emojis, this.model.get('current_category') || '', this.model.get('current_skintone') || '', this.model.get('query') || '')), ''));
+    return lit_html_html(components_emoji_picker_templateObject(), i18n_('Insert emojis'), core_api.settings.get('assets_path'), until(this.initModel().then(() => lit_html_html(components_emoji_picker_templateObject2(), this.chatview, this.model, this.render_emojis, this.model.get('current_category') || '', this.model.get('current_skintone') || '', this.model.get('query') || '')), ''));
   }
 
   connectedCallback() {
@@ -90178,13 +94395,13 @@ class emoji_picker_EmojiDropdown extends dropdown_BaseDropdown {
   }
 
 }
-converse_core_api.elements.define('converse-emoji-dropdown', emoji_picker_EmojiDropdown);
-converse_core_api.elements.define('converse-emoji-picker', emoji_picker_EmojiPicker);
+core_api.elements.define('converse-emoji-dropdown', emoji_picker_EmojiDropdown);
+core_api.elements.define('converse-emoji-picker', emoji_picker_EmojiPicker);
 // CONCATENATED MODULE: ./src/components/toolbar.js
 function toolbar_templateObject11() {
   const data = toolbar_taggedTemplateLiteral(["", ""]);
 
-  toolbar_templateObject11 = function _templateObject11() {
+  toolbar_templateObject11 = function () {
     return data;
   };
 
@@ -90194,7 +94411,7 @@ function toolbar_templateObject11() {
 function toolbar_templateObject10() {
   const data = toolbar_taggedTemplateLiteral(["\n            <button class=\"toggle-compose-spoiler\"\n                    title=\"", "\"\n                    @click=", ">\n                <converse-icon class=\"fa ", "\"\n                         path-prefix=\"", "\"\n                         size=\"1em\"></converse-icon>\n            </button>"]);
 
-  toolbar_templateObject10 = function _templateObject10() {
+  toolbar_templateObject10 = function () {
     return data;
   };
 
@@ -90204,7 +94421,7 @@ function toolbar_templateObject10() {
 function toolbar_templateObject9() {
   const data = toolbar_taggedTemplateLiteral(["\n                <button title=\"", "\" @click=", ">\n                    <converse-icon class=\"fa fa-paperclip\"\n                        path-prefix=\"", "\"\n                        size=\"1em\"></converse-icon>\n                </button>\n                <input type=\"file\" @change=", " class=\"fileupload\" multiple=\"\" style=\"display:none\"/>"]);
 
-  toolbar_templateObject9 = function _templateObject9() {
+  toolbar_templateObject9 = function () {
     return data;
   };
 
@@ -90214,7 +94431,7 @@ function toolbar_templateObject9() {
 function toolbar_templateObject8() {
   const data = toolbar_taggedTemplateLiteral(["\n                <button class=\"toggle_occupants right\"\n                        title=\"", "\"\n                        @click=", ">\n                    <converse-icon class=\"fa ", "\"\n                             path-prefix=\"", "\" size=\"1em\"></converse-icon>\n                </button>"]);
 
-  toolbar_templateObject8 = function _templateObject8() {
+  toolbar_templateObject8 = function () {
     return data;
   };
 
@@ -90224,7 +94441,7 @@ function toolbar_templateObject8() {
 function toolbar_templateObject7() {
   const data = toolbar_taggedTemplateLiteral(["", ""]);
 
-  toolbar_templateObject7 = function _templateObject7() {
+  toolbar_templateObject7 = function () {
     return data;
   };
 
@@ -90234,7 +94451,7 @@ function toolbar_templateObject7() {
 function toolbar_templateObject6() {
   const data = toolbar_taggedTemplateLiteral(["<span class=\"right message-limit\" title=\"", "\">", "</span>"]);
 
-  toolbar_templateObject6 = function _templateObject6() {
+  toolbar_templateObject6 = function () {
     return data;
   };
 
@@ -90244,7 +94461,7 @@ function toolbar_templateObject6() {
 function toolbar_templateObject5() {
   const data = toolbar_taggedTemplateLiteral(["\n                <button class=\"toggle-call\" @click=", " title=\"", "\">\n                    <converse-icon class=\"fa fa-phone\" path-prefix=\"/dist\" size=\"1em\"></converse-icon>\n                </button>"]);
 
-  toolbar_templateObject5 = function _templateObject5() {
+  toolbar_templateObject5 = function () {
     return data;
   };
 
@@ -90254,7 +94471,7 @@ function toolbar_templateObject5() {
 function toolbar_templateObject4() {
   const data = toolbar_taggedTemplateLiteral(["<converse-emoji-dropdown .chatview=", "></converse-dropdown>"]);
 
-  toolbar_templateObject4 = function _templateObject4() {
+  toolbar_templateObject4 = function () {
     return data;
   };
 
@@ -90264,7 +94481,7 @@ function toolbar_templateObject4() {
 function toolbar_templateObject3() {
   const data = toolbar_taggedTemplateLiteral(["<button type=\"submit\" class=\"btn send-button fa fa-paper-plane\" title=\"", "\"></button>"]);
 
-  toolbar_templateObject3 = function _templateObject3() {
+  toolbar_templateObject3 = function () {
     return data;
   };
 
@@ -90274,7 +94491,7 @@ function toolbar_templateObject3() {
 function toolbar_templateObject2() {
   const data = toolbar_taggedTemplateLiteral(["<span class=\"toolbar-buttons\">", "</span>"]);
 
-  toolbar_templateObject2 = function _templateObject2() {
+  toolbar_templateObject2 = function () {
     return data;
   };
 
@@ -90284,7 +94501,7 @@ function toolbar_templateObject2() {
 function toolbar_templateObject() {
   const data = toolbar_taggedTemplateLiteral(["\n            ", "\n            ", "\n        "]);
 
-  toolbar_templateObject = function _templateObject() {
+  toolbar_templateObject = function () {
     return data;
   };
 
@@ -90364,7 +94581,7 @@ class toolbar_ChatToolbar extends element_CustomElement {
 
     const i18n_chars_remaining = i18n_('Message characters remaining');
 
-    const message_limit = converse_core_api.settings.get('message_limit');
+    const message_limit = core_api.settings.get('message_limit');
 
     if (message_limit) {
       buttons.push(lit_html_html(toolbar_templateObject6(), i18n_chars_remaining, this.message_limit));
@@ -90374,7 +94591,7 @@ class toolbar_ChatToolbar extends element_CustomElement {
       buttons.push(this.getSpoilerButton());
     }
 
-    const http_upload_promise = converse_core_api.disco.supports(toolbar_Strophe.NS.HTTPUPLOAD, converse_core_converse.domain);
+    const http_upload_promise = core_api.disco.supports(toolbar_Strophe.NS.HTTPUPLOAD, core_converse.domain);
     buttons.push(lit_html_html(toolbar_templateObject7(), until(http_upload_promise.then(is_supported => this.getHTTPUploadButton(is_supported)), '')));
 
     if (this.show_occupants_toggle) {
@@ -90382,22 +94599,29 @@ class toolbar_ChatToolbar extends element_CustomElement {
 
       const i18n_show_occupants = i18n_('Show participants');
 
-      buttons.push(lit_html_html(toolbar_templateObject8(), this.hidden_occupants ? i18n_show_occupants : i18n_hide_occupants, this.toggleOccupants, this.hidden_occupants ? "fa-angle-double-left" : "fa-angle-double-right", converse_core_api.settings.get('assets_path')));
+      buttons.push(lit_html_html(toolbar_templateObject8(), this.hidden_occupants ? i18n_show_occupants : i18n_hide_occupants, this.toggleOccupants, this.hidden_occupants ? "fa-angle-double-left" : "fa-angle-double-right", core_api.settings.get('assets_path')));
     }
     /**
      * *Hook* which allows plugins to add more buttons to a chat's toolbar
      * @event _converse#getToolbarButtons
+     * @example
+     *  api.listen.on('getToolbarButtons', (toolbar_el, buttons) {
+     *      buttons.push(html`
+     *          <button @click=${() => alert('Foo!')}>Foo</button>`
+     *      );
+     *      return buttons;
+     *  }
      */
 
 
-    return converse_core_converse.api.hook('getToolbarButtons', this, buttons);
+    return core_converse.api.hook('getToolbarButtons', this, buttons);
   }
 
   getHTTPUploadButton(is_supported) {
     if (is_supported) {
       const i18n_choose_file = i18n_('Choose a file to send');
 
-      return lit_html_html(toolbar_templateObject9(), i18n_choose_file, this.toggleFileUpload, converse_core_api.settings.get('assets_path'), this.onFileSelection);
+      return lit_html_html(toolbar_templateObject9(), i18n_choose_file, this.toggleFileUpload, core_api.settings.get('assets_path'), this.onFileSelection);
     } else {
       return '';
     }
@@ -90418,13 +94642,13 @@ class toolbar_ChatToolbar extends element_CustomElement {
       i18n_toggle_spoiler = i18n_("Click to write your message as a spoiler");
     }
 
-    const markup = lit_html_html(toolbar_templateObject10(), i18n_toggle_spoiler, this.toggleComposeSpoilerMessage, this.composing_spoiler ? 'fa-eye-slash' : 'fa-eye', converse_core_api.settings.get('assets_path'));
+    const markup = lit_html_html(toolbar_templateObject10(), i18n_toggle_spoiler, this.toggleComposeSpoilerMessage, this.composing_spoiler ? 'fa-eye-slash' : 'fa-eye', core_api.settings.get('assets_path'));
 
     if (this.is_groupchat) {
       return markup;
     } else {
       const contact_jid = model.get('jid');
-      const spoilers_promise = Promise.all(model.presence.resources.map(r => converse_core_api.disco.supports(toolbar_Strophe.NS.SPOILER, "".concat(contact_jid, "/").concat(r.get('name'))))).then(results => results.reduce((acc, val) => acc && val, true));
+      const spoilers_promise = Promise.all(model.presence.resources.map(r => core_api.disco.supports(toolbar_Strophe.NS.SPOILER, "".concat(contact_jid, "/").concat(r.get('name'))))).then(results => results.reduce((acc, val) => acc && val, true));
       return lit_html_html(toolbar_templateObject11(), until(spoilers_promise.then(() => markup), ''));
     }
   }
@@ -90473,8 +94697,8 @@ class toolbar_ChatToolbar extends element_CustomElement {
      * @example _converse.api.listen.on('callButtonClicked', (connection, model) => { ... });
      */
 
-    converse_core_api.trigger('callButtonClicked', {
-      connection: converse_core_converse.connection,
+    core_api.trigger('callButtonClicked', {
+      connection: core_converse.connection,
       model: this.model
     });
   }
@@ -90493,18 +94717,45 @@ window.customElements.define('converse-chat-toolbar', toolbar_ChatToolbar);
 
 class converse_ConverseRoot extends HTMLElement {
   async connectedCallback() {
-    await converse_core_api.waitUntil('initialized');
+    await core_api.waitUntil('initialized');
     converse.insertInto(this);
   }
 
 }
 
 customElements.define('converse-root', converse_ConverseRoot);
+// CONCATENATED MODULE: ./src/shared/avatar.js
+
+
+const avatar_u = converse.env.utils;
+const AvatarMixin = {
+  renderAvatar(el) {
+    el = el || this.el;
+    const avatar_el = el.querySelector('canvas.avatar, svg.avatar');
+
+    if (avatar_el === null) {
+      return;
+    }
+
+    if (this.model.vcard) {
+      const data = {
+        'classes': avatar_el.getAttribute('class'),
+        'width': avatar_el.getAttribute('width'),
+        'height': avatar_el.getAttribute('height'),
+        'image_type': this.model.vcard.get('image_type'),
+        'image': this.model.vcard.get('image')
+      };
+      avatar_el.outerHTML = avatar_u.getElementFromTemplateResult(templates_avatar(data)).outerHTML;
+    }
+  }
+
+};
+/* harmony default export */ var shared_avatar = (AvatarMixin);
 // CONCATENATED MODULE: ./src/templates/background_logo.js
 function background_logo_templateObject() {
   const data = background_logo_taggedTemplateLiteral(["\n    <div class=\"inner-content converse-brand row\">\n        <div class=\"converse-brand__padding\"></div>\n        <div class=\"converse-brand__heading\">\n            <svg height=\"200px\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n                viewBox=\"0 0 364 364\"\n                version=\"1.1\">\n                <title>Logo Converse</title>\n                <defs>\n                    <linearGradient id=\"gradient\" x1=\"92.14\" y1=\"27.64\" x2=\"267.65\" y2=\"331.62\" gradientUnits=\"userSpaceOnUse\">\n                        <stop offset=\"0\" stop-color=\"#fff1d1\"/>\n                        <stop offset=\"0.05\" stop-color=\"#fae8c1\"/>\n                        <stop offset=\"0.15\" stop-color=\"#f0d5a1\"/>\n                        <stop offset=\"0.27\" stop-color=\"#e7c687\"/>\n                        <stop offset=\"0.4\" stop-color=\"#e1bb72\"/>\n                        <stop offset=\"0.54\" stop-color=\"#dcb264\"/>\n                        <stop offset=\"0.71\" stop-color=\"#daad5c\"/>\n                        <stop offset=\"1\" stop-color=\"#d9ac59\"/>\n                    </linearGradient>\n                    <filter id=\"shadow\">\n                        <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"2.3\" result=\"blur1\"/>\n                        <feOffset in=\"blur1\" dx=\"3\" dy=\"3\" result=\"blur2\"/>\n                        <feColorMatrix in=\"blur2\" type=\"matrix\" result=\"blur3\"\n                            values=\"1 0 0 0 0.1\n                                    0 1 0 0 0.1\n                                    0 0 1 0 0.1\n                                    0 0 0 1 0\"/>\n                        <feMerge>\n                            <feMergeNode in=\"blur3\"/>\n                            <feMergeNode in=\"SourceGraphic\"/>\n                        </feMerge>\n                    </filter>\n                </defs>\n                <g filter=\"url(#shadow)\">\n                    <path d=\"M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z\" fill=\"#d9ac59\"/>\n                    <path d=\"M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z\" fill=\"url(#gradient)\"/>\n                </g>\n            </svg>\n            <span class=\"converse-brand__text\">\n                <span>converse<span class=\"subdued\">.js</span></span>\n                <p class=\"byline\">messaging freedom</p>\n            </span>\n        </div>\n    </div>"]);
 
-  background_logo_templateObject = function _templateObject() {
+  background_logo_templateObject = function () {
     return data;
   };
 
@@ -90569,7 +94820,7 @@ const unsafeSVG = directive_directive((value) => (part) => {
 function font_awesome_templateObject2() {
   const data = font_awesome_taggedTemplateLiteral(["", ""]);
 
-  font_awesome_templateObject2 = function _templateObject2() {
+  font_awesome_templateObject2 = function () {
     return data;
   };
 
@@ -90579,7 +94830,7 @@ function font_awesome_templateObject2() {
 function font_awesome_templateObject() {
   const data = font_awesome_taggedTemplateLiteral(["", ""]);
 
-  font_awesome_templateObject = function _templateObject() {
+  font_awesome_templateObject = function () {
     return data;
   };
 
@@ -90595,7 +94846,7 @@ function font_awesome_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st
 class font_awesome_FontAwesome extends element_CustomElement {
   constructor() {
     super();
-    const promise = __webpack_require__.e(/* import() | icons */ 138).then(__webpack_require__.t.bind(null, 459, 7));
+    const promise = __webpack_require__.e(/* import() | icons */ 138).then(__webpack_require__.t.bind(null, 548, 7));
     this.data = promise.then(d => lit_html_html(font_awesome_templateObject(), unsafeSVG(d.default())));
   }
 
@@ -90610,7 +94861,7 @@ window.customElements.define('converse-fontawesome', font_awesome_FontAwesome);
 function converse_templateObject() {
   const data = converse_taggedTemplateLiteral(["\n    <div class=\"converse-chatboxes row no-gutters\"></div>\n    <div id=\"converse-modals\" class=\"modals\"></div>\n    <converse-fontawesome></converse-fontawesome>\n"]);
 
-  converse_templateObject = function _templateObject() {
+  converse_templateObject = function () {
     return data;
   };
 
@@ -92110,7 +96361,7 @@ var without = _baseRest(function(array, values) {
 
 
 
-const overview_Overview = function Overview(options) {
+const Overview = function (options) {
   /* An Overview is a View that contains and keeps track of sub-views.
    * Kind of like what a Collection is to a Model.
    */
@@ -92138,7 +96389,7 @@ const overview_Overview = function Overview(options) {
 
   this.remove = id => {
     if (typeof id === "undefined") {
-      new view_View().remove.apply(this);
+      new View().remove.apply(this);
     }
 
     const view = this.views[id];
@@ -92155,7 +96406,7 @@ const overview_Overview = function Overview(options) {
     return this;
   };
 
-  view_View.apply(this, Array.prototype.slice.apply(arguments));
+  View.apply(this, Array.prototype.slice.apply(arguments));
 };
 
 const methods = {
@@ -92192,15 +96443,15 @@ const methods = {
   without: lodash_es_without
 };
 Object.keys(methods).forEach(name => {
-  overview_Overview.prototype[name] = function () {
+  Overview.prototype[name] = function () {
     const args = Array.prototype.slice.call(arguments);
     args.unshift(this.views);
     return methods[name].apply(this, args);
   };
 });
-Object.assign(overview_Overview.prototype, view_View.prototype);
-overview_Overview.extend = view_View.extend;
-const OrderedListView = overview_Overview.extend({
+Object.assign(Overview.prototype, View.prototype);
+Overview.extend = View.extend;
+const OrderedListView = Overview.extend({
   /* An OrderedListView is a special type of Overview which adds some
    * methods and conventions for rendering an ordered list of elements.
    */
@@ -92289,68 +96540,36 @@ const OrderedListView = overview_Overview.extend({
 
 });
 
-// CONCATENATED MODULE: ./src/converse-chatboxviews.js
-/**
- * @module converse-chatboxviews
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- */
-
-
-
-
+// CONCATENATED MODULE: ./src/plugins/chatboxviews/view.js
 
 
 
 
 
 
-const converse_chatboxviews_u = converse.env.utils;
-const AvatarMixin = {
-  renderAvatar(el) {
-    el = el || this.el;
-    const avatar_el = el.querySelector('canvas.avatar, svg.avatar');
-
-    if (avatar_el === null) {
-      return;
-    }
-
-    if (this.model.vcard) {
-      const data = {
-        'classes': avatar_el.getAttribute('class'),
-        'width': avatar_el.getAttribute('width'),
-        'height': avatar_el.getAttribute('height'),
-        'image_type': this.model.vcard.get('image_type'),
-        'image': this.model.vcard.get('image')
-      };
-      avatar_el.outerHTML = converse_chatboxviews_u.getElementFromTemplateResult(avatar(data)).outerHTML;
-    }
-  }
-
-};
-const ViewWithAvatar = view_View.extend(AvatarMixin);
-const ChatBoxViews = overview_Overview.extend({
+const view_u = converse.env.utils;
+const ChatBoxViews = Overview.extend({
   _ensureElement() {
     /* Override method from backbone.js
-        * If the #conversejs element doesn't exist, create it.
-        */
+     * If the #conversejs element doesn't exist, create it.
+     */
     if (this.el) {
       this.setElement(lodash_es_result(this, 'el'), false);
     } else {
-      let el = converse_core_converse.root.querySelector('#conversejs');
+      let el = core_converse.root.querySelector('#conversejs');
 
       if (el === null) {
         el = document.createElement('div');
         el.setAttribute('id', 'conversejs');
-        converse_chatboxviews_u.addClass("theme-".concat(converse_core_api.settings.get('theme')), el);
+        view_u.addClass("theme-".concat(core_api.settings.get('theme')), el);
 
-        const body = converse_core_converse.root.querySelector('body');
+        const body = core_converse.root.querySelector('body');
 
         if (body) {
           body.appendChild(el);
         } else {
           // Perhaps inside a web component?
-          converse_core_converse.root.appendChild(el);
+          core_converse.root.appendChild(el);
         }
       }
 
@@ -92359,7 +96578,7 @@ const ChatBoxViews = overview_Overview.extend({
   },
 
   initialize() {
-    this.listenTo(this.model, "destroy", this.removeChat);
+    this.listenTo(this.model, 'destroy', this.removeChat);
     const bg = document.getElementById('conversejs-bg');
 
     if (bg && !bg.innerHTML.trim()) {
@@ -92367,10 +96586,10 @@ const ChatBoxViews = overview_Overview.extend({
     }
 
     const body = document.querySelector('body');
-    body.classList.add("converse-".concat(converse_core_api.settings.get("view_mode")));
-    this.el.classList.add("converse-".concat(converse_core_api.settings.get("view_mode")));
+    body.classList.add("converse-".concat(core_api.settings.get('view_mode')));
+    this.el.classList.add("converse-".concat(core_api.settings.get('view_mode')));
 
-    if (converse_core_api.settings.get("singleton")) {
+    if (core_api.settings.get('singleton')) {
       this.el.classList.add("converse-singleton");
     }
 
@@ -92384,7 +96603,7 @@ const ChatBoxViews = overview_Overview.extend({
     this.row_el = this.el.querySelector('.row');
   },
 
-  /*(
+  /**
    * Add a new DOM element (likely a chat box) into the
    * the row managed by this overview.
    * @param { HTMLElement } el
@@ -92404,10 +96623,23 @@ const ChatBoxViews = overview_Overview.extend({
   }
 
 });
+/* harmony default export */ var chatboxviews_view = (ChatBoxViews);
+// CONCATENATED MODULE: ./src/plugins/chatboxviews/index.js
+/**
+ * @module converse-chatboxviews
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
+
+
+
+
+
+
 
 function onChatBoxViewsInitialized() {
-  converse_core_converse.chatboxviews = new converse_core_converse.ChatBoxViews({
-    'model': converse_core_converse.chatboxes
+  core_converse.chatboxviews = new core_converse.ChatBoxViews({
+    'model': core_converse.chatboxes
   });
   /**
    * Triggered once the _converse.ChatBoxViews view-colleciton has been initialized
@@ -92415,39 +96647,7 @@ function onChatBoxViewsInitialized() {
    * @example _converse.api.listen.on('chatBoxViewsInitialized', () => { ... });
    */
 
-  converse_core_api.trigger('chatBoxViewsInitialized');
-}
-
-function hideChat(view) {
-  if (view.model.get('id') === 'controlbox') {
-    return;
-  }
-
-  converse_chatboxviews_u.safeSave(view.model, {
-    'hidden': true
-  });
-  view.hide();
-}
-
-function beforeShowingChatView(view) {
-  if (converse_core_converse.isUniView()) {
-    /* We only have one chat visible at any one
-     * time. So before opening a chat, we make sure all other
-     * chats are hidden.
-     */
-    Object.values(converse_core_converse.chatboxviews.xget(view.model.get('id'))).filter(v => !v.model.get('hidden')).forEach(hideChat);
-
-    if (view.model.get('hidden')) {
-      return new Promise(resolve => {
-        converse_chatboxviews_u.safeSave(view.model, {
-          'hidden': false
-        }, {
-          'success': resolve,
-          'failure': resolve
-        });
-      });
-    }
-  }
+  core_api.trigger('chatBoxViewsInitialized');
 }
 
 function calculateViewportHeightUnit() {
@@ -92456,31 +96656,30 @@ function calculateViewportHeightUnit() {
 }
 
 converse.plugins.add('converse-chatboxviews', {
-  dependencies: ["converse-chatboxes", "converse-vcard"],
+  dependencies: ['converse-chatboxes', 'converse-vcard'],
 
   initialize() {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.elements.register();
-    converse_core_api.promises.add(['chatBoxViewsInitialized']); // Configuration values for this plugin
+    core_api.elements.register();
+    core_api.promises.add(['chatBoxViewsInitialized']); // Configuration values for this plugin
     // ====================================
     // Refer to docs/source/configuration.rst for explanations of these
     // configuration settings.
 
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'animate': true,
       'theme': 'default'
     });
-    converse_core_converse.ViewWithAvatar = ViewWithAvatar;
-    converse_core_converse.ChatBoxViews = ChatBoxViews;
+    core_converse.ViewWithAvatar = View.extend(shared_avatar);
+    core_converse.ChatBoxViews = chatboxviews_view;
     /************************ BEGIN Event Handlers ************************/
 
-    converse_core_api.listen.on('beforeShowingChatView', beforeShowingChatView);
-    converse_core_api.listen.on('chatBoxesInitialized', onChatBoxViewsInitialized);
-    converse_core_api.listen.on('cleanup', () => delete converse_core_converse.chatboxviews);
-    converse_core_api.listen.on('clearSession', () => converse_core_converse.chatboxviews.closeAllChatBoxes());
-    converse_core_api.listen.on('chatBoxViewsInitialized', calculateViewportHeightUnit);
+    core_api.listen.on('chatBoxesInitialized', onChatBoxViewsInitialized);
+    core_api.listen.on('cleanup', () => delete core_converse.chatboxviews);
+    core_api.listen.on('clearSession', () => core_converse.chatboxviews.closeAllChatBoxes());
+    core_api.listen.on('chatBoxViewsInitialized', calculateViewportHeightUnit);
     window.addEventListener('resize', calculateViewportHeightUnit);
     /************************ END Event Handlers ************************/
 
@@ -92500,13 +96699,13 @@ converse.plugins.add('converse-chatboxviews', {
       insertInto(container) {
         var _converse$chatboxview;
 
-        const el = (_converse$chatboxview = converse_core_converse.chatboxviews) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.el;
+        const el = (_converse$chatboxview = core_converse.chatboxviews) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.el;
 
         if (el && !container.contains(el)) {
           container.insertAdjacentElement('afterBegin', el);
-          converse_core_api.chatviews.get().filter(v => v.model.get('id') !== 'controlbox').forEach(v => v.maintainScrollTop());
+          core_api.chatviews.get().filter(v => v.model.get('id') !== 'controlbox').forEach(v => v.maintainScrollTop());
         } else if (!el) {
-          throw new Error("Cannot insert non-existing #conversejs element into the DOM");
+          throw new Error('Cannot insert non-existing #conversejs element into the DOM');
         }
       }
 
@@ -92514,253 +96713,469 @@ converse.plugins.add('converse-chatboxviews', {
   }
 
 });
-// CONCATENATED MODULE: ./src/templates/chatbox.js
-function chatbox_templateObject() {
-  const data = chatbox_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head chat-head-chatbox row no-gutters\"></div>\n        <div class=\"chat-body\">\n            <div class=\"chat-content ", "\" aria-live=\"polite\">\n                <div class=\"chat-content__messages\" @scroll=", "></div>\n                <div class=\"chat-content__help\"></div>\n            </div>\n            <div class=\"bottom-panel\">\n                <div class=\"message-form-container\">\n            </div>\n        </div>\n    </div>\n"]);
+// CONCATENATED MODULE: ./src/modals/templates/alert.js
+function alert_templateObject2() {
+  const data = templates_alert_taggedTemplateLiteral(["<p>", "</p>"]);
 
-  chatbox_templateObject = function _templateObject() {
+  alert_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
+function templates_alert_templateObject() {
+  const data = templates_alert_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header ", "\">\n              <h5 class=\"modal-title\">", "</h5>\n              ", "\n            </div>\n            <div class=\"modal-body\">\n              <span class=\"modal-alert\"></span>\n              ", "\n            </div>\n        </div>\n    </div>\n"]);
 
-/* harmony default export */ var templates_chatbox = (o => lit_html_html(chatbox_templateObject(), o.show_send_button ? 'chat-content-sendbutton' : '', o.markScrolled));
-// CONCATENATED MODULE: ./src/templates/chatbox_head.js
-function chatbox_head_templateObject6() {
-  const data = chatbox_head_taggedTemplateLiteral(["<p class=\"chat-head__desc\">", "</p>"]);
-
-  chatbox_head_templateObject6 = function _templateObject6() {
+  templates_alert_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function chatbox_head_templateObject5() {
-  const data = chatbox_head_taggedTemplateLiteral(["<converse-dropdown .items=", "></converse-dropdown>"]);
+function templates_alert_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  chatbox_head_templateObject5 = function _templateObject5() {
-    return data;
-  };
 
-  return data;
-}
 
-function chatbox_head_templateObject4() {
-  const data = chatbox_head_taggedTemplateLiteral(["<a href=\"", "\" target=\"_blank\" rel=\"noopener\" class=\"user\">", "</a>"]);
+/* harmony default export */ var modals_templates_alert = (o => lit_html_html(templates_alert_templateObject(), o.level, o.title, modal_header_close_button, o.messages.map(message => lit_html_html(alert_templateObject2(), message))));
+// CONCATENATED MODULE: ./src/modals/alert.js
 
-  chatbox_head_templateObject4 = function _templateObject4() {
-    return data;
-  };
 
-  return data;
-}
 
-function chatbox_head_templateObject3() {
-  const data = chatbox_head_taggedTemplateLiteral(["<span class=\"mr-2\">", "</span>"]);
+const Alert = modals_base.extend({
+  id: 'alert-modal',
+
+  initialize() {
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.listenTo(this.model, 'change', this.render);
+  },
+
+  toHTML() {
+    return modals_templates_alert(Object.assign({
+      __: i18n_
+    }, this.model.toJSON()));
+  }
+
+});
+/* harmony default export */ var modals_alert = (Alert);
+// CONCATENATED MODULE: ./src/modals/templates/prompt.js
+function prompt_templateObject3() {
+  const data = prompt_taggedTemplateLiteral(["<p>", "</p>"]);
 
-  chatbox_head_templateObject3 = function _templateObject3() {
+  prompt_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatbox_head_templateObject2() {
-  const data = chatbox_head_taggedTemplateLiteral(["<div class=\"chatbox-navback\"><i class=\"fa fa-arrow-left\"></i></div>"]);
+function prompt_templateObject2() {
+  const data = prompt_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header ", "\">\n          <h5 class=\"modal-title\">", "</h5>\n          <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n            <span aria-hidden=\"true\">\xD7</span>\n          </button>\n        </div>\n        <div class=\"modal-body\">\n            <span class=\"modal-alert\"></span>\n            <form class=\"converse-form converse-form--modal confirm\" action=\"#\">\n              <div class=\"form-group\">\n                  ", "\n              </div>\n              ", "\n              <div class=\"form-group\">\n                  <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                  <input type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\" value=\"", "\"/>\n              </div>\n          </form>\n        </div>\n      </div>\n    </div>\n"]);
 
-  chatbox_head_templateObject2 = function _templateObject2() {
+  prompt_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatbox_head_templateObject() {
-  const data = chatbox_head_taggedTemplateLiteral(["\n        <div class=\"chatbox-title ", "\">\n            <div class=\"chatbox-title--row\">\n                ", "\n                ", "\n                <div class=\"chatbox-title__text\" title=\"", "\">\n                    ", "\n                </div>\n            </div>\n            <div class=\"chatbox-title__buttons row no-gutters\">\n                ", "\n                ", "\n            </div>\n        </div>\n        ", "\n    "]);
+function prompt_templateObject() {
+  const data = prompt_taggedTemplateLiteral(["\n    <div class=\"form-group\">\n        <label>\n            ", "\n            <input type=\"text\"\n                name=\"", "\"\n                class=\"", " form-control form-control--labeled\"\n                ?required=\"", "\"\n                placeholder=\"", "\" />\n        </label>\n    </div>\n"]);
 
-  chatbox_head_templateObject = function _templateObject() {
+  prompt_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function chatbox_head_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function prompt_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
+const tpl_field = f => lit_html_html(prompt_templateObject(), f.label || '', f.name, f.challenge_failed ? 'error' : '', f.required, f.placeholder);
 
-/* harmony default export */ var chatbox_head = (o => {
-  const i18n_profile = i18n_('The User\'s Profile Image');
+/* harmony default export */ var templates_prompt = (o => lit_html_html(prompt_templateObject2(), o.level || '', o.title, o.messages.map(message => lit_html_html(prompt_templateObject3(), message)), o.fields.map(f => tpl_field(f)), i18n_('OK'), i18n_('Cancel')));
+// CONCATENATED MODULE: ./src/modals/confirm.js
 
-  const avatar_data = {
-    'alt_text': i18n_profile,
-    'extra_classes': '',
-    'height': 40,
-    'width': 40
-  };
 
-  const tpl_standalone_btns = o => o.standalone_btns.reverse().map(b => until(b, ''));
 
-  return lit_html_html(chatbox_head_templateObject(), o.status ? '' : "chatbox-title--no-desc", !o._converse.api.settings.get("singleton") ? lit_html_html(chatbox_head_templateObject2()) : '', o.type !== o._converse.HEADLINES_TYPE ? lit_html_html(chatbox_head_templateObject3(), avatar(Object.assign({}, o, avatar_data))) : '', o.jid, o.url ? lit_html_html(chatbox_head_templateObject4(), o.url, o.display_name) : o.display_name, o.dropdown_btns.length ? lit_html_html(chatbox_head_templateObject5(), o.dropdown_btns) : '', o.standalone_btns.length ? tpl_standalone_btns(o) : '', o.status ? lit_html_html(chatbox_head_templateObject6(), o.status) : '');
+const confirm_u = converse.env.utils;
+const Confirm = modals_base.extend({
+  id: 'confirm-modal',
+  events: {
+    'submit .confirm': 'onConfimation'
+  },
+
+  initialize() {
+    this.confirmation = confirm_u.getResolveablePromise();
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.listenTo(this.model, 'change', this.render);
+    this.el.addEventListener('closed.bs.modal', () => this.confirmation.reject(), false);
+  },
+
+  toHTML() {
+    return templates_prompt(this.model.toJSON());
+  },
+
+  afterRender() {
+    if (!this.close_handler_registered) {
+      this.el.addEventListener('closed.bs.modal', () => {
+        if (!this.confirmation.isResolved) {
+          this.confirmation.reject();
+        }
+      }, false);
+      this.close_handler_registered = true;
+    }
+  },
+
+  onConfimation(ev) {
+    ev.preventDefault();
+    const form_data = new FormData(ev.target);
+    const fields = (this.model.get('fields') || []).map(field => {
+      const value = form_data.get(field.name).trim();
+      field.value = value;
+
+      if (field.challenge) {
+        field.challenge_failed = value !== field.challenge;
+      }
+
+      return field;
+    });
+
+    if (fields.filter(c => c.challenge_failed).length) {
+      this.model.set('fields', fields); // Setting an array doesn't trigger a change event
+
+      this.model.trigger('change');
+      return;
+    }
+
+    this.confirmation.resolve(fields);
+    this.modal.hide();
+  }
+
 });
-// CONCATENATED MODULE: ./src/templates/chatbox_message_form.js
-function chatbox_message_form_templateObject() {
-  const data = chatbox_message_form_taggedTemplateLiteral(["\n    <div class=\"new-msgs-indicator hidden\">\u25BC ", " \u25BC</div>\n    <form class=\"setNicknameButtonForm hidden\">\n        <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"Join\"/>\n    </form>\n    <form class=\"sendXMPPMessage\">\n        <span class=\"chat-toolbar no-text-select\"></span>\n        <input type=\"text\" placeholder=\"", "\" value=\"", "\" class=\"", " spoiler-hint\"/>\n\n        <div class=\"suggestion-box\">\n            <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n            <textarea\n                type=\"text\"\n                class=\"chat-textarea suggestion-box__input\n                    ", "\n                    ", "\"\n                placeholder=\"", "\">", "</textarea>\n            <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n        </div>\n    </form>\n"]);
+/* harmony default export */ var modals_confirm = (Confirm);
+// CONCATENATED MODULE: ./src/plugins/modal.js
+/**
+ * @module converse-modal
+ * @copyright The Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
 
-  chatbox_message_form_templateObject = function _templateObject() {
-    return data;
-  };
 
-  return data;
-}
 
-function chatbox_message_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
-/* harmony default export */ var chatbox_message_form = (o => lit_html_html(chatbox_message_form_templateObject(), o.unread_msgs, o.label_spoiler_hint || '', o.hint_value || '', o.composing_spoiler ? '' : 'hidden', o.show_send_button ? 'chat-textarea-send-button' : '', o.composing_spoile ? 'spoiler' : '', o.label_message, o.message_value || ''));
-// CONCATENATED MODULE: ./src/templates/toolbar.js
-function templates_toolbar_templateObject() {
-  const data = templates_toolbar_taggedTemplateLiteral(["\n        <converse-chat-toolbar\n            .chatview=", "\n            .model=", "\n            ?composing_spoiler=\"", "\"\n            ?hidden_occupants=\"", "\"\n            ?is_groupchat=\"", "\"\n            ?show_call_button=\"", "\"\n            ?show_emoji_button=\"", "\"\n            ?show_occupants_toggle=\"", "\"\n            ?show_send_button=\"", "\"\n            ?show_spoiler_button=\"", "\"\n            ?show_toolbar=\"", "\"\n            message_limit=\"", "\"\n        ></converse-chat-toolbar>\n    "]);
+converse.env.BootstrapModal = modals_base; // expose to plugins
 
-  templates_toolbar_templateObject = function _templateObject() {
-    return data;
-  };
+let modals = [];
+const modal_api = {
+  /**
+   * API namespace for methods relating to modals
+   * @namespace _converse.api.modal
+   * @memberOf _converse.api
+   */
+  modal: {
+    /**
+     * Shows a modal of type `ModalClass` to the user.
+     * Will create a new instance of that class if an existing one isn't
+     * found.
+     * @param { Class } ModalClass
+     * @param { Object } [properties] - Optional properties that will be
+     *  set on a newly created modal instance (if no pre-existing modal was
+     *  found).
+     * @param { Event } [event] - The DOM event that causes the modal to be shown.
+     */
+    show(ModalClass, properties, ev) {
+      const modal = this.get(ModalClass.id) || this.create(ModalClass, properties);
+      modal.show(ev);
+      return modal;
+    },
 
-  return data;
-}
+    /**
+     * Return a modal with the passed-in identifier, if it exists.
+     * @param { String } id
+     */
+    get(id) {
+      return modals.filter(m => m.id == id).pop();
+    },
 
-function templates_toolbar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+    /**
+     * Create a modal of the passed-in type.
+     * @param { Class } ModalClass
+     * @param { Object } [properties] - Optional properties that will be
+     *  set on the modal instance.
+     */
+    create(ModalClass, properties) {
+      const modal = new ModalClass(properties);
+      modals.push(modal);
+      return modal;
+    },
 
+    /**
+     * Remove a particular modal
+     * @param { View } modal
+     */
+    remove(modal) {
+      modals = modals.filter(m => m !== modal);
+      modal.remove();
+    },
 
+    /**
+     * Remove all modals
+     */
+    removeAll() {
+      modals.forEach(m => m.remove());
+      modals = [];
+    }
+
+  },
+
+  /**
+   * Show a confirm modal to the user.
+   * @method _converse.api.confirm
+   * @param { String } title - The header text for the confirmation dialog
+   * @param { (String[]|String) } messages - The text to show to the user
+   * @param { Array<Field> } fields - An object representing a fields presented to the user.
+   * @property { String } Field.label - The form label for the input field.
+   * @property { String } Field.name - The name for the input field.
+   * @property { String } [Field.challenge] - A challenge value that must be provided by the user.
+   * @property { String } [Field.placeholder] - The placeholder for the input field.
+   * @property { Boolean} [Field.required] - Whether the field is required or not
+   * @returns { Promise<Array|false> } A promise which resolves with an array of
+   *  filled in fields or `false` if the confirm dialog was closed or canceled.
+   */
+  async confirm(title, messages = [], fields = []) {
+    if (typeof messages === 'string') {
+      messages = [messages];
+    }
+
+    const model = new model_Model({
+      title,
+      messages,
+      fields,
+      'type': 'confirm'
+    });
+    const confirm = new modals_confirm({
+      model
+    });
+    confirm.show();
+    let result;
+
+    try {
+      result = await confirm.confirmation;
+    } catch (e) {
+      result = false;
+    }
+
+    confirm.remove();
+    return result;
+  },
+
+  /**
+   * Show a prompt modal to the user.
+   * @method _converse.api.prompt
+   * @param { String } title - The header text for the prompt
+   * @param { (String[]|String) } messages - The prompt text to show to the user
+   * @param { String } placeholder - The placeholder text for the prompt input
+   * @returns { Promise<String|false> } A promise which resolves with the text provided by the
+   *  user or `false` if the user canceled the prompt.
+   */
+  async prompt(title, messages = [], placeholder = '') {
+    if (typeof messages === 'string') {
+      messages = [messages];
+    }
+
+    const model = new model_Model({
+      title,
+      messages,
+      'fields': [{
+        'name': 'reason',
+        'placeholder': placeholder
+      }],
+      'type': 'prompt'
+    });
+    const prompt = new modals_confirm({
+      model
+    });
+    prompt.show();
+    let result;
+
+    try {
+      var _await$prompt$confirm;
+
+      result = (_await$prompt$confirm = (await prompt.confirmation).pop()) === null || _await$prompt$confirm === void 0 ? void 0 : _await$prompt$confirm.value;
+    } catch (e) {
+      result = false;
+    }
+
+    prompt.remove();
+    return result;
+  },
+
+  /**
+   * Show an alert modal to the user.
+   * @method _converse.api.alert
+   * @param { ('info'|'warn'|'error') } type - The type of alert.
+   * @param { String } title - The header text for the alert.
+   * @param { (String[]|String) } messages - The alert text to show to the user.
+   */
+  alert(type, title, messages) {
+    if (typeof messages === 'string') {
+      messages = [messages];
+    }
+
+    let level;
+
+    if (type === 'error') {
+      level = 'alert-danger';
+    } else if (type === 'info') {
+      level = 'alert-info';
+    } else if (type === 'warn') {
+      level = 'alert-warning';
+    }
+
+    const model = new model_Model({
+      'title': title,
+      'messages': messages,
+      'level': level,
+      'type': 'alert'
+    });
+    core_api.modal.show(modals_alert, {
+      model
+    });
+  }
+
+};
+converse.plugins.add('converse-modal', {
+  initialize() {
+    core_api.listen.on('disconnect', () => {
+      const container = document.querySelector("#converse-modals");
+
+      if (container) {
+        container.innerHTML = '';
+      }
+    });
+    core_api.listen.on('clearSession', () => core_api.modal.removeAll());
+    Object.assign(core_converse.api, modal_api);
+  }
 
-/* harmony default export */ var toolbar = (o => {
-  const message_limit = converse_core_api.settings.get('message_limit');
-  const show_call_button = converse_core_api.settings.get('visible_toolbar_buttons').call;
-  const show_emoji_button = converse_core_api.settings.get('visible_toolbar_buttons').emoji;
-  const show_send_button = converse_core_api.settings.get('show_send_button');
-  const show_spoiler_button = converse_core_api.settings.get('visible_toolbar_buttons').spoiler;
-  const show_toolbar = converse_core_api.settings.get('show_toolbar');
-  return lit_html_html(templates_toolbar_templateObject(), o.chatview, o.model, o.composing_spoiler, o.hidden_occupants, o.is_groupchat, show_call_button, show_emoji_button, o.show_occupants_toggle, show_send_button, show_spoiler_button, show_toolbar, message_limit);
 });
-// CONCATENATED MODULE: ./src/templates/user_details_modal.js
-function user_details_modal_templateObject11() {
-  const data = user_details_modal_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
+// CONCATENATED MODULE: ./src/modals/templates/user-details.js
+function user_details_templateObject11() {
+  const data = user_details_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
 
-  user_details_modal_templateObject11 = function _templateObject11() {
+  user_details_templateObject11 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject10() {
-  const data = user_details_modal_taggedTemplateLiteral(["<p><label>", ":</label> <a href=\"mailto:", "\">", "</a></p>"]);
+function user_details_templateObject10() {
+  const data = user_details_taggedTemplateLiteral(["<p><label>", ":</label> <a href=\"mailto:", "\">", "</a></p>"]);
 
-  user_details_modal_templateObject10 = function _templateObject10() {
+  user_details_templateObject10 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject9() {
-  const data = user_details_modal_taggedTemplateLiteral(["<p><label>", ":</label> <a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a></p>"]);
+function user_details_templateObject9() {
+  const data = user_details_taggedTemplateLiteral(["<p><label>", ":</label> <a target=\"_blank\" rel=\"noopener\" href=\"", "\">", "</a></p>"]);
 
-  user_details_modal_templateObject9 = function _templateObject9() {
+  user_details_templateObject9 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject8() {
-  const data = user_details_modal_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
+function user_details_templateObject8() {
+  const data = user_details_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
 
-  user_details_modal_templateObject8 = function _templateObject8() {
+  user_details_templateObject8 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject7() {
-  const data = user_details_modal_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
+function user_details_templateObject7() {
+  const data = user_details_taggedTemplateLiteral(["<p><label>", ":</label> ", "</p>"]);
 
-  user_details_modal_templateObject7 = function _templateObject7() {
+  user_details_templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject6() {
-  const data = user_details_modal_taggedTemplateLiteral(["<div class=\"mb-4\">", "</div>"]);
+function user_details_templateObject6() {
+  const data = user_details_taggedTemplateLiteral(["<div class=\"mb-4\">", "</div>"]);
 
-  user_details_modal_templateObject6 = function _templateObject6() {
+  user_details_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject5() {
-  const data = user_details_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"user-details-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    ", "\n                    ", "\n                    <p><label>", ":</label> <a href=\"xmpp:", "\">", "</a></p>\n                    ", "\n                    ", "\n                    ", "\n                    ", "\n\n                    ", "\n                </div>\n                <div class=\"modal-footer\">\n                    ", "\n                    <button type=\"button\" class=\"btn btn-info refresh-contact\"><i class=\"fa fa-refresh\"> </i>", "</button>\n                    ", "\n\n                </div>\n            </div>\n        </div>\n    "]);
+function user_details_templateObject5() {
+  const data = user_details_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"user-details-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    ", "\n                    ", "\n                    <p><label>", ":</label> <a href=\"xmpp:", "\">", "</a></p>\n                    ", "\n                    ", "\n                    ", "\n                    ", "\n\n                    ", "\n                </div>\n                <div class=\"modal-footer\">\n                    ", "\n                    <button type=\"button\" class=\"btn btn-info refresh-contact\"><i class=\"fa fa-refresh\"> </i>", "</button>\n                    ", "\n\n                </div>\n            </div>\n        </div>\n    "]);
 
-  user_details_modal_templateObject5 = function _templateObject5() {
+  user_details_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject4() {
-  const data = user_details_modal_taggedTemplateLiteral(["\n        <button type=\"button\" @click=\"", "\" class=\"btn btn-danger remove-contact\">\n            <i class=\"far fa-trash-alt\"></i>", "\n        </button>\n    "]);
+function user_details_templateObject4() {
+  const data = user_details_taggedTemplateLiteral(["\n        <button type=\"button\" @click=\"", "\" class=\"btn btn-danger remove-contact\">\n            <i class=\"far fa-trash-alt\"></i>", "\n        </button>\n    "]);
 
-  user_details_modal_templateObject4 = function _templateObject4() {
+  user_details_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject3() {
-  const data = user_details_modal_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
+function user_details_templateObject3() {
+  const data = user_details_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
 
-  user_details_modal_templateObject3 = function _templateObject3() {
+  user_details_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject2() {
-  const data = user_details_modal_taggedTemplateLiteral(["\n        <hr/>\n        <ul class=\"list-group fingerprints\">\n            <li class=\"list-group-item active\">", "</li>\n            ", "\n        </ul>\n    "]);
+function user_details_templateObject2() {
+  const data = user_details_taggedTemplateLiteral(["\n        <hr/>\n        <ul class=\"list-group fingerprints\">\n            <li class=\"list-group-item active\">", "</li>\n            ", "\n        </ul>\n    "]);
 
-  user_details_modal_templateObject2 = function _templateObject2() {
+  user_details_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_templateObject() {
-  const data = user_details_modal_taggedTemplateLiteral(["\n            <li class=\"list-group-item\">\n                <form class=\"fingerprint-trust\">\n                <div class=\"btn-group btn-group-toggle\">\n                    <label class=\"btn btn--small ", "\">\n                        <input type=\"radio\" name=\"", "\" value=\"1\" ?checked=", ">", "\n                    </label>\n                    <label class=\"btn btn--small ", "\">\n                        <input type=\"radio\" name=\"", "\" value=\"-1\" ?checked=", ">", "\n                    </label>\n                </div>\n                <code class=\"fingerprint\">", "</code>\n                </form>\n            </li>\n        "]);
+function user_details_templateObject() {
+  const data = user_details_taggedTemplateLiteral(["\n            <li class=\"list-group-item\">\n                <form class=\"fingerprint-trust\">\n                <div class=\"btn-group btn-group-toggle\">\n                    <label class=\"btn btn--small ", "\">\n                        <input type=\"radio\" name=\"", "\" value=\"1\" ?checked=", ">", "\n                    </label>\n                    <label class=\"btn btn--small ", "\">\n                        <input type=\"radio\" name=\"", "\" value=\"-1\" ?checked=", ">", "\n                    </label>\n                </div>\n                <code class=\"fingerprint\">", "</code>\n                </form>\n            </li>\n        "]);
 
-  user_details_modal_templateObject = function _templateObject() {
+  user_details_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function user_details_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function user_details_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
@@ -92773,7 +97188,7 @@ const device_fingerprint = o => {
   const i18n_untrusted = i18n_('Untrusted');
 
   if (o.device.get('bundle') && o.device.get('bundle').fingerprint) {
-    return lit_html_html(user_details_modal_templateObject(), o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') !== -1, i18n_trusted, o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') === -1, i18n_untrusted, o.utils.formatFingerprint(o.device.get('bundle').fingerprint));
+    return lit_html_html(user_details_templateObject(), o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') !== -1, i18n_trusted, o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') === -1, i18n_untrusted, o.utils.formatFingerprint(o.device.get('bundle').fingerprint));
   } else {
     return '';
   }
@@ -92785,18 +97200,18 @@ const fingerprints = o => {
   const i18n_no_devices = i18n_("No OMEMO-enabled devices found");
 
   const devices = o.view.devicelist.devices;
-  return lit_html_html(user_details_modal_templateObject2(), i18n_fingerprints, devices.length ? devices.map(device => device_fingerprint(Object.assign({
+  return lit_html_html(user_details_templateObject2(), i18n_fingerprints, devices.length ? devices.map(device => device_fingerprint(Object.assign({
     device
-  }, o))) : lit_html_html(user_details_modal_templateObject3(), i18n_no_devices));
+  }, o))) : lit_html_html(user_details_templateObject3(), i18n_no_devices));
 };
 
 const remove_button = o => {
   const i18n_remove_contact = i18n_('Remove as contact');
 
-  return lit_html_html(user_details_modal_templateObject4(), o.removeContact, i18n_remove_contact);
+  return lit_html_html(user_details_templateObject4(), o.removeContact, i18n_remove_contact);
 };
 
-/* harmony default export */ var user_details_modal = (o => {
+/* harmony default export */ var user_details = (o => {
   const i18n_address = i18n_('XMPP Address');
 
   const i18n_email = i18n_('Email');
@@ -92819,79 +97234,310 @@ const remove_button = o => {
     'height': '120',
     'width': '120'
   };
-  return lit_html_html(user_details_modal_templateObject5(), o.display_name, modal_header_close_button, o.image ? lit_html_html(user_details_modal_templateObject6(), avatar(Object.assign(o, avatar_data))) : '', o.fullname ? lit_html_html(user_details_modal_templateObject7(), i18n_full_name, o.fullname) : '', i18n_address, o.jid, o.jid, o.nickname ? lit_html_html(user_details_modal_templateObject8(), i18n_nickname, o.nickname) : '', o.url ? lit_html_html(user_details_modal_templateObject9(), i18n_url, o.url, o.url) : '', o.email ? lit_html_html(user_details_modal_templateObject10(), i18n_email, o.email, o.email) : '', o.role ? lit_html_html(user_details_modal_templateObject11(), i18n_role, o.role) : '', o._converse.pluggable.plugins['converse-omemo'].enabled(o._converse) ? fingerprints(o) : '', modal_close_button, i18n_refresh, o.allow_contact_removal && o.is_roster_contact ? remove_button(o) : '');
+  return lit_html_html(user_details_templateObject5(), o.display_name, modal_header_close_button, o.image ? lit_html_html(user_details_templateObject6(), templates_avatar(Object.assign(o, avatar_data))) : '', o.fullname ? lit_html_html(user_details_templateObject7(), i18n_full_name, o.fullname) : '', i18n_address, o.jid, o.jid, o.nickname ? lit_html_html(user_details_templateObject8(), i18n_nickname, o.nickname) : '', o.url ? lit_html_html(user_details_templateObject9(), i18n_url, o.url, o.url) : '', o.email ? lit_html_html(user_details_templateObject10(), i18n_email, o.email, o.email) : '', o.role ? lit_html_html(user_details_templateObject11(), i18n_role, o.role) : '', o._converse.pluggable.plugins['converse-omemo'].enabled(o._converse) ? fingerprints(o) : '', modal_close_button, i18n_refresh, o.allow_contact_removal && o.is_roster_contact ? remove_button(o) : '');
 });
-// CONCATENATED MODULE: ./src/converse-chatview.js
-function converse_chatview_templateObject4() {
-  const data = converse_chatview_taggedTemplateLiteral(["<a href=\"#\"\n            class=\"dropdown-item ", "\"\n            @click=", "\n            title=\"", "\"><i class=\"fa ", "\"></i>", "</a>"]);
+// CONCATENATED MODULE: ./src/modals/user-details.js
 
-  converse_chatview_templateObject4 = function _templateObject4() {
+
+
+
+
+const user_details_u = converse.env.utils;
+
+function removeContact(contact) {
+  contact.removeFromRoster(() => contact.destroy(), e => {
+    e && headless_log.error(e);
+    core_api.alert('error', i18n_('Error'), [i18n_('Sorry, there was an error while trying to remove %1$s as a contact.', contact.getDisplayName())]);
+  });
+}
+
+const UserDetailsModal = modals_base.extend({
+  id: 'user-details-modal',
+  persistent: true,
+  events: {
+    'click button.refresh-contact': 'refreshContact',
+    'click .fingerprint-trust .btn input': 'toggleDeviceTrust'
+  },
+
+  initialize() {
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.model.rosterContactAdded.then(() => this.registerContactEventHandlers());
+    this.listenTo(this.model, 'change', this.render);
+    this.registerContactEventHandlers();
+    /**
+        * Triggered once the UserDetailsModal has been initialized
+        * @event _converse#userDetailsModalInitialized
+        * @type { _converse.ChatBox }
+        * @example _converse.api.listen.on('userDetailsModalInitialized', chatbox => { ... });
+        */
+
+    core_api.trigger('userDetailsModalInitialized', this.model);
+  },
+
+  toHTML() {
+    var _this$model;
+
+    const vcard = (_this$model = this.model) === null || _this$model === void 0 ? void 0 : _this$model.vcard;
+    const vcard_json = vcard ? vcard.toJSON() : {};
+    return user_details(Object.assign(this.model.toJSON(), vcard_json, {
+      '_converse': core_converse,
+      'allow_contact_removal': core_api.settings.get('allow_contact_removal'),
+      'display_name': this.model.getDisplayName(),
+      'is_roster_contact': this.model.contact !== undefined,
+      'removeContact': ev => this.removeContact(ev),
+      'view': this,
+      'utils': user_details_u
+    }));
+  },
+
+  registerContactEventHandlers() {
+    if (this.model.contact !== undefined) {
+      this.listenTo(this.model.contact, 'change', this.render);
+      this.listenTo(this.model.contact.vcard, 'change', this.render);
+      this.model.contact.on('destroy', () => {
+        delete this.model.contact;
+        this.render();
+      });
+    }
+  },
+
+  async refreshContact(ev) {
+    if (ev && ev.preventDefault) {
+      ev.preventDefault();
+    }
+
+    const refresh_icon = this.el.querySelector('.fa-refresh');
+    user_details_u.addClass('fa-spin', refresh_icon);
+
+    try {
+      await core_api.vcard.update(this.model.contact.vcard, true);
+    } catch (e) {
+      headless_log.fatal(e);
+      this.alert(i18n_('Sorry, something went wrong while trying to refresh'), 'danger');
+    }
+
+    user_details_u.removeClass('fa-spin', refresh_icon);
+  },
+
+  removeContact(ev) {
+    if (ev && ev.preventDefault) {
+      ev.preventDefault();
+    }
+
+    if (!core_api.settings.get('allow_contact_removal')) {
+      return;
+    }
+
+    const result = confirm(i18n_("Are you sure you want to remove this contact?"));
+
+    if (result === true) {
+      // XXX: The `dismissHandler` in bootstrap.native tries to
+      // reference the remove button after it's been cleared from
+      // the DOM, so we delay removing the contact to give it time.
+      setTimeout(() => removeContact(this.model.contact), 1);
+      this.modal.hide();
+    }
+  }
+
+});
+core_converse.UserDetailsModal = UserDetailsModal;
+/* harmony default export */ var modals_user_details = (UserDetailsModal);
+// CONCATENATED MODULE: ./src/templates/chatbox.js
+function chatbox_templateObject() {
+  const data = chatbox_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head chat-head-chatbox row no-gutters\"></div>\n        <div class=\"chat-body\">\n            <div class=\"chat-content ", "\" aria-live=\"polite\">\n                <div class=\"chat-content__messages\" @scroll=", "></div>\n                <div class=\"chat-content__help\"></div>\n            </div>\n            <div class=\"bottom-panel\">\n                <div class=\"message-form-container\">\n            </div>\n        </div>\n    </div>\n"]);
+
+  chatbox_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function chatbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+/* harmony default export */ var templates_chatbox = (o => lit_html_html(chatbox_templateObject(), o.show_send_button ? 'chat-content-sendbutton' : '', o.markScrolled));
+// CONCATENATED MODULE: ./src/templates/chatbox_head.js
+function chatbox_head_templateObject7() {
+  const data = chatbox_head_taggedTemplateLiteral(["<p class=\"chat-head__desc\">", "</p>"]);
+
+  chatbox_head_templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function converse_chatview_templateObject3() {
-  const data = converse_chatview_taggedTemplateLiteral(["<a href=\"#\"\n            class=\"chatbox-btn ", " fa ", "\"\n            @click=", "\n            title=\"", "\"></a>"]);
+function chatbox_head_templateObject6() {
+  const data = chatbox_head_taggedTemplateLiteral(["<converse-dropdown .items=", "></converse-dropdown>"]);
 
-  converse_chatview_templateObject3 = function _templateObject3() {
+  chatbox_head_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function converse_chatview_templateObject2() {
-  const data = converse_chatview_taggedTemplateLiteral(["\n                    <converse-chat-content\n                        .chatview=", "\n                        .messages=", "\n                        notifications=", ">\n                    </converse-chat-content>"]);
+function chatbox_head_templateObject5() {
+  const data = chatbox_head_taggedTemplateLiteral(["<a class=\"user show-msg-author-modal\" @click=", ">", "</a>"]);
 
-  converse_chatview_templateObject2 = function _templateObject2() {
+  chatbox_head_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function converse_chatview_templateObject() {
-  const data = converse_chatview_taggedTemplateLiteral(["<converse-chat-help\n                .model=", "\n                .messages=", "\n                ?hidden=", "\n                type=\"info\"\n                chat_type=\"", "\"></converse-chat-help>"]);
+function chatbox_head_templateObject4() {
+  const data = chatbox_head_taggedTemplateLiteral(["<a class=\"show-msg-author-modal\" @click=", ">", "</a>"]);
 
-  converse_chatview_templateObject = function _templateObject() {
+  chatbox_head_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function converse_chatview_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function chatbox_head_templateObject3() {
+  const data = chatbox_head_taggedTemplateLiteral(["<div class=\"chatbox-navback\"><i class=\"fa fa-arrow-left\"></i></div>"]);
 
-/**
- * @module converse-chatview
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- */
+  chatbox_head_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function chatbox_head_templateObject2() {
+  const data = chatbox_head_taggedTemplateLiteral(["\n        <div class=\"chatbox-title ", "\">\n            <div class=\"chatbox-title--row\">\n                ", "\n                ", "\n                <div class=\"chatbox-title__text\" title=\"", "\">\n                    ", "\n                </div>\n            </div>\n            <div class=\"chatbox-title__buttons row no-gutters\">\n                ", "\n                ", "\n            </div>\n        </div>\n        ", "\n    "]);
+
+  chatbox_head_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function chatbox_head_templateObject() {
+  const data = chatbox_head_taggedTemplateLiteral(["<span class=\"mr-2\">", "</span>"]);
 
+  chatbox_head_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function chatbox_head_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
 
+/* harmony default export */ var chatbox_head = (o => {
+  const tpl_standalone_btns = o => o.standalone_btns.reverse().map(b => until(b, ''));
 
+  const avatar = lit_html_html(chatbox_head_templateObject(), renderAvatar(o.avatar_data));
+  return lit_html_html(chatbox_head_templateObject2(), o.status ? '' : "chatbox-title--no-desc", !core_converse.api.settings.get("singleton") ? lit_html_html(chatbox_head_templateObject3()) : '', o.type !== core_converse.HEADLINES_TYPE ? lit_html_html(chatbox_head_templateObject4(), o.showUserDetailsModal, avatar) : '', o.jid, o.type !== core_converse.HEADLINES_TYPE ? lit_html_html(chatbox_head_templateObject5(), o.showUserDetailsModal, o.display_name) : o.display_name, o.dropdown_btns.length ? lit_html_html(chatbox_head_templateObject6(), o.dropdown_btns) : '', o.standalone_btns.length ? tpl_standalone_btns(o) : '', o.status ? lit_html_html(chatbox_head_templateObject7(), o.status) : '');
+});
+// CONCATENATED MODULE: ./src/templates/chatbox_message_form.js
+function chatbox_message_form_templateObject() {
+  const data = chatbox_message_form_taggedTemplateLiteral(["\n    <div class=\"new-msgs-indicator hidden\">\u25BC ", " \u25BC</div>\n    <form class=\"setNicknameButtonForm hidden\">\n        <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"Join\"/>\n    </form>\n    <form class=\"sendXMPPMessage\">\n        <span class=\"chat-toolbar no-text-select\"></span>\n        <input type=\"text\" placeholder=\"", "\" value=\"", "\" class=\"", " spoiler-hint\"/>\n\n        <div class=\"suggestion-box\">\n            <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n            <textarea\n                type=\"text\"\n                class=\"chat-textarea suggestion-box__input\n                    ", "\n                    ", "\"\n                placeholder=\"", "\">", "</textarea>\n            <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n        </div>\n    </form>\n"]);
 
+  chatbox_message_form_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function chatbox_message_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+/* harmony default export */ var chatbox_message_form = (o => lit_html_html(chatbox_message_form_templateObject(), o.unread_msgs, o.label_spoiler_hint || '', o.hint_value || '', o.composing_spoiler ? '' : 'hidden', o.show_send_button ? 'chat-textarea-send-button' : '', o.composing_spoile ? 'spoiler' : '', o.label_message, o.message_value || ''));
+// CONCATENATED MODULE: ./src/templates/toolbar.js
+function templates_toolbar_templateObject() {
+  const data = templates_toolbar_taggedTemplateLiteral(["\n        <converse-chat-toolbar\n            .chatview=", "\n            .model=", "\n            ?composing_spoiler=\"", "\"\n            ?hidden_occupants=\"", "\"\n            ?is_groupchat=\"", "\"\n            ?show_call_button=\"", "\"\n            ?show_emoji_button=\"", "\"\n            ?show_occupants_toggle=\"", "\"\n            ?show_send_button=\"", "\"\n            ?show_spoiler_button=\"", "\"\n            ?show_toolbar=\"", "\"\n            message_limit=\"", "\"\n        ></converse-chat-toolbar>\n    "]);
+
+  templates_toolbar_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function templates_toolbar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
+/* harmony default export */ var toolbar = (o => {
+  const message_limit = core_api.settings.get('message_limit');
+  const show_call_button = core_api.settings.get('visible_toolbar_buttons').call;
+  const show_emoji_button = core_api.settings.get('visible_toolbar_buttons').emoji;
+  const show_send_button = core_api.settings.get('show_send_button');
+  const show_spoiler_button = core_api.settings.get('visible_toolbar_buttons').spoiler;
+  const show_toolbar = core_api.settings.get('show_toolbar');
+  return lit_html_html(templates_toolbar_templateObject(), o.chatview, o.model, o.composing_spoiler, o.hidden_occupants, o.is_groupchat, show_call_button, show_emoji_button, o.show_occupants_toggle, show_send_button, show_spoiler_button, show_toolbar, message_limit);
+});
+// CONCATENATED MODULE: ./src/plugins/chatview/view.js
+function view_templateObject4() {
+  const data = view_taggedTemplateLiteral(["\n            <a href=\"#\" class=\"dropdown-item ", "\" @click=", " title=\"", "\"\n                ><i class=\"fa ", "\"></i>", "</a\n            >\n        "]);
 
+  view_templateObject4 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function view_templateObject3() {
+  const data = view_taggedTemplateLiteral(["\n            <a\n                href=\"#\"\n                class=\"chatbox-btn ", " fa ", "\"\n                @click=", "\n                title=\"", "\"\n            ></a>\n        "]);
+
+  view_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function view_templateObject2() {
+  const data = view_taggedTemplateLiteral(["\n                    <converse-chat-content .chatview=", " .messages=", " notifications=", ">\n                    </converse-chat-content>\n                "]);
+
+  view_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function view_templateObject() {
+  const data = view_taggedTemplateLiteral(["\n                <converse-chat-help\n                    .model=", "\n                    .messages=", "\n                    ?hidden=", "\n                    type=\"info\"\n                    chat_type=\"", "\"\n                ></converse-chat-help>\n            "]);
+
+  view_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function view_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+const chatview_view_u = converse.env.utils;
 const {
-  Strophe: converse_chatview_Strophe,
-  dayjs: converse_chatview_dayjs
+  dayjs: view_dayjs
 } = converse.env;
-const converse_chatview_u = converse.env.utils;
 /**
  * The View of an open/ongoing chat conversation.
  * @class
@@ -92899,7 +97545,7 @@ const converse_chatview_u = converse.env.utils;
  * @memberOf _converse
  */
 
-const ChatBoxView = view_View.extend({
+const ChatBoxView = View.extend({
   length: 200,
   className: 'chatbox hidden',
   is_chatroom: false,
@@ -92944,8 +97590,10 @@ const ChatBoxView = view_View.extend({
     this.listenTo(this.model.messages, 'reset', this.renderChatHistory);
     this.listenTo(this.model.notifications, 'change', this.renderNotifications);
     this.listenTo(this.model, 'change:show_help_messages', this.renderHelpMessages);
-    await this.updateAfterMessagesFetched();
+    await this.model.messages.fetched;
+    this.insertIntoDOM();
     this.model.maybeShow();
+    this.scrollDown();
     /**
      * Triggered once the {@link _converse.ChatBoxView} has been initialized
      * @event _converse#chatBoxViewInitialized
@@ -92953,7 +97601,7 @@ const ChatBoxView = view_View.extend({
      * @example _converse.api.listen.on('chatBoxViewInitialized', view => { ... });
      */
 
-    converse_core_api.trigger('chatBoxViewInitialized', this);
+    core_api.trigger('chatBoxViewInitialized', this);
   },
 
   initDebounced() {
@@ -92961,7 +97609,7 @@ const ChatBoxView = view_View.extend({
     this.debouncedScrollDown = lodash_es_debounce(this.scrollDown, 100); // For tests that use Jasmine.Clock we want to turn of
     // debouncing, since setTimeout breaks.
 
-    if (converse_core_api.settings.get('debounced_content_rendering')) {
+    if (core_api.settings.get('debounced_content_rendering')) {
       this.renderChatHistory = lodash_es_debounce(() => this.renderChatContent(false), 100);
       this.renderNotifications = lodash_es_debounce(() => this.renderChatContent(true), 100);
     } else {
@@ -92989,7 +97637,7 @@ const ChatBoxView = view_View.extend({
   onMessageAdded(message) {
     this.renderChatHistory();
 
-    if (converse_chatview_u.isNewMessage(message)) {
+    if (chatview_view_u.isNewMessage(message)) {
       if (message.get('sender') === 'me') {
         // We remove the "scrolled" flag so that the chat area
         // gets scrolled down. We always want to scroll down
@@ -93003,11 +97651,11 @@ const ChatBoxView = view_View.extend({
   },
 
   getNotifications() {
-    if (this.model.notifications.get('chat_state') === converse_core_converse.COMPOSING) {
+    if (this.model.notifications.get('chat_state') === core_converse.COMPOSING) {
       return i18n_('%1$s is typing', this.model.getDisplayName());
-    } else if (this.model.notifications.get('chat_state') === converse_core_converse.PAUSED) {
+    } else if (this.model.notifications.get('chat_state') === core_converse.PAUSED) {
       return i18n_('%1$s has stopped typing', this.model.getDisplayName());
-    } else if (this.model.notifications.get('chat_state') === converse_core_converse.GONE) {
+    } else if (this.model.notifications.get('chat_state') === core_converse.GONE) {
       return i18n_('%1$s has gone away', this.model.getDisplayName());
     } else {
       return '';
@@ -93019,13 +97667,13 @@ const ChatBoxView = view_View.extend({
   },
 
   renderHelpMessages() {
-    render_render(lit_html_html(converse_chatview_templateObject(), this.model, this.getHelpMessages(), !this.model.get('show_help_messages'), this.model.get('type')), this.help_container);
+    render_render(lit_html_html(view_templateObject(), this.model, this.getHelpMessages(), !this.model.get('show_help_messages'), this.model.get('type')), this.help_container);
   },
 
   renderChatContent(msgs_by_ref = false) {
     if (!this.tpl_chat_content) {
       this.tpl_chat_content = o => {
-        return lit_html_html(converse_chatview_templateObject2(), this, o.messages, o.notifications);
+        return lit_html_html(view_templateObject2(), this, o.messages, o.notifications);
       };
     }
 
@@ -93038,7 +97686,7 @@ const ChatBoxView = view_View.extend({
   },
 
   renderToolbar() {
-    if (!converse_core_api.settings.get('show_toolbar')) {
+    if (!core_api.settings.get('show_toolbar')) {
       return this;
     }
 
@@ -93054,7 +97702,7 @@ const ChatBoxView = view_View.extend({
      * @example _converse.api.listen.on('renderToolbar', view => { ... });
      */
 
-    converse_core_api.trigger('renderToolbar', this);
+    core_api.trigger('renderToolbar', this);
     return this;
   },
 
@@ -93067,8 +97715,8 @@ const ChatBoxView = view_View.extend({
       'label_message': this.model.get('composing_spoiler') ? i18n_('Hidden message') : i18n_('Message'),
       'label_spoiler_hint': i18n_('Optional hint'),
       'message_value': (_this$el$querySelecto2 = this.el.querySelector('.chat-textarea')) === null || _this$el$querySelecto2 === void 0 ? void 0 : _this$el$querySelecto2.value,
-      'show_send_button': converse_core_api.settings.get('show_send_button'),
-      'show_toolbar': converse_core_api.settings.get('show_toolbar'),
+      'show_send_button': core_api.settings.get('show_send_button'),
+      'show_toolbar': core_api.settings.get('show_toolbar'),
       'unread_msgs': i18n_('You have unread messages')
     })), form_container);
     this.el.addEventListener('focusin', ev => this.emitFocused(ev));
@@ -93077,23 +97725,18 @@ const ChatBoxView = view_View.extend({
   },
 
   showControlBox() {
-    // Used in mobile view, to navigate back to the controlbox
-    const view = converse_core_converse.chatboxviews.get('controlbox');
+    var _converse$chatboxview;
 
-    view.show();
+    // Used in mobile view, to navigate back to the controlbox
+    (_converse$chatboxview = core_converse.chatboxviews.get('controlbox')) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.show();
     this.hide();
   },
 
   showUserDetailsModal(ev) {
     ev.preventDefault();
-
-    if (this.user_details_modal === undefined) {
-      this.user_details_modal = new converse_core_converse.UserDetailsModal({
-        model: this.model
-      });
-    }
-
-    this.user_details_modal.show(ev);
+    core_api.modal.show(modals_user_details, {
+      model: this.model
+    }, ev);
   },
 
   onDragOver(evt) {
@@ -93118,12 +97761,12 @@ const ChatBoxView = view_View.extend({
 
   async getHeadingStandaloneButton(promise_or_data) {
     const data = await promise_or_data;
-    return lit_html_html(converse_chatview_templateObject3(), data.a_class, data.icon_class, data.handler, data.i18n_title);
+    return lit_html_html(view_templateObject3(), data.a_class, data.icon_class, data.handler, data.i18n_title);
   },
 
   async getHeadingDropdownItem(promise_or_data) {
     const data = await promise_or_data;
-    return lit_html_html(converse_chatview_templateObject4(), data.a_class, data.handler, data.i18n_title, data.icon_class, data.i18n_text);
+    return lit_html_html(view_templateObject4(), data.a_class, data.handler, data.i18n_title, data.icon_class, data.i18n_text);
   },
 
   async generateHeadingTemplate() {
@@ -93131,14 +97774,24 @@ const ChatBoxView = view_View.extend({
 
     const vcard = (_this$model = this.model) === null || _this$model === void 0 ? void 0 : _this$model.vcard;
     const vcard_json = vcard ? vcard.toJSON() : {};
+
+    const i18n_profile = i18n_("The User's Profile Image");
+
+    const avatar_data = Object.assign({
+      'alt_text': i18n_profile,
+      'extra_classes': '',
+      'height': 40,
+      'width': 40
+    }, vcard_json);
     const heading_btns = await this.getHeadingButtons();
     const standalone_btns = heading_btns.filter(b => b.standalone);
     const dropdown_btns = heading_btns.filter(b => !b.standalone);
-    return chatbox_head(Object.assign(vcard_json, this.model.toJSON(), {
-      '_converse': converse_core_converse,
+    return chatbox_head(Object.assign(this.model.toJSON(), {
+      avatar_data,
+      'display_name': this.model.getDisplayName(),
       'dropdown_btns': dropdown_btns.map(b => this.getHeadingDropdownItem(b)),
-      'standalone_btns': standalone_btns.map(b => this.getHeadingStandaloneButton(b)),
-      'display_name': this.model.getDisplayName()
+      'showUserDetailsModal': ev => this.showUserDetailsModal(ev),
+      'standalone_btns': standalone_btns.map(b => this.getHeadingStandaloneButton(b))
     }));
   },
 
@@ -93157,10 +97810,10 @@ const ChatBoxView = view_View.extend({
       'i18n_title': i18n_('See more information about this person'),
       'icon_class': 'fa-id-card',
       'name': 'details',
-      'standalone': converse_core_api.settings.get("view_mode") === 'overlayed'
+      'standalone': core_api.settings.get('view_mode') === 'overlayed'
     }];
 
-    if (!converse_core_api.settings.get("singleton")) {
+    if (!core_api.settings.get('singleton')) {
       buttons.push({
         'a_class': 'close-chatbox-button',
         'handler': ev => this.close(ev),
@@ -93168,16 +97821,28 @@ const ChatBoxView = view_View.extend({
         'i18n_title': i18n_('Close and end this conversation'),
         'icon_class': 'fa-times',
         'name': 'close',
-        'standalone': converse_core_api.settings.get("view_mode") === 'overlayed'
+        'standalone': core_api.settings.get('view_mode') === 'overlayed'
       });
     }
     /**
      * *Hook* which allows plugins to add more buttons to a chat's heading.
      * @event _converse#getHeadingButtons
+     * @example
+     *  api.listen.on('getHeadingButtons', (view, buttons) => {
+     *      buttons.push({
+     *          'i18n_title': __('Foo'),
+     *          'i18n_text': __('Foo Bar'),
+     *          'handler': ev => alert('Foo!'),
+     *          'a_class': 'toggle-foo',
+     *          'icon_class': 'fa-foo',
+     *          'name': 'foo'
+     *      });
+     *      return buttons;
+     *  });
      */
 
 
-    return converse_core_converse.api.hook('getHeadingButtons', this, buttons);
+    return core_converse.api.hook('getHeadingButtons', this, buttons);
   },
 
   getToolbarOptions() {
@@ -93185,22 +97850,6 @@ const ChatBoxView = view_View.extend({
     return {};
   },
 
-  async updateAfterMessagesFetched() {
-    await this.model.messages.fetched;
-    this.renderChatContent();
-    this.insertIntoDOM();
-    this.scrollDown();
-    /**
-     * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
-     * `sessionStorage` but **NOT** from the server.
-     * @event _converse#afterMessagesFetched
-     * @type {_converse.ChatBoxView | _converse.ChatRoomView}
-     * @example _converse.api.listen.on('afterMessagesFetched', view => { ... });
-     */
-
-    converse_core_api.trigger('afterMessagesFetched', this.model);
-  },
-
   /**
    * Scrolls the chat down, *if* appropriate.
    *
@@ -93211,7 +97860,9 @@ const ChatBoxView = view_View.extend({
    *  - An optional message that serves as the cause for needing to scroll down.
    */
   maybeScrollDown(message) {
-    if (message.get("sender") === "me" && !message.get('is_archived') || !this.model.isHidden()) {
+    const new_own_msg = !(message === null || message === void 0 ? void 0 : message.get('is_archived')) && (message === null || message === void 0 ? void 0 : message.get('sender')) === 'me';
+
+    if ((new_own_msg || !this.model.get('scrolled')) && !this.model.isHidden()) {
       this.debouncedScrollDown();
     }
   },
@@ -93230,7 +97881,7 @@ const ChatBoxView = view_View.extend({
     ev === null || ev === void 0 ? void 0 : (_ev$stopPropagation = ev.stopPropagation) === null || _ev$stopPropagation === void 0 ? void 0 : _ev$stopPropagation.call(ev);
 
     if (this.model.get('scrolled')) {
-      converse_chatview_u.safeSave(this.model, {
+      chatview_view_u.safeSave(this.model, {
         'scrolled': false,
         'scrollTop': null
       });
@@ -93264,7 +97915,7 @@ const ChatBoxView = view_View.extend({
   },
 
   insertIntoDOM() {
-    converse_core_converse.chatboxviews.insertRowColumn(this.el);
+    core_converse.chatboxviews.insertRowColumn(this.el);
     /**
      * Triggered once the _converse.ChatBoxView has been inserted into the DOM
      * @event _converse#chatBoxInsertedIntoDOM
@@ -93273,13 +97924,13 @@ const ChatBoxView = view_View.extend({
      */
 
 
-    converse_core_api.trigger('chatBoxInsertedIntoDOM', this);
+    core_api.trigger('chatBoxInsertedIntoDOM', this);
     return this;
   },
 
   addSpinner(append = false) {
     if (this.el.querySelector('.spinner') === null) {
-      const el = converse_chatview_u.getElementFromTemplateResult(spinner());
+      const el = chatview_view_u.getElementFromTemplateResult(spinner());
 
       if (append) {
         this.content.insertAdjacentElement('beforeend', el);
@@ -93291,7 +97942,7 @@ const ChatBoxView = view_View.extend({
   },
 
   clearSpinner() {
-    this.content.querySelectorAll('.spinner').forEach(converse_chatview_u.removeElement);
+    this.content.querySelectorAll('.spinner').forEach(chatview_view_u.removeElement);
   },
 
   onStatusMessageChanged(item) {
@@ -93305,20 +97956,12 @@ const ChatBoxView = view_View.extend({
      * @example _converse.api.listen.on('contactStatusMessageChanged', obj => { ... });
      */
 
-    converse_core_api.trigger('contactStatusMessageChanged', {
+    core_api.trigger('contactStatusMessageChanged', {
       'contact': item.attributes,
       'message': item.get('status')
     });
   },
 
-  shouldShowOnTextMessage() {
-    if (converse_core_converse.isUniView()) {
-      return false;
-    } else {
-      return !converse_chatview_u.isVisible(this.el);
-    }
-  },
-
   /**
    * Given a message element, determine wether it should be
    * marked as a followup message to the previous element.
@@ -93336,35 +97979,35 @@ const ChatBoxView = view_View.extend({
   markFollowups(el) {
     const from = el.getAttribute('data-from');
     const previous_el = el.previousElementSibling;
-    const date = converse_chatview_dayjs(el.getAttribute('data-isodate'));
+    const date = view_dayjs(el.getAttribute('data-isodate'));
     const next_el = el.nextElementSibling;
 
-    if (!converse_chatview_u.hasClass('chat-msg--action', el) && !converse_chatview_u.hasClass('chat-msg--action', previous_el) && !converse_chatview_u.hasClass('chat-info', el) && !converse_chatview_u.hasClass('chat-info', previous_el) && previous_el.getAttribute('data-from') === from && date.isBefore(converse_chatview_dayjs(previous_el.getAttribute('data-isodate')).add(10, 'minutes')) && el.getAttribute('data-encrypted') === previous_el.getAttribute('data-encrypted')) {
-      converse_chatview_u.addClass('chat-msg--followup', el);
+    if (!chatview_view_u.hasClass('chat-msg--action', el) && !chatview_view_u.hasClass('chat-msg--action', previous_el) && !chatview_view_u.hasClass('chat-info', el) && !chatview_view_u.hasClass('chat-info', previous_el) && previous_el.getAttribute('data-from') === from && date.isBefore(view_dayjs(previous_el.getAttribute('data-isodate')).add(10, 'minutes')) && el.getAttribute('data-encrypted') === previous_el.getAttribute('data-encrypted')) {
+      chatview_view_u.addClass('chat-msg--followup', el);
     }
 
     if (!next_el) {
       return;
     }
 
-    if (!converse_chatview_u.hasClass('chat-msg--action', el) && converse_chatview_u.hasClass('chat-info', el) && next_el.getAttribute('data-from') === from && converse_chatview_dayjs(next_el.getAttribute('data-isodate')).isBefore(date.add(10, 'minutes')) && el.getAttribute('data-encrypted') === next_el.getAttribute('data-encrypted')) {
-      converse_chatview_u.addClass('chat-msg--followup', next_el);
+    if (!chatview_view_u.hasClass('chat-msg--action', el) && chatview_view_u.hasClass('chat-info', el) && next_el.getAttribute('data-from') === from && view_dayjs(next_el.getAttribute('data-isodate')).isBefore(date.add(10, 'minutes')) && el.getAttribute('data-encrypted') === next_el.getAttribute('data-encrypted')) {
+      chatview_view_u.addClass('chat-msg--followup', next_el);
     } else {
-      converse_chatview_u.removeClass('chat-msg--followup', next_el);
+      chatview_view_u.removeClass('chat-msg--followup', next_el);
     }
   },
 
   parseMessageForCommands(text) {
-    const match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/);
+    const match = text.replace(/^\s*/, '').match(/^\/(.*)\s*$/);
 
     if (match) {
-      if (match[1] === "clear") {
+      if (match[1] === 'clear') {
         this.clearMessages();
         return true;
-      } else if (match[1] === "close") {
+      } else if (match[1] === 'close') {
         this.close();
         return true;
-      } else if (match[1] === "help") {
+      } else if (match[1] === 'help') {
         this.model.set({
           'show_help_messages': true
         });
@@ -93380,15 +98023,15 @@ const ChatBoxView = view_View.extend({
     const textarea = this.el.querySelector('.chat-textarea');
     const message_text = textarea.value.trim();
 
-    if (converse_core_api.settings.get('message_limit') && message_text.length > converse_core_api.settings.get('message_limit') || !message_text.replace(/\s/g, '').length) {
+    if (core_api.settings.get('message_limit') && message_text.length > core_api.settings.get('message_limit') || !message_text.replace(/\s/g, '').length) {
       return;
     }
 
-    if (!converse_core_converse.connection.authenticated) {
+    if (!core_converse.connection.authenticated) {
       const err_msg = i18n_('Sorry, the connection has been lost, and your message could not be sent');
 
-      converse_core_api.alert('error', i18n_('Error'), err_msg);
-      converse_core_api.connection.reconnect();
+      core_api.alert('error', i18n_('Error'), err_msg);
+      core_api.connection.reconnect();
       return;
     }
 
@@ -93400,7 +98043,7 @@ const ChatBoxView = view_View.extend({
       spoiler_hint = hint_el.value;
     }
 
-    converse_chatview_u.addClass('disabled', textarea);
+    chatview_view_u.addClass('disabled', textarea);
     textarea.setAttribute('disabled', 'disabled');
     (_this$el$querySelecto3 = this.el.querySelector('converse-emoji-dropdown')) === null || _this$el$querySelecto3 === void 0 ? void 0 : _this$el$querySelecto3.hideMenu();
     const is_command = this.parseMessageForCommands(message_text);
@@ -93409,7 +98052,7 @@ const ChatBoxView = view_View.extend({
     if (is_command || message) {
       hint_el.value = '';
       textarea.value = '';
-      converse_chatview_u.removeClass('correcting', textarea);
+      chatview_view_u.removeClass('correcting', textarea);
       textarea.style.height = 'auto';
       this.updateCharCounter(textarea.value);
     }
@@ -93421,41 +98064,41 @@ const ChatBoxView = view_View.extend({
        * @type { _converse.Message }
        * @example _converse.api.listen.on('messageSend', message => { ... });
        */
-      converse_core_api.trigger('messageSend', message);
+      core_api.trigger('messageSend', message);
     }
 
-    if (converse_core_api.settings.get("view_mode") === 'overlayed') {
+    if (core_api.settings.get('view_mode') === 'overlayed') {
       // XXX: Chrome flexbug workaround. The .chat-content area
       // doesn't resize when the textarea is resized to its original size.
       this.msgs_container.parentElement.style.display = 'none';
     }
 
     textarea.removeAttribute('disabled');
-    converse_chatview_u.removeClass('disabled', textarea);
+    chatview_view_u.removeClass('disabled', textarea);
 
-    if (converse_core_api.settings.get("view_mode") === 'overlayed') {
+    if (core_api.settings.get('view_mode') === 'overlayed') {
       // XXX: Chrome flexbug workaround.
       this.msgs_container.parentElement.style.display = '';
     } // Suppress events, otherwise superfluous CSN gets set
     // immediately after the message, causing rate-limiting issues.
 
 
-    this.model.setChatState(converse_core_converse.ACTIVE, {
+    this.model.setChatState(core_converse.ACTIVE, {
       'silent': true
     });
     textarea.focus();
   },
 
   updateCharCounter(chars) {
-    if (converse_core_api.settings.get('message_limit')) {
+    if (core_api.settings.get('message_limit')) {
       const message_limit = this.el.querySelector('.message-limit');
-      const counter = converse_core_api.settings.get('message_limit') - chars.length;
+      const counter = core_api.settings.get('message_limit') - chars.length;
       message_limit.textContent = counter;
 
       if (counter < 1) {
-        converse_chatview_u.addClass('error', message_limit);
+        chatview_view_u.addClass('error', message_limit);
       } else {
-        converse_chatview_u.removeClass('error', message_limit);
+        chatview_view_u.removeClass('error', message_limit);
       }
     }
   },
@@ -93519,7 +98162,7 @@ const ChatBoxView = view_View.extend({
 
     if (!ev.shiftKey && !ev.altKey && !ev.metaKey) {
       if (ev.keyCode === converse.keycodes.TAB) {
-        const value = converse_chatview_u.getCurrentWord(ev.target, null, /(:.*?:)/g);
+        const value = chatview_view_u.getCurrentWord(ev.target, null, /(:.*?:)/g);
 
         if (value.startsWith(':') && this.autocompleteInPicker(ev.target, value)) {
           ev.preventDefault();
@@ -93535,10 +98178,10 @@ const ChatBoxView = view_View.extend({
       } else if (ev.keyCode === converse.keycodes.UP_ARROW && !ev.target.selectionEnd) {
         const textarea = this.el.querySelector('.chat-textarea');
 
-        if (!textarea.value || converse_chatview_u.hasClass('correcting', textarea)) {
+        if (!textarea.value || chatview_view_u.hasClass('correcting', textarea)) {
           return this.editEarlierMessage();
         }
-      } else if (ev.keyCode === converse.keycodes.DOWN_ARROW && ev.target.selectionEnd === ev.target.value.length && converse_chatview_u.hasClass('correcting', this.el.querySelector('.chat-textarea'))) {
+      } else if (ev.keyCode === converse.keycodes.DOWN_ARROW && ev.target.selectionEnd === ev.target.value.length && chatview_view_u.hasClass('correcting', this.el.querySelector('.chat-textarea'))) {
         return this.editLaterMessage();
       }
     }
@@ -93547,10 +98190,10 @@ const ChatBoxView = view_View.extend({
       return;
     }
 
-    if (this.model.get('chat_state') !== converse_core_converse.COMPOSING) {
+    if (this.model.get('chat_state') !== core_converse.COMPOSING) {
       // Set chat state to composing if keyCode is not a forward-slash
       // (which would imply an internal command and not a message).
-      this.model.setChatState(converse_core_converse.COMPOSING);
+      this.model.setChatState(core_converse.COMPOSING);
     }
   },
 
@@ -93581,15 +98224,15 @@ const ChatBoxView = view_View.extend({
       return headless_log.error("onMessageRetractButtonClicked called for someone else's message!");
     }
 
-    const retraction_warning = i18n_("Be aware that other XMPP/Jabber clients (and servers) may " + "not yet support retractions and that this message may not " + "be removed everywhere.");
+    const retraction_warning = i18n_('Be aware that other XMPP/Jabber clients (and servers) may ' + 'not yet support retractions and that this message may not ' + 'be removed everywhere.');
 
     const messages = [i18n_('Are you sure you want to retract this message?')];
 
-    if (converse_core_api.settings.get('show_retraction_warning')) {
+    if (core_api.settings.get('show_retraction_warning')) {
       messages[1] = retraction_warning;
     }
 
-    const result = await converse_core_api.confirm(i18n_('Confirm'), messages);
+    const result = await core_api.confirm(i18n_('Confirm'), messages);
 
     if (result) {
       this.model.retractOwnMessage(message);
@@ -93603,7 +98246,7 @@ const ChatBoxView = view_View.extend({
     const unsent_text = (_this$el$querySelecto4 = this.el.querySelector('.chat-textarea')) === null || _this$el$querySelecto4 === void 0 ? void 0 : _this$el$querySelecto4.value;
 
     if (unsent_text && (!currently_correcting || currently_correcting.get('message') !== unsent_text)) {
-      if (!confirm(i18n_("You have an unsent message which will be lost if you continue. Are you sure?"))) {
+      if (!confirm(i18n_('You have an unsent message which will be lost if you continue. Are you sure?'))) {
         return;
       }
     }
@@ -93611,7 +98254,7 @@ const ChatBoxView = view_View.extend({
     if (currently_correcting !== message) {
       currently_correcting === null || currently_correcting === void 0 ? void 0 : currently_correcting.save('correcting', false);
       message.save('correcting', true);
-      this.insertIntoTextArea(converse_chatview_u.prefixMentions(message), true, true);
+      this.insertIntoTextArea(chatview_view_u.prefixMentions(message), true, true);
     } else {
       message.save('correcting', false);
       this.insertIntoTextArea('', true, false);
@@ -93637,7 +98280,7 @@ const ChatBoxView = view_View.extend({
     }
 
     if (message) {
-      this.insertIntoTextArea(converse_chatview_u.prefixMentions(message), true, true);
+      this.insertIntoTextArea(chatview_view_u.prefixMentions(message), true, true);
       message.save('correcting', true);
     } else {
       this.insertIntoTextArea('', true, false);
@@ -93665,7 +98308,7 @@ const ChatBoxView = view_View.extend({
     message = message || this.getOwnMessages().reverse().find(m => m.get('editable'));
 
     if (message) {
-      this.insertIntoTextArea(converse_chatview_u.prefixMentions(message), true, true);
+      this.insertIntoTextArea(chatview_view_u.prefixMentions(message), true, true);
       message.save('correcting', true);
     }
   },
@@ -93684,7 +98327,7 @@ const ChatBoxView = view_View.extend({
       ev.preventDefault();
     }
 
-    const result = confirm(i18n_("Are you sure you want to clear the messages from this conversation?"));
+    const result = confirm(i18n_('Are you sure you want to clear the messages from this conversation?'));
 
     if (result === true) {
       await this.model.clearMessages();
@@ -93709,9 +98352,9 @@ const ChatBoxView = view_View.extend({
     const textarea = this.el.querySelector('.chat-textarea');
 
     if (correcting) {
-      converse_chatview_u.addClass('correcting', textarea);
+      chatview_view_u.addClass('correcting', textarea);
     } else {
-      converse_chatview_u.removeClass('correcting', textarea);
+      chatview_view_u.removeClass('correcting', textarea);
     }
 
     if (replace) {
@@ -93731,7 +98374,7 @@ const ChatBoxView = view_View.extend({
     }
 
     this.updateCharCounter(textarea.value);
-    converse_chatview_u.placeCaretAtEnd(textarea);
+    chatview_view_u.placeCaretAtEnd(textarea);
   },
 
   onPresenceChanged(item) {
@@ -93739,7 +98382,7 @@ const ChatBoxView = view_View.extend({
     const fullname = this.model.getDisplayName();
     let text;
 
-    if (converse_chatview_u.isVisible(this.el)) {
+    if (chatview_view_u.isVisible(this.el)) {
       if (show === 'offline') {
         text = i18n_('%1$s has gone offline', fullname);
       } else if (show === 'away') {
@@ -93762,14 +98405,14 @@ const ChatBoxView = view_View.extend({
       ev.preventDefault();
     }
 
-    if (converse_core_converse.router.history.getFragment() === "converse/chat?jid=" + this.model.get('jid')) {
-      converse_core_converse.router.navigate('');
+    if (core_converse.router.history.getFragment() === 'converse/chat?jid=' + this.model.get('jid')) {
+      core_converse.router.navigate('');
     }
 
-    if (converse_core_api.connection.connected()) {
+    if (core_api.connection.connected()) {
       // Immediately sending the chat state, because the
       // model is going to be destroyed afterwards.
-      this.model.setChatState(converse_core_converse.INACTIVE);
+      this.model.setChatState(core_converse.INACTIVE);
       this.model.sendChatState();
     }
 
@@ -93782,7 +98425,7 @@ const ChatBoxView = view_View.extend({
      * @example _converse.api.listen.on('chatBoxClosed', view => { ... });
      */
 
-    converse_core_api.trigger('chatBoxClosed', this);
+    core_api.trigger('chatBoxClosed', this);
     return this;
   },
 
@@ -93799,7 +98442,7 @@ const ChatBoxView = view_View.extend({
      */
 
 
-    converse_core_api.trigger('chatBoxBlurred', this, ev);
+    core_api.trigger('chatBoxBlurred', this, ev);
   },
 
   emitFocused(ev) {
@@ -93815,7 +98458,7 @@ const ChatBoxView = view_View.extend({
      */
 
 
-    converse_core_api.trigger('chatBoxFocused', this, ev);
+    core_api.trigger('chatBoxFocused', this, ev);
   },
 
   focus() {
@@ -93829,7 +98472,7 @@ const ChatBoxView = view_View.extend({
   },
 
   maybeFocus() {
-    converse_core_api.settings.get('auto_focus') && this.focus();
+    core_api.settings.get('auto_focus') && this.focus();
   },
 
   hide() {
@@ -93839,37 +98482,32 @@ const ChatBoxView = view_View.extend({
 
   afterShown() {
     this.model.clearUnreadMsgCounter();
-    this.model.setChatState(converse_core_converse.ACTIVE);
+    this.model.setChatState(core_converse.ACTIVE);
     this.scrollDown();
     this.maybeFocus();
   },
 
   show() {
-    if (converse_chatview_u.isVisible(this.el)) {
-      this.maybeFocus();
+    if (this.model.get('hidden')) {
+      headless_log.debug("Not showing chat ".concat(this.model.get('jid'), " because it's set as hidden"));
       return;
     }
-    /**
-     * Triggered just before a {@link _converse.ChatBoxView} or {@link _converse.ChatRoomView}
-     * will be shown.
-     * @event _converse#beforeShowingChatView
-     * @type {object}
-     * @property { _converse.ChatBoxView | _converse.ChatRoomView } view
-     */
-
 
-    converse_core_api.trigger('beforeShowingChatView', this);
+    if (chatview_view_u.isVisible(this.el)) {
+      this.maybeFocus();
+      return;
+    }
 
-    if (converse_core_api.settings.get('animate')) {
-      converse_chatview_u.fadeIn(this.el, () => this.afterShown());
+    if (core_api.settings.get('animate')) {
+      chatview_view_u.fadeIn(this.el, () => this.afterShown());
     } else {
-      converse_chatview_u.showElement(this.el);
+      chatview_view_u.showElement(this.el);
       this.afterShown();
     }
   },
 
   showNewMessagesIndicator() {
-    converse_chatview_u.showElement(this.el.querySelector('.new-msgs-indicator'));
+    chatview_view_u.showElement(this.el.querySelector('.new-msgs-indicator'));
   },
 
   hideNewMessagesIndicator() {
@@ -93890,7 +98528,7 @@ const ChatBoxView = view_View.extend({
    * which debounces this method by 100ms.
    * @private
    */
-  _markScrolled: function _markScrolled(ev) {
+  _markScrolled: function (ev) {
     let scrolled = true;
     let scrollTop = null;
     const is_at_bottom = this.msgs_container.scrollTop + this.msgs_container.clientHeight >= this.msgs_container.scrollHeight - 62; // sigh...
@@ -93905,12 +98543,12 @@ const ChatBoxView = view_View.extend({
        * @property { _converse.ChatBoxView | _converse.ChatRoomView } view
        * @example _converse.api.listen.on('chatBoxScrolledUp', obj => { ... });
        */
-      converse_core_api.trigger('chatBoxScrolledUp', this);
+      core_api.trigger('chatBoxScrolledUp', this);
     } else {
       scrollTop = ev.target.scrollTop;
     }
 
-    converse_chatview_u.safeSave(this.model, {
+    chatview_view_u.safeSave(this.model, {
       scrolled,
       scrollTop
     });
@@ -93926,7 +98564,13 @@ const ChatBoxView = view_View.extend({
 
   onScrolledDown() {
     this.hideNewMessagesIndicator();
-    !this.model.isHidden() && this.model.clearUnreadMsgCounter();
+
+    if (!this.model.isHidden()) {
+      this.model.clearUnreadMsgCounter(); // Clear location hash if set to one of the messages in our history
+
+      const hash = window.location.hash;
+      hash && this.model.messages.get(hash.slice(1)) && core_converse.router.history.navigate();
+    }
     /**
      * Triggered once the chat's message area has been scrolled down to the bottom.
      * @event _converse#chatBoxScrolledDown
@@ -93935,7 +98579,8 @@ const ChatBoxView = view_View.extend({
      * @example _converse.api.listen.on('chatBoxScrolledDown', obj => { ... });
      */
 
-    converse_core_api.trigger('chatBoxScrolledDown', {
+
+    core_api.trigger('chatBoxScrolledDown', {
       'chatbox': this.model
     }); // TODO: clean up
   },
@@ -93949,7 +98594,7 @@ const ChatBoxView = view_View.extend({
         }
       }
     } else if (state === 'hidden') {
-      this.model.setChatState(converse_core_converse.INACTIVE, {
+      this.model.setChatState(core_converse.INACTIVE, {
         'silent': true
       });
       this.model.sendChatState();
@@ -93957,6 +98602,85 @@ const ChatBoxView = view_View.extend({
   }
 
 });
+/* harmony default export */ var chatview_view = (ChatBoxView);
+// CONCATENATED MODULE: ./src/plugins/chatview/api.js
+
+/* harmony default export */ var chatview_api = ({
+  /**
+   * The "chatview" namespace groups methods pertaining to views
+   * for one-on-one chats.
+   *
+   * @namespace _converse.api.chatviews
+   * @memberOf _converse.api
+   */
+  chatviews: {
+    /**
+     * Get the view of an already open chat.
+     * @method _converse.api.chatviews.get
+     * @param { Array.string | string } jids
+     * @returns { _converse.ChatBoxView|undefined }  The chat should already be open, otherwise `undefined` will be returned.
+     * @example
+     * // To return a single view, provide the JID of the contact:
+     * _converse.api.chatviews.get('buddy@example.com')
+     * @example
+     * // To return an array of views, provide an array of JIDs:
+     * _converse.api.chatviews.get(['buddy1@example.com', 'buddy2@example.com'])
+     */
+    get(jids) {
+      if (jids === undefined) {
+        return Object.values(core_converse.chatboxviews.getAll());
+      }
+
+      if (typeof jids === 'string') {
+        return core_converse.chatboxviews.get(jids);
+      }
+
+      return jids.map(jid => core_converse.chatboxviews.get(jid));
+    }
+
+  }
+});
+// CONCATENATED MODULE: ./src/plugins/chatview/index.js
+/**
+ * @module converse-chatview
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
+
+
+
+
+
+
+
+
+const {
+  Strophe: chatview_Strophe
+} = converse.env;
+
+function chatview_onWindowStateChanged(data) {
+  if (core_converse.chatboxviews) {
+    core_converse.chatboxviews.forEach(view => {
+      if (view.model.get('id') !== 'controlbox') {
+        view.onWindowStateChanged(data.state);
+      }
+    });
+  }
+}
+
+function chatview_onChatBoxViewsInitialized() {
+  const views = core_converse.chatboxviews;
+
+  core_converse.chatboxes.on('add', async item => {
+    if (!views.get(item.get('id')) && item.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
+      await item.initialized;
+      views.add(item.get('id'), new core_converse.ChatBoxView({
+        model: item
+      }));
+    }
+  });
+}
+
 converse.plugins.add('converse-chatview', {
   /* Plugin dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -93968,20 +98692,19 @@ converse.plugins.add('converse-chatview', {
    *
    * NB: These plugins need to have already been loaded via require.js.
    */
-  dependencies: ["converse-chatboxviews", "converse-chat", "converse-disco", "converse-modal"],
+  dependencies: ['converse-chatboxviews', 'converse-chat', 'converse-disco', 'converse-modal'],
 
   initialize() {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'auto_focus': true,
       'debounced_content_rendering': true,
       'filter_url_query_params': null,
       'image_urls_regex': null,
       'message_limit': 0,
       'muc_hats': ['xep317'],
-      'role_affiliation_hat_conversions': {},
       'show_images_inline': true,
       'show_message_avatar': true,
       'show_retraction_warning': true,
@@ -93996,167 +98719,11 @@ converse.plugins.add('converse-chatview', {
         'spoiler': true
       }
     });
-    converse_core_converse.ChatBoxView = ChatBoxView;
-    converse_core_converse.UserDetailsModal = BootstrapModal.extend({
-      id: "user-details-modal",
-      events: {
-        'click button.refresh-contact': 'refreshContact',
-        'click .fingerprint-trust .btn input': 'toggleDeviceTrust'
-      },
-
-      initialize() {
-        BootstrapModal.prototype.initialize.apply(this, arguments);
-        this.model.rosterContactAdded.then(() => this.registerContactEventHandlers());
-        this.listenTo(this.model, 'change', this.render);
-        this.registerContactEventHandlers();
-        /**
-         * Triggered once the _converse.UserDetailsModal has been initialized
-         * @event _converse#userDetailsModalInitialized
-         * @type { _converse.ChatBox }
-         * @example _converse.api.listen.on('userDetailsModalInitialized', chatbox => { ... });
-         */
-
-        converse_core_api.trigger('userDetailsModalInitialized', this.model);
-      },
-
-      toHTML() {
-        var _this$model2;
-
-        const vcard = (_this$model2 = this.model) === null || _this$model2 === void 0 ? void 0 : _this$model2.vcard;
-        const vcard_json = vcard ? vcard.toJSON() : {};
-        return user_details_modal(Object.assign(this.model.toJSON(), vcard_json, {
-          '_converse': converse_core_converse,
-          'allow_contact_removal': converse_core_api.settings.get('allow_contact_removal'),
-          'display_name': this.model.getDisplayName(),
-          'is_roster_contact': this.model.contact !== undefined,
-          'removeContact': ev => this.removeContact(ev),
-          'view': this,
-          'utils': converse_chatview_u
-        }));
-      },
-
-      registerContactEventHandlers() {
-        if (this.model.contact !== undefined) {
-          this.listenTo(this.model.contact, 'change', this.render);
-          this.listenTo(this.model.contact.vcard, 'change', this.render);
-          this.model.contact.on('destroy', () => {
-            delete this.model.contact;
-            this.render();
-          });
-        }
-      },
-
-      async refreshContact(ev) {
-        if (ev && ev.preventDefault) {
-          ev.preventDefault();
-        }
-
-        const refresh_icon = this.el.querySelector('.fa-refresh');
-        converse_chatview_u.addClass('fa-spin', refresh_icon);
-
-        try {
-          await converse_core_api.vcard.update(this.model.contact.vcard, true);
-        } catch (e) {
-          headless_log.fatal(e);
-          this.alert(i18n_('Sorry, something went wrong while trying to refresh'), 'danger');
-        }
-
-        converse_chatview_u.removeClass('fa-spin', refresh_icon);
-      },
-
-      removeContact(ev) {
-        if (ev && ev.preventDefault) {
-          ev.preventDefault();
-        }
-
-        if (!converse_core_api.settings.get('allow_contact_removal')) {
-          return;
-        }
-
-        const result = confirm(i18n_("Are you sure you want to remove this contact?"));
-
-        if (result === true) {
-          this.modal.hide(); // XXX: This is annoying but necessary to get tests to pass.
-          // The `dismissHandler` in bootstrap.native tries to
-          // reference the remove button after it's been cleared from
-          // the DOM, so we delay removing the contact to give it time.
-
-          setTimeout(() => {
-            this.model.contact.removeFromRoster(() => this.model.contact.destroy(), err => {
-              headless_log.error(err);
-              converse_core_api.alert('error', i18n_('Error'), [i18n_('Sorry, there was an error while trying to remove %1$s as a contact.', this.model.contact.getDisplayName())]);
-            });
-          }, 1);
-        }
-      }
-
-    });
-    converse_core_api.listen.on('chatBoxViewsInitialized', () => {
-      const views = converse_core_converse.chatboxviews;
-
-      converse_core_converse.chatboxes.on('add', async item => {
-        if (!views.get(item.get('id')) && item.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
-          await item.initialized;
-          views.add(item.get('id'), new converse_core_converse.ChatBoxView({
-            model: item
-          }));
-        }
-      });
-    });
-    /************************ BEGIN Event Handlers ************************/
-
-    function onWindowStateChanged(data) {
-      if (converse_core_converse.chatboxviews) {
-        converse_core_converse.chatboxviews.forEach(view => {
-          if (view.model.get('id') !== 'controlbox') {
-            view.onWindowStateChanged(data.state);
-          }
-        });
-      }
-    }
-
-    converse_core_api.listen.on('windowStateChanged', onWindowStateChanged);
-    converse_core_api.listen.on('connected', () => converse_core_api.disco.own.features.add(converse_chatview_Strophe.NS.SPOILER));
-    /************************ END Event Handlers ************************/
-
-    /************************ BEGIN API ************************/
-
-    Object.assign(converse_core_api, {
-      /**
-       * The "chatview" namespace groups methods pertaining to views
-       * for one-on-one chats.
-       *
-       * @namespace _converse.api.chatviews
-       * @memberOf _converse.api
-       */
-      chatviews: {
-        /**
-         * Get the view of an already open chat.
-         * @method _converse.api.chatviews.get
-         * @param { Array.string | string } jids
-         * @returns { _converse.ChatBoxView|undefined }  The chat should already be open, otherwise `undefined` will be returned.
-         * @example
-         * // To return a single view, provide the JID of the contact:
-         * _converse.api.chatviews.get('buddy@example.com')
-         * @example
-         * // To return an array of views, provide an array of JIDs:
-         * _converse.api.chatviews.get(['buddy1@example.com', 'buddy2@example.com'])
-         */
-        get(jids) {
-          if (jids === undefined) {
-            return Object.values(converse_core_converse.chatboxviews.getAll());
-          }
-
-          if (typeof jids === 'string') {
-            return converse_core_converse.chatboxviews.get(jids);
-          }
-
-          return jids.map(jid => converse_core_converse.chatboxviews.get(jid));
-        }
-
-      }
-    });
-    /************************ END API ************************/
+    Object.assign(core_api, chatview_api);
+    core_converse.ChatBoxView = chatview_view;
+    core_api.listen.on('chatBoxViewsInitialized', chatview_onChatBoxViewsInitialized);
+    core_api.listen.on('windowStateChanged', chatview_onWindowStateChanged);
+    core_api.listen.on('connected', () => core_api.disco.own.features.add(chatview_Strophe.NS.SPOILER));
   }
 
 });
@@ -94758,178 +99325,560 @@ const lit_haunted_virtual = makeVirtual();
 
 
 
-// CONCATENATED MODULE: ./src/components/brand-heading.js
-function brand_heading_templateObject3() {
-  const data = brand_heading_taggedTemplateLiteral(["\n            <p class=\"brand-subtitle\">", "</p>\n            <p class=\"brand-subtitle\"><a target=\"_blank\" rel=\"nofollow\" href=\"https://conversejs.org\">Open Source</a> XMPP chat client brought to you by <a target=\"_blank\" rel=\"nofollow\" href=\"https://opkode.com\">Opkode</a> </p>\n            <p class=\"brand-subtitle\"><a target=\"_blank\" rel=\"nofollow\" href=\"https://hosted.weblate.org/projects/conversejs/#languages\">Translate</a> it into your own language</p>"]);
+// CONCATENATED MODULE: ./src/components/brand-heading.js
+function brand_heading_templateObject3() {
+  const data = brand_heading_taggedTemplateLiteral(["\n            <p class=\"brand-subtitle\">", "</p>\n            <p class=\"brand-subtitle\"><a target=\"_blank\" rel=\"nofollow\" href=\"https://conversejs.org\">Open Source</a> XMPP chat client brought to you by <a target=\"_blank\" rel=\"nofollow\" href=\"https://opkode.com\">Opkode</a> </p>\n            <p class=\"brand-subtitle\"><a target=\"_blank\" rel=\"nofollow\" href=\"https://hosted.weblate.org/projects/conversejs/#languages\">Translate</a> it into your own language</p>"]);
+
+  brand_heading_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function brand_heading_templateObject2() {
+  const data = brand_heading_taggedTemplateLiteral(["<p class=\"byline\">messaging freedom</p>"]);
+
+  brand_heading_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function brand_heading_templateObject() {
+  const data = brand_heading_taggedTemplateLiteral(["\n        <a class=\"brand-heading\" href=\"https://conversejs.org\" target=\"_blank\" rel=\"noopener\">\n            <span class=\"brand-name-wrapper ", "\">\n                <svg class=\"converse-svg-logo\"\n                    xmlns:svg=\"http://www.w3.org/2000/svg\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n                    viewBox=\"0 0 364 364\">\n                    <title>Converse</title>\n                    <g class=\"cls-1\" id=\"g904\">\n                        <g data-name=\"Layer 2\">\n                            <g data-name=\"Layer 7\">\n                                <path\n                                    class=\"cls-3\"\n                                    d=\"M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z\" />\n                                <path\n                                    class=\"cls-4\"\n                                    d=\"M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z\" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class=\"brand-name\">\n                    <span class=\"brand-name__text\">converse<span class=\"subdued\">.js</span></span>\n                    ", "\n                </span>\n            </span>\n        </a>\n        ", "\n        "]);
+
+  brand_heading_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function brand_heading_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+const ConverseBrandHeading = o => {
+  const is_fullscreen = core_api.settings.get('view_mode') === 'fullscreen';
+  return lit_html_html(brand_heading_templateObject(), is_fullscreen ? 'brand-name-wrapper--fullscreen' : '', is_fullscreen ? lit_html_html(brand_heading_templateObject2()) : '', is_fullscreen ? lit_html_html(brand_heading_templateObject3(), o.version_name) : '');
+};
+core_api.elements.define('converse-brand-heading', lit_haunted_component(ConverseBrandHeading, {
+  'useShadowDOM': false
+}));
+// CONCATENATED MODULE: ./src/plugins/controlbox/model.js
+
+const {
+  dayjs: model_dayjs
+} = converse.env;
+/**
+ * Mixin which turns a ChatBox model into a ControlBox model.
+ *
+ * The ControlBox is the section of the chat that contains the open groupchats,
+ * bookmarks and roster.
+ *
+ * In `overlayed` `view_mode` it's a box like the chat boxes, in `fullscreen`
+ * `view_mode` it's a left-aligned sidebar.
+ * @mixin
+ */
+
+const ControlBoxMixin = {
+  defaults() {
+    return {
+      'bookmarked': false,
+      'box_id': 'controlbox',
+      'chat_state': undefined,
+      'closed': !core_api.settings.get('show_controlbox_by_default'),
+      'num_unread': 0,
+      'time_opened': this.get('time_opened') || new Date().getTime(),
+      'type': core_converse.CONTROLBOX_TYPE,
+      'url': ''
+    };
+  },
+
+  initialize() {
+    if (this.get('id') === 'controlbox') {
+      this.set({
+        'time_opened': model_dayjs(0).valueOf()
+      });
+    } else {
+      core_converse.ChatBox.prototype.initialize.apply(this, arguments);
+    }
+  },
+
+  validate(attrs) {
+    if (attrs.type === core_converse.CONTROLBOX_TYPE) {
+      if (core_api.settings.get('view_mode') === 'embedded' && core_api.settings.get('singleton')) {
+        return 'Controlbox not relevant in embedded view mode';
+      }
+
+      return;
+    }
+
+    return core_converse.ChatBox.prototype.validate.call(this, attrs);
+  },
+
+  maybeShow(force) {
+    if (!force && this.get('id') === 'controlbox') {
+      // Must return the chatbox
+      return this;
+    }
+
+    return core_converse.ChatBox.prototype.maybeShow.call(this, force);
+  },
+
+  onReconnection: function onReconnection() {}
+};
+/* harmony default export */ var controlbox_model = (ControlBoxMixin);
+// CONCATENATED MODULE: ./src/plugins/controlbox/pane.js
+
+
+const ControlBoxPane = View.extend({
+  tagName: 'div',
+  className: 'controlbox-pane',
+
+  initialize() {
+    /**
+     * Triggered once the {@link _converse.ControlBoxPane} has been initialized
+     * @event _converse#controlBoxPaneInitialized
+     * @type { _converse.ControlBoxPane }
+     * @example _converse.api.listen.on('controlBoxPaneInitialized', view => { ... });
+     */
+    core_api.trigger('controlBoxPaneInitialized', this);
+  }
+
+});
+/* harmony default export */ var pane = (ControlBoxPane);
+// EXTERNAL MODULE: ./src/plugins/controlbox/templates/toggle.html
+var toggle = __webpack_require__(177);
+var toggle_default = /*#__PURE__*/__webpack_require__.n(toggle);
+
+// CONCATENATED MODULE: ./src/plugins/controlbox/utils.js
+
+function addControlBox() {
+  const m = new core_converse.ControlBox({
+    'id': 'controlbox'
+  });
+  return core_converse.chatboxes.add(m);
+}
+// CONCATENATED MODULE: ./src/plugins/controlbox/toggle.js
+
+
+
+
+
+
+const toggle_u = converse.env.utils;
+const ControlBoxToggle = View.extend({
+  tagName: 'a',
+  className: 'toggle-controlbox hidden',
+  id: 'toggle-controlbox',
+  events: {
+    'click': 'onClick'
+  },
+  attributes: {
+    'href': "#"
+  },
+
+  initialize() {
+    core_converse.chatboxviews.insertRowColumn(this.render().el);
+
+    core_api.waitUntil('initialized').then(this.render.bind(this)).catch(e => headless_log.fatal(e));
+  },
+
+  render() {
+    // We let the render method of ControlBoxView decide whether
+    // the ControlBox or the Toggle must be shown. This prevents
+    // artifacts (i.e. on page load the toggle is shown only to then
+    // seconds later be hidden in favor of the controlbox).
+    this.el.innerHTML = toggle_default()({
+      'label_toggle': core_api.connection.connected() ? i18n_('Chat Contacts') : i18n_('Toggle chat')
+    });
+    return this;
+  },
+
+  hide(callback) {
+    if (toggle_u.isVisible(this.el)) {
+      toggle_u.hideElement(this.el);
+      callback();
+    }
+  },
+
+  show(callback) {
+    if (!toggle_u.isVisible(this.el)) {
+      toggle_u.fadeIn(this.el, callback);
+    }
+  },
+
+  showControlBox() {
+    let controlbox = core_converse.chatboxes.get('controlbox');
+
+    if (!controlbox) {
+      controlbox = addControlBox();
+    }
+
+    if (core_api.connection.connected()) {
+      controlbox.save({
+        'closed': false
+      });
+    } else {
+      controlbox.trigger('show');
+    }
+  },
+
+  onClick(e) {
+    e.preventDefault();
+
+    if (toggle_u.isVisible(core_converse.root.querySelector("#controlbox"))) {
+      const controlbox = core_converse.chatboxes.get('controlbox');
+
+      if (core_api.connection.connected) {
+        controlbox.save({
+          closed: true
+        });
+      } else {
+        controlbox.trigger('hide');
+      }
+    } else {
+      this.showControlBox();
+    }
+  }
+
+});
+/* harmony default export */ var controlbox_toggle = (ControlBoxToggle);
+// CONCATENATED MODULE: ./src/plugins/controlbox/templates/controlbox.js
+function controlbox_templateObject2() {
+  const data = controlbox_taggedTemplateLiteral(["<a class=\"chatbox-btn close-chatbox-button fa fa-times\"></a>"]);
+
+  controlbox_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function controlbox_templateObject() {
+  const data = controlbox_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head controlbox-head\">\n            ", "\n        </div>\n        <div class=\"controlbox-panes\"></div>\n    </div>"]);
+
+  controlbox_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function controlbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+/* harmony default export */ var templates_controlbox = (o => lit_html_html(controlbox_templateObject(), o.sticky_controlbox ? '' : lit_html_html(controlbox_templateObject2())));
+// CONCATENATED MODULE: ./src/plugins/controlbox/view.js
+
+
+
+const controlbox_view_u = converse.env.utils;
+/**
+ * Mixin which turns a ChatBoxView into a ControlBoxView.
+ *
+ * The ControlBox is the section of the chat that contains the open groupchats,
+ * bookmarks and roster.
+ *
+ * In `overlayed` `view_mode` it's a box like the chat boxes, in `fullscreen`
+ * `view_mode` it's a left-aligned sidebar.
+ * @mixin
+ */
+
+const ControlBoxViewMixin = {
+  tagName: 'div',
+  className: 'chatbox',
+  id: 'controlbox',
+  events: {
+    'click a.close-chatbox-button': 'close'
+  },
+
+  initialize() {
+    if (core_converse.controlboxtoggle === undefined) {
+      core_converse.controlboxtoggle = new core_converse.ControlBoxToggle();
+    }
+
+    core_converse.controlboxtoggle.el.insertAdjacentElement('afterend', this.el);
+
+    this.listenTo(this.model, 'change:connected', this.onConnected);
+    this.listenTo(this.model, 'destroy', this.hide);
+    this.listenTo(this.model, 'hide', this.hide);
+    this.listenTo(this.model, 'show', this.show);
+    this.listenTo(this.model, 'change:closed', this.ensureClosedState);
+    this.render();
+    /**
+     * Triggered when the _converse.ControlBoxView has been initialized and therefore
+     * exists. The controlbox contains the login and register forms when the user is
+     * logged out and a list of the user's contacts and group chats when logged in.
+     * @event _converse#controlBoxInitialized
+     * @type { _converse.ControlBoxView }
+     * @example _converse.api.listen.on('controlBoxInitialized', view => { ... });
+     */
+
+    core_api.trigger('controlBoxInitialized', this);
+  },
+
+  render() {
+    if (this.model.get('connected')) {
+      if (this.model.get('closed') === undefined) {
+        this.model.set('closed', !core_api.settings.get('show_controlbox_by_default'));
+      }
+    }
+
+    const tpl_result = templates_controlbox({
+      'sticky_controlbox': core_api.settings.get('sticky_controlbox'),
+      ...this.model.toJSON()
+    });
+    render_render(tpl_result, this.el);
+
+    if (!this.model.get('closed')) {
+      this.show();
+    } else {
+      this.hide();
+    }
+
+    const connection = (core_converse === null || core_converse === void 0 ? void 0 : core_converse.connection) || {};
+
+    if (!connection.connected || !connection.authenticated || connection.disconnecting) {
+      this.renderLoginPanel();
+    } else if (this.model.get('connected')) {
+      this.renderControlBoxPane();
+    }
+
+    return this;
+  },
+
+  onConnected() {
+    if (this.model.get('connected')) {
+      this.render();
+    }
+  },
+
+  renderLoginPanel() {
+    this.el.classList.add('logged-out');
+
+    if (this.loginpanel) {
+      this.loginpanel.render();
+    } else {
+      this.loginpanel = new core_converse.LoginPanel({
+        'model': new core_converse.LoginPanelModel()
+      });
+      const panes = this.el.querySelector('.controlbox-panes');
+      panes.innerHTML = '';
+      panes.appendChild(this.loginpanel.render().el);
+    }
 
-  brand_heading_templateObject3 = function _templateObject3() {
-    return data;
-  };
+    this.loginpanel.initPopovers();
+    return this;
+  },
 
-  return data;
-}
+  /**
+   * Renders the "Contacts" panel of the controlbox.
+   * This will only be called after the user has already been logged in.
+   * @private
+   * @method _converse.ControlBoxView.renderControlBoxPane
+   */
+  renderControlBoxPane() {
+    if (this.loginpanel) {
+      this.loginpanel.remove();
+      delete this.loginpanel;
+    }
 
-function brand_heading_templateObject2() {
-  const data = brand_heading_taggedTemplateLiteral(["<p class=\"byline\">messaging freedom</p>"]);
+    if (this.controlbox_pane && controlbox_view_u.isVisible(this.controlbox_pane.el)) {
+      return;
+    }
 
-  brand_heading_templateObject2 = function _templateObject2() {
-    return data;
-  };
+    this.el.classList.remove('logged-out');
+    this.controlbox_pane = new core_converse.ControlBoxPane();
+    this.el.querySelector('.controlbox-panes').insertAdjacentElement('afterBegin', this.controlbox_pane.el);
+  },
 
-  return data;
-}
+  async close(ev) {
+    if (ev && ev.preventDefault) {
+      ev.preventDefault();
+    }
 
-function brand_heading_templateObject() {
-  const data = brand_heading_taggedTemplateLiteral(["\n        <a class=\"brand-heading\" href=\"https://conversejs.org\" target=\"_blank\" rel=\"noopener\">\n            <span class=\"brand-name-wrapper ", "\">\n                <svg class=\"converse-svg-logo\"\n                    xmlns:svg=\"http://www.w3.org/2000/svg\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n                    viewBox=\"0 0 364 364\">\n                    <title>Converse</title>\n                    <g class=\"cls-1\" id=\"g904\">\n                        <g data-name=\"Layer 2\">\n                            <g data-name=\"Layer 7\">\n                                <path\n                                    class=\"cls-3\"\n                                    d=\"M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z\" />\n                                <path\n                                    class=\"cls-4\"\n                                    d=\"M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z\" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class=\"brand-name\">\n                    <span class=\"brand-name__text\">converse<span class=\"subdued\">.js</span></span>\n                    ", "\n                </span>\n            </span>\n        </a>\n        ", "\n        "]);
+    if ((ev === null || ev === void 0 ? void 0 : ev.name) === 'closeAllChatBoxes' && (core_converse.disconnection_cause !== core_converse.LOGOUT || core_api.settings.get('show_controlbox_by_default'))) {
+      return;
+    }
 
-  brand_heading_templateObject = function _templateObject() {
-    return data;
-  };
+    if (core_api.settings.get('sticky_controlbox')) {
+      return;
+    }
 
-  return data;
-}
+    const connection = (core_converse === null || core_converse === void 0 ? void 0 : core_converse.connection) || {};
 
-function brand_heading_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+    if (connection.connected && !connection.disconnecting) {
+      await new Promise((resolve, reject) => {
+        return this.model.save({
+          'closed': true
+        }, {
+          'success': resolve,
+          'error': reject,
+          'wait': true
+        });
+      });
+    } else {
+      this.model.trigger('hide');
+    }
 
+    core_api.trigger('controlBoxClosed', this);
+    return this;
+  },
 
+  ensureClosedState() {
+    if (this.model.get('closed')) {
+      this.hide();
+    } else {
+      this.show();
+    }
+  },
 
+  hide(callback) {
+    if (core_api.settings.get('sticky_controlbox')) {
+      return;
+    }
 
-const ConverseBrandHeading = o => {
-  const is_fullscreen = converse_core_api.settings.get('view_mode') === 'fullscreen';
-  return lit_html_html(brand_heading_templateObject(), is_fullscreen ? 'brand-name-wrapper--fullscreen' : '', is_fullscreen ? lit_html_html(brand_heading_templateObject2()) : '', is_fullscreen ? lit_html_html(brand_heading_templateObject3(), o.version_name) : '');
-};
-converse_core_api.elements.define('converse-brand-heading', lit_haunted_component(ConverseBrandHeading, {
-  'useShadowDOM': false
-}));
-// CONCATENATED MODULE: ./src/templates/controlbox.js
-function controlbox_templateObject2() {
-  const data = controlbox_taggedTemplateLiteral(["<a class=\"chatbox-btn close-chatbox-button fa fa-times\"></a>"]);
+    controlbox_view_u.addClass('hidden', this.el);
+    core_api.trigger('chatBoxClosed', this);
 
-  controlbox_templateObject2 = function _templateObject2() {
-    return data;
-  };
+    if (!core_api.connection.connected()) {
+      core_converse.controlboxtoggle.render();
+    }
 
-  return data;
-}
+    core_converse.controlboxtoggle.show(callback);
 
-function controlbox_templateObject() {
-  const data = controlbox_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head controlbox-head\">\n            ", "\n        </div>\n        <div class=\"controlbox-panes\"></div>\n    </div>"]);
+    return this;
+  },
 
-  controlbox_templateObject = function _templateObject() {
-    return data;
-  };
+  onControlBoxToggleHidden() {
+    this.model.set('closed', false);
+    this.el.classList.remove('hidden');
+    /**
+     * Triggered once the controlbox has been opened
+     * @event _converse#controlBoxOpened
+     * @type {_converse.ControlBox}
+     */
 
-  return data;
-}
+    core_api.trigger('controlBoxOpened', this);
+  },
 
-function controlbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+  show() {
+    core_converse.controlboxtoggle.hide(() => this.onControlBoxToggleHidden());
 
+    return this;
+  },
 
-/* harmony default export */ var templates_controlbox = (o => lit_html_html(controlbox_templateObject(), o.sticky_controlbox ? '' : lit_html_html(controlbox_templateObject2())));
-// EXTERNAL MODULE: ./src/templates/controlbox_toggle.html
-var controlbox_toggle = __webpack_require__(136);
-var controlbox_toggle_default = /*#__PURE__*/__webpack_require__.n(controlbox_toggle);
+  showHelpMessages() {
+    return;
+  }
 
-// CONCATENATED MODULE: ./src/templates/login_panel.js
-function login_panel_templateObject8() {
-  const data = login_panel_taggedTemplateLiteral(["\n    <converse-brand-heading></converse-brand-heading>\n    <form id=\"converse-login\" class=\"converse-form\" method=\"post\">\n        <div class=\"conn-feedback fade-in ", "\">\n            <p class=\"feedback-subject\">", "</p>\n            <p class=\"feedback-message ", "\">", "</p>\n        </div>\n        ", "\n    </form>\n"]);
+};
+/* harmony default export */ var controlbox_view = (ControlBoxViewMixin);
+// CONCATENATED MODULE: ./src/plugins/controlbox/templates/loginpanel.js
+function loginpanel_templateObject8() {
+  const data = loginpanel_taggedTemplateLiteral(["\n    <converse-brand-heading></converse-brand-heading>\n    <form id=\"converse-login\" class=\"converse-form\" method=\"post\">\n        <div class=\"conn-feedback fade-in ", "\">\n            <p class=\"feedback-subject\">", "</p>\n            <p class=\"feedback-message ", "\">", "</p>\n        </div>\n        ", "\n    </form>\n"]);
 
-  login_panel_templateObject8 = function _templateObject8() {
+  loginpanel_templateObject8 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject7() {
-  const data = login_panel_taggedTemplateLiteral(["<p>", "</p>"]);
+function loginpanel_templateObject7() {
+  const data = loginpanel_taggedTemplateLiteral(["<p>", "</p>"]);
 
-  login_panel_templateObject7 = function _templateObject7() {
+  loginpanel_templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject6() {
-  const data = login_panel_taggedTemplateLiteral(["<input class=\"btn btn-primary login-anon\" type=\"submit\" value=\"", "\">"]);
+function loginpanel_templateObject6() {
+  const data = loginpanel_taggedTemplateLiteral(["<input class=\"btn btn-primary login-anon\" type=\"submit\" value=\"", "\">"]);
 
-  login_panel_templateObject6 = function _templateObject6() {
+  loginpanel_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject5() {
-  const data = login_panel_taggedTemplateLiteral(["\n        ", "\n        ", "\n        ", "\n    "]);
+function loginpanel_templateObject5() {
+  const data = loginpanel_taggedTemplateLiteral(["\n        ", "\n        ", "\n        ", "\n    "]);
 
-  login_panel_templateObject5 = function _templateObject5() {
+  loginpanel_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject4() {
-  const data = login_panel_taggedTemplateLiteral(["\n        <div class=\"form-group\">\n            <label for=\"converse-login-jid\">", ":</label>\n            <input id=\"converse-login-jid\"\n                ?autofocus=", "\n                required\n                class=\"form-control\"\n                type=\"text\"\n                name=\"jid\"\n                placeholder=\"", "\"/>\n        </div>\n        ", "\n        ", "\n        <fieldset class=\"buttons\">\n            <input class=\"btn btn-primary\" type=\"submit\" value=\"", "\"/>\n        </fieldset>\n        ", "\n    "]);
+function loginpanel_templateObject4() {
+  const data = loginpanel_taggedTemplateLiteral(["\n        <div class=\"form-group\">\n            <label for=\"converse-login-jid\">", ":</label>\n            <input id=\"converse-login-jid\"\n                ?autofocus=", "\n                required\n                class=\"form-control\"\n                type=\"text\"\n                name=\"jid\"\n                placeholder=\"", "\"/>\n        </div>\n        ", "\n        ", "\n        <fieldset class=\"buttons\">\n            <input class=\"btn btn-primary\" type=\"submit\" value=\"", "\"/>\n        </fieldset>\n        ", "\n    "]);
 
-  login_panel_templateObject4 = function _templateObject4() {
+  loginpanel_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject3() {
-  const data = login_panel_taggedTemplateLiteral(["\n        <fieldset class=\"switch-form\">\n            <p>", "</p>\n            <p><a class=\"register-account toggle-register-login\" href=\"#converse/register\">", "</a></p>\n        </fieldset>\n    "]);
+function loginpanel_templateObject3() {
+  const data = loginpanel_taggedTemplateLiteral(["\n        <fieldset class=\"switch-form\">\n            <p>", "</p>\n            <p><a class=\"register-account toggle-register-login\" href=\"#converse/register\">", "</a></p>\n        </fieldset>\n    "]);
 
-  login_panel_templateObject3 = function _templateObject3() {
+  loginpanel_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject2() {
-  const data = login_panel_taggedTemplateLiteral(["\n        <div class=\"form-group\">\n            <label for=\"converse-login-password\">", "</label>\n            <input id=\"converse-login-password\" class=\"form-control\" required=\"required\" type=\"password\" name=\"password\" placeholder=\"", "\"/>\n        </div>\n    "]);
+function loginpanel_templateObject2() {
+  const data = loginpanel_taggedTemplateLiteral(["\n        <div class=\"form-group\">\n            <label for=\"converse-login-password\">", "</label>\n            <input id=\"converse-login-password\" class=\"form-control\" required=\"required\" type=\"password\" name=\"password\" placeholder=\"", "\"/>\n        </div>\n    "]);
 
-  login_panel_templateObject2 = function _templateObject2() {
+  loginpanel_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_templateObject() {
-  const data = login_panel_taggedTemplateLiteral(["\n        <div class=\"form-group form-check login-trusted\">\n            <input id=\"converse-login-trusted\" type=\"checkbox\" class=\"form-check-input\" name=\"trusted\" ?checked=", ">\n            <label for=\"converse-login-trusted\" class=\"form-check-label login-trusted__desc\">", "</label>\n            <i class=\"fa fa-info-circle\" data-toggle=\"popover\"\n                data-title=\"Trusted device?\"\n                data-content=\"", "\"></i>\n        </div>\n    "]);
+function loginpanel_templateObject() {
+  const data = loginpanel_taggedTemplateLiteral(["\n        <div class=\"form-group form-check login-trusted\">\n            <input id=\"converse-login-trusted\" type=\"checkbox\" class=\"form-check-input\" name=\"trusted\" ?checked=", ">\n            <label for=\"converse-login-trusted\" class=\"form-check-label login-trusted__desc\">", "</label>\n            <i class=\"fa fa-info-circle\" data-toggle=\"popover\"\n                data-title=\"Trusted device?\"\n                data-content=\"", "\"></i>\n        </div>\n    "]);
 
-  login_panel_templateObject = function _templateObject() {
+  loginpanel_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function login_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function loginpanel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
 
 
-const trust_checkbox = o => {
+const trust_checkbox = checked => {
   const i18n_hint_trusted = i18n_('To improve performance, we cache your data in this browser. ' + 'Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. ' + 'It\'s important that you explicitly log out, otherwise not all cached data might be deleted. ' + 'Please note, when using an untrusted device, OMEMO encryption is NOT available.');
 
   const i18n_trusted = i18n_('This is a trusted device');
 
-  return lit_html_html(login_panel_templateObject(), o._converse.config.get('trusted'), i18n_trusted, i18n_hint_trusted);
+  return lit_html_html(loginpanel_templateObject(), checked, i18n_trusted, i18n_hint_trusted);
 };
 
 const password_input = () => {
   const i18n_password = i18n_('Password');
 
-  return lit_html_html(login_panel_templateObject2(), i18n_password, i18n_password);
+  return lit_html_html(loginpanel_templateObject2(), i18n_password, i18n_password);
 };
 
 const register_link = () => {
@@ -94937,12 +99886,11 @@ const register_link = () => {
 
   const i18n_hint_no_account = i18n_("Don't have a chat account?");
 
-  return lit_html_html(login_panel_templateObject3(), i18n_hint_no_account, i18n_create_account);
+  return lit_html_html(loginpanel_templateObject3(), i18n_hint_no_account, i18n_create_account);
 };
 
-const show_register_link = o => {
-  const _converse = o._converse;
-  return _converse.allow_registration && !converse_core_api.settings.get("auto_login") && _converse.pluggable.plugins['converse-register'].enabled(_converse);
+const show_register_link = () => {
+  return core_converse.allow_registration && !core_api.settings.get("auto_login") && core_converse.pluggable.plugins['converse-register'].enabled(core_converse);
 };
 
 const auth_fields = o => {
@@ -94950,7 +99898,7 @@ const auth_fields = o => {
 
   const i18n_xmpp_address = i18n_("XMPP Address");
 
-  return lit_html_html(login_panel_templateObject4(), i18n_xmpp_address, converse_core_api.settings.get('auto_focus') ? true : false, o.placeholder_username, o.authentication !== o.EXTERNAL ? password_input() : '', o.show_trust_checkbox ? trust_checkbox(o) : '', i18n_login, show_register_link(o) ? register_link(o) : '');
+  return lit_html_html(loginpanel_templateObject4(), i18n_xmpp_address, core_api.settings.get('auto_focus') ? true : false, o.placeholder_username, o.authentication !== o.EXTERNAL ? password_input() : '', o.show_trust_checkbox ? trust_checkbox(o.show_trust_checkbox === 'off' ? false : true) : '', i18n_login, show_register_link() ? register_link(o) : '');
 };
 
 const form_fields = o => {
@@ -94958,54 +99906,31 @@ const form_fields = o => {
 
   const i18n_anon_login = i18n_('Click here to log in anonymously');
 
-  return lit_html_html(login_panel_templateObject5(), o.authentication == o.LOGIN || o.authentication == o.EXTERNAL ? auth_fields(o) : '', o.authentication == o.ANONYMOUS ? lit_html_html(login_panel_templateObject6(), i18n_anon_login) : '', o.authentication == o.PREBIND ? lit_html_html(login_panel_templateObject7(), i18n_disconnected) : '');
+  return lit_html_html(loginpanel_templateObject5(), o.authentication == o.LOGIN || o.authentication == o.EXTERNAL ? auth_fields(o) : '', o.authentication == o.ANONYMOUS ? lit_html_html(loginpanel_templateObject6(), i18n_anon_login) : '', o.authentication == o.PREBIND ? lit_html_html(loginpanel_templateObject7(), i18n_disconnected) : '');
 };
 
-/* harmony default export */ var templates_login_panel = (o => lit_html_html(login_panel_templateObject8(), !o.conn_feedback_subject ? 'hidden' : o.conn_feedback_class, o.conn_feedback_subject, !o.conn_feedback_message ? 'hidden' : '', o.conn_feedback_message, o._converse.CONNECTION_STATUS[o.connection_status] === 'CONNECTING' ? spinner({
+/* harmony default export */ var loginpanel = (o => lit_html_html(loginpanel_templateObject8(), !o.conn_feedback_subject ? 'hidden' : o.conn_feedback_class, o.conn_feedback_subject, !o.conn_feedback_message ? 'hidden' : '', o.conn_feedback_message, core_converse.CONNECTION_STATUS[o.connection_status] === 'CONNECTING' ? spinner({
   'classes': 'hor_centered'
 }) : form_fields(o)));
-// CONCATENATED MODULE: ./src/converse-controlbox.js
-function converse_controlbox_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
-
-function converse_controlbox_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { converse_controlbox_ownKeys(Object(source), true).forEach(function (key) { converse_controlbox_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { converse_controlbox_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
-
-function converse_controlbox_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-/**
- * @module converse-controlbox
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- */
-
-
-
-
-
-
+// CONCATENATED MODULE: ./src/plugins/controlbox/loginpanel.js
 
 
 
 
 
 
+const loginpanel_u = converse.env.utils;
 const {
-  Strophe: converse_controlbox_Strophe,
-  dayjs: converse_controlbox_dayjs
+  Strophe: loginpanel_Strophe
 } = converse.env;
-const converse_controlbox_u = converse.env.utils;
-const CONNECTION_STATUS_CSS_CLASS = {
-  'Error': 'error',
-  'Connecting': 'info',
-  'Connection failure': 'error',
-  'Authenticating': 'info',
-  'Authentication failure': 'error',
-  'Connected': 'info',
-  'Disconnected': 'error',
-  'Disconnecting': 'warn',
-  'Attached': 'info',
-  'Redirect': 'info',
-  'Reconnecting': 'warn'
-};
+const REPORTABLE_STATUSES = [0, // ERROR'
+1, // CONNECTING
+2, // CONNFAIL
+3, // AUTHENTICATING
+4, // AUTHFAIL
+7, // DISCONNECTING
+10 // RECONNECTING
+];
 const PRETTY_CONNECTION_STATUS = {
   0: 'Error',
   1: 'Connecting',
@@ -95019,630 +99944,327 @@ const PRETTY_CONNECTION_STATUS = {
   9: 'Redirect',
   10: 'Reconnecting'
 };
-const REPORTABLE_STATUSES = [0, // ERROR'
-1, // CONNECTING
-2, // CONNFAIL
-3, // AUTHENTICATING
-4, // AUTHFAIL
-7, // DISCONNECTING
-10 // RECONNECTING
-];
-converse.plugins.add('converse-controlbox', {
-  /* Plugin dependencies are other plugins which might be
-   * overridden or relied upon, and therefore need to be loaded before
-   * this plugin.
-   *
-   * If the setting "strict_plugin_dependencies" is set to true,
-   * an error will be raised if the plugin is not found. By default it's
-   * false, which means these plugins are only loaded opportunistically.
-   *
-   * NB: These plugins need to have already been loaded via require.js.
-   */
-  dependencies: ["converse-modal", "converse-chatboxes", "converse-chat", "converse-rosterview", "converse-chatview"],
-
-  enabled(_converse) {
-    return !_converse.api.settings.get("singleton");
+const CONNECTION_STATUS_CSS_CLASS = {
+  'Error': 'error',
+  'Connecting': 'info',
+  'Connection failure': 'error',
+  'Authenticating': 'info',
+  'Authentication failure': 'error',
+  'Connected': 'info',
+  'Disconnected': 'error',
+  'Disconnecting': 'warn',
+  'Attached': 'info',
+  'Redirect': 'info',
+  'Reconnecting': 'warn'
+};
+const LoginPanelModel = model_Model.extend({
+  defaults: {
+    // Passed-by-reference. Fine in this case because there's
+    // only one such model.
+    'errors': []
+  }
+});
+const LoginPanel = View.extend({
+  tagName: 'div',
+  id: "converse-login-panel",
+  className: 'controlbox-pane fade-in row no-gutters',
+  events: {
+    'submit form#converse-login': 'authenticate',
+    'change input': 'validate'
   },
 
-  overrides: {
-    // Overrides mentioned here will be picked up by converse.js's
-    // plugin architecture they will replace existing methods on the
-    // relevant objects or classes.
-    //
-    // New functions which don't exist yet can also be added.
-    ChatBoxes: {
-      model(attrs, options) {
-        const {
-          _converse
-        } = this.__super__;
-
-        if (attrs && attrs.id == 'controlbox') {
-          return new _converse.ControlBox(attrs, options);
-        } else {
-          return this.__super__.model.apply(this, arguments);
-        }
-      }
+  initialize() {
+    this.listenTo(this.model, 'change', this.render);
+    this.listenTo(core_converse.connfeedback, 'change', this.render);
+    this.render();
+  },
 
-    }
+  toHTML() {
+    const connection_status = core_converse.connfeedback.get('connection_status');
+
+    let feedback_class, pretty_status;
+
+    if (REPORTABLE_STATUSES.includes(connection_status)) {
+      pretty_status = PRETTY_CONNECTION_STATUS[connection_status];
+      feedback_class = CONNECTION_STATUS_CSS_CLASS[pretty_status];
+    }
+
+    return loginpanel(Object.assign(this.model.toJSON(), {
+      '_converse': core_converse,
+      'ANONYMOUS': core_converse.ANONYMOUS,
+      'EXTERNAL': core_converse.EXTERNAL,
+      'LOGIN': core_converse.LOGIN,
+      'PREBIND': core_converse.PREBIND,
+      'auto_login': core_api.settings.get('auto_login'),
+      'authentication': core_api.settings.get("authentication"),
+      'connection_status': connection_status,
+      'conn_feedback_class': feedback_class,
+      'conn_feedback_subject': pretty_status,
+      'conn_feedback_message': core_converse.connfeedback.get('message'),
+      'placeholder_username': (core_api.settings.get('locked_domain') || core_api.settings.get('default_domain')) && i18n_('Username') || i18n_('user@domain'),
+      'show_trust_checkbox': core_api.settings.get('allow_user_trust_override')
+    }));
   },
 
-  initialize() {
-    /* The initialize function gets called as soon as the plugin is
-     * loaded by converse.js's plugin machinery.
-     */
-    converse_core_api.settings.extend({
-      allow_logout: true,
-      default_domain: undefined,
-      locked_domain: undefined,
-      show_controlbox_by_default: false,
-      sticky_controlbox: false
+  initPopovers() {
+    Array.from(this.el.querySelectorAll('[data-title]')).forEach(el => {
+      new bootstrap_native_default.a.Popover(el, {
+        'trigger': core_api.settings.get("view_mode") === 'mobile' && 'click' || 'hover',
+        'dismissible': core_api.settings.get("view_mode") === 'mobile' && true || false,
+        'container': this.el.parentElement.parentElement.parentElement
+      });
     });
-    converse_core_api.promises.add('controlBoxInitialized');
-    converse_core_converse.ControlBox = converse_core_converse.ChatBox.extend({
-      defaults() {
-        return {
-          'bookmarked': false,
-          'box_id': 'controlbox',
-          'chat_state': undefined,
-          'closed': !converse_core_api.settings.get('show_controlbox_by_default'),
-          'num_unread': 0,
-          'time_opened': this.get('time_opened') || new Date().getTime(),
-          'type': converse_core_converse.CONTROLBOX_TYPE,
-          'url': ''
-        };
-      },
-
-      initialize() {
-        if (this.get('id') === 'controlbox') {
-          this.set({
-            'time_opened': converse_controlbox_dayjs(0).valueOf()
-          });
-        } else {
-          converse_core_converse.ChatBox.prototype.initialize.apply(this, arguments);
-        }
-      },
-
-      validate(attrs) {
-        if (attrs.type === converse_core_converse.CONTROLBOX_TYPE) {
-          if (converse_core_api.settings.get("view_mode") === 'embedded' && converse_core_api.settings.get("singleton")) {
-            return 'Controlbox not relevant in embedded view mode';
-          }
-
-          return;
-        }
-
-        return converse_core_converse.ChatBox.prototype.validate.call(this, attrs);
-      },
-
-      maybeShow(force) {
-        if (!force && this.get('id') === 'controlbox') {
-          // Must return the chatbox
-          return this;
-        }
-
-        return converse_core_converse.ChatBox.prototype.maybeShow.call(this, force);
-      },
+  },
 
-      onReconnection: function onReconnection() {}
-    });
+  validate() {
+    const form = this.el.querySelector('form');
+    const jid_element = form.querySelector('input[name=jid]');
 
-    function addControlBox() {
-      const m = new converse_core_converse.ControlBox({
-        'id': 'controlbox'
-      });
-      return converse_core_converse.chatboxes.add(m);
+    if (jid_element.value && !core_api.settings.get('locked_domain') && !core_api.settings.get('default_domain') && !loginpanel_u.isValidJID(jid_element.value)) {
+      jid_element.setCustomValidity(i18n_('Please enter a valid XMPP address'));
+      return false;
     }
 
-    converse_core_converse.ControlBoxView = converse_core_converse.ChatBoxView.extend({
-      tagName: 'div',
-      className: 'chatbox',
-      id: 'controlbox',
-      events: {
-        'click a.close-chatbox-button': 'close'
-      },
-
-      initialize() {
-        if (converse_core_converse.controlboxtoggle === undefined) {
-          converse_core_converse.controlboxtoggle = new converse_core_converse.ControlBoxToggle();
-        }
-
-        converse_core_converse.controlboxtoggle.el.insertAdjacentElement('afterend', this.el);
-
-        this.listenTo(this.model, 'change:connected', this.onConnected);
-        this.listenTo(this.model, 'destroy', this.hide);
-        this.listenTo(this.model, 'hide', this.hide);
-        this.listenTo(this.model, 'show', this.show);
-        this.listenTo(this.model, 'change:closed', this.ensureClosedState);
-        this.render();
-        /**
-         * Triggered when the _converse.ControlBoxView has been initialized and therefore
-         * exists. The controlbox contains the login and register forms when the user is
-         * logged out and a list of the user's contacts and group chats when logged in.
-         * @event _converse#controlBoxInitialized
-         * @type { _converse.ControlBoxView }
-         * @example _converse.api.listen.on('controlBoxInitialized', view => { ... });
-         */
-
-        converse_core_api.trigger('controlBoxInitialized', this);
-      },
-
-      render() {
-        if (this.model.get('connected')) {
-          if (this.model.get('closed') === undefined) {
-            this.model.set('closed', !converse_core_api.settings.get('show_controlbox_by_default'));
-          }
-        }
-
-        const tpl_result = templates_controlbox(converse_controlbox_objectSpread({
-          'sticky_controlbox': converse_core_api.settings.get('sticky_controlbox')
-        }, this.model.toJSON()));
-        render_render(tpl_result, this.el);
-
-        if (!this.model.get('closed')) {
-          this.show();
-        } else {
-          this.hide();
-        }
-
-        const connection = (converse_core_converse === null || converse_core_converse === void 0 ? void 0 : converse_core_converse.connection) || {};
-
-        if (!connection.connected || !connection.authenticated || connection.disconnecting) {
-          this.renderLoginPanel();
-        } else if (this.model.get('connected')) {
-          this.renderControlBoxPane();
-        }
-
-        return this;
-      },
-
-      onConnected() {
-        if (this.model.get('connected')) {
-          this.render();
-        }
-      },
-
-      renderLoginPanel() {
-        this.el.classList.add("logged-out");
-
-        if (this.loginpanel) {
-          this.loginpanel.render();
-        } else {
-          this.loginpanel = new converse_core_converse.LoginPanel({
-            'model': new converse_core_converse.LoginPanelModel()
-          });
-          const panes = this.el.querySelector('.controlbox-panes');
-          panes.innerHTML = '';
-          panes.appendChild(this.loginpanel.render().el);
-        }
-
-        this.loginpanel.initPopovers();
-        return this;
-      },
-
-      /**
-       * Renders the "Contacts" panel of the controlbox.
-       * This will only be called after the user has already been logged in.
-       * @private
-       * @method _converse.ControlBoxView.renderControlBoxPane
-       */
-      renderControlBoxPane() {
-        if (this.loginpanel) {
-          this.loginpanel.remove();
-          delete this.loginpanel;
-        }
-
-        if (this.controlbox_pane && converse_controlbox_u.isVisible(this.controlbox_pane.el)) {
-          return;
-        }
-
-        this.el.classList.remove("logged-out");
-        this.controlbox_pane = new converse_core_converse.ControlBoxPane();
-        this.el.querySelector('.controlbox-panes').insertAdjacentElement('afterBegin', this.controlbox_pane.el);
-      },
-
-      async close(ev) {
-        if (ev && ev.preventDefault) {
-          ev.preventDefault();
-        }
-
-        if ((ev === null || ev === void 0 ? void 0 : ev.name) === 'closeAllChatBoxes' && (converse_core_converse.disconnection_cause !== converse_core_converse.LOGOUT || converse_core_api.settings.get('show_controlbox_by_default'))) {
-          return;
-        }
-
-        if (converse_core_api.settings.get('sticky_controlbox')) {
-          return;
-        }
-
-        const connection = (converse_core_converse === null || converse_core_converse === void 0 ? void 0 : converse_core_converse.connection) || {};
-
-        if (connection.connected && !connection.disconnecting) {
-          await new Promise((resolve, reject) => {
-            return this.model.save({
-              'closed': true
-            }, {
-              'success': resolve,
-              'error': reject,
-              'wait': true
-            });
-          });
-        } else {
-          this.model.trigger('hide');
-        }
-
-        converse_core_api.trigger('controlBoxClosed', this);
-        return this;
-      },
-
-      ensureClosedState() {
-        if (this.model.get('closed')) {
-          this.hide();
-        } else {
-          this.show();
-        }
-      },
-
-      hide(callback) {
-        if (converse_core_api.settings.get('sticky_controlbox')) {
-          return;
-        }
-
-        converse_controlbox_u.addClass('hidden', this.el);
-        converse_core_api.trigger('chatBoxClosed', this);
+    jid_element.setCustomValidity('');
+    return true;
+  },
 
-        if (!converse_core_api.connection.connected()) {
-          converse_core_converse.controlboxtoggle.render();
-        }
+  /**
+     * Authenticate the user based on a form submission event.
+     * @param { Event } ev
+     */
+  authenticate(ev) {
+    if (ev && ev.preventDefault) {
+      ev.preventDefault();
+    }
 
-        converse_core_converse.controlboxtoggle.show(callback);
+    if (core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
+      return this.connect(core_converse.jid, null);
+    }
 
-        return this;
-      },
+    if (!this.validate()) {
+      return;
+    }
 
-      onControlBoxToggleHidden() {
-        this.model.set('closed', false);
-        this.el.classList.remove('hidden');
-        /**
-         * Triggered once the controlbox has been opened
-         * @event _converse#controlBoxOpened
-         * @type {_converse.ControlBox}
-         */
+    const form_data = new FormData(ev.target);
 
-        converse_core_api.trigger('controlBoxOpened', this);
-      },
+    core_converse.config.save({
+      'trusted': form_data.get('trusted') && true || false
+    });
 
-      show() {
-        converse_core_converse.controlboxtoggle.hide(() => this.onControlBoxToggleHidden());
+    let jid = form_data.get('jid');
 
-        return this;
-      },
+    if (core_api.settings.get('locked_domain')) {
+      const last_part = '@' + core_api.settings.get('locked_domain');
 
-      showHelpMessages() {
-        return;
+      if (jid.endsWith(last_part)) {
+        jid = jid.substr(0, jid.length - last_part.length);
       }
 
-    });
-    converse_core_converse.LoginPanelModel = model_Model.extend({
-      defaults: {
-        // Passed-by-reference. Fine in this case because there's
-        // only one such model.
-        'errors': []
-      }
-    });
-    converse_core_converse.LoginPanel = view_View.extend({
-      tagName: 'div',
-      id: "converse-login-panel",
-      className: 'controlbox-pane fade-in row no-gutters',
-      events: {
-        'submit form#converse-login': 'authenticate',
-        'change input': 'validate'
-      },
+      jid = loginpanel_Strophe.escapeNode(jid) + last_part;
+    } else if (core_api.settings.get('default_domain') && !jid.includes('@')) {
+      jid = jid + '@' + core_api.settings.get('default_domain');
+    }
 
-      initialize() {
-        this.listenTo(this.model, 'change', this.render);
-        this.listenTo(converse_core_converse.connfeedback, 'change', this.render);
-        this.render();
-      },
+    this.connect(jid, form_data.get('password'));
+  },
 
-      toHTML() {
-        const connection_status = converse_core_converse.connfeedback.get('connection_status');
-
-        let feedback_class, pretty_status;
-
-        if (REPORTABLE_STATUSES.includes(connection_status)) {
-          pretty_status = PRETTY_CONNECTION_STATUS[connection_status];
-          feedback_class = CONNECTION_STATUS_CSS_CLASS[pretty_status];
-        }
-
-        return templates_login_panel(Object.assign(this.model.toJSON(), {
-          '_converse': converse_core_converse,
-          'ANONYMOUS': converse_core_converse.ANONYMOUS,
-          'EXTERNAL': converse_core_converse.EXTERNAL,
-          'LOGIN': converse_core_converse.LOGIN,
-          'PREBIND': converse_core_converse.PREBIND,
-          'auto_login': converse_core_api.settings.get('auto_login'),
-          'authentication': converse_core_api.settings.get("authentication"),
-          'connection_status': connection_status,
-          'conn_feedback_class': feedback_class,
-          'conn_feedback_subject': pretty_status,
-          'conn_feedback_message': converse_core_converse.connfeedback.get('message'),
-          'placeholder_username': (converse_core_api.settings.get('locked_domain') || converse_core_api.settings.get('default_domain')) && i18n_('Username') || i18n_('user@domain'),
-          'show_trust_checkbox': converse_core_converse.trusted !== 'on' && converse_core_converse.trusted !== 'off'
-        }));
-      },
+  connect(jid, password) {
+    if (["converse/login", "converse/register"].includes(core_converse.router.history.getFragment())) {
+      core_converse.router.navigate('', {
+        'replace': true
+      });
+    }
 
-      initPopovers() {
-        Array.from(this.el.querySelectorAll('[data-title]')).forEach(el => {
-          new bootstrap_native_default.a.Popover(el, {
-            'trigger': converse_core_api.settings.get("view_mode") === 'mobile' && 'click' || 'hover',
-            'dismissible': converse_core_api.settings.get("view_mode") === 'mobile' && true || false,
-            'container': this.el.parentElement.parentElement.parentElement
-          });
-        });
-      },
+    core_converse.connection && core_converse.connection.reset();
+    core_api.user.login(jid, password);
+  }
 
-      validate() {
-        const form = this.el.querySelector('form');
-        const jid_element = form.querySelector('input[name=jid]');
+});
+// CONCATENATED MODULE: ./src/plugins/controlbox/api.js
 
-        if (jid_element.value && !converse_core_api.settings.get('locked_domain') && !converse_core_api.settings.get('default_domain') && !converse_controlbox_u.isValidJID(jid_element.value)) {
-          jid_element.setCustomValidity(i18n_('Please enter a valid XMPP address'));
-          return false;
-        }
+/* harmony default export */ var controlbox_api = ({
+  /**
+   * The "controlbox" namespace groups methods pertaining to the
+   * controlbox view
+   *
+   * @namespace _converse.api.controlbox
+   * @memberOf _converse.api
+   */
+  controlbox: {
+    /**
+     * Opens the controlbox
+     * @method _converse.api.controlbox.open
+     * @returns { Promise<_converse.ControlBox> }
+     */
+    async open() {
+      await core_api.waitUntil('chatBoxesFetched');
+      const model = (await core_api.chatboxes.get('controlbox')) || core_api.chatboxes.create('controlbox', {}, core_converse.Controlbox);
+      model.trigger('show');
+      return model;
+    },
 
-        jid_element.setCustomValidity('');
-        return true;
-      },
+    /**
+     * Returns the controlbox view.
+     * @method _converse.api.controlbox.get
+     * @returns { View } View representing the controlbox
+     * @example const view = _converse.api.controlbox.get();
+     */
+    get() {
+      return core_converse.chatboxviews.get('controlbox');
+    }
 
-      authenticate(ev) {
-        /* Authenticate the user based on a form submission event.
-         */
-        if (ev && ev.preventDefault) {
-          ev.preventDefault();
-        }
+  }
+});
+// CONCATENATED MODULE: ./src/plugins/controlbox/index.js
+/**
+ * @module converse-controlbox
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
 
-        if (converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
-          return this.connect(converse_core_converse.jid, null);
-        }
 
-        if (!this.validate()) {
-          return;
-        }
 
-        const form_data = new FormData(ev.target);
 
-        if (converse_core_converse.trusted === 'on' || converse_core_converse.trusted === 'off') {
-          converse_core_converse.config.save({
-            'trusted': converse_core_converse.trusted === 'on',
-            'storage': converse_core_converse.trusted === 'on' ? 'persistent' : 'session'
-          });
-        } else {
-          converse_core_converse.config.save({
-            'trusted': form_data.get('trusted') && true || false,
-            'storage': form_data.get('trusted') ? 'persistent' : 'session'
-          });
-        }
 
-        let jid = form_data.get('jid');
 
-        if (converse_core_api.settings.get('locked_domain')) {
-          const last_part = '@' + converse_core_api.settings.get('locked_domain');
 
-          if (jid.endsWith(last_part)) {
-            jid = jid.substr(0, jid.length - last_part.length);
-          }
 
-          jid = converse_controlbox_Strophe.escapeNode(jid) + last_part;
-        } else if (converse_core_api.settings.get('default_domain') && !jid.includes('@')) {
-          jid = jid + '@' + converse_core_api.settings.get('default_domain');
-        }
 
-        this.connect(jid, form_data.get('password'));
-      },
 
-      connect(jid, password) {
-        if (["converse/login", "converse/register"].includes(converse_core_converse.router.history.getFragment())) {
-          converse_core_converse.router.navigate('', {
-            'replace': true
-          });
-        }
 
-        converse_core_converse.connection && converse_core_converse.connection.reset();
-        converse_core_api.user.login(jid, password);
-      }
+const controlbox_u = converse.env.utils;
 
-    });
-    converse_core_converse.ControlBoxPane = view_View.extend({
-      tagName: 'div',
-      className: 'controlbox-pane',
+function controlbox_onChatBoxViewsInitialized() {
+  core_converse.chatboxes.on('add', item => {
+    if (item.get('type') === core_converse.CONTROLBOX_TYPE) {
+      const views = core_converse.chatboxviews;
+      const view = views.get(item.get('id'));
 
-      initialize() {
-        /**
-         * Triggered once the {@link _converse.ControlBoxPane} has been initialized
-         * @event _converse#controlBoxPaneInitialized
-         * @type { _converse.ControlBoxPane }
-         * @example _converse.api.listen.on('controlBoxPaneInitialized', view => { ... });
-         */
-        converse_core_api.trigger('controlBoxPaneInitialized', this);
+      if (view) {
+        view.model = item;
+        view.initialize();
+      } else {
+        views.add(item.get('id'), new core_converse.ControlBoxView({
+          model: item
+        }));
       }
+    }
+  });
+}
 
-    });
-    converse_core_converse.ControlBoxToggle = view_View.extend({
-      tagName: 'a',
-      className: 'toggle-controlbox hidden',
-      id: 'toggle-controlbox',
-      events: {
-        'click': 'onClick'
-      },
-      attributes: {
-        'href': "#"
-      },
-
-      initialize() {
-        converse_core_converse.chatboxviews.insertRowColumn(this.render().el);
-
-        converse_core_api.waitUntil('initialized').then(this.render.bind(this)).catch(e => headless_log.fatal(e));
-      },
+function disconnect() {
+  /* Upon disconnection, set connected to `false`, so that if
+   * we reconnect, "onConnected" will be called,
+   * to fetch the roster again and to send out a presence stanza.
+   */
+  const view = core_converse.chatboxviews.get('controlbox');
 
-      render() {
-        // We let the render method of ControlBoxView decide whether
-        // the ControlBox or the Toggle must be shown. This prevents
-        // artifacts (i.e. on page load the toggle is shown only to then
-        // seconds later be hidden in favor of the controlbox).
-        this.el.innerHTML = controlbox_toggle_default()({
-          'label_toggle': converse_core_api.connection.connected() ? i18n_('Chat Contacts') : i18n_('Toggle chat')
-        });
-        return this;
-      },
+  view.model.set({
+    'connected': false
+  });
+  return view;
+}
 
-      hide(callback) {
-        if (converse_controlbox_u.isVisible(this.el)) {
-          converse_controlbox_u.hideElement(this.el);
-          callback();
-        }
-      },
+function controlbox_clearSession() {
+  const chatboxviews = core_converse === null || core_converse === void 0 ? void 0 : core_converse.chatboxviews;
+  const view = chatboxviews && chatboxviews.get('controlbox');
 
-      show(callback) {
-        if (!converse_controlbox_u.isVisible(this.el)) {
-          converse_controlbox_u.fadeIn(this.el, callback);
-        }
-      },
+  if (view) {
+    controlbox_u.safeSave(view.model, {
+      'connected': false
+    });
 
-      showControlBox() {
-        let controlbox = converse_core_converse.chatboxes.get('controlbox');
+    if (view === null || view === void 0 ? void 0 : view.controlbox_pane) {
+      view.controlbox_pane.remove();
+      delete view.controlbox_pane;
+    }
+  }
+}
 
-        if (!controlbox) {
-          controlbox = addControlBox();
-        }
+function onChatBoxesFetched() {
+  const controlbox = core_converse.chatboxes.get('controlbox') || addControlBox();
+  controlbox.save({
+    'connected': true
+  });
+}
 
-        if (converse_core_api.connection.connected()) {
-          controlbox.save({
-            'closed': false
-          });
-        } else {
-          controlbox.trigger('show');
-        }
-      },
+converse.plugins.add('converse-controlbox', {
+  /* Plugin dependencies are other plugins which might be
+   * overridden or relied upon, and therefore need to be loaded before
+   * this plugin.
+   *
+   * If the setting "strict_plugin_dependencies" is set to true,
+   * an error will be raised if the plugin is not found. By default it's
+   * false, which means these plugins are only loaded opportunistically.
+   *
+   * NB: These plugins need to have already been loaded via require.js.
+   */
+  dependencies: ['converse-modal', 'converse-chatboxes', 'converse-chat', 'converse-rosterview', 'converse-chatview'],
 
-      onClick(e) {
-        e.preventDefault();
+  enabled(_converse) {
+    return !_converse.api.settings.get('singleton');
+  },
 
-        if (converse_controlbox_u.isVisible(converse_core_converse.root.querySelector("#controlbox"))) {
-          const controlbox = converse_core_converse.chatboxes.get('controlbox');
+  overrides: {
+    // Overrides mentioned here will be picked up by converse.js's
+    // plugin architecture they will replace existing methods on the
+    // relevant objects or classes.
+    //
+    // New functions which don't exist yet can also be added.
+    ChatBoxes: {
+      model(attrs, options) {
+        const {
+          _converse
+        } = this.__super__;
 
-          if (converse_core_api.connection.connected) {
-            controlbox.save({
-              closed: true
-            });
-          } else {
-            controlbox.trigger('hide');
-          }
+        if (attrs && attrs.id == 'controlbox') {
+          return new _converse.ControlBox(attrs, options);
         } else {
-          this.showControlBox();
+          return this.__super__.model.apply(this, arguments);
         }
       }
 
-    });
-    /******************** Event Handlers ********************/
-
-    converse_core_api.listen.on('cleanup', () => delete converse_core_converse.controlboxtoggle);
-    converse_core_api.listen.on('chatBoxViewsInitialized', () => {
-      converse_core_converse.chatboxes.on('add', item => {
-        if (item.get('type') === converse_core_converse.CONTROLBOX_TYPE) {
-          const views = converse_core_converse.chatboxviews;
-          const view = views.get(item.get('id'));
-
-          if (view) {
-            view.model = item;
-            view.initialize();
-          } else {
-            views.add(item.get('id'), new converse_core_converse.ControlBoxView({
-              model: item
-            }));
-          }
-        }
-      });
-    });
-    converse_core_api.listen.on('clearSession', () => {
-      const chatboxviews = converse_core_converse === null || converse_core_converse === void 0 ? void 0 : converse_core_converse.chatboxviews;
-      const view = chatboxviews && chatboxviews.get('controlbox');
-
-      if (view) {
-        converse_controlbox_u.safeSave(view.model, {
-          'connected': false
-        });
+    }
+  },
 
-        if (view === null || view === void 0 ? void 0 : view.controlbox_pane) {
-          view.controlbox_pane.remove();
-          delete view.controlbox_pane;
-        }
-      }
-    });
-    converse_core_api.waitUntil('chatBoxViewsInitialized').then(addControlBox).catch(e => headless_log.fatal(e));
-    converse_core_api.listen.on('chatBoxesFetched', () => {
-      const controlbox = converse_core_converse.chatboxes.get('controlbox') || addControlBox();
-      controlbox.save({
-        'connected': true
-      });
+  initialize() {
+    /* The initialize function gets called as soon as the plugin is
+     * loaded by converse.js's plugin machinery.
+     */
+    core_api.settings.extend({
+      allow_logout: true,
+      allow_user_trust_override: true,
+      default_domain: undefined,
+      locked_domain: undefined,
+      show_controlbox_by_default: false,
+      sticky_controlbox: false
     });
+    core_api.promises.add('controlBoxInitialized');
+    Object.assign(core_api, controlbox_api);
+    core_converse.ControlBox = core_converse.ChatBox.extend(controlbox_model);
+    core_converse.ControlBoxView = core_converse.ChatBoxView.extend(controlbox_view);
+    core_converse.LoginPanelModel = LoginPanelModel;
+    core_converse.LoginPanel = LoginPanel;
+    core_converse.ControlBoxPane = pane;
+    core_converse.ControlBoxToggle = controlbox_toggle;
+    /******************** Event Handlers ********************/
 
-    const disconnect = function disconnect() {
-      /* Upon disconnection, set connected to `false`, so that if
-       * we reconnect, "onConnected" will be called,
-       * to fetch the roster again and to send out a presence stanza.
-       */
-      const view = converse_core_converse.chatboxviews.get('controlbox');
-
-      view.model.set({
-        'connected': false
-      });
-      return view;
-    };
-
-    converse_core_api.listen.on('disconnected', () => disconnect().renderLoginPanel());
-    converse_core_api.listen.on('will-reconnect', disconnect);
-    /************************ API ************************/
-
-    Object.assign(converse_core_api, {
-      /**
-       * The "controlbox" namespace groups methods pertaining to the
-       * controlbox view
-       *
-       * @namespace _converse.api.controlbox
-       * @memberOf _converse.api
-       */
-      controlbox: {
-        /**
-         * Opens the controlbox
-         * @method _converse.api.controlbox.open
-         * @returns { Promise<_converse.ControlBox> }
-         */
-        async open() {
-          await converse_core_api.waitUntil('chatBoxesFetched');
-          const model = (await converse_core_api.chatboxes.get('controlbox')) || converse_core_api.chatboxes.create('controlbox', {}, converse_core_converse.Controlbox);
-          model.trigger('show');
-          return model;
-        },
-
-        /**
-         * Returns the controlbox view.
-         * @method _converse.api.controlbox.get
-         * @returns { View } View representing the controlbox
-         * @example const view = _converse.api.controlbox.get();
-         */
-        get() {
-          return converse_core_converse.chatboxviews.get('controlbox');
-        }
-
-      }
-    });
+    core_api.listen.on('chatBoxViewsInitialized', controlbox_onChatBoxViewsInitialized);
+    core_api.listen.on('chatBoxesFetched', onChatBoxesFetched);
+    core_api.listen.on('cleanup', () => delete core_converse.controlboxtoggle);
+    core_api.listen.on('clearSession', controlbox_clearSession);
+    core_api.listen.on('disconnected', () => disconnect().renderLoginPanel());
+    core_api.listen.on('will-reconnect', disconnect);
+    core_api.waitUntil('chatBoxViewsInitialized').then(addControlBox).catch(e => headless_log.fatal(e));
   }
 
 });
 // EXTERNAL MODULE: ./src/templates/dragresize.html
-var dragresize = __webpack_require__(137);
+var dragresize = __webpack_require__(178);
 var dragresize_default = /*#__PURE__*/__webpack_require__.n(dragresize);
 
-// CONCATENATED MODULE: ./src/converse-dragresize.js
+// CONCATENATED MODULE: ./src/plugins/dragresize.js
 /**
  * @module converse-dragresize
  * @copyright 2020, the Converse.js contributors
@@ -95653,7 +100275,7 @@ var dragresize_default = /*#__PURE__*/__webpack_require__.n(dragresize);
 
 
 
-const converse_dragresize_u = converse.env.utils;
+const dragresize_u = converse.env.utils;
 
 function renderDragResizeHandles(_converse, view) {
   const flyout = view.el.querySelector('.box-flyout');
@@ -95691,8 +100313,8 @@ converse.plugins.add('converse-dragresize', {
               width = this.get('width');
         const save = this.get('id') === 'controlbox' ? a => this.set(a) : a => this.save(a);
         save({
-          'height': converse_dragresize_u.applyDragResistance(height, this.get('default_height')),
-          'width': converse_dragresize_u.applyDragResistance(width, this.get('default_width'))
+          'height': dragresize_u.applyDragResistance(height, this.get('default_height')),
+          'width': dragresize_u.applyDragResistance(width, this.get('default_width'))
         });
         return result;
       }
@@ -95782,7 +100404,7 @@ converse.plugins.add('converse-dragresize', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'allow_dragresize': true
     });
     const dragResizable = {
@@ -95815,7 +100437,7 @@ converse.plugins.add('converse-dragresize', {
         this.prev_pageY = 0;
         this.prev_pageX = 0;
 
-        if ((_converse$connection = converse_core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connected) {
+        if ((_converse$connection = core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connected) {
           this.height = this.model.get('height');
           this.width = this.model.get('width');
         }
@@ -95826,7 +100448,7 @@ converse.plugins.add('converse-dragresize', {
       resizeChatBox(ev) {
         let diff;
 
-        if (converse_core_converse.resizing.direction.indexOf('top') === 0) {
+        if (core_converse.resizing.direction.indexOf('top') === 0) {
           diff = ev.pageY - this.prev_pageY;
 
           if (diff) {
@@ -95836,7 +100458,7 @@ converse.plugins.add('converse-dragresize', {
           }
         }
 
-        if (converse_core_converse.resizing.direction.includes('left')) {
+        if (core_converse.resizing.direction.includes('left')) {
           diff = this.prev_pageX - ev.pageX;
 
           if (diff) {
@@ -95864,7 +100486,7 @@ converse.plugins.add('converse-dragresize', {
 
       setChatBoxHeight(height) {
         if (height) {
-          height = converse_dragresize_u.applyDragResistance(height, this.model.get('default_height')) + 'px';
+          height = dragresize_u.applyDragResistance(height, this.model.get('default_height')) + 'px';
         } else {
           height = "";
         }
@@ -95878,7 +100500,7 @@ converse.plugins.add('converse-dragresize', {
 
       setChatBoxWidth(width) {
         if (width) {
-          width = converse_dragresize_u.applyDragResistance(width, this.model.get('default_width')) + 'px';
+          width = dragresize_u.applyDragResistance(width, this.model.get('default_width')) + 'px';
         } else {
           width = "";
         }
@@ -95909,7 +100531,7 @@ converse.plugins.add('converse-dragresize', {
       },
 
       onStartVerticalResize(ev, trigger = true) {
-        if (!converse_core_api.settings.get('allow_dragresize')) {
+        if (!core_api.settings.get('allow_dragresize')) {
           return true;
         }
 
@@ -95918,7 +100540,7 @@ converse.plugins.add('converse-dragresize', {
         const flyout = this.el.querySelector('.box-flyout'),
               style = window.getComputedStyle(flyout);
         this.height = parseInt(style.height.replace(/px$/, ''), 10);
-        converse_core_converse.resizing = {
+        core_converse.resizing = {
           'chatbox': this,
           'direction': 'top'
         };
@@ -95930,12 +100552,12 @@ converse.plugins.add('converse-dragresize', {
            * @event _converse#startVerticalResize
            * @example _converse.api.listen.on('startVerticalResize', (view) => { ... });
            */
-          converse_core_api.trigger('startVerticalResize', this);
+          core_api.trigger('startVerticalResize', this);
         }
       },
 
       onStartHorizontalResize(ev, trigger = true) {
-        if (!converse_core_api.settings.get('allow_dragresize')) {
+        if (!core_api.settings.get('allow_dragresize')) {
           return true;
         }
 
@@ -95943,7 +100565,7 @@ converse.plugins.add('converse-dragresize', {
         const flyout = this.el.querySelector('.box-flyout'),
               style = window.getComputedStyle(flyout);
         this.width = parseInt(style.width.replace(/px$/, ''), 10);
-        converse_core_converse.resizing = {
+        core_converse.resizing = {
           'chatbox': this,
           'direction': 'left'
         };
@@ -95955,27 +100577,27 @@ converse.plugins.add('converse-dragresize', {
            * @event _converse#startHorizontalResize
            * @example _converse.api.listen.on('startHorizontalResize', (view) => { ... });
            */
-          converse_core_api.trigger('startHorizontalResize', this);
+          core_api.trigger('startHorizontalResize', this);
         }
       },
 
       onStartDiagonalResize(ev) {
         this.onStartHorizontalResize(ev, false);
         this.onStartVerticalResize(ev, false);
-        converse_core_converse.resizing.direction = 'topleft';
+        core_converse.resizing.direction = 'topleft';
         /**
          * Triggered once the user starts to diagonally resize a {@link _converse.ChatBoxView}
          * @event _converse#startDiagonalResize
          * @example _converse.api.listen.on('startDiagonalResize', (view) => { ... });
          */
 
-        converse_core_api.trigger('startDiagonalResize', this);
+        core_api.trigger('startDiagonalResize', this);
       }
 
     };
-    Object.assign(converse_core_converse.ChatBoxView.prototype, dragResizable);
+    Object.assign(core_converse.ChatBoxView.prototype, dragResizable);
 
-    converse_dragresize_u.applyDragResistance = function (value, default_value) {
+    dragresize_u.applyDragResistance = function (value, default_value) {
       /* This method applies some resistance around the
       * default_value. If value is close enough to
       * default_value, then default_value is returned instead.
@@ -95996,43 +100618,43 @@ converse.plugins.add('converse-dragresize', {
     };
 
     function onMouseMove(ev) {
-      if (!converse_core_converse.resizing || !converse_core_api.settings.get('allow_dragresize')) {
+      if (!core_converse.resizing || !core_api.settings.get('allow_dragresize')) {
         return true;
       }
 
       ev.preventDefault();
 
-      converse_core_converse.resizing.chatbox.resizeChatBox(ev);
+      core_converse.resizing.chatbox.resizeChatBox(ev);
     }
 
     function onMouseUp(ev) {
-      if (!converse_core_converse.resizing || !converse_core_api.settings.get('allow_dragresize')) {
+      if (!core_converse.resizing || !core_api.settings.get('allow_dragresize')) {
         return true;
       }
 
       ev.preventDefault();
-      const height = converse_dragresize_u.applyDragResistance(converse_core_converse.resizing.chatbox.height, converse_core_converse.resizing.chatbox.model.get('default_height'));
-      const width = converse_dragresize_u.applyDragResistance(converse_core_converse.resizing.chatbox.width, converse_core_converse.resizing.chatbox.model.get('default_width'));
+      const height = dragresize_u.applyDragResistance(core_converse.resizing.chatbox.height, core_converse.resizing.chatbox.model.get('default_height'));
+      const width = dragresize_u.applyDragResistance(core_converse.resizing.chatbox.width, core_converse.resizing.chatbox.model.get('default_width'));
 
-      if (converse_core_api.connection.connected()) {
-        converse_core_converse.resizing.chatbox.model.save({
+      if (core_api.connection.connected()) {
+        core_converse.resizing.chatbox.model.save({
           'height': height
         });
 
-        converse_core_converse.resizing.chatbox.model.save({
+        core_converse.resizing.chatbox.model.save({
           'width': width
         });
       } else {
-        converse_core_converse.resizing.chatbox.model.set({
+        core_converse.resizing.chatbox.model.set({
           'height': height
         });
 
-        converse_core_converse.resizing.chatbox.model.set({
+        core_converse.resizing.chatbox.model.set({
           'width': width
         });
       }
 
-      converse_core_converse.resizing = null;
+      core_converse.resizing = null;
     }
     /************************ BEGIN Event Handlers ************************/
 
@@ -96047,14 +100669,14 @@ converse.plugins.add('converse-dragresize', {
       document.removeEventListener('mouseup', onMouseUp);
     }
 
-    converse_core_api.listen.on('registeredGlobalEventHandlers', registerGlobalEventHandlers);
-    converse_core_api.listen.on('unregisteredGlobalEventHandlers', unregisterGlobalEventHandlers);
-    converse_core_api.listen.on('beforeShowingChatView', view => view.initDragResize().setDimensions());
+    core_api.listen.on('registeredGlobalEventHandlers', registerGlobalEventHandlers);
+    core_api.listen.on('unregisteredGlobalEventHandlers', unregisterGlobalEventHandlers);
+    core_api.listen.on('beforeShowingChatView', view => view.initDragResize().setDimensions());
     /************************ END Event Handlers ************************/
   }
 
 });
-// CONCATENATED MODULE: ./src/converse-singleton.js
+// CONCATENATED MODULE: ./src/plugins/singleton.js
 /**
  * @module converse-singleton
  * @copyright JC Brand
@@ -96071,7 +100693,7 @@ converse.plugins.add('converse-singleton', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'allow_logout': false,
       // No point in logging out when we have auto_login as true.
       'allow_muc_invitations': false,
@@ -96080,17 +100702,17 @@ converse.plugins.add('converse-singleton', {
       'hide_muc_server': true
     });
 
-    if (!Array.isArray(converse_core_api.settings.get('auto_join_rooms')) && !Array.isArray(converse_core_api.settings.get('auto_join_private_chats'))) {
+    if (!Array.isArray(core_api.settings.get('auto_join_rooms')) && !Array.isArray(core_api.settings.get('auto_join_private_chats'))) {
       throw new Error("converse-singleton: auto_join_rooms must be an Array");
     }
 
-    if (converse_core_api.settings.get('auto_join_rooms').length > 1 || converse_core_api.settings.get('auto_join_private_chats').length > 1) {
+    if (core_api.settings.get('auto_join_rooms').length > 1 || core_api.settings.get('auto_join_private_chats').length > 1) {
       throw new Error("It doesn't make sense to have singleton set to true and " + "auto_join_rooms or auto_join_private_chats set to more then one, " + "since only one chat room may be open at any time.");
     }
   }
 
 });
-// CONCATENATED MODULE: ./src/converse-fullscreen.js
+// CONCATENATED MODULE: ./src/plugins/fullscreen.js
 /**
  * @module converse-fullscreen
  * @license Mozilla Public License (MPLv2)
@@ -96107,7 +100729,7 @@ converse.plugins.add('converse-fullscreen', {
   },
 
   initialize() {
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       chatview_avatar_height: 50,
       chatview_avatar_width: 50,
       hide_open_bookmarks: true,
@@ -96117,7 +100739,7 @@ converse.plugins.add('converse-fullscreen', {
   }
 
 });
-// CONCATENATED MODULE: ./src/converse-mam-views.js
+// CONCATENATED MODULE: ./src/plugins/mam-views.js
 /**
  * @module converse-mam-views
  * @description
@@ -96130,12 +100752,14 @@ converse.plugins.add('converse-mam-views', {
   dependencies: ['converse-mam', 'converse-chatview', 'converse-muc-views'],
 
   initialize() {
-    converse_core_api.listen.on('chatBoxScrolledUp', async view => {
+    core_api.listen.on('chatBoxScrolledUp', async view => {
       if (view.model.messages.length) {
+        const is_groupchat = view.model.get('type') === core_converse.CHATROOMS_TYPE;
+
         const oldest_message = view.model.getOldestMessage();
 
         if (oldest_message) {
-          const by_jid = view.model.get('jid');
+          const by_jid = is_groupchat ? view.model.get('jid') : core_converse.bare_jid;
           const stanza_id = oldest_message && oldest_message.get("stanza_id ".concat(by_jid));
           view.addSpinner();
 
@@ -96149,7 +100773,7 @@ converse.plugins.add('converse-mam-views', {
             });
           }
 
-          view.clearSpinner();
+          view.clearSpinner(); // _converse.router.history.navigate(`#${oldest_message.get('msgid')}`);
         }
       }
     });
@@ -96160,7 +100784,7 @@ converse.plugins.add('converse-mam-views', {
 function trimmed_chat_templateObject2() {
   const data = trimmed_chat_taggedTemplateLiteral(["<span class=\"message-count badge badge-light\">", "</span>"]);
 
-  trimmed_chat_templateObject2 = function _templateObject2() {
+  trimmed_chat_templateObject2 = function () {
     return data;
   };
 
@@ -96170,7 +100794,7 @@ function trimmed_chat_templateObject2() {
 function trimmed_chat_templateObject() {
   const data = trimmed_chat_taggedTemplateLiteral(["\n        <div class=\"chat-head-", " chat-head row no-gutters\">\n            <a class=\"restore-chat w-100 align-self-center\" title=\"", "\" @click=", ">\n                ", "\n                ", "\n            </a>\n            <a class=\"chatbox-btn close-chatbox-button fa fa-times\" @click=", "></a>\n        </div>"]);
 
-  trimmed_chat_templateObject = function _templateObject() {
+  trimmed_chat_templateObject = function () {
     return data;
   };
 
@@ -96222,7 +100846,7 @@ class minimized_chat_MinimizedChat extends element_CustomElement {
   close(ev) {
     ev === null || ev === void 0 ? void 0 : ev.preventDefault();
 
-    const view = converse_core_converse.chatboxviews.get(this.model.get('id'));
+    const view = core_converse.chatboxviews.get(this.model.get('id'));
 
     if (view) {
       // This will call model.destroy(), removing it from the
@@ -96230,7 +100854,7 @@ class minimized_chat_MinimizedChat extends element_CustomElement {
       view.close();
     } else {
       this.model.destroy();
-      converse_core_api.trigger('chatBoxClosed', this);
+      core_api.trigger('chatBoxClosed', this);
     }
   }
 
@@ -96240,12 +100864,12 @@ class minimized_chat_MinimizedChat extends element_CustomElement {
   }
 
 }
-converse_core_api.elements.define('converse-minimized-chat', minimized_chat_MinimizedChat);
+core_api.elements.define('converse-minimized-chat', minimized_chat_MinimizedChat);
 // CONCATENATED MODULE: ./src/templates/chats_panel.js
 function chats_panel_templateObject2() {
   const data = chats_panel_taggedTemplateLiteral(["<converse-minimized-chat\n                        .model=", "\n                        title=", "\n                        type=", "\n                        num_unread=", "></converse-minimized-chat>"]);
 
-  chats_panel_templateObject2 = function _templateObject2() {
+  chats_panel_templateObject2 = function () {
     return data;
   };
 
@@ -96255,7 +100879,7 @@ function chats_panel_templateObject2() {
 function chats_panel_templateObject() {
   const data = chats_panel_taggedTemplateLiteral(["<div id=\"minimized-chats\" class=\"", "\">\n        <a id=\"toggle-minimized-chats\" class=\"row no-gutters\" @click=", ">\n            ", " ", "\n            <span class=\"unread-message-count ", "\" href=\"#\">", "</span>\n        </a>\n        <div class=\"flyout minimized-chats-flyout row no-gutters ", "\">\n            ", "\n        </div>\n    </div>"]);
 
-  chats_panel_templateObject = function _templateObject() {
+  chats_panel_templateObject = function () {
     return data;
   };
 
@@ -96267,7 +100891,7 @@ function chats_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = str
 
 
 /* harmony default export */ var chats_panel = (o => lit_html_html(chats_panel_templateObject(), o.chats.length ? '' : 'hidden', o.toggle, o.num_minimized, i18n_('Minimized'), !o.num_unread ? 'unread-message-count-hidden' : '', o.num_unread, o.collapsed ? 'hidden' : '', o.chats.map(chat => lit_html_html(chats_panel_templateObject2(), chat, chat.getDisplayName(), chat.get('type'), chat.get('num_unread')))));
-// CONCATENATED MODULE: ./src/converse-minimize.js
+// CONCATENATED MODULE: ./src/plugins/minimize.js
 /**
  * @module converse-minimize
  * @copyright 2020, the Converse.js contributors
@@ -96283,9 +100907,9 @@ function chats_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = str
 
 
 const {
-  dayjs: converse_minimize_dayjs
+  dayjs: minimize_dayjs
 } = converse.env;
-const converse_minimize_u = converse.env.utils;
+const minimize_u = converse.env.utils;
 converse.plugins.add('converse-minimize', {
   /* Optional dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -96323,7 +100947,7 @@ converse.plugins.add('converse-minimize', {
 
         this.save({
           'minimized': this.get('minimized') || false,
-          'time_minimized': this.get('time_minimized') || converse_minimize_dayjs()
+          'time_minimized': this.get('time_minimized') || minimize_dayjs()
         });
       },
 
@@ -96359,10 +100983,6 @@ converse.plugins.add('converse-minimize', {
         return this.model.get('minimized') || this.__super__.isNewMessageHidden.apply(this, arguments);
       },
 
-      shouldShowOnTextMessage() {
-        return !this.model.get('minimized') && this.__super__.shouldShowOnTextMessage.apply(this, arguments);
-      },
-
       setChatBoxHeight(height) {
         if (!this.model.get('minimized')) {
           return this.__super__.setChatBoxHeight.call(this, height);
@@ -96382,26 +101002,26 @@ converse.plugins.add('converse-minimize', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by Converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'no_trimming': false
     });
     const minimizableChatBox = {
       maximize() {
-        converse_minimize_u.safeSave(this, {
+        minimize_u.safeSave(this, {
           'minimized': false,
           'time_opened': new Date().getTime()
         });
       },
 
       minimize() {
-        converse_minimize_u.safeSave(this, {
+        minimize_u.safeSave(this, {
           'minimized': true,
           'time_minimized': new Date().toISOString()
         });
       }
 
     };
-    Object.assign(converse_core_converse.ChatBox.prototype, minimizableChatBox);
+    Object.assign(core_converse.ChatBox.prototype, minimizableChatBox);
     const minimizableChatBoxView = {
       /**
        * Handler which gets called when a {@link _converse#ChatBox} has it's
@@ -96430,7 +101050,7 @@ converse.plugins.add('converse-minimize', {
          * @example _converse.api.listen.on('chatBoxMaximized', view => { ... });
          */
 
-        converse_core_api.trigger('chatBoxMaximized', this);
+        core_api.trigger('chatBoxMaximized', this);
         return this;
       },
 
@@ -96471,7 +101091,7 @@ converse.plugins.add('converse-minimize', {
          * @example _converse.api.listen.on('chatBoxMinimized', view => { ... });
          */
 
-        converse_core_api.trigger('chatBoxMinimized', this);
+        core_api.trigger('chatBoxMinimized', this);
         return this;
       },
 
@@ -96497,20 +101117,20 @@ converse.plugins.add('converse-minimize', {
       }
 
     };
-    Object.assign(converse_core_converse.ChatBoxView.prototype, minimizableChatBoxView);
+    Object.assign(core_converse.ChatBoxView.prototype, minimizableChatBoxView);
     const chatTrimmer = {
       getChatBoxWidth(view) {
         if (view.model.get('id') === 'controlbox') {
           const controlbox = this.get('controlbox'); // We return the width of the controlbox or its toggle,
           // depending on which is visible.
 
-          if (!controlbox || !converse_minimize_u.isVisible(controlbox.el)) {
-            return converse_minimize_u.getOuterWidth(converse_core_converse.controlboxtoggle.el, true);
+          if (!controlbox || !minimize_u.isVisible(controlbox.el)) {
+            return minimize_u.getOuterWidth(core_converse.controlboxtoggle.el, true);
           } else {
-            return converse_minimize_u.getOuterWidth(controlbox.el, true);
+            return minimize_u.getOuterWidth(controlbox.el, true);
           }
-        } else if (!view.model.get('minimized') && converse_minimize_u.isVisible(view.el)) {
-          return converse_minimize_u.getOuterWidth(view.el, true);
+        } else if (!view.model.get('minimized') && minimize_u.isVisible(view.el)) {
+          return minimize_u.getOuterWidth(view.el, true);
         }
 
         return 0;
@@ -96520,19 +101140,19 @@ converse.plugins.add('converse-minimize', {
         return this.filter(view => // The controlbox can take a while to close,
         // so we need to check its state. That's why we checked
         // the 'closed' state.
-        !view.model.get('minimized') && !view.model.get('closed') && converse_minimize_u.isVisible(view.el));
+        !view.model.get('minimized') && !view.model.get('closed') && minimize_u.isVisible(view.el));
       },
 
       getMinimizedWidth() {
         var _converse$minimized_c;
 
-        const minimized_el = (_converse$minimized_c = converse_core_converse.minimized_chats) === null || _converse$minimized_c === void 0 ? void 0 : _converse$minimized_c.el;
-        return this.model.pluck('minimized').includes(true) ? converse_minimize_u.getOuterWidth(minimized_el, true) : 0;
+        const minimized_el = (_converse$minimized_c = core_converse.minimized_chats) === null || _converse$minimized_c === void 0 ? void 0 : _converse$minimized_c.el;
+        return this.model.pluck('minimized').includes(true) ? minimize_u.getOuterWidth(minimized_el, true) : 0;
       },
 
       getBoxesWidth(newchat) {
         const new_id = newchat ? newchat.model.get('id') : null;
-        const newchat_width = newchat ? converse_minimize_u.getOuterWidth(newchat.el, true) : 0;
+        const newchat_width = newchat ? minimize_u.getOuterWidth(newchat.el, true) : 0;
         return Object.values(this.xget(new_id)).reduce((memo, view) => memo + this.getChatBoxWidth(view), newchat_width);
       },
 
@@ -96548,7 +101168,7 @@ converse.plugins.add('converse-minimize', {
       async trimChats(newchat) {
         var _converse$minimized_c2;
 
-        if (converse_core_api.settings.get('no_trimming') || !converse_core_api.connection.connected() || converse_core_api.settings.get("view_mode") !== 'overlayed') {
+        if (core_api.settings.get('no_trimming') || !core_api.connection.connected() || core_api.settings.get("view_mode") !== 'overlayed') {
           return;
         }
 
@@ -96558,7 +101178,7 @@ converse.plugins.add('converse-minimize', {
           return;
         }
 
-        const body_width = converse_minimize_u.getOuterWidth(document.querySelector('body'), true);
+        const body_width = minimize_u.getOuterWidth(document.querySelector('body'), true);
 
         if (this.getChatBoxWidth(shown_chats[0]) === body_width) {
           // If the chats shown are the same width as the body,
@@ -96567,8 +101187,8 @@ converse.plugins.add('converse-minimize', {
           return;
         }
 
-        await converse_core_api.waitUntil('minimizedChatsInitialized');
-        const minimized_el = (_converse$minimized_c2 = converse_core_converse.minimized_chats) === null || _converse$minimized_c2 === void 0 ? void 0 : _converse$minimized_c2.el;
+        await core_api.waitUntil('minimizedChatsInitialized');
+        const minimized_el = (_converse$minimized_c2 = core_converse.minimized_chats) === null || _converse$minimized_c2 === void 0 ? void 0 : _converse$minimized_c2.el;
 
         if (minimized_el) {
           while (this.getMinimizedWidth() + this.getBoxesWidth(newchat) > body_width) {
@@ -96613,14 +101233,14 @@ converse.plugins.add('converse-minimize', {
       }
 
     };
-    Object.assign(converse_core_converse.ChatBoxViews.prototype, chatTrimmer);
-    converse_core_api.promises.add('minimizedChatsInitialized');
-    converse_core_converse.MinimizedChatsToggle = model_Model.extend({
+    Object.assign(core_converse.ChatBoxViews.prototype, chatTrimmer);
+    core_api.promises.add('minimizedChatsInitialized');
+    core_converse.MinimizedChatsToggle = model_Model.extend({
       defaults: {
         'collapsed': false
       }
     });
-    converse_core_converse.MinimizedChats = view_View.extend({
+    core_converse.MinimizedChats = View.extend({
       tagName: 'span',
 
       async initialize() {
@@ -96655,16 +101275,16 @@ converse.plugins.add('converse-minimize', {
         render_render(chats_panel(data), this.el);
 
         if (!this.el.parentElement) {
-          converse_core_converse.chatboxviews.insertRowColumn(this.el);
+          core_converse.chatboxviews.insertRowColumn(this.el);
         }
       },
 
       async initToggle() {
-        const id = "converse.minchatstoggle-".concat(converse_core_converse.bare_jid);
-        this.minchats = new converse_core_converse.MinimizedChatsToggle({
+        const id = "converse.minchatstoggle-".concat(core_converse.bare_jid);
+        this.minchats = new core_converse.MinimizedChatsToggle({
           id
         });
-        this.minchats.browserStorage = converse_core_converse.createStore(id);
+        this.minchats.browserStorage = core_converse.createStore(id);
         await new Promise(resolve => this.minchats.fetch({
           'success': resolve,
           'error': resolve
@@ -96683,9 +101303,9 @@ converse.plugins.add('converse-minimize', {
     function initMinimizedChats() {
       var _converse$minimized_c3;
 
-      (_converse$minimized_c3 = converse_core_converse.minimized_chats) === null || _converse$minimized_c3 === void 0 ? void 0 : _converse$minimized_c3.remove();
-      converse_core_converse.minimized_chats = new converse_core_converse.MinimizedChats({
-        model: converse_core_converse.chatboxes
+      (_converse$minimized_c3 = core_converse.minimized_chats) === null || _converse$minimized_c3 === void 0 ? void 0 : _converse$minimized_c3.remove();
+      core_converse.minimized_chats = new core_converse.MinimizedChats({
+        model: core_converse.chatboxes
       });
       /**
        * Triggered once the _converse.MinimizedChats instance has been initialized
@@ -96693,7 +101313,7 @@ converse.plugins.add('converse-minimize', {
        * @example _converse.api.listen.on('minimizedChatsInitialized', () => { ... });
        */
 
-      converse_core_api.trigger('minimizedChatsInitialized');
+      core_api.trigger('minimizedChatsInitialized');
     }
 
     function addMinimizeButtonToChat(view, buttons) {
@@ -96704,7 +101324,7 @@ converse.plugins.add('converse-minimize', {
         'i18n_title': i18n_('Minimize this chat'),
         'icon_class': "fa-minus",
         'name': 'minimize',
-        'standalone': converse_core_converse.api.settings.get("view_mode") === 'overlayed'
+        'standalone': core_converse.api.settings.get("view_mode") === 'overlayed'
       };
       const names = buttons.map(t => t.name);
       const idx = names.indexOf('close');
@@ -96719,7 +101339,7 @@ converse.plugins.add('converse-minimize', {
         'i18n_title': i18n_('Minimize this groupchat'),
         'icon_class': "fa-minus",
         'name': 'minimize',
-        'standalone': converse_core_converse.api.settings.get("view_mode") === 'overlayed'
+        'standalone': core_converse.api.settings.get("view_mode") === 'overlayed'
       };
       const names = buttons.map(t => t.name);
       const idx = names.indexOf('signout');
@@ -96728,240 +101348,395 @@ converse.plugins.add('converse-minimize', {
     /************************ BEGIN Event Handlers ************************/
 
 
-    converse_core_api.listen.on('chatBoxInsertedIntoDOM', view => converse_core_converse.chatboxviews.trimChats(view));
-    converse_core_api.listen.on('connected', () => initMinimizedChats());
-    converse_core_api.listen.on('controlBoxOpened', view => converse_core_converse.chatboxviews.trimChats(view));
-    converse_core_api.listen.on('chatBoxViewInitialized', v => v.listenTo(v.model, 'change:minimized', v.onMinimizedChanged));
-    converse_core_api.listen.on('chatRoomViewInitialized', view => {
+    core_api.listen.on('chatBoxInsertedIntoDOM', view => core_converse.chatboxviews.trimChats(view));
+    core_api.listen.on('connected', () => initMinimizedChats());
+    core_api.listen.on('controlBoxOpened', view => core_converse.chatboxviews.trimChats(view));
+    core_api.listen.on('chatBoxViewInitialized', v => v.listenTo(v.model, 'change:minimized', v.onMinimizedChanged));
+    core_api.listen.on('chatRoomViewInitialized', view => {
       view.listenTo(view.model, 'change:minimized', view.onMinimizedChanged);
       view.model.get('minimized') && view.hide();
     });
-    converse_core_api.listen.on('getHeadingButtons', (view, buttons) => {
-      if (view.model.get('type') === converse_core_converse.CHATROOMS_TYPE) {
+    core_api.listen.on('getHeadingButtons', (view, buttons) => {
+      if (view.model.get('type') === core_converse.CHATROOMS_TYPE) {
         return addMinimizeButtonToMUC(view, buttons);
       } else {
         return addMinimizeButtonToChat(view, buttons);
       }
     });
-    const debouncedTrimChats = lodash_es_debounce(() => converse_core_converse.chatboxviews.trimChats(), 250);
-    converse_core_api.listen.on('registeredGlobalEventHandlers', () => window.addEventListener("resize", debouncedTrimChats));
-    converse_core_api.listen.on('unregisteredGlobalEventHandlers', () => window.removeEventListener("resize", debouncedTrimChats));
+    const debouncedTrimChats = lodash_es_debounce(() => core_converse.chatboxviews.trimChats(), 250);
+    core_api.listen.on('registeredGlobalEventHandlers', () => window.addEventListener("resize", debouncedTrimChats));
+    core_api.listen.on('unregisteredGlobalEventHandlers', () => window.removeEventListener("resize", debouncedTrimChats));
     /************************ END Event Handlers ************************/
   }
 
 });
-// CONCATENATED MODULE: ./src/templates/add_chatroom_modal.js
-function add_chatroom_modal_templateObject4() {
-  const data = add_chatroom_modal_taggedTemplateLiteral(["<div class=\"form-group\">", "</div>"]);
+// CONCATENATED MODULE: ./src/templates/occupant.js
+function occupant_templateObject6() {
+  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-secondary\">", "</span>"]);
 
-  add_chatroom_modal_templateObject4 = function _templateObject4() {
+  occupant_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function add_chatroom_modal_templateObject3() {
-  const data = add_chatroom_modal_taggedTemplateLiteral(["<label class=\"roomid-policy-error\">", "</label>"]);
+function occupant_templateObject5() {
+  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
 
-  add_chatroom_modal_templateObject3 = function _templateObject3() {
+  occupant_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function add_chatroom_modal_templateObject2() {
-  const data = add_chatroom_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"add-chatroom-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <form class=\"converse-form add-chatroom\">\n                        <div class=\"form-group\">\n                            <label for=\"chatroom\">", ":</label>\n                            ", "\n                            <input type=\"text\" required=\"required\" name=\"chatroom\" class=\"form-control roomjid-input\" placeholder=\"", "\"/>\n                        </div>\n                        ", "\n                        ", "\n                        <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"", "\" ?disabled=", ">\n                    </form>\n                </div>\n            </div>\n        </div>\n    "]);
+function occupant_templateObject4() {
+  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
 
-  add_chatroom_modal_templateObject2 = function _templateObject2() {
+  occupant_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function add_chatroom_modal_templateObject() {
-  const data = add_chatroom_modal_taggedTemplateLiteral(["\n        <div class=\"form-group\" >\n            <label for=\"nickname\">", ":</label>\n            <input type=\"text\" title=\"", "\" required=\"required\" name=\"nickname\" value=\"", "\" class=\"form-control\"/>\n        </div>\n    "]);
+function occupant_templateObject3() {
+  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
 
-  add_chatroom_modal_templateObject = function _templateObject() {
+  occupant_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function add_chatroom_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function occupant_templateObject2() {
+  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-groupchat\">", "</span>"]);
 
+  occupant_templateObject2 = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function occupant_templateObject() {
+  const data = occupant_taggedTemplateLiteral(["\n        <li class=\"occupant\" id=\"", "\" title=\"", "\">\n            <div class=\"row no-gutters\">\n                <div class=\"col-auto\">\n                    <div class=\"occupant-status occupant-", " circle\" title=\"", "\"></div>\n                </div>\n                <div class=\"col occupant-nick-badge\">\n                    <span class=\"occupant-nick\">", "</span>\n                    <span class=\"occupant-badges\">\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                    </span>\n                </div>\n            </div>\n        </li>\n    "]);
 
+  occupant_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function occupant_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-const nickname_input = o => {
-  const i18n_nickname = i18n_('Nickname');
 
-  const i18n_required_field = i18n_('This field is required');
 
-  return lit_html_html(add_chatroom_modal_templateObject(), i18n_nickname, i18n_required_field, o.nick || '');
+
+const occupant_title = o => {
+  const i18n_moderator_hint = i18n_('This user is a moderator.');
+
+  const i18n_participant_hint = i18n_('This user can send messages in this groupchat.');
+
+  const i18n_visitor_hint = i18n_('This user can NOT send messages in this groupchat.');
+
+  const spaced_jid = "".concat(o.jid, " ") || false;
+
+  if (o.role === "moderator") {
+    return "".concat(spaced_jid).concat(i18n_moderator_hint, " ").concat(o.hint_occupant);
+  } else if (o.role === "participant") {
+    return "".concat(spaced_jid).concat(i18n_participant_hint, " ").concat(o.hint_occupant);
+  } else if (o.role === "visitor") {
+    return "".concat(spaced_jid).concat(i18n_visitor_hint, " ").concat(o.hint_occupant);
+  } else if (!["visitor", "participant", "moderator"].includes(o.role)) {
+    return "".concat(spaced_jid).concat(o.hint_occupant);
+  }
 };
 
-/* harmony default export */ var add_chatroom_modal = (o => {
-  const i18n_join = i18n_('Join');
+/* harmony default export */ var templates_occupant = (o => {
+  const i18n_owner = i18n_('Owner');
 
-  const i18n_enter = i18n_('Enter a new Groupchat');
+  const i18n_admin = i18n_('Admin');
 
-  return lit_html_html(add_chatroom_modal_templateObject2(), i18n_enter, modal_header_close_button, o.label_room_address, o.muc_roomid_policy_error_msg ? lit_html_html(add_chatroom_modal_templateObject3(), o.muc_roomid_policy_error_msg) : '', o.chatroom_placeholder, o.muc_roomid_policy_hint ? lit_html_html(add_chatroom_modal_templateObject4(), unsafeHTML(xss_default.a.filterXSS(o.muc_roomid_policy_hint, {
-    'whiteList': {
-      b: [],
-      br: [],
-      em: []
-    }
-  }))) : '', !o._converse.locked_muc_nickname ? nickname_input(o) : '', i18n_join || '', o.muc_roomid_policy_error_msg);
+  const i18n_member = i18n_('Member');
+
+  const i18n_moderator = i18n_('Moderator');
+
+  const i18n_visitor = i18n_('Visitor');
+
+  return lit_html_html(occupant_templateObject(), o.id, occupant_title(o), o.show, o.hint_show, o.nick || o.jid, o.affiliation === "owner" ? lit_html_html(occupant_templateObject2(), i18n_owner) : '', o.affiliation === "admin" ? lit_html_html(occupant_templateObject3(), i18n_admin) : '', o.affiliation === "member" ? lit_html_html(occupant_templateObject4(), i18n_member) : '', o.role === "moderator" ? lit_html_html(occupant_templateObject5(), i18n_moderator) : '', o.role === "visitor" ? lit_html_html(occupant_templateObject6(), i18n_visitor) : '');
 });
-// EXTERNAL MODULE: ./node_modules/strophe.js/src/strophe.js
-var src_strophe = __webpack_require__(20);
+// CONCATENATED MODULE: ./src/templates/muc_sidebar.js
+function muc_sidebar_templateObject() {
+  const data = muc_sidebar_taggedTemplateLiteral(["\n        <div class=\"occupants-header\">\n            <i class=\"hide-occupants fa fa-times\"></i>\n            <div class=\"occupants-header--title\">\n                <span class=\"occupants-heading\">", "</span>\n            </div>\n        </div>\n        <div class=\"dragresize dragresize-occupants-left\"></div>\n        <ul class=\"occupant-list\">", "</ul>\n    "]);
 
-// CONCATENATED MODULE: ./src/modals/add-muc.js
+  muc_sidebar_templateObject = function () {
+    return data;
+  };
 
+  return data;
+}
 
+function muc_sidebar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
-const add_muc_u = converse.env.utils;
-/* harmony default export */ var add_muc = (BootstrapModal.extend({
-  id: 'add-chatroom-modal',
-  events: {
-    'submit form.add-chatroom': 'openChatRoom',
-    'keyup .roomjid-input': 'checkRoomidPolicy',
-    'change .roomjid-input': 'checkRoomidPolicy'
-  },
 
-  initialize() {
-    BootstrapModal.prototype.initialize.apply(this, arguments);
-    this.listenTo(this.model, 'change:muc_domain', this.render);
-    this.muc_roomid_policy_error_msg = null;
-  },
+const PRETTY_CHAT_STATUS = {
+  'offline': 'Offline',
+  'unavailable': 'Unavailable',
+  'xa': 'Extended Away',
+  'away': 'Away',
+  'dnd': 'Do not disturb',
+  'chat': 'Chattty',
+  'online': 'Online'
+};
+/* harmony default export */ var muc_sidebar = (o => {
+  const i18n_occupant_hint = occupant => i18n_('Click to mention %1$s in your message.', occupant.get('nick'));
 
-  toHTML() {
-    let placeholder = '';
+  const i18n_participants = i18n_('Participants');
 
-    if (!converse_core_api.settings.get('locked_muc_domain')) {
-      const muc_domain = this.model.get('muc_domain') || converse_core_api.settings.get('muc_domain');
-      placeholder = muc_domain ? "name@".concat(muc_domain) : i18n_('name@conference.example.org');
-    }
+  const occupant_tpls = o.occupants.map(occupant => {
+    return templates_occupant(Object.assign({
+      'jid': '',
+      'hint_show': PRETTY_CHAT_STATUS[occupant.get('show')],
+      'hint_occupant': i18n_occupant_hint(occupant)
+    }, occupant.toJSON()));
+  });
+  return lit_html_html(muc_sidebar_templateObject(), i18n_participants, occupant_tpls);
+});
+// CONCATENATED MODULE: ./src/components/muc-sidebar.js
 
-    return add_chatroom_modal(Object.assign(this.model.toJSON(), {
-      '_converse': converse_core_converse,
-      'label_room_address': converse_core_api.settings.get('muc_domain') ? i18n_('Groupchat name') : i18n_('Groupchat address'),
-      'chatroom_placeholder': placeholder,
-      'muc_roomid_policy_error_msg': this.muc_roomid_policy_error_msg,
-      'muc_roomid_policy_hint': converse_core_api.settings.get('muc_roomid_policy_hint')
+
+
+
+const muc_sidebar_u = converse.env.utils;
+class muc_sidebar_MUCSidebar extends element_CustomElement {
+  static get properties() {
+    return {
+      chatroom: {
+        type: Object
+      },
+      occupants: {
+        type: Object
+      }
+    };
+  }
+
+  connectedCallback() {
+    super.connectedCallback();
+    this.listenTo(this.occupants, 'add', this.requestUpdate);
+    this.listenTo(this.occupants, 'remove', this.requestUpdate);
+    this.listenTo(this.occupants, 'change', this.requestUpdate);
+  }
+
+  render() {
+    const tpl = muc_sidebar(Object.assign(this.chatroom.toJSON(), {
+      'occupants': [...this.occupants.models]
     }));
-  },
+    return tpl;
+  }
 
-  afterRender() {
-    this.el.addEventListener('shown.bs.modal', () => {
-      this.el.querySelector('input[name="chatroom"]').focus();
-    }, false);
+  shouldShow() {
+    return !this.chatroom.get('hidden_occupants') && this.chatroom.session.get('connection_status') === converse.ROOMSTATUS.ENTERED;
+  }
+
+  setVisibility() {
+    // TODO: We're still manually showing/hiding stuff in ChatRoomView,
+    // eventually we want everything to render declaratively, after which this
+    // method won't be necessary anymore
+    this.shouldShow() ? muc_sidebar_u.showElement(this) : muc_sidebar_u.hideElement(this);
+  }
+
+}
+core_api.elements.define('converse-muc-sidebar', muc_sidebar_MUCSidebar);
+// CONCATENATED MODULE: ./src/templates/muc_config_form.js
+function muc_config_form_templateObject2() {
+  const data = muc_config_form_taggedTemplateLiteral(["<p class=\"form-help\">", "</p>"]);
+
+  muc_config_form_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_config_form_templateObject() {
+  const data = muc_config_form_taggedTemplateLiteral(["\n        <form class=\"converse-form chatroom-form\" autocomplete=\"off\" @submit=", ">\n            <fieldset class=\"form-group\">\n                <legend>", "</legend>\n                ", "\n                <!-- Fields are generated internally, with xForm2webForm -->\n                ", "\n            </fieldset>\n            <fieldset>\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\">\n                <input type=\"button\" class=\"btn btn-secondary button-cancel\" value=\"", "\" @click=", ">\n            </fieldset>\n        </form>\n    "]);
+
+  muc_config_form_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_config_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+/* harmony default export */ var muc_config_form = (o => {
+  const i18n_save = i18n_('Save');
+
+  const i18n_cancel = i18n_('Cancel');
+
+  return lit_html_html(muc_config_form_templateObject(), o.submitConfigForm, o.title, o.title !== o.instructions ? lit_html_html(muc_config_form_templateObject2(), o.instructions) : '', o.fields.map(field => unsafeHTML(field)), i18n_save, i18n_cancel, o.closeConfigForm);
+});
+// CONCATENATED MODULE: ./src/plugins/muc-views/config-form.js
+
+
+
+
+
+const {
+  sizzle: config_form_sizzle
+} = converse.env;
+const config_form_u = converse.env.utils;
+const MUCConfigForm = View.extend({
+  className: 'chatroom-form-container muc-config-form',
+
+  initialize(attrs) {
+    this.chatroomview = attrs.chatroomview;
+    this.listenTo(this.chatroomview.model.features, 'change:passwordprotected', this.render);
+    this.listenTo(this.chatroomview.model.features, 'change:config_stanza', this.render);
+    this.render();
   },
 
-  parseRoomDataFromEvent(form) {
-    const data = new FormData(form);
-    const jid = data.get('chatroom');
-    let nick;
+  toHTML() {
+    var _stanza$querySelector, _stanza$querySelector2;
 
-    if (converse_core_api.settings.get('locked_muc_nickname')) {
-      nick = converse_core_converse.getDefaultMUCNickname();
+    const stanza = config_form_u.toStanza(this.model.get('config_stanza'));
+    const whitelist = core_api.settings.get('roomconfig_whitelist');
+    let fields = config_form_sizzle('field', stanza);
 
-      if (!nick) {
-        throw new Error("Using locked_muc_nickname but no nickname found!");
-      }
-    } else {
-      nick = data.get('nickname').trim();
+    if (whitelist.length) {
+      fields = fields.filter(f => whitelist.includes(f.getAttribute('var')));
     }
 
-    return {
-      'jid': jid,
-      'nick': nick
+    const password_protected = this.model.features.get('passwordprotected');
+    const options = {
+      'new_password': !password_protected,
+      'fixed_username': this.model.get('jid')
     };
+    return muc_config_form({
+      'closeConfigForm': ev => this.closeConfigForm(ev),
+      'fields': fields.map(f => config_form_u.xForm2webForm(f, stanza, options)),
+      'instructions': (_stanza$querySelector = stanza.querySelector('instructions')) === null || _stanza$querySelector === void 0 ? void 0 : _stanza$querySelector.textContent,
+      'submitConfigForm': ev => this.submitConfigForm(ev),
+      'title': (_stanza$querySelector2 = stanza.querySelector('title')) === null || _stanza$querySelector2 === void 0 ? void 0 : _stanza$querySelector2.textContent
+    });
   },
 
-  openChatRoom(ev) {
+  async submitConfigForm(ev) {
     ev.preventDefault();
-    const data = this.parseRoomDataFromEvent(ev.target);
+    const inputs = config_form_sizzle(':input:not([type=button]):not([type=submit])', ev.target);
+    const config_array = inputs.map(config_form_u.webForm2xForm).filter(f => f);
 
-    if (data.nick === "") {
-      // Make sure defaults apply if no nick is provided.
-      data.nick = undefined;
-    }
+    try {
+      await this.model.sendConfiguration(config_array);
+    } catch (e) {
+      headless_log.error(e);
 
-    let jid;
+      const message = i18n_("Sorry, an error occurred while trying to submit the config form.") + " " + i18n_("Check your browser's developer console for details.");
 
-    if (converse_core_api.settings.get('locked_muc_domain') || converse_core_api.settings.get('muc_domain') && !add_muc_u.isValidJID(data.jid)) {
-      jid = "".concat(src_strophe["b" /* Strophe */].escapeNode(data.jid), "@").concat(converse_core_api.settings.get('muc_domain'));
-    } else {
-      jid = data.jid;
-      this.model.setDomain(jid);
+      core_api.alert('error', i18n_('Error'), message);
     }
 
-    converse_core_api.rooms.open(jid, Object.assign(data, {
-      jid
-    }), true);
-    this.modal.hide();
-    ev.target.reset();
+    await this.model.refreshDiscoInfo();
+    this.chatroomview.closeForm();
   },
 
-  checkRoomidPolicy() {
-    if (converse_core_api.settings.get('muc_roomid_policy') && converse_core_api.settings.get('muc_domain')) {
-      let jid = this.el.querySelector('.roomjid-input').value;
+  closeConfigForm(ev) {
+    ev.preventDefault();
+    this.chatroomview.closeForm();
+  }
 
-      if (converse.locked_muc_domain || !add_muc_u.isValidJID(jid)) {
-        jid = "".concat(src_strophe["b" /* Strophe */].escapeNode(jid), "@").concat(converse_core_api.settings.get('muc_domain'));
-      }
+});
+/* harmony default export */ var config_form = (MUCConfigForm);
+// CONCATENATED MODULE: ./src/templates/muc_password_form.js
+function muc_password_form_templateObject() {
+  const data = muc_password_form_taggedTemplateLiteral(["\n        <form class=\"converse-form chatroom-form converse-centered-form\" @submit=", ">\n            <fieldset class=\"form-group\">\n                <label>", "</label>\n                <p class=\"validation-message\">", "</p>\n                <input class=\"hidden-username\" type=\"text\" autocomplete=\"username\" value=\"", "\"></input>\n                <input type=\"password\"\n                    name=\"password\"\n                    required=\"required\"\n                    class=\"form-control ", "\"\n                    placeholder=\"", "\"/>\n            </fieldset>\n            <fieldset class=\"form-group\">\n                <input class=\"btn btn-primary\" type=\"submit\" value=\"", "\"/>\n            </fieldset>\n        </form>\n    "]);
 
-      const roomid = src_strophe["b" /* Strophe */].getNodeFromJid(jid);
-      const roomdomain = src_strophe["b" /* Strophe */].getDomainFromJid(jid);
+  muc_password_form_templateObject = function () {
+    return data;
+  };
 
-      if (converse_core_api.settings.get('muc_domain') !== roomdomain || converse_core_api.settings.get('muc_roomid_policy').test(roomid)) {
-        this.muc_roomid_policy_error_msg = null;
-      } else {
-        this.muc_roomid_policy_error_msg = i18n_('Groupchat id is invalid.');
-      }
+  return data;
+}
 
-      this.render();
-    }
+function muc_password_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+/* harmony default export */ var muc_password_form = (o => {
+  const i18n_heading = i18n_('This groupchat requires a password');
+
+  const i18n_password = i18n_('Password: ');
+
+  const i18n_submit = i18n_('Submit');
+
+  return lit_html_html(muc_password_form_templateObject(), o.submitPassword, i18n_heading, o.validation_message, o.jid, o.validation_message ? 'error' : '', i18n_password, i18n_submit);
+});
+// CONCATENATED MODULE: ./src/plugins/muc-views/password-form.js
+
+
+const MUCPasswordForm = View.extend({
+  className: 'chatroom-form-container muc-password-form',
+
+  initialize(attrs) {
+    this.chatroomview = attrs.chatroomview;
+    this.listenTo(this.model, 'change:validation_message', this.render);
+    this.render();
+  },
+
+  toHTML() {
+    return muc_password_form({
+      'jid': this.model.get('jid'),
+      'submitPassword': ev => this.submitPassword(ev),
+      'validation_message': this.model.get('validation_message')
+    });
+  },
+
+  submitPassword(ev) {
+    ev.preventDefault();
+    const password = this.el.querySelector('input[type=password]').value;
+    this.chatroomview.model.join(this.chatroomview.model.get('nick'), password);
+    this.model.set('validation_message', null);
   }
 
-}));
-// CONCATENATED MODULE: ./src/templates/muc_invite_modal.js
-function muc_invite_modal_templateObject2() {
-  const data = muc_invite_modal_taggedTemplateLiteral(["<div class=\"error error-feedback\">", "</div>"]);
+});
+/* harmony default export */ var password_form = (MUCPasswordForm);
+// CONCATENATED MODULE: ./src/modals/templates/muc-invite.js
+function muc_invite_templateObject2() {
+  const data = muc_invite_taggedTemplateLiteral(["<div class=\"error error-feedback\">", "</div>"]);
 
-  muc_invite_modal_templateObject2 = function _templateObject2() {
+  muc_invite_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_invite_modal_templateObject() {
-  const data = muc_invite_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"add-chatroom-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <div class=\"suggestion-box room-invite\">\n                        <form @submit=", ">\n                            <div class=\"form-group\">\n                                <label class=\"clearfix\" for=\"invitee_jids\">", ":</label>\n                                ", "\n                                <input class=\"form-control suggestion-box__input\"\n                                    required=\"required\"\n                                    name=\"invitee_jids\"\n                                    id=\"invitee_jids\"\n                                    placeholder=\"", "\"\n                                    type=\"text\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                                <ul class=\"suggestion-box__results suggestion-box__results--below\" hidden=\"\"></ul>\n                            </div>\n                            <div class=\"form-group\">\n                                <label>", ":</label>\n                                <textarea class=\"form-control\" name=\"reason\"></textarea>\n                            </div>\n                            <div class=\"form-group\">\n                                <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);
+function muc_invite_templateObject() {
+  const data = muc_invite_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"add-chatroom-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <div class=\"suggestion-box room-invite\">\n                        <form @submit=", ">\n                            <div class=\"form-group\">\n                                <label class=\"clearfix\" for=\"invitee_jids\">", ":</label>\n                                ", "\n                                <input class=\"form-control suggestion-box__input\"\n                                    required=\"required\"\n                                    name=\"invitee_jids\"\n                                    id=\"invitee_jids\"\n                                    placeholder=\"", "\"\n                                    type=\"text\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                                <ul class=\"suggestion-box__results suggestion-box__results--below\" hidden=\"\"></ul>\n                            </div>\n                            <div class=\"form-group\">\n                                <label>", ":</label>\n                                <textarea class=\"form-control\" name=\"reason\"></textarea>\n                            </div>\n                            <div class=\"form-group\">\n                                <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);
 
-  muc_invite_modal_templateObject = function _templateObject() {
+  muc_invite_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_invite_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function muc_invite_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
-/* harmony default export */ var muc_invite_modal = (o => {
+/* harmony default export */ var muc_invite = (o => {
   const i18n_invite = i18n_('Invite');
 
   const i18n_invite_heading = i18n_('Invite someone to this groupchat');
@@ -96974,24 +101749,24 @@ function muc_invite_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw
 
   const i18n_reason = i18n_('Optional reason for the invitation');
 
-  return lit_html_html(muc_invite_modal_templateObject(), i18n_invite_heading, modal_header_close_button, o.submitInviteForm, i18n_invite_label, o.invalid_invite_jid ? lit_html_html(muc_invite_modal_templateObject2(), i18n_error_message) : '', i18n_jid_placeholder, i18n_reason, i18n_invite);
+  return lit_html_html(muc_invite_templateObject(), i18n_invite_heading, modal_header_close_button, o.submitInviteForm, i18n_invite_label, o.invalid_invite_jid ? lit_html_html(muc_invite_templateObject2(), i18n_error_message) : '', i18n_jid_placeholder, i18n_reason, i18n_invite);
 });
 // CONCATENATED MODULE: ./src/modals/muc-invite.js
 
 
 
 const muc_invite_u = converse.env.utils;
-/* harmony default export */ var muc_invite = (BootstrapModal.extend({
+/* harmony default export */ var modals_muc_invite = (modals_base.extend({
   id: "muc-invite-modal",
 
   initialize() {
-    BootstrapModal.prototype.initialize.apply(this, arguments);
+    modals_base.prototype.initialize.apply(this, arguments);
     this.listenTo(this.model, 'change', this.render);
     this.initInviteWidget();
   },
 
   toHTML() {
-    return muc_invite_modal(Object.assign(this.model.toJSON(), {
+    return muc_invite(Object.assign(this.model.toJSON(), {
       'submitInviteForm': ev => this.submitInviteForm(ev)
     }));
   },
@@ -97001,13 +101776,13 @@ const muc_invite_u = converse.env.utils;
       this.invite_auto_complete.destroy();
     }
 
-    const list = converse_core_converse.roster.map(i => ({
+    const list = core_converse.roster.map(i => ({
       'label': i.getDisplayName(),
       'value': i.get('jid')
     }));
 
     const el = this.el.querySelector('.suggestion-box').parentElement;
-    this.invite_auto_complete = new converse_core_converse.AutoComplete(el, {
+    this.invite_auto_complete = new core_converse.AutoComplete(el, {
       'min_chars': 1,
       'list': list
     });
@@ -97032,288 +101807,11 @@ const muc_invite_u = converse.env.utils;
   }
 
 }));
-// CONCATENATED MODULE: ./src/templates/list_chatrooms_modal.js
-function list_chatrooms_modal_templateObject5() {
-  const data = list_chatrooms_modal_taggedTemplateLiteral(["<li class=\"list-group-item active\">", "</li>"]);
-
-  list_chatrooms_modal_templateObject5 = function _templateObject5() {
-    return data;
-  };
-
-  return data;
-}
-
-function list_chatrooms_modal_templateObject4() {
-  const data = list_chatrooms_modal_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
-
-  list_chatrooms_modal_templateObject4 = function _templateObject4() {
-    return data;
-  };
-
-  return data;
-}
-
-function list_chatrooms_modal_templateObject3() {
-  const data = list_chatrooms_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"list-chatrooms-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body d-flex flex-column\">\n                    <span class=\"modal-alert\"></span>\n                    ", "\n                    <ul class=\"available-chatrooms list-group\">\n                        ", "\n                        ", "\n                        ", "\n                    </ul>\n                </div>\n                <div class=\"modal-footer\">", "</div>\n            </div>\n        </div>\n    "]);
-
-  list_chatrooms_modal_templateObject3 = function _templateObject3() {
-    return data;
-  };
-
-  return data;
-}
-
-function list_chatrooms_modal_templateObject2() {
-  const data = list_chatrooms_modal_taggedTemplateLiteral(["\n        <li class=\"room-item list-group-item\">\n            <div class=\"available-chatroom d-flex flex-row\">\n                <a class=\"open-room available-room w-100\"\n                @click=", "\n                data-room-jid=\"", "\"\n                data-room-name=\"", "\"\n                title=\"", "\"\n                href=\"#\">", "</a>\n                <a class=\"right room-info icon-room-info\"\n                @click=", "\n                data-room-jid=\"", "\"\n                title=\"", "\"\n                href=\"#\"></a>\n            </div>\n        </li>\n    "]);
-
-  list_chatrooms_modal_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function list_chatrooms_modal_templateObject() {
-  const data = list_chatrooms_modal_taggedTemplateLiteral(["\n        <form class=\"converse-form list-chatrooms\"\n            @submit=", ">\n            <div class=\"form-group\">\n                <label for=\"chatroom\">", ":</label>\n                <input type=\"text\"\n                    @change=", "\n                    value=\"", "\"\n                    required=\"required\"\n                    name=\"server\"\n                    class=\"form-control\"\n                    placeholder=\"", "\"/>\n            </div>\n            <input type=\"submit\" class=\"btn btn-primary\" name=\"list\" value=\"", "\"/>\n        </form>\n    "]);
-
-  list_chatrooms_modal_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function list_chatrooms_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-
-
-
-const list_chatrooms_modal_form = o => {
-  const i18n_query = i18n_('Show groupchats');
-
-  const i18n_server_address = i18n_('Server address');
-
-  return lit_html_html(list_chatrooms_modal_templateObject(), o.submitForm, i18n_server_address, o.setDomainFromEvent, o.muc_domain || '', o.server_placeholder, i18n_query);
-};
-
-const tpl_item = (o, item) => {
-  const i18n_info_title = i18n_('Show more information on this groupchat');
-
-  const i18n_open_title = i18n_('Click to open this groupchat');
-
-  return lit_html_html(list_chatrooms_modal_templateObject2(), o.openRoom, item.jid, item.name, i18n_open_title, item.name || item.jid, o.toggleRoomInfo, item.jid, i18n_info_title);
-};
-
-/* harmony default export */ var list_chatrooms_modal = (o => {
-  const i18n_list_chatrooms = i18n_('Query for Groupchats');
-
-  return lit_html_html(list_chatrooms_modal_templateObject3(), i18n_list_chatrooms, modal_header_close_button, o.show_form ? list_chatrooms_modal_form(o) : '', o.loading_items ? lit_html_html(list_chatrooms_modal_templateObject4(), spinner()) : '', o.feedback_text ? lit_html_html(list_chatrooms_modal_templateObject5(), o.feedback_text) : '', repeat(o.items, item => item.jid, item => tpl_item(o, item)), modal_close_button);
-});
-// EXTERNAL MODULE: ./src/templates/room_description.html
-var room_description = __webpack_require__(138);
-var room_description_default = /*#__PURE__*/__webpack_require__.n(room_description);
-
-// CONCATENATED MODULE: ./src/modals/muc-list.js
-
-
-
-
-
-
-
-
-
-
-
-const muc_list_u = converse.env.utils;
-/* Insert groupchat info (based on returned #disco IQ stanza)
- * @function insertRoomInfo
- * @param { HTMLElement } el - The HTML DOM element that contains the info.
- * @param { XMLElement } stanza - The IQ stanza containing the groupchat info.
- */
-
-function insertRoomInfo(el, stanza) {
-  var _head, _head2;
-
-  // All MUC features found here: https://xmpp.org/registrar/disco-features.html
-  el.querySelector('span.spinner').remove();
-  el.querySelector('a.room-info').classList.add('selected');
-  el.insertAdjacentHTML('beforeEnd', room_description_default()({
-    'jid': stanza.getAttribute('from'),
-    'desc': (_head = lodash_es_head(sizzle_default()('field[var="muc#roominfo_description"] value', stanza))) === null || _head === void 0 ? void 0 : _head.textContent,
-    'occ': (_head2 = lodash_es_head(sizzle_default()('field[var="muc#roominfo_occupants"] value', stanza))) === null || _head2 === void 0 ? void 0 : _head2.textContent,
-    'hidden': sizzle_default()('feature[var="muc_hidden"]', stanza).length,
-    'membersonly': sizzle_default()('feature[var="muc_membersonly"]', stanza).length,
-    'moderated': sizzle_default()('feature[var="muc_moderated"]', stanza).length,
-    'nonanonymous': sizzle_default()('feature[var="muc_nonanonymous"]', stanza).length,
-    'open': sizzle_default()('feature[var="muc_open"]', stanza).length,
-    'passwordprotected': sizzle_default()('feature[var="muc_passwordprotected"]', stanza).length,
-    'persistent': sizzle_default()('feature[var="muc_persistent"]', stanza).length,
-    'publicroom': sizzle_default()('feature[var="muc_publicroom"]', stanza).length,
-    'semianonymous': sizzle_default()('feature[var="muc_semianonymous"]', stanza).length,
-    'temporary': sizzle_default()('feature[var="muc_temporary"]', stanza).length,
-    'unmoderated': sizzle_default()('feature[var="muc_unmoderated"]', stanza).length,
-    'label_desc': i18n_('Description:'),
-    'label_jid': i18n_('Groupchat Address (JID):'),
-    'label_occ': i18n_('Participants:'),
-    'label_features': i18n_('Features:'),
-    'label_requires_auth': i18n_('Requires authentication'),
-    'label_hidden': i18n_('Hidden'),
-    'label_requires_invite': i18n_('Requires an invitation'),
-    'label_moderated': i18n_('Moderated'),
-    'label_non_anon': i18n_('Non-anonymous'),
-    'label_open_room': i18n_('Open'),
-    'label_permanent_room': i18n_('Permanent'),
-    'label_public': i18n_('Public'),
-    'label_semi_anon': i18n_('Semi-anonymous'),
-    'label_temp_room': i18n_('Temporary'),
-    'label_unmoderated': i18n_('Unmoderated')
-  }));
-}
-/**
- * Show/hide extra information about a groupchat in a listing.
- * @function toggleRoomInfo
- * @param { Event }
- */
-
-
-function toggleRoomInfo(ev) {
-  const parent_el = muc_list_u.ancestor(ev.target, '.room-item');
-  const div_el = parent_el.querySelector('div.room-info');
-
-  if (div_el) {
-    muc_list_u.slideIn(div_el).then(muc_list_u.removeElement);
-    parent_el.querySelector('a.room-info').classList.remove('selected');
-  } else {
-    parent_el.insertAdjacentElement('beforeend', muc_list_u.getElementFromTemplateResult(spinner()));
-    converse_core_api.disco.info(ev.target.getAttribute('data-room-jid'), null).then(stanza => insertRoomInfo(parent_el, stanza)).catch(e => headless_log.error(e));
-  }
-}
-
-/* harmony default export */ var muc_list = (BootstrapModal.extend({
-  id: "list-chatrooms-modal",
-
-  initialize() {
-    this.items = [];
-    this.loading_items = false;
-    BootstrapModal.prototype.initialize.apply(this, arguments);
-
-    if (converse_core_api.settings.get('muc_domain') && !this.model.get('muc_domain')) {
-      this.model.save('muc_domain', converse_core_api.settings.get('muc_domain'));
-    }
-
-    this.listenTo(this.model, 'change:muc_domain', this.onDomainChange);
-    this.el.addEventListener('shown.bs.modal', () => converse_core_api.settings.get('locked_muc_domain') ? this.updateRoomsList() : this.el.querySelector('input[name="server"]').focus());
-  },
-
-  toHTML() {
-    const muc_domain = this.model.get('muc_domain') || converse_core_api.settings.get('muc_domain');
-    return list_chatrooms_modal(Object.assign(this.model.toJSON(), {
-      'show_form': !converse_core_api.settings.get('locked_muc_domain'),
-      'server_placeholder': muc_domain ? muc_domain : i18n_('conference.example.org'),
-      'items': this.items,
-      'loading_items': this.loading_items,
-      'openRoom': ev => this.openRoom(ev),
-      'setDomainFromEvent': ev => this.setDomainFromEvent(ev),
-      'submitForm': ev => this.showRooms(ev),
-      'toggleRoomInfo': ev => this.toggleRoomInfo(ev)
-    }));
-  },
-
-  openRoom(ev) {
-    ev.preventDefault();
-    const jid = ev.target.getAttribute('data-room-jid');
-    const name = ev.target.getAttribute('data-room-name');
-    this.modal.hide();
-    converse_core_api.rooms.open(jid, {
-      'name': name
-    }, true);
-  },
-
-  toggleRoomInfo(ev) {
-    ev.preventDefault();
-    toggleRoomInfo(ev);
-  },
-
-  onDomainChange() {
-    converse_core_api.settings.get('auto_list_rooms') && this.updateRoomsList();
-  },
-
-  /**
-   * Handle the IQ stanza returned from the server, containing
-   * all its public groupchats.
-   * @private
-   * @method _converse.ChatRoomView#onRoomsFound
-   * @param { HTMLElement } iq
-   */
-  onRoomsFound(iq) {
-    this.loading_items = false;
-    const rooms = iq ? sizzle_default()('query item', iq) : [];
-
-    if (rooms.length) {
-      this.model.set({
-        'feedback_text': i18n_('Groupchats found')
-      }, {
-        'silent': true
-      });
-      this.items = rooms.map(utils_stanza.getAttributes);
-    } else {
-      this.items = [];
-      this.model.set({
-        'feedback_text': i18n_('No groupchats found')
-      }, {
-        'silent': true
-      });
-    }
-
-    this.render();
-    return true;
-  },
-
-  /**
-   * Send an IQ stanza to the server asking for all groupchats
-   * @private
-   * @method _converse.ChatRoomView#updateRoomsList
-   */
-  updateRoomsList() {
-    const iq = Object(src_strophe["a" /* $iq */])({
-      'to': this.model.get('muc_domain'),
-      'from': converse_core_converse.connection.jid,
-      'type': "get"
-    }).c("query", {
-      xmlns: src_strophe["b" /* Strophe */].NS.DISCO_ITEMS
-    });
-    converse_core_api.sendIQ(iq).then(iq => this.onRoomsFound(iq)).catch(() => this.onRoomsFound());
-  },
-
-  showRooms(ev) {
-    ev.preventDefault();
-    this.loading_items = true;
-    this.render();
-    const data = new FormData(ev.target);
-    this.model.setDomain(data.get('server'));
-    this.updateRoomsList();
-  },
-
-  setDomainFromEvent(ev) {
-    this.model.setDomain(ev.target.value);
-  },
-
-  setNick(ev) {
-    this.model.save({
-      nick: ev.target.value
-    });
-  }
-
-}));
-// CONCATENATED MODULE: ./src/templates/moderator_tools_modal.js
+// CONCATENATED MODULE: ./src/modals/templates/moderator-tools.js
 function _templateObject21() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
 
-  _templateObject21 = function _templateObject21() {
+  _templateObject21 = function () {
     return data;
   };
 
@@ -97321,9 +101819,9 @@ function _templateObject21() {
 }
 
 function _templateObject20() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
 
-  _templateObject20 = function _templateObject20() {
+  _templateObject20 = function () {
     return data;
   };
 
@@ -97331,9 +101829,9 @@ function _templateObject20() {
 }
 
 function _templateObject19() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<div class=\"row\"><div class=\"col pt-2\"><p class=\"helptext pb-3\">", "</p></div></div>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<div class=\"row\"><div class=\"col pt-2\"><p class=\"helptext pb-3\">", "</p></div></div>"]);
 
-  _templateObject19 = function _templateObject19() {
+  _templateObject19 = function () {
     return data;
   };
 
@@ -97341,9 +101839,9 @@ function _templateObject19() {
 }
 
 function _templateObject18() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<input class=\"form-control\" .value=\"", "\" @keyup=", " type=\"text\" name=\"filter\" placeholder=\"", "\"/>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<input class=\"form-control\" .value=\"", "\" @keyup=", " type=\"text\" name=\"filter\" placeholder=\"", "\"/>"]);
 
-  _templateObject18 = function _templateObject18() {
+  _templateObject18 = function () {
     return data;
   };
 
@@ -97351,9 +101849,9 @@ function _templateObject18() {
 }
 
 function _templateObject17() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
 
-  _templateObject17 = function _templateObject17() {
+  _templateObject17 = function () {
     return data;
   };
 
@@ -97361,166 +101859,166 @@ function _templateObject17() {
 }
 
 function _templateObject16() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
+  const data = moderator_tools_taggedTemplateLiteral(["<li class=\"list-group-item\">", "</li>"]);
 
-  _templateObject16 = function _templateObject16() {
+  _templateObject16 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject15() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
+function moderator_tools_templateObject15() {
+  const data = moderator_tools_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
 
-  moderator_tools_modal_templateObject15 = function _templateObject15() {
+  moderator_tools_templateObject15 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject14() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<div class=\"row\"><div class=\"col pt-2\"><p class=\"helptext pb-3\">", "</p></div></div>"]);
+function moderator_tools_templateObject14() {
+  const data = moderator_tools_taggedTemplateLiteral(["<div class=\"row\"><div class=\"col pt-2\"><p class=\"helptext pb-3\">", "</p></div></div>"]);
 
-  moderator_tools_modal_templateObject14 = function _templateObject14() {
+  moderator_tools_templateObject14 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject13() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<input class=\"form-control\" .value=\"", "\" @keyup=", " type=\"text\" name=\"filter\" placeholder=\"", "\"/>"]);
+function moderator_tools_templateObject13() {
+  const data = moderator_tools_taggedTemplateLiteral(["<input class=\"form-control\" .value=\"", "\" @keyup=", " type=\"text\" name=\"filter\" placeholder=\"", "\"/>"]);
 
-  moderator_tools_modal_templateObject13 = function _templateObject13() {
+  moderator_tools_templateObject13 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject12() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"converse-modtools-modal-label\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body d-flex flex-column\">\n                <span class=\"modal-alert\"></span>\n\n                ", "\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane tab-pane--columns ", "\" id=\"affiliations-tabpanel\" role=\"tabpanel\" aria-labelledby=\"affiliations-tab\">\n                        <form class=\"converse-form query-affiliation\" @submit=", ">\n                            <p class=\"helptext pb-3\">", "</p>\n                            <div class=\"form-group\">\n                                <label for=\"affiliation\">\n                                    <strong>", ":</strong>\n                                </label>\n                                <div class=\"row\">\n                                    <div class=\"col\">\n                                        <select class=\"custom-select select-affiliation\" name=\"affiliation\">\n                                            ", "\n                                        </select>\n                                    </div>\n                                    <div class=\"col\">\n                                        <input type=\"submit\" class=\"btn btn-primary\" name=\"users_with_affiliation\" value=\"", "\"/>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <div class=\"col mt-3\">\n                                        ", "\n                                    </div>\n                                </div>\n\n                                ", "\n                            </div>\n                        </form>\n                        <div class=\"scrollable-container\">\n                            <ul class=\"list-group list-group--users\">\n                                ", "\n                                ", "\n\n                                ", "\n                            </ul>\n                        </div>\n                    </div>\n\n                    <div class=\"tab-pane tab-pane--columns ", "\" id=\"roles-tabpanel\" role=\"tabpanel\" aria-labelledby=\"roles-tab\">\n                        <form class=\"converse-form query-role\" @submit=", ">\n                            <p class=\"helptext pb-3\">", "</p>\n                            <div class=\"form-group\">\n                                <label for=\"role\"><strong>", ":</strong></label>\n                                <div class=\"row\">\n                                    <div class=\"col\">\n                                        <select class=\"custom-select select-role\" name=\"role\">\n                                            ", "\n                                        </select>\n                                    </div>\n                                    <div class=\"col\">\n                                        <input type=\"submit\" class=\"btn btn-primary\" name=\"users_with_role\" value=\"", "\"/>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <div class=\"col mt-3\">\n                                        ", "\n                                    </div>\n                                </div>\n\n                                ", "\n                            </div>\n                        </form>\n                        <div class=\"scrollable-container\">\n                            <ul class=\"list-group list-group--users\">\n                                ", "\n                                ", "\n                                ", "\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>"]);
+function moderator_tools_templateObject12() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"converse-modtools-modal-label\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body d-flex flex-column\">\n                <span class=\"modal-alert\"></span>\n\n                ", "\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane tab-pane--columns ", "\" id=\"affiliations-tabpanel\" role=\"tabpanel\" aria-labelledby=\"affiliations-tab\">\n                        <form class=\"converse-form query-affiliation\" @submit=", ">\n                            <p class=\"helptext pb-3\">", "</p>\n                            <div class=\"form-group\">\n                                <label for=\"affiliation\">\n                                    <strong>", ":</strong>\n                                </label>\n                                <div class=\"row\">\n                                    <div class=\"col\">\n                                        <select class=\"custom-select select-affiliation\" name=\"affiliation\">\n                                            ", "\n                                        </select>\n                                    </div>\n                                    <div class=\"col\">\n                                        <input type=\"submit\" class=\"btn btn-primary\" name=\"users_with_affiliation\" value=\"", "\"/>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <div class=\"col mt-3\">\n                                        ", "\n                                    </div>\n                                </div>\n\n                                ", "\n                            </div>\n                        </form>\n                        <div class=\"scrollable-container\">\n                            <ul class=\"list-group list-group--users\">\n                                ", "\n                                ", "\n\n                                ", "\n                            </ul>\n                        </div>\n                    </div>\n\n                    <div class=\"tab-pane tab-pane--columns ", "\" id=\"roles-tabpanel\" role=\"tabpanel\" aria-labelledby=\"roles-tab\">\n                        <form class=\"converse-form query-role\" @submit=", ">\n                            <p class=\"helptext pb-3\">", "</p>\n                            <div class=\"form-group\">\n                                <label for=\"role\"><strong>", ":</strong></label>\n                                <div class=\"row\">\n                                    <div class=\"col\">\n                                        <select class=\"custom-select select-role\" name=\"role\">\n                                            ", "\n                                        </select>\n                                    </div>\n                                    <div class=\"col\">\n                                        <input type=\"submit\" class=\"btn btn-primary\" name=\"users_with_role\" value=\"", "\"/>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <div class=\"col mt-3\">\n                                        ", "\n                                    </div>\n                                </div>\n\n                                ", "\n                            </div>\n                        </form>\n                        <div class=\"scrollable-container\">\n                            <ul class=\"list-group list-group--users\">\n                                ", "\n                                ", "\n                                ", "\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>"]);
 
-  moderator_tools_modal_templateObject12 = function _templateObject12() {
+  moderator_tools_templateObject12 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject11() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <ul class=\"nav nav-pills justify-content-center\">\n        <li role=\"presentation\" class=\"nav-item\">\n            <a class=\"nav-link active\" id=\"affiliations-tab\" href=\"#affiliations-tabpanel\" aria-controls=\"affiliations-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">Affiliations</a>\n        </li>\n        <li role=\"presentation\" class=\"nav-item\">\n            <a class=\"nav-link\" id=\"roles-tab\" href=\"#roles-tabpanel\" aria-controls=\"roles-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">Roles</a>\n        </li>\n    </ul>\n"]);
+function moderator_tools_templateObject11() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <ul class=\"nav nav-pills justify-content-center\">\n        <li role=\"presentation\" class=\"nav-item\">\n            <a class=\"nav-link active\" id=\"affiliations-tab\" href=\"#affiliations-tabpanel\" aria-controls=\"affiliations-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">Affiliations</a>\n        </li>\n        <li role=\"presentation\" class=\"nav-item\">\n            <a class=\"nav-link\" id=\"roles-tab\" href=\"#roles-tabpanel\" aria-controls=\"roles-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">Roles</a>\n        </li>\n    </ul>\n"]);
 
-  moderator_tools_modal_templateObject11 = function _templateObject11() {
+  moderator_tools_templateObject11 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject10() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<a href=\"#\" data-form=\"affiliation-form\" class=\"toggle-form right fa fa-wrench\" @click=", "></a>"]);
+function moderator_tools_templateObject10() {
+  const data = moderator_tools_taggedTemplateLiteral(["<a href=\"#\" data-form=\"affiliation-form\" class=\"toggle-form right fa fa-wrench\" @click=", "></a>"]);
 
-  moderator_tools_modal_templateObject10 = function _templateObject10() {
+  moderator_tools_templateObject10 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject9() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <li class=\"list-group-item\" data-nick=\"", "\">\n        <ul class=\"list-group\">\n            <li class=\"list-group-item active\">\n                <div><strong>JID:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Nickname:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Affiliation:</strong> ", " ", "</div>\n                ", "\n            </li>\n        </ul>\n    </li>\n"]);
+function moderator_tools_templateObject9() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <li class=\"list-group-item\" data-nick=\"", "\">\n        <ul class=\"list-group\">\n            <li class=\"list-group-item active\">\n                <div><strong>JID:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Nickname:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Affiliation:</strong> ", " ", "</div>\n                ", "\n            </li>\n        </ul>\n    </li>\n"]);
 
-  moderator_tools_modal_templateObject9 = function _templateObject9() {
+  moderator_tools_templateObject9 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject8() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<option value=\"", "\" ?selected=", ">", "</option>"]);
+function moderator_tools_templateObject8() {
+  const data = moderator_tools_taggedTemplateLiteral(["<option value=\"", "\" ?selected=", ">", "</option>"]);
 
-  moderator_tools_modal_templateObject8 = function _templateObject8() {
+  moderator_tools_templateObject8 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject7() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n        <form class=\"affiliation-form hidden\" @submit=", ">\n            <div class=\"form-group\">\n                <input type=\"hidden\" name=\"jid\" value=\"", "\"/>\n                <input type=\"hidden\" name=\"nick\" value=\"", "\"/>\n                <div class=\"row\">\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <select class=\"custom-select select-affiliation\" name=\"affiliation\">\n                            ", "\n                        </select>\n                    </div>\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <input class=\"form-control\" type=\"text\" name=\"reason\"/>\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <input type=\"submit\" class=\"btn btn-primary\" name=\"change\" value=\"", "\"/>\n            </div>\n        </form>\n    "]);
+function moderator_tools_templateObject7() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n        <form class=\"affiliation-form hidden\" @submit=", ">\n            <div class=\"form-group\">\n                <input type=\"hidden\" name=\"jid\" value=\"", "\"/>\n                <input type=\"hidden\" name=\"nick\" value=\"", "\"/>\n                <div class=\"row\">\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <select class=\"custom-select select-affiliation\" name=\"affiliation\">\n                            ", "\n                        </select>\n                    </div>\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <input class=\"form-control\" type=\"text\" name=\"reason\"/>\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <input type=\"submit\" class=\"btn btn-primary\" name=\"change\" value=\"", "\"/>\n            </div>\n        </form>\n    "]);
 
-  moderator_tools_modal_templateObject7 = function _templateObject7() {
+  moderator_tools_templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject6() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<a href=\"#\" data-form=\"role-form\" class=\"toggle-form right fa fa-wrench\" @click=", "></a>"]);
+function moderator_tools_templateObject6() {
+  const data = moderator_tools_taggedTemplateLiteral(["<a href=\"#\" data-form=\"role-form\" class=\"toggle-form right fa fa-wrench\" @click=", "></a>"]);
 
-  moderator_tools_modal_templateObject6 = function _templateObject6() {
+  moderator_tools_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject5() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <li class=\"list-group-item\" data-nick=\"", "\">\n        <ul class=\"list-group\">\n            <li class=\"list-group-item active\">\n                <div><strong>JID:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Nickname:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Role:</strong> ", " ", "</div>\n                ", "\n            </li>\n        </ul>\n    </li>\n"]);
+function moderator_tools_templateObject5() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <li class=\"list-group-item\" data-nick=\"", "\">\n        <ul class=\"list-group\">\n            <li class=\"list-group-item active\">\n                <div><strong>JID:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Nickname:</strong> ", "</div>\n            </li>\n            <li class=\"list-group-item\">\n                <div><strong>Role:</strong> ", " ", "</div>\n                ", "\n            </li>\n        </ul>\n    </li>\n"]);
 
-  moderator_tools_modal_templateObject5 = function _templateObject5() {
+  moderator_tools_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject4() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["<option value=\"", "\" ?selected=", ">", "</option>"]);
+function moderator_tools_templateObject4() {
+  const data = moderator_tools_taggedTemplateLiteral(["<option value=\"", "\" ?selected=", ">", "</option>"]);
 
-  moderator_tools_modal_templateObject4 = function _templateObject4() {
+  moderator_tools_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject3() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n        <form class=\"role-form hidden\" @submit=", ">\n            <div class=\"form-group\">\n                <input type=\"hidden\" name=\"jid\" value=\"", "\"/>\n                <input type=\"hidden\" name=\"nick\" value=\"", "\"/>\n                <div class=\"row\">\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <select class=\"custom-select select-role\" name=\"role\">\n                            ", "\n                        </select>\n                    </div>\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <input class=\"form-control\" type=\"text\" name=\"reason\"/>\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\"/>\n            </div>\n        </form>\n    "]);
+function moderator_tools_templateObject3() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n        <form class=\"role-form hidden\" @submit=", ">\n            <div class=\"form-group\">\n                <input type=\"hidden\" name=\"jid\" value=\"", "\"/>\n                <input type=\"hidden\" name=\"nick\" value=\"", "\"/>\n                <div class=\"row\">\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <select class=\"custom-select select-role\" name=\"role\">\n                            ", "\n                        </select>\n                    </div>\n                    <div class=\"col\">\n                        <label><strong>", ":</strong></label>\n                        <input class=\"form-control\" type=\"text\" name=\"reason\"/>\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\"/>\n            </div>\n        </form>\n    "]);
 
-  moderator_tools_modal_templateObject3 = function _templateObject3() {
+  moderator_tools_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject2() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <option value=\"", "\"\n            ?selected=", "\n            title=\"", "\">", "</option>\n"]);
+function moderator_tools_templateObject2() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <option value=\"", "\"\n            ?selected=", "\n            title=\"", "\">", "</option>\n"]);
 
-  moderator_tools_modal_templateObject2 = function _templateObject2() {
+  moderator_tools_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_templateObject() {
-  const data = moderator_tools_modal_taggedTemplateLiteral(["\n    <option value=\"", "\"\n            ?selected=", "\n            title=\"", "\">", "</option>\n"]);
+function moderator_tools_templateObject() {
+  const data = moderator_tools_taggedTemplateLiteral(["\n    <option value=\"", "\"\n            ?selected=", "\n            title=\"", "\">", "</option>\n"]);
 
-  moderator_tools_modal_templateObject = function _templateObject() {
+  moderator_tools_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function moderator_tools_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function moderator_tools_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
@@ -97547,9 +102045,9 @@ function getAffiliationHelpText(aff) {
   }
 }
 
-const role_option = o => lit_html_html(moderator_tools_modal_templateObject(), o.item || '', o.item === o.role, getRoleHelpText(o.item), o.item);
+const role_option = o => lit_html_html(moderator_tools_templateObject(), o.item || '', o.item === o.role, getRoleHelpText(o.item), o.item);
 
-const affiliation_option = o => lit_html_html(moderator_tools_modal_templateObject2(), o.item || '', o.item === o.affiliation, getAffiliationHelpText(o.item), o.item);
+const affiliation_option = o => lit_html_html(moderator_tools_templateObject2(), o.item || '', o.item === o.affiliation, getAffiliationHelpText(o.item), o.item);
 
 const tpl_set_role_form = o => {
   const i18n_change_role = i18n_('Change role');
@@ -97558,10 +102056,10 @@ const tpl_set_role_form = o => {
 
   const i18n_reason = i18n_('Reason');
 
-  return lit_html_html(moderator_tools_modal_templateObject3(), o.assignRole, o.item.jid, o.item.nick, i18n_new_role, o.assignable_roles.map(role => lit_html_html(moderator_tools_modal_templateObject4(), role, role === o.item.role, role)), i18n_reason, i18n_change_role);
+  return lit_html_html(moderator_tools_templateObject3(), o.assignRole, o.item.jid, o.item.nick, i18n_new_role, o.assignable_roles.map(role => lit_html_html(moderator_tools_templateObject4(), role, role === o.item.role, role)), i18n_reason, i18n_change_role);
 };
 
-const role_list_item = o => lit_html_html(moderator_tools_modal_templateObject5(), o.item.nick, o.item.jid, o.item.nick, o.item.role, o.assignable_roles.length ? lit_html_html(moderator_tools_modal_templateObject6(), o.toggleForm) : '', o.assignable_roles.length ? tpl_set_role_form(o) : '');
+const role_list_item = o => lit_html_html(moderator_tools_templateObject5(), o.item.nick, o.item.jid, o.item.nick, o.item.role, o.assignable_roles.length ? lit_html_html(moderator_tools_templateObject6(), o.toggleForm) : '', o.assignable_roles.length ? tpl_set_role_form(o) : '');
 
 const tpl_set_affiliation_form = o => {
   const i18n_change_affiliation = i18n_('Change affiliation');
@@ -97570,14 +102068,14 @@ const tpl_set_affiliation_form = o => {
 
   const i18n_reason = i18n_('Reason');
 
-  return lit_html_html(moderator_tools_modal_templateObject7(), o.assignAffiliation, o.item.jid, o.item.nick, i18n_new_affiliation, o.assignable_affiliations.map(aff => lit_html_html(moderator_tools_modal_templateObject8(), aff, aff === o.item.affiliation, aff)), i18n_reason, i18n_change_affiliation);
+  return lit_html_html(moderator_tools_templateObject7(), o.assignAffiliation, o.item.jid, o.item.nick, i18n_new_affiliation, o.assignable_affiliations.map(aff => lit_html_html(moderator_tools_templateObject8(), aff, aff === o.item.affiliation, aff)), i18n_reason, i18n_change_affiliation);
 };
 
-const affiliation_list_item = o => lit_html_html(moderator_tools_modal_templateObject9(), o.item.nick, o.item.jid, o.item.nick, o.item.affiliation, o.assignable_affiliations.length ? lit_html_html(moderator_tools_modal_templateObject10(), o.toggleForm) : '', o.assignable_affiliations.length ? tpl_set_affiliation_form(o) : '');
+const affiliation_list_item = o => lit_html_html(moderator_tools_templateObject9(), o.item.nick, o.item.jid, o.item.nick, o.item.affiliation, o.assignable_affiliations.length ? lit_html_html(moderator_tools_templateObject10(), o.toggleForm) : '', o.assignable_affiliations.length ? tpl_set_affiliation_form(o) : '');
 
-const tpl_navigation = o => lit_html_html(moderator_tools_modal_templateObject11(), o.switchTab, o.switchTab);
+const tpl_navigation = o => lit_html_html(moderator_tools_templateObject11(), o.switchTab, o.switchTab);
 
-/* harmony default export */ var moderator_tools_modal = (o => {
+/* harmony default export */ var moderator_tools = (o => {
   const i18n_affiliation = i18n_('Affiliation');
 
   const i18n_moderator_tools = i18n_('Moderator Tools');
@@ -97597,9 +102095,9 @@ const tpl_navigation = o => lit_html_html(moderator_tools_modal_templateObject11
   const i18n_helptext_affiliation = i18n_("An affiliation is a long-lived entitlement which typically implies a certain role and which " + "grants privileges and responsibilities. For example admins and owners automatically have the " + "moderator role.");
 
   const show_both_tabs = o.queryable_roles.length && o.queryable_affiliations.length;
-  return lit_html_html(moderator_tools_modal_templateObject12(), i18n_moderator_tools, modal_header_close_button, show_both_tabs ? tpl_navigation(o) : '', o.queryable_affiliations.length ? 'active' : '', o.queryAffiliation, i18n_helptext_affiliation, i18n_affiliation, o.queryable_affiliations.map(item => affiliation_option(Object.assign({
+  return lit_html_html(moderator_tools_templateObject12(), i18n_moderator_tools, modal_header_close_button, show_both_tabs ? tpl_navigation(o) : '', o.queryable_affiliations.length ? 'active' : '', o.queryAffiliation, i18n_helptext_affiliation, i18n_affiliation, o.queryable_affiliations.map(item => affiliation_option(Object.assign({
     item
-  }, o))), i18n_show_users, Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length > 5 ? lit_html_html(moderator_tools_modal_templateObject13(), o.affiliations_filter, o.filterAffiliationResults, i18n_filter) : '', getAffiliationHelpText(o.affiliation) ? lit_html_html(moderator_tools_modal_templateObject14(), getAffiliationHelpText(o.affiliation)) : '', o.loading_users_with_affiliation ? lit_html_html(moderator_tools_modal_templateObject15(), spinner()) : '', Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length === 0 ? lit_html_html(_templateObject16(), i18n_no_users_with_aff) : '', o.users_with_affiliation instanceof Error ? lit_html_html(_templateObject17(), o.users_with_affiliation.message) : (o.users_with_affiliation || []).map(item => (item.nick || item.jid).match(new RegExp(o.affiliations_filter, 'i')) ? affiliation_list_item(Object.assign({
+  }, o))), i18n_show_users, Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length > 5 ? lit_html_html(moderator_tools_templateObject13(), o.affiliations_filter, o.filterAffiliationResults, i18n_filter) : '', getAffiliationHelpText(o.affiliation) ? lit_html_html(moderator_tools_templateObject14(), getAffiliationHelpText(o.affiliation)) : '', o.loading_users_with_affiliation ? lit_html_html(moderator_tools_templateObject15(), spinner()) : '', Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length === 0 ? lit_html_html(_templateObject16(), i18n_no_users_with_aff) : '', o.users_with_affiliation instanceof Error ? lit_html_html(_templateObject17(), o.users_with_affiliation.message) : (o.users_with_affiliation || []).map(item => (item.nick || item.jid).match(new RegExp(o.affiliations_filter, 'i')) ? affiliation_list_item(Object.assign({
     item
   }, o)) : ''), !show_both_tabs && o.queryable_roles.length ? 'active' : '', o.queryRole, i18n_helptext_role, i18n_role, o.queryable_roles.map(item => role_option(Object.assign({
     item
@@ -97622,13 +102120,14 @@ const moderator_tools_u = converse.env.utils;
 
 let moderator_tools_converse;
 
-/* harmony default export */ var moderator_tools = (BootstrapModal.extend({
+/* harmony default export */ var modals_moderator_tools = (modals_base.extend({
   id: "converse-modtools-modal",
+  persistent: true,
 
   initialize(attrs) {
     moderator_tools_converse = attrs._converse;
     this.chatroomview = attrs.chatroomview;
-    BootstrapModal.prototype.initialize.apply(this, arguments);
+    modals_base.prototype.initialize.apply(this, arguments);
     this.affiliations_filter = '';
     this.roles_filter = '';
     this.listenTo(this.model, 'change:role', () => {
@@ -97657,7 +102156,7 @@ let moderator_tools_converse;
     const occupant = this.chatroomview.model.occupants.findWhere({
       'jid': moderator_tools_converse.bare_jid
     });
-    return moderator_tools_modal(Object.assign(this.model.toJSON(), {
+    return moderator_tools(Object.assign(this.model.toJSON(), {
       'affiliations_filter': this.affiliations_filter,
       'assignAffiliation': ev => this.assignAffiliation(ev),
       'assignRole': ev => this.assignRole(ev),
@@ -97679,7 +102178,7 @@ let moderator_tools_converse;
   },
 
   getAssignableAffiliations(occupant) {
-    let disabled = converse_core_api.settings.get('modtools_disable_assign');
+    let disabled = core_api.settings.get('modtools_disable_assign');
 
     if (!Array.isArray(disabled)) {
       disabled = disabled ? AFFILIATIONS : [];
@@ -97695,7 +102194,7 @@ let moderator_tools_converse;
   },
 
   getAssignableRoles(occupant) {
-    let disabled = converse_core_api.settings.get('modtools_disable_assign');
+    let disabled = core_api.settings.get('modtools_disable_assign');
 
     if (!Array.isArray(disabled)) {
       disabled = disabled ? ROLES : [];
@@ -97848,158 +102347,221 @@ let moderator_tools_converse;
   }
 
 }));
-// CONCATENATED MODULE: ./src/templates/chatroom_details_modal.js
-function chatroom_details_modal_templateObject15() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-database\"></span>", " - <em>", "</em></li>"]);
+// CONCATENATED MODULE: ./src/modals/templates/occupant.js
+function templates_occupant_templateObject() {
+  const data = templates_occupant_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"user-details-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    ", "\n                </div>\n                <div class=\"modal-footer\">\n                    ", "\n                </div>\n            </div>\n        </div>\n    "]);
+
+  templates_occupant_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function templates_occupant_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+/* harmony default export */ var modals_templates_occupant = (o => {
+  return lit_html_html(templates_occupant_templateObject(), o.display_name, modal_header_close_button, renderAvatar(o.avatar_data), modal_close_button);
+});
+// CONCATENATED MODULE: ./src/modals/occupant.js
+
+
+
+const OccupantModal = modals_base.extend({
+  initialize() {
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.listenTo(this.model, 'change', this.render);
+    /**
+     * Triggered once the OccupantModal has been initialized
+     * @event _converse#userDetailsModalInitialized
+     * @type { _converse.ChatBox }
+     * @example _converse.api.listen.on('userDetailsModalInitialized', chatbox => { ... });
+     */
+
+    core_api.trigger('occupantModalInitialized', this.model);
+  },
+
+  toHTML() {
+    return modals_templates_occupant(Object.assign(this.model.toJSON(), {
+      'avatar_data': this.getAvatarData(),
+      'display_name': this.model.getDisplayName()
+    }));
+  },
+
+  getAvatarData() {
+    const vcard = core_converse.vcards.findWhere({
+      'jid': this.model.get('jid')
+    });
+
+    const image_type = (vcard === null || vcard === void 0 ? void 0 : vcard.get('image_type')) || core_converse.DEFAULT_IMAGE_TYPE;
+    const image_data = (vcard === null || vcard === void 0 ? void 0 : vcard.get('image')) || core_converse.DEFAULT_IMAGE;
+    const image = "data:" + image_type + ";base64," + image_data;
+    return {
+      'classes': 'chat-msg__avatar',
+      'height': 120,
+      'width': 120,
+      image
+    };
+  }
+
+});
+core_converse.OccupantModal = OccupantModal;
+/* harmony default export */ var modals_occupant = (OccupantModal);
+// CONCATENATED MODULE: ./src/modals/templates/muc-details.js
+function muc_details_templateObject15() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-database\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject15 = function _templateObject15() {
+  muc_details_templateObject15 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject14() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-info-circle\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject14() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-info-circle\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject14 = function _templateObject14() {
+  muc_details_templateObject14 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject13() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-gavel\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject13() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-gavel\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject13 = function _templateObject13() {
+  muc_details_templateObject13 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject12() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-user-secret\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject12() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-user-secret\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject12 = function _templateObject12() {
+  muc_details_templateObject12 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject11() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-id-card\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject11() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-id-card\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject11 = function _templateObject11() {
+  muc_details_templateObject11 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject10() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-snowflake-o\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject10() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-snowflake-o\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject10 = function _templateObject10() {
+  muc_details_templateObject10 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject9() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-save\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject9() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-save\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject9 = function _templateObject9() {
+  muc_details_templateObject9 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject8() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-globe\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject8() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-globe\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject8 = function _templateObject8() {
+  muc_details_templateObject8 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject7() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-address-book\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject7() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-address-book\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject7 = function _templateObject7() {
+  muc_details_templateObject7 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject6() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-eye\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject6() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-eye\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject6 = function _templateObject6() {
+  muc_details_templateObject6 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject5() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-eye-slash\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject5() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-eye-slash\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject5 = function _templateObject5() {
+  muc_details_templateObject5 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject4() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-unlock\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject4() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-unlock\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject4 = function _templateObject4() {
+  muc_details_templateObject4 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject3() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-lock\"></span>", " - <em>", "</em></li>"]);
+function muc_details_templateObject3() {
+  const data = muc_details_taggedTemplateLiteral(["<li class=\"feature\" ><span class=\"fa fa-lock\"></span>", " - <em>", "</em></li>"]);
 
-  chatroom_details_modal_templateObject3 = function _templateObject3() {
+  muc_details_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject2() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"room-details-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <div class=\"room-info\">\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        ", "\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>:\n                            <div class=\"chatroom-features\">\n                            <ul class=\"features-list\">\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                            </ul>\n                            </div>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"modal-footer\">", "</div>\n            </div>\n        </div>\n    "]);
+function muc_details_templateObject2() {
+  const data = muc_details_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"muc-details-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <div class=\"room-info\">\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        ", "\n                        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n                        <p class=\"room-info\"><strong>", "</strong>:\n                            <div class=\"chatroom-features\">\n                            <ul class=\"features-list\">\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                                ", "\n                            </ul>\n                            </div>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"modal-footer\">", "</div>\n            </div>\n        </div>\n    "]);
 
-  chatroom_details_modal_templateObject2 = function _templateObject2() {
+  muc_details_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_templateObject() {
-  const data = chatroom_details_modal_taggedTemplateLiteral(["\n        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n            <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n    "]);
+function muc_details_templateObject() {
+  const data = muc_details_taggedTemplateLiteral(["\n        <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n            <p class=\"room-info\"><strong>", "</strong>: ", "</p>\n    "]);
 
-  chatroom_details_modal_templateObject = function _templateObject() {
+  muc_details_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function chatroom_details_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function muc_details_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
@@ -98007,17 +102569,17 @@ function chatroom_details_modal_taggedTemplateLiteral(strings, raw) { if (!raw)
 
 
 
-const chatroom_details_modal_subject = o => {
+const muc_details_subject = o => {
   const i18n_topic = i18n_('Topic');
 
   const i18n_topic_author = i18n_('Topic author');
 
-  return lit_html_html(chatroom_details_modal_templateObject(), i18n_topic, unsafeHTML(xss_default.a.filterXSS(o.subject.text, {
+  return lit_html_html(muc_details_templateObject(), i18n_topic, unsafeHTML(xss_default.a.filterXSS(o.subject.text, {
     'whiteList': {}
   })), i18n_topic_author, o.subject && o.subject.author);
 };
 
-/* harmony default export */ var chatroom_details_modal = (o => {
+/* harmony default export */ var muc_details = (o => {
   const i18n_address = i18n_('Groupchat address (JID)');
 
   const i18n_archiving = i18n_('Message archiving');
@@ -98078,17 +102640,17 @@ const chatroom_details_modal_subject = o => {
 
   const i18n_temporary_help = i18n_('This groupchat will disappear once the last person leaves');
 
-  return lit_html_html(chatroom_details_modal_templateObject2(), o.display_name, modal_header_close_button, i18n_name, o.name, i18n_address, o.jid, i18n_desc, o.config.description, o.subject ? chatroom_details_modal_subject(o) : '', i18n_online_users, o.num_occupants, i18n_features, o.features.passwordprotected ? lit_html_html(chatroom_details_modal_templateObject3(), i18n_password_protected, i18n_password_help) : '', o.features.unsecured ? lit_html_html(chatroom_details_modal_templateObject4(), i18n_no_password_required, i18n_no_pass_help) : '', o.features.hidden ? lit_html_html(chatroom_details_modal_templateObject5(), i18n_hidden, i18n_hidden_help) : '', o.features.public_room ? lit_html_html(chatroom_details_modal_templateObject6(), i18n_public, o.__('This groupchat is publicly searchable')) : '', o.features.membersonly ? lit_html_html(chatroom_details_modal_templateObject7(), i18n_members_only, i18n_members_help) : '', o.features.open ? lit_html_html(chatroom_details_modal_templateObject8(), i18n_open, i18n_open_help) : '', o.features.persistent ? lit_html_html(chatroom_details_modal_templateObject9(), i18n_persistent, i18n_persistent_help) : '', o.features.temporary ? lit_html_html(chatroom_details_modal_templateObject10(), i18n_temporary, i18n_temporary_help) : '', o.features.nonanonymous ? lit_html_html(chatroom_details_modal_templateObject11(), i18n_not_anonymous, i18n_not_anonymous_help) : '', o.features.semianonymous ? lit_html_html(chatroom_details_modal_templateObject12(), i18n_semi_anon, i18n_semi_anon_help) : '', o.features.moderated ? lit_html_html(chatroom_details_modal_templateObject13(), i18n_moderated, i18n_moderated_help) : '', o.features.unmoderated ? lit_html_html(chatroom_details_modal_templateObject14(), i18n_not_moderated, i18n_not_moderated_help) : '', o.features.mam_enabled ? lit_html_html(chatroom_details_modal_templateObject15(), i18n_archiving, i18n_archiving_help) : '', modal_close_button);
+  return lit_html_html(muc_details_templateObject2(), o.display_name, modal_header_close_button, i18n_name, o.name, i18n_address, o.jid, i18n_desc, o.config.description, o.subject ? muc_details_subject(o) : '', i18n_online_users, o.num_occupants, i18n_features, o.features.passwordprotected ? lit_html_html(muc_details_templateObject3(), i18n_password_protected, i18n_password_help) : '', o.features.unsecured ? lit_html_html(muc_details_templateObject4(), i18n_no_password_required, i18n_no_pass_help) : '', o.features.hidden ? lit_html_html(muc_details_templateObject5(), i18n_hidden, i18n_hidden_help) : '', o.features.public_room ? lit_html_html(muc_details_templateObject6(), i18n_public, o.__('This groupchat is publicly searchable')) : '', o.features.membersonly ? lit_html_html(muc_details_templateObject7(), i18n_members_only, i18n_members_help) : '', o.features.open ? lit_html_html(muc_details_templateObject8(), i18n_open, i18n_open_help) : '', o.features.persistent ? lit_html_html(muc_details_templateObject9(), i18n_persistent, i18n_persistent_help) : '', o.features.temporary ? lit_html_html(muc_details_templateObject10(), i18n_temporary, i18n_temporary_help) : '', o.features.nonanonymous ? lit_html_html(muc_details_templateObject11(), i18n_not_anonymous, i18n_not_anonymous_help) : '', o.features.semianonymous ? lit_html_html(muc_details_templateObject12(), i18n_semi_anon, i18n_semi_anon_help) : '', o.features.moderated ? lit_html_html(muc_details_templateObject13(), i18n_moderated, i18n_moderated_help) : '', o.features.unmoderated ? lit_html_html(muc_details_templateObject14(), i18n_not_moderated, i18n_not_moderated_help) : '', o.features.mam_enabled ? lit_html_html(muc_details_templateObject15(), i18n_archiving, i18n_archiving_help) : '', modal_close_button);
 });
 // CONCATENATED MODULE: ./src/modals/muc-details.js
 
 
 
-/* harmony default export */ var muc_details = (BootstrapModal.extend({
-  id: "room-details-modal",
+/* harmony default export */ var modals_muc_details = (modals_base.extend({
+  id: "muc-details-modal",
 
   initialize() {
-    BootstrapModal.prototype.initialize.apply(this, arguments);
+    modals_base.prototype.initialize.apply(this, arguments);
     this.listenTo(this.model, 'change', this.render);
     this.listenTo(this.model.features, 'change', this.render);
     this.listenTo(this.model.occupants, 'add', this.render);
@@ -98096,7 +102658,7 @@ const chatroom_details_modal_subject = o => {
   },
 
   toHTML() {
-    return chatroom_details_modal(Object.assign(this.model.toJSON(), {
+    return muc_details(Object.assign(this.model.toJSON(), {
       'config': this.model.config.toJSON(),
       'display_name': i18n_('Groupchat info for %1$s', this.model.getDisplayName()),
       'features': this.model.features.toJSON(),
@@ -98107,9 +102669,9 @@ const chatroom_details_modal_subject = o => {
 }));
 // CONCATENATED MODULE: ./src/templates/chatroom.js
 function chatroom_templateObject() {
-  const data = chatroom_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head chat-head-chatroom row no-gutters\"></div>\n        <div class=\"chat-body chatroom-body row no-gutters\">\n            <div class=\"chat-area col\">\n                <div class=\"chat-content ", "\" aria-live=\"polite\">\n                    <div class=\"chat-content__messages\" @scroll=", "></div>\n                    <div class=\"chat-content__help\"></div>\n                </div>\n                <div class=\"bottom-panel\"></div>\n            </div>\n            <div class=\"disconnect-container hidden\"></div>\n        </div>\n    </div>\n"]);
+  const data = chatroom_taggedTemplateLiteral(["\n    <div class=\"flyout box-flyout\">\n        <div class=\"chat-head chat-head-chatroom row no-gutters\"></div>\n        <div class=\"chat-body chatroom-body row no-gutters\">\n            <div class=\"chat-area col\">\n                <div class=\"chat-content ", "\" aria-live=\"polite\">\n                    <div class=\"chat-content__messages\" @scroll=", "></div>\n                    <div class=\"chat-content__help\"></div>\n                </div>\n                <div class=\"bottom-panel\"></div>\n            </div>\n            <div class=\"disconnect-container hidden\"></div>\n            <converse-muc-sidebar class=\"occupants col-md-3 col-4 ", "\"\n                .occupants=", "\n                .chatroom=", "></converse-muc-sidebar>\n        </div>\n    </div>\n"]);
 
-  chatroom_templateObject = function _templateObject() {
+  chatroom_templateObject = function () {
     return data;
   };
 
@@ -98119,133 +102681,12 @@ function chatroom_templateObject() {
 function chatroom_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
-/* harmony default export */ var templates_chatroom = (o => lit_html_html(chatroom_templateObject(), o.show_send_button ? 'chat-content-sendbutton' : '', o.markScrolled));
-// CONCATENATED MODULE: ./src/templates/muc_bottom_panel.js
-function muc_bottom_panel_templateObject3() {
-  const data = muc_bottom_panel_taggedTemplateLiteral(["<div class=\"muc-bottom-panel\"></div>"]);
-
-  muc_bottom_panel_templateObject3 = function _templateObject3() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_bottom_panel_templateObject2() {
-  const data = muc_bottom_panel_taggedTemplateLiteral(["<div class=\"muc-bottom-panel\">", "</div>"]);
-
-  muc_bottom_panel_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_bottom_panel_templateObject() {
-  const data = muc_bottom_panel_taggedTemplateLiteral(["\n    <div class=\"emoji-picker__container dropup\"></div>\n    <div class=\"message-form-container\">"]);
-
-  muc_bottom_panel_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-const tpl_can_edit = () => lit_html_html(muc_bottom_panel_templateObject());
-
-/* harmony default export */ var muc_bottom_panel = (o => {
-  const i18n_not_allowed = i18n_("You're not allowed to send messages in this room");
-
-  if (o.entered) {
-    return o.can_edit ? tpl_can_edit() : lit_html_html(muc_bottom_panel_templateObject2(), i18n_not_allowed);
-  } else {
-    return lit_html_html(muc_bottom_panel_templateObject3());
-  }
-});
-// CONCATENATED MODULE: ./src/templates/muc_destroyed.js
-function muc_destroyed_templateObject3() {
-  const data = muc_destroyed_taggedTemplateLiteral(["<p class=\"destroyed-reason\">\"", "\"</p>"]);
-
-  muc_destroyed_templateObject3 = function _templateObject3() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_destroyed_templateObject2() {
-  const data = muc_destroyed_taggedTemplateLiteral(["\n        <div class=\"alert alert-danger\">\n            <h3 class=\"alert-heading disconnect-msg\">", "</h3>\n            ", "\n            ", "\n        </div>"]);
-
-  muc_destroyed_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_destroyed_templateObject() {
-  const data = muc_destroyed_taggedTemplateLiteral(["\n        <p class=\"moved-label\">", "</p>\n        <p class=\"moved-link\"><a class=\"switch-chat\" href=\"#\">", "</a></p>"]);
-
-  muc_destroyed_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_destroyed_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-const tpl_moved = jid => {
-  const i18n_moved = i18n_('The conversation has moved. Click below to enter.');
-
-  return lit_html_html(muc_destroyed_templateObject(), i18n_moved, jid);
-};
-
-/* harmony default export */ var muc_destroyed = ((jid, reason) => {
-  const i18n_non_existent = i18n_('This groupchat no longer exists');
-
-  return lit_html_html(muc_destroyed_templateObject2(), i18n_non_existent, reason ? lit_html_html(muc_destroyed_templateObject3(), reason) : '', jid ? tpl_moved(jid) : '');
-});
-// CONCATENATED MODULE: ./src/templates/muc_disconnect.js
-function muc_disconnect_templateObject2() {
-  const data = muc_disconnect_taggedTemplateLiteral(["<p class=\"disconnect-msg\">", "</p>"]);
-
-  muc_disconnect_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_disconnect_templateObject() {
-  const data = muc_disconnect_taggedTemplateLiteral(["\n        <div class=\"alert alert-danger\">\n            <h3 class=\"alert-heading disconnect-msg\">", "</h3>\n            ", "\n        </div>"]);
-
-  muc_disconnect_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function muc_disconnect_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-/* harmony default export */ var muc_disconnect = (messages => {
-  return lit_html_html(muc_disconnect_templateObject(), messages[0], messages.slice(1).map(m => lit_html_html(muc_disconnect_templateObject2(), m)));
-});
+/* harmony default export */ var templates_chatroom = (o => lit_html_html(chatroom_templateObject(), o.show_send_button ? 'chat-content-sendbutton' : '', o.markScrolled, o.sidebar_hidden ? 'hidden' : '', o.occupants, o.model));
 // CONCATENATED MODULE: ./src/templates/chatroom_head.js
 function chatroom_head_templateObject5() {
   const data = chatroom_head_taggedTemplateLiteral(["<p class=\"chat-head__desc\" title=\"", "\">", "</p>"]);
 
-  chatroom_head_templateObject5 = function _templateObject5() {
+  chatroom_head_templateObject5 = function () {
     return data;
   };
 
@@ -98255,7 +102696,7 @@ function chatroom_head_templateObject5() {
 function chatroom_head_templateObject4() {
   const data = chatroom_head_taggedTemplateLiteral(["<converse-dropdown .items=", "></converse-dropdown>"]);
 
-  chatroom_head_templateObject4 = function _templateObject4() {
+  chatroom_head_templateObject4 = function () {
     return data;
   };
 
@@ -98265,7 +102706,7 @@ function chatroom_head_templateObject4() {
 function chatroom_head_templateObject3() {
   const data = chatroom_head_taggedTemplateLiteral(["<i class=\"fa fa-bookmark chatbox-title__text--bookmarked\" title=\"", "\"></i>"]);
 
-  chatroom_head_templateObject3 = function _templateObject3() {
+  chatroom_head_templateObject3 = function () {
     return data;
   };
 
@@ -98275,7 +102716,7 @@ function chatroom_head_templateObject3() {
 function chatroom_head_templateObject2() {
   const data = chatroom_head_taggedTemplateLiteral(["<div class=\"chatbox-navback\"><i class=\"fa fa-arrow-left\"></i></div>"]);
 
-  chatroom_head_templateObject2 = function _templateObject2() {
+  chatroom_head_templateObject2 = function () {
     return data;
   };
 
@@ -98285,7 +102726,7 @@ function chatroom_head_templateObject2() {
 function chatroom_head_templateObject() {
   const data = chatroom_head_taggedTemplateLiteral(["\n        <div class=\"chatbox-title ", "\">\n            ", "\n            <div class=\"chatbox-title__text\" title=\"", "\">", "\n                ", "\n            </div>\n            <div class=\"chatbox-title__buttons row no-gutters\">\n                ", "\n                ", "\n            </div>\n        </div>\n        ", "\n    "]);
 
-  chatroom_head_templateObject = function _templateObject() {
+  chatroom_head_templateObject = function () {
     return data;
   };
 
@@ -98310,255 +102751,154 @@ const chatroom_head_tpl_standalone_btns = o => o.standalone_btns.reverse().map(b
 
   const subject = o.subject ? chatroom_head_u.addHyperlinks(o.subject.text) : '';
   const show_subject = subject && !o.subject_hidden;
-  return lit_html_html(chatroom_head_templateObject(), show_subject ? '' : "chatbox-title--no-desc", o._converse.standalone ? lit_html_html(chatroom_head_templateObject2()) : '', o._converse.locked_muc_domain !== 'hidden' ? o.jid : '', o.title, o.bookmarked ? lit_html_html(chatroom_head_templateObject3(), i18n_bookmarked) : '', o.standalone_btns.length ? chatroom_head_tpl_standalone_btns(o) : '', o.dropdown_btns.length ? lit_html_html(chatroom_head_templateObject4(), o.dropdown_btns) : '', show_subject ? lit_html_html(chatroom_head_templateObject5(), i18n_hide_topic, subject) : '');
+  return lit_html_html(chatroom_head_templateObject(), show_subject ? '' : "chatbox-title--no-desc", !o._converse.api.settings.get("singleton") ? lit_html_html(chatroom_head_templateObject2()) : '', o._converse.locked_muc_domain !== 'hidden' ? o.jid : '', o.title, o.bookmarked ? lit_html_html(chatroom_head_templateObject3(), i18n_bookmarked) : '', o.standalone_btns.length ? chatroom_head_tpl_standalone_btns(o) : '', o.dropdown_btns.length ? lit_html_html(chatroom_head_templateObject4(), o.dropdown_btns) : '', show_subject ? lit_html_html(chatroom_head_templateObject5(), i18n_hide_topic, subject) : '');
 });
-// CONCATENATED MODULE: ./src/templates/muc_nickname_form.js
-function muc_nickname_form_templateObject() {
-  const data = muc_nickname_form_taggedTemplateLiteral(["\n        <div class=\"chatroom-form-container muc-nickname-form\">\n            <form class=\"converse-form chatroom-form converse-centered-form\">\n                <fieldset class=\"form-group\">\n                    <label>", "</label>\n                    <input type=\"text\" required=\"required\" name=\"nick\" value=\"", "\"\n                        class=\"form-control\" placeholder=\"", "\"/>\n                </fieldset>\n                <fieldset class=\"form-group\">\n                    <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"", "\"/>\n                </fieldset>\n            </form>\n        </div>"]);
+// CONCATENATED MODULE: ./src/templates/muc_bottom_panel.js
+function muc_bottom_panel_templateObject3() {
+  const data = muc_bottom_panel_taggedTemplateLiteral(["<div class=\"muc-bottom-panel\"></div>"]);
 
-  muc_nickname_form_templateObject = function _templateObject() {
+  muc_bottom_panel_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_nickname_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-/* harmony default export */ var muc_nickname_form = (o => {
-  const i18n_nickname = i18n_('Nickname');
-
-  const i18n_join = i18n_('Enter groupchat');
-
-  const i18n_heading = converse_core_api.settings.get('muc_show_logs_before_join') ? i18n_('Choose a nickname to enter') : i18n_('Please choose your nickname');
-  return lit_html_html(muc_nickname_form_templateObject(), i18n_heading, o.nick || '', i18n_nickname, i18n_join);
-});
-// CONCATENATED MODULE: ./src/templates/muc_config_form.js
-function muc_config_form_templateObject2() {
-  const data = muc_config_form_taggedTemplateLiteral(["<p class=\"form-help\">", "</p>"]);
+function muc_bottom_panel_templateObject2() {
+  const data = muc_bottom_panel_taggedTemplateLiteral(["<div class=\"muc-bottom-panel\">", "</div>"]);
 
-  muc_config_form_templateObject2 = function _templateObject2() {
+  muc_bottom_panel_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_config_form_templateObject() {
-  const data = muc_config_form_taggedTemplateLiteral(["\n        <form class=\"converse-form chatroom-form\" autocomplete=\"off\" @submit=", ">\n            <fieldset class=\"form-group\">\n                <legend>", "</legend>\n                ", "\n                <!-- Fields are generated internally, with xForm2webForm -->\n                ", "\n            </fieldset>\n            <fieldset>\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\">\n                <input type=\"button\" class=\"btn btn-secondary button-cancel\" value=\"", "\" @click=", ">\n            </fieldset>\n        </form>\n    "]);
+function muc_bottom_panel_templateObject() {
+  const data = muc_bottom_panel_taggedTemplateLiteral(["\n    <div class=\"emoji-picker__container dropup\"></div>\n    <div class=\"message-form-container\">"]);
 
-  muc_config_form_templateObject = function _templateObject() {
+  muc_bottom_panel_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_config_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function muc_bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
-/* harmony default export */ var muc_config_form = (o => {
-  const i18n_save = i18n_('Save');
+const tpl_can_edit = () => lit_html_html(muc_bottom_panel_templateObject());
 
-  const i18n_cancel = i18n_('Cancel');
+/* harmony default export */ var muc_bottom_panel = (o => {
+  const i18n_not_allowed = i18n_("You're not allowed to send messages in this room");
 
-  return lit_html_html(muc_config_form_templateObject(), o.submitConfigForm, o.title, o.title !== o.instructions ? lit_html_html(muc_config_form_templateObject2(), o.instructions) : '', o.fields.map(field => unsafeHTML(field)), i18n_save, i18n_cancel, o.closeConfigForm);
+  if (o.entered) {
+    return o.can_edit ? tpl_can_edit() : lit_html_html(muc_bottom_panel_templateObject2(), i18n_not_allowed);
+  } else {
+    return lit_html_html(muc_bottom_panel_templateObject3());
+  }
 });
-// CONCATENATED MODULE: ./src/templates/muc_password_form.js
-function muc_password_form_templateObject() {
-  const data = muc_password_form_taggedTemplateLiteral(["\n        <form class=\"converse-form chatroom-form converse-centered-form\" @submit=", ">\n            <fieldset class=\"form-group\">\n                <label>", "</label>\n                <p class=\"validation-message\">", "</p>\n                <input class=\"hidden-username\" type=\"text\" autocomplete=\"username\" value=\"", "\"></input>\n                <input type=\"password\"\n                    name=\"password\"\n                    required=\"required\"\n                    class=\"form-control ", "\"\n                    placeholder=\"", "\"/>\n            </fieldset>\n            <fieldset class=\"form-group\">\n                <input class=\"btn btn-primary\" type=\"submit\" value=\"", "\"/>\n            </fieldset>\n        </form>\n    "]);
+// CONCATENATED MODULE: ./src/templates/muc_destroyed.js
+function muc_destroyed_templateObject3() {
+  const data = muc_destroyed_taggedTemplateLiteral(["<p class=\"destroyed-reason\">\"", "\"</p>"]);
 
-  muc_password_form_templateObject = function _templateObject() {
+  muc_destroyed_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_password_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-/* harmony default export */ var muc_password_form = (o => {
-  const i18n_heading = i18n_('This groupchat requires a password');
-
-  const i18n_password = i18n_('Password: ');
-
-  const i18n_submit = i18n_('Submit');
-
-  return lit_html_html(muc_password_form_templateObject(), o.submitPassword, i18n_heading, o.validation_message, o.jid, o.validation_message ? 'error' : '', i18n_password, i18n_submit);
-});
-// CONCATENATED MODULE: ./src/templates/occupant.js
-function occupant_templateObject6() {
-  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-secondary\">", "</span>"]);
+function muc_destroyed_templateObject2() {
+  const data = muc_destroyed_taggedTemplateLiteral(["\n        <div class=\"alert alert-danger\">\n            <h3 class=\"alert-heading disconnect-msg\">", "</h3>\n            ", "\n            ", "\n        </div>"]);
 
-  occupant_templateObject6 = function _templateObject6() {
+  muc_destroyed_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function occupant_templateObject5() {
-  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
+function muc_destroyed_templateObject() {
+  const data = muc_destroyed_taggedTemplateLiteral(["\n        <p class=\"moved-label\">", "</p>\n        <p class=\"moved-link\"><a class=\"switch-chat\" href=\"#\">", "</a></p>"]);
 
-  occupant_templateObject5 = function _templateObject5() {
+  muc_destroyed_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function occupant_templateObject4() {
-  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
-
-  occupant_templateObject4 = function _templateObject4() {
-    return data;
-  };
-
-  return data;
-}
+function muc_destroyed_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-function occupant_templateObject3() {
-  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-info\">", "</span>"]);
 
-  occupant_templateObject3 = function _templateObject3() {
-    return data;
-  };
 
-  return data;
-}
 
-function occupant_templateObject2() {
-  const data = occupant_taggedTemplateLiteral(["<span class=\"badge badge-groupchat\">", "</span>"]);
+const tpl_moved = jid => {
+  const i18n_moved = i18n_('The conversation has moved. Click below to enter.');
 
-  occupant_templateObject2 = function _templateObject2() {
-    return data;
-  };
+  return lit_html_html(muc_destroyed_templateObject(), i18n_moved, jid);
+};
 
-  return data;
-}
+/* harmony default export */ var muc_destroyed = ((jid, reason) => {
+  const i18n_non_existent = i18n_('This groupchat no longer exists');
 
-function occupant_templateObject() {
-  const data = occupant_taggedTemplateLiteral(["\n        <li class=\"occupant\" id=\"", "\" title=\"", "\">\n            <div class=\"row no-gutters\">\n                <div class=\"col-auto\">\n                    <div class=\"occupant-status occupant-", " circle\" title=\"", "\"></div>\n                </div>\n                <div class=\"col occupant-nick-badge\">\n                    <span class=\"occupant-nick\">", "</span>\n                    <span class=\"occupant-badges\">\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                    </span>\n                </div>\n            </div>\n        </li>\n    "]);
+  return lit_html_html(muc_destroyed_templateObject2(), i18n_non_existent, reason ? lit_html_html(muc_destroyed_templateObject3(), reason) : '', jid ? tpl_moved(jid) : '');
+});
+// CONCATENATED MODULE: ./src/templates/muc_disconnect.js
+function muc_disconnect_templateObject2() {
+  const data = muc_disconnect_taggedTemplateLiteral(["<p class=\"disconnect-msg\">", "</p>"]);
 
-  occupant_templateObject = function _templateObject() {
+  muc_disconnect_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function occupant_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-const occupant_title = o => {
-  const i18n_moderator_hint = i18n_('This user is a moderator.');
-
-  const i18n_participant_hint = i18n_('This user can send messages in this groupchat.');
-
-  const i18n_visitor_hint = i18n_('This user can NOT send messages in this groupchat.');
-
-  const spaced_jid = "".concat(o.jid, " ") || false;
-
-  if (o.role === "moderator") {
-    return "".concat(spaced_jid).concat(i18n_moderator_hint, " ").concat(o.hint_occupant);
-  } else if (o.role === "participant") {
-    return "".concat(spaced_jid).concat(i18n_participant_hint, " ").concat(o.hint_occupant);
-  } else if (o.role === "visitor") {
-    return "".concat(spaced_jid).concat(i18n_visitor_hint, " ").concat(o.hint_occupant);
-  } else if (!["visitor", "participant", "moderator"].includes(o.role)) {
-    return "".concat(spaced_jid).concat(o.hint_occupant);
-  }
-};
-
-/* harmony default export */ var templates_occupant = (o => {
-  const i18n_owner = i18n_('Owner');
-
-  const i18n_admin = i18n_('Admin');
-
-  const i18n_member = i18n_('Member');
-
-  const i18n_moderator = i18n_('Moderator');
-
-  const i18n_visitor = i18n_('Visitor');
-
-  return lit_html_html(occupant_templateObject(), o.id, occupant_title(o), o.show, o.hint_show, o.nick || o.jid, o.affiliation === "owner" ? lit_html_html(occupant_templateObject2(), i18n_owner) : '', o.affiliation === "admin" ? lit_html_html(occupant_templateObject3(), i18n_admin) : '', o.affiliation === "member" ? lit_html_html(occupant_templateObject4(), i18n_member) : '', o.role === "moderator" ? lit_html_html(occupant_templateObject5(), i18n_moderator) : '', o.role === "visitor" ? lit_html_html(occupant_templateObject6(), i18n_visitor) : '');
-});
-// CONCATENATED MODULE: ./src/templates/muc_sidebar.js
-function muc_sidebar_templateObject() {
-  const data = muc_sidebar_taggedTemplateLiteral(["\n        <div class=\"occupants-header\">\n            <i class=\"hide-occupants fa fa-times\"></i>\n            <div class=\"occupants-header--title\">\n                <span class=\"occupants-heading\">", "</span>\n            </div>\n        </div>\n        <div class=\"dragresize dragresize-occupants-left\"></div>\n        <ul class=\"occupant-list\">\n            ", "\n        </ul>\n    "]);
+function muc_disconnect_templateObject() {
+  const data = muc_disconnect_taggedTemplateLiteral(["\n        <div class=\"alert alert-danger\">\n            <h3 class=\"alert-heading disconnect-msg\">", "</h3>\n            ", "\n        </div>"]);
 
-  muc_sidebar_templateObject = function _templateObject() {
+  muc_disconnect_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function muc_sidebar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-const PRETTY_CHAT_STATUS = {
-  'offline': 'Offline',
-  'unavailable': 'Unavailable',
-  'xa': 'Extended Away',
-  'away': 'Away',
-  'dnd': 'Do not disturb',
-  'chat': 'Chattty',
-  'online': 'Online'
-};
-/* harmony default export */ var muc_sidebar = (o => {
-  const i18n_occupant_hint = occupant => i18n_('Click to mention %1$s in your message.', occupant.get('nick'));
+function muc_disconnect_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  const i18n_participants = i18n_('Participants');
 
-  return lit_html_html(muc_sidebar_templateObject(), i18n_participants, o.occupants.map(occupant => {
-    return templates_occupant(Object.assign({
-      'jid': '',
-      'hint_show': PRETTY_CHAT_STATUS[occupant.get('show')],
-      'hint_occupant': i18n_occupant_hint(occupant)
-    }, occupant.toJSON()));
-  }));
+/* harmony default export */ var muc_disconnect = (messages => {
+  return lit_html_html(muc_disconnect_templateObject(), messages[0], messages.slice(1).map(m => lit_html_html(muc_disconnect_templateObject2(), m)));
 });
-// CONCATENATED MODULE: ./src/templates/room_panel.js
-function room_panel_templateObject() {
-  const data = room_panel_taggedTemplateLiteral(["\n    <div class=\"d-flex controlbox-padded\">\n        <span class=\"w-100 controlbox-heading controlbox-heading--groupchats\">", "</span>\n        <a class=\"controlbox-heading__btn show-list-muc-modal fa fa-list-ul\" title=\"", "\" data-toggle=\"modal\" data-target=\"#list-chatrooms-modal\"></a>\n        <a class=\"controlbox-heading__btn show-add-muc-modal fa fa-plus\" title=\"", "\" data-toggle=\"modal\" data-target=\"#add-chatrooms-modal\"></a>\n    </div>\n    <div class=\"list-container list-container--openrooms hidden\"></div>\n    <div class=\"list-container list-container--bookmarks hidden\"></div>"]);
+// CONCATENATED MODULE: ./src/templates/muc_nickname_form.js
+function muc_nickname_form_templateObject() {
+  const data = muc_nickname_form_taggedTemplateLiteral(["\n        <div class=\"chatroom-form-container muc-nickname-form\">\n            <form class=\"converse-form chatroom-form converse-centered-form\">\n                <fieldset class=\"form-group\">\n                    <label>", "</label>\n                    <p class=\"validation-message\">", "</p>\n                    <input type=\"text\"\n                        required=\"required\"\n                        name=\"nick\"\n                        value=\"", "\"\n                        class=\"form-control ", "\"\n                        placeholder=\"", "\"/>\n                </fieldset>\n                <fieldset class=\"form-group\">\n                    <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"", "\"/>\n                </fieldset>\n            </form>\n        </div>"]);
 
-  room_panel_templateObject = function _templateObject() {
+  muc_nickname_form_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function room_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-/* harmony default export */ var room_panel = (o => lit_html_html(room_panel_templateObject(), o.heading_chatrooms, o.title_list_rooms, o.title_new_room));
-// CONCATENATED MODULE: ./src/converse-muc-views.js
-/**
- * @module converse-muc-views
- * @copyright 2020, the Converse.js contributors
- * @description XEP-0045 Multi-User Chat Views
- * @license Mozilla Public License (MPLv2)
- */
-
+function muc_nickname_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
+/* harmony default export */ var muc_nickname_form = (o => {
+  const i18n_nickname = i18n_('Nickname');
 
+  const i18n_join = i18n_('Enter groupchat');
 
+  const i18n_heading = core_api.settings.get('muc_show_logs_before_join') ? i18n_('Choose a nickname to enter') : i18n_('Please choose your nickname');
+  return lit_html_html(muc_nickname_form_templateObject(), i18n_heading, o.nickname_validation_message, o.nick || '', o.nickname_validation_message ? 'error' : '', i18n_nickname, i18n_join);
+});
+// CONCATENATED MODULE: ./src/plugins/muc-views/muc.js
 
 
 
@@ -98579,11 +102919,11 @@ function room_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = stri
 
 
 const {
-  Strophe: converse_muc_views_Strophe,
-  sizzle: converse_muc_views_sizzle,
-  $pres: converse_muc_views_$pres
+  Strophe: muc_views_muc_Strophe,
+  sizzle: muc_views_muc_sizzle,
+  $pres: muc_$pres
 } = converse.env;
-const converse_muc_views_u = converse.env.utils;
+const muc_u = converse.env.utils;
 const OWNER_COMMANDS = ['owner'];
 const ADMIN_COMMANDS = ['admin', 'ban', 'deop', 'destroy', 'member', 'op', 'revoke'];
 const MODERATOR_COMMANDS = ['kick', 'mute', 'voice', 'modtools'];
@@ -98603,14 +102943,13 @@ const COMMAND_TO_AFFILIATION = {
   'revoke': 'none'
 };
 /**
- * NativeView which renders a groupchat, based upon
- * { @link _converse.ChatBoxView } for normal one-on-one chat boxes.
- * @class
+ * Mixin which turns a ChatBoxView into a ChatRoomView
+ * @mixin
  * @namespace _converse.ChatRoomView
  * @memberOf _converse
  */
 
-const ChatRoomView = ChatBoxView.extend({
+const ChatRoomViewMixin = {
   length: 300,
   tagName: 'div',
   className: 'chatbox chatroom hidden',
@@ -98620,7 +102959,7 @@ const ChatRoomView = ChatBoxView.extend({
     'click .hide-occupants': 'hideOccupants',
     'click .new-msgs-indicator': 'viewUnreadMessages',
     // Arrow functions don't work here because you can't bind a different `this` param to them.
-    'click .occupant-nick': function clickOccupantNick(ev) {
+    'click .occupant-nick': function (ev) {
       this.insertIntoTextArea(ev.target.textContent);
     },
     'click .send-button': 'onFormSubmitted',
@@ -98639,7 +102978,7 @@ const ChatRoomView = ChatBoxView.extend({
     this.listenTo(this.model, 'change', lodash_es_debounce(() => this.renderHeading(), 250));
     this.listenTo(this.model, 'change:composing_spoiler', this.renderMessageForm);
     this.listenTo(this.model, 'change:hidden', m => m.get('hidden') ? this.hide() : this.show());
-    this.listenTo(this.model, 'change:hidden_occupants', this.renderToolbar);
+    this.listenTo(this.model, 'change:hidden_occupants', this.onSidebarToggle);
     this.listenTo(this.model, 'configurationNeeded', this.getAndRenderConfigurationForm);
     this.listenTo(this.model, 'destroy', this.hide);
     this.listenTo(this.model, 'show', this.show);
@@ -98665,13 +103004,14 @@ const ChatRoomView = ChatBoxView.extend({
     this.listenTo(this.model.occupants, 'change:role', this.onOccupantRoleChanged);
     this.listenTo(this.model.occupants, 'change:show', this.showJoinOrLeaveNotification);
     this.listenTo(this.model.occupants, 'remove', this.onOccupantRemoved);
-    this.createSidebarView();
-    await this.updateAfterMessagesFetched(); // Register later due to await
+    this.renderChatContent();
+    this.insertIntoDOM(); // Register later due to await
 
-    const user_settings = await converse_core_converse.api.user.settings.getModel();
+    const user_settings = await core_converse.api.user.settings.getModel();
     this.listenTo(user_settings, 'change:mucs_with_hidden_subject', this.renderHeading);
     this.onConnectionStatusChanged();
     this.model.maybeShow();
+    this.scrollDown();
     /**
      * Triggered once a { @link _converse.ChatRoomView } has been opened
      * @event _converse#chatRoomViewInitialized
@@ -98679,15 +103019,20 @@ const ChatRoomView = ChatBoxView.extend({
      * @example _converse.api.listen.on('chatRoomViewInitialized', view => { ... });
      */
 
-    converse_core_api.trigger('chatRoomViewInitialized', this);
+    core_api.trigger('chatRoomViewInitialized', this);
   },
 
   async render() {
+    const sidebar_hidden = !this.shouldShowSidebar();
     this.el.setAttribute('id', this.model.get('box_id'));
     render_render(templates_chatroom({
+      sidebar_hidden,
+      'model': this.model,
+      'occupants': this.model.occupants,
+      'show_sidebar': !this.model.get('hidden_occupants') && this.model.session.get('connection_status') === converse.ROOMSTATUS.ENTERED,
       'markScrolled': ev => this.markScrolled(ev),
-      'muc_show_logs_before_join': converse_core_api.settings.get('muc_show_logs_before_join'),
-      'show_send_button': converse_core_converse.show_send_button
+      'muc_show_logs_before_join': core_api.settings.get('muc_show_logs_before_join'),
+      'show_send_button': core_converse.show_send_button
     }), this.el);
     this.notifications = this.el.querySelector('.chat-content__notifications');
     this.content = this.el.querySelector('.chat-content');
@@ -98695,7 +103040,7 @@ const ChatRoomView = ChatBoxView.extend({
     this.help_container = this.el.querySelector('.chat-content__help');
     this.renderBottomPanel();
 
-    if (!converse_core_api.settings.get('muc_show_logs_before_join') && this.model.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED) {
+    if (!core_api.settings.get('muc_show_logs_before_join') && this.model.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED) {
       this.showSpinner();
     } // Render header as late as possible since it's async and we
     // want the rest of the DOM elements to be available ASAP.
@@ -98708,8 +103053,8 @@ const ChatRoomView = ChatBoxView.extend({
 
   getNotifications() {
     const actors_per_state = this.model.notifications.toJSON();
-    const role_changes = converse_core_api.settings.get('muc_show_info_messages').filter(role_change => converse.MUC_ROLE_CHANGES_LIST.includes(role_change));
-    const join_leave_events = converse_core_api.settings.get('muc_show_info_messages').filter(join_leave_event => converse.MUC_TRAFFIC_STATES_LIST.includes(join_leave_event));
+    const role_changes = core_api.settings.get('muc_show_info_messages').filter(role_change => converse.MUC_ROLE_CHANGES_LIST.includes(role_change));
+    const join_leave_events = core_api.settings.get('muc_show_info_messages').filter(join_leave_event => converse.MUC_TRAFFIC_STATES_LIST.includes(join_leave_event));
     const states = [...converse.CHAT_STATES, ...join_leave_events, ...role_changes];
     return states.reduce((result, state) => {
       const existing_actors = actors_per_state[state];
@@ -98729,20 +103074,20 @@ const ChatRoomView = ChatBoxView.extend({
           return "".concat(result).concat(i18n_('%1$s is typing', actors[0]), "\n");
         } else if (state === 'paused') {
           return "".concat(result).concat(i18n_('%1$s has stopped typing', actors[0]), "\n");
-        } else if (state === converse_core_converse.GONE) {
+        } else if (state === core_converse.GONE) {
           return "".concat(result).concat(i18n_('%1$s has gone away', actors[0]), "\n");
         } else if (state === 'entered') {
           return "".concat(result).concat(i18n_('%1$s has entered the groupchat', actors[0]), "\n");
         } else if (state === 'exited') {
           return "".concat(result).concat(i18n_('%1$s has left the groupchat', actors[0]), "\n");
         } else if (state === 'op') {
-          return "".concat(result).concat(i18n_("%1$s is now a moderator", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s is now a moderator', actors[0]), "\n");
         } else if (state === 'deop') {
-          return "".concat(result).concat(i18n_("%1$s is no longer a moderator", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s is no longer a moderator', actors[0]), "\n");
         } else if (state === 'voice') {
-          return "".concat(result).concat(i18n_("%1$s has been given a voice", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s has been given a voice', actors[0]), "\n");
         } else if (state === 'mute') {
-          return "".concat(result).concat(i18n_("%1$s has been muted", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s has been muted', actors[0]), "\n");
         }
       } else if (actors.length > 1) {
         let actors_str;
@@ -98758,20 +103103,20 @@ const ChatRoomView = ChatBoxView.extend({
           return "".concat(result).concat(i18n_('%1$s are typing', actors_str), "\n");
         } else if (state === 'paused') {
           return "".concat(result).concat(i18n_('%1$s have stopped typing', actors_str), "\n");
-        } else if (state === converse_core_converse.GONE) {
+        } else if (state === core_converse.GONE) {
           return "".concat(result).concat(i18n_('%1$s have gone away', actors_str), "\n");
         } else if (state === 'entered') {
           return "".concat(result).concat(i18n_('%1$s have entered the groupchat', actors_str), "\n");
         } else if (state === 'exited') {
           return "".concat(result).concat(i18n_('%1$s have left the groupchat', actors_str), "\n");
         } else if (state === 'op') {
-          return "".concat(result).concat(i18n_("%1$s are now moderators", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s are now moderators', actors[0]), "\n");
         } else if (state === 'deop') {
-          return "".concat(result).concat(i18n_("%1$s are no longer moderators", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s are no longer moderators', actors[0]), "\n");
         } else if (state === 'voice') {
-          return "".concat(result).concat(i18n_("%1$s have been given voices", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s have been given voices', actors[0]), "\n");
         } else if (state === 'mute') {
-          return "".concat(result).concat(i18n_("%1$s have been muted", actors[0]), "\n");
+          return "".concat(result).concat(i18n_('%1$s have been muted', actors[0]), "\n");
         }
       }
 
@@ -98780,9 +103125,9 @@ const ChatRoomView = ChatBoxView.extend({
   },
 
   getHelpMessages() {
-    const setting = converse_core_api.settings.get("muc_disable_slash_commands");
+    const setting = core_api.settings.get('muc_disable_slash_commands');
     const disabled_commands = Array.isArray(setting) ? setting : [];
-    return ["<strong>/admin</strong>: ".concat(i18n_("Change user's affiliation to admin")), "<strong>/ban</strong>: ".concat(i18n_('Ban user by changing their affiliation to outcast')), "<strong>/clear</strong>: ".concat(i18n_('Clear the chat area')), "<strong>/close</strong>: ".concat(i18n_('Close this groupchat')), "<strong>/deop</strong>: ".concat(i18n_('Change user role to participant')), "<strong>/destroy</strong>: ".concat(i18n_('Remove this groupchat')), "<strong>/help</strong>: ".concat(i18n_('Show this menu')), "<strong>/kick</strong>: ".concat(i18n_('Kick user from groupchat')), "<strong>/me</strong>: ".concat(i18n_('Write in 3rd person')), "<strong>/member</strong>: ".concat(i18n_('Grant membership to a user')), "<strong>/modtools</strong>: ".concat(i18n_('Opens up the moderator tools GUI')), "<strong>/mute</strong>: ".concat(i18n_("Remove user's ability to post messages")), "<strong>/nick</strong>: ".concat(i18n_('Change your nickname')), "<strong>/op</strong>: ".concat(i18n_('Grant moderator role to user')), "<strong>/owner</strong>: ".concat(i18n_('Grant ownership of this groupchat')), "<strong>/register</strong>: ".concat(i18n_("Register your nickname")), "<strong>/revoke</strong>: ".concat(i18n_("Revoke the user's current affiliation")), "<strong>/subject</strong>: ".concat(i18n_('Set groupchat subject')), "<strong>/topic</strong>: ".concat(i18n_('Set groupchat subject (alias for /subject)')), "<strong>/voice</strong>: ".concat(i18n_('Allow muted user to post messages'))].filter(line => disabled_commands.every(c => !line.startsWith(c + '<', 9))).filter(line => this.getAllowedCommands().some(c => line.startsWith(c + '<', 9)));
+    return ["<strong>/admin</strong>: ".concat(i18n_("Change user's affiliation to admin")), "<strong>/ban</strong>: ".concat(i18n_('Ban user by changing their affiliation to outcast')), "<strong>/clear</strong>: ".concat(i18n_('Clear the chat area')), "<strong>/close</strong>: ".concat(i18n_('Close this groupchat')), "<strong>/deop</strong>: ".concat(i18n_('Change user role to participant')), "<strong>/destroy</strong>: ".concat(i18n_('Remove this groupchat')), "<strong>/help</strong>: ".concat(i18n_('Show this menu')), "<strong>/kick</strong>: ".concat(i18n_('Kick user from groupchat')), "<strong>/me</strong>: ".concat(i18n_('Write in 3rd person')), "<strong>/member</strong>: ".concat(i18n_('Grant membership to a user')), "<strong>/modtools</strong>: ".concat(i18n_('Opens up the moderator tools GUI')), "<strong>/mute</strong>: ".concat(i18n_("Remove user's ability to post messages")), "<strong>/nick</strong>: ".concat(i18n_('Change your nickname')), "<strong>/op</strong>: ".concat(i18n_('Grant moderator role to user')), "<strong>/owner</strong>: ".concat(i18n_('Grant ownership of this groupchat')), "<strong>/register</strong>: ".concat(i18n_('Register your nickname')), "<strong>/revoke</strong>: ".concat(i18n_("Revoke the user's current affiliation")), "<strong>/subject</strong>: ".concat(i18n_('Set groupchat subject')), "<strong>/topic</strong>: ".concat(i18n_('Set groupchat subject (alias for /subject)')), "<strong>/voice</strong>: ".concat(i18n_('Allow muted user to post messages'))].filter(line => disabled_commands.every(c => !line.startsWith(c + '<', 9))).filter(line => this.getAllowedCommands().some(c => line.startsWith(c + '<', 9)));
   },
 
   /**
@@ -98811,26 +103156,12 @@ const ChatRoomView = ChatBoxView.extend({
     }
   },
 
-  createSidebarView() {
-    this.model.occupants.chatroomview = this;
-    this.sidebar_view = new converse_core_converse.MUCSidebar({
-      'model': this.model.occupants
-    });
-    const container_el = this.el.querySelector('.chatroom-body');
-    const occupants_width = this.model.get('occupants_width');
-
-    if (this.sidebar_view && occupants_width !== undefined) {
-      this.sidebar_view.el.style.flex = "0 0 " + occupants_width + "px";
-    }
-
-    container_el.insertAdjacentElement('beforeend', this.sidebar_view.el);
-  },
-
   onStartResizeOccupants(ev) {
     this.resizing = true;
     this.el.addEventListener('mousemove', this.onMouseMove);
     this.el.addEventListener('mouseup', this.onMouseUp);
-    const style = window.getComputedStyle(this.sidebar_view.el);
+    const sidebar_el = this.el.querySelector('converse-muc-sidebar');
+    const style = window.getComputedStyle(sidebar_el);
     this.width = parseInt(style.width.replace(/px$/, ''), 10);
     this.prev_pageX = ev.pageX;
   },
@@ -98850,17 +103181,19 @@ const ChatRoomView = ChatBoxView.extend({
       this.resizing = false;
       this.el.removeEventListener('mousemove', this.onMouseMove);
       this.el.removeEventListener('mouseup', this.onMouseUp);
-      const element_position = this.sidebar_view.el.getBoundingClientRect();
+      const sidebar_el = this.el.querySelector('converse-muc-sidebar');
+      const element_position = sidebar_el.getBoundingClientRect();
       const occupants_width = this.calculateSidebarWidth(element_position, 0);
       const attrs = {
         occupants_width
       };
-      converse_core_converse.connection.connected ? this.model.save(attrs) : this.model.set(attrs);
+      core_converse.connection.connected ? this.model.save(attrs) : this.model.set(attrs);
     }
   },
 
   resizeSidebarView(delta, current_mouse_position) {
-    const element_position = this.sidebar_view.el.getBoundingClientRect();
+    const sidebar_el = this.el.querySelector('converse-muc-sidebar');
+    const element_position = sidebar_el.getBoundingClientRect();
 
     if (this.is_minimum) {
       this.is_minimum = element_position.left < current_mouse_position;
@@ -98868,7 +103201,7 @@ const ChatRoomView = ChatBoxView.extend({
       this.is_maximum = element_position.left > current_mouse_position;
     } else {
       const occupants_width = this.calculateSidebarWidth(element_position, delta);
-      this.sidebar_view.el.style.flex = "0 0 " + occupants_width + "px";
+      sidebar_el.style.flex = '0 0 ' + occupants_width + 'px';
     }
   },
 
@@ -98876,9 +103209,9 @@ const ChatRoomView = ChatBoxView.extend({
     let occupants_width = element_position.width + delta;
     const room_width = this.el.clientWidth; // keeping display in boundaries
 
-    if (occupants_width < room_width * 0.20) {
+    if (occupants_width < room_width * 0.2) {
       // set pixel to 20% width
-      occupants_width = room_width * 0.20;
+      occupants_width = room_width * 0.2;
       this.is_minimum = true;
     } else if (occupants_width > room_width * 0.75) {
       // set pixel to 75% width
@@ -98905,32 +103238,32 @@ const ChatRoomView = ChatBoxView.extend({
 
   getAutoCompleteListItem(text, input) {
     input = input.trim();
-    const element = document.createElement("li");
-    element.setAttribute("aria-selected", "false");
+    const element = document.createElement('li');
+    element.setAttribute('aria-selected', 'false');
 
-    if (converse_core_api.settings.get('muc_mention_autocomplete_show_avatar')) {
-      const img = document.createElement("img");
-      let dataUri = "data:" + converse_core_converse.DEFAULT_IMAGE_TYPE + ";base64," + converse_core_converse.DEFAULT_IMAGE;
+    if (core_api.settings.get('muc_mention_autocomplete_show_avatar')) {
+      const img = document.createElement('img');
+      let dataUri = 'data:' + core_converse.DEFAULT_IMAGE_TYPE + ';base64,' + core_converse.DEFAULT_IMAGE;
 
-      if (converse_core_converse.vcards) {
-        const vcard = converse_core_converse.vcards.findWhere({
+      if (core_converse.vcards) {
+        const vcard = core_converse.vcards.findWhere({
           'nickname': text
         });
 
-        if (vcard) dataUri = "data:" + vcard.get('image_type') + ";base64," + vcard.get('image');
+        if (vcard) dataUri = 'data:' + vcard.get('image_type') + ';base64,' + vcard.get('image');
       }
 
-      img.setAttribute("src", dataUri);
-      img.setAttribute("width", "22");
-      img.setAttribute("class", "avatar avatar-autocomplete");
+      img.setAttribute('src', dataUri);
+      img.setAttribute('width', '22');
+      img.setAttribute('class', 'avatar avatar-autocomplete');
       element.appendChild(img);
     }
 
-    const regex = new RegExp("(" + input + ")", "ig");
+    const regex = new RegExp('(' + input + ')', 'ig');
     const parts = input ? text.split(regex) : [text];
     parts.forEach(txt => {
       if (input && txt.match(regex)) {
-        const match = document.createElement("mark");
+        const match = document.createElement('mark');
         match.textContent = txt;
         element.appendChild(match);
       } else {
@@ -98941,14 +103274,14 @@ const ChatRoomView = ChatBoxView.extend({
   },
 
   initMentionAutoComplete() {
-    this.mention_auto_complete = new converse_core_converse.AutoComplete(this.el, {
+    this.mention_auto_complete = new core_converse.AutoComplete(this.el, {
       'auto_first': true,
       'auto_evaluate': false,
-      'min_chars': converse_core_api.settings.get('muc_mention_autocomplete_min_chars'),
+      'min_chars': core_api.settings.get('muc_mention_autocomplete_min_chars'),
       'match_current_word': true,
       'list': () => this.getAutoCompleteList(),
-      'filter': converse_core_api.settings.get('muc_mention_autocomplete_filter') == 'contains' ? converse_core_converse.FILTER_CONTAINS : converse_core_converse.FILTER_STARTSWITH,
-      'ac_triggers': ["Tab", "@"],
+      'filter': core_api.settings.get('muc_mention_autocomplete_filter') == 'contains' ? core_converse.FILTER_CONTAINS : core_converse.FILTER_STARTSWITH,
+      'ac_triggers': ['Tab', '@'],
       'include_triggers': [],
       'item': this.getAutoCompleteListItem
     });
@@ -98972,48 +103305,48 @@ const ChatRoomView = ChatBoxView.extend({
       return;
     }
 
-    return converse_core_converse.ChatBoxView.prototype.onKeyDown.call(this, ev);
+    return core_converse.ChatBoxView.prototype.onKeyDown.call(this, ev);
   },
 
   onKeyUp(ev) {
     this.mention_auto_complete.evaluate(ev);
-    return converse_core_converse.ChatBoxView.prototype.onKeyUp.call(this, ev);
+    return core_converse.ChatBoxView.prototype.onKeyUp.call(this, ev);
   },
 
   async onMessageRetractButtonClicked(message) {
-    const retraction_warning = i18n_("Be aware that other XMPP/Jabber clients (and servers) may " + "not yet support retractions and that this message may not " + "be removed everywhere.");
+    const retraction_warning = i18n_('Be aware that other XMPP/Jabber clients (and servers) may ' + 'not yet support retractions and that this message may not ' + 'be removed everywhere.');
 
     if (message.mayBeRetracted()) {
       const messages = [i18n_('Are you sure you want to retract this message?')];
 
-      if (converse_core_api.settings.get('show_retraction_warning')) {
+      if (core_api.settings.get('show_retraction_warning')) {
         messages[1] = retraction_warning;
       }
 
-      !!(await converse_core_api.confirm(i18n_('Confirm'), messages)) && this.model.retractOwnMessage(message);
+      !!(await core_api.confirm(i18n_('Confirm'), messages)) && this.model.retractOwnMessage(message);
     } else if (await message.mayBeModerated()) {
       if (message.get('sender') === 'me') {
         let messages = [i18n_('Are you sure you want to retract this message?')];
 
-        if (converse_core_api.settings.get('show_retraction_warning')) {
+        if (core_api.settings.get('show_retraction_warning')) {
           messages = [messages[0], retraction_warning, messages[1]];
         }
 
-        !!(await converse_core_api.confirm(i18n_('Confirm'), messages)) && this.retractOtherMessage(message);
+        !!(await core_api.confirm(i18n_('Confirm'), messages)) && this.retractOtherMessage(message);
       } else {
         let messages = [i18n_('You are about to retract this message.'), i18n_('You may optionally include a message, explaining the reason for the retraction.')];
 
-        if (converse_core_api.settings.get('show_retraction_warning')) {
+        if (core_api.settings.get('show_retraction_warning')) {
           messages = [messages[0], retraction_warning, messages[1]];
         }
 
-        const reason = await converse_core_api.prompt(i18n_('Message Retraction'), messages, i18n_('Optional reason'));
+        const reason = await core_api.prompt(i18n_('Message Retraction'), messages, i18n_('Optional reason'));
         reason !== false && this.retractOtherMessage(message, reason);
       }
     } else {
       const err_msg = i18n_("Sorry, you're not allowed to retract this message");
 
-      converse_core_api.alert('error', i18n_('Error'), err_msg);
+      core_api.alert('error', i18n_('Error'), err_msg);
     }
   },
 
@@ -99030,14 +103363,14 @@ const ChatRoomView = ChatBoxView.extend({
     if (result === null) {
       const err_msg = i18n_("A timeout occurred while trying to retract the message");
 
-      converse_core_api.alert('error', i18n_('Error'), err_msg);
-      headless_log(err_msg, converse_muc_views_Strophe.LogLevel.WARN);
-    } else if (converse_muc_views_u.isErrorStanza(result)) {
+      core_api.alert('error', i18n_('Error'), err_msg);
+      headless_log(err_msg, muc_views_muc_Strophe.LogLevel.WARN);
+    } else if (muc_u.isErrorStanza(result)) {
       const err_msg = i18n_("Sorry, you're not allowed to retract this message.");
 
-      converse_core_api.alert('error', i18n_('Error'), err_msg);
-      headless_log(err_msg, converse_muc_views_Strophe.LogLevel.WARN);
-      headless_log(result, converse_muc_views_Strophe.LogLevel.WARN);
+      core_api.alert('error', i18n_('Error'), err_msg);
+      headless_log(err_msg, muc_views_muc_Strophe.LogLevel.WARN);
+      headless_log(result, muc_views_muc_Strophe.LogLevel.WARN);
     }
   },
 
@@ -99046,32 +103379,36 @@ const ChatRoomView = ChatBoxView.extend({
       return;
     }
 
-    if (typeof this.model.modtools_modal === 'undefined') {
+    let modal = core_api.modal.get(modals_moderator_tools.id);
+
+    if (modal) {
+      modal.model.set('affiliation', affiliation);
+    } else {
       const model = new model_Model({
         'affiliation': affiliation
       });
-      this.modtools_modal = new moderator_tools({
+      modal = core_api.modal.create(modals_moderator_tools, {
         model,
-        _converse: converse_core_converse,
+        _converse: core_converse,
         'chatroomview': this
       });
-    } else {
-      this.modtools_modal.set('affiliation', affiliation);
     }
 
-    this.modtools_modal.show();
+    modal.show();
   },
 
   showRoomDetailsModal(ev) {
     ev.preventDefault();
+    core_api.modal.show(modals_muc_details, {
+      'model': this.model
+    }, ev);
+  },
 
-    if (this.model.room_details_modal === undefined) {
-      this.model.room_details_modal = new muc_details({
-        'model': this.model
-      });
-    }
-
-    this.model.room_details_modal.show(ev);
+  showOccupantDetailsModal(ev, message) {
+    ev.preventDefault();
+    core_api.modal.show(modals_occupant, {
+      'model': message.occupant
+    }, ev);
   },
 
   showChatStateNotification(message) {
@@ -99079,17 +103416,28 @@ const ChatRoomView = ChatBoxView.extend({
       return;
     }
 
-    return converse_core_converse.ChatBoxView.prototype.showChatStateNotification.apply(this, arguments);
+    return core_converse.ChatBoxView.prototype.showChatStateNotification.apply(this, arguments);
+  },
+
+  shouldShowSidebar() {
+    return !this.model.get('hidden_occupants') && this.model.session.get('connection_status') === converse.ROOMSTATUS.ENTERED;
+  },
+
+  onSidebarToggle() {
+    var _this$el$querySelecto;
+
+    this.renderToolbar();
+    (_this$el$querySelecto = this.el.querySelector('.occupants')) === null || _this$el$querySelecto === void 0 ? void 0 : _this$el$querySelecto.setVisibility();
   },
 
   onOccupantAffiliationChanged(occupant) {
-    if (occupant.get('jid') === converse_core_converse.bare_jid) {
+    if (occupant.get('jid') === core_converse.bare_jid) {
       this.renderHeading();
     }
   },
 
   onOccupantRoleChanged(occupant) {
-    if (occupant.get('jid') === converse_core_converse.bare_jid) {
+    if (occupant.get('jid') === core_converse.bare_jid) {
       this.renderBottomPanel();
     }
   },
@@ -99106,7 +103454,7 @@ const ChatRoomView = ChatBoxView.extend({
       'i18n_text': i18n_('Details'),
       'i18n_title': i18n_('Show more information about this groupchat'),
       'handler': ev => this.showRoomDetailsModal(ev),
-      'a_class': 'show-room-details-modal',
+      'a_class': 'show-muc-details-modal',
       'icon_class': 'fa-info-circle',
       'name': 'details'
     });
@@ -99174,24 +103522,24 @@ const ChatRoomView = ChatBoxView.extend({
       }
     }
 
-    if (!converse_core_api.settings.get("singleton")) {
+    if (!core_api.settings.get('singleton')) {
       buttons.push({
         'i18n_text': i18n_('Leave'),
         'i18n_title': i18n_('Leave and close this groupchat'),
         'handler': async ev => {
           ev.stopPropagation();
           const messages = [i18n_('Are you sure you want to leave this groupchat?')];
-          const result = await converse_core_api.confirm(i18n_('Confirm'), messages);
+          const result = await core_api.confirm(i18n_('Confirm'), messages);
           result && this.close(ev);
         },
         'a_class': 'close-chatbox-button',
-        'standalone': converse_core_api.settings.get("view_mode") === 'overlayed',
+        'standalone': core_api.settings.get('view_mode') === 'overlayed',
         'icon_class': 'fa-sign-out-alt',
         'name': 'signout'
       });
     }
 
-    return converse_core_converse.api.hook('getHeadingButtons', this, buttons);
+    return core_converse.api.hook('getHeadingButtons', this, buttons);
   },
 
   /**
@@ -99205,7 +103553,7 @@ const ChatRoomView = ChatBoxView.extend({
     const standalone_btns = heading_btns.filter(b => b.standalone);
     const dropdown_btns = heading_btns.filter(b => !b.standalone);
     return chatroom_head(Object.assign(this.model.toJSON(), {
-      _converse: converse_core_converse,
+      _converse: core_converse,
       subject_hidden,
       'dropdown_btns': dropdown_btns.map(b => this.getHeadingDropdownItem(b)),
       'standalone_btns': standalone_btns.map(b => this.getHeadingStandaloneButton(b)),
@@ -99219,16 +103567,10 @@ const ChatRoomView = ChatBoxView.extend({
 
   showInviteModal(ev) {
     ev.preventDefault();
-
-    if (this.muc_invite_modal === undefined) {
-      this.muc_invite_modal = new muc_invite({
-        'model': new model_Model()
-      }); // TODO: remove once we have API for sending direct invite
-
-      this.muc_invite_modal.chatroomview = this;
-    }
-
-    this.muc_invite_modal.show(ev);
+    core_api.modal.show(modals_muc_invite, {
+      'model': new model_Model(),
+      'chatroomview': this
+    }, ev);
   },
 
   /**
@@ -99240,7 +103582,7 @@ const ChatRoomView = ChatBoxView.extend({
     // Override from converse-chatview, specifically to avoid
     // the 'active' chat state from being sent out prematurely.
     // This is instead done in `onConnectionStatusChanged` below.
-    if (converse_muc_views_u.isPersistableModel(this.model)) {
+    if (muc_u.isPersistableModel(this.model)) {
       this.model.clearUnreadMsgCounter();
     }
 
@@ -99268,10 +103610,10 @@ const ChatRoomView = ChatBoxView.extend({
   },
 
   getToolbarOptions() {
-    return Object.assign(converse_core_converse.ChatBoxView.prototype.getToolbarOptions.apply(this, arguments), {
+    return Object.assign(core_converse.ChatBoxView.prototype.getToolbarOptions.apply(this, arguments), {
       'is_groupchat': true,
       'label_hide_occupants': i18n_('Hide the list of participants'),
-      'show_occupants_toggle': converse_core_converse.visible_toolbar_buttons.toggle_occupants
+      'show_occupants_toggle': core_converse.visible_toolbar_buttons.toggle_occupants
     });
   },
 
@@ -99283,12 +103625,12 @@ const ChatRoomView = ChatBoxView.extend({
   async close() {
     this.hide();
 
-    if (converse_core_converse.router.history.getFragment() === "converse/room?jid=" + this.model.get('jid')) {
-      converse_core_converse.router.navigate('');
+    if (core_converse.router.history.getFragment() === 'converse/room?jid=' + this.model.get('jid')) {
+      core_converse.router.navigate('');
     }
 
     await this.model.leave();
-    return converse_core_converse.ChatBoxView.prototype.close.apply(this, arguments);
+    return core_converse.ChatBoxView.prototype.close.apply(this, arguments);
   },
 
   /**
@@ -99318,7 +103660,7 @@ const ChatRoomView = ChatBoxView.extend({
     }
 
     occupant = occupant || this.model.occupants.findWhere({
-      'jid': converse_core_converse.bare_jid
+      'jid': core_converse.bare_jid
     });
 
     if (occupant) {
@@ -99351,7 +103693,7 @@ const ChatRoomView = ChatBoxView.extend({
     }
 
     occupant = occupant || this.model.occupants.findWhere({
-      'jid': converse_core_converse.bare_jid
+      'jid': core_converse.bare_jid
     });
 
     if (occupant) {
@@ -99389,7 +103731,7 @@ const ChatRoomView = ChatBoxView.extend({
   },
 
   getNickOrJIDFromCommandArgs(args) {
-    if (converse_muc_views_u.isValidJID(args.trim())) {
+    if (muc_u.isValidJID(args.trim())) {
       return args.trim();
     }
 
@@ -99410,7 +103752,7 @@ const ChatRoomView = ChatBoxView.extend({
     }
 
     if (references.length > 1) {
-      const message = i18n_("Error: found multiple groupchat participant based on your arguments");
+      const message = i18n_('Error: found multiple groupchat participant based on your arguments');
 
       this.model.createMessage({
         message,
@@ -99463,10 +103805,10 @@ const ChatRoomView = ChatBoxView.extend({
     if (occupant) {
       jid = occupant.get('jid');
     } else {
-      if (converse_muc_views_u.isValidJID(nick_or_jid)) {
+      if (muc_u.isValidJID(nick_or_jid)) {
         jid = nick_or_jid;
       } else {
-        const message = i18n_("Couldn't find a participant with that nickname. " + "They might have left the groupchat.");
+        const message = i18n_("Couldn't find a participant with that nickname. " + 'They might have left the groupchat.');
 
         this.model.createMessage({
           message,
@@ -99481,7 +103823,7 @@ const ChatRoomView = ChatBoxView.extend({
       reason
     };
 
-    if (occupant && converse_core_api.settings.get('auto_register_muc_nickname')) {
+    if (occupant && core_api.settings.get('auto_register_muc_nickname')) {
       attrs['nick'] = occupant.get('nick');
     }
 
@@ -99526,7 +103868,7 @@ const ChatRoomView = ChatBoxView.extend({
   onCommandError(err) {
     headless_log.fatal(err);
 
-    const message = i18n_("Sorry, an error happened while running the command.") + " " + i18n_("Check your browser's developer console for details.");
+    const message = i18n_('Sorry, an error happened while running the command.') + ' ' + i18n_("Check your browser's developer console for details.");
 
     this.model.createMessage({
       message,
@@ -99542,7 +103884,7 @@ const ChatRoomView = ChatBoxView.extend({
     }
 
     const occupant = this.model.occupants.findWhere({
-      'jid': converse_core_converse.bare_jid
+      'jid': core_converse.bare_jid
     });
 
     if (this.verifyAffiliations(['owner'], occupant, false)) {
@@ -99559,8 +103901,8 @@ const ChatRoomView = ChatBoxView.extend({
 
     allowed_commands.sort();
 
-    if (Array.isArray(converse_core_api.settings.get('muc_disable_slash_commands'))) {
-      return allowed_commands.filter(c => !converse_core_api.settings.get('muc_disable_slash_commands').includes(c));
+    if (Array.isArray(core_api.settings.get('muc_disable_slash_commands'))) {
+      return allowed_commands.filter(c => !core_api.settings.get('muc_disable_slash_commands').includes(c));
     } else {
       return allowed_commands;
     }
@@ -99587,7 +103929,7 @@ const ChatRoomView = ChatBoxView.extend({
     try {
       var _fields$filter$pop, _fields$filter$pop2;
 
-      fields = await converse_core_api.confirm(i18n_('Confirm'), messages, fields);
+      fields = await core_api.confirm(i18n_('Confirm'), messages, fields);
       const reason = (_fields$filter$pop = fields.filter(f => f.name === 'reason').pop()) === null || _fields$filter$pop === void 0 ? void 0 : _fields$filter$pop.value;
       const newjid = (_fields$filter$pop2 = fields.filter(f => f.name === 'newjid').pop()) === null || _fields$filter$pop2 === void 0 ? void 0 : _fields$filter$pop2.value;
       return this.model.sendDestroyIQ(reason, newjid).then(() => this.close());
@@ -99597,11 +103939,11 @@ const ChatRoomView = ChatBoxView.extend({
   },
 
   parseMessageForCommands(text) {
-    if (converse_core_api.settings.get('muc_disable_slash_commands') && !Array.isArray(converse_core_api.settings.get('muc_disable_slash_commands'))) {
-      return converse_core_converse.ChatBoxView.prototype.parseMessageForCommands.apply(this, arguments);
+    if (core_api.settings.get('muc_disable_slash_commands') && !Array.isArray(core_api.settings.get('muc_disable_slash_commands'))) {
+      return core_converse.ChatBoxView.prototype.parseMessageForCommands.apply(this, arguments);
     }
 
-    text = text.replace(/^\s*/, "");
+    text = text.replace(/^\s*/, '');
     const command = (text.match(/^\/([a-zA-Z]*) ?/) || ['']).pop().toLowerCase();
 
     if (!command) {
@@ -99694,11 +104036,11 @@ const ChatRoomView = ChatBoxView.extend({
               'type': 'error'
             });
           } else {
-            const jid = converse_muc_views_Strophe.getBareJidFromJid(this.model.get('jid'));
-            converse_core_api.send(converse_muc_views_$pres({
-              from: converse_core_converse.connection.jid,
+            const jid = muc_views_muc_Strophe.getBareJidFromJid(this.model.get('jid'));
+            core_api.send(muc_$pres({
+              from: core_converse.connection.jid,
               to: "".concat(jid, "/").concat(args),
-              id: converse_muc_views_u.getUniqueId()
+              id: muc_u.getUniqueId()
             }).tree());
           }
 
@@ -99752,7 +104094,7 @@ const ChatRoomView = ChatBoxView.extend({
         }
 
       default:
-        return converse_core_converse.ChatBoxView.prototype.parseMessageForCommands.apply(this, arguments);
+        return core_converse.ChatBoxView.prototype.parseMessageForCommands.apply(this, arguments);
     }
 
     return true;
@@ -99772,7 +104114,7 @@ const ChatRoomView = ChatBoxView.extend({
     this.model.save('config_stanza', stanza.outerHTML);
 
     if (!this.config_form) {
-      this.config_form = new converse_core_converse.MUCConfigForm({
+      this.config_form = new core_converse.MUCConfigForm({
         'model': this.model,
         'chatroomview': this
       });
@@ -99780,7 +104122,7 @@ const ChatRoomView = ChatBoxView.extend({
       container_el.insertAdjacentElement('beforeend', this.config_form.el);
     }
 
-    converse_muc_views_u.showElement(this.config_form.el);
+    muc_u.showElement(this.config_form.el);
   },
 
   /**
@@ -99791,16 +104133,16 @@ const ChatRoomView = ChatBoxView.extend({
   renderNicknameForm() {
     const tpl_result = muc_nickname_form(this.model.toJSON());
 
-    if (converse_core_api.settings.get('muc_show_logs_before_join')) {
+    if (core_api.settings.get('muc_show_logs_before_join')) {
       const container = this.el.querySelector('.muc-bottom-panel');
       render_render(tpl_result, container);
-      converse_muc_views_u.addClass('muc-bottom-panel--nickname', container);
+      muc_u.addClass('muc-bottom-panel--nickname', container);
     } else {
       const form = this.el.querySelector('.muc-nickname-form');
-      const form_el = converse_muc_views_u.getElementFromTemplateResult(tpl_result);
+      const form_el = muc_u.getElementFromTemplateResult(tpl_result);
 
       if (form) {
-        converse_muc_views_sizzle('.spinner', this.el).forEach(converse_muc_views_u.removeElement);
+        muc_views_muc_sizzle('.spinner', this.el).forEach(muc_u.removeElement);
         form.outerHTML = form_el.outerHTML;
       } else {
         this.hideChatRoomContents();
@@ -99809,7 +104151,7 @@ const ChatRoomView = ChatBoxView.extend({
       }
     }
 
-    converse_muc_views_u.safeSave(this.model.session, {
+    muc_u.safeSave(this.model.session, {
       'connection_status': converse.ROOMSTATUS.NICKNAME_REQUIRED
     });
   },
@@ -99820,7 +104162,7 @@ const ChatRoomView = ChatBoxView.extend({
    * @method _converse.ChatRoomView#closeForm
    */
   closeForm() {
-    converse_muc_views_sizzle('.chatroom-form-container', this.el).forEach(e => converse_muc_views_u.addClass('hidden', e));
+    muc_views_muc_sizzle('.chatroom-form-container', this.el).forEach(e => muc_u.addClass('hidden', e));
     this.renderAfterTransition();
   },
 
@@ -99839,7 +104181,7 @@ const ChatRoomView = ChatBoxView.extend({
    *   the settings.
    */
   getAndRenderConfigurationForm() {
-    if (!this.config_form || !converse_muc_views_u.isVisible(this.config_form.el)) {
+    if (!this.config_form || !muc_u.isVisible(this.config_form.el)) {
       this.showSpinner();
       this.model.fetchRoomConfiguration().then(iq => this.renderConfigurationForm(iq)).catch(e => headless_log.error(e));
     } else {
@@ -99861,7 +104203,7 @@ const ChatRoomView = ChatBoxView.extend({
     this.model.save('password_validation_message', undefined);
 
     if (!this.password_form) {
-      this.password_form = new converse_core_converse.MUCPasswordForm({
+      this.password_form = new core_converse.MUCPasswordForm({
         'model': new model_Model({
           'validation_message': message
         }),
@@ -99873,14 +104215,14 @@ const ChatRoomView = ChatBoxView.extend({
       this.password_form.model.set('validation_message', message);
     }
 
-    converse_muc_views_u.showElement(this.password_form.el);
+    muc_u.showElement(this.password_form.el);
     this.model.session.save('connection_status', converse.ROOMSTATUS.PASSWORD_REQUIRED);
   },
 
   showDestroyedMessage() {
-    converse_muc_views_u.hideElement(this.el.querySelector('.chat-area'));
-    converse_muc_views_u.hideElement(this.el.querySelector('.occupants'));
-    converse_muc_views_sizzle('.spinner', this.el).forEach(converse_muc_views_u.removeElement);
+    muc_u.hideElement(this.el.querySelector('.chat-area'));
+    muc_u.hideElement(this.el.querySelector('.occupants'));
+    muc_views_muc_sizzle('.spinner', this.el).forEach(muc_u.removeElement);
     const reason = this.model.get('destroyed_reason');
     const moved_jid = this.model.get('moved_jid');
     this.model.save({
@@ -99891,142 +104233,706 @@ const ChatRoomView = ChatBoxView.extend({
     render_render(muc_destroyed(moved_jid, reason), container);
     const switch_el = container.querySelector('a.switch-chat');
 
-    if (switch_el) {
-      switch_el.addEventListener('click', async ev => {
-        ev.preventDefault();
-        const room = await converse_core_api.rooms.get(moved_jid, null, true);
-        room.maybeShow(true);
-        this.model.destroy();
-      });
-    }
+    if (switch_el) {
+      switch_el.addEventListener('click', async ev => {
+        ev.preventDefault();
+        const room = await core_api.rooms.get(moved_jid, null, true);
+        room.maybeShow(true);
+        this.model.destroy();
+      });
+    }
+
+    muc_u.showElement(container);
+  },
+
+  showDisconnectMessage() {
+    const message = this.model.get('disconnection_message');
+
+    if (!message) {
+      return;
+    }
+
+    muc_u.hideElement(this.el.querySelector('.chat-area'));
+    muc_u.hideElement(this.el.querySelector('.occupants'));
+    muc_views_muc_sizzle('.spinner', this.el).forEach(muc_u.removeElement);
+    const messages = [message];
+    const actor = this.model.get('disconnection_actor');
+
+    if (actor) {
+      messages.push(i18n_('This action was done by %1$s.', actor));
+    }
+
+    const reason = this.model.get('disconnection_reason');
+
+    if (reason) {
+      messages.push(i18n_('The reason given is: "%1$s".', reason));
+    }
+
+    this.model.save({
+      'disconnection_message': undefined,
+      'disconnection_reason': undefined,
+      'disconnection_actor': undefined
+    });
+    const container = this.el.querySelector('.disconnect-container');
+    render_render(muc_disconnect(messages), container);
+    muc_u.showElement(container);
+  },
+
+  onOccupantAdded(occupant) {
+    if (occupant.get('jid') === core_converse.bare_jid) {
+      this.renderHeading();
+      this.renderBottomPanel();
+    }
+  },
+
+  /**
+   * Working backwards, get today's most recent join/leave notification
+   * from the same user (if any exists) after the most recent chat message.
+   * @private
+   * @method _converse.ChatRoomView#getPreviousJoinOrLeaveNotification
+   * @param {HTMLElement} el
+   * @param {string} nick
+   */
+  getPreviousJoinOrLeaveNotification(el, nick) {
+    const today = new Date().toISOString().split('T')[0];
+
+    while (el !== null) {
+      var _el;
+
+      if (!el.classList.contains('chat-info')) {
+        return;
+      } // Check whether el is still from today.
+      // We don't use `Dayjs.same` here, since it's about 4 times slower.
+
+
+      const date = el.getAttribute('data-isodate');
+
+      if (date && date.split('T')[0] !== today) {
+        return;
+      }
+
+      const data = ((_el = el) === null || _el === void 0 ? void 0 : _el.dataset) || {};
+
+      if (data.join === nick || data.leave === nick || data.leavejoin === nick || data.joinleave === nick) {
+        return el;
+      }
+
+      el = el.previousElementSibling;
+    }
+  },
+
+  /**
+   * Rerender the groupchat after some kind of transition. For
+   * example after the spinner has been removed or after a
+   * form has been submitted and removed.
+   * @private
+   * @method _converse.ChatRoomView#renderAfterTransition
+   */
+  renderAfterTransition() {
+    const conn_status = this.model.session.get('connection_status');
+
+    if (conn_status == converse.ROOMSTATUS.NICKNAME_REQUIRED) {
+      this.renderNicknameForm();
+    } else if (conn_status == converse.ROOMSTATUS.PASSWORD_REQUIRED) {
+      this.renderPasswordForm();
+    } else if (conn_status == converse.ROOMSTATUS.ENTERED) {
+      var _this$el$querySelecto2;
+
+      this.hideChatRoomContents();
+      muc_u.showElement(this.el.querySelector('.chat-area'));
+      (_this$el$querySelecto2 = this.el.querySelector('.occupants')) === null || _this$el$querySelecto2 === void 0 ? void 0 : _this$el$querySelecto2.setVisibility();
+      this.scrollDown();
+    }
+  },
+
+  showSpinner() {
+    muc_views_muc_sizzle('.spinner', this.el).forEach(muc_u.removeElement);
+    this.hideChatRoomContents();
+    const container_el = this.el.querySelector('.chatroom-body');
+    container_el.insertAdjacentElement('afterbegin', muc_u.getElementFromTemplateResult(spinner()));
+  },
+
+  /**
+   * Check if the spinner is being shown and if so, hide it.
+   * Also make sure then that the chat area and occupants
+   * list are both visible.
+   * @private
+   * @method _converse.ChatRoomView#hideSpinner
+   */
+  hideSpinner() {
+    const spinner = this.el.querySelector('.spinner');
+
+    if (spinner !== null) {
+      muc_u.removeElement(spinner);
+      this.renderAfterTransition();
+    }
+
+    return this;
+  }
+
+};
+/* harmony default export */ var muc_views_muc = (ChatRoomViewMixin);
+// CONCATENATED MODULE: ./src/plugins/muc-views/api.js
+
+/* harmony default export */ var muc_views_api = ({
+  /**
+   * The "roomviews" namespace groups methods relevant to chatroom
+   * (aka groupchats) views.
+   *
+   * @namespace _converse.api.roomviews
+   * @memberOf _converse.api
+   */
+  roomviews: {
+    /**
+     * Retrieves a groupchat (aka chatroom) view. The chat should already be open.
+     *
+     * @method _converse.api.roomviews.get
+     * @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or
+     *  ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']
+     * @returns {View} View representing the groupchat
+     *
+     * @example
+     * // To return a single view, provide the JID of the groupchat
+     * const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit');
+     *
+     * @example
+     * // To return an array of views, provide an array of JIDs:
+     * const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']);
+     *
+     * @example
+     * // To return views of all open groupchats, call the method without any parameters::
+     * const views = _converse.api.roomviews.get();
+     *
+     */
+    get(jids) {
+      if (Array.isArray(jids)) {
+        const views = core_api.chatviews.get(jids);
+        return views.filter(v => v.model.get('type') === core_converse.CHATROOMS_TYPE);
+      } else {
+        const view = core_api.chatviews.get(jids);
+
+        if (view.model.get('type') === core_converse.CHATROOMS_TYPE) {
+          return view;
+        } else {
+          return null;
+        }
+      }
+    },
+
+    /**
+     * Lets you close open chatrooms.
+     *
+     * You can call this method without any arguments to close
+     * all open chatrooms, or you can specify a single JID or
+     * an array of JIDs.
+     *
+     * @method _converse.api.roomviews.close
+     * @param {(String[]|String)} jids The JID or array of JIDs of the chatroom(s)
+     * @returns { Promise } - Promise which resolves once the views have been closed.
+     */
+    close(jids) {
+      let views;
+
+      if (jids === undefined) {
+        views = core_converse.chatboxviews;
+      } else if (typeof jids === 'string') {
+        views = [core_converse.chatboxviews.get(jids)].filter(v => v);
+      } else if (Array.isArray(jids)) {
+        views = jids.map(jid => core_converse.chatboxviews.get(jid));
+      }
+
+      return Promise.all(views.map(v => v.is_chatroom && v.model && v.close()));
+    }
+
+  }
+});
+// CONCATENATED MODULE: ./src/modals/templates/add-muc.js
+function add_muc_templateObject4() {
+  const data = add_muc_taggedTemplateLiteral(["<div class=\"form-group\">", "</div>"]);
+
+  add_muc_templateObject4 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function add_muc_templateObject3() {
+  const data = add_muc_taggedTemplateLiteral(["<label class=\"roomid-policy-error\">", "</label>"]);
+
+  add_muc_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function add_muc_templateObject2() {
+  const data = add_muc_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"add-chatroom-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    <form class=\"converse-form add-chatroom\">\n                        <div class=\"form-group\">\n                            <label for=\"chatroom\">", ":</label>\n                            ", "\n                            <input type=\"text\" required=\"required\" name=\"chatroom\" class=\"form-control roomjid-input\" placeholder=\"", "\"/>\n                        </div>\n                        ", "\n                        ", "\n                        <input type=\"submit\" class=\"btn btn-primary\" name=\"join\" value=\"", "\" ?disabled=", ">\n                    </form>\n                </div>\n            </div>\n        </div>\n    "]);
+
+  add_muc_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function add_muc_templateObject() {
+  const data = add_muc_taggedTemplateLiteral(["\n        <div class=\"form-group\" >\n            <label for=\"nickname\">", ":</label>\n            <input type=\"text\" title=\"", "\" required=\"required\" name=\"nickname\" value=\"", "\" class=\"form-control\"/>\n        </div>\n    "]);
+
+  add_muc_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function add_muc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+
+
+
+const nickname_input = o => {
+  const i18n_nickname = i18n_('Nickname');
+
+  const i18n_required_field = i18n_('This field is required');
+
+  return lit_html_html(add_muc_templateObject(), i18n_nickname, i18n_required_field, o.nick || '');
+};
+
+/* harmony default export */ var add_muc = (o => {
+  const i18n_join = i18n_('Join');
+
+  const i18n_enter = i18n_('Enter a new Groupchat');
+
+  return lit_html_html(add_muc_templateObject2(), i18n_enter, modal_header_close_button, o.label_room_address, o.muc_roomid_policy_error_msg ? lit_html_html(add_muc_templateObject3(), o.muc_roomid_policy_error_msg) : '', o.chatroom_placeholder, o.muc_roomid_policy_hint ? lit_html_html(add_muc_templateObject4(), unsafeHTML(xss_default.a.filterXSS(o.muc_roomid_policy_hint, {
+    'whiteList': {
+      b: [],
+      br: [],
+      em: []
+    }
+  }))) : '', !o._converse.locked_muc_nickname ? nickname_input(o) : '', i18n_join || '', o.muc_roomid_policy_error_msg);
+});
+// EXTERNAL MODULE: ./node_modules/strophe.js/src/strophe.js
+var src_strophe = __webpack_require__(24);
+
+// CONCATENATED MODULE: ./src/modals/add-muc.js
+
+
+
+
+
+const add_muc_u = converse.env.utils;
+/* harmony default export */ var modals_add_muc = (modals_base.extend({
+  persistent: true,
+  id: 'add-chatroom-modal',
+  events: {
+    'submit form.add-chatroom': 'openChatRoom',
+    'keyup .roomjid-input': 'checkRoomidPolicy',
+    'change .roomjid-input': 'checkRoomidPolicy'
+  },
+
+  initialize() {
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.listenTo(this.model, 'change:muc_domain', this.render);
+    this.muc_roomid_policy_error_msg = null;
+  },
+
+  toHTML() {
+    let placeholder = '';
+
+    if (!core_api.settings.get('locked_muc_domain')) {
+      const muc_domain = this.model.get('muc_domain') || core_api.settings.get('muc_domain');
+      placeholder = muc_domain ? "name@".concat(muc_domain) : i18n_('name@conference.example.org');
+    }
+
+    return add_muc(Object.assign(this.model.toJSON(), {
+      '_converse': core_converse,
+      'label_room_address': core_api.settings.get('muc_domain') ? i18n_('Groupchat name') : i18n_('Groupchat address'),
+      'chatroom_placeholder': placeholder,
+      'muc_roomid_policy_error_msg': this.muc_roomid_policy_error_msg,
+      'muc_roomid_policy_hint': core_api.settings.get('muc_roomid_policy_hint')
+    }));
+  },
+
+  afterRender() {
+    this.el.addEventListener('shown.bs.modal', () => {
+      this.el.querySelector('input[name="chatroom"]').focus();
+    }, false);
+  },
+
+  parseRoomDataFromEvent(form) {
+    const data = new FormData(form);
+    const jid = data.get('chatroom');
+    let nick;
+
+    if (core_api.settings.get('locked_muc_nickname')) {
+      nick = core_converse.getDefaultMUCNickname();
+
+      if (!nick) {
+        throw new Error("Using locked_muc_nickname but no nickname found!");
+      }
+    } else {
+      nick = data.get('nickname').trim();
+    }
+
+    return {
+      'jid': jid,
+      'nick': nick
+    };
+  },
+
+  openChatRoom(ev) {
+    ev.preventDefault();
+    const data = this.parseRoomDataFromEvent(ev.target);
+
+    if (data.nick === "") {
+      // Make sure defaults apply if no nick is provided.
+      data.nick = undefined;
+    }
+
+    let jid;
+
+    if (core_api.settings.get('locked_muc_domain') || core_api.settings.get('muc_domain') && !add_muc_u.isValidJID(data.jid)) {
+      jid = "".concat(src_strophe["b" /* Strophe */].escapeNode(data.jid), "@").concat(core_api.settings.get('muc_domain'));
+    } else {
+      jid = data.jid;
+      this.model.setDomain(jid);
+    }
+
+    core_api.rooms.open(jid, Object.assign(data, {
+      jid
+    }), true);
+    this.modal.hide();
+    ev.target.reset();
+  },
+
+  checkRoomidPolicy() {
+    if (core_api.settings.get('muc_roomid_policy') && core_api.settings.get('muc_domain')) {
+      let jid = this.el.querySelector('.roomjid-input').value;
+
+      if (converse.locked_muc_domain || !add_muc_u.isValidJID(jid)) {
+        jid = "".concat(src_strophe["b" /* Strophe */].escapeNode(jid), "@").concat(core_api.settings.get('muc_domain'));
+      }
+
+      const roomid = src_strophe["b" /* Strophe */].getNodeFromJid(jid);
+      const roomdomain = src_strophe["b" /* Strophe */].getDomainFromJid(jid);
+
+      if (core_api.settings.get('muc_domain') !== roomdomain || core_api.settings.get('muc_roomid_policy').test(roomid)) {
+        this.muc_roomid_policy_error_msg = null;
+      } else {
+        this.muc_roomid_policy_error_msg = i18n_('Groupchat id is invalid.');
+      }
+
+      this.render();
+    }
+  }
+
+}));
+// CONCATENATED MODULE: ./src/templates/room_panel.js
+function room_panel_templateObject() {
+  const data = room_panel_taggedTemplateLiteral(["\n    <div class=\"d-flex controlbox-padded\">\n        <span class=\"w-100 controlbox-heading controlbox-heading--groupchats\">", "</span>\n        <a class=\"controlbox-heading__btn show-list-muc-modal fa fa-list-ul\" title=\"", "\" data-toggle=\"modal\" data-target=\"#muc-list-modal\"></a>\n        <a class=\"controlbox-heading__btn show-add-muc-modal fa fa-plus\" title=\"", "\" data-toggle=\"modal\" data-target=\"#add-chatrooms-modal\"></a>\n    </div>\n    <div class=\"list-container list-container--openrooms hidden\"></div>\n    <div class=\"list-container list-container--bookmarks hidden\"></div>"]);
+
+  room_panel_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function room_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+/* harmony default export */ var room_panel = (o => lit_html_html(room_panel_templateObject(), o.heading_chatrooms, o.title_list_rooms, o.title_new_room));
+// CONCATENATED MODULE: ./src/modals/templates/muc-list.js
+function muc_list_templateObject5() {
+  const data = muc_list_taggedTemplateLiteral(["<li class=\"list-group-item active\">", "</li>"]);
+
+  muc_list_templateObject5 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_list_templateObject4() {
+  const data = muc_list_taggedTemplateLiteral(["<li class=\"list-group-item\"> ", " </li>"]);
+
+  muc_list_templateObject4 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_list_templateObject3() {
+  const data = muc_list_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"muc-list-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body d-flex flex-column\">\n                    <span class=\"modal-alert\"></span>\n                    ", "\n                    <ul class=\"available-chatrooms list-group\">\n                        ", "\n                        ", "\n                        ", "\n                    </ul>\n                </div>\n                <div class=\"modal-footer\">", "</div>\n            </div>\n        </div>\n    "]);
+
+  muc_list_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_list_templateObject2() {
+  const data = muc_list_taggedTemplateLiteral(["\n        <li class=\"room-item list-group-item\">\n            <div class=\"available-chatroom d-flex flex-row\">\n                <a class=\"open-room available-room w-100\"\n                @click=", "\n                data-room-jid=\"", "\"\n                data-room-name=\"", "\"\n                title=\"", "\"\n                href=\"#\">", "</a>\n                <a class=\"right room-info icon-room-info\"\n                @click=", "\n                data-room-jid=\"", "\"\n                title=\"", "\"\n                href=\"#\"></a>\n            </div>\n        </li>\n    "]);
+
+  muc_list_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_list_templateObject() {
+  const data = muc_list_taggedTemplateLiteral(["\n        <form class=\"converse-form list-chatrooms\"\n            @submit=", ">\n            <div class=\"form-group\">\n                <label for=\"chatroom\">", ":</label>\n                <input type=\"text\"\n                    @change=", "\n                    value=\"", "\"\n                    required=\"required\"\n                    name=\"server\"\n                    class=\"form-control\"\n                    placeholder=\"", "\"/>\n            </div>\n            <input type=\"submit\" class=\"btn btn-primary\" name=\"list\" value=\"", "\"/>\n        </form>\n    "]);
+
+  muc_list_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function muc_list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+
+
+
+const muc_list_form = o => {
+  const i18n_query = i18n_('Show groupchats');
+
+  const i18n_server_address = i18n_('Server address');
+
+  return lit_html_html(muc_list_templateObject(), o.submitForm, i18n_server_address, o.setDomainFromEvent, o.muc_domain || '', o.server_placeholder, i18n_query);
+};
+
+const tpl_item = (o, item) => {
+  const i18n_info_title = i18n_('Show more information on this groupchat');
+
+  const i18n_open_title = i18n_('Click to open this groupchat');
+
+  return lit_html_html(muc_list_templateObject2(), o.openRoom, item.jid, item.name, i18n_open_title, item.name || item.jid, o.toggleRoomInfo, item.jid, i18n_info_title);
+};
+
+/* harmony default export */ var muc_list = (o => {
+  const i18n_list_chatrooms = i18n_('Query for Groupchats');
+
+  return lit_html_html(muc_list_templateObject3(), i18n_list_chatrooms, modal_header_close_button, o.show_form ? muc_list_form(o) : '', o.loading_items ? lit_html_html(muc_list_templateObject4(), spinner()) : '', o.feedback_text ? lit_html_html(muc_list_templateObject5(), o.feedback_text) : '', repeat(o.items, item => item.jid, item => tpl_item(o, item)), modal_close_button);
+});
+// EXTERNAL MODULE: ./src/templates/room_description.html
+var room_description = __webpack_require__(179);
+var room_description_default = /*#__PURE__*/__webpack_require__.n(room_description);
+
+// CONCATENATED MODULE: ./src/modals/muc-list.js
+
 
-    converse_muc_views_u.showElement(container);
-  },
 
-  showDisconnectMessage() {
-    const message = this.model.get('disconnection_message');
 
-    if (!message) {
-      return;
-    }
 
-    converse_muc_views_u.hideElement(this.el.querySelector('.chat-area'));
-    converse_muc_views_u.hideElement(this.el.querySelector('.occupants'));
-    converse_muc_views_sizzle('.spinner', this.el).forEach(converse_muc_views_u.removeElement);
-    const messages = [message];
-    const actor = this.model.get('disconnection_actor');
 
-    if (actor) {
-      messages.push(i18n_('This action was done by %1$s.', actor));
-    }
 
-    const reason = this.model.get('disconnection_reason');
 
-    if (reason) {
-      messages.push(i18n_('The reason given is: "%1$s".', reason));
-    }
 
-    this.model.save({
-      'disconnection_message': undefined,
-      'disconnection_reason': undefined,
-      'disconnection_actor': undefined
-    });
-    const container = this.el.querySelector('.disconnect-container');
-    render_render(muc_disconnect(messages), container);
-    converse_muc_views_u.showElement(container);
-  },
 
-  onOccupantAdded(occupant) {
-    if (occupant.get('jid') === converse_core_converse.bare_jid) {
-      this.renderHeading();
-      this.renderBottomPanel();
-    }
-  },
 
-  /**
-   * Working backwards, get today's most recent join/leave notification
-   * from the same user (if any exists) after the most recent chat message.
-   * @private
-   * @method _converse.ChatRoomView#getPreviousJoinOrLeaveNotification
-   * @param {HTMLElement} el
-   * @param {string} nick
-   */
-  getPreviousJoinOrLeaveNotification(el, nick) {
-    const today = new Date().toISOString().split('T')[0];
+const muc_list_u = converse.env.utils;
+/* Insert groupchat info (based on returned #disco IQ stanza)
+ * @function insertRoomInfo
+ * @param { HTMLElement } el - The HTML DOM element that contains the info.
+ * @param { XMLElement } stanza - The IQ stanza containing the groupchat info.
+ */
 
-    while (el !== null) {
-      var _el;
+function insertRoomInfo(el, stanza) {
+  var _head, _head2;
 
-      if (!el.classList.contains('chat-info')) {
-        return;
-      } // Check whether el is still from today.
-      // We don't use `Dayjs.same` here, since it's about 4 times slower.
+  // All MUC features found here: https://xmpp.org/registrar/disco-features.html
+  el.querySelector('span.spinner').remove();
+  el.querySelector('a.room-info').classList.add('selected');
+  el.insertAdjacentHTML('beforeEnd', room_description_default()({
+    'jid': stanza.getAttribute('from'),
+    'desc': (_head = lodash_es_head(sizzle_default()('field[var="muc#roominfo_description"] value', stanza))) === null || _head === void 0 ? void 0 : _head.textContent,
+    'occ': (_head2 = lodash_es_head(sizzle_default()('field[var="muc#roominfo_occupants"] value', stanza))) === null || _head2 === void 0 ? void 0 : _head2.textContent,
+    'hidden': sizzle_default()('feature[var="muc_hidden"]', stanza).length,
+    'membersonly': sizzle_default()('feature[var="muc_membersonly"]', stanza).length,
+    'moderated': sizzle_default()('feature[var="muc_moderated"]', stanza).length,
+    'nonanonymous': sizzle_default()('feature[var="muc_nonanonymous"]', stanza).length,
+    'open': sizzle_default()('feature[var="muc_open"]', stanza).length,
+    'passwordprotected': sizzle_default()('feature[var="muc_passwordprotected"]', stanza).length,
+    'persistent': sizzle_default()('feature[var="muc_persistent"]', stanza).length,
+    'publicroom': sizzle_default()('feature[var="muc_publicroom"]', stanza).length,
+    'semianonymous': sizzle_default()('feature[var="muc_semianonymous"]', stanza).length,
+    'temporary': sizzle_default()('feature[var="muc_temporary"]', stanza).length,
+    'unmoderated': sizzle_default()('feature[var="muc_unmoderated"]', stanza).length,
+    'label_desc': i18n_('Description:'),
+    'label_jid': i18n_('Groupchat Address (JID):'),
+    'label_occ': i18n_('Participants:'),
+    'label_features': i18n_('Features:'),
+    'label_requires_auth': i18n_('Requires authentication'),
+    'label_hidden': i18n_('Hidden'),
+    'label_requires_invite': i18n_('Requires an invitation'),
+    'label_moderated': i18n_('Moderated'),
+    'label_non_anon': i18n_('Non-anonymous'),
+    'label_open_room': i18n_('Open'),
+    'label_permanent_room': i18n_('Permanent'),
+    'label_public': i18n_('Public'),
+    'label_semi_anon': i18n_('Semi-anonymous'),
+    'label_temp_room': i18n_('Temporary'),
+    'label_unmoderated': i18n_('Unmoderated')
+  }));
+}
+/**
+ * Show/hide extra information about a groupchat in a listing.
+ * @function toggleRoomInfo
+ * @param { Event }
+ */
 
 
-      const date = el.getAttribute('data-isodate');
+function toggleRoomInfo(ev) {
+  const parent_el = muc_list_u.ancestor(ev.target, '.room-item');
+  const div_el = parent_el.querySelector('div.room-info');
 
-      if (date && date.split('T')[0] !== today) {
-        return;
-      }
+  if (div_el) {
+    muc_list_u.slideIn(div_el).then(muc_list_u.removeElement);
+    parent_el.querySelector('a.room-info').classList.remove('selected');
+  } else {
+    parent_el.insertAdjacentElement('beforeend', muc_list_u.getElementFromTemplateResult(spinner()));
+    core_api.disco.info(ev.target.getAttribute('data-room-jid'), null).then(stanza => insertRoomInfo(parent_el, stanza)).catch(e => headless_log.error(e));
+  }
+}
 
-      const data = ((_el = el) === null || _el === void 0 ? void 0 : _el.dataset) || {};
+/* harmony default export */ var modals_muc_list = (modals_base.extend({
+  id: "muc-list-modal",
+  persistent: true,
 
-      if (data.join === nick || data.leave === nick || data.leavejoin === nick || data.joinleave === nick) {
-        return el;
-      }
+  initialize() {
+    this.items = [];
+    this.loading_items = false;
+    modals_base.prototype.initialize.apply(this, arguments);
 
-      el = el.previousElementSibling;
+    if (core_api.settings.get('muc_domain') && !this.model.get('muc_domain')) {
+      this.model.save('muc_domain', core_api.settings.get('muc_domain'));
     }
+
+    this.listenTo(this.model, 'change:muc_domain', this.onDomainChange);
+    this.el.addEventListener('shown.bs.modal', () => core_api.settings.get('locked_muc_domain') ? this.updateRoomsList() : this.el.querySelector('input[name="server"]').focus());
+  },
+
+  toHTML() {
+    const muc_domain = this.model.get('muc_domain') || core_api.settings.get('muc_domain');
+    return muc_list(Object.assign(this.model.toJSON(), {
+      'show_form': !core_api.settings.get('locked_muc_domain'),
+      'server_placeholder': muc_domain ? muc_domain : i18n_('conference.example.org'),
+      'items': this.items,
+      'loading_items': this.loading_items,
+      'openRoom': ev => this.openRoom(ev),
+      'setDomainFromEvent': ev => this.setDomainFromEvent(ev),
+      'submitForm': ev => this.showRooms(ev),
+      'toggleRoomInfo': ev => this.toggleRoomInfo(ev)
+    }));
+  },
+
+  openRoom(ev) {
+    ev.preventDefault();
+    const jid = ev.target.getAttribute('data-room-jid');
+    const name = ev.target.getAttribute('data-room-name');
+    this.modal.hide();
+    core_api.rooms.open(jid, {
+      'name': name
+    }, true);
+  },
+
+  toggleRoomInfo(ev) {
+    ev.preventDefault();
+    toggleRoomInfo(ev);
+  },
+
+  onDomainChange() {
+    core_api.settings.get('auto_list_rooms') && this.updateRoomsList();
   },
 
   /**
-   * Rerender the groupchat after some kind of transition. For
-   * example after the spinner has been removed or after a
-   * form has been submitted and removed.
+   * Handle the IQ stanza returned from the server, containing
+   * all its public groupchats.
    * @private
-   * @method _converse.ChatRoomView#renderAfterTransition
+   * @method _converse.ChatRoomView#onRoomsFound
+   * @param { HTMLElement } iq
    */
-  renderAfterTransition() {
-    const conn_status = this.model.session.get('connection_status');
+  onRoomsFound(iq) {
+    this.loading_items = false;
+    const rooms = iq ? sizzle_default()('query item', iq) : [];
 
-    if (conn_status == converse.ROOMSTATUS.NICKNAME_REQUIRED) {
-      this.renderNicknameForm();
-    } else if (conn_status == converse.ROOMSTATUS.PASSWORD_REQUIRED) {
-      this.renderPasswordForm();
-    } else if (conn_status == converse.ROOMSTATUS.ENTERED) {
-      this.hideChatRoomContents();
-      converse_muc_views_u.showElement(this.el.querySelector('.chat-area'));
-      converse_muc_views_u.showElement(this.el.querySelector('.occupants'));
-      this.scrollDown();
+    if (rooms.length) {
+      this.model.set({
+        'feedback_text': i18n_('Groupchats found')
+      }, {
+        'silent': true
+      });
+      this.items = rooms.map(utils_stanza.getAttributes);
+    } else {
+      this.items = [];
+      this.model.set({
+        'feedback_text': i18n_('No groupchats found')
+      }, {
+        'silent': true
+      });
     }
-  },
 
-  showSpinner() {
-    converse_muc_views_sizzle('.spinner', this.el).forEach(converse_muc_views_u.removeElement);
-    this.hideChatRoomContents();
-    const container_el = this.el.querySelector('.chatroom-body');
-    container_el.insertAdjacentElement('afterbegin', converse_muc_views_u.getElementFromTemplateResult(spinner()));
+    this.render();
+    return true;
   },
 
   /**
-   * Check if the spinner is being shown and if so, hide it.
-   * Also make sure then that the chat area and occupants
-   * list are both visible.
+   * Send an IQ stanza to the server asking for all groupchats
    * @private
-   * @method _converse.ChatRoomView#hideSpinner
+   * @method _converse.ChatRoomView#updateRoomsList
    */
-  hideSpinner() {
-    const spinner = this.el.querySelector('.spinner');
+  updateRoomsList() {
+    const iq = Object(src_strophe["a" /* $iq */])({
+      'to': this.model.get('muc_domain'),
+      'from': core_converse.connection.jid,
+      'type': "get"
+    }).c("query", {
+      xmlns: src_strophe["b" /* Strophe */].NS.DISCO_ITEMS
+    });
+    core_api.sendIQ(iq).then(iq => this.onRoomsFound(iq)).catch(() => this.onRoomsFound());
+  },
 
-    if (spinner !== null) {
-      converse_muc_views_u.removeElement(spinner);
-      this.renderAfterTransition();
-    }
+  showRooms(ev) {
+    ev.preventDefault();
+    this.loading_items = true;
+    this.render();
+    const data = new FormData(ev.target);
+    this.model.setDomain(data.get('server'));
+    this.updateRoomsList();
+  },
 
-    return this;
+  setDomainFromEvent(ev) {
+    this.model.setDomain(ev.target.value);
+  },
+
+  setNick(ev) {
+    this.model.save({
+      nick: ev.target.value
+    });
   }
 
-});
+}));
+// CONCATENATED MODULE: ./src/plugins/muc-views/rooms-panel.js
+
+
+
+
+
+
+const rooms_panel_u = converse.env.utils;
 /**
  * View which renders MUC section of the control box.
  * @class
@@ -100034,7 +104940,7 @@ const ChatRoomView = ChatBoxView.extend({
  * @memberOf _converse
  */
 
-const RoomsPanel = view_View.extend({
+const RoomsPanel = View.extend({
   tagName: 'div',
   className: 'controlbox-section',
   id: 'chatrooms',
@@ -100052,26 +104958,141 @@ const RoomsPanel = view_View.extend({
   },
 
   showAddRoomModal(ev) {
-    if (this.add_room_modal === undefined) {
-      this.add_room_modal = new add_muc({
-        'model': this.model
-      });
+    core_api.modal.show(modals_add_muc, {
+      'model': this.model
+    }, ev);
+  },
+
+  showMUCListModal(ev) {
+    core_api.modal.show(modals_muc_list, {
+      'model': this.model
+    }, ev);
+  }
+
+});
+/**
+ * Mixin which adds the ability to a ControlBox to render a list of open groupchats
+ * @mixin
+ */
+
+const RoomsPanelViewMixin = {
+  renderRoomsPanel() {
+    if (this.roomspanel && rooms_panel_u.isInDOM(this.roomspanel.el)) {
+      return this.roomspanel;
     }
 
-    this.add_room_modal.show(ev);
+    const id = "converse.roomspanel".concat(core_converse.bare_jid);
+    this.roomspanel = new core_converse.RoomsPanel({
+      'model': new (core_converse.RoomsPanelModel.extend({
+        id,
+        'browserStorage': core_converse.createStore(id)
+      }))()
+    });
+    this.roomspanel.model.fetch();
+    this.el.querySelector('.controlbox-pane').insertAdjacentElement('beforeEnd', this.roomspanel.render().el);
+    /**
+     * Triggered once the section of the { @link _converse.ControlBoxView }
+     * which shows gropuchats has been rendered.
+     * @event _converse#roomsPanelRendered
+     * @example _converse.api.listen.on('roomsPanelRendered', () => { ... });
+     */
+
+    core_api.trigger('roomsPanelRendered');
+    return this.roomspanel;
   },
 
-  showMUCListModal(ev) {
-    if (this.muc_list_modal === undefined) {
-      this.muc_list_modal = new muc_list({
-        'model': this.model
+  getRoomsPanel() {
+    if (this.roomspanel && rooms_panel_u.isInDOM(this.roomspanel.el)) {
+      return this.roomspanel;
+    } else {
+      return this.renderRoomsPanel();
+    }
+  }
+
+};
+// CONCATENATED MODULE: ./src/plugins/muc-views/index.js
+/**
+ * @module converse-muc-views
+ * @copyright 2020, the Converse.js contributors
+ * @description XEP-0045 Multi-User Chat Views
+ * @license Mozilla Public License (MPLv2)
+ */
+
+
+
+
+
+
+
+
+
+
+
+const {
+  Strophe: muc_views_Strophe
+} = converse.env;
+
+function setMUCDomain(domain, controlboxview) {
+  controlboxview.getRoomsPanel().model.save('muc_domain', muc_views_Strophe.getDomainFromJid(domain));
+}
+
+function setMUCDomainFromDisco(controlboxview) {
+  /* Check whether service discovery for the user's domain
+   * returned MUC information and use that to automatically
+   * set the MUC domain in the "Add groupchat" modal.
+   */
+  function featureAdded(feature) {
+    if (!feature) {
+      return;
+    }
+
+    if (feature.get('var') === muc_views_Strophe.NS.MUC) {
+      feature.entity.getIdentity('conference', 'text').then(identity => {
+        if (identity) {
+          setMUCDomain(feature.get('from'), controlboxview);
+        }
       });
     }
+  }
+
+  core_api.waitUntil('discoInitialized').then(() => {
+    core_api.listen.on('serviceDiscovered', featureAdded); // Features could have been added before the controlbox was
+    // initialized. We're only interested in MUC
+
+    core_converse.disco_entities.each(entity => featureAdded(entity.features.findWhere({
+      'var': muc_views_Strophe.NS.MUC
+    })));
+  }).catch(e => headless_log.error(e));
+}
+
+function fetchAndSetMUCDomain(controlboxview) {
+  if (controlboxview.model.get('connected')) {
+    if (!controlboxview.getRoomsPanel().model.get('muc_domain')) {
+      if (core_api.settings.get('muc_domain') === undefined) {
+        setMUCDomainFromDisco(controlboxview);
+      } else {
+        setMUCDomain(core_api.settings.get('muc_domain'), controlboxview);
+      }
+    }
+  }
+}
 
-    this.muc_list_modal.show(ev);
+function openChatRoomFromURIClicked(ev) {
+  ev.preventDefault();
+  core_api.rooms.open(ev.target.href);
+}
+
+async function addView(model) {
+  const views = core_converse.chatboxviews;
+
+  if (!views.get(model.get('id')) && model.get('type') === core_converse.CHATROOMS_TYPE && model.isValid()) {
+    await model.initialized;
+    return views.add(model.get('id'), new core_converse.ChatRoomView({
+      model
+    }));
   }
+}
 
-});
 converse.plugins.add('converse-muc-views', {
   /* Dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -100085,13 +105106,13 @@ converse.plugins.add('converse-muc-views', {
    * If the setting "strict_plugin_dependencies" is set to true,
    * an error will be raised if the plugin is not found.
    */
-  dependencies: ["converse-autocomplete", "converse-modal", "converse-controlbox", "converse-chatview"],
+  dependencies: ['converse-autocomplete', 'converse-modal', 'converse-controlbox', 'converse-chatview'],
   overrides: {
     ControlBoxView: {
       renderControlBoxPane() {
         this.__super__.renderControlBoxPane.apply(this, arguments);
 
-        if (converse_core_api.settings.get('allow_muc')) {
+        if (core_api.settings.get('allow_muc')) {
           this.renderRoomsPanel();
         }
       }
@@ -100103,12 +105124,12 @@ converse.plugins.add('converse-muc-views', {
     const {
       _converse
     } = this;
-    converse_core_api.promises.add(['roomsPanelRendered']); // Configuration values for this plugin
+    core_api.promises.add(['roomsPanelRendered']); // Configuration values for this plugin
     // ====================================
     // Refer to docs/source/configuration.rst for explanations of these
     // configuration settings.
 
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'auto_list_rooms': false,
       'cache_muc_messages': true,
       'locked_muc_nickname': false,
@@ -100126,239 +105147,20 @@ converse.plugins.add('converse-muc-views', {
         'toggle_occupants': true
       }
     });
-    _converse.ChatRoomView = ChatRoomView;
+    _converse.MUCConfigForm = config_form;
+    _converse.MUCPasswordForm = password_form;
+    _converse.ChatRoomView = _converse.ChatBoxView.extend(muc_views_muc);
     _converse.RoomsPanel = RoomsPanel;
-    const viewWithRoomsPanel = {
-      renderRoomsPanel() {
-        if (this.roomspanel && converse_muc_views_u.isInDOM(this.roomspanel.el)) {
-          return this.roomspanel;
-        }
-
-        const id = "converse.roomspanel".concat(_converse.bare_jid);
-        this.roomspanel = new _converse.RoomsPanel({
-          'model': new (_converse.RoomsPanelModel.extend({
-            id,
-            'browserStorage': _converse.createStore(id)
-          }))()
-        });
-        this.roomspanel.model.fetch();
-        this.el.querySelector('.controlbox-pane').insertAdjacentElement('beforeEnd', this.roomspanel.render().el);
-        /**
-         * Triggered once the section of the { @link _converse.ControlBoxView }
-         * which shows gropuchats has been rendered.
-         * @event _converse#roomsPanelRendered
-         * @example _converse.api.listen.on('roomsPanelRendered', () => { ... });
-         */
-
-        converse_core_api.trigger('roomsPanelRendered');
-        return this.roomspanel;
-      },
-
-      getRoomsPanel() {
-        if (this.roomspanel && converse_muc_views_u.isInDOM(this.roomspanel.el)) {
-          return this.roomspanel;
-        } else {
-          return this.renderRoomsPanel();
-        }
-      }
-
-    };
-
-    if (_converse.ControlBoxView) {
-      Object.assign(_converse.ControlBoxView.prototype, viewWithRoomsPanel);
-    }
-
-    _converse.MUCConfigForm = view_View.extend({
-      className: 'chatroom-form-container muc-config-form',
-
-      initialize(attrs) {
-        this.chatroomview = attrs.chatroomview;
-        this.listenTo(this.chatroomview.model.features, 'change:passwordprotected', this.render);
-        this.listenTo(this.chatroomview.model.features, 'change:config_stanza', this.render);
-        this.render();
-      },
-
-      toHTML() {
-        var _stanza$querySelector, _stanza$querySelector2;
-
-        const stanza = converse_muc_views_u.toStanza(this.model.get('config_stanza'));
-        const whitelist = converse_core_api.settings.get('roomconfig_whitelist');
-        let fields = converse_muc_views_sizzle('field', stanza);
-
-        if (whitelist.length) {
-          fields = fields.filter(f => whitelist.includes(f.getAttribute('var')));
-        }
-
-        const password_protected = this.model.features.get('passwordprotected');
-        const options = {
-          'new_password': !password_protected,
-          'fixed_username': this.model.get('jid')
-        };
-        return muc_config_form({
-          'closeConfigForm': ev => this.closeConfigForm(ev),
-          'fields': fields.map(f => converse_muc_views_u.xForm2webForm(f, stanza, options)),
-          'instructions': (_stanza$querySelector = stanza.querySelector('instructions')) === null || _stanza$querySelector === void 0 ? void 0 : _stanza$querySelector.textContent,
-          'submitConfigForm': ev => this.submitConfigForm(ev),
-          'title': (_stanza$querySelector2 = stanza.querySelector('title')) === null || _stanza$querySelector2 === void 0 ? void 0 : _stanza$querySelector2.textContent
-        });
-      },
-
-      async submitConfigForm(ev) {
-        ev.preventDefault();
-        const inputs = converse_muc_views_sizzle(':input:not([type=button]):not([type=submit])', ev.target);
-        const config_array = inputs.map(converse_muc_views_u.webForm2xForm).filter(f => f);
-
-        try {
-          await this.model.sendConfiguration(config_array);
-        } catch (e) {
-          headless_log.error(e);
-
-          const message = i18n_("Sorry, an error occurred while trying to submit the config form.") + " " + i18n_("Check your browser's developer console for details.");
-
-          converse_core_api.alert('error', i18n_('Error'), message);
-        }
-
-        await this.model.refreshDiscoInfo();
-        this.chatroomview.closeForm();
-      },
-
-      closeConfigForm(ev) {
-        ev.preventDefault();
-        this.chatroomview.closeForm();
-      }
-
-    });
-    _converse.MUCPasswordForm = view_View.extend({
-      className: 'chatroom-form-container muc-password-form',
-
-      initialize(attrs) {
-        this.chatroomview = attrs.chatroomview;
-        this.listenTo(this.model, 'change:validation_message', this.render);
-        this.render();
-      },
-
-      toHTML() {
-        return muc_password_form({
-          'jid': this.model.get('jid'),
-          'submitPassword': ev => this.submitPassword(ev),
-          'validation_message': this.model.get('validation_message')
-        });
-      },
-
-      submitPassword(ev) {
-        ev.preventDefault();
-        const password = this.el.querySelector('input[type=password]').value;
-        this.chatroomview.model.join(this.chatroomview.model.get('nick'), password);
-        this.model.set('validation_message', null);
-      }
-
-    });
-    _converse.MUCSidebar = view_View.extend({
-      tagName: 'div',
-      className: 'occupants col-md-3 col-4',
-
-      async initialize() {
-        this.chatroomview = this.model.chatroomview;
-        this.listenTo(this.model, 'add', this.render);
-        this.listenTo(this.model, 'remove', this.render);
-        this.listenTo(this.model, 'change', this.render);
-        this.listenTo(this.chatroomview.model.features, 'change', this.render);
-        this.listenTo(this.chatroomview.model, 'change:hidden_occupants', this.setVisibility);
-        this.render();
-        await this.model.fetched;
-      },
-
-      toHTML() {
-        return muc_sidebar(Object.assign(this.chatroomview.model.toJSON(), {
-          _converse,
-          'features': this.chatroomview.model.features,
-          'occupants': this.model.models
-        }));
-      },
-
-      afterRender() {
-        this.setVisibility();
-      },
-
-      setVisibility() {
-        if (this.chatroomview.model.get('hidden_occupants') || this.chatroomview.model.session.get('connection_status') !== converse.ROOMSTATUS.ENTERED) {
-          converse_muc_views_u.hideElement(this.el);
-        } else {
-          converse_muc_views_u.showElement(this.el);
-        }
-      }
-
-    });
-
-    function setMUCDomain(domain, controlboxview) {
-      controlboxview.getRoomsPanel().model.save('muc_domain', converse_muc_views_Strophe.getDomainFromJid(domain));
-    }
-
-    function setMUCDomainFromDisco(controlboxview) {
-      /* Check whether service discovery for the user's domain
-       * returned MUC information and use that to automatically
-       * set the MUC domain in the "Add groupchat" modal.
-       */
-      function featureAdded(feature) {
-        if (!feature) {
-          return;
-        }
-
-        if (feature.get('var') === converse_muc_views_Strophe.NS.MUC) {
-          feature.entity.getIdentity('conference', 'text').then(identity => {
-            if (identity) {
-              setMUCDomain(feature.get('from'), controlboxview);
-            }
-          });
-        }
-      }
-
-      converse_core_api.waitUntil('discoInitialized').then(() => {
-        converse_core_api.listen.on('serviceDiscovered', featureAdded); // Features could have been added before the controlbox was
-        // initialized. We're only interested in MUC
-
-        _converse.disco_entities.each(entity => featureAdded(entity.features.findWhere({
-          'var': converse_muc_views_Strophe.NS.MUC
-        })));
-      }).catch(e => headless_log.error(e));
-    }
-
-    function fetchAndSetMUCDomain(controlboxview) {
-      if (controlboxview.model.get('connected')) {
-        if (!controlboxview.getRoomsPanel().model.get('muc_domain')) {
-          if (converse_core_api.settings.get('muc_domain') === undefined) {
-            setMUCDomainFromDisco(controlboxview);
-          } else {
-            setMUCDomain(converse_core_api.settings.get('muc_domain'), controlboxview);
-          }
-        }
-      }
-    }
+    _converse.ControlBoxView && Object.assign(_converse.ControlBoxView.prototype, RoomsPanelViewMixin);
+    Object.assign(_converse.api, muc_views_api);
     /************************ BEGIN Event Handlers ************************/
 
-
-    converse_core_api.listen.on('chatBoxViewsInitialized', () => {
-      function openChatRoomFromURIClicked(ev) {
-        ev.preventDefault();
-        converse_core_api.rooms.open(ev.target.href);
-      }
-
+    core_api.listen.on('chatBoxViewsInitialized', () => {
       _converse.chatboxviews.delegate('click', 'a.open-chatroom', openChatRoomFromURIClicked);
 
-      async function addView(model) {
-        const views = _converse.chatboxviews;
-
-        if (!views.get(model.get('id')) && model.get('type') === _converse.CHATROOMS_TYPE && model.isValid()) {
-          await model.initialized;
-          return views.add(model.get('id'), new _converse.ChatRoomView({
-            model
-          }));
-        }
-      }
-
       _converse.chatboxes.on('add', addView);
     });
-    converse_core_api.listen.on('clearSession', () => {
+    core_api.listen.on('clearSession', () => {
       const view = _converse.chatboxviews.get('controlbox');
 
       if (view && view.roomspanel) {
@@ -100367,8 +105169,8 @@ converse.plugins.add('converse-muc-views', {
         delete view.roomspanel;
       }
     });
-    converse_core_api.listen.on('controlBoxInitialized', view => {
-      if (!converse_core_api.settings.get('allow_muc')) {
+    core_api.listen.on('controlBoxInitialized', view => {
+      if (!core_api.settings.get('allow_muc')) {
         return;
       }
 
@@ -100376,166 +105178,39 @@ converse.plugins.add('converse-muc-views', {
       view.model.on('change:connected', () => fetchAndSetMUCDomain(view));
     });
     /************************ END Event Handlers ************************/
-
-    /************************ BEGIN API ************************/
-
-    Object.assign(_converse.api, {
-      /**
-       * The "roomviews" namespace groups methods relevant to chatroom
-       * (aka groupchats) views.
-       *
-       * @namespace _converse.api.roomviews
-       * @memberOf _converse.api
-       */
-      roomviews: {
-        /**
-         * Retrieves a groupchat (aka chatroom) view. The chat should already be open.
-         *
-         * @method _converse.api.roomviews.get
-         * @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or
-         *  ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']
-         * @returns {View} View representing the groupchat
-         *
-         * @example
-         * // To return a single view, provide the JID of the groupchat
-         * const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit');
-         *
-         * @example
-         * // To return an array of views, provide an array of JIDs:
-         * const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']);
-         *
-         * @example
-         * // To return views of all open groupchats, call the method without any parameters::
-         * const views = _converse.api.roomviews.get();
-         *
-         */
-        get(jids) {
-          if (Array.isArray(jids)) {
-            const views = converse_core_api.chatviews.get(jids);
-            return views.filter(v => v.model.get('type') === _converse.CHATROOMS_TYPE);
-          } else {
-            const view = converse_core_api.chatviews.get(jids);
-
-            if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
-              return view;
-            } else {
-              return null;
-            }
-          }
-        },
-
-        /**
-         * Lets you close open chatrooms.
-         *
-         * You can call this method without any arguments to close
-         * all open chatrooms, or you can specify a single JID or
-         * an array of JIDs.
-         *
-         * @method _converse.api.roomviews.close
-         * @param {(String[]|String)} jids The JID or array of JIDs of the chatroom(s)
-         * @returns { Promise } - Promise which resolves once the views have been closed.
-         */
-        close(jids) {
-          let views;
-
-          if (jids === undefined) {
-            views = _converse.chatboxviews;
-          } else if (typeof jids === 'string') {
-            views = [_converse.chatboxviews.get(jids)].filter(v => v);
-          } else if (Array.isArray(jids)) {
-            views = jids.map(jid => _converse.chatboxviews.get(jid));
-          }
-
-          return Promise.all(views.map(v => v.is_chatroom && v.model && v.close()));
-        }
-
-      }
-    });
   }
 
 });
-// CONCATENATED MODULE: ./src/templates/headline_list.js
-function headline_list_templateObject2() {
-  const data = headline_list_taggedTemplateLiteral(["\n    <div class=\"list-container list-container--headline ", "\">\n        <div class=\"items-list rooms-list headline-list\">\n            ", "\n        </div>\n    </div>\n"]);
-
-  headline_list_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function headline_list_templateObject() {
-  const data = headline_list_taggedTemplateLiteral(["\n    <div class=\"list-item controlbox-padded d-flex flex-row\"\n        data-headline-jid=\"", "\">\n    <a class=\"list-item-link open-headline available-room w-100\"\n        data-headline-jid=\"", "\"\n        title=\"", "\" href=\"#\">", "</a>\n    </div>\n"]);
-
-  headline_list_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function headline_list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-const tpl_headline_box = o => lit_html_html(headline_list_templateObject(), o.headlinebox.get('jid'), o.headlinebox.get('jid'), o.open_title, o.headlinebox.get('jid'));
-
-/* harmony default export */ var headline_list = (o => lit_html_html(headline_list_templateObject2(), o.headlineboxes.length ? '' : 'hidden', o.headlineboxes.map(headlinebox => tpl_headline_box(Object.assign({
-  headlinebox
-}, o)))));
-// CONCATENATED MODULE: ./src/templates/headline_panel.js
-function headline_panel_templateObject() {
-  const data = headline_panel_taggedTemplateLiteral(["\n    <div class=\"d-flex controlbox-padded ", "\">\n        <span class=\"w-100 controlbox-heading controlbox-heading--headline\">", "</span>\n    </div>\n    ", "\n"]);
-
-  headline_panel_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function headline_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-/* harmony default export */ var headline_panel = (o => lit_html_html(headline_panel_templateObject(), o.headlineboxes.length ? '' : 'hidden', o.heading_headline, headline_list(o)));
-// CONCATENATED MODULE: ./src/converse-headlines-view.js
-/**
- * @module converse-headlines-view
- * @copyright 2020, the Converse.js contributors
- * @license Mozilla Public License (MPLv2)
- */
-
-
-
+// CONCATENATED MODULE: ./src/plugins/headlines-view/view.js
 
 
 
 
-
-const converse_headlines_view_u = converse.env.utils;
-const HeadlinesBoxView = ChatBoxView.extend({
-  className: 'chatbox headlines',
+const HeadlinesBoxViewMixin = {
+  className: 'chatbox headlines hidden',
   events: {
     'click .close-chatbox-button': 'close',
     'click .toggle-chatbox-button': 'minimize',
     'keypress textarea.chat-textarea': 'onKeyDown'
   },
 
-  initialize() {
+  async initialize() {
     this.initDebounced();
     this.model.disable_mam = true; // Don't do MAM queries for this box
 
-    this.listenTo(this.model.messages, 'add', this.renderChatHistory);
-    this.listenTo(this.model, 'show', this.show);
-    this.listenTo(this.model, 'destroy', this.hide);
-    this.listenTo(this.model, 'change:minimized', this.onMinimizedChanged);
-    this.render();
-    this.renderHeading();
-    this.updateAfterMessagesFetched();
-    this.insertIntoDOM().hide();
+    this.listenTo(this.model, 'change:hidden', m => m.get('hidden') ? this.hide() : this.show());
+    this.listenTo(this.model, 'destroy', this.remove);
+    this.listenTo(this.model, 'show', this.show);
+    this.render(); // Need to be registered after render has been called.
+
+    this.listenTo(this.model.messages, 'add', this.onMessageAdded);
+    this.listenTo(this.model.messages, 'remove', this.renderChatHistory);
+    this.listenTo(this.model.messages, 'rendered', this.maybeScrollDown);
+    this.listenTo(this.model.messages, 'reset', this.renderChatHistory);
+    await this.model.messages.fetched;
+    this.insertIntoDOM();
     this.model.maybeShow();
+    this.scrollDown();
     /**
      * Triggered once the {@link _converse.HeadlinesBoxView} has been initialized
      * @event _converse#headlinesBoxViewInitialized
@@ -100543,7 +105218,7 @@ const HeadlinesBoxView = ChatBoxView.extend({
      * @example _converse.api.listen.on('headlinesBoxViewInitialized', view => { ... });
      */
 
-    converse_core_api.trigger('headlinesBoxViewInitialized', this);
+    core_api.trigger('headlinesBoxViewInitialized', this);
   },
 
   render() {
@@ -100558,6 +105233,8 @@ const HeadlinesBoxView = ChatBoxView.extend({
     render_render(result, this.el);
     this.content = this.el.querySelector('.chat-content');
     this.msgs_container = this.el.querySelector('.chat-content__messages');
+    this.renderChatContent();
+    this.renderHeading();
     return this;
   },
 
@@ -100577,7 +105254,7 @@ const HeadlinesBoxView = ChatBoxView.extend({
   getHeadingButtons() {
     const buttons = [];
 
-    if (!converse_core_api.settings.get("singleton")) {
+    if (!core_api.settings.get('singleton')) {
       buttons.push({
         'a_class': 'close-chatbox-button',
         'handler': ev => this.close(ev),
@@ -100585,17 +105262,70 @@ const HeadlinesBoxView = ChatBoxView.extend({
         'i18n_title': i18n_('Close these announcements'),
         'icon_class': 'fa-times',
         'name': 'close',
-        'standalone': converse_core_api.settings.get("view_mode") === 'overlayed'
+        'standalone': core_api.settings.get('view_mode') === 'overlayed'
       });
     }
 
-    return converse_core_converse.api.hook('getHeadingButtons', this, buttons);
+    return core_converse.api.hook('getHeadingButtons', this, buttons);
   },
 
-  // Override to avoid the methods in converse-chatview.js
+  // Override to avoid the methods in converse-chatview
   'renderMessageForm': function renderMessageForm() {},
   'afterShown': function afterShown() {}
-});
+};
+/* harmony default export */ var headlines_view_view = (HeadlinesBoxViewMixin);
+// CONCATENATED MODULE: ./src/templates/headline_list.js
+function headline_list_templateObject2() {
+  const data = headline_list_taggedTemplateLiteral(["\n    <div class=\"list-container list-container--headline ", "\">\n        <div class=\"items-list rooms-list headline-list\">\n            ", "\n        </div>\n    </div>\n"]);
+
+  headline_list_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function headline_list_templateObject() {
+  const data = headline_list_taggedTemplateLiteral(["\n    <div class=\"list-item controlbox-padded d-flex flex-row\"\n        data-headline-jid=\"", "\">\n    <a class=\"list-item-link open-headline available-room w-100\"\n        data-headline-jid=\"", "\"\n        title=\"", "\" href=\"#\">", "</a>\n    </div>\n"]);
+
+  headline_list_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function headline_list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+const tpl_headline_box = o => lit_html_html(headline_list_templateObject(), o.headlinebox.get('jid'), o.headlinebox.get('jid'), o.open_title, o.headlinebox.get('jid'));
+
+/* harmony default export */ var headline_list = (o => lit_html_html(headline_list_templateObject2(), o.headlineboxes.length ? '' : 'hidden', o.headlineboxes.map(headlinebox => tpl_headline_box(Object.assign({
+  headlinebox
+}, o)))));
+// CONCATENATED MODULE: ./src/templates/headline_panel.js
+function headline_panel_templateObject() {
+  const data = headline_panel_taggedTemplateLiteral(["\n    <div class=\"d-flex controlbox-padded ", "\">\n        <span class=\"w-100 controlbox-heading controlbox-heading--headline\">", "</span>\n    </div>\n    ", "\n"]);
+
+  headline_panel_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function headline_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+/* harmony default export */ var headline_panel = (o => lit_html_html(headline_panel_templateObject(), o.headlineboxes.length ? '' : 'hidden', o.heading_headline, headline_list(o)));
+// CONCATENATED MODULE: ./src/plugins/headlines-view/panel.js
+
+
+
+
+const panel_u = converse.env.utils;
 /**
  * View which renders headlines section of the control box.
  * @class
@@ -100603,7 +105333,7 @@ const HeadlinesBoxView = ChatBoxView.extend({
  * @memberOf _converse
  */
 
-const HeadlinesPanel = view_View.extend({
+const HeadlinesPanelView = View.extend({
   tagName: 'div',
   className: 'controlbox-section',
   id: 'headline',
@@ -100622,31 +105352,81 @@ const HeadlinesPanel = view_View.extend({
   toHTML() {
     return headline_panel({
       'heading_headline': i18n_('Announcements'),
-      'headlineboxes': this.model.filter(m => m.get('type') === converse_core_converse.HEADLINES_TYPE),
+      'headlineboxes': this.model.filter(m => m.get('type') === core_converse.HEADLINES_TYPE),
       'open_title': i18n_('Click to open this server message')
     });
   },
 
   renderIfHeadline(model) {
-    return model && model.get('type') === converse_core_converse.HEADLINES_TYPE && this.render();
+    return model && model.get('type') === core_converse.HEADLINES_TYPE && this.render();
   },
 
   openHeadline(ev) {
     ev.preventDefault();
     const jid = ev.target.getAttribute('data-headline-jid');
 
-    const chat = converse_core_converse.chatboxes.get(jid);
+    const chat = core_converse.chatboxes.get(jid);
 
     chat.maybeShow(true);
   },
 
   insertIntoDOM() {
-    const view = converse_core_converse.chatboxviews.get('controlbox');
+    const view = core_converse.chatboxviews.get('controlbox');
 
     view && view.el.querySelector('.controlbox-pane').insertAdjacentElement('beforeEnd', this.el);
   }
 
 });
+/**
+ * Mixin for the {@link _converse.ControlBoxView } which add support for
+ * rendering a list of headline chats.
+ * @mixin
+ */
+
+const HeadlinesPanelMixin = {
+  renderHeadlinesPanel() {
+    if (this.headlinepanel && panel_u.isInDOM(this.headlinepanel.el)) {
+      return this.headlinepanel;
+    }
+
+    this.headlinepanel = new core_converse.HeadlinesPanel({
+      'model': core_converse.chatboxes
+    });
+    /**
+     * Triggered once the section of the { @link _converse.ControlBoxView }
+     * which shows announcements has been rendered.
+     * @event _converse#headlinesPanelRendered
+     * @example _converse.api.listen.on('headlinesPanelRendered', () => { ... });
+     */
+
+    core_api.trigger('headlinesPanelRendered');
+    return this.headlinepanel;
+  }
+
+};
+// CONCATENATED MODULE: ./src/plugins/headlines-view/index.js
+/**
+ * @module converse-headlines-view
+ * @copyright 2020, the Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */
+
+
+
+
+
+function headlines_view_onChatBoxViewsInitialized() {
+  const views = core_converse.chatboxviews;
+
+  core_converse.chatboxes.on('add', item => {
+    if (!views.get(item.get('id')) && item.get('type') === core_converse.HEADLINES_TYPE) {
+      views.add(item.get('id'), new core_converse.HeadlinesBoxView({
+        model: item
+      }));
+    }
+  });
+}
+
 converse.plugins.add('converse-headlines-view', {
   /* Plugin dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -100656,15 +105436,10 @@ converse.plugins.add('converse-headlines-view', {
    * an error will be raised if the plugin is not found. By default it's
    * false, which means these plugins are only loaded opportunistically.
    *
-   * NB: These plugins need to have already been loaded via require.js.
+   * NB: These plugins need to have already been loaded by the bundler
    */
-  dependencies: ["converse-headlines", "converse-chatview"],
+  dependencies: ['converse-headlines', 'converse-chatview'],
   overrides: {
-    // Overrides mentioned here will be picked up by converse.js's
-    // plugin architecture they will replace existing methods on the
-    // relevant objects or classes.
-    //
-    // New functions which don't exist yet can also be added.
     ControlBoxView: {
       renderControlBoxPane() {
         this.__super__.renderControlBoxPane.apply(this, arguments);
@@ -100679,51 +105454,18 @@ converse.plugins.add('converse-headlines-view', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    const viewWithHeadlinesPanel = {
-      renderHeadlinesPanel() {
-        if (this.headlinepanel && converse_headlines_view_u.isInDOM(this.headlinepanel.el)) {
-          return this.headlinepanel;
-        }
-
-        this.headlinepanel = new converse_core_converse.HeadlinesPanel({
-          'model': converse_core_converse.chatboxes
-        });
-        /**
-         * Triggered once the section of the { @link _converse.ControlBoxView }
-         * which shows announcements has been rendered.
-         * @event _converse#headlinesPanelRendered
-         * @example _converse.api.listen.on('headlinesPanelRendered', () => { ... });
-         */
-
-        converse_core_api.trigger('headlinesPanelRendered');
-        return this.headlinepanel;
-      }
-
-    };
-
-    if (converse_core_converse.ControlBoxView) {
-      Object.assign(converse_core_converse.ControlBoxView.prototype, viewWithHeadlinesPanel);
-    }
-
-    converse_core_converse.HeadlinesBoxView = HeadlinesBoxView;
-    converse_core_converse.HeadlinesPanel = HeadlinesPanel;
-    /************************ BEGIN Event Handlers ************************/
-
-    converse_core_api.listen.on('chatBoxViewsInitialized', () => {
-      const views = converse_core_converse.chatboxviews;
-
-      converse_core_converse.chatboxes.on('add', item => {
-        if (!views.get(item.get('id')) && item.get('type') === converse_core_converse.HEADLINES_TYPE) {
-          views.add(item.get('id'), new converse_core_converse.HeadlinesBoxView({
-            model: item
-          }));
-        }
-      });
-    });
+    core_converse.ControlBoxView && Object.assign(core_converse.ControlBoxView.prototype, HeadlinesPanelMixin);
+    core_converse.HeadlinesBoxView = core_converse.ChatBoxView.extend(headlines_view_view);
+    core_converse.HeadlinesPanel = HeadlinesPanelView;
+    core_api.listen.on('chatBoxViewsInitialized', headlines_view_onChatBoxViewsInitialized);
   }
 
 });
-// CONCATENATED MODULE: ./src/converse-notification.js
+// EXTERNAL MODULE: ./node_modules/favico.js-slevomat/favico.js
+var favico = __webpack_require__(180);
+var favico_default = /*#__PURE__*/__webpack_require__.n(favico);
+
+// CONCATENATED MODULE: ./src/plugins/notifications.js
 /**
  * @module converse-notification
  * @copyright 2020, the Converse.js contributors
@@ -100732,11 +105474,29 @@ converse.plugins.add('converse-headlines-view', {
 
 
 
+
 const {
-  Strophe: converse_notification_Strophe
+  Strophe: notifications_Strophe
 } = converse.env;
-const converse_notification_u = converse.env.utils;
+const notifications_u = converse.env.utils;
 const supports_html5_notification = ("Notification" in window);
+converse.env.Favico = favico_default.a;
+let favicon;
+
+function updateUnreadFavicon() {
+  if (core_api.settings.get('show_tab_notifications')) {
+    var _favicon;
+
+    favicon = (_favicon = favicon) !== null && _favicon !== void 0 ? _favicon : new converse.env.Favico({
+      type: 'circle',
+      animation: 'pop'
+    });
+    const chats = core_converse.chatboxes.models;
+    const num_unread = chats.reduce((acc, chat) => acc + (chat.get('num_unread') || 0), 0);
+    favicon.badge(num_unread);
+  }
+}
+
 converse.plugins.add('converse-notification', {
   dependencies: ["converse-chatboxes"],
 
@@ -100744,17 +105504,18 @@ converse.plugins.add('converse-notification', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
-      notify_all_room_messages: false,
-      show_desktop_notifications: true,
-      show_chat_state_notifications: false,
-      chatstate_notification_blacklist: [],
+    core_api.settings.extend({
       // ^ a list of JIDs to ignore concerning chat state notifications
-      play_sounds: true,
-      sounds_path: converse_core_api.settings.get("assets_path") + '/sounds/',
-      notification_icon: 'logo/conversejs-filled.svg',
+      chatstate_notification_blacklist: [],
       notification_delay: 5000,
-      notify_nicknames_without_references: false
+      notification_icon: 'logo/conversejs-filled.svg',
+      notify_all_room_messages: false,
+      notify_nicknames_without_references: false,
+      play_sounds: true,
+      show_chat_state_notifications: false,
+      show_desktop_notifications: true,
+      show_tab_notifications: true,
+      sounds_path: core_api.settings.get("assets_path") + '/sounds/'
     });
     /**
      * Is this a group message for which we should notify the user?
@@ -100763,23 +105524,23 @@ converse.plugins.add('converse-notification', {
      * @param { MUCMessageAttributes } attrs
      */
 
-    converse_core_converse.shouldNotifyOfGroupMessage = function (attrs) {
+    core_converse.shouldNotifyOfGroupMessage = function (attrs) {
       if (!(attrs === null || attrs === void 0 ? void 0 : attrs.body)) {
         return false;
       }
 
       const jid = attrs.from;
       const room_jid = attrs.from_muc;
-      const notify_all = converse_core_api.settings.get('notify_all_room_messages');
+      const notify_all = core_api.settings.get('notify_all_room_messages');
 
-      const room = converse_core_converse.chatboxes.get(room_jid);
+      const room = core_converse.chatboxes.get(room_jid);
 
-      const resource = converse_notification_Strophe.getResourceFromJid(jid);
-      const sender = resource && converse_notification_Strophe.unescapeNode(resource) || '';
+      const resource = notifications_Strophe.getResourceFromJid(jid);
+      const sender = resource && notifications_Strophe.unescapeNode(resource) || '';
       let is_mentioned = false;
       const nick = room.get('nick');
 
-      if (converse_core_api.settings.get('notify_nicknames_without_references')) {
+      if (core_api.settings.get('notify_nicknames_without_references')) {
         is_mentioned = new RegExp("\\b".concat(nick, "\\b")).test(attrs.body);
       }
 
@@ -100797,10 +105558,10 @@ converse.plugins.add('converse-notification', {
      */
 
 
-    converse_core_converse.isMessageToHiddenChat = function (attrs) {
+    core_converse.isMessageToHiddenChat = function (attrs) {
       var _converse$chatboxes$g, _converse$chatboxes$g2;
 
-      return (_converse$chatboxes$g = (_converse$chatboxes$g2 = converse_core_converse.chatboxes.get(attrs.from)) === null || _converse$chatboxes$g2 === void 0 ? void 0 : _converse$chatboxes$g2.isHidden()) !== null && _converse$chatboxes$g !== void 0 ? _converse$chatboxes$g : false;
+      return (_converse$chatboxes$g = (_converse$chatboxes$g2 = core_converse.chatboxes.get(attrs.from)) === null || _converse$chatboxes$g2 === void 0 ? void 0 : _converse$chatboxes$g2.isHidden()) !== null && _converse$chatboxes$g !== void 0 ? _converse$chatboxes$g : false;
     };
     /**
      * @private
@@ -100809,7 +105570,7 @@ converse.plugins.add('converse-notification', {
      */
 
 
-    converse_core_converse.shouldNotifyOfMessage = function (data) {
+    core_converse.shouldNotifyOfMessage = function (data) {
       const {
         attrs,
         stanza
@@ -100820,15 +105581,15 @@ converse.plugins.add('converse-notification', {
       }
 
       if (attrs['type'] === 'groupchat') {
-        return converse_core_converse.shouldNotifyOfGroupMessage(attrs);
+        return core_converse.shouldNotifyOfGroupMessage(attrs);
       } else if (attrs.is_headline) {
         // We want to show notifications for headline messages.
-        return converse_core_converse.isMessageToHiddenChat(attrs);
+        return core_converse.isMessageToHiddenChat(attrs);
       }
 
-      const is_me = converse_notification_Strophe.getBareJidFromJid(attrs.from) === converse_core_converse.bare_jid;
+      const is_me = notifications_Strophe.getBareJidFromJid(attrs.from) === core_converse.bare_jid;
 
-      return !converse_notification_u.isOnlyChatStateNotification(stanza) && !converse_notification_u.isOnlyMessageDeliveryReceipt(stanza) && !is_me && (converse_core_api.settings.get('show_desktop_notifications') === 'all' || converse_core_converse.isMessageToHiddenChat(attrs));
+      return !notifications_u.isOnlyChatStateNotification(stanza) && !notifications_u.isOnlyMessageDeliveryReceipt(stanza) && !is_me && (core_api.settings.get('show_desktop_notifications') === 'all' || core_converse.isMessageToHiddenChat(attrs));
     };
     /**
      * Plays a notification sound
@@ -100837,16 +105598,16 @@ converse.plugins.add('converse-notification', {
      */
 
 
-    converse_core_converse.playSoundNotification = function () {
-      if (converse_core_api.settings.get('play_sounds') && window.Audio !== undefined) {
-        const audioOgg = new Audio(converse_core_api.settings.get('sounds_path') + "msg_received.ogg");
+    core_converse.playSoundNotification = function () {
+      if (core_api.settings.get('play_sounds') && window.Audio !== undefined) {
+        const audioOgg = new Audio(core_api.settings.get('sounds_path') + "msg_received.ogg");
         const canPlayOgg = audioOgg.canPlayType('audio/ogg');
 
         if (canPlayOgg === 'probably') {
           return audioOgg.play();
         }
 
-        const audioMp3 = new Audio(converse_core_api.settings.get('sounds_path') + "msg_received.mp3");
+        const audioMp3 = new Audio(core_api.settings.get('sounds_path') + "msg_received.mp3");
         const canPlayMp3 = audioMp3.canPlayType('audio/mp3');
 
         if (canPlayMp3 === 'probably') {
@@ -100859,8 +105620,8 @@ converse.plugins.add('converse-notification', {
       }
     };
 
-    converse_core_converse.areDesktopNotificationsEnabled = function () {
-      return supports_html5_notification && converse_core_api.settings.get('show_desktop_notifications') && Notification.permission === "granted";
+    core_converse.areDesktopNotificationsEnabled = function () {
+      return supports_html5_notification && core_api.settings.get('show_desktop_notifications') && Notification.permission === "granted";
     };
     /**
      * Shows an HTML5 Notification with the passed in message
@@ -100870,7 +105631,7 @@ converse.plugins.add('converse-notification', {
      */
 
 
-    converse_core_converse.showMessageNotification = function (data) {
+    core_converse.showMessageNotification = function (data) {
       const {
         attrs
       } = data;
@@ -100879,16 +105640,16 @@ converse.plugins.add('converse-notification', {
         return;
       }
 
-      if (!converse_core_converse.areDesktopNotificationsEnabled()) {
+      if (!core_converse.areDesktopNotificationsEnabled()) {
         return;
       }
 
       let title, roster_item;
       const full_from_jid = attrs.from,
-            from_jid = converse_notification_Strophe.getBareJidFromJid(full_from_jid);
+            from_jid = notifications_Strophe.getBareJidFromJid(full_from_jid);
 
       if (attrs.type === 'headline') {
-        if (!from_jid.includes('@') || converse_core_api.settings.get("allow_non_roster_messaging")) {
+        if (!from_jid.includes('@') || core_api.settings.get("allow_non_roster_messaging")) {
           title = i18n_("Notification from %1$s", from_jid);
         } else {
           return;
@@ -100897,19 +105658,19 @@ converse.plugins.add('converse-notification', {
         // workaround for Prosody which doesn't give type "headline"
         title = i18n_("Notification from %1$s", from_jid);
       } else if (attrs.type === 'groupchat') {
-        title = i18n_("%1$s says", converse_notification_Strophe.getResourceFromJid(full_from_jid));
+        title = i18n_("%1$s says", notifications_Strophe.getResourceFromJid(full_from_jid));
       } else {
-        if (converse_core_converse.roster === undefined) {
+        if (core_converse.roster === undefined) {
           headless_log.error("Could not send notification, because roster is undefined");
           return;
         }
 
-        roster_item = converse_core_converse.roster.get(from_jid);
+        roster_item = core_converse.roster.get(from_jid);
 
         if (roster_item !== undefined) {
           title = i18n_("%1$s says", roster_item.getDisplayName());
         } else {
-          if (converse_core_api.settings.get("allow_non_roster_messaging")) {
+          if (core_api.settings.get("allow_non_roster_messaging")) {
             title = i18n_("%1$s says", from_jid);
           } else {
             return;
@@ -100925,32 +105686,32 @@ converse.plugins.add('converse-notification', {
 
       const n = new Notification(title, {
         'body': body,
-        'lang': converse_core_converse.locale,
-        'icon': converse_core_api.settings.get('notification_icon'),
-        'requireInteraction': !converse_core_converse.notification_delay
+        'lang': core_converse.locale,
+        'icon': core_api.settings.get('notification_icon'),
+        'requireInteraction': !core_converse.notification_delay
       });
 
-      if (converse_core_api.settings.get('notification_delay')) {
-        setTimeout(n.close.bind(n), converse_core_api.settings.get('notification_delay'));
+      if (core_api.settings.get('notification_delay')) {
+        setTimeout(n.close.bind(n), core_api.settings.get('notification_delay'));
       }
 
       n.onclick = function (event) {
         event.preventDefault();
         window.focus();
 
-        const chat = converse_core_converse.chatboxes.get(from_jid);
+        const chat = core_converse.chatboxes.get(from_jid);
 
         chat.maybeShow(true);
       };
 
-      n.onclick.bind(converse_core_converse);
+      n.onclick.bind(core_converse);
     };
 
-    converse_core_converse.showChatStateNotification = function (contact) {
+    core_converse.showChatStateNotification = function (contact) {
       /* Creates an HTML5 Notification to inform of a change in a
        * contact's chat state.
        */
-      if (converse_core_converse.chatstate_notification_blacklist.includes(contact.jid)) {
+      if (core_converse.chatstate_notification_blacklist.includes(contact.jid)) {
         // Don't notify if the user is being ignored.
         return;
       }
@@ -100974,47 +105735,47 @@ converse.plugins.add('converse-notification', {
 
       const n = new Notification(contact.getDisplayName(), {
         body: message,
-        lang: converse_core_converse.locale,
-        icon: converse_core_converse.notification_icon
+        lang: core_converse.locale,
+        icon: core_converse.notification_icon
       });
       setTimeout(n.close.bind(n), 5000);
     };
 
-    converse_core_converse.showContactRequestNotification = function (contact) {
+    core_converse.showContactRequestNotification = function (contact) {
       const n = new Notification(contact.getDisplayName(), {
         body: i18n_('wants to be your contact'),
-        lang: converse_core_converse.locale,
-        icon: converse_core_converse.notification_icon
+        lang: core_converse.locale,
+        icon: core_converse.notification_icon
       });
       setTimeout(n.close.bind(n), 5000);
     };
 
-    converse_core_converse.showFeedbackNotification = function (data) {
+    core_converse.showFeedbackNotification = function (data) {
       if (data.klass === 'error' || data.klass === 'warn') {
         const n = new Notification(data.subject, {
           body: data.message,
-          lang: converse_core_converse.locale,
-          icon: converse_core_converse.notification_icon
+          lang: core_converse.locale,
+          icon: core_converse.notification_icon
         });
         setTimeout(n.close.bind(n), 5000);
       }
     };
 
-    converse_core_converse.handleChatStateNotification = function (contact) {
+    core_converse.handleChatStateNotification = function (contact) {
       /* Event handler for on('contactPresenceChanged').
        * Will show an HTML5 notification to indicate that the chat
        * status has changed.
        */
-      if (converse_core_converse.areDesktopNotificationsEnabled() && converse_core_api.settings.get('show_chat_state_notifications')) {
-        converse_core_converse.showChatStateNotification(contact);
+      if (core_converse.areDesktopNotificationsEnabled() && core_api.settings.get('show_chat_state_notifications')) {
+        core_converse.showChatStateNotification(contact);
       }
     };
 
-    converse_core_converse.handleMessageNotification = function (data) {
+    core_converse.handleMessageNotification = function (data) {
       /* Event handler for the on('message') event. Will call methods
        * to play sounds and show HTML5 notifications.
        */
-      if (!converse_core_converse.shouldNotifyOfMessage(data)) {
+      if (!core_converse.shouldNotifyOfMessage(data)) {
         return false;
       }
       /**
@@ -101026,146 +105787,443 @@ converse.plugins.add('converse-notification', {
        */
 
 
-      converse_core_api.trigger('messageNotification', data);
+      core_api.trigger('messageNotification', data);
 
-      converse_core_converse.playSoundNotification();
+      core_converse.playSoundNotification();
 
-      converse_core_converse.showMessageNotification(data);
+      core_converse.showMessageNotification(data);
     };
 
-    converse_core_converse.handleContactRequestNotification = function (contact) {
-      if (converse_core_converse.areDesktopNotificationsEnabled(true)) {
-        converse_core_converse.showContactRequestNotification(contact);
+    core_converse.handleContactRequestNotification = function (contact) {
+      if (core_converse.areDesktopNotificationsEnabled(true)) {
+        core_converse.showContactRequestNotification(contact);
       }
     };
 
-    converse_core_converse.handleFeedback = function (data) {
-      if (converse_core_converse.areDesktopNotificationsEnabled(true)) {
-        converse_core_converse.showFeedbackNotification(data);
+    core_converse.handleFeedback = function (data) {
+      if (core_converse.areDesktopNotificationsEnabled(true)) {
+        core_converse.showFeedbackNotification(data);
       }
     };
 
-    converse_core_converse.requestPermission = function () {
+    core_converse.requestPermission = function () {
       if (supports_html5_notification && !['denied', 'granted'].includes(Notification.permission)) {
         // Ask user to enable HTML5 notifications
         Notification.requestPermission();
       }
     };
+    /************************ BEGIN Event Handlers ************************/
+
 
-    converse_core_api.listen.on('pluginsInitialized', function () {
+    core_api.listen.on('clearSession', () => favicon = null); // Needed for tests
+
+    core_api.waitUntil('chatBoxesInitialized').then(() => core_converse.chatboxes.on('change:num_unread', updateUnreadFavicon));
+    core_api.listen.on('pluginsInitialized', function () {
       // We only register event handlers after all plugins are
       // registered, because other plugins might override some of our
       // handlers.
-      converse_core_api.listen.on('contactRequest', converse_core_converse.handleContactRequestNotification);
-      converse_core_api.listen.on('contactPresenceChanged', converse_core_converse.handleChatStateNotification);
-      converse_core_api.listen.on('message', converse_core_converse.handleMessageNotification);
-      converse_core_api.listen.on('feedback', converse_core_converse.handleFeedback);
-      converse_core_api.listen.on('connected', converse_core_converse.requestPermission);
+      core_api.listen.on('contactRequest', core_converse.handleContactRequestNotification);
+      core_api.listen.on('contactPresenceChanged', core_converse.handleChatStateNotification);
+      core_api.listen.on('message', core_converse.handleMessageNotification);
+      core_api.listen.on('feedback', core_converse.handleFeedback);
+      core_api.listen.on('connected', core_converse.requestPermission);
+    });
+  }
+
+});
+// CONCATENATED MODULE: ./src/modals/templates/chat-status.js
+function chat_status_templateObject() {
+  const data = chat_status_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"changeStatusModalLabel\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                <span class=\"modal-alert\"></span>\n                <form class=\"converse-form set-xmpp-status\" id=\"set-xmpp-status\">\n                    <div class=\"form-group\">\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-online\" value=\"online\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-online\">\n                                <span class=\"fa fa-circle chat-status chat-status--online\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-busy\" value=\"dnd\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-busy\">\n                                <span class=\"fa fa-minus-circle  chat-status chat-status--busy\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-away\" value=\"away\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-away\">\n                                <span class=\"fa fa-circle chat-status chat-status--away\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-xa\" value=\"xa\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-xa\">\n                                <span class=\"far fa-circle chat-status chat-status--xa\"></span>", "</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"btn-group w-100\">\n                            <input name=\"status_message\" type=\"text\" class=\"form-control\"\n                                value=\"", "\" placeholder=\"", "\"/>\n                            <span class=\"clear-input fa fa-times ", "\"></span>\n                        </div>\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                </form>\n            </div>\n        </div>\n    </div>\n"]);
+
+  chat_status_templateObject = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function chat_status_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+/* harmony default export */ var templates_chat_status = (o => lit_html_html(chat_status_templateObject(), o.modal_title, modal_header_close_button, o.status === 'online', o.label_online, o.status === 'busy', o.label_busy, o.status === 'away', o.label_away, o.status === 'xa', o.label_xa, o.status_message || '', o.placeholder_status_message, o.status_message ? '' : 'hidden', o.label_save));
+// CONCATENATED MODULE: ./src/modals/chat-status.js
+
+
+
+
+const chat_status_u = converse.env.utils;
+const ChatStatusModal = modals_base.extend({
+  id: "modal-status-change",
+  events: {
+    "submit form#set-xmpp-status": "onFormSubmitted",
+    "click .clear-input": "clearStatusMessage"
+  },
+
+  toHTML() {
+    return templates_chat_status(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
+      'label_away': i18n_('Away'),
+      'label_busy': i18n_('Busy'),
+      'label_cancel': i18n_('Cancel'),
+      'label_close': i18n_('Close'),
+      'label_custom_status': i18n_('Custom status'),
+      'label_offline': i18n_('Offline'),
+      'label_online': i18n_('Online'),
+      'label_save': i18n_('Save'),
+      'label_xa': i18n_('Away for long'),
+      'modal_title': i18n_('Change chat status'),
+      'placeholder_status_message': i18n_('Personal status message')
+    }));
+  },
+
+  afterRender() {
+    this.el.addEventListener('shown.bs.modal', () => {
+      this.el.querySelector('input[name="status_message"]').focus();
+    }, false);
+  },
+
+  clearStatusMessage(ev) {
+    if (ev && ev.preventDefault) {
+      ev.preventDefault();
+      chat_status_u.hideElement(this.el.querySelector('.clear-input'));
+    }
+
+    const roster_filter = this.el.querySelector('input[name="status_message"]');
+    roster_filter.value = '';
+  },
+
+  onFormSubmitted(ev) {
+    ev.preventDefault();
+    const data = new FormData(ev.target);
+    this.model.save({
+      'status_message': data.get('status_message'),
+      'status': data.get('chat_status')
     });
+    this.modal.hide();
   }
 
 });
-// CONCATENATED MODULE: ./src/components/autocomplete.js
-function autocomplete_templateObject() {
-  const data = autocomplete_taggedTemplateLiteral(["\n            <div class=\"suggestion-box suggestion-box__name\">\n                <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n                <input type=\"text\" name=\"", "\"\n                       autocomplete=\"off\"\n                       @keydown=", "\n                       @keyup=", "\n                       class=\"form-control suggestion-box__input\"\n                       placeholder=\"", "\"/>\n                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n            </div>\n        "]);
+core_converse.ChatStatusModal = ChatStatusModal;
+/* harmony default export */ var modals_chat_status = (ChatStatusModal);
+// CONCATENATED MODULE: ./src/components/image_picker.js
+function image_picker_templateObject() {
+  const data = image_picker_taggedTemplateLiteral(["\n            <a class=\"change-avatar\" @click=", " title=\"", "\">\n                ", "\n            </a>\n            <input @change=", " class=\"hidden\" name=\"image\" type=\"file\"/>\n        "]);
 
-  autocomplete_templateObject = function _templateObject() {
+  image_picker_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function autocomplete_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function image_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
 
 
 
 
 
-class autocomplete_AutoCompleteComponent extends element_CustomElement {
+
+const i18n_alt_avatar = i18n_('Your avatar image');
+
+class image_picker_ImagePicker extends element_CustomElement {
   static get properties() {
     return {
-      'getAutoCompleteList': {
-        type: Function
-      },
-      'auto_evaluate': {
-        type: Boolean
-      },
-      'auto_first': {
-        type: Boolean
-      },
-      // Should the first element be automatically selected?
-      'filter': {
-        type: String
-      },
-      'include_triggers': {
-        type: String
-      },
-      'min_chars': {
+      'height': {
         type: Number
       },
-      'name': {
-        type: String
-      },
-      'placeholder': {
+      'image': {
         type: String
       },
-      'triggers': {
-        type: String
+      'width': {
+        type: Number
       }
     };
   }
 
-  constructor() {
-    super();
-    this.auto_evaluate = true; // Should evaluation happen automatically without any particular key as trigger?
+  render() {
+    const avatar_data = {
+      'height': this.height,
+      'image': this.image,
+      'width': this.width
+    };
+    return lit_html_html(image_picker_templateObject(), this.openFileSelection, i18n_alt_avatar, renderAvatar(avatar_data), this.updateFilePreview);
+  }
 
-    this.auto_first = false; // Should the first element be automatically selected?
+  openFileSelection(ev) {
+    ev.preventDefault();
+    this.querySelector('input[type="file"]').click();
+  }
 
-    this.filter = 'contains';
-    this.include_triggers = ''; // Space separated chars which should be included in the returned value
+  updateFilePreview(ev) {
+    const file = ev.target.files[0];
+    const reader = new FileReader();
 
-    this.match_current_word = false; // Match only the current word, otherwise all input is matched
+    reader.onloadend = () => this.image = reader.result;
 
-    this.max_items = 10;
-    this.min_chars = 1;
-    this.triggers = ''; // String of space separated chars
+    reader.readAsDataURL(file);
   }
 
-  render() {
-    return lit_html_html(autocomplete_templateObject(), this.name, this.onKeyDown, this.onKeyUp, this.placeholder);
-  }
+}
+core_api.elements.define('converse-image-picker', image_picker_ImagePicker);
+// CONCATENATED MODULE: ./src/modals/templates/profile.js
+function profile_templateObject8() {
+  const data = profile_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"user-profile-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    ", "\n                    <div class=\"tab-content\">\n                        <div class=\"tab-pane active\" id=\"profile-tabpanel\" role=\"tabpanel\" aria-labelledby=\"profile-tab\">\n                            <form class=\"converse-form converse-form--modal profile-form\" action=\"#\">\n                                <div class=\"row\">\n                                    <div class=\"col-auto\">\n                                        <converse-image-picker image=\"", "\" width=\"", "\" height=\"", "\"></converse-image-picker>\n                                    </div>\n                                    <div class=\"col\">\n                                        <div class=\"form-group\">\n                                            <label class=\"col-form-label\">", ":</label>\n                                            <div>", "</div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-fullname\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-fullname\" type=\"text\" class=\"form-control\" name=\"fn\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-nickname\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-nickname\" type=\"text\" class=\"form-control\" name=\"nickname\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-url\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-url\" type=\"url\" class=\"form-control\" name=\"url\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-email\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-role\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-role\" type=\"text\" class=\"form-control\" name=\"role\" value=\"", "\" aria-describedby=\"vcard-role-help\"/>\n                                    <small id=\"vcard-role-help\" class=\"form-text text-muted\">", "</small>\n                                </div>\n                                <hr/>\n                                <div class=\"form-group\">\n                                    <button type=\"submit\" class=\"save-form btn btn-primary\">", "</button>\n                                </div>\n                            </form>\n                        </div>\n                        ", "\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);
 
-  firstUpdated() {
-    this.auto_complete = new converse_autocomplete_AutoComplete(this.firstElementChild, {
-      'ac_triggers': this.triggers.split(' '),
-      'auto_evaluate': this.auto_evaluate,
-      'auto_first': this.auto_first,
-      'filter': this.filter == 'contains' ? FILTER_CONTAINS : FILTER_STARTSWITH,
-      'include_triggers': [],
-      'list': () => this.getAutoCompleteList(),
-      'match_current_word': true,
-      'max_items': this.max_items,
-      'min_chars': this.min_chars
-    });
-    this.auto_complete.on('suggestion-box-selectcomplete', () => this.auto_completing = false);
-  }
+  profile_templateObject8 = function () {
+    return data;
+  };
 
-  onKeyDown(ev) {
-    this.auto_complete.onKeyDown(ev);
-  }
+  return data;
+}
 
-  onKeyUp(ev) {
-    this.auto_complete.evaluate(ev);
-  }
+function profile_templateObject7() {
+  const data = profile_taggedTemplateLiteral(["\n        <ul class=\"nav nav-pills justify-content-center\">\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link active\" id=\"profile-tab\" href=\"#profile-tabpanel\" aria-controls=\"profile-tabpanel\" role=\"tab\" data-toggle=\"tab\">", "</a>\n            </li>\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link\" id=\"omemo-tab\" href=\"#omemo-tabpanel\" aria-controls=\"omemo-tabpanel\" role=\"tab\" data-toggle=\"tab\">", "</a>\n            </li>\n        </ul>"]);
+
+  profile_templateObject7 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject6() {
+  const data = profile_taggedTemplateLiteral(["\n        <div class=\"tab-pane\" id=\"omemo-tabpanel\" role=\"tabpanel\" aria-labelledby=\"omemo-tab\">\n            <form class=\"converse-form fingerprint-removal\">\n                <ul class=\"list-group fingerprints\">\n                    <li class=\"list-group-item active\">", "</li>\n                    <li class=\"list-group-item\">\n                        ", "\n                    </li>\n                </ul>\n                <div class=\"form-group\">\n                    <button type=\"button\" class=\"generate-bundle btn btn-danger\">", "</button>\n                </div>\n                ", "\n            </form>\n        </div>"]);
+
+  profile_templateObject6 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject5() {
+  const data = profile_taggedTemplateLiteral(["\n        <ul class=\"list-group fingerprints\">\n            <li class=\"list-group-item nopadding active\">\n                <label>\n                    <input type=\"checkbox\" class=\"select-all\" title=\"", "\" aria-label=\"", "\"/>\n                    ", "\n                </label>\n            </li>\n            ", "\n        </ul>\n        <div class=\"form-group\"><button type=\"submit\" class=\"save-form btn btn-primary\">", "</button></div>\n    "]);
+
+  profile_templateObject5 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject4() {
+  const data = profile_taggedTemplateLiteral(["\n    ", "\n"]);
+
+  profile_templateObject4 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject3() {
+  const data = profile_taggedTemplateLiteral(["\n        <li class=\"fingerprint-removal-item list-group-item nopadding\">\n            <label>\n            <input type=\"checkbox\" value=\"", "\"\n                aria-label=\"", "\"/>\n            <span>", "</span>\n            </label>\n        </li>\n    "]);
+
+  profile_templateObject3 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject2() {
+  const data = profile_taggedTemplateLiteral(["\n        <li class=\"fingerprint-removal-item list-group-item nopadding\">\n            <label>\n            <input type=\"checkbox\" value=\"", "\"\n                aria-label=\"", "\"/>\n            <span class=\"fingerprint\">", "</span>\n            </label>\n        </li>\n    "]);
+
+  profile_templateObject2 = function () {
+    return data;
+  };
+
+  return data;
+}
+
+function profile_templateObject() {
+  const data = profile_taggedTemplateLiteral(["\n    <span class=\"fingerprint\">", "</span>"]);
+
+  profile_templateObject = function () {
+    return data;
+  };
 
+  return data;
 }
-converse_core_api.elements.define('converse-autocomplete', autocomplete_AutoCompleteComponent);
+
+function profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+
+
+
+
+
+
+
+const profile_u = converse.env.utils;
+
+const fingerprint = o => lit_html_html(profile_templateObject(), profile_u.formatFingerprint(o.view.current_device.get('bundle').fingerprint));
+
+const device_with_fingerprint = o => {
+  const i18n_fingerprint_checkbox_label = i18n_('Checkbox for selecting the following fingerprint');
+
+  return lit_html_html(profile_templateObject2(), o.device.get('id'), i18n_fingerprint_checkbox_label, profile_u.formatFingerprint(o.device.get('bundle').fingerprint));
+};
+
+const device_without_fingerprint = o => {
+  const i18n_device_without_fingerprint = i18n_('Device without a fingerprint');
+
+  const i18n_fingerprint_checkbox_label = i18n_('Checkbox for selecting the following device');
+
+  return lit_html_html(profile_templateObject3(), o.device.get('id'), i18n_fingerprint_checkbox_label, i18n_device_without_fingerprint);
+};
+
+const device_item = o => lit_html_html(profile_templateObject4(), o.device.get('bundle') && o.device.get('bundle').fingerprint ? device_with_fingerprint(o) : device_without_fingerprint(o));
+
+const device_list = o => {
+  const i18n_other_devices = i18n_('Other OMEMO-enabled devices');
+
+  const i18n_other_devices_label = i18n_('Checkbox to select fingerprints of all other OMEMO devices');
+
+  const i18n_remove_devices = i18n_('Remove checked devices and close');
+
+  const i18n_select_all = i18n_('Select all');
+
+  return lit_html_html(profile_templateObject5(), i18n_select_all, i18n_other_devices_label, i18n_other_devices, o.view.other_devices.map(device => device_item(Object.assign({
+    device
+  }, o))), i18n_remove_devices);
+}; // TODO: this needs to go as a component into the OMEMO plugin folder
+
+
+const omemo_page = o => {
+  const i18n_fingerprint = i18n_("This device's OMEMO fingerprint");
+
+  const i18n_generate = i18n_('Generate new keys and fingerprint');
+
+  return lit_html_html(profile_templateObject6(), i18n_fingerprint, o.view.current_device && o.view.current_device.get('bundle') && o.view.current_device.get('bundle').fingerprint ? fingerprint(o) : spinner(), i18n_generate, o.view.other_devices.length ? device_list(o) : '');
+};
+
+/* harmony default export */ var profile = (o => {
+  const heading_profile = i18n_('Your Profile');
+
+  const i18n_email = i18n_('Email');
+
+  const i18n_fullname = i18n_('Full Name');
+
+  const i18n_jid = i18n_('XMPP Address (JID)');
+
+  const i18n_nickname = i18n_('Nickname');
+
+  const i18n_role = i18n_('Role');
+
+  const i18n_save = i18n_('Save and close');
+
+  const i18n_role_help = i18n_('Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.');
+
+  const i18n_url = i18n_('URL');
+
+  const i18n_omemo = i18n_('OMEMO');
+
+  const i18n_profile = i18n_('Profile');
+
+  const navigation = lit_html_html(profile_templateObject7(), i18n_profile, i18n_omemo);
+  return lit_html_html(profile_templateObject8(), heading_profile, modal_header_close_button, core_converse.pluggable.plugins['converse-omemo'].enabled(core_converse) && navigation || '', o.image, o.width, o.height, i18n_jid, o.jid, i18n_fullname, o.fullname || '', i18n_nickname, o.nickname || '', i18n_url, o.url || '', i18n_email, o.email || '', i18n_role, o.role || '', i18n_role_help, i18n_save, core_converse.pluggable.plugins['converse-omemo'].enabled(core_converse) && omemo_page(o) || '');
+});
+// CONCATENATED MODULE: ./src/modals/profile.js
+
+
+
+
+
+
+
+const ProfileModal = modals_base.extend({
+  id: "user-profile-modal",
+  events: {
+    'submit .profile-form': 'onFormSubmitted'
+  },
+
+  initialize() {
+    this.listenTo(this.model, 'change', this.render);
+    modals_base.prototype.initialize.apply(this, arguments);
+    /**
+        * Triggered when the _converse.ProfileModal has been created and initialized.
+        * @event _converse#profileModalInitialized
+        * @type { _converse.XMPPStatus }
+        * @example _converse.api.listen.on('profileModalInitialized', status => { ... });
+        */
+
+    core_api.trigger('profileModalInitialized', this.model);
+  },
+
+  toHTML() {
+    return profile(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), this.getAvatarData(), {
+      'view': this
+    }));
+  },
+
+  getAvatarData() {
+    const image_type = this.model.vcard.get('image_type');
+    const image_data = this.model.vcard.get('image');
+    const image = "data:" + image_type + ";base64," + image_data;
+    return {
+      'height': 128,
+      'width': 128,
+      image
+    };
+  },
+
+  afterRender() {
+    this.tabs = sizzle_default()('.nav-item .nav-link', this.el).map(e => new bootstrap_native_default.a.Tab(e));
+  },
+
+  async setVCard(data) {
+    try {
+      await core_api.vcard.set(core_converse.bare_jid, data);
+    } catch (err) {
+      headless_log.fatal(err);
+      this.alert([i18n_("Sorry, an error happened while trying to save your profile data."), i18n_("You can check your browser's developer console for any error output.")].join(" "));
+      return;
+    }
+
+    this.modal.hide();
+  },
+
+  onFormSubmitted(ev) {
+    ev.preventDefault();
+    const reader = new FileReader();
+    const form_data = new FormData(ev.target);
+    const image_file = form_data.get('image');
+    const data = {
+      'fn': form_data.get('fn'),
+      'nickname': form_data.get('nickname'),
+      'role': form_data.get('role'),
+      'email': form_data.get('email'),
+      'url': form_data.get('url')
+    };
+
+    if (!image_file.size) {
+      Object.assign(data, {
+        'image': this.model.vcard.get('image'),
+        'image_type': this.model.vcard.get('image_type')
+      });
+      this.setVCard(data);
+    } else {
+      reader.onloadend = () => {
+        Object.assign(data, {
+          'image': btoa(reader.result),
+          'image_type': image_file.type
+        });
+        this.setVCard(data);
+      };
+
+      reader.readAsBinaryString(image_file);
+    }
+  }
+
+});
+core_converse.ProfileModal = ProfileModal;
+/* harmony default export */ var modals_profile = (ProfileModal);
 // CONCATENATED MODULE: ./src/components/adhoc-commands.js
 function adhoc_commands_templateObject6() {
   const data = adhoc_commands_taggedTemplateLiteral(["\n            <fieldset class=\"form-group\">\n                <ul class=\"list-group\">\n                    <li class=\"list-group-item active\">", ":</li>\n                    ", "\n                </ul>\n            </fieldset>"]);
 
-  adhoc_commands_templateObject6 = function _templateObject6() {
+  adhoc_commands_templateObject6 = function () {
     return data;
   };
 
@@ -101175,7 +106233,7 @@ function adhoc_commands_templateObject6() {
 function adhoc_commands_templateObject5() {
   const data = adhoc_commands_taggedTemplateLiteral(["<div class=\"alert alert-", "\" role=\"alert\">", "</div>"]);
 
-  adhoc_commands_templateObject5 = function _templateObject5() {
+  adhoc_commands_templateObject5 = function () {
     return data;
   };
 
@@ -101185,7 +106243,7 @@ function adhoc_commands_templateObject5() {
 function adhoc_commands_templateObject4() {
   const data = adhoc_commands_taggedTemplateLiteral(["\n        ", "\n        <form class=\"converse-form\" @submit=", ">\n            <fieldset class=\"form-group\">\n                <label>\n                    ", "\n                    <p class=\"form-help\">", "</p>\n                    <converse-autocomplete\n                        .getAutoCompleteList=\"", "\"\n                        placeholder=\"", "\"\n                        name=\"jid\"/>\n                </label>\n            </fieldset>\n            <fieldset class=\"form-group\">\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\">\n            </fieldset>\n            ", "\n\n        </form>\n    "]);
 
-  adhoc_commands_templateObject4 = function _templateObject4() {
+  adhoc_commands_templateObject4 = function () {
     return data;
   };
 
@@ -101195,7 +106253,7 @@ function adhoc_commands_templateObject4() {
 function adhoc_commands_templateObject3() {
   const data = adhoc_commands_taggedTemplateLiteral(["\n    <li class=\"room-item list-group-item\">\n        <div class=\"available-chatroom d-flex flex-row\">\n            <a class=\"open-room available-room w-100\"\n               @click=", "\n               data-command-node=\"", "\"\n               data-command-jid=\"", "\"\n               data-command-name=\"", "\"\n               title=\"", "\"\n               href=\"#\">", "</a>\n        </div>\n        ", "\n    </li>\n"]);
 
-  adhoc_commands_templateObject3 = function _templateObject3() {
+  adhoc_commands_templateObject3 = function () {
     return data;
   };
 
@@ -101205,7 +106263,7 @@ function adhoc_commands_templateObject3() {
 function adhoc_commands_templateObject2() {
   const data = adhoc_commands_taggedTemplateLiteral(["<div class=\"alert alert-", "\" role=\"alert\">", "</div>"]);
 
-  adhoc_commands_templateObject2 = function _templateObject2() {
+  adhoc_commands_templateObject2 = function () {
     return data;
   };
 
@@ -101215,7 +106273,7 @@ function adhoc_commands_templateObject2() {
 function adhoc_commands_templateObject() {
   const data = adhoc_commands_taggedTemplateLiteral(["\n        <form @submit=", ">\n            ", "\n            <fieldset class=\"form-group\">\n                <input type=\"hidden\" name=\"command_node\" value=\"", "\"/>\n                <input type=\"hidden\" name=\"command_jid\" value=\"", "\"/>\n\n                <p class=\"form-help\">", "</p>\n                <!-- Fields are generated internally, with xForm2webForm -->\n                ", "\n            </fieldset>\n            <fieldset>\n                <input type=\"submit\" class=\"btn btn-primary\" value=\"", "\">\n                <input type=\"button\" class=\"btn btn-secondary button-cancel\" value=\"", "\" @click=", ">\n            </fieldset>\n        </form>\n    "]);
 
-  adhoc_commands_templateObject = function _templateObject() {
+  adhoc_commands_templateObject = function () {
     return data;
   };
 
@@ -101249,7 +106307,7 @@ const tpl_command_form = (o, command) => {
 const tpl_command = (o, command) => lit_html_html(adhoc_commands_templateObject3(), o.toggleCommandForm, command.node, command.jid, command.name, command.name, command.name || command.jid, command.node === o.showform ? tpl_command_form(o, command) : '');
 
 async function getAutoCompleteList() {
-  const models = [...(await converse_core_api.rooms.get()), ...(await converse_core_api.contacts.get())];
+  const models = [...(await core_api.rooms.get()), ...(await core_api.contacts.get())];
   const jids = [...new Set(models.map(o => adhoc_commands_Strophe.getDomainFromJid(o.get('jid'))))];
   return jids;
 }
@@ -101285,7 +106343,7 @@ async function fetchCommandForm(command) {
   try {
     var _sizzle$pop;
 
-    const iq = await converse_core_api.sendIQ(stanza);
+    const iq = await core_api.sendIQ(stanza);
     const cmd_el = sizzle_default()("command[xmlns=\"".concat(adhoc_commands_Strophe.NS.ADHOC, "\"]"), iq).pop();
     command.sessionid = cmd_el.getAttribute('sessionid');
     command.instructions = (_sizzle$pop = sizzle_default()('x[type="form"][xmlns="jabber:x:data"] instructions', cmd_el).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent;
@@ -101354,14 +106412,14 @@ class adhoc_commands_AdHocCommands extends element_CustomElement {
     let supported;
 
     try {
-      supported = await converse_core_api.disco.supports(adhoc_commands_Strophe.NS.ADHOC, jid);
+      supported = await core_api.disco.supports(adhoc_commands_Strophe.NS.ADHOC, jid);
     } catch (e) {
       headless_log.error(e);
     }
 
     if (supported) {
       try {
-        this.commands = await converse_core_api.adhoc.getCommands(jid);
+        this.commands = await core_api.adhoc.getCommands(jid);
         this.view = 'list-commands';
       } catch (e) {
         headless_log.error(e);
@@ -101409,394 +106467,159 @@ class adhoc_commands_AdHocCommands extends element_CustomElement {
       xmlns: adhoc_commands_Strophe.NS.XFORM,
       type: "submit"
     });
-    config_array.forEach(node => iq.cnode(node).up());
-    let result;
-
-    try {
-      result = await converse_core_api.sendIQ(iq);
-    } catch (e) {
-      cmd.alert_type = 'danger';
-      cmd.alert = i18n_('Sorry, an error occurred while trying to execute the command. See the developer console for details');
-      headless_log.error('Error while trying to execute an ad-hoc command');
-      headless_log.error(e);
-    }
-
-    if (result) {
-      var _result$querySelector;
-
-      cmd.alert = (_result$querySelector = result.querySelector('note')) === null || _result$querySelector === void 0 ? void 0 : _result$querySelector.textContent;
-    } else {
-      cmd.alert = 'Done';
-    }
-
-    cmd.alert_type = 'primary';
-    this.nonce = adhoc_commands_u.getUniqueId();
-  }
-
-}
-converse_core_api.elements.define('converse-adhoc-commands', adhoc_commands_AdHocCommands);
-// CONCATENATED MODULE: ./src/templates/user_settings_modal.js
-function user_settings_modal_templateObject2() {
-  const data = user_settings_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"converse-modtools-modal-label\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                ", "\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane tab-pane--columns ", "\"\n                         id=\"about-tabpanel\" role=\"tabpanel\" aria-labelledby=\"about-tab\">\n\n                        <span class=\"modal-alert\"></span>\n                        <br/>\n                        <div class=\"container\">\n                            <h6 class=\"brand-heading\">Converse</h6>\n                            <p class=\"brand-subtitle\">", "</p>\n                            <p class=\"brand-subtitle\">", "</p>\n                            <p class=\"brand-subtitle\">", "</p>\n                        </div>\n                    </div>\n\n                    <div class=\"tab-pane tab-pane--columns ", "\"\n                         id=\"commands-tabpanel\"\n                         role=\"tabpanel\"\n                         aria-labelledby=\"commands-tab\">\n                        <converse-adhoc-commands/>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n"]);
-
-  user_settings_modal_templateObject2 = function _templateObject2() {
-    return data;
-  };
-
-  return data;
-}
-
-function user_settings_modal_templateObject() {
-  const data = user_settings_modal_taggedTemplateLiteral(["\n        <ul class=\"nav nav-pills justify-content-center\">\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link active\" id=\"about-tab\" href=\"#about-tabpanel\" aria-controls=\"about-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">", "</a>\n            </li>\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link\" id=\"commands-tab\" href=\"#commands-tabpanel\" aria-controls=\"commands-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">", "</a>\n            </li>\n        </ul>\n    "]);
-
-  user_settings_modal_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function user_settings_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-
-
-
-
-
-const user_settings_modal_tpl_navigation = o => {
-  const i18n_about = i18n_('About');
-
-  const i18n_commands = i18n_('Commands');
-
-  return lit_html_html(user_settings_modal_templateObject(), o.switchTab, i18n_about, o.switchTab, i18n_commands);
-};
-
-/* harmony default export */ var user_settings_modal = (o => {
-  const i18n_modal_title = i18n_('Settings');
-
-  const first_subtitle = i18n_('%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s', '<a target="_blank" rel="nofollow" href="https://conversejs.org">', '</a>', '<a target="_blank" rel="nofollow" href="https://opkode.com">');
-
-  const second_subtitle = i18n_('%1$s Translate %2$s it into your own language', '<a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">', '</a>');
-
-  const show_client_info = converse_core_api.settings.get('show_client_info');
-  const allow_adhoc_commands = converse_core_api.settings.get('allow_adhoc_commands');
-  const show_both_tabs = show_client_info && allow_adhoc_commands;
-  return lit_html_html(user_settings_modal_templateObject2(), i18n_modal_title, modal_header_close_button, show_both_tabs ? user_settings_modal_tpl_navigation(o) : '', show_client_info ? 'active' : '', o.version_name, unsafeHTML(xss_default.a.filterXSS(first_subtitle, {
-    'whiteList': {
-      'a': []
-    }
-  })), unsafeHTML(xss_default.a.filterXSS(second_subtitle, {
-    'whiteList': {
-      'a': []
-    }
-  })), !show_client_info && allow_adhoc_commands ? 'active' : '');
-});
-// CONCATENATED MODULE: ./src/modals/user-settings.js
-
-
-
-let user_settings_converse;
-
-/* harmony default export */ var modals_user_settings = (BootstrapModal.extend({
-  id: "converse-client-info-modal",
-
-  initialize(settings) {
-    user_settings_converse = settings._converse;
-    BootstrapModal.prototype.initialize.apply(this, arguments);
-  },
-
-  toHTML() {
-    return user_settings_modal(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
-      'version_name': user_settings_converse.VERSION_NAME
-    }));
-  }
-
-}));
-// CONCATENATED MODULE: ./src/templates/chat_status_modal.js
-function chat_status_modal_templateObject() {
-  const data = chat_status_modal_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"changeStatusModalLabel\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                <span class=\"modal-alert\"></span>\n                <form class=\"converse-form set-xmpp-status\" id=\"set-xmpp-status\">\n                    <div class=\"form-group\">\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-online\" value=\"online\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-online\">\n                                <span class=\"fa fa-circle chat-status chat-status--online\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-busy\" value=\"dnd\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-busy\">\n                                <span class=\"fa fa-minus-circle  chat-status chat-status--busy\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-away\" value=\"away\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-away\">\n                                <span class=\"fa fa-circle chat-status chat-status--away\"></span>", "</label>\n                        </div>\n                        <div class=\"custom-control custom-radio\">\n                            <input ?checked=", "\n                                type=\"radio\" id=\"radio-xa\" value=\"xa\" name=\"chat_status\" class=\"custom-control-input\"/>\n                            <label class=\"custom-control-label\" for=\"radio-xa\">\n                                <span class=\"far fa-circle chat-status chat-status--xa\"></span>", "</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"btn-group w-100\">\n                            <input name=\"status_message\" type=\"text\" class=\"form-control\"\n                                value=\"", "\" placeholder=\"", "\"/>\n                            <span class=\"clear-input fa fa-times ", "\"></span>\n                        </div>\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                </form>\n            </div>\n        </div>\n    </div>\n"]);
-
-  chat_status_modal_templateObject = function _templateObject() {
-    return data;
-  };
-
-  return data;
-}
-
-function chat_status_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-/* harmony default export */ var chat_status_modal = (o => lit_html_html(chat_status_modal_templateObject(), o.modal_title, modal_header_close_button, o.status === 'online', o.label_online, o.status === 'busy', o.label_busy, o.status === 'away', o.label_away, o.status === 'xa', o.label_xa, o.status_message || '', o.placeholder_status_message, o.status_message ? '' : 'hidden', o.label_save));
-// CONCATENATED MODULE: ./src/templates/profile.js
-function profile_templateObject3() {
-  const data = profile_taggedTemplateLiteral(["<a class=\"controlbox-heading__btn logout fa fa-sign-out-alt align-self-center\" title=\"", "\"></a>"]);
+    config_array.forEach(node => iq.cnode(node).up());
+    let result;
 
-  profile_templateObject3 = function _templateObject3() {
-    return data;
-  };
+    try {
+      result = await core_api.sendIQ(iq);
+    } catch (e) {
+      cmd.alert_type = 'danger';
+      cmd.alert = i18n_('Sorry, an error occurred while trying to execute the command. See the developer console for details');
+      headless_log.error('Error while trying to execute an ad-hoc command');
+      headless_log.error(e);
+    }
 
-  return data;
-}
+    if (result) {
+      var _result$querySelector;
 
-function profile_templateObject2() {
-  const data = profile_taggedTemplateLiteral(["<a class=\"controlbox-heading__btn show-client-info fa fa-cog align-self-center\" title=\"", "\" @click=", "></a>"]);
+      cmd.alert = (_result$querySelector = result.querySelector('note')) === null || _result$querySelector === void 0 ? void 0 : _result$querySelector.textContent;
+    } else {
+      cmd.alert = 'Done';
+    }
 
-  profile_templateObject2 = function _templateObject2() {
-    return data;
-  };
+    cmd.alert_type = 'primary';
+    this.nonce = adhoc_commands_u.getUniqueId();
+  }
 
-  return data;
 }
+core_api.elements.define('converse-adhoc-commands', adhoc_commands_AdHocCommands);
+// CONCATENATED MODULE: ./src/modals/templates/user-settings.js
+function user_settings_templateObject2() {
+  const data = user_settings_taggedTemplateLiteral(["\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h5 class=\"modal-title\" id=\"converse-modtools-modal-label\">", "</h5>\n                ", "\n            </div>\n            <div class=\"modal-body\">\n                ", "\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane tab-pane--columns ", "\"\n                         id=\"about-tabpanel\" role=\"tabpanel\" aria-labelledby=\"about-tab\">\n\n                        <span class=\"modal-alert\"></span>\n                        <br/>\n                        <div class=\"container\">\n                            <h6 class=\"brand-heading\">Converse</h6>\n                            <p class=\"brand-subtitle\">", "</p>\n                            <p class=\"brand-subtitle\">", "</p>\n                            <p class=\"brand-subtitle\">", "</p>\n                        </div>\n                    </div>\n\n                    <div class=\"tab-pane tab-pane--columns ", "\"\n                         id=\"commands-tabpanel\"\n                         role=\"tabpanel\"\n                         aria-labelledby=\"commands-tab\">\n                        <converse-adhoc-commands/>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n"]);
 
-function profile_templateObject() {
-  const data = profile_taggedTemplateLiteral(["\n    <div class=\"userinfo controlbox-padded\">\n        <div class=\"controlbox-section profile d-flex\">\n            <a class=\"show-profile\" href=\"#\">\n                <canvas class=\"avatar align-self-center\" height=\"40\" width=\"40\"></canvas>\n            </a>\n            <span class=\"username w-100 align-self-center\">", "</span>\n            ", "\n            ", "\n        </div>\n        <div class=\"d-flex xmpp-status\">\n            <a class=\"change-status\" title=\"", "\" data-toggle=\"modal\" data-target=\"#changeStatusModal\">\n                <span class=\"", " w-100 align-self-center\" data-value=\"", "\">\n                    <span class=\"\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                        ", "\"></span> ", "</span>\n            </a>\n        </div>\n    </div>\n"]);
-
-  profile_templateObject = function _templateObject() {
+  user_settings_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
+function user_settings_templateObject() {
+  const data = user_settings_taggedTemplateLiteral(["\n        <ul class=\"nav nav-pills justify-content-center\">\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link active\" id=\"about-tab\" href=\"#about-tabpanel\" aria-controls=\"about-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">", "</a>\n            </li>\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link\" id=\"commands-tab\" href=\"#commands-tabpanel\" aria-controls=\"commands-tabpanel\" role=\"tab\" data-toggle=\"tab\" @click=", ">", "</a>\n            </li>\n        </ul>\n    "]);
 
-/* harmony default export */ var profile = (o => {
-  const i18n_logout = i18n_('Log out');
-
-  const i18n_change_status = i18n_('Click to change your chat status');
-
-  const i18n_details = i18n_('Show details about this chat client');
-
-  const show_settings_button = converse_core_api.settings.get('show_client_info') || converse_core_api.settings.get('allow_adhoc_commands');
-  return lit_html_html(profile_templateObject(), o.fullname, show_settings_button ? lit_html_html(profile_templateObject2(), i18n_details, o.showUserSettingsModal) : '', converse_core_api.settings.get('allow_logout') ? lit_html_html(profile_templateObject3(), i18n_logout) : '', i18n_change_status, o.chat_status, o.chat_status, o.chat_status === 'online' && 'fa fa-circle chat-status chat-status--online', o.chat_status === 'dnd' && 'fa fa-minus-circle chat-status chat-status--busy', o.chat_status === 'away' && 'fa fa-circle chat-status chat-status--away', o.chat_status === 'xa' && 'far fa-circle chat-status chat-status--xa ', o.chat_status === 'offline' && 'fa fa-circle chat-status chat-status--offline', o.status_message);
-});
-// CONCATENATED MODULE: ./src/components/image_picker.js
-function image_picker_templateObject() {
-  const data = image_picker_taggedTemplateLiteral(["\n            <a class=\"change-avatar\" @click=", " title=\"", "\">\n                ", "\n            </a>\n            <input @change=", " class=\"hidden\" name=\"image\" type=\"file\"/>\n        "]);
-
-  image_picker_templateObject = function _templateObject() {
+  user_settings_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function image_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
+function user_settings_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
-const i18n_alt_avatar = i18n_('Your avatar image');
-
-class image_picker_ImagePicker extends element_CustomElement {
-  static get properties() {
-    return {
-      'height': {
-        type: Number
-      },
-      'image': {
-        type: String
-      },
-      'width': {
-        type: Number
-      }
-    };
-  }
-
-  render() {
-    const avatar_data = {
-      'height': this.height,
-      'image': this.image,
-      'width': this.width
-    };
-    return lit_html_html(image_picker_templateObject(), this.openFileSelection, i18n_alt_avatar, renderAvatar(avatar_data), this.updateFilePreview);
-  }
-
-  openFileSelection(ev) {
-    ev.preventDefault();
-    this.querySelector('input[type="file"]').click();
-  }
-
-  updateFilePreview(ev) {
-    const file = ev.target.files[0];
-    const reader = new FileReader();
 
-    reader.onloadend = () => this.image = reader.result;
 
-    reader.readAsDataURL(file);
-  }
 
-}
-converse_core_api.elements.define('converse-image-picker', image_picker_ImagePicker);
-// CONCATENATED MODULE: ./src/templates/profile_modal.js
-function profile_modal_templateObject8() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"user-profile-modal-label\">", "</h5>\n                    ", "\n                </div>\n                <div class=\"modal-body\">\n                    <span class=\"modal-alert\"></span>\n                    ", "\n                    <div class=\"tab-content\">\n                        <div class=\"tab-pane active\" id=\"profile-tabpanel\" role=\"tabpanel\" aria-labelledby=\"profile-tab\">\n                            <form class=\"converse-form converse-form--modal profile-form\" action=\"#\">\n                                <div class=\"row\">\n                                    <div class=\"col-auto\">\n                                        <converse-image-picker image=\"", "\" width=\"", "\" height=\"", "\"></converse-image-picker>\n                                    </div>\n                                    <div class=\"col\">\n                                        <div class=\"form-group\">\n                                            <label class=\"col-form-label\">", ":</label>\n                                            <div>", "</div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-fullname\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-fullname\" type=\"text\" class=\"form-control\" name=\"fn\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-nickname\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-nickname\" type=\"text\" class=\"form-control\" name=\"nickname\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-url\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-url\" type=\"url\" class=\"form-control\" name=\"url\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-email\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"", "\"/>\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"vcard-role\" class=\"col-form-label\">", ":</label>\n                                    <input id=\"vcard-role\" type=\"text\" class=\"form-control\" name=\"role\" value=\"", "\" aria-describedby=\"vcard-role-help\"/>\n                                    <small id=\"vcard-role-help\" class=\"form-text text-muted\">", "</small>\n                                </div>\n                                <hr/>\n                                <div class=\"form-group\">\n                                    <button type=\"submit\" class=\"save-form btn btn-primary\">", "</button>\n                                </div>\n                            </form>\n                        </div>\n                        ", "\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);
 
-  profile_modal_templateObject8 = function _templateObject8() {
-    return data;
-  };
 
-  return data;
-}
+const user_settings_tpl_navigation = o => {
+  const i18n_about = i18n_('About');
 
-function profile_modal_templateObject7() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <ul class=\"nav nav-pills justify-content-center\">\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link active\" id=\"profile-tab\" href=\"#profile-tabpanel\" aria-controls=\"profile-tabpanel\" role=\"tab\" data-toggle=\"tab\">", "</a>\n            </li>\n            <li role=\"presentation\" class=\"nav-item\">\n                <a class=\"nav-link\" id=\"omemo-tab\" href=\"#omemo-tabpanel\" aria-controls=\"omemo-tabpanel\" role=\"tab\" data-toggle=\"tab\">", "</a>\n            </li>\n        </ul>"]);
+  const i18n_commands = i18n_('Commands');
 
-  profile_modal_templateObject7 = function _templateObject7() {
-    return data;
-  };
+  return lit_html_html(user_settings_templateObject(), o.switchTab, i18n_about, o.switchTab, i18n_commands);
+};
 
-  return data;
-}
+/* harmony default export */ var templates_user_settings = (o => {
+  const i18n_modal_title = i18n_('Settings');
 
-function profile_modal_templateObject6() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <div class=\"tab-pane\" id=\"omemo-tabpanel\" role=\"tabpanel\" aria-labelledby=\"omemo-tab\">\n            <form class=\"converse-form fingerprint-removal\">\n                <ul class=\"list-group fingerprints\">\n                    <li class=\"list-group-item active\">", "</li>\n                    <li class=\"list-group-item\">\n                        ", "\n                    </li>\n                </ul>\n                <div class=\"form-group\">\n                    <button type=\"button\" class=\"generate-bundle btn btn-danger\">", "</button>\n                </div>\n                ", "\n            </form>\n        </div>"]);
+  const first_subtitle = i18n_('%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s', '<a target="_blank" rel="nofollow" href="https://conversejs.org">', '</a>', '<a target="_blank" rel="nofollow" href="https://opkode.com">');
 
-  profile_modal_templateObject6 = function _templateObject6() {
-    return data;
-  };
+  const second_subtitle = i18n_('%1$s Translate %2$s it into your own language', '<a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">', '</a>');
 
-  return data;
-}
+  const show_client_info = core_api.settings.get('show_client_info');
+  const allow_adhoc_commands = core_api.settings.get('allow_adhoc_commands');
+  const show_both_tabs = show_client_info && allow_adhoc_commands;
+  return lit_html_html(user_settings_templateObject2(), i18n_modal_title, modal_header_close_button, show_both_tabs ? user_settings_tpl_navigation(o) : '', show_client_info ? 'active' : '', o.version_name, unsafeHTML(xss_default.a.filterXSS(first_subtitle, {
+    'whiteList': {
+      'a': []
+    }
+  })), unsafeHTML(xss_default.a.filterXSS(second_subtitle, {
+    'whiteList': {
+      'a': []
+    }
+  })), !show_client_info && allow_adhoc_commands ? 'active' : '');
+});
+// CONCATENATED MODULE: ./src/modals/user-settings.js
 
-function profile_modal_templateObject5() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <ul class=\"list-group fingerprints\">\n            <li class=\"list-group-item nopadding active\">\n                <label>\n                    <input type=\"checkbox\" class=\"select-all\" title=\"", "\" aria-label=\"", "\"/>\n                    ", "\n                </label>\n            </li>\n            ", "\n        </ul>\n        <div class=\"form-group\"><button type=\"submit\" class=\"save-form btn btn-primary\">", "</button></div>\n    "]);
 
-  profile_modal_templateObject5 = function _templateObject5() {
-    return data;
-  };
 
-  return data;
-}
+let user_settings_converse;
 
-function profile_modal_templateObject4() {
-  const data = profile_modal_taggedTemplateLiteral(["\n    ", "\n"]);
+/* harmony default export */ var modals_user_settings = (modals_base.extend({
+  id: "converse-client-info-modal",
 
-  profile_modal_templateObject4 = function _templateObject4() {
-    return data;
-  };
+  initialize(settings) {
+    user_settings_converse = settings._converse;
+    modals_base.prototype.initialize.apply(this, arguments);
+  },
 
-  return data;
-}
+  toHTML() {
+    return templates_user_settings(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
+      'version_name': user_settings_converse.VERSION_NAME
+    }));
+  }
 
-function profile_modal_templateObject3() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <li class=\"fingerprint-removal-item list-group-item nopadding\">\n            <label>\n            <input type=\"checkbox\" value=\"", "\"\n                aria-label=\"", "\"/>\n            <span>", "</span>\n            </label>\n        </li>\n    "]);
+}));
+// CONCATENATED MODULE: ./src/templates/profile.js
+function templates_profile_templateObject3() {
+  const data = templates_profile_taggedTemplateLiteral(["<a class=\"controlbox-heading__btn logout fa fa-sign-out-alt align-self-center\" title=\"", "\"></a>"]);
 
-  profile_modal_templateObject3 = function _templateObject3() {
+  templates_profile_templateObject3 = function () {
     return data;
   };
 
   return data;
 }
 
-function profile_modal_templateObject2() {
-  const data = profile_modal_taggedTemplateLiteral(["\n        <li class=\"fingerprint-removal-item list-group-item nopadding\">\n            <label>\n            <input type=\"checkbox\" value=\"", "\"\n                aria-label=\"", "\"/>\n            <span class=\"fingerprint\">", "</span>\n            </label>\n        </li>\n    "]);
+function templates_profile_templateObject2() {
+  const data = templates_profile_taggedTemplateLiteral(["<a class=\"controlbox-heading__btn show-client-info fa fa-cog align-self-center\" title=\"", "\" @click=", "></a>"]);
 
-  profile_modal_templateObject2 = function _templateObject2() {
+  templates_profile_templateObject2 = function () {
     return data;
   };
 
   return data;
 }
 
-function profile_modal_templateObject() {
-  const data = profile_modal_taggedTemplateLiteral(["\n    <span class=\"fingerprint\">", "</span>"]);
+function templates_profile_templateObject() {
+  const data = templates_profile_taggedTemplateLiteral(["\n    <div class=\"userinfo controlbox-padded\">\n        <div class=\"controlbox-section profile d-flex\">\n            <a class=\"show-profile\" href=\"#\">\n                <canvas class=\"avatar align-self-center\" height=\"40\" width=\"40\"></canvas>\n            </a>\n            <span class=\"username w-100 align-self-center\">", "</span>\n            ", "\n            ", "\n        </div>\n        <div class=\"d-flex xmpp-status\">\n            <a class=\"change-status\" title=\"", "\" data-toggle=\"modal\" data-target=\"#changeStatusModal\">\n                <span class=\"", " w-100 align-self-center\" data-value=\"", "\">\n                    <span class=\"\n                        ", "\n                        ", "\n                        ", "\n                        ", "\n                        ", "\"></span> ", "</span>\n            </a>\n        </div>\n    </div>\n"]);
 
-  profile_modal_templateObject = function _templateObject() {
+  templates_profile_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function profile_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
-
-
-
-
-
-
-
-const profile_modal_u = converse.env.utils;
-
-const fingerprint = o => lit_html_html(profile_modal_templateObject(), profile_modal_u.formatFingerprint(o.view.current_device.get('bundle').fingerprint));
-
-const device_with_fingerprint = o => {
-  const i18n_fingerprint_checkbox_label = i18n_('Checkbox for selecting the following fingerprint');
-
-  return lit_html_html(profile_modal_templateObject2(), o.device.get('id'), i18n_fingerprint_checkbox_label, profile_modal_u.formatFingerprint(o.device.get('bundle').fingerprint));
-};
-
-const device_without_fingerprint = o => {
-  const i18n_device_without_fingerprint = i18n_('Device without a fingerprint');
-
-  const i18n_fingerprint_checkbox_label = i18n_('Checkbox for selecting the following device');
-
-  return lit_html_html(profile_modal_templateObject3(), o.device.get('id'), i18n_fingerprint_checkbox_label, i18n_device_without_fingerprint);
-};
-
-const device_item = o => lit_html_html(profile_modal_templateObject4(), o.device.get('bundle') && o.device.get('bundle').fingerprint ? device_with_fingerprint(o) : device_without_fingerprint(o));
-
-const device_list = o => {
-  const i18n_other_devices = i18n_('Other OMEMO-enabled devices');
-
-  const i18n_other_devices_label = i18n_('Checkbox to select fingerprints of all other OMEMO devices');
-
-  const i18n_remove_devices = i18n_('Remove checked devices and close');
-
-  const i18n_select_all = i18n_('Select all');
-
-  return lit_html_html(profile_modal_templateObject5(), i18n_select_all, i18n_other_devices_label, i18n_other_devices, o.view.other_devices.map(device => device_item(Object.assign({
-    device
-  }, o))), i18n_remove_devices);
-}; // TODO: this needs to go as a component into the OMEMO plugin folder
-
-
-const omemo_page = o => {
-  const i18n_fingerprint = i18n_("This device's OMEMO fingerprint");
-
-  const i18n_generate = i18n_('Generate new keys and fingerprint');
-
-  return lit_html_html(profile_modal_templateObject6(), i18n_fingerprint, o.view.current_device && o.view.current_device.get('bundle') && o.view.current_device.get('bundle').fingerprint ? fingerprint(o) : spinner(), i18n_generate, o.view.other_devices.length ? device_list(o) : '');
-};
-
-/* harmony default export */ var profile_modal = (o => {
-  const heading_profile = i18n_('Your Profile');
-
-  const i18n_email = i18n_('Email');
-
-  const i18n_fullname = i18n_('Full Name');
-
-  const i18n_jid = i18n_('XMPP Address (JID)');
-
-  const i18n_nickname = i18n_('Nickname');
+function templates_profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
-  const i18n_role = i18n_('Role');
 
-  const i18n_save = i18n_('Save and close');
 
-  const i18n_role_help = i18n_('Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.');
 
-  const i18n_url = i18n_('URL');
+/* harmony default export */ var templates_profile = (o => {
+  const i18n_logout = i18n_('Log out');
 
-  const i18n_omemo = i18n_('OMEMO');
+  const i18n_change_status = i18n_('Click to change your chat status');
 
-  const i18n_profile = i18n_('Profile');
+  const i18n_details = i18n_('Show details about this chat client');
 
-  const navigation = lit_html_html(profile_modal_templateObject7(), i18n_profile, i18n_omemo);
-  return lit_html_html(profile_modal_templateObject8(), heading_profile, modal_header_close_button, converse_core_converse.pluggable.plugins['converse-omemo'].enabled(converse_core_converse) && navigation, o.image, o.width, o.height, i18n_jid, o.jid, i18n_fullname, o.fullname || '', i18n_nickname, o.nickname || '', i18n_url, o.url || '', i18n_email, o.email || '', i18n_role, o.role || '', i18n_role_help, i18n_save, converse_core_converse.pluggable.plugins['converse-omemo'].enabled(converse_core_converse) && omemo_page(o));
+  const show_settings_button = core_api.settings.get('show_client_info') || core_api.settings.get('allow_adhoc_commands');
+  return lit_html_html(templates_profile_templateObject(), o.fullname, show_settings_button ? lit_html_html(templates_profile_templateObject2(), i18n_details, o.showUserSettingsModal) : '', core_api.settings.get('allow_logout') ? lit_html_html(templates_profile_templateObject3(), i18n_logout) : '', i18n_change_status, o.chat_status, o.chat_status, o.chat_status === 'online' && 'fa fa-circle chat-status chat-status--online', o.chat_status === 'dnd' && 'fa fa-minus-circle chat-status chat-status--busy', o.chat_status === 'away' && 'fa fa-circle chat-status chat-status--away', o.chat_status === 'xa' && 'far fa-circle chat-status chat-status--xa ', o.chat_status === 'offline' && 'fa fa-circle chat-status chat-status--offline', o.status_message);
 });
-// CONCATENATED MODULE: ./src/converse-profile.js
+// CONCATENATED MODULE: ./src/plugins/profile.js
 /**
  * @module converse-profile
  * @copyright The Converse.js contributors
@@ -101811,11 +106634,6 @@ const omemo_page = o => {
 
 
 
-
-
-
-
-const converse_profile_u = converse.env.utils;
 converse.plugins.add('converse-profile', {
   dependencies: ["converse-status", "converse-modal", "converse-vcard", "converse-chatboxviews"],
 
@@ -101823,146 +106641,11 @@ converse.plugins.add('converse-profile', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'allow_adhoc_commands': true,
       'show_client_info': true
     });
-    converse_core_converse.ProfileModal = BootstrapModal.extend({
-      id: "user-profile-modal",
-      events: {
-        'submit .profile-form': 'onFormSubmitted'
-      },
-
-      initialize() {
-        this.listenTo(this.model, 'change', this.render);
-        BootstrapModal.prototype.initialize.apply(this, arguments);
-        /**
-         * Triggered when the _converse.ProfileModal has been created and initialized.
-         * @event _converse#profileModalInitialized
-         * @type { _converse.XMPPStatus }
-         * @example _converse.api.listen.on('profileModalInitialized', status => { ... });
-         */
-
-        converse_core_api.trigger('profileModalInitialized', this.model);
-      },
-
-      toHTML() {
-        return profile_modal(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), this.getAvatarData(), {
-          'view': this
-        }));
-      },
-
-      getAvatarData() {
-        const image_type = this.model.vcard.get('image_type');
-        const image_data = this.model.vcard.get('image');
-        const image = "data:" + image_type + ";base64," + image_data;
-        return {
-          'height': 128,
-          'width': 128,
-          image
-        };
-      },
-
-      afterRender() {
-        this.tabs = sizzle_default()('.nav-item .nav-link', this.el).map(e => new bootstrap_native_default.a.Tab(e));
-      },
-
-      async setVCard(data) {
-        try {
-          await converse_core_api.vcard.set(converse_core_converse.bare_jid, data);
-        } catch (err) {
-          headless_log.fatal(err);
-          this.alert([i18n_("Sorry, an error happened while trying to save your profile data."), i18n_("You can check your browser's developer console for any error output.")].join(" "));
-          return;
-        }
-
-        this.modal.hide();
-      },
-
-      onFormSubmitted(ev) {
-        ev.preventDefault();
-        const reader = new FileReader();
-        const form_data = new FormData(ev.target);
-        const image_file = form_data.get('image');
-        const data = {
-          'fn': form_data.get('fn'),
-          'nickname': form_data.get('nickname'),
-          'role': form_data.get('role'),
-          'email': form_data.get('email'),
-          'url': form_data.get('url')
-        };
-
-        if (!image_file.size) {
-          Object.assign(data, {
-            'image': this.model.vcard.get('image'),
-            'image_type': this.model.vcard.get('image_type')
-          });
-          this.setVCard(data);
-        } else {
-          reader.onloadend = () => {
-            Object.assign(data, {
-              'image': btoa(reader.result),
-              'image_type': image_file.type
-            });
-            this.setVCard(data);
-          };
-
-          reader.readAsBinaryString(image_file);
-        }
-      }
-
-    });
-    converse_core_converse.ChatStatusModal = BootstrapModal.extend({
-      id: "modal-status-change",
-      events: {
-        "submit form#set-xmpp-status": "onFormSubmitted",
-        "click .clear-input": "clearStatusMessage"
-      },
-
-      toHTML() {
-        return chat_status_modal(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
-          'label_away': i18n_('Away'),
-          'label_busy': i18n_('Busy'),
-          'label_cancel': i18n_('Cancel'),
-          'label_close': i18n_('Close'),
-          'label_custom_status': i18n_('Custom status'),
-          'label_offline': i18n_('Offline'),
-          'label_online': i18n_('Online'),
-          'label_save': i18n_('Save'),
-          'label_xa': i18n_('Away for long'),
-          'modal_title': i18n_('Change chat status'),
-          'placeholder_status_message': i18n_('Personal status message')
-        }));
-      },
-
-      afterRender() {
-        this.el.addEventListener('shown.bs.modal', () => {
-          this.el.querySelector('input[name="status_message"]').focus();
-        }, false);
-      },
-
-      clearStatusMessage(ev) {
-        if (ev && ev.preventDefault) {
-          ev.preventDefault();
-          converse_profile_u.hideElement(this.el.querySelector('.clear-input'));
-        }
-
-        const roster_filter = this.el.querySelector('input[name="status_message"]');
-        roster_filter.value = '';
-      },
-
-      onFormSubmitted(ev) {
-        ev.preventDefault();
-        const data = new FormData(ev.target);
-        this.model.save({
-          'status_message': data.get('status_message'),
-          'status': data.get('chat_status')
-        });
-        this.modal.hide();
-      }
-
-    });
-    converse_core_converse.XMPPStatusView = converse_core_converse.ViewWithAvatar.extend({
+    core_converse.XMPPStatusView = core_converse.ViewWithAvatar.extend({
       tagName: "div",
       events: {
         "click a.show-profile": "showProfileModal",
@@ -101977,9 +106660,9 @@ converse.plugins.add('converse-profile', {
 
       toHTML() {
         const chat_status = this.model.get('status') || 'offline';
-        return profile(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
+        return templates_profile(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), {
           chat_status,
-          'fullname': this.model.vcard.get('fullname') || converse_core_converse.bare_jid,
+          'fullname': this.model.vcard.get('fullname') || core_converse.bare_jid,
           "showUserSettingsModal": ev => this.showUserSettingsModal(ev),
           'status_message': this.model.get('status_message') || i18n_("I am %1$s", this.getPrettyStatus(chat_status))
         }));
@@ -101991,39 +106674,24 @@ converse.plugins.add('converse-profile', {
 
       showProfileModal(ev) {
         ev.preventDefault();
-
-        if (this.profile_modal === undefined) {
-          this.profile_modal = new converse_core_converse.ProfileModal({
-            model: this.model
-          });
-        }
-
-        this.profile_modal.show(ev);
+        core_api.modal.show(core_converse.ProfileModal, {
+          model: this.model
+        }, ev);
       },
 
       showStatusChangeModal(ev) {
         ev.preventDefault();
-
-        if (this.status_modal === undefined) {
-          this.status_modal = new converse_core_converse.ChatStatusModal({
-            model: this.model
-          });
-        }
-
-        this.status_modal.show(ev);
+        core_api.modal.show(core_converse.ChatStatusModal, {
+          model: this.model
+        }, ev);
       },
 
       showUserSettingsModal(ev) {
         ev.preventDefault();
-
-        if (this.user_settings_modal === undefined) {
-          this.user_settings_modal = new modals_user_settings({
-            model: this.model,
-            _converse: converse_core_converse
-          });
-        }
-
-        this.user_settings_modal.show(ev);
+        core_api.modal.show(modals_user_settings, {
+          model: this.model,
+          _converse: core_converse
+        }, ev);
       },
 
       logOut(ev) {
@@ -102031,7 +106699,7 @@ converse.plugins.add('converse-profile', {
         const result = confirm(i18n_("Are you sure you want to log out?"));
 
         if (result === true) {
-          converse_core_api.user.logout();
+          core_api.user.logout();
         }
       },
 
@@ -102054,12 +106722,12 @@ converse.plugins.add('converse-profile', {
     });
     /******************** Event Handlers ********************/
 
-    converse_core_api.listen.on('controlBoxPaneInitialized', async view => {
-      await converse_core_api.waitUntil('VCardsInitialized');
-      converse_core_converse.xmppstatusview = new converse_core_converse.XMPPStatusView({
-        'model': converse_core_converse.xmppstatus
+    core_api.listen.on('controlBoxPaneInitialized', async view => {
+      await core_api.waitUntil('VCardsInitialized');
+      core_converse.xmppstatusview = new core_converse.XMPPStatusView({
+        'model': core_converse.xmppstatus
       });
-      view.el.insertAdjacentElement('afterBegin', converse_core_converse.xmppstatusview.render().el);
+      view.el.insertAdjacentElement('afterBegin', core_converse.xmppstatusview.render().el);
     });
   }
 
@@ -102219,18 +106887,18 @@ var range = _createRange();
 
 /* harmony default export */ var lodash_es_range = (range);
 
-// CONCATENATED MODULE: ./src/converse-omemo.js
-function converse_omemo_templateObject() {
-  const data = converse_omemo_taggedTemplateLiteral(["\n        <button class=\"toggle-omemo\"\n                title=\"", "\"\n                ?disabled=", "\n                @click=", ">\n        <converse-icon class=\"fa ", "\"\n                    path-prefix=\"", "\" size=\"1em\"\n                    color=\"", "\"\n        ></converse-icon>\n        </button>"]);
+// CONCATENATED MODULE: ./src/plugins/omemo.js
+function omemo_templateObject() {
+  const data = omemo_taggedTemplateLiteral(["\n        <button class=\"toggle-omemo\"\n                title=\"", "\"\n                ?disabled=", "\n                @click=", ">\n        <converse-icon class=\"fa ", "\"\n                    path-prefix=\"", "\" size=\"1em\"\n                    color=\"", "\"\n        ></converse-icon>\n        </button>"]);
 
-  converse_omemo_templateObject = function _templateObject() {
+  omemo_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function converse_omemo_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function omemo_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 /**
  * @module converse-omemo
@@ -102247,18 +106915,19 @@ function converse_omemo_taggedTemplateLiteral(strings, raw) { if (!raw) { raw =
 
 
 
+
 const {
-  Strophe: converse_omemo_Strophe,
-  sizzle: converse_omemo_sizzle,
-  $build: converse_omemo_$build,
-  $iq: converse_omemo_$iq,
-  $msg: converse_omemo_$msg
+  Strophe: omemo_Strophe,
+  sizzle: omemo_sizzle,
+  $build: omemo_$build,
+  $iq: omemo_$iq,
+  $msg: omemo_$msg
 } = converse.env;
-const converse_omemo_u = converse.env.utils;
-converse_omemo_Strophe.addNamespace('OMEMO_DEVICELIST', converse_omemo_Strophe.NS.OMEMO + ".devicelist");
-converse_omemo_Strophe.addNamespace('OMEMO_VERIFICATION', converse_omemo_Strophe.NS.OMEMO + ".verification");
-converse_omemo_Strophe.addNamespace('OMEMO_WHITELISTED', converse_omemo_Strophe.NS.OMEMO + ".whitelisted");
-converse_omemo_Strophe.addNamespace('OMEMO_BUNDLES', converse_omemo_Strophe.NS.OMEMO + ".bundles");
+const omemo_u = converse.env.utils;
+omemo_Strophe.addNamespace('OMEMO_DEVICELIST', omemo_Strophe.NS.OMEMO + ".devicelist");
+omemo_Strophe.addNamespace('OMEMO_VERIFICATION', omemo_Strophe.NS.OMEMO + ".verification");
+omemo_Strophe.addNamespace('OMEMO_WHITELISTED', omemo_Strophe.NS.OMEMO + ".whitelisted");
+omemo_Strophe.addNamespace('OMEMO_BUNDLES', omemo_Strophe.NS.OMEMO + ".bundles");
 const UNDECIDED = 0;
 const TRUSTED = 1; // eslint-disable-line no-unused-vars
 
@@ -102278,6 +106947,52 @@ class IQError extends Error {
 
 }
 
+function parseEncryptedMessage(stanza, attrs) {
+  if (attrs.is_encrypted && attrs.encrypted.key) {
+    // https://xmpp.org/extensions/xep-0384.html#usecases-receiving
+    if (attrs.encrypted.prekey === true) {
+      return decryptPrekeyWhisperMessage(attrs);
+    } else {
+      return decryptWhisperMessage(attrs);
+    }
+  } else {
+    return attrs;
+  }
+}
+
+function onChatBoxesInitialized() {
+  core_converse.chatboxes.on('add', chatbox => {
+    checkOMEMOSupported(chatbox);
+
+    if (chatbox.get('type') === core_converse.CHATROOMS_TYPE) {
+      chatbox.occupants.on('add', o => onOccupantAdded(chatbox, o));
+      chatbox.features.on('change', () => checkOMEMOSupported(chatbox));
+    }
+  });
+}
+
+function onChatInitialized(view) {
+  view.listenTo(view.model.messages, 'add', message => {
+    if (message.get('is_encrypted') && !message.get('is_error')) {
+      view.model.save('omemo_supported', true);
+    }
+  });
+  view.listenTo(view.model, 'change:omemo_supported', () => {
+    if (!view.model.get('omemo_supported') && view.model.get('omemo_active')) {
+      view.model.set('omemo_active', false);
+    } else {
+      var _view$el$querySelecto;
+
+      // Manually trigger an update, setting omemo_active to
+      // false above will automatically trigger one.
+      (_view$el$querySelecto = view.el.querySelector('converse-chat-toolbar')) === null || _view$el$querySelecto === void 0 ? void 0 : _view$el$querySelecto.requestUpdate();
+    }
+  });
+  view.listenTo(view.model, 'change:omemo_active', () => {
+    view.el.querySelector('converse-chat-toolbar').requestUpdate();
+  });
+}
+
 const omemo = converse.env.omemo = {
   async encryptMessage(plaintext) {
     // The client MUST use fresh, randomly generated key/IV pairs
@@ -102296,7 +107011,7 @@ const omemo = converse.env.omemo = {
       'iv': iv,
       'tagLength': TAG_LENGTH
     },
-          encrypted = await crypto.subtle.encrypt(algo, key, converse_omemo_u.stringToArrayBuffer(plaintext)),
+          encrypted = await crypto.subtle.encrypt(algo, key, omemo_u.stringToArrayBuffer(plaintext)),
           length = encrypted.byteLength - (128 + 7 >> 3),
           ciphertext = encrypted.slice(0, length),
           tag = encrypted.slice(length),
@@ -102304,34 +107019,34 @@ const omemo = converse.env.omemo = {
     return {
       'key': exported_key,
       'tag': tag,
-      'key_and_tag': converse_omemo_u.appendArrayBuffer(exported_key, tag),
-      'payload': converse_omemo_u.arrayBufferToBase64(ciphertext),
-      'iv': converse_omemo_u.arrayBufferToBase64(iv)
+      'key_and_tag': omemo_u.appendArrayBuffer(exported_key, tag),
+      'payload': omemo_u.arrayBufferToBase64(ciphertext),
+      'iv': omemo_u.arrayBufferToBase64(iv)
     };
   },
 
   async decryptMessage(obj) {
     const key_obj = await crypto.subtle.importKey('raw', obj.key, KEY_ALGO, true, ['encrypt', 'decrypt']);
-    const cipher = converse_omemo_u.appendArrayBuffer(converse_omemo_u.base64ToArrayBuffer(obj.payload), obj.tag);
+    const cipher = omemo_u.appendArrayBuffer(omemo_u.base64ToArrayBuffer(obj.payload), obj.tag);
     const algo = {
       'name': "AES-GCM",
-      'iv': converse_omemo_u.base64ToArrayBuffer(obj.iv),
+      'iv': omemo_u.base64ToArrayBuffer(obj.iv),
       'tagLength': TAG_LENGTH
     };
-    return converse_omemo_u.arrayBufferToString(await crypto.subtle.decrypt(algo, key_obj, cipher));
+    return omemo_u.arrayBufferToString(await crypto.subtle.decrypt(algo, key_obj, cipher));
   }
 
 };
 
 function getSessionCipher(jid, id) {
   const address = new libsignal.SignalProtocolAddress(jid, id);
-  return new window.libsignal.SessionCipher(converse_core_converse.omemo_store, address);
+  return new window.libsignal.SessionCipher(core_converse.omemo_store, address);
 }
 
 async function handleDecryptedWhisperMessage(attrs, key_and_tag) {
   const encrypted = attrs.encrypted;
 
-  const devicelist = converse_core_converse.devicelists.getDeviceList(attrs.from);
+  const devicelist = core_converse.devicelists.getDeviceList(attrs.from);
 
   await devicelist._devices_promise;
   let device = devicelist.get(encrypted.device_id);
@@ -102358,7 +107073,7 @@ async function handleDecryptedWhisperMessage(attrs, key_and_tag) {
 }
 
 function getDecryptionErrorAttributes(e) {
-  if (converse_core_api.settings.get("loglevel") === 'debug') {
+  if (core_api.settings.get("loglevel") === 'debug') {
     return {
       'error_text': i18n_("Sorry, could not decrypt a received OMEMO message due to an error.") + " ".concat(e.name, " ").concat(e.message),
       'error_type': 'Decryption',
@@ -102373,7 +107088,7 @@ function getDecryptionErrorAttributes(e) {
 
 async function decryptPrekeyWhisperMessage(attrs) {
   const session_cipher = getSessionCipher(attrs.from, parseInt(attrs.encrypted.device_id, 10));
-  const key = converse_omemo_u.base64ToArrayBuffer(attrs.encrypted.key);
+  const key = omemo_u.base64ToArrayBuffer(attrs.encrypted.key);
   let key_and_tag;
 
   try {
@@ -102407,8 +107122,8 @@ async function decryptPrekeyWhisperMessage(attrs) {
 
   try {
     const plaintext = await handleDecryptedWhisperMessage(attrs, key_and_tag);
-    await converse_core_converse.omemo_store.generateMissingPreKeys();
-    await converse_core_converse.omemo_store.publishBundle();
+    await core_converse.omemo_store.generateMissingPreKeys();
+    await core_converse.omemo_store.publishBundle();
 
     if (plaintext) {
       return Object.assign(attrs, {
@@ -102439,7 +107154,7 @@ async function decryptWhisperMessage(attrs) {
   }
 
   const session_cipher = getSessionCipher(from_jid, parseInt(attrs.encrypted.device_id, 10));
-  const key = converse_omemo_u.base64ToArrayBuffer(attrs.encrypted.key);
+  const key = omemo_u.base64ToArrayBuffer(attrs.encrypted.key);
 
   try {
     const key_and_tag = await session_cipher.decryptWhisperMessage(key, 'binary');
@@ -102486,7 +107201,7 @@ function parseBundle(bundle_el) {
    */
   const signed_prekey_public_el = bundle_el.querySelector('signedPreKeyPublic');
   const signed_prekey_signature_el = bundle_el.querySelector('signedPreKeySignature');
-  const prekeys = converse_omemo_sizzle("prekeys > preKeyPublic", bundle_el).map(el => ({
+  const prekeys = omemo_sizzle("prekeys > preKeyPublic", bundle_el).map(el => ({
     'id': parseInt(el.getAttribute('preKeyId'), 10),
     'key': el.textContent
   }));
@@ -102509,15 +107224,15 @@ async function generateFingerprint(device) {
   }
 
   const bundle = await device.getBundle();
-  bundle['fingerprint'] = converse_omemo_u.arrayBufferToHex(converse_omemo_u.base64ToArrayBuffer(bundle['identity_key']));
+  bundle['fingerprint'] = omemo_u.arrayBufferToHex(omemo_u.base64ToArrayBuffer(bundle['identity_key']));
   device.save('bundle', bundle);
   device.trigger('change:bundle'); // Doesn't get triggered automatically due to pass-by-reference
 }
 
 async function getDevicesForContact(jid) {
-  await converse_core_api.waitUntil('OMEMOInitialized');
+  await core_api.waitUntil('OMEMOInitialized');
 
-  const devicelist = converse_core_converse.devicelists.get(jid) || converse_core_converse.devicelists.create({
+  const devicelist = core_converse.devicelists.get(jid) || core_converse.devicelists.create({
     'jid': jid
   });
 
@@ -102527,7 +107242,7 @@ async function getDevicesForContact(jid) {
 
 function generateDeviceID() {
   /* Generates a device ID, making sure that it's unique */
-  const existing_ids = converse_core_converse.devicelists.get(converse_core_converse.bare_jid).devices.pluck('id');
+  const existing_ids = core_converse.devicelists.get(core_converse.bare_jid).devices.pluck('id');
 
   let device_id = libsignal.KeyHelper.generateRegistrationId(); // Before publishing a freshly generated device id for the first time,
   // a device MUST check whether that device id already exists, and if so, generate a new one.
@@ -102551,22 +107266,22 @@ async function buildSession(device) {
   // to build a session when receiving an encrypted message in a MUC.
   // https://github.com/conversejs/converse.js/issues/1481#issuecomment-509183431
   const address = new libsignal.SignalProtocolAddress(device.get('jid'), device.get('id'));
-  const sessionBuilder = new libsignal.SessionBuilder(converse_core_converse.omemo_store, address);
+  const sessionBuilder = new libsignal.SessionBuilder(core_converse.omemo_store, address);
   const prekey = device.getRandomPreKey();
   const bundle = await device.getBundle();
   return sessionBuilder.processPreKey({
     'registrationId': parseInt(device.get('id'), 10),
-    'identityKey': converse_omemo_u.base64ToArrayBuffer(bundle.identity_key),
+    'identityKey': omemo_u.base64ToArrayBuffer(bundle.identity_key),
     'signedPreKey': {
       'keyId': bundle.signed_prekey.id,
       // <Number>
-      'publicKey': converse_omemo_u.base64ToArrayBuffer(bundle.signed_prekey.public_key),
-      'signature': converse_omemo_u.base64ToArrayBuffer(bundle.signed_prekey.signature)
+      'publicKey': omemo_u.base64ToArrayBuffer(bundle.signed_prekey.public_key),
+      'signature': omemo_u.base64ToArrayBuffer(bundle.signed_prekey.signature)
     },
     'preKey': {
       'keyId': prekey.id,
       // <Number>
-      'publicKey': converse_omemo_u.base64ToArrayBuffer(prekey.key)
+      'publicKey': omemo_u.base64ToArrayBuffer(prekey.key)
     }
   });
 }
@@ -102578,7 +107293,7 @@ async function getSession(device) {
   }
 
   const address = new libsignal.SignalProtocolAddress(device.get('jid'), device.get('id'));
-  const session = await converse_core_converse.omemo_store.loadSession(address.toString());
+  const session = await core_converse.omemo_store.loadSession(address.toString());
 
   if (session) {
     return session;
@@ -102595,17 +107310,17 @@ async function getSession(device) {
 }
 
 function updateBundleFromStanza(stanza) {
-  const items_el = converse_omemo_sizzle("items", stanza).pop();
+  const items_el = omemo_sizzle("items", stanza).pop();
 
-  if (!items_el || !items_el.getAttribute('node').startsWith(converse_omemo_Strophe.NS.OMEMO_BUNDLES)) {
+  if (!items_el || !items_el.getAttribute('node').startsWith(omemo_Strophe.NS.OMEMO_BUNDLES)) {
     return;
   }
 
   const device_id = items_el.getAttribute('node').split(':')[1];
   const jid = stanza.getAttribute('from');
-  const bundle_el = converse_omemo_sizzle("item > bundle", items_el).pop();
+  const bundle_el = omemo_sizzle("item > bundle", items_el).pop();
 
-  const devicelist = converse_core_converse.devicelists.getDeviceList(jid);
+  const devicelist = core_converse.devicelists.getDeviceList(jid);
 
   const device = devicelist.devices.get(device_id) || devicelist.devices.create({
     'id': device_id,
@@ -102617,22 +107332,22 @@ function updateBundleFromStanza(stanza) {
 }
 
 function updateDevicesFromStanza(stanza) {
-  const items_el = converse_omemo_sizzle("items[node=\"".concat(converse_omemo_Strophe.NS.OMEMO_DEVICELIST, "\"]"), stanza).pop();
+  const items_el = omemo_sizzle("items[node=\"".concat(omemo_Strophe.NS.OMEMO_DEVICELIST, "\"]"), stanza).pop();
 
   if (!items_el) {
     return;
   }
 
-  const device_selector = "item list[xmlns=\"".concat(converse_omemo_Strophe.NS.OMEMO, "\"] device");
-  const device_ids = converse_omemo_sizzle(device_selector, items_el).map(d => d.getAttribute('id'));
+  const device_selector = "item list[xmlns=\"".concat(omemo_Strophe.NS.OMEMO, "\"] device");
+  const device_ids = omemo_sizzle(device_selector, items_el).map(d => d.getAttribute('id'));
   const jid = stanza.getAttribute('from');
 
-  const devicelist = converse_core_converse.devicelists.getDeviceList(jid);
+  const devicelist = core_converse.devicelists.getDeviceList(jid);
 
   const devices = devicelist.devices;
   const removed_ids = lodash_es_difference(devices.pluck('id'), device_ids);
   removed_ids.forEach(id => {
-    if (jid === converse_core_converse.bare_jid && id === converse_core_converse.omemo_store.get('device_id')) {
+    if (jid === core_converse.bare_jid && id === core_converse.omemo_store.get('device_id')) {
       return; // We don't set the current device as inactive
     }
 
@@ -102651,7 +107366,7 @@ function updateDevicesFromStanza(stanza) {
     }
   });
 
-  if (converse_omemo_u.isSameBareJID(jid, converse_core_converse.bare_jid)) {
+  if (omemo_u.isSameBareJID(jid, core_converse.bare_jid)) {
     // Make sure our own device is on the list
     // (i.e. if it was removed, add it again).
     devicelist.publishCurrentDevice(device_ids);
@@ -102660,9 +107375,9 @@ function updateDevicesFromStanza(stanza) {
 
 function registerPEPPushHandler() {
   // Add a handler for devices pushed from other connected clients
-  converse_core_converse.connection.addHandler(message => {
+  core_converse.connection.addHandler(message => {
     try {
-      if (converse_omemo_sizzle("event[xmlns=\"".concat(converse_omemo_Strophe.NS.PUBSUB, "#event\"]"), message).length) {
+      if (omemo_sizzle("event[xmlns=\"".concat(omemo_Strophe.NS.PUBSUB, "#event\"]"), message).length) {
         updateDevicesFromStanza(message);
         updateBundleFromStanza(message);
       }
@@ -102675,34 +107390,34 @@ function registerPEPPushHandler() {
 }
 
 function restoreOMEMOSession() {
-  if (converse_core_converse.omemo_store === undefined) {
-    const id = "converse.omemosession-".concat(converse_core_converse.bare_jid);
-    converse_core_converse.omemo_store = new converse_core_converse.OMEMOStore({
+  if (core_converse.omemo_store === undefined) {
+    const id = "converse.omemosession-".concat(core_converse.bare_jid);
+    core_converse.omemo_store = new core_converse.OMEMOStore({
       'id': id
     });
-    converse_core_converse.omemo_store.browserStorage = converse_core_converse.createStore(id);
+    core_converse.omemo_store.browserStorage = core_converse.createStore(id);
   }
 
-  return converse_core_converse.omemo_store.fetchSession();
+  return core_converse.omemo_store.fetchSession();
 }
 
 function fetchDeviceLists() {
-  return new Promise((success, _error) => converse_core_converse.devicelists.fetch({
+  return new Promise((success, error) => core_converse.devicelists.fetch({
     success,
-    'error': (m, e) => _error(e)
+    'error': (m, e) => error(e)
   }));
 }
 
 async function fetchOwnDevices() {
   await fetchDeviceLists();
 
-  let own_devicelist = converse_core_converse.devicelists.get(converse_core_converse.bare_jid);
+  let own_devicelist = core_converse.devicelists.get(core_converse.bare_jid);
 
   if (own_devicelist) {
     own_devicelist.fetchDevices();
   } else {
-    own_devicelist = await converse_core_converse.devicelists.create({
-      'jid': converse_core_converse.bare_jid
+    own_devicelist = await core_converse.devicelists.create({
+      'jid': core_converse.bare_jid
     }, {
       'promise': true
     });
@@ -102712,18 +107427,19 @@ async function fetchOwnDevices() {
 }
 
 async function initOMEMO() {
-  if (!converse_core_converse.config.get('trusted')) {
+  if (!core_converse.config.get('trusted') || core_api.settings.get('clear_cache_on_logout')) {
+    headless_log.warn("Not initializing OMEMO, since this browser is not trusted or clear_cache_on_logout is set to true");
     return;
   }
 
-  converse_core_converse.devicelists = new converse_core_converse.DeviceLists();
-  const id = "converse.devicelists-".concat(converse_core_converse.bare_jid);
-  converse_core_converse.devicelists.browserStorage = converse_core_converse.createStore(id);
+  core_converse.devicelists = new core_converse.DeviceLists();
+  const id = "converse.devicelists-".concat(core_converse.bare_jid);
+  core_converse.devicelists.browserStorage = core_converse.createStore(id);
 
   try {
     await fetchOwnDevices();
     await restoreOMEMOSession();
-    await converse_core_converse.omemo_store.publishBundle();
+    await core_converse.omemo_store.publishBundle();
   } catch (e) {
     headless_log.error("Could not initialize OMEMO support");
     headless_log.error(e);
@@ -102735,7 +107451,7 @@ async function initOMEMO() {
    * @example _converse.api.listen.on('OMEMOInitialized', () => { ... }); */
 
 
-  converse_core_api.trigger('OMEMOInitialized');
+  core_api.trigger('OMEMOInitialized');
 }
 
 async function onOccupantAdded(chatroom, occupant) {
@@ -102744,7 +107460,7 @@ async function onOccupantAdded(chatroom, occupant) {
   }
 
   if (chatroom.get('omemo_active')) {
-    const supported = await converse_core_converse.contactHasOMEMOSupport(occupant.get('jid'));
+    const supported = await core_converse.contactHasOMEMOSupport(occupant.get('jid'));
 
     if (!supported) {
       chatroom.createMessage({
@@ -102762,16 +107478,16 @@ async function onOccupantAdded(chatroom, occupant) {
 async function checkOMEMOSupported(chatbox) {
   let supported;
 
-  if (chatbox.get('type') === converse_core_converse.CHATROOMS_TYPE) {
-    await converse_core_api.waitUntil('OMEMOInitialized');
+  if (chatbox.get('type') === core_converse.CHATROOMS_TYPE) {
+    await core_api.waitUntil('OMEMOInitialized');
     supported = chatbox.features.get('nonanonymous') && chatbox.features.get('membersonly');
-  } else if (chatbox.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
-    supported = await converse_core_converse.contactHasOMEMOSupport(chatbox.get('jid'));
+  } else if (chatbox.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
+    supported = await core_converse.contactHasOMEMOSupport(chatbox.get('jid'));
   }
 
   chatbox.set('omemo_supported', supported);
 
-  if (supported && converse_core_api.settings.get('omemo_default')) {
+  if (supported && core_api.settings.get('omemo_default')) {
     chatbox.set('omemo_active', true);
   }
 }
@@ -102779,18 +107495,18 @@ async function checkOMEMOSupported(chatbox) {
 function toggleOMEMO(ev) {
   ev.stopPropagation();
   ev.preventDefault();
-  const toolbar_el = converse_omemo_u.ancestor(ev.target, 'converse-chat-toolbar');
+  const toolbar_el = omemo_u.ancestor(ev.target, 'converse-chat-toolbar');
 
   if (!toolbar_el.model.get('omemo_supported')) {
     let messages;
 
-    if (toolbar_el.model.get('type') === converse_core_converse.CHATROOMS_TYPE) {
+    if (toolbar_el.model.get('type') === core_converse.CHATROOMS_TYPE) {
       messages = [i18n_('Cannot use end-to-end encryption in this groupchat, ' + 'either the groupchat has some anonymity or not all participants support OMEMO.')];
     } else {
       messages = [i18n_("Cannot use end-to-end encryption because %1$s uses a client that doesn't support OMEMO.", toolbar_el.model.contact.getDisplayName())];
     }
 
-    return converse_core_api.alert('error', i18n_('Error'), messages);
+    return core_api.alert('error', i18n_('Error'), messages);
   }
 
   toolbar_el.model.save({
@@ -102801,7 +107517,7 @@ function toggleOMEMO(ev) {
 function getOMEMOToolbarButton(toolbar_el, buttons) {
   const model = toolbar_el.model;
 
-  const is_muc = model.get('type') === converse_core_converse.CHATROOMS_TYPE;
+  const is_muc = model.get('type') === core_converse.CHATROOMS_TYPE;
 
   let title;
 
@@ -102815,13 +107531,53 @@ function getOMEMOToolbarButton(toolbar_el, buttons) {
     title = i18n_('This groupchat needs to be members-only and non-anonymous in ' + 'order to support OMEMO encrypted messages');
   }
 
-  buttons.push(lit_html_html(converse_omemo_templateObject(), title, !model.get('omemo_supported'), toggleOMEMO, model.get('omemo_active') ? "fa-lock" : "fa-unlock", converse_core_api.settings.get('assets_path'), model.get('omemo_active') ? "var(--info-color)" : "var(--error-color)"));
+  buttons.push(lit_html_html(omemo_templateObject(), title, !model.get('omemo_supported'), toggleOMEMO, model.get('omemo_active') ? "fa-lock" : "fa-unlock", core_api.settings.get('assets_path'), model.get('omemo_active') ? "var(--info-color)" : "var(--error-color)"));
   return buttons;
 }
+/**
+ * Mixin object that contains OMEMO-related methods for
+ * {@link _converse.ChatBox} or {@link _converse.ChatRoom} objects.
+ *
+ * @typedef {Object} OMEMOEnabledChatBox
+ */
+
+
+const OMEMOEnabledChatBox = {
+  encryptKey(plaintext, device) {
+    return getSessionCipher(device.get('jid'), device.get('id')).encrypt(plaintext).then(payload => ({
+      'payload': payload,
+      'device': device
+    }));
+  },
+
+  handleMessageSendError(e) {
+    if (e.name === 'IQError') {
+      this.save('omemo_supported', false);
+      const err_msgs = [];
+
+      if (omemo_sizzle("presence-subscription-required[xmlns=\"".concat(omemo_Strophe.NS.PUBSUB_ERROR, "\"]"), e.iq).length) {
+        err_msgs.push(i18n_("Sorry, we're unable to send an encrypted message because %1$s " + "requires you to be subscribed to their presence in order to see their OMEMO information", e.iq.getAttribute('from')));
+      } else if (omemo_sizzle("remote-server-not-found[xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"]", e.iq).length) {
+        err_msgs.push(i18n_("Sorry, we're unable to send an encrypted message because the remote server for %1$s could not be found", e.iq.getAttribute('from')));
+      } else {
+        err_msgs.push(i18n_("Unable to send an encrypted message due to an unexpected error."));
+        err_msgs.push(e.iq.outerHTML);
+      }
+
+      core_api.alert('error', i18n_('Error'), err_msgs);
+      headless_log.error(e);
+    } else if (e.user_facing) {
+      core_api.alert('error', i18n_('Error'), [e.message]);
+      headless_log.error(e);
+    } else {
+      throw e;
+    }
+  }
 
+};
 converse.plugins.add('converse-omemo', {
   enabled(_converse) {
-    return window.libsignal && !_converse.api.settings.get("blacklisted_plugins").includes('converse-omemo') && _converse.config.get('trusted');
+    return window.libsignal && _converse.config.get('trusted') && !core_api.settings.get('clear_cache_on_logout') && !_converse.api.settings.get("blacklisted_plugins").includes('converse-omemo');
   },
 
   dependencies: ["converse-chatview", "converse-pubsub", "converse-profile"],
@@ -102835,7 +107591,7 @@ converse.plugins.add('converse-omemo', {
 
       initialize() {
         this.debouncedRender = lodash_es_debounce(this.render, 50);
-        this.devicelist = converse_core_converse.devicelists.get(converse_core_converse.bare_jid);
+        this.devicelist = core_converse.devicelists.get(core_converse.bare_jid);
         this.listenTo(this.devicelist.devices, 'change:bundle', this.debouncedRender);
         this.listenTo(this.devicelist.devices, 'reset', this.debouncedRender);
         this.listenTo(this.devicelist.devices, 'reset', this.debouncedRender);
@@ -102845,7 +107601,7 @@ converse.plugins.add('converse-omemo', {
       },
 
       beforeRender() {
-        const device_id = converse_core_converse.omemo_store.get('device_id');
+        const device_id = core_converse.omemo_store.get('device_id');
 
         if (device_id) {
           this.current_device = this.devicelist.devices.get(device_id);
@@ -102859,7 +107615,7 @@ converse.plugins.add('converse-omemo', {
       },
 
       selectAll(ev) {
-        let sibling = converse_omemo_u.ancestor(ev.target, 'li');
+        let sibling = omemo_u.ancestor(ev.target, 'li');
 
         while (sibling) {
           sibling.querySelector('input[type="checkbox"]').checked = ev.target.checked;
@@ -102871,11 +107627,11 @@ converse.plugins.add('converse-omemo', {
         ev.preventDefault();
         ev.stopPropagation();
         ev.target.querySelector('.select-all').checked = false;
-        const device_ids = converse_omemo_sizzle('.fingerprint-removal-item input[type="checkbox"]:checked', ev.target).map(c => c.value);
+        const device_ids = omemo_sizzle('.fingerprint-removal-item input[type="checkbox"]:checked', ev.target).map(c => c.value);
         this.devicelist.removeOwnDevices(device_ids).then(this.modal.hide).catch(err => {
           headless_log.error(err);
 
-          converse_core_converse.api.alert(converse_omemo_Strophe.LogLevel.ERROR, i18n_('Error'), [i18n_('Sorry, an error occurred while trying to remove the devices.')]);
+          core_converse.api.alert(omemo_Strophe.LogLevel.ERROR, i18n_('Error'), [i18n_('Sorry, an error occurred while trying to remove the devices.')]);
         });
       },
 
@@ -102883,7 +107639,7 @@ converse.plugins.add('converse-omemo', {
         ev.preventDefault();
 
         if (confirm(i18n_("Are you sure you want to generate new OMEMO keys? " + "This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device."))) {
-          converse_core_api.omemo.bundle.generate();
+          core_api.omemo.bundle.generate();
         }
       }
 
@@ -102895,7 +107651,7 @@ converse.plugins.add('converse-omemo', {
 
       initialize() {
         const jid = this.model.get('jid');
-        this.devicelist = converse_core_converse.devicelists.getDeviceList(jid);
+        this.devicelist = core_converse.devicelists.getDeviceList(jid);
         this.listenTo(this.devicelist.devices, 'change:bundle', this.render);
         this.listenTo(this.devicelist.devices, 'change:trusted', this.render);
         this.listenTo(this.devicelist.devices, 'remove', this.render);
@@ -102920,15 +107676,15 @@ converse.plugins.add('converse-omemo', {
           let message, stanza;
 
           try {
-            const devices = await converse_core_converse.getBundlesAndBuildSessions(this);
+            const devices = await core_converse.getBundlesAndBuildSessions(this);
             message = await this.createMessage(attrs);
-            stanza = await converse_core_converse.createOMEMOMessageStanza(this, message, devices);
+            stanza = await core_converse.createOMEMOMessageStanza(this, message, devices);
           } catch (e) {
             this.handleMessageSendError(e);
             return null;
           }
 
-          converse_core_converse.api.send(stanza);
+          core_converse.api.send(stanza);
 
           return message;
         } else {
@@ -102943,78 +107699,38 @@ converse.plugins.add('converse-omemo', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by Converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'omemo_default': false
     });
-    converse_core_api.promises.add(['OMEMOInitialized']);
-    converse_core_converse.NUM_PREKEYS = 100; // Set here so that tests can override
-
-    /**
-     * Mixin object that contains OMEMO-related methods for
-     * {@link _converse.ChatBox} or {@link _converse.ChatRoom} objects.
-     *
-     * @typedef {Object} OMEMOEnabledChatBox
-     */
-
-    const OMEMOEnabledChatBox = {
-      encryptKey(plaintext, device) {
-        return getSessionCipher(device.get('jid'), device.get('id')).encrypt(plaintext).then(payload => ({
-          'payload': payload,
-          'device': device
-        }));
-      },
+    core_api.promises.add(['OMEMOInitialized']);
+    core_converse.NUM_PREKEYS = 100; // Set here so that tests can override
 
-      handleMessageSendError(e) {
-        if (e.name === 'IQError') {
-          this.save('omemo_supported', false);
-          const err_msgs = [];
+    Object.assign(core_converse.ChatBox.prototype, OMEMOEnabledChatBox);
 
-          if (converse_omemo_sizzle("presence-subscription-required[xmlns=\"".concat(converse_omemo_Strophe.NS.PUBSUB_ERROR, "\"]"), e.iq).length) {
-            err_msgs.push(i18n_("Sorry, we're unable to send an encrypted message because %1$s " + "requires you to be subscribed to their presence in order to see their OMEMO information", e.iq.getAttribute('from')));
-          } else if (converse_omemo_sizzle("remote-server-not-found[xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"]", e.iq).length) {
-            err_msgs.push(i18n_("Sorry, we're unable to send an encrypted message because the remote server for %1$s could not be found", e.iq.getAttribute('from')));
-          } else {
-            err_msgs.push(i18n_("Unable to send an encrypted message due to an unexpected error."));
-            err_msgs.push(e.iq.outerHTML);
-          }
-
-          converse_core_api.alert('error', i18n_('Error'), err_msgs);
-          headless_log.error(e);
-        } else if (e.user_facing) {
-          converse_core_api.alert('error', i18n_('Error'), [e.message]);
-          headless_log.error(e);
-        } else {
-          throw e;
-        }
-      }
-
-    };
-    Object.assign(converse_core_converse.ChatBox.prototype, OMEMOEnabledChatBox);
-
-    converse_core_converse.generateFingerprints = async function (jid) {
+    core_converse.generateFingerprints = async function (jid) {
       const devices = await getDevicesForContact(jid);
       return Promise.all(devices.map(d => generateFingerprint(d)));
     };
 
-    converse_core_converse.getDeviceForContact = function (jid, device_id) {
+    core_converse.getDeviceForContact = function (jid, device_id) {
       return getDevicesForContact(jid).then(devices => devices.get(device_id));
     };
 
-    converse_core_converse.contactHasOMEMOSupport = async function (jid) {
+    core_converse.contactHasOMEMOSupport = async function (jid) {
       /* Checks whether the contact advertises any OMEMO-compatible devices. */
       const devices = await getDevicesForContact(jid);
       return devices.length > 0;
     };
 
-    converse_core_converse.getBundlesAndBuildSessions = async function (chatbox) {
+    core_converse.getBundlesAndBuildSessions = async function (chatbox) {
       const no_devices_err = i18n_("Sorry, no devices found to which we can send an OMEMO encrypted message.");
 
       let devices;
 
-      if (chatbox.get('type') === converse_core_converse.CHATROOMS_TYPE) {
+      if (chatbox.get('type') === core_converse.CHATROOMS_TYPE) {
         const collections = await Promise.all(chatbox.occupants.map(o => getDevicesForContact(o.get('jid'))));
         devices = collections.reduce((a, b) => lodash_es_concat(a, b.models), []);
-      } else if (chatbox.get('type') === converse_core_converse.PRIVATE_CHAT_TYPE) {
+      } else if (chatbox.get('type') === core_converse.PRIVATE_CHAT_TYPE) {
         const their_devices = await getDevicesForContact(chatbox.get('jid'));
 
         if (their_devices.length === 0) {
@@ -103023,13 +107739,13 @@ converse.plugins.add('converse-omemo', {
           throw err;
         }
 
-        const own_devices = converse_core_converse.devicelists.get(converse_core_converse.bare_jid).devices;
+        const own_devices = core_converse.devicelists.get(core_converse.bare_jid).devices;
 
         devices = [...own_devices.models, ...their_devices.models];
       } // Filter out our own device
 
 
-      const id = converse_core_converse.omemo_store.get('device_id');
+      const id = core_converse.omemo_store.get('device_id');
 
       devices = devices.filter(d => d.get('id') !== id); // Fetch bundles if necessary
 
@@ -103051,15 +107767,15 @@ converse.plugins.add('converse-omemo', {
       return devices;
     };
 
-    converse_core_converse.createOMEMOMessageStanza = function (chatbox, message, devices) {
+    core_converse.createOMEMOMessageStanza = function (chatbox, message, devices) {
       const body = i18n_("This is an OMEMO encrypted message which your client doesn’t seem to support. " + "Find more information on https://conversations.im/omemo");
 
       if (!message.get('message')) {
         throw new Error("No message body to encrypt!");
       }
 
-      const stanza = converse_omemo_$msg({
-        'from': converse_core_converse.connection.jid,
+      const stanza = omemo_$msg({
+        'from': core_converse.connection.jid,
         'to': chatbox.get('jid'),
         'type': chatbox.get('message_type'),
         'id': message.get('msgid')
@@ -103067,7 +107783,7 @@ converse.plugins.add('converse-omemo', {
 
       if (message.get('type') === 'chat') {
         stanza.c('request', {
-          'xmlns': converse_omemo_Strophe.NS.RECEIPTS
+          'xmlns': omemo_Strophe.NS.RECEIPTS
         }).up();
       } // An encrypted header is added to the message for
       // each device that is supposed to receive it.
@@ -103078,9 +107794,9 @@ converse.plugins.add('converse-omemo', {
 
 
       stanza.c('encrypted', {
-        'xmlns': converse_omemo_Strophe.NS.OMEMO
+        'xmlns': omemo_Strophe.NS.OMEMO
       }).c('header', {
-        'sid': converse_core_converse.omemo_store.get('device_id')
+        'sid': core_converse.omemo_store.get('device_id')
       });
       return omemo.encryptMessage(message.get('message')).then(obj => {
         // The 16 bytes key and the GCM authentication tag (The tag
@@ -103093,14 +107809,14 @@ converse.plugins.add('converse-omemo', {
         return Promise.all(promises).then(dicts => addKeysToMessageStanza(stanza, dicts, obj.iv)).then(stanza => {
           stanza.c('payload').t(obj.payload).up().up();
           stanza.c('store', {
-            'xmlns': converse_omemo_Strophe.NS.HINTS
+            'xmlns': omemo_Strophe.NS.HINTS
           });
           return stanza;
         });
       });
     };
 
-    converse_core_converse.OMEMOStore = model_Model.extend({
+    core_converse.OMEMOStore = model_Model.extend({
       Direction: {
         SENDING: 1,
         RECEIVING: 2
@@ -103109,8 +107825,8 @@ converse.plugins.add('converse-omemo', {
       getIdentityKeyPair() {
         const keypair = this.get('identity_keypair');
         return Promise.resolve({
-          'privKey': converse_omemo_u.base64ToArrayBuffer(keypair.privKey),
-          'pubKey': converse_omemo_u.base64ToArrayBuffer(keypair.pubKey)
+          'privKey': omemo_u.base64ToArrayBuffer(keypair.privKey),
+          'pubKey': omemo_u.base64ToArrayBuffer(keypair.pubKey)
         });
       },
 
@@ -103134,7 +107850,7 @@ converse.plugins.add('converse-omemo', {
           return Promise.resolve(true);
         }
 
-        return Promise.resolve(converse_omemo_u.arrayBufferToBase64(identity_key) === trusted);
+        return Promise.resolve(omemo_u.arrayBufferToBase64(identity_key) === trusted);
       },
 
       loadIdentityKey(identifier) {
@@ -103142,7 +107858,7 @@ converse.plugins.add('converse-omemo', {
           throw new Error("Can't load identity_key for invalid identifier");
         }
 
-        return Promise.resolve(converse_omemo_u.base64ToArrayBuffer(this.get('identity_key' + identifier)));
+        return Promise.resolve(omemo_u.base64ToArrayBuffer(this.get('identity_key' + identifier)));
       },
 
       saveIdentity(identifier, identity_key) {
@@ -103152,7 +107868,7 @@ converse.plugins.add('converse-omemo', {
 
         const address = new libsignal.SignalProtocolAddress.fromString(identifier);
         const existing = this.get('identity_key' + address.getName());
-        const b64_idkey = converse_omemo_u.arrayBufferToBase64(identity_key);
+        const b64_idkey = omemo_u.arrayBufferToBase64(identity_key);
         this.save('identity_key' + address.getName(), b64_idkey);
 
         if (existing && b64_idkey !== existing) {
@@ -103171,8 +107887,8 @@ converse.plugins.add('converse-omemo', {
 
         if (res) {
           return Promise.resolve({
-            'privKey': converse_omemo_u.base64ToArrayBuffer(res.privKey),
-            'pubKey': converse_omemo_u.base64ToArrayBuffer(res.pubKey)
+            'privKey': omemo_u.base64ToArrayBuffer(res.privKey),
+            'pubKey': omemo_u.base64ToArrayBuffer(res.pubKey)
           });
         }
 
@@ -103182,8 +107898,8 @@ converse.plugins.add('converse-omemo', {
       storePreKey(key_id, key_pair) {
         const prekey = {};
         prekey[key_id] = {
-          'pubKey': converse_omemo_u.arrayBufferToBase64(key_pair.pubKey),
-          'privKey': converse_omemo_u.arrayBufferToBase64(key_pair.privKey)
+          'pubKey': omemo_u.arrayBufferToBase64(key_pair.pubKey),
+          'privKey': omemo_u.arrayBufferToBase64(key_pair.privKey)
         };
         this.save('prekeys', Object.assign(this.getPreKeys(), prekey));
         return Promise.resolve();
@@ -103200,8 +107916,8 @@ converse.plugins.add('converse-omemo', {
 
         if (res) {
           return Promise.resolve({
-            'privKey': converse_omemo_u.base64ToArrayBuffer(res.privKey),
-            'pubKey': converse_omemo_u.base64ToArrayBuffer(res.pubKey)
+            'privKey': omemo_u.base64ToArrayBuffer(res.privKey),
+            'pubKey': omemo_u.base64ToArrayBuffer(res.pubKey)
           });
         }
 
@@ -103219,14 +107935,14 @@ converse.plugins.add('converse-omemo', {
 
         this.save('signed_prekey', {
           'id': spk.keyId,
-          'privKey': converse_omemo_u.arrayBufferToBase64(spk.keyPair.privKey),
-          'pubKey': converse_omemo_u.arrayBufferToBase64(spk.keyPair.pubKey),
+          'privKey': omemo_u.arrayBufferToBase64(spk.keyPair.privKey),
+          'pubKey': omemo_u.arrayBufferToBase64(spk.keyPair.pubKey),
           // XXX: The InMemorySignalProtocolStore does not pass
           // in or store the signature, but we need it when we
           // publish out bundle and this method isn't called from
           // within libsignal code, so we modify it to also store
           // the signature.
-          'signature': converse_omemo_u.arrayBufferToBase64(spk.signature)
+          'signature': omemo_u.arrayBufferToBase64(spk.signature)
         });
         return Promise.resolve();
       },
@@ -103264,9 +107980,9 @@ converse.plugins.add('converse-omemo', {
 
       publishBundle() {
         const signed_prekey = this.get('signed_prekey');
-        const node = "".concat(converse_omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('device_id'));
-        const item = converse_omemo_$build('item').c('bundle', {
-          'xmlns': converse_omemo_Strophe.NS.OMEMO
+        const node = "".concat(omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('device_id'));
+        const item = omemo_$build('item').c('bundle', {
+          'xmlns': omemo_Strophe.NS.OMEMO
         }).c('signedPreKeyPublic', {
           'signedPreKeyId': signed_prekey.id
         }).t(signed_prekey.pubKey).up().c('signedPreKeySignature').t(signed_prekey.signature).up().c('identityKey').t(this.get('identity_keypair').pubKey).up().c('prekeys');
@@ -103276,11 +107992,11 @@ converse.plugins.add('converse-omemo', {
         const options = {
           'pubsub#access_model': 'open'
         };
-        return converse_core_api.pubsub.publish(null, node, item, options, false);
+        return core_api.pubsub.publish(null, node, item, options, false);
       },
 
       async generateMissingPreKeys() {
-        const missing_keys = lodash_es_difference(lodash_es_invokeMap(lodash_es_range(0, converse_core_converse.NUM_PREKEYS), Number.prototype.toString), Object.keys(this.getPreKeys()));
+        const missing_keys = lodash_es_difference(lodash_es_invokeMap(lodash_es_range(0, core_converse.NUM_PREKEYS), Number.prototype.toString), Object.keys(this.getPreKeys()));
 
         if (missing_keys.length < 1) {
           headless_log.warn("No missing prekeys to generate for our own device");
@@ -103291,10 +108007,10 @@ converse.plugins.add('converse-omemo', {
         keys.forEach(k => this.storePreKey(k.keyId, k.keyPair));
         const marshalled_keys = Object.keys(this.getPreKeys()).map(k => ({
           'id': k.keyId,
-          'key': converse_omemo_u.arrayBufferToBase64(k.pubKey)
+          'key': omemo_u.arrayBufferToBase64(k.pubKey)
         }));
 
-        const devicelist = converse_core_converse.devicelists.get(converse_core_converse.bare_jid);
+        const devicelist = core_converse.devicelists.get(core_converse.bare_jid);
 
         const device = devicelist.devices.get(this.get('device_id'));
         const bundle = await device.getBundle();
@@ -103315,41 +108031,41 @@ converse.plugins.add('converse-omemo', {
         // generated integer between 1 and 2^31 - 1.
         const identity_keypair = await libsignal.KeyHelper.generateIdentityKeyPair();
         const bundle = {};
-        const identity_key = converse_omemo_u.arrayBufferToBase64(identity_keypair.pubKey);
+        const identity_key = omemo_u.arrayBufferToBase64(identity_keypair.pubKey);
         const device_id = generateDeviceID();
         bundle['identity_key'] = identity_key;
         bundle['device_id'] = device_id;
         this.save({
           'device_id': device_id,
           'identity_keypair': {
-            'privKey': converse_omemo_u.arrayBufferToBase64(identity_keypair.privKey),
+            'privKey': omemo_u.arrayBufferToBase64(identity_keypair.privKey),
             'pubKey': identity_key
           },
           'identity_key': identity_key
         });
         const signed_prekey = await libsignal.KeyHelper.generateSignedPreKey(identity_keypair, 0);
 
-        converse_core_converse.omemo_store.storeSignedPreKey(signed_prekey);
+        core_converse.omemo_store.storeSignedPreKey(signed_prekey);
 
         bundle['signed_prekey'] = {
           'id': signed_prekey.keyId,
-          'public_key': converse_omemo_u.arrayBufferToBase64(signed_prekey.keyPair.privKey),
-          'signature': converse_omemo_u.arrayBufferToBase64(signed_prekey.signature)
+          'public_key': omemo_u.arrayBufferToBase64(signed_prekey.keyPair.privKey),
+          'signature': omemo_u.arrayBufferToBase64(signed_prekey.signature)
         };
-        const keys = await Promise.all(lodash_es_range(0, converse_core_converse.NUM_PREKEYS).map(id => libsignal.KeyHelper.generatePreKey(id)));
-        keys.forEach(k => converse_core_converse.omemo_store.storePreKey(k.keyId, k.keyPair));
+        const keys = await Promise.all(lodash_es_range(0, core_converse.NUM_PREKEYS).map(id => libsignal.KeyHelper.generatePreKey(id)));
+        keys.forEach(k => core_converse.omemo_store.storePreKey(k.keyId, k.keyPair));
 
-        const devicelist = converse_core_converse.devicelists.get(converse_core_converse.bare_jid);
+        const devicelist = core_converse.devicelists.get(core_converse.bare_jid);
 
         const device = await devicelist.devices.create({
           'id': bundle.device_id,
-          'jid': converse_core_converse.bare_jid
+          'jid': core_converse.bare_jid
         }, {
           'promise': true
         });
         const marshalled_keys = keys.map(k => ({
           'id': k.keyId,
-          'key': converse_omemo_u.arrayBufferToBase64(k.keyPair.pubKey)
+          'key': omemo_u.arrayBufferToBase64(k.keyPair.pubKey)
         }));
         bundle['prekeys'] = marshalled_keys;
         device.save('bundle', bundle);
@@ -103360,7 +108076,7 @@ converse.plugins.add('converse-omemo', {
           this._setup_promise = new Promise((resolve, reject) => {
             this.fetch({
               'success': () => {
-                if (!converse_core_converse.omemo_store.get('device_id')) {
+                if (!core_converse.omemo_store.get('device_id')) {
                   this.generateBundle().then(resolve).catch(reject);
                 } else {
                   resolve();
@@ -103385,7 +108101,7 @@ converse.plugins.add('converse-omemo', {
      * @memberOf _converse
      */
 
-    converse_core_converse.Device = model_Model.extend({
+    core_converse.Device = model_Model.extend({
       defaults: {
         'trusted': UNDECIDED,
         'active': true
@@ -103394,23 +108110,23 @@ converse.plugins.add('converse-omemo', {
       getRandomPreKey() {
         // XXX: assumes that the bundle has already been fetched
         const bundle = this.get('bundle');
-        return bundle.prekeys[converse_omemo_u.getRandomInt(bundle.prekeys.length)];
+        return bundle.prekeys[omemo_u.getRandomInt(bundle.prekeys.length)];
       },
 
       async fetchBundleFromServer() {
-        const stanza = converse_omemo_$iq({
+        const stanza = omemo_$iq({
           'type': 'get',
-          'from': converse_core_converse.bare_jid,
+          'from': core_converse.bare_jid,
           'to': this.get('jid')
         }).c('pubsub', {
-          'xmlns': converse_omemo_Strophe.NS.PUBSUB
+          'xmlns': omemo_Strophe.NS.PUBSUB
         }).c('items', {
-          'node': "".concat(converse_omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id'))
+          'node': "".concat(omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id'))
         });
         let iq;
 
         try {
-          iq = await converse_core_api.sendIQ(stanza);
+          iq = await core_api.sendIQ(stanza);
         } catch (iq) {
           headless_log.error("Could not fetch bundle for device ".concat(this.get('id'), " from ").concat(this.get('jid')));
           headless_log.error(iq);
@@ -103421,8 +108137,8 @@ converse.plugins.add('converse-omemo', {
           throw new IQError("Could not fetch bundle", iq);
         }
 
-        const publish_el = converse_omemo_sizzle("items[node=\"".concat(converse_omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id'), "\"]"), iq).pop();
-        const bundle_el = converse_omemo_sizzle("bundle[xmlns=\"".concat(converse_omemo_Strophe.NS.OMEMO, "\"]"), publish_el).pop();
+        const publish_el = omemo_sizzle("items[node=\"".concat(omemo_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id'), "\"]"), iq).pop();
+        const bundle_el = omemo_sizzle("bundle[xmlns=\"".concat(omemo_Strophe.NS.OMEMO, "\"]"), publish_el).pop();
         const bundle = parseBundle(bundle_el);
         this.save('bundle', bundle);
         return bundle;
@@ -103442,8 +108158,8 @@ converse.plugins.add('converse-omemo', {
       }
 
     });
-    converse_core_converse.Devices = collection_Collection.extend({
-      model: converse_core_converse.Device
+    core_converse.Devices = Collection.extend({
+      model: core_converse.Device
     });
     /**
      * @class
@@ -103451,13 +108167,13 @@ converse.plugins.add('converse-omemo', {
      * @memberOf _converse
      */
 
-    converse_core_converse.DeviceList = model_Model.extend({
+    core_converse.DeviceList = model_Model.extend({
       idAttribute: 'jid',
 
       initialize() {
-        this.devices = new converse_core_converse.Devices();
-        const id = "converse.devicelist-".concat(converse_core_converse.bare_jid, "-").concat(this.get('jid'));
-        this.devices.browserStorage = converse_core_converse.createStore(id);
+        this.devices = new core_converse.Devices();
+        const id = "converse.devicelist-".concat(core_converse.bare_jid, "-").concat(this.get('jid'));
+        this.devices.browserStorage = core_converse.createStore(id);
         this.fetchDevices();
       },
 
@@ -103478,7 +108194,7 @@ converse.plugins.add('converse-omemo', {
             this.destroy();
           }
 
-          if (this.get('jid') === converse_core_converse.bare_jid) {
+          if (this.get('jid') === core_converse.bare_jid) {
             await this.publishCurrentDevice(ids);
           }
         }
@@ -103501,27 +108217,27 @@ converse.plugins.add('converse-omemo', {
       },
 
       async getOwnDeviceId() {
-        let device_id = converse_core_converse.omemo_store.get('device_id');
+        let device_id = core_converse.omemo_store.get('device_id');
 
         if (!this.devices.findWhere({
           'id': device_id
         })) {
           // Generate a new bundle if we cannot find our device
-          await converse_core_converse.omemo_store.generateBundle();
-          device_id = converse_core_converse.omemo_store.get('device_id');
+          await core_converse.omemo_store.generateBundle();
+          device_id = core_converse.omemo_store.get('device_id');
         }
 
         return device_id;
       },
 
       async publishCurrentDevice(device_ids) {
-        if (this.get('jid') !== converse_core_converse.bare_jid) {
+        if (this.get('jid') !== core_converse.bare_jid) {
           return; // We only publish for ourselves.
         }
 
         await restoreOMEMOSession();
 
-        if (!converse_core_converse.omemo_store) {
+        if (!core_converse.omemo_store) {
           // Happens during tests. The connection gets torn down
           // before publishCurrentDevice has time to finish.
           headless_log.warn('publishCurrentDevice: omemo_store is not defined, likely a timing issue');
@@ -103534,26 +108250,26 @@ converse.plugins.add('converse-omemo', {
       },
 
       async fetchDevicesFromServer() {
-        const stanza = converse_omemo_$iq({
+        const stanza = omemo_$iq({
           'type': 'get',
-          'from': converse_core_converse.bare_jid,
+          'from': core_converse.bare_jid,
           'to': this.get('jid')
         }).c('pubsub', {
-          'xmlns': converse_omemo_Strophe.NS.PUBSUB
+          'xmlns': omemo_Strophe.NS.PUBSUB
         }).c('items', {
-          'node': converse_omemo_Strophe.NS.OMEMO_DEVICELIST
+          'node': omemo_Strophe.NS.OMEMO_DEVICELIST
         });
         let iq;
 
         try {
-          iq = await converse_core_api.sendIQ(stanza);
+          iq = await core_api.sendIQ(stanza);
         } catch (e) {
           headless_log.error(e);
           return [];
         }
 
-        const selector = "list[xmlns=\"".concat(converse_omemo_Strophe.NS.OMEMO, "\"] device");
-        const device_ids = converse_omemo_sizzle(selector, iq).map(d => d.getAttribute('id'));
+        const selector = "list[xmlns=\"".concat(omemo_Strophe.NS.OMEMO, "\"] device");
+        const device_ids = omemo_sizzle(selector, iq).map(d => d.getAttribute('id'));
         await Promise.all(device_ids.map(id => this.devices.create({
           id,
           'jid': this.get('jid')
@@ -103569,10 +108285,10 @@ converse.plugins.add('converse-omemo', {
        * See: https://xmpp.org/extensions/xep-0384.html#usecases-announcing
        */
       publishDevices() {
-        const item = converse_omemo_$build('item', {
+        const item = omemo_$build('item', {
           'id': 'current'
         }).c('list', {
-          'xmlns': converse_omemo_Strophe.NS.OMEMO
+          'xmlns': omemo_Strophe.NS.OMEMO
         });
         this.devices.filter(d => d.get('active')).forEach(d => item.c('device', {
           'id': d.get('id')
@@ -103580,11 +108296,11 @@ converse.plugins.add('converse-omemo', {
         const options = {
           'pubsub#access_model': 'open'
         };
-        return converse_core_api.pubsub.publish(null, converse_omemo_Strophe.NS.OMEMO_DEVICELIST, item, options, false);
+        return core_api.pubsub.publish(null, omemo_Strophe.NS.OMEMO_DEVICELIST, item, options, false);
       },
 
       removeOwnDevices(device_ids) {
-        if (this.get('jid') !== converse_core_converse.bare_jid) {
+        if (this.get('jid') !== core_converse.bare_jid) {
           throw new Error("Cannot remove devices from someone else's device list");
         }
 
@@ -103599,8 +108315,8 @@ converse.plugins.add('converse-omemo', {
      * @memberOf _converse
      */
 
-    converse_core_converse.DeviceLists = collection_Collection.extend({
-      model: converse_core_converse.DeviceList,
+    core_converse.DeviceLists = Collection.extend({
+      model: core_converse.DeviceList,
 
       /**
        * Returns the {@link _converse.DeviceList} for a particular JID.
@@ -103616,80 +108332,36 @@ converse.plugins.add('converse-omemo', {
       }
 
     });
-
-    function parseEncryptedMessage(stanza, attrs) {
-      if (attrs.is_encrypted && attrs.encrypted.key) {
-        // https://xmpp.org/extensions/xep-0384.html#usecases-receiving
-        if (attrs.encrypted.prekey === true) {
-          return decryptPrekeyWhisperMessage(attrs);
-        } else {
-          return decryptWhisperMessage(attrs);
-        }
-      } else {
-        return attrs;
-      }
-    }
     /******************** Event Handlers ********************/
 
-
-    converse_core_api.listen.on('parseMessage', parseEncryptedMessage);
-    converse_core_api.listen.on('parseMUCMessage', parseEncryptedMessage);
-    converse_core_api.waitUntil('chatBoxesInitialized').then(() => converse_core_converse.chatboxes.on('add', chatbox => {
-      checkOMEMOSupported(chatbox);
-
-      if (chatbox.get('type') === converse_core_converse.CHATROOMS_TYPE) {
-        chatbox.occupants.on('add', o => onOccupantAdded(chatbox, o));
-        chatbox.features.on('change', () => checkOMEMOSupported(chatbox));
-      }
-    }));
-
-    const onChatInitialized = view => {
-      view.listenTo(view.model.messages, 'add', message => {
-        if (message.get('is_encrypted') && !message.get('is_error')) {
-          view.model.save('omemo_supported', true);
-        }
-      });
-      view.listenTo(view.model, 'change:omemo_supported', () => {
-        if (!view.model.get('omemo_supported') && view.model.get('omemo_active')) {
-          view.model.set('omemo_active', false);
-        } else {
-          var _view$el$querySelecto;
-
-          // Manually trigger an update, setting omemo_active to
-          // false above will automatically trigger one.
-          (_view$el$querySelecto = view.el.querySelector('converse-chat-toolbar')) === null || _view$el$querySelecto === void 0 ? void 0 : _view$el$querySelecto.requestUpdate();
-        }
-      });
-      view.listenTo(view.model, 'change:omemo_active', () => {
-        view.el.querySelector('converse-chat-toolbar').requestUpdate();
-      });
-    };
-
-    converse_core_api.listen.on('chatBoxViewInitialized', onChatInitialized);
-    converse_core_api.listen.on('chatRoomViewInitialized', onChatInitialized);
-    converse_core_api.listen.on('connected', registerPEPPushHandler);
-    converse_core_api.listen.on('getToolbarButtons', getOMEMOToolbarButton);
-    converse_core_api.listen.on('statusInitialized', initOMEMO);
-    converse_core_api.listen.on('addClientFeatures', () => converse_core_api.disco.own.features.add("".concat(converse_omemo_Strophe.NS.OMEMO_DEVICELIST, "+notify")));
-    converse_core_api.listen.on('userDetailsModalInitialized', contact => {
+    core_api.waitUntil('chatBoxesInitialized').then(onChatBoxesInitialized);
+    core_api.listen.on('parseMessage', parseEncryptedMessage);
+    core_api.listen.on('parseMUCMessage', parseEncryptedMessage);
+    core_api.listen.on('chatBoxViewInitialized', onChatInitialized);
+    core_api.listen.on('chatRoomViewInitialized', onChatInitialized);
+    core_api.listen.on('connected', registerPEPPushHandler);
+    core_api.listen.on('getToolbarButtons', getOMEMOToolbarButton);
+    core_api.listen.on('statusInitialized', initOMEMO);
+    core_api.listen.on('addClientFeatures', () => core_api.disco.own.features.add("".concat(omemo_Strophe.NS.OMEMO_DEVICELIST, "+notify")));
+    core_api.listen.on('userDetailsModalInitialized', contact => {
       const jid = contact.get('jid');
 
-      converse_core_converse.generateFingerprints(jid).catch(e => headless_log.error(e));
+      core_converse.generateFingerprints(jid).catch(e => headless_log.error(e));
     });
-    converse_core_api.listen.on('profileModalInitialized', () => {
-      converse_core_converse.generateFingerprints(converse_core_converse.bare_jid).catch(e => headless_log.error(e));
+    core_api.listen.on('profileModalInitialized', () => {
+      core_converse.generateFingerprints(core_converse.bare_jid).catch(e => headless_log.error(e));
     });
-    converse_core_api.listen.on('afterTearDown', () => delete converse_core_converse.omemo_store);
-    converse_core_api.listen.on('clearSession', () => {
-      if (converse_core_converse.shouldClearCache() && converse_core_converse.devicelists) {
-        converse_core_converse.devicelists.clearStore();
+    core_api.listen.on('afterTearDown', () => delete core_converse.omemo_store);
+    core_api.listen.on('clearSession', () => {
+      if (core_converse.shouldClearCache() && core_converse.devicelists) {
+        core_converse.devicelists.clearStore();
 
-        delete converse_core_converse.devicelists;
+        delete core_converse.devicelists;
       }
     });
     /************************ API ************************/
 
-    Object.assign(converse_core_converse.api, {
+    Object.assign(core_converse.api, {
       /**
        * The "omemo" namespace groups methods relevant to OMEMO
        * encryption.
@@ -103714,14 +108386,14 @@ converse.plugins.add('converse-omemo', {
            */
           'generate': async () => {
             // Remove current device
-            const devicelist = converse_core_converse.devicelists.get(converse_core_converse.bare_jid);
+            const devicelist = core_converse.devicelists.get(core_converse.bare_jid);
 
-            const device_id = converse_core_converse.omemo_store.get('device_id');
+            const device_id = core_converse.omemo_store.get('device_id');
 
             if (device_id) {
               const device = devicelist.devices.get(device_id);
 
-              converse_core_converse.omemo_store.unset(device_id);
+              core_converse.omemo_store.unset(device_id);
 
               if (device) {
                 await new Promise(done => device.destroy({
@@ -103735,11 +108407,11 @@ converse.plugins.add('converse-omemo', {
             // https://xmpp.org/extensions/attic/xep-0384-0.3.0.html#usecases-announcing
 
 
-            await converse_core_converse.omemo_store.generateBundle();
+            await core_converse.omemo_store.generateBundle();
             await devicelist.publishDevices();
-            const device = devicelist.devices.get(converse_core_converse.omemo_store.get('device_id'));
+            const device = devicelist.devices.get(core_converse.omemo_store.get('device_id'));
             const fp = generateFingerprint(device);
-            await converse_core_converse.omemo_store.publishBundle();
+            await core_converse.omemo_store.publishBundle();
             return fp;
           }
         }
@@ -103748,7 +108420,7 @@ converse.plugins.add('converse-omemo', {
   }
 
 });
-// CONCATENATED MODULE: ./src/converse-push.js
+// CONCATENATED MODULE: ./src/plugins/push.js
 /**
  * @module converse-push
  * @description
@@ -103760,16 +108432,16 @@ converse.plugins.add('converse-omemo', {
 
 
 const {
-  Strophe: converse_push_Strophe,
-  $iq: converse_push_$iq
+  Strophe: push_Strophe,
+  $iq: push_$iq
 } = converse.env;
-converse_push_Strophe.addNamespace('PUSH', 'urn:xmpp:push:0');
+push_Strophe.addNamespace('PUSH', 'urn:xmpp:push:0');
 converse.plugins.add('converse-push', {
   initialize() {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'push_app_servers': [],
       'enable_muc_push': false
     });
@@ -103779,23 +108451,23 @@ converse.plugins.add('converse-push', {
         return;
       }
 
-      if (!(await converse_core_api.disco.supports(converse_push_Strophe.NS.PUSH, domain || converse_core_converse.bare_jid))) {
+      if (!(await core_api.disco.supports(push_Strophe.NS.PUSH, domain || core_converse.bare_jid))) {
         headless_log.warn("Not disabling push app server \"".concat(push_app_server.jid, "\", no disco support from your server."));
         return;
       }
 
-      const stanza = converse_push_$iq({
+      const stanza = push_$iq({
         'type': 'set'
       });
 
-      if (domain !== converse_core_converse.bare_jid) {
+      if (domain !== core_converse.bare_jid) {
         stanza.attrs({
           'to': domain
         });
       }
 
       stanza.c('disable', {
-        'xmlns': converse_push_Strophe.NS.PUSH,
+        'xmlns': push_Strophe.NS.PUSH,
         'jid': push_app_server.jid
       });
 
@@ -103805,7 +108477,7 @@ converse.plugins.add('converse-push', {
         });
       }
 
-      converse_core_api.sendIQ(stanza).catch(e => {
+      core_api.sendIQ(stanza).catch(e => {
         headless_log.error("Could not disable push app server for ".concat(push_app_server.jid));
         headless_log.error(e);
       });
@@ -103816,59 +108488,59 @@ converse.plugins.add('converse-push', {
         return;
       }
 
-      const identity = await converse_core_api.disco.getIdentity('pubsub', 'push', push_app_server.jid);
+      const identity = await core_api.disco.getIdentity('pubsub', 'push', push_app_server.jid);
 
       if (!identity) {
         return headless_log.warn("Not enabling push the service \"".concat(push_app_server.jid, "\", it doesn't have the right disco identtiy."));
       }
 
-      const result = await Promise.all([converse_core_api.disco.supports(converse_push_Strophe.NS.PUSH, push_app_server.jid), converse_core_api.disco.supports(converse_push_Strophe.NS.PUSH, domain)]);
+      const result = await Promise.all([core_api.disco.supports(push_Strophe.NS.PUSH, push_app_server.jid), core_api.disco.supports(push_Strophe.NS.PUSH, domain)]);
 
       if (!result[0] && !result[1]) {
         headless_log.warn("Not enabling push app server \"".concat(push_app_server.jid, "\", no disco support from your server."));
         return;
       }
 
-      const stanza = converse_push_$iq({
+      const stanza = push_$iq({
         'type': 'set'
       });
 
-      if (domain !== converse_core_converse.bare_jid) {
+      if (domain !== core_converse.bare_jid) {
         stanza.attrs({
           'to': domain
         });
       }
 
       stanza.c('enable', {
-        'xmlns': converse_push_Strophe.NS.PUSH,
+        'xmlns': push_Strophe.NS.PUSH,
         'jid': push_app_server.jid,
         'node': push_app_server.node
       });
 
       if (push_app_server.secret) {
         stanza.c('x', {
-          'xmlns': converse_push_Strophe.NS.XFORM,
+          'xmlns': push_Strophe.NS.XFORM,
           'type': 'submit'
         }).c('field', {
           'var': 'FORM_TYPE'
-        }).c('value').t("".concat(converse_push_Strophe.NS.PUBSUB, "#publish-options")).up().up().c('field', {
+        }).c('value').t("".concat(push_Strophe.NS.PUBSUB, "#publish-options")).up().up().c('field', {
           'var': 'secret'
         }).c('value').t(push_app_server.secret);
       }
 
-      return converse_core_api.sendIQ(stanza);
+      return core_api.sendIQ(stanza);
     }
 
     async function enablePush(domain) {
-      domain = domain || converse_core_converse.bare_jid;
-      const push_enabled = converse_core_converse.session.get('push_enabled') || [];
+      domain = domain || core_converse.bare_jid;
+      const push_enabled = core_converse.session.get('push_enabled') || [];
 
       if (push_enabled.includes(domain)) {
         return;
       }
 
-      const enabled_services = converse_core_api.settings.get('push_app_servers').filter(s => !s.disable);
-      const disabled_services = converse_core_api.settings.get('push_app_servers').filter(s => s.disable);
+      const enabled_services = core_api.settings.get('push_app_servers').filter(s => !s.disable);
+      const disabled_services = core_api.settings.get('push_app_servers').filter(s => s.disable);
       const enabled = enabled_services.map(s => enablePushAppServer(domain, s));
       const disabled = disabled_services.map(s => disablePushAppServer(domain, s));
 
@@ -103881,36 +108553,36 @@ converse.plugins.add('converse-push', {
         push_enabled.push(domain);
       }
 
-      converse_core_converse.session.save('push_enabled', push_enabled);
+      core_converse.session.save('push_enabled', push_enabled);
     }
 
-    converse_core_api.listen.on('statusInitialized', () => enablePush());
+    core_api.listen.on('statusInitialized', () => enablePush());
 
     function onChatBoxAdded(model) {
-      if (model.get('type') == converse_core_converse.CHATROOMS_TYPE) {
-        enablePush(converse_push_Strophe.getDomainFromJid(model.get('jid')));
+      if (model.get('type') == core_converse.CHATROOMS_TYPE) {
+        enablePush(push_Strophe.getDomainFromJid(model.get('jid')));
       }
     }
 
-    if (converse_core_api.settings.get('enable_muc_push')) {
-      converse_core_api.listen.on('chatBoxesInitialized', () => converse_core_converse.chatboxes.on('add', onChatBoxAdded));
+    if (core_api.settings.get('enable_muc_push')) {
+      core_api.listen.on('chatBoxesInitialized', () => core_converse.chatboxes.on('add', onChatBoxAdded));
     }
   }
 
 });
 // EXTERNAL MODULE: ./src/templates/register_panel.html
-var register_panel = __webpack_require__(139);
+var register_panel = __webpack_require__(181);
 var register_panel_default = /*#__PURE__*/__webpack_require__.n(register_panel);
 
 // EXTERNAL MODULE: ./src/templates/registration_form.html
-var registration_form = __webpack_require__(140);
+var registration_form = __webpack_require__(182);
 var registration_form_default = /*#__PURE__*/__webpack_require__.n(registration_form);
 
 // EXTERNAL MODULE: ./src/templates/registration_request.html
-var registration_request = __webpack_require__(141);
+var registration_request = __webpack_require__(183);
 var registration_request_default = /*#__PURE__*/__webpack_require__.n(registration_request);
 
-// CONCATENATED MODULE: ./src/converse-register.js
+// CONCATENATED MODULE: ./src/plugins/register.js
 /**
  * @module converse-register
  * @description
@@ -103935,19 +108607,19 @@ var registration_request_default = /*#__PURE__*/__webpack_require__.n(registrati
  // Strophe methods for building stanzas
 
 const {
-  Strophe: converse_register_Strophe,
-  sizzle: converse_register_sizzle,
-  $iq: converse_register_$iq
+  Strophe: register_Strophe,
+  sizzle: register_sizzle,
+  $iq: register_$iq
 } = converse.env;
-const converse_register_u = converse.env.utils; // Add Strophe Namespaces
+const register_u = converse.env.utils; // Add Strophe Namespaces
 
-converse_register_Strophe.addNamespace('REGISTER', 'jabber:iq:register'); // Add Strophe Statuses
+register_Strophe.addNamespace('REGISTER', 'jabber:iq:register'); // Add Strophe Statuses
 
-const converse_register_i = Object.keys(converse_register_Strophe.Status).reduce((max, k) => Math.max(max, converse_register_Strophe.Status[k]), 0);
-converse_register_Strophe.Status.REGIFAIL = converse_register_i + 1;
-converse_register_Strophe.Status.REGISTERED = converse_register_i + 2;
-converse_register_Strophe.Status.CONFLICT = converse_register_i + 3;
-converse_register_Strophe.Status.NOTACCEPTABLE = converse_register_i + 5;
+const register_i = Object.keys(register_Strophe.Status).reduce((max, k) => Math.max(max, register_Strophe.Status[k]), 0);
+register_Strophe.Status.REGIFAIL = register_i + 1;
+register_Strophe.Status.REGISTERED = register_i + 2;
+register_Strophe.Status.CONFLICT = register_i + 3;
+register_Strophe.Status.NOTACCEPTABLE = register_i + 5;
 converse.plugins.add('converse-register', {
   enabled() {
     return true;
@@ -103977,11 +108649,11 @@ converse.plugins.add('converse-register', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_converse.CONNECTION_STATUS[converse_register_Strophe.Status.REGIFAIL] = 'REGIFAIL';
-    converse_core_converse.CONNECTION_STATUS[converse_register_Strophe.Status.REGISTERED] = 'REGISTERED';
-    converse_core_converse.CONNECTION_STATUS[converse_register_Strophe.Status.CONFLICT] = 'CONFLICT';
-    converse_core_converse.CONNECTION_STATUS[converse_register_Strophe.Status.NOTACCEPTABLE] = 'NOTACCEPTABLE';
-    converse_core_api.settings.extend({
+    core_converse.CONNECTION_STATUS[register_Strophe.Status.REGIFAIL] = 'REGIFAIL';
+    core_converse.CONNECTION_STATUS[register_Strophe.Status.REGISTERED] = 'REGISTERED';
+    core_converse.CONNECTION_STATUS[register_Strophe.Status.CONFLICT] = 'CONFLICT';
+    core_converse.CONNECTION_STATUS[register_Strophe.Status.NOTACCEPTABLE] = 'NOTACCEPTABLE';
+    core_api.settings.extend({
       'allow_registration': true,
       'domain_placeholder': i18n_(" e.g. conversejs.org"),
       // Placeholder text shown in the domain input on the registration form
@@ -103989,7 +108661,7 @@ converse.plugins.add('converse-register', {
       // Link to XMPP providers shown on registration page
       'registration_domain': ''
     });
-    Object.assign(converse_core_converse.ControlBoxView.prototype, {
+    Object.assign(core_converse.ControlBoxView.prototype, {
       showLoginOrRegisterForm() {
         if (!this.registerpanel) {
           return;
@@ -104005,8 +108677,8 @@ converse.plugins.add('converse-register', {
       },
 
       renderRegistrationPanel() {
-        if (converse_core_api.settings.get('allow_registration')) {
-          this.registerpanel = new converse_core_converse.RegisterPanel({
+        if (core_api.settings.get('allow_registration')) {
+          this.registerpanel = new core_converse.RegisterPanel({
             'model': this.model
           });
           this.registerpanel.render();
@@ -104026,8 +108698,8 @@ converse.plugins.add('converse-register', {
     });
 
     function setActiveForm(value) {
-      converse_core_api.waitUntil('controlBoxInitialized').then(() => {
-        const controlbox = converse_core_converse.chatboxes.get('controlbox');
+      core_api.waitUntil('controlBoxInitialized').then(() => {
+        const controlbox = core_converse.chatboxes.get('controlbox');
 
         controlbox.set({
           'active-form': value
@@ -104035,9 +108707,9 @@ converse.plugins.add('converse-register', {
       }).catch(e => headless_log.fatal(e));
     }
 
-    converse_core_converse.router.route('converse/login', () => setActiveForm('login'));
+    core_converse.router.route('converse/login', () => setActiveForm('login'));
 
-    converse_core_converse.router.route('converse/register', () => setActiveForm('register'));
+    core_converse.router.route('converse/register', () => setActiveForm('register'));
     /**
      * @class
      * @namespace _converse.RegisterPanel
@@ -104045,7 +108717,7 @@ converse.plugins.add('converse-register', {
      */
 
 
-    converse_core_converse.RegisterPanel = view_View.extend({
+    core_converse.RegisterPanel = View.extend({
       tagName: 'div',
       id: "converse-register-panel",
       className: 'controlbox-pane fade-in',
@@ -104056,23 +108728,23 @@ converse.plugins.add('converse-register', {
 
       initialize() {
         this.reset();
-        converse_core_api.listen.on('connectionInitialized', () => this.registerHooks());
+        core_api.listen.on('connectionInitialized', () => this.registerHooks());
       },
 
       render() {
         this.model.set('registration_form_rendered', false);
         this.el.innerHTML = register_panel_default()({
           '__': i18n_,
-          'default_domain': converse_core_api.settings.get('registration_domain'),
+          'default_domain': core_api.settings.get('registration_domain'),
           'label_register': i18n_('Fetch registration form'),
           'help_providers': i18n_('Tip: A list of public XMPP providers is available'),
           'help_providers_link': i18n_('here'),
-          'href_providers': converse_core_api.settings.get('providers_link'),
-          'domain_placeholder': converse_core_api.settings.get('domain_placeholder')
+          'href_providers': core_api.settings.get('providers_link'),
+          'domain_placeholder': core_api.settings.get('domain_placeholder')
         });
 
-        if (converse_core_api.settings.get('registration_domain')) {
-          this.fetchRegistrationForm(converse_core_api.settings.get('registration_domain'));
+        if (core_api.settings.get('registration_domain')) {
+          this.fetchRegistrationForm(core_api.settings.get('registration_domain'));
         }
 
         return this;
@@ -104082,7 +108754,7 @@ converse.plugins.add('converse-register', {
         /* Hook into Strophe's _connect_cb, so that we can send an IQ
          * requesting the registration fields.
          */
-        const conn = converse_core_converse.connection;
+        const conn = core_converse.connection;
 
         const connect_cb = conn._connect_cb.bind(conn);
 
@@ -104105,7 +108777,7 @@ converse.plugins.add('converse-register', {
        * @param { Function } callback - The callback function
        */
       getRegistrationFields(req, _callback) {
-        const conn = converse_core_converse.connection;
+        const conn = core_converse.connection;
         conn.connected = true;
 
         const body = conn._proto._reqToData(req);
@@ -104114,7 +108786,7 @@ converse.plugins.add('converse-register', {
           return;
         }
 
-        if (conn._proto._connect_cb(body) === converse_register_Strophe.Status.CONNFAIL) {
+        if (conn._proto._connect_cb(body) === register_Strophe.Status.CONNFAIL) {
           this.showValidationError(i18n_("Sorry, we're unable to connect to your chosen provider."));
           return false;
         }
@@ -104129,7 +108801,7 @@ converse.plugins.add('converse-register', {
         }
 
         if (register.length === 0) {
-          conn._changeConnectStatus(converse_register_Strophe.Status.REGIFAIL);
+          conn._changeConnectStatus(register_Strophe.Status.REGIFAIL);
 
           this.showValidationError(i18n_("Sorry, the given provider does not support in " + "band account registration. Please try with a " + "different provider."));
           return true;
@@ -104138,10 +108810,10 @@ converse.plugins.add('converse-register', {
 
         conn._addSysHandler(this.onRegistrationFields.bind(this), null, "iq", null, null);
 
-        const stanza = converse_register_$iq({
+        const stanza = register_$iq({
           type: "get"
         }).c("query", {
-          xmlns: converse_register_Strophe.NS.REGISTER
+          xmlns: register_Strophe.NS.REGISTER
         }).tree();
         stanza.setAttribute("id", conn.getUniqueId("sendIQ"));
         conn.send(stanza);
@@ -104157,13 +108829,13 @@ converse.plugins.add('converse-register', {
        */
       onRegistrationFields(stanza) {
         if (stanza.getAttribute("type") === "error") {
-          converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.REGIFAIL, i18n_('Something went wrong while establishing a connection with "%1$s". ' + 'Are you sure it exists?', this.domain));
+          core_converse.connection._changeConnectStatus(register_Strophe.Status.REGIFAIL, i18n_('Something went wrong while establishing a connection with "%1$s". ' + 'Are you sure it exists?', this.domain));
 
           return false;
         }
 
         if (stanza.getElementsByTagName("query").length !== 1) {
-          converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.REGIFAIL, "unknown");
+          core_converse.connection._changeConnectStatus(register_Strophe.Status.REGIFAIL, "unknown");
 
           return false;
         }
@@ -104247,13 +108919,13 @@ converse.plugins.add('converse-register', {
         }
 
         this.reset({
-          'domain': converse_register_Strophe.getDomainFromJid(domain_name),
+          'domain': register_Strophe.getDomainFromJid(domain_name),
           '_registering': true
         });
-        await converse_core_converse.initConnection(this.domain); // When testing, the test tears down before the async function
+        await core_converse.initConnection(this.domain); // When testing, the test tears down before the async function
         // above finishes. So we use optional chaining here
 
-        (_converse$connection = converse_core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connect(this.domain, "", status => this.onConnectStatusChanged(status));
+        (_converse$connection = core_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connect(this.domain, "", status => this.onConnectStatusChanged(status));
         return false;
       },
 
@@ -104262,8 +108934,8 @@ converse.plugins.add('converse-register', {
          * form is being fetched.
          */
         this.clearRegistrationForm().insertAdjacentHTML('beforeend', registration_request_default()({
-          '__': converse_core_converse.__,
-          'cancel': converse_core_api.settings.get('registration_domain')
+          '__': core_converse.__,
+          'cancel': core_api.settings.get('registration_domain')
         }));
       },
 
@@ -104308,31 +108980,31 @@ converse.plugins.add('converse-register', {
       onConnectStatusChanged(status_code) {
         headless_log.debug('converse-register: onConnectStatusChanged');
 
-        if ([converse_register_Strophe.Status.DISCONNECTED, converse_register_Strophe.Status.CONNFAIL, converse_register_Strophe.Status.REGIFAIL, converse_register_Strophe.Status.NOTACCEPTABLE, converse_register_Strophe.Status.CONFLICT].includes(status_code)) {
-          headless_log.error("Problem during registration: Strophe.Status is ".concat(converse_core_converse.CONNECTION_STATUS[status_code]));
+        if ([register_Strophe.Status.DISCONNECTED, register_Strophe.Status.CONNFAIL, register_Strophe.Status.REGIFAIL, register_Strophe.Status.NOTACCEPTABLE, register_Strophe.Status.CONFLICT].includes(status_code)) {
+          headless_log.error("Problem during registration: Strophe.Status is ".concat(core_converse.CONNECTION_STATUS[status_code]));
           this.abortRegistration();
-        } else if (status_code === converse_register_Strophe.Status.REGISTERED) {
+        } else if (status_code === register_Strophe.Status.REGISTERED) {
           headless_log.debug("Registered successfully.");
 
-          converse_core_converse.connection.reset();
+          core_converse.connection.reset();
 
           this.showSpinner();
 
-          if (["converse/login", "converse/register"].includes(converse_core_converse.router.history.getFragment())) {
-            converse_core_converse.router.navigate('', {
+          if (["converse/login", "converse/register"].includes(core_converse.router.history.getFragment())) {
+            core_converse.router.navigate('', {
               'replace': true
             });
           }
 
           if (this.fields.password && this.fields.username) {
             // automatically log the user in
-            converse_core_converse.connection.connect(this.fields.username.toLowerCase() + '@' + this.domain.toLowerCase(), this.fields.password, converse_core_converse.onConnectStatusChanged);
+            core_converse.connection.connect(this.fields.username.toLowerCase() + '@' + this.domain.toLowerCase(), this.fields.password, core_converse.onConnectStatusChanged);
 
             this.giveFeedback(i18n_('Now logging you in'), 'info');
           } else {
-            converse_core_converse.chatboxviews.get('controlbox').renderLoginPanel();
+            core_converse.chatboxviews.get('controlbox').renderLoginPanel();
 
-            converse_core_converse.giveFeedback(i18n_('Registered successfully'));
+            core_converse.giveFeedback(i18n_('Registered successfully'));
           }
 
           this.reset();
@@ -104379,7 +109051,7 @@ converse.plugins.add('converse-register', {
           'domain': this.domain,
           'title': this.title,
           'instructions': this.instructions,
-          'registration_domain': converse_core_api.settings.get('registration_domain')
+          'registration_domain': core_api.settings.get('registration_domain')
         });
         const buttons = form.querySelector('fieldset.buttons');
 
@@ -104447,21 +109119,21 @@ converse.plugins.add('converse-register', {
           ev.preventDefault();
         }
 
-        converse_core_converse.connection._proto._abortAllRequests();
+        core_converse.connection._proto._abortAllRequests();
 
-        converse_core_converse.connection.reset();
+        core_converse.connection.reset();
 
         this.render();
       },
 
       abortRegistration() {
-        converse_core_converse.connection._proto._abortAllRequests();
+        core_converse.connection._proto._abortAllRequests();
 
-        converse_core_converse.connection.reset();
+        core_converse.connection.reset();
 
         if (this.model.get('registration_form_rendered')) {
-          if (converse_core_api.settings.get('registration_domain') && this.model.get('registration_form_rendered')) {
-            this.fetchRegistrationForm(converse_core_api.settings.get('registration_domain'));
+          if (core_api.settings.get('registration_domain') && this.model.get('registration_form_rendered')) {
+            this.fetchRegistrationForm(core_api.settings.get('registration_domain'));
           }
         } else {
           this.render();
@@ -104489,17 +109161,17 @@ converse.plugins.add('converse-register', {
           return;
         }
 
-        const inputs = converse_register_sizzle(':input:not([type=button]):not([type=submit])', form);
-        const iq = converse_register_$iq({
+        const inputs = register_sizzle(':input:not([type=button]):not([type=submit])', form);
+        const iq = register_$iq({
           'type': 'set',
-          'id': converse_register_u.getUniqueId()
+          'id': register_u.getUniqueId()
         }).c("query", {
-          xmlns: converse_register_Strophe.NS.REGISTER
+          xmlns: register_Strophe.NS.REGISTER
         });
 
         if (this.form_type === 'xform') {
           iq.c("x", {
-            xmlns: converse_register_Strophe.NS.XFORM,
+            xmlns: register_Strophe.NS.XFORM,
             type: 'submit'
           });
           const xml_nodes = inputs.map(i => utils_form.webForm2xForm(i)).filter(n => n);
@@ -104508,9 +109180,9 @@ converse.plugins.add('converse-register', {
           inputs.forEach(input => iq.c(input.getAttribute('name'), {}, input.value));
         }
 
-        converse_core_converse.connection._addSysHandler(this._onRegisterIQ.bind(this), null, "iq", null, null);
+        core_converse.connection._addSysHandler(this._onRegisterIQ.bind(this), null, "iq", null, null);
 
-        converse_core_converse.connection.send(iq);
+        core_converse.connection.send(iq);
 
         this.setFields(iq.tree());
       },
@@ -104522,7 +109194,7 @@ converse.plugins.add('converse-register', {
        */
       setFields(stanza) {
         const query = stanza.querySelector('query');
-        const xform = converse_register_sizzle("x[xmlns=\"".concat(converse_register_Strophe.NS.XFORM, "\"]"), query);
+        const xform = register_sizzle("x[xmlns=\"".concat(register_Strophe.NS.XFORM, "\"]"), query);
 
         if (xform.length > 0) {
           this._setFieldsFromXForm(xform.pop());
@@ -104534,17 +109206,17 @@ converse.plugins.add('converse-register', {
       _setFieldsFromLegacy(query) {
         [].forEach.call(query.children, field => {
           if (field.tagName.toLowerCase() === 'instructions') {
-            this.instructions = converse_register_Strophe.getText(field);
+            this.instructions = register_Strophe.getText(field);
             return;
           } else if (field.tagName.toLowerCase() === 'x') {
             if (field.getAttribute('xmlns') === 'jabber:x:oob') {
-              this.urls.concat(converse_register_sizzle('url', field).map(u => u.textContent));
+              this.urls.concat(register_sizzle('url', field).map(u => u.textContent));
             }
 
             return;
           }
 
-          this.fields[field.tagName.toLowerCase()] = converse_register_Strophe.getText(field);
+          this.fields[field.tagName.toLowerCase()] = register_Strophe.getText(field);
         });
         this.form_type = 'legacy';
       },
@@ -104584,7 +109256,7 @@ converse.plugins.add('converse-register', {
           let error = stanza.getElementsByTagName("error");
 
           if (error.length !== 1) {
-            converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.REGIFAIL, "unknown");
+            core_converse.connection._changeConnectStatus(register_Strophe.Status.REGIFAIL, "unknown");
 
             return false;
           }
@@ -104592,14 +109264,14 @@ converse.plugins.add('converse-register', {
           error = error[0].firstElementChild.tagName.toLowerCase();
 
           if (error === 'conflict') {
-            converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.CONFLICT, error);
+            core_converse.connection._changeConnectStatus(register_Strophe.Status.CONFLICT, error);
           } else if (error === 'not-acceptable') {
-            converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.NOTACCEPTABLE, error);
+            core_converse.connection._changeConnectStatus(register_Strophe.Status.NOTACCEPTABLE, error);
           } else {
-            converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.REGIFAIL, error);
+            core_converse.connection._changeConnectStatus(register_Strophe.Status.REGIFAIL, error);
           }
         } else {
-          converse_core_converse.connection._changeConnectStatus(converse_register_Strophe.Status.REGISTERED, null);
+          core_converse.connection._changeConnectStatus(register_Strophe.Status.REGISTERED, null);
         }
 
         return false;
@@ -104608,7 +109280,7 @@ converse.plugins.add('converse-register', {
     });
     /************************ BEGIN Event Handlers ************************/
 
-    converse_core_api.listen.on('controlBoxInitialized', view => {
+    core_api.listen.on('controlBoxInitialized', view => {
       view.model.on('change:active-form', view.showLoginOrRegisterForm, view);
     });
     /************************ END Event Handlers ************************/
@@ -104619,7 +109291,7 @@ converse.plugins.add('converse-register', {
 function rooms_list_templateObject5() {
   const data = rooms_list_taggedTemplateLiteral(["\n        <div class=\"list-container list-container--openrooms ", "\">\n            <a class=\"list-toggle open-rooms-toggle controlbox-padded\" title=\"", "\" @click=", ">\n            <span class=\"fa ", "\"></span> ", "</a>\n            <div class=\"items-list rooms-list open-rooms-list ", "\">\n                ", "\n            </div>\n        </div>"]);
 
-  rooms_list_templateObject5 = function _templateObject5() {
+  rooms_list_templateObject5 = function () {
     return data;
   };
 
@@ -104629,7 +109301,7 @@ function rooms_list_templateObject5() {
 function rooms_list_templateObject4() {
   const data = rooms_list_taggedTemplateLiteral(["\n        <div class=\"list-item controlbox-padded available-chatroom d-flex flex-row ", " ", "\"\n            data-room-jid=\"", "\">\n\n            ", "\n            <a class=\"list-item-link open-room available-room w-100\"\n            data-room-jid=\"", "\"\n            title=\"", "\"\n            @click=", ">", "</a>\n\n            ", "\n\n            <a class=\"list-item-action room-info fa fa-info-circle\"\n            data-room-jid=\"", "\"\n            title=\"", "\"\n            @click=", "></a>\n\n            <a class=\"list-item-action fa fa-sign-out-alt close-room\"\n            data-room-jid=\"", "\"\n            data-room-name=\"", "\"\n            title=\"", "\"\n            @click=", "></a>\n        </div>"]);
 
-  rooms_list_templateObject4 = function _templateObject4() {
+  rooms_list_templateObject4 = function () {
     return data;
   };
 
@@ -104639,7 +109311,7 @@ function rooms_list_templateObject4() {
 function rooms_list_templateObject3() {
   const data = rooms_list_taggedTemplateLiteral(["<span class=\"list-item-badge badge badge--muc msgs-indicator\">", "</span>"]);
 
-  rooms_list_templateObject3 = function _templateObject3() {
+  rooms_list_templateObject3 = function () {
     return data;
   };
 
@@ -104649,7 +109321,7 @@ function rooms_list_templateObject3() {
 function rooms_list_templateObject2() {
   const data = rooms_list_taggedTemplateLiteral(["\n            <a class=\"list-item-action fa fa-bookmark add-bookmark\"\n               data-room-jid=\"", "\"\n               data-bookmark-name=\"", "\"\n               @click=", "\n               title=\"", "\"></a>"]);
 
-  rooms_list_templateObject2 = function _templateObject2() {
+  rooms_list_templateObject2 = function () {
     return data;
   };
 
@@ -104659,7 +109331,7 @@ function rooms_list_templateObject2() {
 function rooms_list_templateObject() {
   const data = rooms_list_taggedTemplateLiteral(["\n            <a class=\"list-item-action fa fa-bookmark remove-bookmark button-on\"\n               data-room-jid=\"", "\"\n               data-bookmark-name=\"", "\"\n               @click=", "\n               title=\"", "\"></a>"]);
 
-  rooms_list_templateObject = function _templateObject() {
+  rooms_list_templateObject = function () {
     return data;
   };
 
@@ -104698,7 +109370,7 @@ const room_item = o => {
     room
   }, o))));
 });
-// CONCATENATED MODULE: ./src/converse-roomslist.js
+// CONCATENATED MODULE: ./src/plugins/roomslist.js
 /**
  * @module converse-roomslist
  * @description
@@ -104715,9 +109387,9 @@ const room_item = o => {
 
 
 const {
-  Strophe: converse_roomslist_Strophe
+  Strophe: roomslist_Strophe
 } = converse.env;
-const converse_roomslist_u = converse.env.utils;
+const roomslist_u = converse.env.utils;
 converse.plugins.add('converse-roomslist', {
   /* Optional dependencies are other plugins which might be
    * overridden or relied upon, and therefore need to be loaded before
@@ -104738,13 +109410,13 @@ converse.plugins.add('converse-roomslist', {
      * loaded by converse.js's plugin machinery.
      */
     // Promises exposed by this plugin
-    converse_core_api.promises.add('roomsListInitialized');
-    converse_core_converse.RoomsList = model_Model.extend({
+    core_api.promises.add('roomsListInitialized');
+    core_converse.RoomsList = model_Model.extend({
       defaults: {
-        "toggle-state": converse_core_converse.OPENED
+        "toggle-state": core_converse.OPENED
       }
     });
-    converse_core_converse.RoomsListView = view_View.extend({
+    core_converse.RoomsListView = View.extend({
       tagName: 'span',
 
       initialize() {
@@ -104752,40 +109424,40 @@ converse.plugins.add('converse-roomslist', {
         this.listenTo(this.model, 'remove', this.renderIfChatRoom);
         this.listenTo(this.model, 'destroy', this.renderIfChatRoom);
         this.listenTo(this.model, 'change', this.renderIfRelevantChange);
-        const id = "converse.roomslist".concat(converse_core_converse.bare_jid);
-        this.list_model = new converse_core_converse.RoomsList({
+        const id = "converse.roomslist".concat(core_converse.bare_jid);
+        this.list_model = new core_converse.RoomsList({
           id
         });
-        this.list_model.browserStorage = converse_core_converse.createStore(id);
+        this.list_model.browserStorage = core_converse.createStore(id);
         this.list_model.fetch();
         this.render();
         this.insertIntoControlBox();
       },
 
       renderIfChatRoom(model) {
-        converse_roomslist_u.isChatRoom(model) && this.render();
+        roomslist_u.isChatRoom(model) && this.render();
       },
 
       renderIfRelevantChange(model) {
         const attrs = ['bookmarked', 'hidden', 'name', 'num_unread', 'num_unread_general'];
         const changed = model.changed || {};
 
-        if (converse_roomslist_u.isChatRoom(model) && Object.keys(changed).filter(m => attrs.includes(m)).length) {
+        if (roomslist_u.isChatRoom(model) && Object.keys(changed).filter(m => attrs.includes(m)).length) {
           this.render();
         }
       },
 
       toHTML() {
         return rooms_list({
-          '_converse': converse_core_converse,
+          '_converse': core_converse,
           'addBookmark': ev => this.addBookmark(ev),
-          'allow_bookmarks': converse_core_converse.allow_bookmarks && converse_core_converse.bookmarks,
+          'allow_bookmarks': core_converse.allow_bookmarks && core_converse.bookmarks,
           'closeRoom': ev => this.closeRoom(ev),
-          'collapsed': this.list_model.get('toggle-state') !== converse_core_converse.OPENED,
-          'currently_open': room => converse_core_converse.isUniView() && !room.get('hidden'),
+          'collapsed': this.list_model.get('toggle-state') !== core_converse.OPENED,
+          'currently_open': room => core_converse.isUniView() && !room.get('hidden'),
           'openRoom': ev => this.openRoom(ev),
           'removeBookmark': ev => this.removeBookmark(ev),
-          'rooms': this.model.filter(m => m.get('type') === converse_core_converse.CHATROOMS_TYPE),
+          'rooms': this.model.filter(m => m.get('type') === core_converse.CHATROOMS_TYPE),
           'showRoomDetailsModal': ev => this.showRoomDetailsModal(ev),
           'toggleRoomsList': ev => this.toggleRoomsList(ev),
           'toggle_state': this.list_model.get('toggle-state')
@@ -104793,9 +109465,9 @@ converse.plugins.add('converse-roomslist', {
       },
 
       insertIntoControlBox() {
-        const controlboxview = converse_core_converse.chatboxviews.get('controlbox');
+        const controlboxview = core_converse.chatboxviews.get('controlbox');
 
-        if (controlboxview !== undefined && !converse_roomslist_u.rootContains(converse_core_converse.root, this.el)) {
+        if (controlboxview !== undefined && !roomslist_u.rootContains(core_converse.root, this.el)) {
           const el = controlboxview.el.querySelector('.list-container--openrooms');
           el && el.parentNode.replaceChild(this.el, el);
         }
@@ -104804,17 +109476,12 @@ converse.plugins.add('converse-roomslist', {
       showRoomDetailsModal(ev) {
         const jid = ev.target.getAttribute('data-room-jid');
 
-        const room = converse_core_converse.chatboxes.get(jid);
+        const room = core_converse.chatboxes.get(jid);
 
         ev.preventDefault();
-
-        if (room.room_details_modal === undefined) {
-          room.room_details_modal = new muc_details({
-            'model': room
-          });
-        }
-
-        room.room_details_modal.show(ev);
+        core_api.modal.show(modals_muc_details, {
+          'model': room
+        }, ev);
       },
 
       async openRoom(ev) {
@@ -104822,10 +109489,10 @@ converse.plugins.add('converse-roomslist', {
         const name = ev.target.textContent;
         const jid = ev.target.getAttribute('data-room-jid');
         const data = {
-          'name': name || converse_roomslist_Strophe.unescapeNode(converse_roomslist_Strophe.getNodeFromJid(jid)) || jid
+          'name': name || roomslist_Strophe.unescapeNode(roomslist_Strophe.getNodeFromJid(jid)) || jid
         };
-        await converse_core_api.rooms.open(jid, data, true);
-        converse_core_api.chatviews.get(jid).maybeFocus();
+        await core_api.rooms.open(jid, data, true);
+        core_api.chatviews.get(jid).maybeFocus();
       },
 
       closeRoom(ev) {
@@ -104835,12 +109502,12 @@ converse.plugins.add('converse-roomslist', {
 
         if (confirm(i18n_("Are you sure you want to leave the groupchat %1$s?", name))) {
           // TODO: replace with API call
-          converse_core_converse.chatboxviews.get(jid).close();
+          core_converse.chatboxviews.get(jid).close();
         }
       },
 
-      removeBookmark: converse_core_converse.removeBookmarkViaEvent,
-      addBookmark: converse_core_converse.addBookmarkViaEvent,
+      removeBookmark: core_converse.removeBookmarkViaEvent,
+      addBookmark: core_converse.addBookmarkViaEvent,
 
       toggleRoomsList(ev) {
         if (ev && ev.preventDefault) {
@@ -104850,17 +109517,17 @@ converse.plugins.add('converse-roomslist', {
         const icon_el = ev.target.matches('.fa') ? ev.target : ev.target.querySelector('.fa');
 
         if (icon_el.classList.contains("fa-caret-down")) {
-          converse_roomslist_u.slideIn(this.el.querySelector('.open-rooms-list')).then(() => {
+          roomslist_u.slideIn(this.el.querySelector('.open-rooms-list')).then(() => {
             this.list_model.save({
-              'toggle-state': converse_core_converse.CLOSED
+              'toggle-state': core_converse.CLOSED
             });
             icon_el.classList.remove("fa-caret-down");
             icon_el.classList.add("fa-caret-right");
           });
         } else {
-          converse_roomslist_u.slideOut(this.el.querySelector('.open-rooms-list')).then(() => {
+          roomslist_u.slideOut(this.el.querySelector('.open-rooms-list')).then(() => {
             this.list_model.save({
-              'toggle-state': converse_core_converse.OPENED
+              'toggle-state': core_converse.OPENED
             });
             icon_el.classList.remove("fa-caret-right");
             icon_el.classList.add("fa-caret-down");
@@ -104870,9 +109537,9 @@ converse.plugins.add('converse-roomslist', {
 
     });
 
-    const initRoomsListView = function initRoomsListView() {
-      converse_core_converse.rooms_list_view = new converse_core_converse.RoomsListView({
-        'model': converse_core_converse.chatboxes
+    const initRoomsListView = function () {
+      core_converse.rooms_list_view = new core_converse.RoomsListView({
+        'model': core_converse.chatboxes
       });
       /**
        * Triggered once the _converse.RoomsListView has been created and initialized.
@@ -104880,39 +109547,39 @@ converse.plugins.add('converse-roomslist', {
        * @example _converse.api.listen.on('roomsListInitialized', status => { ... });
        */
 
-      converse_core_api.trigger('roomsListInitialized');
+      core_api.trigger('roomsListInitialized');
     };
 
-    converse_core_api.listen.on('connected', async () => {
-      if (converse_core_converse.allow_bookmarks) {
-        await converse_core_api.waitUntil('bookmarksInitialized');
+    core_api.listen.on('connected', async () => {
+      if (core_converse.allow_bookmarks) {
+        await core_api.waitUntil('bookmarksInitialized');
       } else {
-        await Promise.all([converse_core_api.waitUntil('chatBoxesFetched'), converse_core_api.waitUntil('roomsPanelRendered')]);
+        await Promise.all([core_api.waitUntil('chatBoxesFetched'), core_api.waitUntil('roomsPanelRendered')]);
       }
 
       initRoomsListView();
     });
-    converse_core_api.listen.on('reconnected', initRoomsListView);
+    core_api.listen.on('reconnected', initRoomsListView);
   }
 
 });
-// CONCATENATED MODULE: ./src/templates/add_contact_modal.js
-function add_contact_modal_templateObject() {
-  const data = add_contact_modal_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"addContactModalLabel\">", "</h5>\n                    ", "\n                </div>\n                <form class=\"converse-form add-xmpp-contact\">\n                    <div class=\"modal-body\">\n                        <span class=\"modal-alert\"></span>\n                        <div class=\"form-group add-xmpp-contact__jid\">\n                            <label class=\"clearfix\" for=\"jid\">", ":</label>\n                            <div class=\"suggestion-box suggestion-box__jid\">\n                                <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n                                <input type=\"text\" name=\"jid\" ?required=", "\n                                    value=\"", "\"\n                                    class=\"form-control suggestion-box__input\"\n                                    placeholder=\"", "\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                            </div>\n                        </div>\n                        <div class=\"form-group add-xmpp-contact__name\">\n                            <label class=\"clearfix\" for=\"name\">", ":</label>\n                            <div class=\"suggestion-box suggestion-box__name\">\n                                <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n                                <input type=\"text\" name=\"name\" value=\"", "\"\n                                    class=\"form-control suggestion-box__input\"\n                                    placeholder=\"", "\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"invalid-feedback\">", "</div>\n                        </div>\n                        <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    "]);
+// CONCATENATED MODULE: ./src/modals/templates/add-contact.js
+function add_contact_templateObject() {
+  const data = add_contact_taggedTemplateLiteral(["\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"addContactModalLabel\">", "</h5>\n                    ", "\n                </div>\n                <form class=\"converse-form add-xmpp-contact\">\n                    <div class=\"modal-body\">\n                        <span class=\"modal-alert\"></span>\n                        <div class=\"form-group add-xmpp-contact__jid\">\n                            <label class=\"clearfix\" for=\"jid\">", ":</label>\n                            <div class=\"suggestion-box suggestion-box__jid\">\n                                <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n                                <input type=\"text\" name=\"jid\" ?required=", "\n                                    value=\"", "\"\n                                    class=\"form-control suggestion-box__input\"\n                                    placeholder=\"", "\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                            </div>\n                        </div>\n                        <div class=\"form-group add-xmpp-contact__name\">\n                            <label class=\"clearfix\" for=\"name\">", ":</label>\n                            <div class=\"suggestion-box suggestion-box__name\">\n                                <ul class=\"suggestion-box__results suggestion-box__results--above\" hidden=\"\"></ul>\n                                <input type=\"text\" name=\"name\" value=\"", "\"\n                                    class=\"form-control suggestion-box__input\"\n                                    placeholder=\"", "\"/>\n                                <span class=\"suggestion-box__additions visually-hidden\" role=\"status\" aria-live=\"assertive\" aria-relevant=\"additions\"></span>\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"invalid-feedback\">", "</div>\n                        </div>\n                        <button type=\"submit\" class=\"btn btn-primary\">", "</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    "]);
 
-  add_contact_modal_templateObject = function _templateObject() {
+  add_contact_templateObject = function () {
     return data;
   };
 
   return data;
 }
 
-function add_contact_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
+function add_contact_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
 
 
 
 
-/* harmony default export */ var add_contact_modal = (o => {
+/* harmony default export */ var add_contact = (o => {
   const i18n_contact_placeholder = i18n_('name@example.org');
 
   const i18n_add = i18n_('Add');
@@ -104925,29 +109592,191 @@ function add_contact_modal_taggedTemplateLiteral(strings, raw) { if (!raw) { raw
 
   const i18n_nickname = i18n_('Nickname');
 
-  return lit_html_html(add_contact_modal_templateObject(), i18n_new_contact, modal_header_close_button, i18n_xmpp_address, !o._converse.xhr_user_search_url, o.jid || '', i18n_contact_placeholder, i18n_nickname, o.nickname || '', i18n_nickname, i18n_error_message, i18n_add);
+  return lit_html_html(add_contact_templateObject(), i18n_new_contact, modal_header_close_button, i18n_xmpp_address, !o._converse.xhr_user_search_url, o.jid || '', i18n_contact_placeholder, i18n_nickname, o.nickname || '', i18n_nickname, i18n_error_message, i18n_add);
+});
+// CONCATENATED MODULE: ./src/modals/add-contact.js
+
+
+
+
+
+const {
+  Strophe: add_contact_Strophe
+} = converse.env;
+const add_contact_u = converse.env.utils;
+const AddContactModal = modals_base.extend({
+  id: "add-contact-modal",
+  events: {
+    'submit form': 'addContactFromForm'
+  },
+
+  initialize() {
+    modals_base.prototype.initialize.apply(this, arguments);
+    this.listenTo(this.model, 'change', this.render);
+  },
+
+  toHTML() {
+    const label_nickname = core_api.settings.get('xhr_user_search_url') ? i18n_('Contact name') : i18n_('Optional nickname');
+    return add_contact(Object.assign(this.model.toJSON(), {
+      _converse: core_converse,
+      label_nickname
+    }));
+  },
+
+  afterRender() {
+    if (typeof core_api.settings.get('xhr_user_search_url') === 'string') {
+      this.initXHRAutoComplete();
+    } else {
+      this.initJIDAutoComplete();
+    }
+
+    const jid_input = this.el.querySelector('input[name="jid"]');
+    this.el.addEventListener('shown.bs.modal', () => jid_input.focus(), false);
+  },
+
+  initJIDAutoComplete() {
+    if (!core_api.settings.get('autocomplete_add_contact')) {
+      return;
+    }
+
+    const el = this.el.querySelector('.suggestion-box__jid').parentElement;
+    this.jid_auto_complete = new core_converse.AutoComplete(el, {
+      'data': (text, input) => "".concat(input.slice(0, input.indexOf("@")), "@").concat(text),
+      'filter': core_converse.FILTER_STARTSWITH,
+      'list': [...new Set(core_converse.roster.map(item => add_contact_Strophe.getDomainFromJid(item.get('jid'))))]
+    });
+  },
+
+  initXHRAutoComplete() {
+    if (!core_api.settings.get('autocomplete_add_contact')) {
+      return this.initXHRFetch();
+    }
+
+    const el = this.el.querySelector('.suggestion-box__name').parentElement;
+    this.name_auto_complete = new core_converse.AutoComplete(el, {
+      'auto_evaluate': false,
+      'filter': core_converse.FILTER_STARTSWITH,
+      'list': []
+    });
+    const xhr = new window.XMLHttpRequest(); // `open` must be called after `onload` for mock/testing purposes.
+
+    xhr.onload = () => {
+      if (xhr.responseText) {
+        const r = xhr.responseText;
+        this.name_auto_complete.list = JSON.parse(r).map(i => ({
+          'label': i.fullname || i.jid,
+          'value': i.jid
+        }));
+        this.name_auto_complete.auto_completing = true;
+        this.name_auto_complete.evaluate();
+      }
+    };
+
+    const input_el = this.el.querySelector('input[name="name"]');
+    input_el.addEventListener('input', lodash_es_debounce(() => {
+      xhr.open("GET", "".concat(core_api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true);
+      xhr.send();
+    }, 300));
+    this.name_auto_complete.on('suggestion-box-selectcomplete', ev => {
+      this.el.querySelector('input[name="name"]').value = ev.text.label;
+      this.el.querySelector('input[name="jid"]').value = ev.text.value;
+    });
+  },
+
+  initXHRFetch() {
+    this.xhr = new window.XMLHttpRequest();
+
+    this.xhr.onload = () => {
+      if (this.xhr.responseText) {
+        const r = this.xhr.responseText;
+        const list = JSON.parse(r).map(i => ({
+          'label': i.fullname || i.jid,
+          'value': i.jid
+        }));
+
+        if (list.length !== 1) {
+          const el = this.el.querySelector('.invalid-feedback');
+          el.textContent = i18n_('Sorry, could not find a contact with that name');
+          add_contact_u.addClass('d-block', el);
+          return;
+        }
+
+        const jid = list[0].value;
+
+        if (this.validateSubmission(jid)) {
+          const form = this.el.querySelector('form');
+          const name = list[0].label;
+          this.afterSubmission(form, jid, name);
+        }
+      }
+    };
+  },
+
+  validateSubmission(jid) {
+    const el = this.el.querySelector('.invalid-feedback');
+
+    if (!jid || lodash_es_compact(jid.split('@')).length < 2) {
+      add_contact_u.addClass('is-invalid', this.el.querySelector('input[name="jid"]'));
+      add_contact_u.addClass('d-block', el);
+      return false;
+    } else if (core_converse.roster.get(add_contact_Strophe.getBareJidFromJid(jid))) {
+      el.textContent = i18n_('This contact has already been added');
+      add_contact_u.addClass('d-block', el);
+      return false;
+    }
+
+    add_contact_u.removeClass('d-block', el);
+    return true;
+  },
+
+  afterSubmission(form, jid, name) {
+    core_converse.roster.addAndSubscribe(jid, name);
+
+    this.model.clear();
+    this.modal.hide();
+  },
+
+  addContactFromForm(ev) {
+    ev.preventDefault();
+    const data = new FormData(ev.target),
+          jid = (data.get('jid') || '').trim();
+
+    if (!jid && typeof core_api.settings.get('xhr_user_search_url') === 'string') {
+      const input_el = this.el.querySelector('input[name="name"]');
+      this.xhr.open("GET", "".concat(core_api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true);
+      this.xhr.send();
+      return;
+    }
+
+    if (this.validateSubmission(jid)) {
+      this.afterSubmission(ev.target, jid, data.get('name'));
+    }
+  }
+
 });
+core_converse.AddContactModal = AddContactModal;
+/* harmony default export */ var modals_add_contact = (AddContactModal);
 // EXTERNAL MODULE: ./src/templates/group_header.html
-var group_header = __webpack_require__(142);
+var group_header = __webpack_require__(184);
 var group_header_default = /*#__PURE__*/__webpack_require__.n(group_header);
 
 // EXTERNAL MODULE: ./src/templates/pending_contact.html
-var pending_contact = __webpack_require__(143);
+var pending_contact = __webpack_require__(185);
 var pending_contact_default = /*#__PURE__*/__webpack_require__.n(pending_contact);
 
 // EXTERNAL MODULE: ./src/templates/requesting_contact.html
-var requesting_contact = __webpack_require__(144);
+var requesting_contact = __webpack_require__(186);
 var requesting_contact_default = /*#__PURE__*/__webpack_require__.n(requesting_contact);
 
 // EXTERNAL MODULE: ./src/templates/roster.html
-var roster = __webpack_require__(145);
+var roster = __webpack_require__(187);
 var roster_default = /*#__PURE__*/__webpack_require__.n(roster);
 
 // CONCATENATED MODULE: ./src/templates/roster_filter.js
 function roster_filter_templateObject() {
   const data = roster_filter_taggedTemplateLiteral(["\n    <form class=\"controlbox-padded roster-filter-form input-button-group ", "\"\n          @submit=", ">\n        <div class=\"form-inline flex-nowrap\">\n            <div class=\"filter-by d-flex flex-nowrap\">\n                <span @click=", " class=\"fa fa-user ", "\" data-type=\"contacts\" title=\"", "\"></span>\n                <span @click=", " class=\"fa fa-users ", "\" data-type=\"groups\" title=\"", "\"></span>\n                <span @click=", " class=\"fa fa-circle ", "\" data-type=\"state\" title=\"", "\"></span>\n            </div>\n            <div class=\"btn-group\">\n                <input .value=\"", "\"\n                       @keydown=", "\n                       class=\"roster-filter form-control ", "\"\n                       placeholder=\"", "\"/>\n                <span class=\"clear-input fa fa-times ", "\"\n                      @click=", ">\n                </span>\n            </div>\n            <select class=\"form-control state-type ", "\"\n                    @change=", ">\n                <option value=\"\">", "</option>\n                <option ?selected=", " value=\"unread_messages\">", "</option>\n                <option ?selected=", " value=\"online\">", "</option>\n                <option ?selected=", " value=\"chat\">", "</option>\n                <option ?selected=", " value=\"dnd\">", "</option>\n                <option ?selected=", " value=\"away\">", "</option>\n                <option ?selected=", " value=\"xa\">", "</option>\n                <option ?selected=", " value=\"offline\">", "</option>\n            </select>\n        </div>\n    </form>\n"]);
 
-  roster_filter_templateObject = function _templateObject() {
+  roster_filter_templateObject = function () {
     return data;
   };
 
@@ -104959,10 +109788,10 @@ function roster_filter_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = s
 
 /* harmony default export */ var roster_filter = (o => lit_html_html(roster_filter_templateObject(), !o.visible ? 'hidden' : 'fade-in', o.submitFilter, o.changeTypeFilter, o.filter_type === 'contacts' ? 'selected' : '', o.title_contact_filter, o.changeTypeFilter, o.filter_type === 'groups' ? 'selected' : '', o.title_group_filter, o.changeTypeFilter, o.filter_type === 'state' ? 'selected' : '', o.title_status_filter, o.filter_text || '', o.liveFilter, o.filter_type === 'state' ? 'hidden' : '', o.placeholder, !o.filter_text || o.filter_type === 'state' ? 'hidden' : '', o.clearFilter, o.filter_type !== 'state' ? 'hidden' : '', o.changeChatStateFilter, o.label_any, o.chat_state === 'unread_messages', o.label_unread_messages, o.chat_state === 'online', o.label_online, o.chat_state === 'chat', o.label_chatty, o.chat_state === 'dnd', o.label_busy, o.chat_state === 'away', o.label_away, o.chat_state === 'xa', o.label_xa, o.chat_state === 'offline', o.label_offline));
 // EXTERNAL MODULE: ./src/templates/roster_item.html
-var templates_roster_item = __webpack_require__(146);
+var templates_roster_item = __webpack_require__(188);
 var roster_item_default = /*#__PURE__*/__webpack_require__.n(templates_roster_item);
 
-// CONCATENATED MODULE: ./src/converse-rosterview.js
+// CONCATENATED MODULE: ./src/plugins/rosterview.js
 /**
  * @module converse-rosterview
  * @copyright 2020, the Converse.js contributors
@@ -104985,11 +109814,7 @@ var roster_item_default = /*#__PURE__*/__webpack_require__.n(templates_roster_it
 
 
 
-
-const {
-  Strophe: converse_rosterview_Strophe
-} = converse.env;
-const converse_rosterview_u = converse.env.utils;
+const rosterview_u = converse.env.utils;
 converse.plugins.add('converse-rosterview', {
   dependencies: ["converse-roster", "converse-modal", "converse-chatboxviews"],
 
@@ -104997,7 +109822,7 @@ converse.plugins.add('converse-rosterview', {
     /* The initialize function gets called as soon as the plugin is
      * loaded by converse.js's plugin machinery.
      */
-    converse_core_api.settings.extend({
+    core_api.settings.extend({
       'autocomplete_add_contact': true,
       'allow_chat_pending_contacts': true,
       'allow_contact_removal': true,
@@ -105005,7 +109830,7 @@ converse.plugins.add('converse-rosterview', {
       'roster_groups': true,
       'xhr_user_search_url': null
     });
-    converse_core_api.promises.add('rosterViewInitialized');
+    core_api.promises.add('rosterViewInitialized');
     const STATUSES = {
       'dnd': i18n_('This contact is busy'),
       'online': i18n_('This contact is online'),
@@ -105014,157 +109839,7 @@ converse.plugins.add('converse-rosterview', {
       'xa': i18n_('This contact is away for an extended period'),
       'away': i18n_('This contact is away')
     };
-    converse_core_converse.AddContactModal = BootstrapModal.extend({
-      id: "add-contact-modal",
-      events: {
-        'submit form': 'addContactFromForm'
-      },
-
-      initialize() {
-        BootstrapModal.prototype.initialize.apply(this, arguments);
-        this.listenTo(this.model, 'change', this.render);
-      },
-
-      toHTML() {
-        const label_nickname = converse_core_api.settings.get('xhr_user_search_url') ? i18n_('Contact name') : i18n_('Optional nickname');
-        return add_contact_modal(Object.assign(this.model.toJSON(), {
-          _converse: converse_core_converse,
-          label_nickname
-        }));
-      },
-
-      afterRender() {
-        if (typeof converse_core_api.settings.get('xhr_user_search_url') === 'string') {
-          this.initXHRAutoComplete();
-        } else {
-          this.initJIDAutoComplete();
-        }
-
-        const jid_input = this.el.querySelector('input[name="jid"]');
-        this.el.addEventListener('shown.bs.modal', () => jid_input.focus(), false);
-      },
-
-      initJIDAutoComplete() {
-        if (!converse_core_api.settings.get('autocomplete_add_contact')) {
-          return;
-        }
-
-        const el = this.el.querySelector('.suggestion-box__jid').parentElement;
-        this.jid_auto_complete = new converse_core_converse.AutoComplete(el, {
-          'data': (text, input) => "".concat(input.slice(0, input.indexOf("@")), "@").concat(text),
-          'filter': converse_core_converse.FILTER_STARTSWITH,
-          'list': [...new Set(converse_core_converse.roster.map(item => converse_rosterview_Strophe.getDomainFromJid(item.get('jid'))))]
-        });
-      },
-
-      initXHRAutoComplete() {
-        if (!converse_core_api.settings.get('autocomplete_add_contact')) {
-          return this.initXHRFetch();
-        }
-
-        const el = this.el.querySelector('.suggestion-box__name').parentElement;
-        this.name_auto_complete = new converse_core_converse.AutoComplete(el, {
-          'auto_evaluate': false,
-          'filter': converse_core_converse.FILTER_STARTSWITH,
-          'list': []
-        });
-        const xhr = new window.XMLHttpRequest(); // `open` must be called after `onload` for mock/testing purposes.
-
-        xhr.onload = () => {
-          if (xhr.responseText) {
-            const r = xhr.responseText;
-            this.name_auto_complete.list = JSON.parse(r).map(i => ({
-              'label': i.fullname || i.jid,
-              'value': i.jid
-            }));
-            this.name_auto_complete.auto_completing = true;
-            this.name_auto_complete.evaluate();
-          }
-        };
-
-        const input_el = this.el.querySelector('input[name="name"]');
-        input_el.addEventListener('input', lodash_es_debounce(() => {
-          xhr.open("GET", "".concat(converse_core_api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true);
-          xhr.send();
-        }, 300));
-        this.name_auto_complete.on('suggestion-box-selectcomplete', ev => {
-          this.el.querySelector('input[name="name"]').value = ev.text.label;
-          this.el.querySelector('input[name="jid"]').value = ev.text.value;
-        });
-      },
-
-      initXHRFetch() {
-        this.xhr = new window.XMLHttpRequest();
-
-        this.xhr.onload = () => {
-          if (this.xhr.responseText) {
-            const r = this.xhr.responseText;
-            const list = JSON.parse(r).map(i => ({
-              'label': i.fullname || i.jid,
-              'value': i.jid
-            }));
-
-            if (list.length !== 1) {
-              const el = this.el.querySelector('.invalid-feedback');
-              el.textContent = i18n_('Sorry, could not find a contact with that name');
-              converse_rosterview_u.addClass('d-block', el);
-              return;
-            }
-
-            const jid = list[0].value;
-
-            if (this.validateSubmission(jid)) {
-              const form = this.el.querySelector('form');
-              const name = list[0].label;
-              this.afterSubmission(form, jid, name);
-            }
-          }
-        };
-      },
-
-      validateSubmission(jid) {
-        const el = this.el.querySelector('.invalid-feedback');
-
-        if (!jid || lodash_es_compact(jid.split('@')).length < 2) {
-          converse_rosterview_u.addClass('is-invalid', this.el.querySelector('input[name="jid"]'));
-          converse_rosterview_u.addClass('d-block', el);
-          return false;
-        } else if (converse_core_converse.roster.get(converse_rosterview_Strophe.getBareJidFromJid(jid))) {
-          el.textContent = i18n_('This contact has already been added');
-          converse_rosterview_u.addClass('d-block', el);
-          return false;
-        }
-
-        converse_rosterview_u.removeClass('d-block', el);
-        return true;
-      },
-
-      afterSubmission(form, jid, name) {
-        converse_core_converse.roster.addAndSubscribe(jid, name);
-
-        this.model.clear();
-        this.modal.hide();
-      },
-
-      addContactFromForm(ev) {
-        ev.preventDefault();
-        const data = new FormData(ev.target),
-              jid = (data.get('jid') || '').trim();
-
-        if (!jid && typeof converse_core_api.settings.get('xhr_user_search_url') === 'string') {
-          const input_el = this.el.querySelector('input[name="name"]');
-          this.xhr.open("GET", "".concat(converse_core_api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true);
-          this.xhr.send();
-          return;
-        }
-
-        if (this.validateSubmission(jid)) {
-          this.afterSubmission(ev.target, jid, data.get('name'));
-        }
-      }
-
-    });
-    converse_core_converse.RosterFilter = model_Model.extend({
+    core_converse.RosterFilter = model_Model.extend({
       initialize() {
         this.set({
           'filter_text': '',
@@ -105174,7 +109849,7 @@ converse.plugins.add('converse-rosterview', {
       }
 
     });
-    converse_core_converse.RosterFilterView = view_View.extend({
+    core_converse.RosterFilterView = View.extend({
       tagName: 'span',
 
       initialize() {
@@ -105251,7 +109926,7 @@ converse.plugins.add('converse-rosterview', {
       },
 
       shouldBeVisible() {
-        return converse_core_converse.roster && converse_core_converse.roster.length >= 5 || this.isActive();
+        return core_converse.roster && core_converse.roster.length >= 5 || this.isActive();
       },
 
       clearFilter(ev) {
@@ -105262,7 +109937,7 @@ converse.plugins.add('converse-rosterview', {
       }
 
     });
-    converse_core_converse.RosterContactView = converse_core_converse.ViewWithAvatar.extend({
+    core_converse.RosterContactView = core_converse.ViewWithAvatar.extend({
       tagName: 'li',
       className: 'list-item d-flex hidden controlbox-padded',
       events: {
@@ -105286,7 +109961,7 @@ converse.plugins.add('converse-rosterview', {
 
       render() {
         if (!this.mayBeShown()) {
-          converse_rosterview_u.hideElement(this.el);
+          rosterview_u.hideElement(this.el);
           return this;
         }
 
@@ -105296,13 +109971,13 @@ converse.plugins.add('converse-rosterview', {
               subscription = this.model.get('subscription'),
               jid = this.model.get('jid');
         const classes_to_remove = ['current-xmpp-contact', 'pending-xmpp-contact', 'requesting-xmpp-contact'].concat(Object.keys(STATUSES));
-        classes_to_remove.forEach(c => converse_rosterview_u.removeClass(c, this.el));
+        classes_to_remove.forEach(c => rosterview_u.removeClass(c, this.el));
         this.el.classList.add(show);
         this.el.setAttribute('data-status', show);
         this.highlight();
 
-        if (converse_core_converse.isUniView()) {
-          const chatbox = converse_core_converse.chatboxes.get(this.model.get('jid'));
+        if (core_converse.isUniView()) {
+          const chatbox = core_converse.chatboxes.get(this.model.get('jid'));
 
           if (chatbox) {
             if (chatbox.get('hidden')) {
@@ -105330,7 +110005,7 @@ converse.plugins.add('converse-rosterview', {
           this.el.innerHTML = pending_contact_default()(Object.assign(this.model.toJSON(), {
             display_name,
             'desc_remove': i18n_('Click to remove %1$s as a contact', display_name),
-            'allow_chat_pending_contacts': converse_core_api.settings.get('allow_chat_pending_contacts')
+            'allow_chat_pending_contacts': core_api.settings.get('allow_chat_pending_contacts')
           }));
         } else if (requesting === true) {
           const display_name = this.model.getDisplayName();
@@ -105339,9 +110014,9 @@ converse.plugins.add('converse-rosterview', {
             display_name,
             'desc_accept': i18n_("Click to accept the contact request from %1$s", display_name),
             'desc_decline': i18n_("Click to decline the contact request from %1$s", display_name),
-            'allow_chat_pending_contacts': converse_core_api.settings.get('allow_chat_pending_contacts')
+            'allow_chat_pending_contacts': core_api.settings.get('allow_chat_pending_contacts')
           }));
-        } else if (subscription === 'both' || subscription === 'to' || converse_core_converse.rosterview.isSelf(jid)) {
+        } else if (subscription === 'both' || subscription === 'to' || core_converse.rosterview.isSelf(jid)) {
           this.el.classList.add('current-xmpp-contact');
           this.el.classList.remove(lodash_es_without(['both', 'to'], subscription)[0]);
           this.el.classList.add(subscription);
@@ -105357,8 +110032,8 @@ converse.plugins.add('converse-rosterview', {
        * @method _converse.RosterContactView#highlight
        */
       highlight() {
-        if (converse_core_converse.isUniView()) {
-          const chatbox = converse_core_converse.chatboxes.get(this.model.get('jid'));
+        if (core_converse.isUniView()) {
+          const chatbox = core_converse.chatboxes.get(this.model.get('jid'));
 
           if (chatbox && chatbox.get('hidden') || !chatbox) {
             this.el.classList.remove('open');
@@ -105392,7 +110067,7 @@ converse.plugins.add('converse-rosterview', {
           'desc_status': STATUSES[show],
           'desc_chat': i18n_('Click to chat with %1$s (XMPP address: %2$s)', display_name, item.get('jid')),
           'desc_remove': i18n_('Click to remove %1$s as a contact', display_name),
-          'allow_contact_removal': converse_core_api.settings.get('allow_contact_removal'),
+          'allow_contact_removal': core_api.settings.get('allow_contact_removal'),
           'num_unread': item.get('num_unread') || 0,
           classes: ''
         }));
@@ -105411,7 +110086,7 @@ converse.plugins.add('converse-rosterview', {
       mayBeShown() {
         const chatStatus = this.model.presence.get('show');
 
-        if (converse_core_api.settings.get('hide_offline_users') && chatStatus === 'offline') {
+        if (core_api.settings.get('hide_offline_users') && chatStatus === 'offline') {
           // If pending or requesting, show
           if (this.model.get('ask') === 'subscribe' || this.model.get('subscription') === 'from' || this.model.get('requesting') === true) {
             return true;
@@ -105436,7 +110111,7 @@ converse.plugins.add('converse-rosterview', {
           ev.preventDefault();
         }
 
-        if (!converse_core_api.settings.get('allow_contact_removal')) {
+        if (!core_api.settings.get('allow_contact_removal')) {
           return;
         }
 
@@ -105455,7 +110130,7 @@ converse.plugins.add('converse-rosterview', {
           }
         } catch (e) {
           headless_log.error(e);
-          converse_core_api.alert('error', i18n_('Error'), [i18n_('Sorry, there was an error while trying to remove %1$s as a contact.', this.model.getDisplayName())]);
+          core_api.alert('error', i18n_('Error'), [i18n_('Sorry, there was an error while trying to remove %1$s as a contact.', this.model.getDisplayName())]);
         }
       },
 
@@ -105464,7 +110139,7 @@ converse.plugins.add('converse-rosterview', {
           ev.preventDefault();
         }
 
-        await converse_core_converse.roster.sendContactAddIQ(this.model.get('jid'), this.model.getFullname(), []);
+        await core_converse.roster.sendContactAddIQ(this.model.get('jid'), this.model.getFullname(), []);
         this.model.authorize().subscribe();
       },
 
@@ -105489,14 +110164,14 @@ converse.plugins.add('converse-rosterview', {
      * @memberOf _converse
      */
 
-    converse_core_converse.RosterGroupView = OrderedListView.extend({
+    core_converse.RosterGroupView = OrderedListView.extend({
       tagName: 'div',
       className: 'roster-group hidden',
       events: {
         "click a.group-toggle": "toggle"
       },
       sortImmediatelyOnAdd: true,
-      ItemView: converse_core_converse.RosterContactView,
+      ItemView: core_converse.RosterContactView,
       listItems: 'model.contacts',
       listSelector: '.roster-group-contacts',
       sortEvent: 'presenceChanged',
@@ -105504,25 +110179,25 @@ converse.plugins.add('converse-rosterview', {
       initialize() {
         OrderedListView.prototype.initialize.apply(this, arguments);
 
-        if (this.model.get('name') === converse_core_converse.HEADER_UNREAD) {
+        if (this.model.get('name') === core_converse.HEADER_UNREAD) {
           this.listenTo(this.model.contacts, "change:num_unread", c => !this.model.get('unread_messages') && this.removeContact(c));
         }
 
-        if (this.model.get('name') === converse_core_converse.HEADER_REQUESTING_CONTACTS) {
+        if (this.model.get('name') === core_converse.HEADER_REQUESTING_CONTACTS) {
           this.listenTo(this.model.contacts, "change:requesting", c => !c.get('requesting') && this.removeContact(c));
         }
 
-        if (this.model.get('name') === converse_core_converse.HEADER_PENDING_CONTACTS) {
+        if (this.model.get('name') === core_converse.HEADER_PENDING_CONTACTS) {
           this.listenTo(this.model.contacts, "change:subscription", c => c.get('subscription') !== 'from' && this.removeContact(c));
         }
 
         this.listenTo(this.model.contacts, "remove", this.onRemove);
-        this.listenTo(converse_core_converse.roster, 'change:groups', this.onContactGroupChange); // This event gets triggered once *all* contacts (i.e. not
+        this.listenTo(core_converse.roster, 'change:groups', this.onContactGroupChange); // This event gets triggered once *all* contacts (i.e. not
         // just this group's) have been fetched from browser
         // storage or the XMPP server and once they've been
         // assigned to their various groups.
 
-        converse_core_converse.rosterview.on('rosterContactsFetchedAndProcessed', () => this.sortAndPositionAllItems());
+        core_converse.rosterview.on('rosterContactsFetchedAndProcessed', () => this.sortAndPositionAllItems());
       },
 
       render() {
@@ -105531,24 +110206,24 @@ converse.plugins.add('converse-rosterview', {
           'label_group': this.model.get('name'),
           'desc_group_toggle': this.model.get('description'),
           'toggle_state': this.model.get('state'),
-          '_converse': converse_core_converse
+          '_converse': core_converse
         });
         this.contacts_el = this.el.querySelector('.roster-group-contacts');
         return this;
       },
 
       show() {
-        converse_rosterview_u.showElement(this.el);
+        rosterview_u.showElement(this.el);
 
-        if (this.model.get('state') === converse_core_converse.OPENED) {
-          Object.values(this.getAll()).filter(v => v.mayBeShown()).forEach(v => converse_rosterview_u.showElement(v.el));
+        if (this.model.get('state') === core_converse.OPENED) {
+          Object.values(this.getAll()).filter(v => v.mayBeShown()).forEach(v => rosterview_u.showElement(v.el));
         }
 
         return this;
       },
 
       collapse() {
-        return converse_rosterview_u.slideIn(this.contacts_el);
+        return rosterview_u.slideIn(this.contacts_el);
       },
 
       /* Given a list of contacts, make sure they're filtered out
@@ -105564,17 +110239,17 @@ converse.plugins.add('converse-rosterview', {
           const contact_view = this.get(contact.get('id'));
 
           if (contacts.includes(contact)) {
-            converse_rosterview_u.hideElement(contact_view.el);
+            rosterview_u.hideElement(contact_view.el);
           } else if (contact_view.mayBeShown()) {
-            converse_rosterview_u.showElement(contact_view.el);
+            rosterview_u.showElement(contact_view.el);
             shown += 1;
           }
         });
 
         if (shown) {
-          converse_rosterview_u.showElement(this.el);
+          rosterview_u.showElement(this.el);
         } else {
-          converse_rosterview_u.hideElement(this.el);
+          rosterview_u.hideElement(this.el);
         }
       },
 
@@ -105595,7 +110270,7 @@ converse.plugins.add('converse-rosterview', {
         const contacts = this.model.contacts;
 
         if (type === 'state') {
-          const sticky_groups = [converse_core_converse.HEADER_REQUESTING_CONTACTS, converse_core_converse.HEADER_UNREAD];
+          const sticky_groups = [core_converse.HEADER_REQUESTING_CONTACTS, core_converse.HEADER_UNREAD];
 
           if (sticky_groups.includes(this.model.get('name'))) {
             // When filtering by chat state, we still want to
@@ -105628,12 +110303,12 @@ converse.plugins.add('converse-rosterview', {
        */
       filter(q, type) {
         if (q === null || q === undefined) {
-          type = type || converse_core_converse.rosterview.filter_view.model.get('filter_type');
+          type = type || core_converse.rosterview.filter_view.model.get('filter_type');
 
           if (type === 'state') {
-            q = converse_core_converse.rosterview.filter_view.model.get('chat_state');
+            q = core_converse.rosterview.filter_view.model.get('chat_state');
           } else {
-            q = converse_core_converse.rosterview.filter_view.model.get('filter_text');
+            q = core_converse.rosterview.filter_view.model.get('filter_text');
           }
         }
 
@@ -105647,9 +110322,9 @@ converse.plugins.add('converse-rosterview', {
 
         const icon_el = ev.target.matches('.fa') ? ev.target : ev.target.querySelector('.fa');
 
-        if (converse_rosterview_u.hasClass("fa-caret-down", icon_el)) {
+        if (rosterview_u.hasClass("fa-caret-down", icon_el)) {
           this.model.save({
-            state: converse_core_converse.CLOSED
+            state: core_converse.CLOSED
           });
           await this.collapse();
           icon_el.classList.remove("fa-caret-down");
@@ -105658,11 +110333,11 @@ converse.plugins.add('converse-rosterview', {
           icon_el.classList.remove("fa-caret-right");
           icon_el.classList.add("fa-caret-down");
           this.model.save({
-            state: converse_core_converse.OPENED
+            state: core_converse.OPENED
           });
           this.filter();
-          converse_rosterview_u.showElement(this.el);
-          converse_rosterview_u.slideOut(this.contacts_el);
+          rosterview_u.showElement(this.el);
+          rosterview_u.slideOut(this.contacts_el);
         }
       },
 
@@ -105703,11 +110378,11 @@ converse.plugins.add('converse-rosterview', {
      * @memberOf _converse
      */
 
-    converse_core_converse.RosterView = OrderedListView.extend({
+    core_converse.RosterView = OrderedListView.extend({
       tagName: 'div',
       id: 'converse-roster',
       className: 'controlbox-section',
-      ItemView: converse_core_converse.RosterGroupView,
+      ItemView: core_converse.RosterGroupView,
       listItems: 'model',
       listSelector: '.roster-contacts',
       sortEvent: null,
@@ -105721,13 +110396,13 @@ converse.plugins.add('converse-rosterview', {
 
       initialize() {
         OrderedListView.prototype.initialize.apply(this, arguments);
-        this.listenTo(converse_core_converse.roster, "add", this.onContactAdded);
-        this.listenTo(converse_core_converse.roster, 'change:groups', this.onContactAdded);
-        this.listenTo(converse_core_converse.roster, 'change', this.onContactChange);
-        this.listenTo(converse_core_converse.roster, "destroy", this.update);
-        this.listenTo(converse_core_converse.roster, "remove", this.update);
+        this.listenTo(core_converse.roster, "add", this.onContactAdded);
+        this.listenTo(core_converse.roster, 'change:groups', this.onContactAdded);
+        this.listenTo(core_converse.roster, 'change', this.onContactChange);
+        this.listenTo(core_converse.roster, "destroy", this.update);
+        this.listenTo(core_converse.roster, "remove", this.update);
 
-        converse_core_converse.presences.on('change:show', () => {
+        core_converse.presences.on('change:show', () => {
           this.update();
           this.updateFilter();
         });
@@ -105737,9 +110412,9 @@ converse.plugins.add('converse-rosterview', {
         // storage or the XMPP server and once they've been
         // assigned to their various groups.
 
-        converse_core_api.listen.on('rosterGroupsFetched', this.sortAndPositionAllItems.bind(this));
-        converse_core_api.listen.on('rosterContactsFetched', () => {
-          converse_core_converse.roster.each(contact => this.addRosterContact(contact, {
+        core_api.listen.on('rosterGroupsFetched', this.sortAndPositionAllItems.bind(this));
+        core_api.listen.on('rosterContactsFetched', () => {
+          core_converse.roster.each(contact => this.addRosterContact(contact, {
             'silent': true
           }));
 
@@ -105752,7 +110427,7 @@ converse.plugins.add('converse-rosterview', {
 
       render() {
         this.el.innerHTML = roster_default()({
-          'allow_contact_requests': converse_core_converse.allow_contact_requests,
+          'allow_contact_requests': core_converse.allow_contact_requests,
           'heading_contacts': i18n_('Contacts'),
           'title_add_contact': i18n_('Add a contact'),
           'title_sync_contacts': i18n_('Re-sync your contacts')
@@ -105764,21 +110439,17 @@ converse.plugins.add('converse-rosterview', {
       },
 
       showAddContactModal(ev) {
-        if (this.add_contact_modal === undefined) {
-          this.add_contact_modal = new converse_core_converse.AddContactModal({
-            'model': new model_Model()
-          });
-        }
-
-        this.add_contact_modal.show(ev);
+        core_api.modal.show(core_converse.AddContactModal, {
+          'model': new model_Model()
+        }, ev);
       },
 
       createRosterFilter() {
         // Create a model on which we can store filter properties
-        const model = new converse_core_converse.RosterFilter();
-        model.id = "_converse.rosterfilter-".concat(converse_core_converse.bare_jid);
-        model.browserStorage = converse_core_converse.createStore(model.id);
-        this.filter_view = new converse_core_converse.RosterFilterView({
+        const model = new core_converse.RosterFilter();
+        model.id = "_converse.rosterfilter-".concat(core_converse.bare_jid);
+        model.browserStorage = core_converse.createStore(model.id);
+        this.filter_view = new core_converse.RosterFilterView({
           model
         });
         this.listenTo(this.filter_view.model, 'change', this.updateFilter);
@@ -105803,8 +110474,8 @@ converse.plugins.add('converse-rosterview', {
       }, 100),
 
       update() {
-        if (!converse_rosterview_u.isVisible(this.roster_el)) {
-          converse_rosterview_u.showElement(this.roster_el);
+        if (!rosterview_u.isVisible(this.roster_el)) {
+          rosterview_u.showElement(this.roster_el);
         }
 
         this.filter_view.render();
@@ -105821,9 +110492,9 @@ converse.plugins.add('converse-rosterview', {
         if (type === 'groups') {
           views.forEach(view => {
             if (!view.model.get('name').toLowerCase().includes(query)) {
-              converse_rosterview_u.slideIn(view.el);
+              rosterview_u.slideIn(view.el);
             } else if (view.model.contacts.length > 0) {
-              converse_rosterview_u.slideOut(view.el);
+              rosterview_u.slideOut(view.el);
             }
           });
         } else {
@@ -105833,13 +110504,13 @@ converse.plugins.add('converse-rosterview', {
 
       async syncContacts(ev) {
         ev.preventDefault();
-        converse_rosterview_u.addClass('fa-spin', ev.target);
+        rosterview_u.addClass('fa-spin', ev.target);
 
-        converse_core_converse.roster.data.save('version', null);
+        core_converse.roster.data.save('version', null);
 
-        await converse_core_converse.roster.fetchFromServer();
-        converse_core_api.user.presence.send();
-        converse_rosterview_u.removeClass('fa-spin', ev.target);
+        await core_converse.roster.fetchFromServer();
+        core_api.user.presence.send();
+        rosterview_u.removeClass('fa-spin', ev.target);
       },
 
       reset() {
@@ -105859,22 +110530,22 @@ converse.plugins.add('converse-rosterview', {
 
         if (lodash_es_has(contact.changed, 'subscription')) {
           if (contact.changed.subscription === 'from') {
-            this.addContactToGroup(contact, converse_core_converse.HEADER_PENDING_CONTACTS);
+            this.addContactToGroup(contact, core_converse.HEADER_PENDING_CONTACTS);
           } else if (['both', 'to'].includes(contact.get('subscription'))) {
             this.addExistingContact(contact);
           }
         }
 
         if (lodash_es_has(contact.changed, 'num_unread') && contact.get('num_unread')) {
-          this.addContactToGroup(contact, converse_core_converse.HEADER_UNREAD);
+          this.addContactToGroup(contact, core_converse.HEADER_UNREAD);
         }
 
         if (lodash_es_has(contact.changed, 'ask') && contact.changed.ask === 'subscribe') {
-          this.addContactToGroup(contact, converse_core_converse.HEADER_PENDING_CONTACTS);
+          this.addContactToGroup(contact, core_converse.HEADER_PENDING_CONTACTS);
         }
 
         if (lodash_es_has(contact.changed, 'subscription') && contact.changed.requesting === 'true') {
-          this.addContactToGroup(contact, converse_core_converse.HEADER_REQUESTING_CONTACTS);
+          this.addContactToGroup(contact, core_converse.HEADER_REQUESTING_CONTACTS);
         }
 
         this.updateFilter();
@@ -105907,22 +110578,22 @@ converse.plugins.add('converse-rosterview', {
       addExistingContact(contact, options) {
         let groups;
 
-        if (converse_core_api.settings.get('roster_groups')) {
+        if (core_api.settings.get('roster_groups')) {
           groups = contact.get('groups');
-          groups = groups.length === 0 ? [converse_core_converse.HEADER_UNGROUPED] : groups;
+          groups = groups.length === 0 ? [core_converse.HEADER_UNGROUPED] : groups;
         } else {
-          groups = [converse_core_converse.HEADER_CURRENT_CONTACTS];
+          groups = [core_converse.HEADER_CURRENT_CONTACTS];
         }
 
         if (contact.get('num_unread')) {
-          groups.push(converse_core_converse.HEADER_UNREAD);
+          groups.push(core_converse.HEADER_UNREAD);
         }
 
         groups.forEach(g => this.addContactToGroup(contact, g, options));
       },
 
       isSelf(jid) {
-        return converse_rosterview_u.isSameBareJID(jid, converse_core_converse.connection.jid);
+        return rosterview_u.isSameBareJID(jid, core_converse.connection.jid);
       },
 
       addRosterContact(contact, options) {
@@ -105931,15 +110602,15 @@ converse.plugins.add('converse-rosterview', {
         if (contact.get('subscription') === 'both' || contact.get('subscription') === 'to' || this.isSelf(jid)) {
           this.addExistingContact(contact, options);
         } else {
-          if (!converse_core_converse.allow_contact_requests) {
+          if (!core_converse.allow_contact_requests) {
             headless_log.debug("Not adding requesting or pending contact ".concat(jid, " ") + "because allow_contact_requests is false");
             return;
           }
 
           if (contact.get('ask') === 'subscribe' || contact.get('subscription') === 'from') {
-            this.addContactToGroup(contact, converse_core_converse.HEADER_PENDING_CONTACTS, options);
+            this.addContactToGroup(contact, core_converse.HEADER_PENDING_CONTACTS, options);
           } else if (contact.get('requesting') === true) {
-            this.addContactToGroup(contact, converse_core_converse.HEADER_REQUESTING_CONTACTS, options);
+            this.addContactToGroup(contact, core_converse.HEADER_REQUESTING_CONTACTS, options);
           }
         }
 
@@ -105949,9 +110620,9 @@ converse.plugins.add('converse-rosterview', {
     });
     /* -------- Event Handlers ----------- */
 
-    converse_core_api.listen.on('chatBoxesInitialized', () => {
+    core_api.listen.on('chatBoxesInitialized', () => {
       function highlightRosterItem(chatbox) {
-        const contact = converse_core_converse.roster && converse_core_converse.roster.findWhere({
+        const contact = core_converse.roster && core_converse.roster.findWhere({
           'jid': chatbox.get('jid')
         });
 
@@ -105960,19 +110631,19 @@ converse.plugins.add('converse-rosterview', {
         }
       }
 
-      converse_core_converse.chatboxes.on('destroy', chatbox => highlightRosterItem(chatbox));
+      core_converse.chatboxes.on('destroy', chatbox => highlightRosterItem(chatbox));
 
-      converse_core_converse.chatboxes.on('change:hidden', chatbox => highlightRosterItem(chatbox));
+      core_converse.chatboxes.on('change:hidden', chatbox => highlightRosterItem(chatbox));
     });
-    converse_core_api.listen.on('controlBoxInitialized', view => {
+    core_api.listen.on('controlBoxInitialized', view => {
       function insertRoster() {
-        if (!view.model.get('connected') || converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+        if (!view.model.get('connected') || core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
           return;
         }
         /* Place the rosterview inside the "Contacts" panel. */
 
 
-        converse_core_api.waitUntil('rosterViewInitialized').then(() => view.controlbox_pane.el.insertAdjacentElement('beforeEnd', converse_core_converse.rosterview.el)).catch(e => headless_log.fatal(e));
+        core_api.waitUntil('rosterViewInitialized').then(() => view.controlbox_pane.el.insertAdjacentElement('beforeEnd', core_converse.rosterview.el)).catch(e => headless_log.fatal(e));
       }
 
       insertRoster();
@@ -105981,17 +110652,17 @@ converse.plugins.add('converse-rosterview', {
 
     function initRosterView() {
       /* Create an instance of RosterView once the RosterGroups
-       * collection has been created (in @converse/headless/converse-core.js)
+       * collection has been created (in @converse/headless/core.js)
        */
-      if (converse_core_api.settings.get("authentication") === converse_core_converse.ANONYMOUS) {
+      if (core_api.settings.get("authentication") === core_converse.ANONYMOUS) {
         return;
       }
 
-      converse_core_converse.rosterview = new converse_core_converse.RosterView({
-        'model': converse_core_converse.rostergroups
+      core_converse.rosterview = new core_converse.RosterView({
+        'model': core_converse.rostergroups
       });
 
-      converse_core_converse.rosterview.render();
+      core_converse.rosterview.render();
       /**
        * Triggered once the _converse.RosterView instance has been created and initialized.
        * @event _converse#rosterViewInitialized
@@ -105999,12 +110670,12 @@ converse.plugins.add('converse-rosterview', {
        */
 
 
-      converse_core_api.trigger('rosterViewInitialized');
+      core_api.trigger('rosterViewInitialized');
     }
 
-    converse_core_api.listen.on('rosterInitialized', initRosterView);
-    converse_core_api.listen.on('rosterReadyAfterReconnection', initRosterView);
-    converse_core_api.listen.on('afterTearDown', () => {
+    core_api.listen.on('rosterInitialized', initRosterView);
+    core_api.listen.on('rosterReadyAfterReconnection', initRosterView);
+    core_api.listen.on('afterTearDown', () => {
       if (converse.rosterview) {
         converse.rosterview.model.off().reset();
         converse.rosterview.each(groupview => groupview.removeAll().remove());
@@ -106016,7 +110687,7 @@ converse.plugins.add('converse-rosterview', {
 
 });
 // EXTERNAL MODULE: ./sass/converse.scss
-var sass_converse = __webpack_require__(413);
+var sass_converse = __webpack_require__(501);
 
 // CONCATENATED MODULE: ./src/converse.js
 /**
@@ -106025,15 +110696,15 @@ var sass_converse = __webpack_require__(413);
  * @license Mozilla Public License (MPLv2)
  */
 
+
+
+
 /* START: Removable components
  * --------------------
  * Any of the following components may be removed if they're not needed.
  */
 
 
-
-
-
  // Views for XEP-0048 Bookmarks
 
  // Renders standalone chat boxes for single user chat
@@ -106049,7 +110720,6 @@ var sass_converse = __webpack_require__(413);
  // Views related to MUC
 
 
- // HTML5 Notifications
 
 
 
@@ -106061,11 +110731,11 @@ var sass_converse = __webpack_require__(413);
 
 
 
-
 /* END: Removable components */
 
 
 
+
 const WHITELISTED_PLUGINS = ['converse-autocomplete', 'converse-bookmark-views', 'converse-chatboxviews', 'converse-chatview', 'converse-controlbox', 'converse-dragresize', 'converse-fullscreen', 'converse-mam-views', 'converse-minimize', 'converse-modal', 'converse-muc-views', 'converse-headlines-view', 'converse-notification', 'converse-omemo', 'converse-profile', 'converse-push', 'converse-register', 'converse-roomslist', 'converse-rosterview', 'converse-singleton']; // Use Mustache style syntax for variable interpolation
 
 /* Configuration of Lodash templates (this config is distinct to the
diff --git a/src/conversejs/converse.min.css b/src/conversejs/converse.min.css
index a722f512a4c568d8aec8afa6f72c71f1411b7a74..a2106033017858d899a33c5182884c3ea0377fd9 100644
--- a/src/conversejs/converse.min.css
+++ b/src/conversejs/converse.min.css
@@ -4,6 +4,6 @@
  *
  * Copyright (c) 2013-2018, JC Brand <jc@opkode.com>
  * Licensed under the Mozilla Public License
- */#conversejs :root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}#conversejs *,#conversejs ::after,#conversejs ::before{box-sizing:border-box}#conversejs html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}#conversejs article,#conversejs aside,#conversejs figcaption,#conversejs figure,#conversejs footer,#conversejs header,#conversejs hgroup,#conversejs main,#conversejs nav,#conversejs section{display:block}#conversejs body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}#conversejs [tabindex="-1"]:focus:not(:focus-visible){outline:0!important}#conversejs hr{box-sizing:content-box;height:0;overflow:visible}#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6{margin-top:0;margin-bottom:.5rem}#conversejs p{margin-top:0;margin-bottom:1rem}#conversejs abbr[data-original-title],#conversejs abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}#conversejs address{margin-bottom:1rem;font-style:normal;line-height:inherit}#conversejs dl,#conversejs ol,#conversejs ul{margin-top:0;margin-bottom:1rem}#conversejs ol ol,#conversejs ol ul,#conversejs ul ol,#conversejs ul ul{margin-bottom:0}#conversejs dt{font-weight:700}#conversejs dd{margin-bottom:.5rem;margin-left:0}#conversejs blockquote{margin:0 0 1rem}#conversejs b,#conversejs strong{font-weight:bolder}#conversejs small{font-size:80%}#conversejs sub,#conversejs sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}#conversejs sub{bottom:-.25em}#conversejs sup{top:-.5em}#conversejs a{color:#007bff;text-decoration:none;background-color:transparent}#conversejs a:hover{color:#0056b3;text-decoration:underline}#conversejs a:not([href]){color:inherit;text-decoration:none}#conversejs a:not([href]):hover{color:inherit;text-decoration:none}#conversejs code,#conversejs kbd,#conversejs pre,#conversejs samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}#conversejs pre{margin-top:0;margin-bottom:1rem;overflow:auto}#conversejs figure{margin:0 0 1rem}#conversejs img{vertical-align:middle;border-style:none}#conversejs svg{overflow:hidden;vertical-align:middle}#conversejs table{border-collapse:collapse}#conversejs caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}#conversejs th{text-align:inherit}#conversejs label{display:inline-block;margin-bottom:.5rem}#conversejs button{border-radius:0}#conversejs button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}#conversejs button,#conversejs input,#conversejs optgroup,#conversejs select,#conversejs textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}#conversejs button,#conversejs input{overflow:visible}#conversejs button,#conversejs select{text-transform:none}#conversejs select{word-wrap:normal}#conversejs [type=button],#conversejs [type=reset],#conversejs [type=submit],#conversejs button{-webkit-appearance:button}#conversejs [type=button]:not(:disabled),#conversejs [type=reset]:not(:disabled),#conversejs [type=submit]:not(:disabled),#conversejs button:not(:disabled){cursor:pointer}#conversejs [type=button]::-moz-focus-inner,#conversejs [type=reset]::-moz-focus-inner,#conversejs [type=submit]::-moz-focus-inner,#conversejs button::-moz-focus-inner{padding:0;border-style:none}#conversejs input[type=checkbox],#conversejs input[type=radio]{box-sizing:border-box;padding:0}#conversejs input[type=date],#conversejs input[type=datetime-local],#conversejs input[type=month],#conversejs input[type=time]{-webkit-appearance:listbox}#conversejs textarea{overflow:auto;resize:vertical}#conversejs fieldset{min-width:0;padding:0;margin:0;border:0}#conversejs legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}#conversejs progress{vertical-align:baseline}#conversejs [type=number]::-webkit-inner-spin-button,#conversejs [type=number]::-webkit-outer-spin-button{height:auto}#conversejs [type=search]{outline-offset:-2px;-webkit-appearance:none}#conversejs [type=search]::-webkit-search-decoration{-webkit-appearance:none}#conversejs ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}#conversejs output{display:inline-block}#conversejs summary{display:list-item;cursor:pointer}#conversejs template{display:none}#conversejs [hidden]{display:none!important}#conversejs .h1,#conversejs .h2,#conversejs .h3,#conversejs .h4,#conversejs .h5,#conversejs .h6,#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}#conversejs .h1,#conversejs h1{font-size:2.5rem}#conversejs .h2,#conversejs h2{font-size:2rem}#conversejs .h3,#conversejs h3{font-size:1.75rem}#conversejs .h4,#conversejs h4{font-size:1.5rem}#conversejs .h5,#conversejs h5{font-size:1.25rem}#conversejs .h6,#conversejs h6{font-size:1rem}#conversejs .lead{font-size:1.25rem;font-weight:300}#conversejs .display-1{font-size:6rem;font-weight:300;line-height:1.2}#conversejs .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}#conversejs .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}#conversejs .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}#conversejs hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}#conversejs .small,#conversejs small{font-size:80%;font-weight:400}#conversejs .mark,#conversejs mark{padding:.2em;background-color:#fcf8e3}#conversejs .list-unstyled{padding-left:0;list-style:none}#conversejs .list-inline{padding-left:0;list-style:none}#conversejs .list-inline-item{display:inline-block}#conversejs .list-inline-item:not(:last-child){margin-right:.5rem}#conversejs .initialism{font-size:90%;text-transform:uppercase}#conversejs .blockquote{margin-bottom:1rem;font-size:1.25rem}#conversejs .blockquote-footer{display:block;font-size:80%;color:#6c757d}#conversejs .blockquote-footer::before{content:"\2014\00A0"}#conversejs .img-fluid{max-width:100%;height:auto}#conversejs .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}#conversejs .figure{display:inline-block}#conversejs .figure-img{margin-bottom:.5rem;line-height:1}#conversejs .figure-caption{font-size:90%;color:#6c757d}#conversejs .container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){#conversejs .container{max-width:540px}}@media (min-width:768px){#conversejs .container{max-width:720px}}@media (min-width:992px){#conversejs .container{max-width:960px}}@media (min-width:1200px){#conversejs .container{max-width:1140px}}#conversejs .container-fluid,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm,#conversejs .container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){#conversejs .container,#conversejs .container-sm{max-width:540px}}@media (min-width:768px){#conversejs .container,#conversejs .container-md,#conversejs .container-sm{max-width:720px}}@media (min-width:992px){#conversejs .container,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm{max-width:960px}}@media (min-width:1200px){#conversejs .container,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm,#conversejs .container-xl{max-width:1140px}}#conversejs .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}#conversejs .no-gutters{margin-right:0;margin-left:0}#conversejs .no-gutters>.col,#conversejs .no-gutters>[class*=col-]{padding-right:0;padding-left:0}#conversejs .col,#conversejs .col-1,#conversejs .col-10,#conversejs .col-11,#conversejs .col-12,#conversejs .col-2,#conversejs .col-3,#conversejs .col-4,#conversejs .col-5,#conversejs .col-6,#conversejs .col-7,#conversejs .col-8,#conversejs .col-9,#conversejs .col-auto,#conversejs .col-lg,#conversejs .col-lg-1,#conversejs .col-lg-10,#conversejs .col-lg-11,#conversejs .col-lg-12,#conversejs .col-lg-2,#conversejs .col-lg-3,#conversejs .col-lg-4,#conversejs .col-lg-5,#conversejs .col-lg-6,#conversejs .col-lg-7,#conversejs .col-lg-8,#conversejs .col-lg-9,#conversejs .col-lg-auto,#conversejs .col-md,#conversejs .col-md-1,#conversejs .col-md-10,#conversejs .col-md-11,#conversejs .col-md-12,#conversejs .col-md-2,#conversejs .col-md-3,#conversejs .col-md-4,#conversejs .col-md-5,#conversejs .col-md-6,#conversejs .col-md-7,#conversejs .col-md-8,#conversejs .col-md-9,#conversejs .col-md-auto,#conversejs .col-sm,#conversejs .col-sm-1,#conversejs .col-sm-10,#conversejs .col-sm-11,#conversejs .col-sm-12,#conversejs .col-sm-2,#conversejs .col-sm-3,#conversejs .col-sm-4,#conversejs .col-sm-5,#conversejs .col-sm-6,#conversejs .col-sm-7,#conversejs .col-sm-8,#conversejs .col-sm-9,#conversejs .col-sm-auto,#conversejs .col-xl,#conversejs .col-xl-1,#conversejs .col-xl-10,#conversejs .col-xl-11,#conversejs .col-xl-12,#conversejs .col-xl-2,#conversejs .col-xl-3,#conversejs .col-xl-4,#conversejs .col-xl-5,#conversejs .col-xl-6,#conversejs .col-xl-7,#conversejs .col-xl-8,#conversejs .col-xl-9,#conversejs .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}#conversejs .col{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-3{flex:0 0 25%;max-width:25%}#conversejs .col-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-6{flex:0 0 50%;max-width:50%}#conversejs .col-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-9{flex:0 0 75%;max-width:75%}#conversejs .col-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-12{flex:0 0 100%;max-width:100%}#conversejs .order-first{order:-1}#conversejs .order-last{order:13}#conversejs .order-0{order:0}#conversejs .order-1{order:1}#conversejs .order-2{order:2}#conversejs .order-3{order:3}#conversejs .order-4{order:4}#conversejs .order-5{order:5}#conversejs .order-6{order:6}#conversejs .order-7{order:7}#conversejs .order-8{order:8}#conversejs .order-9{order:9}#conversejs .order-10{order:10}#conversejs .order-11{order:11}#conversejs .order-12{order:12}#conversejs .offset-1{margin-left:8.33333%}#conversejs .offset-2{margin-left:16.66667%}#conversejs .offset-3{margin-left:25%}#conversejs .offset-4{margin-left:33.33333%}#conversejs .offset-5{margin-left:41.66667%}#conversejs .offset-6{margin-left:50%}#conversejs .offset-7{margin-left:58.33333%}#conversejs .offset-8{margin-left:66.66667%}#conversejs .offset-9{margin-left:75%}#conversejs .offset-10{margin-left:83.33333%}#conversejs .offset-11{margin-left:91.66667%}@media (min-width:576px){#conversejs .col-sm{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-sm-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-sm-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-sm-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-sm-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-sm-3{flex:0 0 25%;max-width:25%}#conversejs .col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-sm-6{flex:0 0 50%;max-width:50%}#conversejs .col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-sm-9{flex:0 0 75%;max-width:75%}#conversejs .col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-sm-12{flex:0 0 100%;max-width:100%}#conversejs .order-sm-first{order:-1}#conversejs .order-sm-last{order:13}#conversejs .order-sm-0{order:0}#conversejs .order-sm-1{order:1}#conversejs .order-sm-2{order:2}#conversejs .order-sm-3{order:3}#conversejs .order-sm-4{order:4}#conversejs .order-sm-5{order:5}#conversejs .order-sm-6{order:6}#conversejs .order-sm-7{order:7}#conversejs .order-sm-8{order:8}#conversejs .order-sm-9{order:9}#conversejs .order-sm-10{order:10}#conversejs .order-sm-11{order:11}#conversejs .order-sm-12{order:12}#conversejs .offset-sm-0{margin-left:0}#conversejs .offset-sm-1{margin-left:8.33333%}#conversejs .offset-sm-2{margin-left:16.66667%}#conversejs .offset-sm-3{margin-left:25%}#conversejs .offset-sm-4{margin-left:33.33333%}#conversejs .offset-sm-5{margin-left:41.66667%}#conversejs .offset-sm-6{margin-left:50%}#conversejs .offset-sm-7{margin-left:58.33333%}#conversejs .offset-sm-8{margin-left:66.66667%}#conversejs .offset-sm-9{margin-left:75%}#conversejs .offset-sm-10{margin-left:83.33333%}#conversejs .offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){#conversejs .col-md{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-md-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-md-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-md-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-md-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-md-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-md-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-md-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-md-3{flex:0 0 25%;max-width:25%}#conversejs .col-md-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-md-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-md-6{flex:0 0 50%;max-width:50%}#conversejs .col-md-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-md-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-md-9{flex:0 0 75%;max-width:75%}#conversejs .col-md-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-md-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-md-12{flex:0 0 100%;max-width:100%}#conversejs .order-md-first{order:-1}#conversejs .order-md-last{order:13}#conversejs .order-md-0{order:0}#conversejs .order-md-1{order:1}#conversejs .order-md-2{order:2}#conversejs .order-md-3{order:3}#conversejs .order-md-4{order:4}#conversejs .order-md-5{order:5}#conversejs .order-md-6{order:6}#conversejs .order-md-7{order:7}#conversejs .order-md-8{order:8}#conversejs .order-md-9{order:9}#conversejs .order-md-10{order:10}#conversejs .order-md-11{order:11}#conversejs .order-md-12{order:12}#conversejs .offset-md-0{margin-left:0}#conversejs .offset-md-1{margin-left:8.33333%}#conversejs .offset-md-2{margin-left:16.66667%}#conversejs .offset-md-3{margin-left:25%}#conversejs .offset-md-4{margin-left:33.33333%}#conversejs .offset-md-5{margin-left:41.66667%}#conversejs .offset-md-6{margin-left:50%}#conversejs .offset-md-7{margin-left:58.33333%}#conversejs .offset-md-8{margin-left:66.66667%}#conversejs .offset-md-9{margin-left:75%}#conversejs .offset-md-10{margin-left:83.33333%}#conversejs .offset-md-11{margin-left:91.66667%}}@media (min-width:992px){#conversejs .col-lg{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-lg-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-lg-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-lg-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-lg-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-lg-3{flex:0 0 25%;max-width:25%}#conversejs .col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-lg-6{flex:0 0 50%;max-width:50%}#conversejs .col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-lg-9{flex:0 0 75%;max-width:75%}#conversejs .col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-lg-12{flex:0 0 100%;max-width:100%}#conversejs .order-lg-first{order:-1}#conversejs .order-lg-last{order:13}#conversejs .order-lg-0{order:0}#conversejs .order-lg-1{order:1}#conversejs .order-lg-2{order:2}#conversejs .order-lg-3{order:3}#conversejs .order-lg-4{order:4}#conversejs .order-lg-5{order:5}#conversejs .order-lg-6{order:6}#conversejs .order-lg-7{order:7}#conversejs .order-lg-8{order:8}#conversejs .order-lg-9{order:9}#conversejs .order-lg-10{order:10}#conversejs .order-lg-11{order:11}#conversejs .order-lg-12{order:12}#conversejs .offset-lg-0{margin-left:0}#conversejs .offset-lg-1{margin-left:8.33333%}#conversejs .offset-lg-2{margin-left:16.66667%}#conversejs .offset-lg-3{margin-left:25%}#conversejs .offset-lg-4{margin-left:33.33333%}#conversejs .offset-lg-5{margin-left:41.66667%}#conversejs .offset-lg-6{margin-left:50%}#conversejs .offset-lg-7{margin-left:58.33333%}#conversejs .offset-lg-8{margin-left:66.66667%}#conversejs .offset-lg-9{margin-left:75%}#conversejs .offset-lg-10{margin-left:83.33333%}#conversejs .offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){#conversejs .col-xl{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-xl-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-xl-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-xl-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-xl-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-xl-3{flex:0 0 25%;max-width:25%}#conversejs .col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-xl-6{flex:0 0 50%;max-width:50%}#conversejs .col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-xl-9{flex:0 0 75%;max-width:75%}#conversejs .col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-xl-12{flex:0 0 100%;max-width:100%}#conversejs .order-xl-first{order:-1}#conversejs .order-xl-last{order:13}#conversejs .order-xl-0{order:0}#conversejs .order-xl-1{order:1}#conversejs .order-xl-2{order:2}#conversejs .order-xl-3{order:3}#conversejs .order-xl-4{order:4}#conversejs .order-xl-5{order:5}#conversejs .order-xl-6{order:6}#conversejs .order-xl-7{order:7}#conversejs .order-xl-8{order:8}#conversejs .order-xl-9{order:9}#conversejs .order-xl-10{order:10}#conversejs .order-xl-11{order:11}#conversejs .order-xl-12{order:12}#conversejs .offset-xl-0{margin-left:0}#conversejs .offset-xl-1{margin-left:8.33333%}#conversejs .offset-xl-2{margin-left:16.66667%}#conversejs .offset-xl-3{margin-left:25%}#conversejs .offset-xl-4{margin-left:33.33333%}#conversejs .offset-xl-5{margin-left:41.66667%}#conversejs .offset-xl-6{margin-left:50%}#conversejs .offset-xl-7{margin-left:58.33333%}#conversejs .offset-xl-8{margin-left:66.66667%}#conversejs .offset-xl-9{margin-left:75%}#conversejs .offset-xl-10{margin-left:83.33333%}#conversejs .offset-xl-11{margin-left:91.66667%}}#conversejs .form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .form-control{transition:none}}#conversejs .form-control::-ms-expand{background-color:transparent;border:0}#conversejs .form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}#conversejs .form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .form-control::-moz-placeholder{color:#6c757d;opacity:1}#conversejs .form-control:-ms-input-placeholder{color:#6c757d;opacity:1}#conversejs .form-control::-ms-input-placeholder{color:#6c757d;opacity:1}#conversejs .form-control::placeholder{color:#6c757d;opacity:1}#conversejs .form-control:disabled,#conversejs .form-control[readonly]{background-color:#e9ecef;opacity:1}#conversejs select.form-control:focus::-ms-value{color:#495057;background-color:#fff}#conversejs .form-control-file,#conversejs .form-control-range{display:block;width:100%}#conversejs .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}#conversejs .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}#conversejs .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}#conversejs .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}#conversejs .form-control-plaintext.form-control-lg,#conversejs .form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}#conversejs .form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs select.form-control[multiple],#conversejs select.form-control[size]{height:auto}#conversejs textarea.form-control{height:auto}#conversejs .form-group{margin-bottom:1rem}#conversejs .form-text{display:block;margin-top:.25rem}#conversejs .form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}#conversejs .form-row>.col,#conversejs .form-row>[class*=col-]{padding-right:5px;padding-left:5px}#conversejs .form-check{position:relative;display:block;padding-left:1.25rem}#conversejs .form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}#conversejs .form-check-input:disabled~.form-check-label,#conversejs .form-check-input[disabled]~.form-check-label{color:#6c757d}#conversejs .form-check-label{margin-bottom:0}#conversejs .form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}#conversejs .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}#conversejs .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}#conversejs .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}#conversejs.is-valid~.valid-feedback,#conversejs.is-valid~.valid-tooltip,.was-validated #conversejs:valid~.valid-feedback,.was-validated #conversejs:valid~.valid-tooltip{display:block}#conversejs .form-control.is-valid,.was-validated #conversejs .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .form-control.is-valid:focus,.was-validated #conversejs .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs textarea.form-control.is-valid,.was-validated #conversejs textarea.form-control:valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}#conversejs .custom-select.is-valid,.was-validated #conversejs .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .custom-select.is-valid:focus,.was-validated #conversejs .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .form-check-input.is-valid~.form-check-label,.was-validated #conversejs .form-check-input:valid~.form-check-label{color:#28a745}#conversejs .form-check-input.is-valid~.valid-feedback,#conversejs .form-check-input.is-valid~.valid-tooltip,.was-validated #conversejs .form-check-input:valid~.valid-feedback,.was-validated #conversejs .form-check-input:valid~.valid-tooltip{display:block}#conversejs .custom-control-input.is-valid~.custom-control-label,.was-validated #conversejs .custom-control-input:valid~.custom-control-label{color:#28a745}#conversejs .custom-control-input.is-valid~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}#conversejs .custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}#conversejs .custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}#conversejs .custom-file-input.is-valid~.custom-file-label,.was-validated #conversejs .custom-file-input:valid~.custom-file-label{border-color:#28a745}#conversejs .custom-file-input.is-valid:focus~.custom-file-label,.was-validated #conversejs .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}#conversejs .invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}#conversejs.is-invalid~.invalid-feedback,#conversejs.is-invalid~.invalid-tooltip,.was-validated #conversejs:invalid~.invalid-feedback,.was-validated #conversejs:invalid~.invalid-tooltip{display:block}#conversejs .form-control.is-invalid,.was-validated #conversejs .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .form-control.is-invalid:focus,.was-validated #conversejs .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs textarea.form-control.is-invalid,.was-validated #conversejs textarea.form-control:invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}#conversejs .custom-select.is-invalid,.was-validated #conversejs .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .custom-select.is-invalid:focus,.was-validated #conversejs .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .form-check-input.is-invalid~.form-check-label,.was-validated #conversejs .form-check-input:invalid~.form-check-label{color:#dc3545}#conversejs .form-check-input.is-invalid~.invalid-feedback,#conversejs .form-check-input.is-invalid~.invalid-tooltip,.was-validated #conversejs .form-check-input:invalid~.invalid-feedback,.was-validated #conversejs .form-check-input:invalid~.invalid-tooltip{display:block}#conversejs .custom-control-input.is-invalid~.custom-control-label,.was-validated #conversejs .custom-control-input:invalid~.custom-control-label{color:#dc3545}#conversejs .custom-control-input.is-invalid~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}#conversejs .custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}#conversejs .custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}#conversejs .custom-file-input.is-invalid~.custom-file-label,.was-validated #conversejs .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}#conversejs .custom-file-input.is-invalid:focus~.custom-file-label,.was-validated #conversejs .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .form-inline{display:flex;flex-flow:row wrap;align-items:center}#conversejs .form-inline .form-check{width:100%}@media (min-width:576px){#conversejs .form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}#conversejs .form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}#conversejs .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}#conversejs .form-inline .form-control-plaintext{display:inline-block}#conversejs .form-inline .custom-select,#conversejs .form-inline .input-group{width:auto}#conversejs .form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}#conversejs .form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}#conversejs .form-inline .custom-control{align-items:center;justify-content:center}#conversejs .form-inline .custom-control-label{margin-bottom:0}}#conversejs .btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .btn{transition:none}}#conversejs .btn:hover{color:#212529;text-decoration:none}#conversejs .btn.focus,#conversejs .btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .btn.disabled,#conversejs .btn:disabled{opacity:.65}#conversejs a.btn.disabled,#conversejs fieldset:disabled a.btn{pointer-events:none}#conversejs .btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}#conversejs .btn-primary.focus,#conversejs .btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}#conversejs .btn-primary.disabled,#conversejs .btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-primary:not(:disabled):not(.disabled).active,#conversejs .btn-primary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}#conversejs .btn-primary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-primary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}#conversejs .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}#conversejs .btn-secondary.focus,#conversejs .btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}#conversejs .btn-secondary.disabled,#conversejs .btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-secondary:not(:disabled):not(.disabled).active,#conversejs .btn-secondary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}#conversejs .btn-secondary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}#conversejs .btn-success{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}#conversejs .btn-success.focus,#conversejs .btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}#conversejs .btn-success.disabled,#conversejs .btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-success:not(:disabled):not(.disabled).active,#conversejs .btn-success:not(:disabled):not(.disabled):active,.show>#conversejs .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}#conversejs .btn-success:not(:disabled):not(.disabled).active:focus,#conversejs .btn-success:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}#conversejs .btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}#conversejs .btn-info.focus,#conversejs .btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}#conversejs .btn-info.disabled,#conversejs .btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-info:not(:disabled):not(.disabled).active,#conversejs .btn-info:not(:disabled):not(.disabled):active,.show>#conversejs .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}#conversejs .btn-info:not(:disabled):not(.disabled).active:focus,#conversejs .btn-info:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}#conversejs .btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}#conversejs .btn-warning.focus,#conversejs .btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}#conversejs .btn-warning.disabled,#conversejs .btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-warning:not(:disabled):not(.disabled).active,#conversejs .btn-warning:not(:disabled):not(.disabled):active,.show>#conversejs .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}#conversejs .btn-warning:not(:disabled):not(.disabled).active:focus,#conversejs .btn-warning:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}#conversejs .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}#conversejs .btn-danger.focus,#conversejs .btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}#conversejs .btn-danger.disabled,#conversejs .btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-danger:not(:disabled):not(.disabled).active,#conversejs .btn-danger:not(:disabled):not(.disabled):active,.show>#conversejs .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}#conversejs .btn-danger:not(:disabled):not(.disabled).active:focus,#conversejs .btn-danger:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}#conversejs .btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}#conversejs .btn-light.focus,#conversejs .btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}#conversejs .btn-light.disabled,#conversejs .btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-light:not(:disabled):not(.disabled).active,#conversejs .btn-light:not(:disabled):not(.disabled):active,.show>#conversejs .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}#conversejs .btn-light:not(:disabled):not(.disabled).active:focus,#conversejs .btn-light:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}#conversejs .btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}#conversejs .btn-dark.focus,#conversejs .btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}#conversejs .btn-dark.disabled,#conversejs .btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-dark:not(:disabled):not(.disabled).active,#conversejs .btn-dark:not(:disabled):not(.disabled):active,.show>#conversejs .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}#conversejs .btn-dark:not(:disabled):not(.disabled).active:focus,#conversejs .btn-dark:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}#conversejs .btn-outline-primary{color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary.focus,#conversejs .btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .btn-outline-primary.disabled,#conversejs .btn-outline-primary:disabled{color:#007bff;background-color:transparent}#conversejs .btn-outline-primary:not(:disabled):not(.disabled).active,#conversejs .btn-outline-primary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .btn-outline-secondary{color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary.focus,#conversejs .btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .btn-outline-secondary.disabled,#conversejs .btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}#conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active,#conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .btn-outline-success{color:#28a745;border-color:#28a745}#conversejs .btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-outline-success.focus,#conversejs .btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .btn-outline-success.disabled,#conversejs .btn-outline-success:disabled{color:#28a745;background-color:transparent}#conversejs .btn-outline-success:not(:disabled):not(.disabled).active,#conversejs .btn-outline-success:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-outline-success:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .btn-outline-info{color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info.focus,#conversejs .btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .btn-outline-info.disabled,#conversejs .btn-outline-info:disabled{color:#17a2b8;background-color:transparent}#conversejs .btn-outline-info:not(:disabled):not(.disabled).active,#conversejs .btn-outline-info:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .btn-outline-warning{color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning.focus,#conversejs .btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .btn-outline-warning.disabled,#conversejs .btn-outline-warning:disabled{color:#ffc107;background-color:transparent}#conversejs .btn-outline-warning:not(:disabled):not(.disabled).active,#conversejs .btn-outline-warning:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .btn-outline-danger{color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger.focus,#conversejs .btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .btn-outline-danger.disabled,#conversejs .btn-outline-danger:disabled{color:#dc3545;background-color:transparent}#conversejs .btn-outline-danger:not(:disabled):not(.disabled).active,#conversejs .btn-outline-danger:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light.focus,#conversejs .btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .btn-outline-light.disabled,#conversejs .btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}#conversejs .btn-outline-light:not(:disabled):not(.disabled).active,#conversejs .btn-outline-light:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .btn-outline-dark{color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark.focus,#conversejs .btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .btn-outline-dark.disabled,#conversejs .btn-outline-dark:disabled{color:#343a40;background-color:transparent}#conversejs .btn-outline-dark:not(:disabled):not(.disabled).active,#conversejs .btn-outline-dark:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .btn-link{font-weight:400;color:#007bff;text-decoration:none}#conversejs .btn-link:hover{color:#0056b3;text-decoration:underline}#conversejs .btn-link.focus,#conversejs .btn-link:focus{text-decoration:underline;box-shadow:none}#conversejs .btn-link.disabled,#conversejs .btn-link:disabled{color:#6c757d;pointer-events:none}#conversejs .btn-group-lg>.btn,#conversejs .btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs .btn-group-sm>.btn,#conversejs .btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .btn-block{display:block;width:100%}#conversejs .btn-block+.btn-block{margin-top:.5rem}#conversejs input[type=button].btn-block,#conversejs input[type=reset].btn-block,#conversejs input[type=submit].btn-block{width:100%}#conversejs .fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){#conversejs .fade{transition:none}}#conversejs .fade:not(.show){opacity:0}#conversejs .collapse:not(.show){display:none}#conversejs .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){#conversejs .collapsing{transition:none}}#conversejs .dropdown,#conversejs .dropleft,#conversejs .dropright,#conversejs .dropup{position:relative}#conversejs .dropdown-toggle{white-space:nowrap}#conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}#conversejs .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}#conversejs .dropdown-menu-left{right:auto;left:0}#conversejs .dropdown-menu-right{right:0;left:auto}@media (min-width:576px){#conversejs .dropdown-menu-sm-left{right:auto;left:0}#conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){#conversejs .dropdown-menu-md-left{right:auto;left:0}#conversejs .dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){#conversejs .dropdown-menu-lg-left{right:auto;left:0}#conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){#conversejs .dropdown-menu-xl-left{right:auto;left:0}#conversejs .dropdown-menu-xl-right{right:0;left:auto}}#conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}#conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}#conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}#conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}#conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropright .dropdown-toggle::after{vertical-align:0}#conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}#conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}#conversejs .dropleft .dropdown-toggle::after{display:none}#conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}#conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropleft .dropdown-toggle::before{vertical-align:0}#conversejs .dropdown-menu[x-placement^=bottom],#conversejs .dropdown-menu[x-placement^=left],#conversejs .dropdown-menu[x-placement^=right],#conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}#conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}#conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}#conversejs .dropdown-item:focus,#conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}#conversejs .dropdown-item.active,#conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}#conversejs .dropdown-item.disabled,#conversejs .dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}#conversejs .dropdown-menu.show{display:block}#conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}#conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}#conversejs .btn-group,#conversejs .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}#conversejs .btn-group-vertical>.btn,#conversejs .btn-group>.btn{position:relative;flex:1 1 auto}#conversejs .btn-group-vertical>.btn:hover,#conversejs .btn-group>.btn:hover{z-index:1}#conversejs .btn-group-vertical>.btn.active,#conversejs .btn-group-vertical>.btn:active,#conversejs .btn-group-vertical>.btn:focus,#conversejs .btn-group>.btn.active,#conversejs .btn-group>.btn:active,#conversejs .btn-group>.btn:focus{z-index:1}#conversejs .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}#conversejs .btn-toolbar .input-group{width:auto}#conversejs .btn-group>.btn-group:not(:first-child),#conversejs .btn-group>.btn:not(:first-child){margin-left:-1px}#conversejs .btn-group>.btn-group:not(:last-child)>.btn,#conversejs .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .btn-group>.btn-group:not(:first-child)>.btn,#conversejs .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}#conversejs .dropdown-toggle-split::after,.dropright #conversejs .dropdown-toggle-split::after,.dropup #conversejs .dropdown-toggle-split::after{margin-left:0}.dropleft #conversejs .dropdown-toggle-split::before{margin-right:0}#conversejs .btn-group-sm>.btn+.dropdown-toggle-split,#conversejs .btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}#conversejs .btn-group-lg>.btn+.dropdown-toggle-split,#conversejs .btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}#conversejs .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}#conversejs .btn-group-vertical>.btn,#conversejs .btn-group-vertical>.btn-group{width:100%}#conversejs .btn-group-vertical>.btn-group:not(:first-child),#conversejs .btn-group-vertical>.btn:not(:first-child){margin-top:-1px}#conversejs .btn-group-vertical>.btn-group:not(:last-child)>.btn,#conversejs .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}#conversejs .btn-group-vertical>.btn-group:not(:first-child)>.btn,#conversejs .btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}#conversejs .btn-group-toggle>.btn,#conversejs .btn-group-toggle>.btn-group>.btn{margin-bottom:0}#conversejs .btn-group-toggle>.btn input[type=checkbox],#conversejs .btn-group-toggle>.btn input[type=radio],#conversejs .btn-group-toggle>.btn-group>.btn input[type=checkbox],#conversejs .btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}#conversejs .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}#conversejs .input-group>.custom-file,#conversejs .input-group>.custom-select,#conversejs .input-group>.form-control,#conversejs .input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}#conversejs .input-group>.custom-file+.custom-file,#conversejs .input-group>.custom-file+.custom-select,#conversejs .input-group>.custom-file+.form-control,#conversejs .input-group>.custom-select+.custom-file,#conversejs .input-group>.custom-select+.custom-select,#conversejs .input-group>.custom-select+.form-control,#conversejs .input-group>.form-control+.custom-file,#conversejs .input-group>.form-control+.custom-select,#conversejs .input-group>.form-control+.form-control,#conversejs .input-group>.form-control-plaintext+.custom-file,#conversejs .input-group>.form-control-plaintext+.custom-select,#conversejs .input-group>.form-control-plaintext+.form-control{margin-left:-1px}#conversejs .input-group>.custom-file .custom-file-input:focus~.custom-file-label,#conversejs .input-group>.custom-select:focus,#conversejs .input-group>.form-control:focus{z-index:3}#conversejs .input-group>.custom-file .custom-file-input:focus{z-index:4}#conversejs .input-group>.custom-select:not(:last-child),#conversejs .input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.custom-select:not(:first-child),#conversejs .input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .input-group>.custom-file{display:flex;align-items:center}#conversejs .input-group>.custom-file:not(:last-child) .custom-file-label,#conversejs .input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .input-group-append,#conversejs .input-group-prepend{display:flex}#conversejs .input-group-append .btn,#conversejs .input-group-prepend .btn{position:relative;z-index:2}#conversejs .input-group-append .btn:focus,#conversejs .input-group-prepend .btn:focus{z-index:3}#conversejs .input-group-append .btn+.btn,#conversejs .input-group-append .btn+.input-group-text,#conversejs .input-group-append .input-group-text+.btn,#conversejs .input-group-append .input-group-text+.input-group-text,#conversejs .input-group-prepend .btn+.btn,#conversejs .input-group-prepend .btn+.input-group-text,#conversejs .input-group-prepend .input-group-text+.btn,#conversejs .input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}#conversejs .input-group-prepend{margin-right:-1px}#conversejs .input-group-append{margin-left:-1px}#conversejs .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}#conversejs .input-group-text input[type=checkbox],#conversejs .input-group-text input[type=radio]{margin-top:0}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-lg>.form-control,#conversejs .input-group-lg>.input-group-append>.btn,#conversejs .input-group-lg>.input-group-append>.input-group-text,#conversejs .input-group-lg>.input-group-prepend>.btn,#conversejs .input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs .input-group-sm>.custom-select,#conversejs .input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}#conversejs .input-group-sm>.custom-select,#conversejs .input-group-sm>.form-control,#conversejs .input-group-sm>.input-group-append>.btn,#conversejs .input-group-sm>.input-group-append>.input-group-text,#conversejs .input-group-sm>.input-group-prepend>.btn,#conversejs .input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-sm>.custom-select{padding-right:1.75rem}#conversejs .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),#conversejs .input-group>.input-group-append:last-child>.input-group-text:not(:last-child),#conversejs .input-group>.input-group-append:not(:last-child)>.btn,#conversejs .input-group>.input-group-append:not(:last-child)>.input-group-text,#conversejs .input-group>.input-group-prepend>.btn,#conversejs .input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.input-group-append>.btn,#conversejs .input-group>.input-group-append>.input-group-text,#conversejs .input-group>.input-group-prepend:first-child>.btn:not(:first-child),#conversejs .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),#conversejs .input-group>.input-group-prepend:not(:first-child)>.btn,#conversejs .input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}#conversejs .custom-control-inline{display:inline-flex;margin-right:1rem}#conversejs .custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}#conversejs .custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}#conversejs .custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}#conversejs .custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}#conversejs .custom-control-input:disabled~.custom-control-label,#conversejs .custom-control-input[disabled]~.custom-control-label{color:#6c757d}#conversejs .custom-control-input:disabled~.custom-control-label::before,#conversejs .custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}#conversejs .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}#conversejs .custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}#conversejs .custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}#conversejs .custom-checkbox .custom-control-label::before{border-radius:.25rem}#conversejs .custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}#conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}#conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}#conversejs .custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-radio .custom-control-label::before{border-radius:50%}#conversejs .custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}#conversejs .custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-switch{padding-left:2.25rem}#conversejs .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}#conversejs .custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .custom-switch .custom-control-label::after{transition:none}}#conversejs .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}#conversejs .custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs .custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-select:focus::-ms-value{color:#495057;background-color:#fff}#conversejs .custom-select[multiple],#conversejs .custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}#conversejs .custom-select:disabled{color:#6c757d;background-color:#e9ecef}#conversejs .custom-select::-ms-expand{display:none}#conversejs .custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}#conversejs .custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}#conversejs .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}#conversejs .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}#conversejs .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}#conversejs .custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-file-input:disabled~.custom-file-label,#conversejs .custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}#conversejs .custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}#conversejs .custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}#conversejs .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}#conversejs .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}#conversejs .custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs .custom-range:focus{outline:0}#conversejs .custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range::-moz-focus-outer{border:0}#conversejs .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}#conversejs .custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#conversejs .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}#conversejs .custom-range::-moz-range-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#conversejs .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-ms-thumb{-ms-transition:none;transition:none}}#conversejs .custom-range::-ms-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}#conversejs .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}#conversejs .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}#conversejs .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}#conversejs .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}#conversejs .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}#conversejs .custom-range:disabled::-moz-range-track{cursor:default}#conversejs .custom-range:disabled::-ms-thumb{background-color:#adb5bd}#conversejs .custom-control-label::before,#conversejs .custom-file-label,#conversejs .custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .custom-control-label::before,#conversejs .custom-file-label,#conversejs .custom-select{transition:none}}#conversejs .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}#conversejs .nav-link{display:block;padding:.5rem 1rem}#conversejs .nav-link:focus,#conversejs .nav-link:hover{text-decoration:none}#conversejs .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}#conversejs .nav-tabs{border-bottom:1px solid #dee2e6}#conversejs .nav-tabs .nav-item{margin-bottom:-1px}#conversejs .nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}#conversejs .nav-tabs .nav-link:focus,#conversejs .nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}#conversejs .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}#conversejs .nav-tabs .nav-item.show .nav-link,#conversejs .nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}#conversejs .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}#conversejs .nav-pills .nav-link{border-radius:.25rem}#conversejs .nav-pills .nav-link.active,#conversejs .nav-pills .show>.nav-link{color:#fff;background-color:#007bff}#conversejs .nav-fill .nav-item{flex:1 1 auto;text-align:center}#conversejs .nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}#conversejs .tab-content>.tab-pane{display:none}#conversejs .tab-content>.active{display:block}#conversejs .badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .badge{transition:none}}a#conversejs .badge:focus,a#conversejs .badge:hover{text-decoration:none}#conversejs .badge:empty{display:none}#conversejs .btn .badge{position:relative;top:-1px}#conversejs .badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}#conversejs .badge-primary{color:#fff;background-color:#007bff}a#conversejs .badge-primary:focus,a#conversejs .badge-primary:hover{color:#fff;background-color:#0062cc}a#conversejs .badge-primary.focus,a#conversejs .badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .badge-secondary{color:#fff;background-color:#6c757d}a#conversejs .badge-secondary:focus,a#conversejs .badge-secondary:hover{color:#fff;background-color:#545b62}a#conversejs .badge-secondary.focus,a#conversejs .badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .badge-success{color:#fff;background-color:#28a745}a#conversejs .badge-success:focus,a#conversejs .badge-success:hover{color:#fff;background-color:#1e7e34}a#conversejs .badge-success.focus,a#conversejs .badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .badge-info{color:#fff;background-color:#17a2b8}a#conversejs .badge-info:focus,a#conversejs .badge-info:hover{color:#fff;background-color:#117a8b}a#conversejs .badge-info.focus,a#conversejs .badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .badge-warning{color:#212529;background-color:#ffc107}a#conversejs .badge-warning:focus,a#conversejs .badge-warning:hover{color:#212529;background-color:#d39e00}a#conversejs .badge-warning.focus,a#conversejs .badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .badge-danger{color:#fff;background-color:#dc3545}a#conversejs .badge-danger:focus,a#conversejs .badge-danger:hover{color:#fff;background-color:#bd2130}a#conversejs .badge-danger.focus,a#conversejs .badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .badge-light{color:#212529;background-color:#f8f9fa}a#conversejs .badge-light:focus,a#conversejs .badge-light:hover{color:#212529;background-color:#dae0e5}a#conversejs .badge-light.focus,a#conversejs .badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .badge-dark{color:#fff;background-color:#343a40}a#conversejs .badge-dark:focus,a#conversejs .badge-dark:hover{color:#fff;background-color:#1d2124}a#conversejs .badge-dark.focus,a#conversejs .badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}#conversejs .alert-heading{color:inherit}#conversejs .alert-link{font-weight:700}#conversejs .alert-dismissible{padding-right:4rem}#conversejs .alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}#conversejs .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}#conversejs .alert-primary hr{border-top-color:#9fcdff}#conversejs .alert-primary .alert-link{color:#002752}#conversejs .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}#conversejs .alert-secondary hr{border-top-color:#c8cbcf}#conversejs .alert-secondary .alert-link{color:#202326}#conversejs .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}#conversejs .alert-success hr{border-top-color:#b1dfbb}#conversejs .alert-success .alert-link{color:#0b2e13}#conversejs .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}#conversejs .alert-info hr{border-top-color:#abdde5}#conversejs .alert-info .alert-link{color:#062c33}#conversejs .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}#conversejs .alert-warning hr{border-top-color:#ffe8a1}#conversejs .alert-warning .alert-link{color:#533f03}#conversejs .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}#conversejs .alert-danger hr{border-top-color:#f1b0b7}#conversejs .alert-danger .alert-link{color:#491217}#conversejs .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}#conversejs .alert-light hr{border-top-color:#ececf6}#conversejs .alert-light .alert-link{color:#686868}#conversejs .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}#conversejs .alert-dark hr{border-top-color:#b9bbbe}#conversejs .alert-dark .alert-link{color:#040505}#conversejs .media{display:flex;align-items:flex-start}#conversejs .media-body{flex:1}#conversejs .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}#conversejs .list-group-item-action{width:100%;color:#495057;text-align:inherit}#conversejs .list-group-item-action:focus,#conversejs .list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}#conversejs .list-group-item-action:active{color:#212529;background-color:#e9ecef}#conversejs .list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}#conversejs .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}#conversejs .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}#conversejs .list-group-item.disabled,#conversejs .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}#conversejs .list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .list-group-item+#conversejs .list-group-item{border-top-width:0}#conversejs .list-group-item+#conversejs .list-group-item.active{margin-top:-1px;border-top-width:1px}#conversejs .list-group-horizontal{flex-direction:row}#conversejs .list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){#conversejs .list-group-horizontal-sm{flex-direction:row}#conversejs .list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-sm .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){#conversejs .list-group-horizontal-md{flex-direction:row}#conversejs .list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-md .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){#conversejs .list-group-horizontal-lg{flex-direction:row}#conversejs .list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-lg .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){#conversejs .list-group-horizontal-xl{flex-direction:row}#conversejs .list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-xl .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}#conversejs .list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}#conversejs .list-group-flush .list-group-item:first-child{border-top-width:0}#conversejs .list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}#conversejs .list-group-item-primary{color:#004085;background-color:#b8daff}#conversejs .list-group-item-primary.list-group-item-action:focus,#conversejs .list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}#conversejs .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}#conversejs .list-group-item-secondary{color:#383d41;background-color:#d6d8db}#conversejs .list-group-item-secondary.list-group-item-action:focus,#conversejs .list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}#conversejs .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}#conversejs .list-group-item-success{color:#155724;background-color:#c3e6cb}#conversejs .list-group-item-success.list-group-item-action:focus,#conversejs .list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}#conversejs .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}#conversejs .list-group-item-info{color:#0c5460;background-color:#bee5eb}#conversejs .list-group-item-info.list-group-item-action:focus,#conversejs .list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}#conversejs .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}#conversejs .list-group-item-warning{color:#856404;background-color:#ffeeba}#conversejs .list-group-item-warning.list-group-item-action:focus,#conversejs .list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}#conversejs .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}#conversejs .list-group-item-danger{color:#721c24;background-color:#f5c6cb}#conversejs .list-group-item-danger.list-group-item-action:focus,#conversejs .list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}#conversejs .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}#conversejs .list-group-item-light{color:#818182;background-color:#fdfdfe}#conversejs .list-group-item-light.list-group-item-action:focus,#conversejs .list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}#conversejs .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}#conversejs .list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}#conversejs .list-group-item-dark.list-group-item-action:focus,#conversejs .list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}#conversejs .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}#conversejs .close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}#conversejs .close:hover{color:#000;text-decoration:none}#conversejs .close:not(:disabled):not(.disabled):focus,#conversejs .close:not(:disabled):not(.disabled):hover{opacity:.75}#conversejs button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs a.close.disabled{pointer-events:none}#conversejs .modal-open{overflow:hidden}#conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}#conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}#conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade #conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade #conversejs .modal-dialog{transition:none}}.modal.show #conversejs .modal-dialog{transform:none}.modal.modal-static #conversejs .modal-dialog{transform:scale(1.02)}#conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}#conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}#conversejs .modal-dialog-scrollable .modal-footer,#conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}#conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}#conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}#conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}#conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}#conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}#conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}#conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}#conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}#conversejs .modal-backdrop.fade{opacity:0}#conversejs .modal-backdrop.show{opacity:.5}#conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}#conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}#conversejs .modal-title{margin-bottom:0;line-height:1.5}#conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}#conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}#conversejs .modal-footer>*{margin:.25rem}#conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){#conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}#conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}#conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}#conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}#conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem)}#conversejs .modal-sm{max-width:300px}}@media (min-width:992px){#conversejs .modal-lg,#conversejs .modal-xl{max-width:800px}}@media (min-width:1200px){#conversejs .modal-xl{max-width:1140px}}#conversejs .tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}#conversejs .tooltip.show{opacity:.9}#conversejs .tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}#conversejs .tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}#conversejs .bs-tooltip-auto[x-placement^=top],#conversejs .bs-tooltip-top{padding:.4rem 0}#conversejs .bs-tooltip-auto[x-placement^=top] .arrow,#conversejs .bs-tooltip-top .arrow{bottom:0}#conversejs .bs-tooltip-auto[x-placement^=top] .arrow::before,#conversejs .bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}#conversejs .bs-tooltip-auto[x-placement^=right],#conversejs .bs-tooltip-right{padding:0 .4rem}#conversejs .bs-tooltip-auto[x-placement^=right] .arrow,#conversejs .bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}#conversejs .bs-tooltip-auto[x-placement^=right] .arrow::before,#conversejs .bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}#conversejs .bs-tooltip-auto[x-placement^=bottom],#conversejs .bs-tooltip-bottom{padding:.4rem 0}#conversejs .bs-tooltip-auto[x-placement^=bottom] .arrow,#conversejs .bs-tooltip-bottom .arrow{top:0}#conversejs .bs-tooltip-auto[x-placement^=bottom] .arrow::before,#conversejs .bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}#conversejs .bs-tooltip-auto[x-placement^=left],#conversejs .bs-tooltip-left{padding:0 .4rem}#conversejs .bs-tooltip-auto[x-placement^=left] .arrow,#conversejs .bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}#conversejs .bs-tooltip-auto[x-placement^=left] .arrow::before,#conversejs .bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}#conversejs .tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}#conversejs .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}#conversejs .popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}#conversejs .popover .arrow::after,#conversejs .popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}#conversejs .bs-popover-auto[x-placement^=top],#conversejs .bs-popover-top{margin-bottom:.5rem}#conversejs .bs-popover-auto[x-placement^=top]>.arrow,#conversejs .bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}#conversejs .bs-popover-auto[x-placement^=top]>.arrow::before,#conversejs .bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=top]>.arrow::after,#conversejs .bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}#conversejs .bs-popover-auto[x-placement^=right],#conversejs .bs-popover-right{margin-left:.5rem}#conversejs .bs-popover-auto[x-placement^=right]>.arrow,#conversejs .bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}#conversejs .bs-popover-auto[x-placement^=right]>.arrow::before,#conversejs .bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=right]>.arrow::after,#conversejs .bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}#conversejs .bs-popover-auto[x-placement^=bottom],#conversejs .bs-popover-bottom{margin-top:.5rem}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow,#conversejs .bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::before,#conversejs .bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::after,#conversejs .bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}#conversejs .bs-popover-auto[x-placement^=bottom] .popover-header::before,#conversejs .bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}#conversejs .bs-popover-auto[x-placement^=left],#conversejs .bs-popover-left{margin-right:.5rem}#conversejs .bs-popover-auto[x-placement^=left]>.arrow,#conversejs .bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}#conversejs .bs-popover-auto[x-placement^=left]>.arrow::before,#conversejs .bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=left]>.arrow::after,#conversejs .bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}#conversejs .popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}#conversejs .popover-header:empty{display:none}#conversejs .popover-body{padding:.5rem .75rem;color:#212529}#conversejs .align-baseline{vertical-align:baseline!important}#conversejs .align-top{vertical-align:top!important}#conversejs .align-middle{vertical-align:middle!important}#conversejs .align-bottom{vertical-align:bottom!important}#conversejs .align-text-bottom{vertical-align:text-bottom!important}#conversejs .align-text-top{vertical-align:text-top!important}#conversejs .bg-primary{background-color:#007bff!important}#conversejs a.bg-primary:focus,#conversejs a.bg-primary:hover,#conversejs button.bg-primary:focus,#conversejs button.bg-primary:hover{background-color:#0062cc!important}#conversejs .bg-secondary{background-color:#6c757d!important}#conversejs a.bg-secondary:focus,#conversejs a.bg-secondary:hover,#conversejs button.bg-secondary:focus,#conversejs button.bg-secondary:hover{background-color:#545b62!important}#conversejs .bg-success{background-color:#28a745!important}#conversejs a.bg-success:focus,#conversejs a.bg-success:hover,#conversejs button.bg-success:focus,#conversejs button.bg-success:hover{background-color:#1e7e34!important}#conversejs .bg-info{background-color:#17a2b8!important}#conversejs a.bg-info:focus,#conversejs a.bg-info:hover,#conversejs button.bg-info:focus,#conversejs button.bg-info:hover{background-color:#117a8b!important}#conversejs .bg-warning{background-color:#ffc107!important}#conversejs a.bg-warning:focus,#conversejs a.bg-warning:hover,#conversejs button.bg-warning:focus,#conversejs button.bg-warning:hover{background-color:#d39e00!important}#conversejs .bg-danger{background-color:#dc3545!important}#conversejs a.bg-danger:focus,#conversejs a.bg-danger:hover,#conversejs button.bg-danger:focus,#conversejs button.bg-danger:hover{background-color:#bd2130!important}#conversejs .bg-light{background-color:#f8f9fa!important}#conversejs a.bg-light:focus,#conversejs a.bg-light:hover,#conversejs button.bg-light:focus,#conversejs button.bg-light:hover{background-color:#dae0e5!important}#conversejs .bg-dark{background-color:#343a40!important}#conversejs a.bg-dark:focus,#conversejs a.bg-dark:hover,#conversejs button.bg-dark:focus,#conversejs button.bg-dark:hover{background-color:#1d2124!important}#conversejs .bg-white{background-color:#fff!important}#conversejs .bg-transparent{background-color:transparent!important}#conversejs .border{border:1px solid #dee2e6!important}#conversejs .border-top{border-top:1px solid #dee2e6!important}#conversejs .border-right{border-right:1px solid #dee2e6!important}#conversejs .border-bottom{border-bottom:1px solid #dee2e6!important}#conversejs .border-left{border-left:1px solid #dee2e6!important}#conversejs .border-0{border:0!important}#conversejs .border-top-0{border-top:0!important}#conversejs .border-right-0{border-right:0!important}#conversejs .border-bottom-0{border-bottom:0!important}#conversejs .border-left-0{border-left:0!important}#conversejs .border-primary{border-color:#007bff!important}#conversejs .border-secondary{border-color:#6c757d!important}#conversejs .border-success{border-color:#28a745!important}#conversejs .border-info{border-color:#17a2b8!important}#conversejs .border-warning{border-color:#ffc107!important}#conversejs .border-danger{border-color:#dc3545!important}#conversejs .border-light{border-color:#f8f9fa!important}#conversejs .border-dark{border-color:#343a40!important}#conversejs .border-white{border-color:#fff!important}#conversejs .rounded-sm{border-radius:.2rem!important}#conversejs .rounded{border-radius:.25rem!important}#conversejs .rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}#conversejs .rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}#conversejs .rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}#conversejs .rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}#conversejs .rounded-lg{border-radius:.3rem!important}#conversejs .rounded-circle{border-radius:50%!important}#conversejs .rounded-pill{border-radius:50rem!important}#conversejs .rounded-0{border-radius:0!important}#conversejs .clearfix::after{display:block;clear:both;content:""}#conversejs .d-none{display:none!important}#conversejs .d-inline{display:inline!important}#conversejs .d-inline-block{display:inline-block!important}#conversejs .d-block{display:block!important}#conversejs .d-table{display:table!important}#conversejs .d-table-row{display:table-row!important}#conversejs .d-table-cell{display:table-cell!important}#conversejs .d-flex{display:flex!important}#conversejs .d-inline-flex{display:inline-flex!important}@media (min-width:576px){#conversejs .d-sm-none{display:none!important}#conversejs .d-sm-inline{display:inline!important}#conversejs .d-sm-inline-block{display:inline-block!important}#conversejs .d-sm-block{display:block!important}#conversejs .d-sm-table{display:table!important}#conversejs .d-sm-table-row{display:table-row!important}#conversejs .d-sm-table-cell{display:table-cell!important}#conversejs .d-sm-flex{display:flex!important}#conversejs .d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){#conversejs .d-md-none{display:none!important}#conversejs .d-md-inline{display:inline!important}#conversejs .d-md-inline-block{display:inline-block!important}#conversejs .d-md-block{display:block!important}#conversejs .d-md-table{display:table!important}#conversejs .d-md-table-row{display:table-row!important}#conversejs .d-md-table-cell{display:table-cell!important}#conversejs .d-md-flex{display:flex!important}#conversejs .d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){#conversejs .d-lg-none{display:none!important}#conversejs .d-lg-inline{display:inline!important}#conversejs .d-lg-inline-block{display:inline-block!important}#conversejs .d-lg-block{display:block!important}#conversejs .d-lg-table{display:table!important}#conversejs .d-lg-table-row{display:table-row!important}#conversejs .d-lg-table-cell{display:table-cell!important}#conversejs .d-lg-flex{display:flex!important}#conversejs .d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){#conversejs .d-xl-none{display:none!important}#conversejs .d-xl-inline{display:inline!important}#conversejs .d-xl-inline-block{display:inline-block!important}#conversejs .d-xl-block{display:block!important}#conversejs .d-xl-table{display:table!important}#conversejs .d-xl-table-row{display:table-row!important}#conversejs .d-xl-table-cell{display:table-cell!important}#conversejs .d-xl-flex{display:flex!important}#conversejs .d-xl-inline-flex{display:inline-flex!important}}@media print{#conversejs .d-print-none{display:none!important}#conversejs .d-print-inline{display:inline!important}#conversejs .d-print-inline-block{display:inline-block!important}#conversejs .d-print-block{display:block!important}#conversejs .d-print-table{display:table!important}#conversejs .d-print-table-row{display:table-row!important}#conversejs .d-print-table-cell{display:table-cell!important}#conversejs .d-print-flex{display:flex!important}#conversejs .d-print-inline-flex{display:inline-flex!important}}#conversejs .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}#conversejs .embed-responsive::before{display:block;content:""}#conversejs .embed-responsive .embed-responsive-item,#conversejs .embed-responsive embed,#conversejs .embed-responsive iframe,#conversejs .embed-responsive object,#conversejs .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}#conversejs .embed-responsive-21by9::before{padding-top:42.85714%}#conversejs .embed-responsive-16by9::before{padding-top:56.25%}#conversejs .embed-responsive-4by3::before{padding-top:75%}#conversejs .embed-responsive-1by1::before{padding-top:100%}#conversejs .flex-row{flex-direction:row!important}#conversejs .flex-column{flex-direction:column!important}#conversejs .flex-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-wrap{flex-wrap:wrap!important}#conversejs .flex-nowrap{flex-wrap:nowrap!important}#conversejs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-fill{flex:1 1 auto!important}#conversejs .flex-grow-0{flex-grow:0!important}#conversejs .flex-grow-1{flex-grow:1!important}#conversejs .flex-shrink-0{flex-shrink:0!important}#conversejs .flex-shrink-1{flex-shrink:1!important}#conversejs .justify-content-start{justify-content:flex-start!important}#conversejs .justify-content-end{justify-content:flex-end!important}#conversejs .justify-content-center{justify-content:center!important}#conversejs .justify-content-between{justify-content:space-between!important}#conversejs .justify-content-around{justify-content:space-around!important}#conversejs .align-items-start{align-items:flex-start!important}#conversejs .align-items-end{align-items:flex-end!important}#conversejs .align-items-center{align-items:center!important}#conversejs .align-items-baseline{align-items:baseline!important}#conversejs .align-items-stretch{align-items:stretch!important}#conversejs .align-content-start{align-content:flex-start!important}#conversejs .align-content-end{align-content:flex-end!important}#conversejs .align-content-center{align-content:center!important}#conversejs .align-content-between{align-content:space-between!important}#conversejs .align-content-around{align-content:space-around!important}#conversejs .align-content-stretch{align-content:stretch!important}#conversejs .align-self-auto{align-self:auto!important}#conversejs .align-self-start{align-self:flex-start!important}#conversejs .align-self-end{align-self:flex-end!important}#conversejs .align-self-center{align-self:center!important}#conversejs .align-self-baseline{align-self:baseline!important}#conversejs .align-self-stretch{align-self:stretch!important}@media (min-width:576px){#conversejs .flex-sm-row{flex-direction:row!important}#conversejs .flex-sm-column{flex-direction:column!important}#conversejs .flex-sm-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-sm-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-sm-wrap{flex-wrap:wrap!important}#conversejs .flex-sm-nowrap{flex-wrap:nowrap!important}#conversejs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-sm-fill{flex:1 1 auto!important}#conversejs .flex-sm-grow-0{flex-grow:0!important}#conversejs .flex-sm-grow-1{flex-grow:1!important}#conversejs .flex-sm-shrink-0{flex-shrink:0!important}#conversejs .flex-sm-shrink-1{flex-shrink:1!important}#conversejs .justify-content-sm-start{justify-content:flex-start!important}#conversejs .justify-content-sm-end{justify-content:flex-end!important}#conversejs .justify-content-sm-center{justify-content:center!important}#conversejs .justify-content-sm-between{justify-content:space-between!important}#conversejs .justify-content-sm-around{justify-content:space-around!important}#conversejs .align-items-sm-start{align-items:flex-start!important}#conversejs .align-items-sm-end{align-items:flex-end!important}#conversejs .align-items-sm-center{align-items:center!important}#conversejs .align-items-sm-baseline{align-items:baseline!important}#conversejs .align-items-sm-stretch{align-items:stretch!important}#conversejs .align-content-sm-start{align-content:flex-start!important}#conversejs .align-content-sm-end{align-content:flex-end!important}#conversejs .align-content-sm-center{align-content:center!important}#conversejs .align-content-sm-between{align-content:space-between!important}#conversejs .align-content-sm-around{align-content:space-around!important}#conversejs .align-content-sm-stretch{align-content:stretch!important}#conversejs .align-self-sm-auto{align-self:auto!important}#conversejs .align-self-sm-start{align-self:flex-start!important}#conversejs .align-self-sm-end{align-self:flex-end!important}#conversejs .align-self-sm-center{align-self:center!important}#conversejs .align-self-sm-baseline{align-self:baseline!important}#conversejs .align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){#conversejs .flex-md-row{flex-direction:row!important}#conversejs .flex-md-column{flex-direction:column!important}#conversejs .flex-md-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-md-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-md-wrap{flex-wrap:wrap!important}#conversejs .flex-md-nowrap{flex-wrap:nowrap!important}#conversejs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-md-fill{flex:1 1 auto!important}#conversejs .flex-md-grow-0{flex-grow:0!important}#conversejs .flex-md-grow-1{flex-grow:1!important}#conversejs .flex-md-shrink-0{flex-shrink:0!important}#conversejs .flex-md-shrink-1{flex-shrink:1!important}#conversejs .justify-content-md-start{justify-content:flex-start!important}#conversejs .justify-content-md-end{justify-content:flex-end!important}#conversejs .justify-content-md-center{justify-content:center!important}#conversejs .justify-content-md-between{justify-content:space-between!important}#conversejs .justify-content-md-around{justify-content:space-around!important}#conversejs .align-items-md-start{align-items:flex-start!important}#conversejs .align-items-md-end{align-items:flex-end!important}#conversejs .align-items-md-center{align-items:center!important}#conversejs .align-items-md-baseline{align-items:baseline!important}#conversejs .align-items-md-stretch{align-items:stretch!important}#conversejs .align-content-md-start{align-content:flex-start!important}#conversejs .align-content-md-end{align-content:flex-end!important}#conversejs .align-content-md-center{align-content:center!important}#conversejs .align-content-md-between{align-content:space-between!important}#conversejs .align-content-md-around{align-content:space-around!important}#conversejs .align-content-md-stretch{align-content:stretch!important}#conversejs .align-self-md-auto{align-self:auto!important}#conversejs .align-self-md-start{align-self:flex-start!important}#conversejs .align-self-md-end{align-self:flex-end!important}#conversejs .align-self-md-center{align-self:center!important}#conversejs .align-self-md-baseline{align-self:baseline!important}#conversejs .align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){#conversejs .flex-lg-row{flex-direction:row!important}#conversejs .flex-lg-column{flex-direction:column!important}#conversejs .flex-lg-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-lg-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-lg-wrap{flex-wrap:wrap!important}#conversejs .flex-lg-nowrap{flex-wrap:nowrap!important}#conversejs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-lg-fill{flex:1 1 auto!important}#conversejs .flex-lg-grow-0{flex-grow:0!important}#conversejs .flex-lg-grow-1{flex-grow:1!important}#conversejs .flex-lg-shrink-0{flex-shrink:0!important}#conversejs .flex-lg-shrink-1{flex-shrink:1!important}#conversejs .justify-content-lg-start{justify-content:flex-start!important}#conversejs .justify-content-lg-end{justify-content:flex-end!important}#conversejs .justify-content-lg-center{justify-content:center!important}#conversejs .justify-content-lg-between{justify-content:space-between!important}#conversejs .justify-content-lg-around{justify-content:space-around!important}#conversejs .align-items-lg-start{align-items:flex-start!important}#conversejs .align-items-lg-end{align-items:flex-end!important}#conversejs .align-items-lg-center{align-items:center!important}#conversejs .align-items-lg-baseline{align-items:baseline!important}#conversejs .align-items-lg-stretch{align-items:stretch!important}#conversejs .align-content-lg-start{align-content:flex-start!important}#conversejs .align-content-lg-end{align-content:flex-end!important}#conversejs .align-content-lg-center{align-content:center!important}#conversejs .align-content-lg-between{align-content:space-between!important}#conversejs .align-content-lg-around{align-content:space-around!important}#conversejs .align-content-lg-stretch{align-content:stretch!important}#conversejs .align-self-lg-auto{align-self:auto!important}#conversejs .align-self-lg-start{align-self:flex-start!important}#conversejs .align-self-lg-end{align-self:flex-end!important}#conversejs .align-self-lg-center{align-self:center!important}#conversejs .align-self-lg-baseline{align-self:baseline!important}#conversejs .align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){#conversejs .flex-xl-row{flex-direction:row!important}#conversejs .flex-xl-column{flex-direction:column!important}#conversejs .flex-xl-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-xl-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-xl-wrap{flex-wrap:wrap!important}#conversejs .flex-xl-nowrap{flex-wrap:nowrap!important}#conversejs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-xl-fill{flex:1 1 auto!important}#conversejs .flex-xl-grow-0{flex-grow:0!important}#conversejs .flex-xl-grow-1{flex-grow:1!important}#conversejs .flex-xl-shrink-0{flex-shrink:0!important}#conversejs .flex-xl-shrink-1{flex-shrink:1!important}#conversejs .justify-content-xl-start{justify-content:flex-start!important}#conversejs .justify-content-xl-end{justify-content:flex-end!important}#conversejs .justify-content-xl-center{justify-content:center!important}#conversejs .justify-content-xl-between{justify-content:space-between!important}#conversejs .justify-content-xl-around{justify-content:space-around!important}#conversejs .align-items-xl-start{align-items:flex-start!important}#conversejs .align-items-xl-end{align-items:flex-end!important}#conversejs .align-items-xl-center{align-items:center!important}#conversejs .align-items-xl-baseline{align-items:baseline!important}#conversejs .align-items-xl-stretch{align-items:stretch!important}#conversejs .align-content-xl-start{align-content:flex-start!important}#conversejs .align-content-xl-end{align-content:flex-end!important}#conversejs .align-content-xl-center{align-content:center!important}#conversejs .align-content-xl-between{align-content:space-between!important}#conversejs .align-content-xl-around{align-content:space-around!important}#conversejs .align-content-xl-stretch{align-content:stretch!important}#conversejs .align-self-xl-auto{align-self:auto!important}#conversejs .align-self-xl-start{align-self:flex-start!important}#conversejs .align-self-xl-end{align-self:flex-end!important}#conversejs .align-self-xl-center{align-self:center!important}#conversejs .align-self-xl-baseline{align-self:baseline!important}#conversejs .align-self-xl-stretch{align-self:stretch!important}}#conversejs .float-left{float:left!important}#conversejs .float-right{float:right!important}#conversejs .float-none{float:none!important}@media (min-width:576px){#conversejs .float-sm-left{float:left!important}#conversejs .float-sm-right{float:right!important}#conversejs .float-sm-none{float:none!important}}@media (min-width:768px){#conversejs .float-md-left{float:left!important}#conversejs .float-md-right{float:right!important}#conversejs .float-md-none{float:none!important}}@media (min-width:992px){#conversejs .float-lg-left{float:left!important}#conversejs .float-lg-right{float:right!important}#conversejs .float-lg-none{float:none!important}}@media (min-width:1200px){#conversejs .float-xl-left{float:left!important}#conversejs .float-xl-right{float:right!important}#conversejs .float-xl-none{float:none!important}}#conversejs .overflow-auto{overflow:auto!important}#conversejs .overflow-hidden{overflow:hidden!important}#conversejs .position-static{position:static!important}#conversejs .position-relative{position:relative!important}#conversejs .position-absolute{position:absolute!important}#conversejs .position-fixed{position:fixed!important}#conversejs .position-sticky{position:-webkit-sticky!important;position:sticky!important}#conversejs .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}#conversejs .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){#conversejs .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}#conversejs .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#conversejs .sr-only-focusable:active,#conversejs .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}#conversejs .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}#conversejs .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}#conversejs .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}#conversejs .shadow-none{box-shadow:none!important}#conversejs .w-25{width:25%!important}#conversejs .w-50{width:50%!important}#conversejs .w-75{width:75%!important}#conversejs .w-100{width:100%!important}#conversejs .w-auto{width:auto!important}#conversejs .h-25{height:25%!important}#conversejs .h-50{height:50%!important}#conversejs .h-75{height:75%!important}#conversejs .h-100{height:100%!important}#conversejs .h-auto{height:auto!important}#conversejs .mw-100{max-width:100%!important}#conversejs .mh-100{max-height:100%!important}#conversejs .min-vw-100{min-width:100vw!important}#conversejs .min-vh-100{min-height:100vh!important}#conversejs .vw-100{width:100vw!important}#conversejs .vh-100{height:100vh!important}#conversejs .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}#conversejs .m-0{margin:0!important}#conversejs .mt-0,#conversejs .my-0{margin-top:0!important}#conversejs .mr-0,#conversejs .mx-0{margin-right:0!important}#conversejs .mb-0,#conversejs .my-0{margin-bottom:0!important}#conversejs .ml-0,#conversejs .mx-0{margin-left:0!important}#conversejs .m-1{margin:.25rem!important}#conversejs .mt-1,#conversejs .my-1{margin-top:.25rem!important}#conversejs .mr-1,#conversejs .mx-1{margin-right:.25rem!important}#conversejs .mb-1,#conversejs .my-1{margin-bottom:.25rem!important}#conversejs .ml-1,#conversejs .mx-1{margin-left:.25rem!important}#conversejs .m-2{margin:.5rem!important}#conversejs .mt-2,#conversejs .my-2{margin-top:.5rem!important}#conversejs .mr-2,#conversejs .mx-2{margin-right:.5rem!important}#conversejs .mb-2,#conversejs .my-2{margin-bottom:.5rem!important}#conversejs .ml-2,#conversejs .mx-2{margin-left:.5rem!important}#conversejs .m-3{margin:1rem!important}#conversejs .mt-3,#conversejs .my-3{margin-top:1rem!important}#conversejs .mr-3,#conversejs .mx-3{margin-right:1rem!important}#conversejs .mb-3,#conversejs .my-3{margin-bottom:1rem!important}#conversejs .ml-3,#conversejs .mx-3{margin-left:1rem!important}#conversejs .m-4{margin:1.5rem!important}#conversejs .mt-4,#conversejs .my-4{margin-top:1.5rem!important}#conversejs .mr-4,#conversejs .mx-4{margin-right:1.5rem!important}#conversejs .mb-4,#conversejs .my-4{margin-bottom:1.5rem!important}#conversejs .ml-4,#conversejs .mx-4{margin-left:1.5rem!important}#conversejs .m-5{margin:3rem!important}#conversejs .mt-5,#conversejs .my-5{margin-top:3rem!important}#conversejs .mr-5,#conversejs .mx-5{margin-right:3rem!important}#conversejs .mb-5,#conversejs .my-5{margin-bottom:3rem!important}#conversejs .ml-5,#conversejs .mx-5{margin-left:3rem!important}#conversejs .p-0{padding:0!important}#conversejs .pt-0,#conversejs .py-0{padding-top:0!important}#conversejs .pr-0,#conversejs .px-0{padding-right:0!important}#conversejs .pb-0,#conversejs .py-0{padding-bottom:0!important}#conversejs .pl-0,#conversejs .px-0{padding-left:0!important}#conversejs .p-1{padding:.25rem!important}#conversejs .pt-1,#conversejs .py-1{padding-top:.25rem!important}#conversejs .pr-1,#conversejs .px-1{padding-right:.25rem!important}#conversejs .pb-1,#conversejs .py-1{padding-bottom:.25rem!important}#conversejs .pl-1,#conversejs .px-1{padding-left:.25rem!important}#conversejs .p-2{padding:.5rem!important}#conversejs .pt-2,#conversejs .py-2{padding-top:.5rem!important}#conversejs .pr-2,#conversejs .px-2{padding-right:.5rem!important}#conversejs .pb-2,#conversejs .py-2{padding-bottom:.5rem!important}#conversejs .pl-2,#conversejs .px-2{padding-left:.5rem!important}#conversejs .p-3{padding:1rem!important}#conversejs .pt-3,#conversejs .py-3{padding-top:1rem!important}#conversejs .pr-3,#conversejs .px-3{padding-right:1rem!important}#conversejs .pb-3,#conversejs .py-3{padding-bottom:1rem!important}#conversejs .pl-3,#conversejs .px-3{padding-left:1rem!important}#conversejs .p-4{padding:1.5rem!important}#conversejs .pt-4,#conversejs .py-4{padding-top:1.5rem!important}#conversejs .pr-4,#conversejs .px-4{padding-right:1.5rem!important}#conversejs .pb-4,#conversejs .py-4{padding-bottom:1.5rem!important}#conversejs .pl-4,#conversejs .px-4{padding-left:1.5rem!important}#conversejs .p-5{padding:3rem!important}#conversejs .pt-5,#conversejs .py-5{padding-top:3rem!important}#conversejs .pr-5,#conversejs .px-5{padding-right:3rem!important}#conversejs .pb-5,#conversejs .py-5{padding-bottom:3rem!important}#conversejs .pl-5,#conversejs .px-5{padding-left:3rem!important}#conversejs .m-n1{margin:-.25rem!important}#conversejs .mt-n1,#conversejs .my-n1{margin-top:-.25rem!important}#conversejs .mr-n1,#conversejs .mx-n1{margin-right:-.25rem!important}#conversejs .mb-n1,#conversejs .my-n1{margin-bottom:-.25rem!important}#conversejs .ml-n1,#conversejs .mx-n1{margin-left:-.25rem!important}#conversejs .m-n2{margin:-.5rem!important}#conversejs .mt-n2,#conversejs .my-n2{margin-top:-.5rem!important}#conversejs .mr-n2,#conversejs .mx-n2{margin-right:-.5rem!important}#conversejs .mb-n2,#conversejs .my-n2{margin-bottom:-.5rem!important}#conversejs .ml-n2,#conversejs .mx-n2{margin-left:-.5rem!important}#conversejs .m-n3{margin:-1rem!important}#conversejs .mt-n3,#conversejs .my-n3{margin-top:-1rem!important}#conversejs .mr-n3,#conversejs .mx-n3{margin-right:-1rem!important}#conversejs .mb-n3,#conversejs .my-n3{margin-bottom:-1rem!important}#conversejs .ml-n3,#conversejs .mx-n3{margin-left:-1rem!important}#conversejs .m-n4{margin:-1.5rem!important}#conversejs .mt-n4,#conversejs .my-n4{margin-top:-1.5rem!important}#conversejs .mr-n4,#conversejs .mx-n4{margin-right:-1.5rem!important}#conversejs .mb-n4,#conversejs .my-n4{margin-bottom:-1.5rem!important}#conversejs .ml-n4,#conversejs .mx-n4{margin-left:-1.5rem!important}#conversejs .m-n5{margin:-3rem!important}#conversejs .mt-n5,#conversejs .my-n5{margin-top:-3rem!important}#conversejs .mr-n5,#conversejs .mx-n5{margin-right:-3rem!important}#conversejs .mb-n5,#conversejs .my-n5{margin-bottom:-3rem!important}#conversejs .ml-n5,#conversejs .mx-n5{margin-left:-3rem!important}#conversejs .m-auto{margin:auto!important}#conversejs .mt-auto,#conversejs .my-auto{margin-top:auto!important}#conversejs .mr-auto,#conversejs .mx-auto{margin-right:auto!important}#conversejs .mb-auto,#conversejs .my-auto{margin-bottom:auto!important}#conversejs .ml-auto,#conversejs .mx-auto{margin-left:auto!important}@media (min-width:576px){#conversejs .m-sm-0{margin:0!important}#conversejs .mt-sm-0,#conversejs .my-sm-0{margin-top:0!important}#conversejs .mr-sm-0,#conversejs .mx-sm-0{margin-right:0!important}#conversejs .mb-sm-0,#conversejs .my-sm-0{margin-bottom:0!important}#conversejs .ml-sm-0,#conversejs .mx-sm-0{margin-left:0!important}#conversejs .m-sm-1{margin:.25rem!important}#conversejs .mt-sm-1,#conversejs .my-sm-1{margin-top:.25rem!important}#conversejs .mr-sm-1,#conversejs .mx-sm-1{margin-right:.25rem!important}#conversejs .mb-sm-1,#conversejs .my-sm-1{margin-bottom:.25rem!important}#conversejs .ml-sm-1,#conversejs .mx-sm-1{margin-left:.25rem!important}#conversejs .m-sm-2{margin:.5rem!important}#conversejs .mt-sm-2,#conversejs .my-sm-2{margin-top:.5rem!important}#conversejs .mr-sm-2,#conversejs .mx-sm-2{margin-right:.5rem!important}#conversejs .mb-sm-2,#conversejs .my-sm-2{margin-bottom:.5rem!important}#conversejs .ml-sm-2,#conversejs .mx-sm-2{margin-left:.5rem!important}#conversejs .m-sm-3{margin:1rem!important}#conversejs .mt-sm-3,#conversejs .my-sm-3{margin-top:1rem!important}#conversejs .mr-sm-3,#conversejs .mx-sm-3{margin-right:1rem!important}#conversejs .mb-sm-3,#conversejs .my-sm-3{margin-bottom:1rem!important}#conversejs .ml-sm-3,#conversejs .mx-sm-3{margin-left:1rem!important}#conversejs .m-sm-4{margin:1.5rem!important}#conversejs .mt-sm-4,#conversejs .my-sm-4{margin-top:1.5rem!important}#conversejs .mr-sm-4,#conversejs .mx-sm-4{margin-right:1.5rem!important}#conversejs .mb-sm-4,#conversejs .my-sm-4{margin-bottom:1.5rem!important}#conversejs .ml-sm-4,#conversejs .mx-sm-4{margin-left:1.5rem!important}#conversejs .m-sm-5{margin:3rem!important}#conversejs .mt-sm-5,#conversejs .my-sm-5{margin-top:3rem!important}#conversejs .mr-sm-5,#conversejs .mx-sm-5{margin-right:3rem!important}#conversejs .mb-sm-5,#conversejs .my-sm-5{margin-bottom:3rem!important}#conversejs .ml-sm-5,#conversejs .mx-sm-5{margin-left:3rem!important}#conversejs .p-sm-0{padding:0!important}#conversejs .pt-sm-0,#conversejs .py-sm-0{padding-top:0!important}#conversejs .pr-sm-0,#conversejs .px-sm-0{padding-right:0!important}#conversejs .pb-sm-0,#conversejs .py-sm-0{padding-bottom:0!important}#conversejs .pl-sm-0,#conversejs .px-sm-0{padding-left:0!important}#conversejs .p-sm-1{padding:.25rem!important}#conversejs .pt-sm-1,#conversejs .py-sm-1{padding-top:.25rem!important}#conversejs .pr-sm-1,#conversejs .px-sm-1{padding-right:.25rem!important}#conversejs .pb-sm-1,#conversejs .py-sm-1{padding-bottom:.25rem!important}#conversejs .pl-sm-1,#conversejs .px-sm-1{padding-left:.25rem!important}#conversejs .p-sm-2{padding:.5rem!important}#conversejs .pt-sm-2,#conversejs .py-sm-2{padding-top:.5rem!important}#conversejs .pr-sm-2,#conversejs .px-sm-2{padding-right:.5rem!important}#conversejs .pb-sm-2,#conversejs .py-sm-2{padding-bottom:.5rem!important}#conversejs .pl-sm-2,#conversejs .px-sm-2{padding-left:.5rem!important}#conversejs .p-sm-3{padding:1rem!important}#conversejs .pt-sm-3,#conversejs .py-sm-3{padding-top:1rem!important}#conversejs .pr-sm-3,#conversejs .px-sm-3{padding-right:1rem!important}#conversejs .pb-sm-3,#conversejs .py-sm-3{padding-bottom:1rem!important}#conversejs .pl-sm-3,#conversejs .px-sm-3{padding-left:1rem!important}#conversejs .p-sm-4{padding:1.5rem!important}#conversejs .pt-sm-4,#conversejs .py-sm-4{padding-top:1.5rem!important}#conversejs .pr-sm-4,#conversejs .px-sm-4{padding-right:1.5rem!important}#conversejs .pb-sm-4,#conversejs .py-sm-4{padding-bottom:1.5rem!important}#conversejs .pl-sm-4,#conversejs .px-sm-4{padding-left:1.5rem!important}#conversejs .p-sm-5{padding:3rem!important}#conversejs .pt-sm-5,#conversejs .py-sm-5{padding-top:3rem!important}#conversejs .pr-sm-5,#conversejs .px-sm-5{padding-right:3rem!important}#conversejs .pb-sm-5,#conversejs .py-sm-5{padding-bottom:3rem!important}#conversejs .pl-sm-5,#conversejs .px-sm-5{padding-left:3rem!important}#conversejs .m-sm-n1{margin:-.25rem!important}#conversejs .mt-sm-n1,#conversejs .my-sm-n1{margin-top:-.25rem!important}#conversejs .mr-sm-n1,#conversejs .mx-sm-n1{margin-right:-.25rem!important}#conversejs .mb-sm-n1,#conversejs .my-sm-n1{margin-bottom:-.25rem!important}#conversejs .ml-sm-n1,#conversejs .mx-sm-n1{margin-left:-.25rem!important}#conversejs .m-sm-n2{margin:-.5rem!important}#conversejs .mt-sm-n2,#conversejs .my-sm-n2{margin-top:-.5rem!important}#conversejs .mr-sm-n2,#conversejs .mx-sm-n2{margin-right:-.5rem!important}#conversejs .mb-sm-n2,#conversejs .my-sm-n2{margin-bottom:-.5rem!important}#conversejs .ml-sm-n2,#conversejs .mx-sm-n2{margin-left:-.5rem!important}#conversejs .m-sm-n3{margin:-1rem!important}#conversejs .mt-sm-n3,#conversejs .my-sm-n3{margin-top:-1rem!important}#conversejs .mr-sm-n3,#conversejs .mx-sm-n3{margin-right:-1rem!important}#conversejs .mb-sm-n3,#conversejs .my-sm-n3{margin-bottom:-1rem!important}#conversejs .ml-sm-n3,#conversejs .mx-sm-n3{margin-left:-1rem!important}#conversejs .m-sm-n4{margin:-1.5rem!important}#conversejs .mt-sm-n4,#conversejs .my-sm-n4{margin-top:-1.5rem!important}#conversejs .mr-sm-n4,#conversejs .mx-sm-n4{margin-right:-1.5rem!important}#conversejs .mb-sm-n4,#conversejs .my-sm-n4{margin-bottom:-1.5rem!important}#conversejs .ml-sm-n4,#conversejs .mx-sm-n4{margin-left:-1.5rem!important}#conversejs .m-sm-n5{margin:-3rem!important}#conversejs .mt-sm-n5,#conversejs .my-sm-n5{margin-top:-3rem!important}#conversejs .mr-sm-n5,#conversejs .mx-sm-n5{margin-right:-3rem!important}#conversejs .mb-sm-n5,#conversejs .my-sm-n5{margin-bottom:-3rem!important}#conversejs .ml-sm-n5,#conversejs .mx-sm-n5{margin-left:-3rem!important}#conversejs .m-sm-auto{margin:auto!important}#conversejs .mt-sm-auto,#conversejs .my-sm-auto{margin-top:auto!important}#conversejs .mr-sm-auto,#conversejs .mx-sm-auto{margin-right:auto!important}#conversejs .mb-sm-auto,#conversejs .my-sm-auto{margin-bottom:auto!important}#conversejs .ml-sm-auto,#conversejs .mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){#conversejs .m-md-0{margin:0!important}#conversejs .mt-md-0,#conversejs .my-md-0{margin-top:0!important}#conversejs .mr-md-0,#conversejs .mx-md-0{margin-right:0!important}#conversejs .mb-md-0,#conversejs .my-md-0{margin-bottom:0!important}#conversejs .ml-md-0,#conversejs .mx-md-0{margin-left:0!important}#conversejs .m-md-1{margin:.25rem!important}#conversejs .mt-md-1,#conversejs .my-md-1{margin-top:.25rem!important}#conversejs .mr-md-1,#conversejs .mx-md-1{margin-right:.25rem!important}#conversejs .mb-md-1,#conversejs .my-md-1{margin-bottom:.25rem!important}#conversejs .ml-md-1,#conversejs .mx-md-1{margin-left:.25rem!important}#conversejs .m-md-2{margin:.5rem!important}#conversejs .mt-md-2,#conversejs .my-md-2{margin-top:.5rem!important}#conversejs .mr-md-2,#conversejs .mx-md-2{margin-right:.5rem!important}#conversejs .mb-md-2,#conversejs .my-md-2{margin-bottom:.5rem!important}#conversejs .ml-md-2,#conversejs .mx-md-2{margin-left:.5rem!important}#conversejs .m-md-3{margin:1rem!important}#conversejs .mt-md-3,#conversejs .my-md-3{margin-top:1rem!important}#conversejs .mr-md-3,#conversejs .mx-md-3{margin-right:1rem!important}#conversejs .mb-md-3,#conversejs .my-md-3{margin-bottom:1rem!important}#conversejs .ml-md-3,#conversejs .mx-md-3{margin-left:1rem!important}#conversejs .m-md-4{margin:1.5rem!important}#conversejs .mt-md-4,#conversejs .my-md-4{margin-top:1.5rem!important}#conversejs .mr-md-4,#conversejs .mx-md-4{margin-right:1.5rem!important}#conversejs .mb-md-4,#conversejs .my-md-4{margin-bottom:1.5rem!important}#conversejs .ml-md-4,#conversejs .mx-md-4{margin-left:1.5rem!important}#conversejs .m-md-5{margin:3rem!important}#conversejs .mt-md-5,#conversejs .my-md-5{margin-top:3rem!important}#conversejs .mr-md-5,#conversejs .mx-md-5{margin-right:3rem!important}#conversejs .mb-md-5,#conversejs .my-md-5{margin-bottom:3rem!important}#conversejs .ml-md-5,#conversejs .mx-md-5{margin-left:3rem!important}#conversejs .p-md-0{padding:0!important}#conversejs .pt-md-0,#conversejs .py-md-0{padding-top:0!important}#conversejs .pr-md-0,#conversejs .px-md-0{padding-right:0!important}#conversejs .pb-md-0,#conversejs .py-md-0{padding-bottom:0!important}#conversejs .pl-md-0,#conversejs .px-md-0{padding-left:0!important}#conversejs .p-md-1{padding:.25rem!important}#conversejs .pt-md-1,#conversejs .py-md-1{padding-top:.25rem!important}#conversejs .pr-md-1,#conversejs .px-md-1{padding-right:.25rem!important}#conversejs .pb-md-1,#conversejs .py-md-1{padding-bottom:.25rem!important}#conversejs .pl-md-1,#conversejs .px-md-1{padding-left:.25rem!important}#conversejs .p-md-2{padding:.5rem!important}#conversejs .pt-md-2,#conversejs .py-md-2{padding-top:.5rem!important}#conversejs .pr-md-2,#conversejs .px-md-2{padding-right:.5rem!important}#conversejs .pb-md-2,#conversejs .py-md-2{padding-bottom:.5rem!important}#conversejs .pl-md-2,#conversejs .px-md-2{padding-left:.5rem!important}#conversejs .p-md-3{padding:1rem!important}#conversejs .pt-md-3,#conversejs .py-md-3{padding-top:1rem!important}#conversejs .pr-md-3,#conversejs .px-md-3{padding-right:1rem!important}#conversejs .pb-md-3,#conversejs .py-md-3{padding-bottom:1rem!important}#conversejs .pl-md-3,#conversejs .px-md-3{padding-left:1rem!important}#conversejs .p-md-4{padding:1.5rem!important}#conversejs .pt-md-4,#conversejs .py-md-4{padding-top:1.5rem!important}#conversejs .pr-md-4,#conversejs .px-md-4{padding-right:1.5rem!important}#conversejs .pb-md-4,#conversejs .py-md-4{padding-bottom:1.5rem!important}#conversejs .pl-md-4,#conversejs .px-md-4{padding-left:1.5rem!important}#conversejs .p-md-5{padding:3rem!important}#conversejs .pt-md-5,#conversejs .py-md-5{padding-top:3rem!important}#conversejs .pr-md-5,#conversejs .px-md-5{padding-right:3rem!important}#conversejs .pb-md-5,#conversejs .py-md-5{padding-bottom:3rem!important}#conversejs .pl-md-5,#conversejs .px-md-5{padding-left:3rem!important}#conversejs .m-md-n1{margin:-.25rem!important}#conversejs .mt-md-n1,#conversejs .my-md-n1{margin-top:-.25rem!important}#conversejs .mr-md-n1,#conversejs .mx-md-n1{margin-right:-.25rem!important}#conversejs .mb-md-n1,#conversejs .my-md-n1{margin-bottom:-.25rem!important}#conversejs .ml-md-n1,#conversejs .mx-md-n1{margin-left:-.25rem!important}#conversejs .m-md-n2{margin:-.5rem!important}#conversejs .mt-md-n2,#conversejs .my-md-n2{margin-top:-.5rem!important}#conversejs .mr-md-n2,#conversejs .mx-md-n2{margin-right:-.5rem!important}#conversejs .mb-md-n2,#conversejs .my-md-n2{margin-bottom:-.5rem!important}#conversejs .ml-md-n2,#conversejs .mx-md-n2{margin-left:-.5rem!important}#conversejs .m-md-n3{margin:-1rem!important}#conversejs .mt-md-n3,#conversejs .my-md-n3{margin-top:-1rem!important}#conversejs .mr-md-n3,#conversejs .mx-md-n3{margin-right:-1rem!important}#conversejs .mb-md-n3,#conversejs .my-md-n3{margin-bottom:-1rem!important}#conversejs .ml-md-n3,#conversejs .mx-md-n3{margin-left:-1rem!important}#conversejs .m-md-n4{margin:-1.5rem!important}#conversejs .mt-md-n4,#conversejs .my-md-n4{margin-top:-1.5rem!important}#conversejs .mr-md-n4,#conversejs .mx-md-n4{margin-right:-1.5rem!important}#conversejs .mb-md-n4,#conversejs .my-md-n4{margin-bottom:-1.5rem!important}#conversejs .ml-md-n4,#conversejs .mx-md-n4{margin-left:-1.5rem!important}#conversejs .m-md-n5{margin:-3rem!important}#conversejs .mt-md-n5,#conversejs .my-md-n5{margin-top:-3rem!important}#conversejs .mr-md-n5,#conversejs .mx-md-n5{margin-right:-3rem!important}#conversejs .mb-md-n5,#conversejs .my-md-n5{margin-bottom:-3rem!important}#conversejs .ml-md-n5,#conversejs .mx-md-n5{margin-left:-3rem!important}#conversejs .m-md-auto{margin:auto!important}#conversejs .mt-md-auto,#conversejs .my-md-auto{margin-top:auto!important}#conversejs .mr-md-auto,#conversejs .mx-md-auto{margin-right:auto!important}#conversejs .mb-md-auto,#conversejs .my-md-auto{margin-bottom:auto!important}#conversejs .ml-md-auto,#conversejs .mx-md-auto{margin-left:auto!important}}@media (min-width:992px){#conversejs .m-lg-0{margin:0!important}#conversejs .mt-lg-0,#conversejs .my-lg-0{margin-top:0!important}#conversejs .mr-lg-0,#conversejs .mx-lg-0{margin-right:0!important}#conversejs .mb-lg-0,#conversejs .my-lg-0{margin-bottom:0!important}#conversejs .ml-lg-0,#conversejs .mx-lg-0{margin-left:0!important}#conversejs .m-lg-1{margin:.25rem!important}#conversejs .mt-lg-1,#conversejs .my-lg-1{margin-top:.25rem!important}#conversejs .mr-lg-1,#conversejs .mx-lg-1{margin-right:.25rem!important}#conversejs .mb-lg-1,#conversejs .my-lg-1{margin-bottom:.25rem!important}#conversejs .ml-lg-1,#conversejs .mx-lg-1{margin-left:.25rem!important}#conversejs .m-lg-2{margin:.5rem!important}#conversejs .mt-lg-2,#conversejs .my-lg-2{margin-top:.5rem!important}#conversejs .mr-lg-2,#conversejs .mx-lg-2{margin-right:.5rem!important}#conversejs .mb-lg-2,#conversejs .my-lg-2{margin-bottom:.5rem!important}#conversejs .ml-lg-2,#conversejs .mx-lg-2{margin-left:.5rem!important}#conversejs .m-lg-3{margin:1rem!important}#conversejs .mt-lg-3,#conversejs .my-lg-3{margin-top:1rem!important}#conversejs .mr-lg-3,#conversejs .mx-lg-3{margin-right:1rem!important}#conversejs .mb-lg-3,#conversejs .my-lg-3{margin-bottom:1rem!important}#conversejs .ml-lg-3,#conversejs .mx-lg-3{margin-left:1rem!important}#conversejs .m-lg-4{margin:1.5rem!important}#conversejs .mt-lg-4,#conversejs .my-lg-4{margin-top:1.5rem!important}#conversejs .mr-lg-4,#conversejs .mx-lg-4{margin-right:1.5rem!important}#conversejs .mb-lg-4,#conversejs .my-lg-4{margin-bottom:1.5rem!important}#conversejs .ml-lg-4,#conversejs .mx-lg-4{margin-left:1.5rem!important}#conversejs .m-lg-5{margin:3rem!important}#conversejs .mt-lg-5,#conversejs .my-lg-5{margin-top:3rem!important}#conversejs .mr-lg-5,#conversejs .mx-lg-5{margin-right:3rem!important}#conversejs .mb-lg-5,#conversejs .my-lg-5{margin-bottom:3rem!important}#conversejs .ml-lg-5,#conversejs .mx-lg-5{margin-left:3rem!important}#conversejs .p-lg-0{padding:0!important}#conversejs .pt-lg-0,#conversejs .py-lg-0{padding-top:0!important}#conversejs .pr-lg-0,#conversejs .px-lg-0{padding-right:0!important}#conversejs .pb-lg-0,#conversejs .py-lg-0{padding-bottom:0!important}#conversejs .pl-lg-0,#conversejs .px-lg-0{padding-left:0!important}#conversejs .p-lg-1{padding:.25rem!important}#conversejs .pt-lg-1,#conversejs .py-lg-1{padding-top:.25rem!important}#conversejs .pr-lg-1,#conversejs .px-lg-1{padding-right:.25rem!important}#conversejs .pb-lg-1,#conversejs .py-lg-1{padding-bottom:.25rem!important}#conversejs .pl-lg-1,#conversejs .px-lg-1{padding-left:.25rem!important}#conversejs .p-lg-2{padding:.5rem!important}#conversejs .pt-lg-2,#conversejs .py-lg-2{padding-top:.5rem!important}#conversejs .pr-lg-2,#conversejs .px-lg-2{padding-right:.5rem!important}#conversejs .pb-lg-2,#conversejs .py-lg-2{padding-bottom:.5rem!important}#conversejs .pl-lg-2,#conversejs .px-lg-2{padding-left:.5rem!important}#conversejs .p-lg-3{padding:1rem!important}#conversejs .pt-lg-3,#conversejs .py-lg-3{padding-top:1rem!important}#conversejs .pr-lg-3,#conversejs .px-lg-3{padding-right:1rem!important}#conversejs .pb-lg-3,#conversejs .py-lg-3{padding-bottom:1rem!important}#conversejs .pl-lg-3,#conversejs .px-lg-3{padding-left:1rem!important}#conversejs .p-lg-4{padding:1.5rem!important}#conversejs .pt-lg-4,#conversejs .py-lg-4{padding-top:1.5rem!important}#conversejs .pr-lg-4,#conversejs .px-lg-4{padding-right:1.5rem!important}#conversejs .pb-lg-4,#conversejs .py-lg-4{padding-bottom:1.5rem!important}#conversejs .pl-lg-4,#conversejs .px-lg-4{padding-left:1.5rem!important}#conversejs .p-lg-5{padding:3rem!important}#conversejs .pt-lg-5,#conversejs .py-lg-5{padding-top:3rem!important}#conversejs .pr-lg-5,#conversejs .px-lg-5{padding-right:3rem!important}#conversejs .pb-lg-5,#conversejs .py-lg-5{padding-bottom:3rem!important}#conversejs .pl-lg-5,#conversejs .px-lg-5{padding-left:3rem!important}#conversejs .m-lg-n1{margin:-.25rem!important}#conversejs .mt-lg-n1,#conversejs .my-lg-n1{margin-top:-.25rem!important}#conversejs .mr-lg-n1,#conversejs .mx-lg-n1{margin-right:-.25rem!important}#conversejs .mb-lg-n1,#conversejs .my-lg-n1{margin-bottom:-.25rem!important}#conversejs .ml-lg-n1,#conversejs .mx-lg-n1{margin-left:-.25rem!important}#conversejs .m-lg-n2{margin:-.5rem!important}#conversejs .mt-lg-n2,#conversejs .my-lg-n2{margin-top:-.5rem!important}#conversejs .mr-lg-n2,#conversejs .mx-lg-n2{margin-right:-.5rem!important}#conversejs .mb-lg-n2,#conversejs .my-lg-n2{margin-bottom:-.5rem!important}#conversejs .ml-lg-n2,#conversejs .mx-lg-n2{margin-left:-.5rem!important}#conversejs .m-lg-n3{margin:-1rem!important}#conversejs .mt-lg-n3,#conversejs .my-lg-n3{margin-top:-1rem!important}#conversejs .mr-lg-n3,#conversejs .mx-lg-n3{margin-right:-1rem!important}#conversejs .mb-lg-n3,#conversejs .my-lg-n3{margin-bottom:-1rem!important}#conversejs .ml-lg-n3,#conversejs .mx-lg-n3{margin-left:-1rem!important}#conversejs .m-lg-n4{margin:-1.5rem!important}#conversejs .mt-lg-n4,#conversejs .my-lg-n4{margin-top:-1.5rem!important}#conversejs .mr-lg-n4,#conversejs .mx-lg-n4{margin-right:-1.5rem!important}#conversejs .mb-lg-n4,#conversejs .my-lg-n4{margin-bottom:-1.5rem!important}#conversejs .ml-lg-n4,#conversejs .mx-lg-n4{margin-left:-1.5rem!important}#conversejs .m-lg-n5{margin:-3rem!important}#conversejs .mt-lg-n5,#conversejs .my-lg-n5{margin-top:-3rem!important}#conversejs .mr-lg-n5,#conversejs .mx-lg-n5{margin-right:-3rem!important}#conversejs .mb-lg-n5,#conversejs .my-lg-n5{margin-bottom:-3rem!important}#conversejs .ml-lg-n5,#conversejs .mx-lg-n5{margin-left:-3rem!important}#conversejs .m-lg-auto{margin:auto!important}#conversejs .mt-lg-auto,#conversejs .my-lg-auto{margin-top:auto!important}#conversejs .mr-lg-auto,#conversejs .mx-lg-auto{margin-right:auto!important}#conversejs .mb-lg-auto,#conversejs .my-lg-auto{margin-bottom:auto!important}#conversejs .ml-lg-auto,#conversejs .mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){#conversejs .m-xl-0{margin:0!important}#conversejs .mt-xl-0,#conversejs .my-xl-0{margin-top:0!important}#conversejs .mr-xl-0,#conversejs .mx-xl-0{margin-right:0!important}#conversejs .mb-xl-0,#conversejs .my-xl-0{margin-bottom:0!important}#conversejs .ml-xl-0,#conversejs .mx-xl-0{margin-left:0!important}#conversejs .m-xl-1{margin:.25rem!important}#conversejs .mt-xl-1,#conversejs .my-xl-1{margin-top:.25rem!important}#conversejs .mr-xl-1,#conversejs .mx-xl-1{margin-right:.25rem!important}#conversejs .mb-xl-1,#conversejs .my-xl-1{margin-bottom:.25rem!important}#conversejs .ml-xl-1,#conversejs .mx-xl-1{margin-left:.25rem!important}#conversejs .m-xl-2{margin:.5rem!important}#conversejs .mt-xl-2,#conversejs .my-xl-2{margin-top:.5rem!important}#conversejs .mr-xl-2,#conversejs .mx-xl-2{margin-right:.5rem!important}#conversejs .mb-xl-2,#conversejs .my-xl-2{margin-bottom:.5rem!important}#conversejs .ml-xl-2,#conversejs .mx-xl-2{margin-left:.5rem!important}#conversejs .m-xl-3{margin:1rem!important}#conversejs .mt-xl-3,#conversejs .my-xl-3{margin-top:1rem!important}#conversejs .mr-xl-3,#conversejs .mx-xl-3{margin-right:1rem!important}#conversejs .mb-xl-3,#conversejs .my-xl-3{margin-bottom:1rem!important}#conversejs .ml-xl-3,#conversejs .mx-xl-3{margin-left:1rem!important}#conversejs .m-xl-4{margin:1.5rem!important}#conversejs .mt-xl-4,#conversejs .my-xl-4{margin-top:1.5rem!important}#conversejs .mr-xl-4,#conversejs .mx-xl-4{margin-right:1.5rem!important}#conversejs .mb-xl-4,#conversejs .my-xl-4{margin-bottom:1.5rem!important}#conversejs .ml-xl-4,#conversejs .mx-xl-4{margin-left:1.5rem!important}#conversejs .m-xl-5{margin:3rem!important}#conversejs .mt-xl-5,#conversejs .my-xl-5{margin-top:3rem!important}#conversejs .mr-xl-5,#conversejs .mx-xl-5{margin-right:3rem!important}#conversejs .mb-xl-5,#conversejs .my-xl-5{margin-bottom:3rem!important}#conversejs .ml-xl-5,#conversejs .mx-xl-5{margin-left:3rem!important}#conversejs .p-xl-0{padding:0!important}#conversejs .pt-xl-0,#conversejs .py-xl-0{padding-top:0!important}#conversejs .pr-xl-0,#conversejs .px-xl-0{padding-right:0!important}#conversejs .pb-xl-0,#conversejs .py-xl-0{padding-bottom:0!important}#conversejs .pl-xl-0,#conversejs .px-xl-0{padding-left:0!important}#conversejs .p-xl-1{padding:.25rem!important}#conversejs .pt-xl-1,#conversejs .py-xl-1{padding-top:.25rem!important}#conversejs .pr-xl-1,#conversejs .px-xl-1{padding-right:.25rem!important}#conversejs .pb-xl-1,#conversejs .py-xl-1{padding-bottom:.25rem!important}#conversejs .pl-xl-1,#conversejs .px-xl-1{padding-left:.25rem!important}#conversejs .p-xl-2{padding:.5rem!important}#conversejs .pt-xl-2,#conversejs .py-xl-2{padding-top:.5rem!important}#conversejs .pr-xl-2,#conversejs .px-xl-2{padding-right:.5rem!important}#conversejs .pb-xl-2,#conversejs .py-xl-2{padding-bottom:.5rem!important}#conversejs .pl-xl-2,#conversejs .px-xl-2{padding-left:.5rem!important}#conversejs .p-xl-3{padding:1rem!important}#conversejs .pt-xl-3,#conversejs .py-xl-3{padding-top:1rem!important}#conversejs .pr-xl-3,#conversejs .px-xl-3{padding-right:1rem!important}#conversejs .pb-xl-3,#conversejs .py-xl-3{padding-bottom:1rem!important}#conversejs .pl-xl-3,#conversejs .px-xl-3{padding-left:1rem!important}#conversejs .p-xl-4{padding:1.5rem!important}#conversejs .pt-xl-4,#conversejs .py-xl-4{padding-top:1.5rem!important}#conversejs .pr-xl-4,#conversejs .px-xl-4{padding-right:1.5rem!important}#conversejs .pb-xl-4,#conversejs .py-xl-4{padding-bottom:1.5rem!important}#conversejs .pl-xl-4,#conversejs .px-xl-4{padding-left:1.5rem!important}#conversejs .p-xl-5{padding:3rem!important}#conversejs .pt-xl-5,#conversejs .py-xl-5{padding-top:3rem!important}#conversejs .pr-xl-5,#conversejs .px-xl-5{padding-right:3rem!important}#conversejs .pb-xl-5,#conversejs .py-xl-5{padding-bottom:3rem!important}#conversejs .pl-xl-5,#conversejs .px-xl-5{padding-left:3rem!important}#conversejs .m-xl-n1{margin:-.25rem!important}#conversejs .mt-xl-n1,#conversejs .my-xl-n1{margin-top:-.25rem!important}#conversejs .mr-xl-n1,#conversejs .mx-xl-n1{margin-right:-.25rem!important}#conversejs .mb-xl-n1,#conversejs .my-xl-n1{margin-bottom:-.25rem!important}#conversejs .ml-xl-n1,#conversejs .mx-xl-n1{margin-left:-.25rem!important}#conversejs .m-xl-n2{margin:-.5rem!important}#conversejs .mt-xl-n2,#conversejs .my-xl-n2{margin-top:-.5rem!important}#conversejs .mr-xl-n2,#conversejs .mx-xl-n2{margin-right:-.5rem!important}#conversejs .mb-xl-n2,#conversejs .my-xl-n2{margin-bottom:-.5rem!important}#conversejs .ml-xl-n2,#conversejs .mx-xl-n2{margin-left:-.5rem!important}#conversejs .m-xl-n3{margin:-1rem!important}#conversejs .mt-xl-n3,#conversejs .my-xl-n3{margin-top:-1rem!important}#conversejs .mr-xl-n3,#conversejs .mx-xl-n3{margin-right:-1rem!important}#conversejs .mb-xl-n3,#conversejs .my-xl-n3{margin-bottom:-1rem!important}#conversejs .ml-xl-n3,#conversejs .mx-xl-n3{margin-left:-1rem!important}#conversejs .m-xl-n4{margin:-1.5rem!important}#conversejs .mt-xl-n4,#conversejs .my-xl-n4{margin-top:-1.5rem!important}#conversejs .mr-xl-n4,#conversejs .mx-xl-n4{margin-right:-1.5rem!important}#conversejs .mb-xl-n4,#conversejs .my-xl-n4{margin-bottom:-1.5rem!important}#conversejs .ml-xl-n4,#conversejs .mx-xl-n4{margin-left:-1.5rem!important}#conversejs .m-xl-n5{margin:-3rem!important}#conversejs .mt-xl-n5,#conversejs .my-xl-n5{margin-top:-3rem!important}#conversejs .mr-xl-n5,#conversejs .mx-xl-n5{margin-right:-3rem!important}#conversejs .mb-xl-n5,#conversejs .my-xl-n5{margin-bottom:-3rem!important}#conversejs .ml-xl-n5,#conversejs .mx-xl-n5{margin-left:-3rem!important}#conversejs .m-xl-auto{margin:auto!important}#conversejs .mt-xl-auto,#conversejs .my-xl-auto{margin-top:auto!important}#conversejs .mr-xl-auto,#conversejs .mx-xl-auto{margin-right:auto!important}#conversejs .mb-xl-auto,#conversejs .my-xl-auto{margin-bottom:auto!important}#conversejs .ml-xl-auto,#conversejs .mx-xl-auto{margin-left:auto!important}}#conversejs .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}#conversejs .text-justify{text-align:justify!important}#conversejs .text-wrap{white-space:normal!important}#conversejs .text-nowrap{white-space:nowrap!important}#conversejs .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs .text-left{text-align:left!important}#conversejs .text-right{text-align:right!important}#conversejs .text-center{text-align:center!important}@media (min-width:576px){#conversejs .text-sm-left{text-align:left!important}#conversejs .text-sm-right{text-align:right!important}#conversejs .text-sm-center{text-align:center!important}}@media (min-width:768px){#conversejs .text-md-left{text-align:left!important}#conversejs .text-md-right{text-align:right!important}#conversejs .text-md-center{text-align:center!important}}@media (min-width:992px){#conversejs .text-lg-left{text-align:left!important}#conversejs .text-lg-right{text-align:right!important}#conversejs .text-lg-center{text-align:center!important}}@media (min-width:1200px){#conversejs .text-xl-left{text-align:left!important}#conversejs .text-xl-right{text-align:right!important}#conversejs .text-xl-center{text-align:center!important}}#conversejs .text-lowercase{text-transform:lowercase!important}#conversejs .text-uppercase{text-transform:uppercase!important}#conversejs .text-capitalize{text-transform:capitalize!important}#conversejs .font-weight-light{font-weight:300!important}#conversejs .font-weight-lighter{font-weight:lighter!important}#conversejs .font-weight-normal{font-weight:400!important}#conversejs .font-weight-bold{font-weight:700!important}#conversejs .font-weight-bolder{font-weight:bolder!important}#conversejs .font-italic{font-style:italic!important}#conversejs .text-white{color:#fff!important}#conversejs .text-primary{color:#007bff!important}#conversejs a.text-primary:focus,#conversejs a.text-primary:hover{color:#0056b3!important}#conversejs .text-secondary{color:#6c757d!important}#conversejs a.text-secondary:focus,#conversejs a.text-secondary:hover{color:#494f54!important}#conversejs .text-success{color:#28a745!important}#conversejs a.text-success:focus,#conversejs a.text-success:hover{color:#19692c!important}#conversejs .text-info{color:#17a2b8!important}#conversejs a.text-info:focus,#conversejs a.text-info:hover{color:#0f6674!important}#conversejs .text-warning{color:#ffc107!important}#conversejs a.text-warning:focus,#conversejs a.text-warning:hover{color:#ba8b00!important}#conversejs .text-danger{color:#dc3545!important}#conversejs a.text-danger:focus,#conversejs a.text-danger:hover{color:#a71d2a!important}#conversejs .text-light{color:#f8f9fa!important}#conversejs a.text-light:focus,#conversejs a.text-light:hover{color:#cbd3da!important}#conversejs .text-dark{color:#343a40!important}#conversejs a.text-dark:focus,#conversejs a.text-dark:hover{color:#121416!important}#conversejs .text-body{color:#212529!important}#conversejs .text-muted{color:#6c757d!important}#conversejs .text-black-50{color:rgba(0,0,0,.5)!important}#conversejs .text-white-50{color:rgba(255,255,255,.5)!important}#conversejs .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#conversejs .text-decoration-none{text-decoration:none!important}#conversejs .text-break{word-break:break-word!important;overflow-wrap:break-word!important}#conversejs .text-reset{color:inherit!important}#conversejs .visible{visibility:visible!important}#conversejs .invisible{visibility:hidden!important}@font-face{font-family:Baumans;font-style:normal;font-weight:400;src:local("Baumans Regular"),local("Baumans-Regular"),url(webfonts/baumans.ttf) format("truetype")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:local("Muli Regular"),local("Muli-Regular"),url(webfonts/muli.ttf) format("truetype")}@font-face{font-family:ConverseFontAwesomeBrands;font-style:normal;font-weight:400;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-brands-400.woff2) format("woff2"),url(webfonts/fa-brands-400.woff) format("woff"),url(webfonts/fa-brands-400.ttf) format("truetype"),url(webfonts/fa-brands-400.svg#fontawesome) format("svg")}@font-face{font-family:ConverseFontAwesomeRegular;font-style:normal;font-weight:400;src:url(webfonts/fa-regular-400.eot);src:url(webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-regular-400.woff2) format("woff2"),url(webfonts/fa-regular-400.woff) format("woff"),url(webfonts/fa-regular-400.ttf) format("truetype"),url(webfonts/fa-regular-400.svg#fontawesome) format("svg");font-weight:400;font-style:normal}@font-face{font-family:ConverseFontAwesomeSolid;font-style:normal;font-weight:900;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-solid-900.svg#fontawesome) format("svg"),url(webfonts/fa-solid-900.woff2) format("woff2"),url(webfonts/fa-solid-900.woff) format("woff"),url(webfonts/fa-solid-900.ttf) format("truetype")}.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}#conversejs converse-icon:before,.converse-website converse-icon:before{content:none!important}#conversejs .far:not(converse-icon),.converse-website .far:not(converse-icon){font-family:ConverseFontAwesomeRegular!important;font-weight:400}#conversejs .fa:not(converse-icon),#conversejs .fas:not(converse-icon),.converse-website .fa:not(converse-icon),.converse-website .fas:not(converse-icon){font-family:ConverseFontAwesomeSolid!important;font-weight:900}#conversejs .fab:not(converse-icon),.converse-website .fab:not(converse-icon){font-family:ConverseFontAwesomeBrands}#conversejs .fa:not(converse-icon),#conversejs .fab:not(converse-icon),#conversejs .far:not(converse-icon),#conversejs .fas:not(converse-icon),.converse-website .fa:not(converse-icon),.converse-website .fab:not(converse-icon),.converse-website .far:not(converse-icon),.converse-website .fas:not(converse-icon){display:inline-block;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#conversejs .fa-info-circle,.converse-website .fa-info-circle{height:1em}#conversejs,#conversejs-bg,.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--flyout-padding:0.5em;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:'Muli',normal;--branding-font:'Baumans',cursive;--heading-display:block;--heading-color:white;--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}#conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}body.converse-fullscreen{margin:0;background-color:var(--global-background-color)}#conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media (min-width:768px){#conversejs-bg .converse-brand__padding{flex:0 0 33.33333%;max-width:33.33333%}}@media (min-width:992px){#conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media (min-width:1200px){#conversejs-bg .converse-brand__padding{flex:0 0 16.66667%;max-width:16.66667%}}#conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media (min-width:768px){#conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.66667%;max-width:66.66667%}}@media (min-width:992px){#conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media (min-width:1200px){#conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.33333%;max-width:83.33333%}}#conversejs-bg .converse-brand__heading svg{margin-top:.3em}#conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}#conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px}#conversejs .subdued,#conversejs-bg .subdued{opacity:.35}#conversejs{bottom:0;height:100%;position:fixed;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);color:var(--text-color);font-family:var(--normal-font);font-size:var(--font-size);direction:ltr;z-index:1031}#conversejs textarea:disabled{background-color:#eee!important}#conversejs .fit-content{width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important;max-width:-webkit-fit-content!important;max-width:-moz-fit-content!important;max-width:fit-content!important}#conversejs .nopadding{padding:0!important}#conversejs.converse-overlayed>.row{flex-direction:row-reverse}#conversejs.converse-fullscreen .converse-chatboxes,#conversejs.converse-mobile .converse-chatboxes{width:100vw;left:-15px}#conversejs.converse-overlayed{height:3em}#conversejs.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}#conversejs.converse-embedded *,#conversejs.converse-embedded :after,#conversejs.converse-embedded :before{box-sizing:border-box}#conversejs converse-brand-heading{text-align:center}#conversejs .brand-heading{display:inline-flex;flex-direction:row;align-items:flex-start;font-family:var(--branding-font);color:var(--link-color);margin-bottom:.75em}#conversejs .brand-heading .brand-name-wrapper{display:flex;white-space:nowrap;margin:auto}#conversejs .brand-heading .brand-name{color:var(--link-color);display:flex;flex-direction:column;align-items:center;margin-top:-.25em}#conversejs .brand-heading .brand-name .byline{font-family:var(--heading-font);font-size:.3em;margin-bottom:.75em;margin-left:-2.7em;opacity:.55;word-spacing:5px}#conversejs .brand-heading .brand-subtitle{color:var(--text-color)}#conversejs .brand-heading .brand-name__text{font-size:120%;vertical-align:text-bottom}#conversejs .brand-heading .converse-svg-logo{color:var(--link-color);height:1.5em;margin-right:.25em;margin-bottom:-.25em}#conversejs .brand-heading .converse-svg-logo .cls-1{isolation:isolate}#conversejs .brand-heading .converse-svg-logo .cls-2{opacity:.5;mix-blend-mode:multiply}#conversejs .brand-heading .converse-svg-logo .cls-3{fill:var(--link-color)}#conversejs .brand-heading .converse-svg-logo .cls-4{fill:var(--link-color)}#conversejs .brand-heading--inverse .converse-svg-logo{margin-bottom:0;margin-top:-.2em}#conversejs .brand-heading--inverse .byline{margin:0;font-family:var(--heading-font);font-size:.25em;opacity:.55;margin-left:-7em;word-spacing:5px}#conversejs .dropdown-item{padding:.5rem 1rem}#conversejs .dropdown-item .fa{width:1.25em;margin-right:.75rem}#conversejs .dropdown-item.selected,#conversejs .dropdown-item:active{color:#fff!important;background-color:var(--list-item-open-color)}#conversejs .dropdown-item.selected .fa,#conversejs .dropdown-item:active .fa{color:#fff!important}#conversejs .popover{position:fixed}#conversejs .converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}#conversejs ::-moz-placeholder{color:var(--subdued-color)}#conversejs :-ms-input-placeholder{color:var(--subdued-color)}#conversejs ::-ms-input-placeholder{color:var(--subdued-color)}#conversejs ::placeholder{color:var(--subdued-color)}#conversejs ::-moz-selection{background-color:var(--highlight-color)}#conversejs ::selection{background-color:var(--highlight-color)}#conversejs ::-moz-selection{background-color:var(--highlight-color)}@media screen and (max-width:480px){#conversejs{margin:0;right:10px;left:10px;bottom:5px}}@media screen and (max-height:450px){#conversejs{margin:0;right:10px;left:10px;bottom:5px}}#conversejs ul li{height:auto}#conversejs a,#conversejs article,#conversejs aside,#conversejs audio,#conversejs blockquote,#conversejs caption,#conversejs dd,#conversejs details,#conversejs div,#conversejs dl,#conversejs dt,#conversejs em,#conversejs embed,#conversejs fieldset,#conversejs figcaption,#conversejs figure,#conversejs footer,#conversejs form,#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6,#conversejs header,#conversejs hgroup,#conversejs img,#conversejs legend,#conversejs li,#conversejs mark,#conversejs menu,#conversejs nav,#conversejs ol,#conversejs output,#conversejs p,#conversejs pre,#conversejs ruby,#conversejs section,#conversejs span,#conversejs strong,#conversejs summary,#conversejs table,#conversejs tbody,#conversejs td,#conversejs tfoot,#conversejs th,#conversejs thead,#conversejs time,#conversejs tr,#conversejs ul,#conversejs video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}#conversejs button,#conversejs input[type=button],#conversejs input[type=password],#conversejs input[type=submit],#conversejs input[type=text],#conversejs textarea{font-size:var(--font-size);min-height:0}#conversejs strong{font-weight:700}#conversejs em{font-style:italic}#conversejs ol,#conversejs ul{list-style:none}#conversejs li{height:10px}#conversejs dl,#conversejs ol,#conversejs ul{font:inherit;margin:0}#conversejs a{cursor:pointer}#conversejs a,#conversejs a:not([href]):not([tabindex]),#conversejs a:visited{text-decoration:none;color:var(--link-color);text-shadow:none;cursor:pointer}#conversejs a:hover,#conversejs a:not([href]):not([tabindex]):hover,#conversejs a:visited:hover{color:var(--link-hover-color);text-decoration:none;text-shadow:none}#conversejs a.fa,#conversejs a.far,#conversejs a.fas,#conversejs a:not([href]):not([tabindex]).fa,#conversejs a:not([href]):not([tabindex]).far,#conversejs a:not([href]):not([tabindex]).fas,#conversejs a:visited.fa,#conversejs a:visited.far,#conversejs a:visited.fas{color:var(--subdued-color)}#conversejs a.fa:hover,#conversejs a.far:hover,#conversejs a.fas:hover,#conversejs a:not([href]):not([tabindex]).fa:hover,#conversejs a:not([href]):not([tabindex]).far:hover,#conversejs a:not([href]):not([tabindex]).fas:hover,#conversejs a:visited.fa:hover,#conversejs a:visited.far:hover,#conversejs a:visited.fas:hover{color:var(--gray-color)}#conversejs svg{border-radius:var(--chatbox-border-radius)}#conversejs .fa,#conversejs .far,#conversejs .fas{color:var(--subdued-color)}#conversejs .fa:hover,#conversejs .far:hover,#conversejs .fas:hover{color:var(--gray-color)}#conversejs q{quotes:"“" "”" "‘" "’"}#conversejs q.reason{display:inline}#conversejs q:before{content:open-quote}#conversejs q:after{content:close-quote}#conversejs .helptext{font-size:var(--font-size-tiny);color:var(--text-color-lighten-15-percent)}#conversejs .selected{color:var(--link-color)!important}#conversejs .circle{border-radius:50%}#conversejs .badge{line-height:1;font-weight:400;font-size:90%}#conversejs .btn{font-weight:400;color:#fff}#conversejs .btn .fa,#conversejs .btn .far,#conversejs .btn .fas{color:#fff;margin-right:.5em}#conversejs .btn .fa.only-icon,#conversejs .btn .far.only-icon,#conversejs .btn .fas.only-icon{margin-right:0}#conversejs .no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}#conversejs .fade-in{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs .visible{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs .hidden{opacity:0!important;display:none!important}#conversejs .fade-out{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}#conversejs .collapsed{height:0!important;overflow:hidden!important;padding:0!important}#conversejs .locked{padding-right:22px}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}#conversejs .spinner{-webkit-animation:spin 2s infinite,linear;animation:spin 2s infinite,linear;width:1em;display:block;text-align:center;padding:.5em 0;font-size:24px}#conversejs .left{float:left}#conversejs .right{float:right}#conversejs .centered{text-align:center;display:block;margin:auto}#conversejs .hor_centered{width:100%;text-align:center;display:block;margin:0 auto;clear:both}#conversejs .error{color:var(--error-color)!important}#conversejs .info{color:var(--info-color)}#conversejs .reg-feedback{font-size:85%;margin-bottom:1em}#conversejs #converse-login .conn-feedback,#conversejs .reg-feedback{display:block;text-align:center;width:100%}#conversejs .avatar{border-radius:var(--avatar-border-radius);border:var(--avatar-border);background-color:var(--avatar-background-color)}#conversejs .avatar-autocomplete{margin-right:.5em;vertical-align:middle}#conversejs .activated{display:block!important}#conversejs .form-help{color:var(--subdued-color);font-size:90%}#conversejs .form-control--labeled{margin-top:.5em}#conversejs .nav-pills .nav-link.active,#conversejs .nav-pills .show>.nav-link{background-color:var(--primary-color)}#conversejs .list-group-item.active{background-color:var(--primary-color);border-color:var(--primary-color-dark)}#conversejs .badge{text-shadow:none;color:#fff}#conversejs .badge-light{color:var(--text-color)}#conversejs .badge-primary,#conversejs .btn-primary,#conversejs .button-primary{background-color:var(--primary-color);border-color:transparent}#conversejs .badge-primary:active,#conversejs .badge-primary:focus,#conversejs .badge-primary:hover,#conversejs .btn-primary:active,#conversejs .btn-primary:focus,#conversejs .btn-primary:hover,#conversejs .button-primary:active,#conversejs .button-primary:focus,#conversejs .button-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}#conversejs .btn--transparent{background:0 0;border:none}#conversejs .btn-circle{width:30px;height:30px;text-align:center;padding:.5em 0;font-size:var(--font-size-small);line-height:1.428571429;border-radius:50%}#conversejs .btn.fa{color:#fff!important}#conversejs .badge-groupchat{background-color:var(--chatroom-badge-color);border-color:transparent}#conversejs .badge-groupchat:hover{background-color:var(--chatroom-badge-hover-color);border-color:transparent}#conversejs .badge-groupchat.active{background-color:var(--chatroom-badge-hover-color)!important;border-color:transparent!important}#conversejs .badge-info,#conversejs .btn-info{background-color:var(--primary-color);border-color:var(--primary-color)}#conversejs .badge-info:hover,#conversejs .btn-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}#conversejs .badge-secondary,#conversejs .btn-secondary,#conversejs .button-cancel{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}#conversejs .badge-secondary:hover,#conversejs .btn-secondary:hover,#conversejs .button-cancel:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}#conversejs .btn-warning{color:#fff;background-color:var(--warning-color);border-color:var(--warning-color)}#conversejs .btn-warning:hover{color:#fff;background-color:var(--warning-color-dark);border-color:var(--warning-color-dark)}#conversejs .btn-danger{color:#fff;background-color:var(--danger-color);border-color:var(--danger-color)!important}#conversejs .btn-danger:hover{background-color:var(--danger-color-dark);border-color:var(--danger-color-dark)}@media screen and (max-width:575px){body .converse-brand{font-size:3.75em}#conversejs:not(.converse-embedded) .chatbox .chat-body{border-radius:var(--chatbox-border-radius)}#conversejs:not(.converse-embedded) .flyout{border-radius:var(--chatbox-border-radius)}}@media screen and (min-width:576px){#conversejs .offset-sm-2{margin-left:16.666667%}}@media screen and (min-width:768px){#conversejs .offset-md-2{margin-left:16.666667%}#conversejs .offset-md-3{margin-left:25%}}@media screen and (min-width:992px){#conversejs .offset-lg-2{margin-left:16.666667%}#conversejs .offset-lg-3{margin-left:25%}}@media screen and (min-width:1200px){#conversejs .offset-xl-2{margin-left:16.666667%}}@media screen and (max-height:450px){#conversejs{left:0}}#conversejs .btn--small{font-size:80%;font-weight:400}#conversejs form .hidden-username{opacity:0!important;height:0!important;padding:0!important}#conversejs form .error-feedback{margin-bottom:.5em}#conversejs form .form-check-label{margin-top:.3rem}#conversejs form .form-control::-moz-placeholder{color:var(--subdued-color)}#conversejs form .form-control:-ms-input-placeholder{color:var(--subdued-color)}#conversejs form .form-control::-ms-input-placeholder{color:var(--subdued-color)}#conversejs form .form-control::placeholder{color:var(--subdued-color)}#conversejs form .clear-input{margin-top:.5em;margin-bottom:.5em;position:absolute;right:.2em;cursor:pointer;font-size:var(--font-size)}#conversejs form#converse-login,#conversejs form#converse-register{background:var(--controlbox-pane-background-color)}#conversejs form#converse-login legend,#conversejs form#converse-register legend{width:100%;text-align:center;margin:0 auto .5em auto}#conversejs form#converse-login fieldset.buttons,#conversejs form#converse-register fieldset.buttons{text-align:center}#conversejs form#converse-login .login-anon,#conversejs form#converse-register .login-anon{height:auto;white-space:normal}#conversejs form#converse-login .save-submit,#conversejs form#converse-register .save-submit{color:var(--save-button-color)}#conversejs form#converse-login .form-url,#conversejs form#converse-register .form-url{display:block;font-weight:400;margin:1em 0}#conversejs form.converse-form{padding:1.2rem}#conversejs form.converse-form legend{color:var(--text-color);font-size:125%;margin-bottom:1.5em}#conversejs form.converse-form input[type=number],#conversejs form.converse-form input[type=password],#conversejs form.converse-form input[type=text],#conversejs form.converse-form select{min-width:50%}#conversejs form.converse-form input[type=button],#conversejs form.converse-form input[type=number],#conversejs form.converse-form input[type=password],#conversejs form.converse-form input[type=submit],#conversejs form.converse-form input[type=text]{padding:.5em}#conversejs form.converse-form input[type=button],#conversejs form.converse-form input[type=submit]{padding-left:1em;padding-right:1em;border:none}#conversejs form.converse-form input.error{border:1px solid var(--error-color);color:var(--text-color)}#conversejs form.converse-form .text-muted{color:var(--subdued-color)!important;font-size:85%;padding-top:.5em}#conversejs form.converse-form .text-muted a{color:var(--link-color-lighten-10-percent)}#conversejs form.converse-form .text-muted.error{color:var(--error-color)}#conversejs form.converse-form--modal{padding-bottom:0}#conversejs form.converse-centered-form{min-height:66%;text-align:center}#conversejs form.converse-centered-form input{max-width:30em;margin:auto}#conversejs .send-button{border-radius:0;bottom:var(--send-button-bottom);color:var(--inverse-link-color)}#conversejs .chatbox .send-button{background-color:var(--chat-head-color)}#conversejs .chatroom .send-button{background-color:var(--chatroom-head-bg-color)}#conversejs .chat-toolbar .toolbar-buttons{width:100%;display:inline-block}#conversejs .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}#conversejs .chat-toolbar .unverified,#conversejs .chat-toolbar .unverified a{color:#cf5300}#conversejs .chat-toolbar .private,#conversejs .chat-toolbar .private a{color:#4b7003}#conversejs .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}#conversejs .chat-toolbar li:hover{cursor:pointer}#conversejs .chat-toolbar li .toolbar-menu{background-color:#fff;bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}#conversejs .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}#conversejs .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}#conversejs .chat-toolbar li .toolbar-menu a{color:var(--link-color)}#conversejs .chat-toolbar li.toggle-otr ul{z-index:99}#conversejs .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}#conversejs .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}#conversejs .chat-toolbar li.toggle-otr ul li a{display:block}#conversejs converse-chat-toolbar{background-color:#fff;box-sizing:border-box;display:flex;justify-content:space-between;margin:0;width:100%}#conversejs converse-chat-toolbar .fa,#conversejs converse-chat-toolbar .fa:hover,#conversejs converse-chat-toolbar .far,#conversejs converse-chat-toolbar .far:hover,#conversejs converse-chat-toolbar .fas,#conversejs converse-chat-toolbar .fas:hover{color:var(--chat-head-color);font-size:var(--font-size-large)}#conversejs converse-chat-toolbar .fa svg,#conversejs converse-chat-toolbar .fa:hover svg,#conversejs converse-chat-toolbar .far svg,#conversejs converse-chat-toolbar .far:hover svg,#conversejs converse-chat-toolbar .fas svg,#conversejs converse-chat-toolbar .fas:hover svg{fill:var(--chat-head-color)}#conversejs converse-chat-toolbar .unencrypted,#conversejs converse-chat-toolbar .unencrypted a{color:var(--text-color)}#conversejs converse-chat-toolbar .unencrypted .toolbar-menu a,#conversejs converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}#conversejs converse-chat-toolbar button{margin-top:.4em;border:1px transparent solid;background-color:transparent}#conversejs converse-chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}#conversejs .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--chat-toolbar-btn-color);background-color:#fff}#conversejs .chatbox converse-chat-toolbar .fa,#conversejs .chatbox converse-chat-toolbar .fa:hover,#conversejs .chatbox converse-chat-toolbar .far,#conversejs .chatbox converse-chat-toolbar .far:hover,#conversejs .chatbox converse-chat-toolbar .fas,#conversejs .chatbox converse-chat-toolbar .fas:hover{color:var(--chat-toolbar-btn-color)}#conversejs .chatbox converse-chat-toolbar button:focus{outline-color:var(--chat-toolbar-btn-color)!important}#conversejs .chatbox converse-chat-toolbar button:disabled .fa{color:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover{color:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatbox converse-chat-toolbar button:disabled .fa svg,#conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--muc-toolbar-btn-color)}#conversejs .chatroom converse-chat-toolbar .fa,#conversejs .chatroom converse-chat-toolbar .fa:hover,#conversejs .chatroom converse-chat-toolbar .far,#conversejs .chatroom converse-chat-toolbar .far:hover,#conversejs .chatroom converse-chat-toolbar .fas,#conversejs .chatroom converse-chat-toolbar .fas:hover{color:var(--muc-toolbar-btn-color);font-size:var(--font-size-large)}#conversejs .chatroom converse-chat-toolbar .fa svg,#conversejs .chatroom converse-chat-toolbar .fa:hover svg,#conversejs .chatroom converse-chat-toolbar .far svg,#conversejs .chatroom converse-chat-toolbar .far:hover svg,#conversejs .chatroom converse-chat-toolbar .fas svg,#conversejs .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--muc-toolbar-btn-color)}#conversejs .chatroom converse-chat-toolbar button:focus{outline-color:var(--muc-toolbar-btn-color)!important}#conversejs .chatroom converse-chat-toolbar button:disabled .fa{color:var(--muc-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover{color:var(--muc-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar button:disabled .fa svg,#conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--muc-toolbar-btn-disabled-color)}#conversejs.converse-overlayed .chat-toolbar li .toolbar-menu{min-width:235px}#conversejs.converse-overlayed .chatroom .chat-toolbar li .toolbar-menu{min-width:280px}#conversejs .chatbox-navback{display:none}#conversejs .flyout{position:absolute}@media screen and (max-height:450px){#conversejs .flyout{border-radius:0}}@media screen and (max-width:480px){#conversejs .flyout{border-radius:0}}@media screen and (max-height:450px){#conversejs .flyout{bottom:0}}@media screen and (max-width:480px){#conversejs .flyout{bottom:0}}#conversejs .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}#conversejs .chatbox-btn:active{position:relative;top:1px}#conversejs .chat-head{display:flex;flex-direction:row;color:#fff;font-size:100%;margin:0;padding:0;position:relative}#conversejs .chat-head.chat-head-chatbox{background-color:var(--chat-head-color)}#conversejs .chat-head .avatar{margin-right:.5em}#conversejs .chat-head .chat-head__desc{color:var(--chat-head-color-lighten-50-percent);font-size:var(--font-size-small);margin:0;overflow:hidden;padding:.5rem 1rem .5rem 1rem;text-overflow:ellipsis;width:100%;max-height:5em}#conversejs .chat-head .chatbox-title{padding:.75rem 1rem 0 1rem;display:flex;flex-direction:row;justify-content:space-between;width:100%}#conversejs .chat-head .chatbox-title--no-desc{padding:.75rem 1rem}#conversejs .chat-head .chatbox-title--row{display:flex;flex-direction:row;overflow:hidden}#conversejs .chat-head .chatbox-title__text{overflow:hidden;text-overflow:ellipsis}#conversejs .chat-head .chatbox-title__buttons{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;padding:0}#conversejs .chat-head a.chatbox-btn.fa,#conversejs .chat-head a.chatbox-btn.far,#conversejs .chat-head a.chatbox-btn.fas,#conversejs .chat-head a:hover.chatbox-btn.fa,#conversejs .chat-head a:hover.chatbox-btn.far,#conversejs .chat-head a:hover.chatbox-btn.fas,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.far,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas,#conversejs .chat-head a:visited.chatbox-btn.fa,#conversejs .chat-head a:visited.chatbox-btn.far,#conversejs .chat-head a:visited.chatbox-btn.fas{color:#fff}#conversejs .chat-head a.chatbox-btn.fa.button-on:before,#conversejs .chat-head a.chatbox-btn.far.button-on:before,#conversejs .chat-head a.chatbox-btn.fas.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.fa.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.far.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.fas.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.fa.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.far.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.fas.button-on:before{padding:.2em;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}#conversejs .chat-head .chatbox-btn{color:#fff}#conversejs .chat-head .chatbox-btn.fa,#conversejs .chat-head .chatbox-btn.far,#conversejs .chat-head .chatbox-btn.fas{color:#fff}#conversejs .chat-head .chatbox-btn:active{position:relative;top:1px}#conversejs .chat-head .chatbox-btn.button-on:before{border-radius:5%;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}#conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){#conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){#conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}#conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){#conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){#conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}#conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}#conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}#conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-head-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){#conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){#conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}#conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}#conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}#conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}#conversejs .chatbox .chat-content converse-chat-content{display:flex;flex-direction:column;height:100%;justify-content:space-between}#conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}#conversejs .chatbox .chat-content .chat-content__help{border-top:1px solid var(--chat-head-color);max-height:100%}#conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}#conversejs .chatbox .chat-content .chat-content__help converse-chat-help{height:100%;overflow-y:auto;display:block;padding:.5em 0}#conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}#conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}#conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}#conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}#conversejs .chatbox .chat-content video{width:100%}#conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}#conversejs .chatbox .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}#conversejs .chatbox .dropdown{background-color:var(--light-background-color)}#conversejs .chatbox .dropdown dd{margin:0;padding:0;position:relative}#conversejs .chatbox .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){#conversejs .chatbox .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){#conversejs .chatbox .sendXMPPMessage{width:100%}}#conversejs .chatbox .sendXMPPMessage .suggestion-box__results:after{display:none}#conversejs .chatbox .sendXMPPMessage .spoiler-hint{width:100%}#conversejs .chatbox .sendXMPPMessage .chat-textarea:active,#conversejs .chatbox .sendXMPPMessage .chat-textarea:focus,#conversejs .chatbox .sendXMPPMessage input:active,#conversejs .chatbox .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}#conversejs .chatbox .sendXMPPMessage .chat-textarea.correcting,#conversejs .chatbox .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}#conversejs .chatbox .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}#conversejs .chatbox .sendXMPPMessage .chat-textarea.spoiler{height:42px}#conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}#conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}#conversejs .chatbox .dragresize-left,#conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}#conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}#conversejs.converse-embedded .controlbox-head,#conversejs.converse-overlayed .controlbox-head{padding:.5em}#conversejs.converse-embedded .chat-head,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}#conversejs.converse-embedded .chatbox,#conversejs.converse-overlayed .chatbox{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}#conversejs.converse-embedded .chatbox .box-flyout,#conversejs.converse-overlayed .chatbox .box-flyout{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius)}@media screen and (max-height:450px){#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width:480px){#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}#conversejs.converse-overlayed .flyout{bottom:var(--overlayed-chatbox-hover-height)}#conversejs.converse-overlayed .box-flyout{height:var(--overlayed-chat-height);min-height:calc(var(--overlayed-chat-height)/ 2)}#conversejs.converse-overlayed .chat-head{min-height:var(--overlayed-chat-head-height)}#conversejs.converse-overlayed .minimized-chats-flyout .chat-head{cursor:default}#conversejs.converse-overlayed .chat-textarea{max-height:var(--overlayed-max-chat-textarea-height)}#conversejs.converse-overlayed .chatbox .chat-body{height:calc(100% - var(--overlayed-chat-head-height))}#conversejs.converse-overlayed .chatbox .chatbox-title{padding:.5rem .75rem 0 .75rem}#conversejs.converse-overlayed .chatbox .chatbox-title--no-desc{padding:.5rem .75rem}#conversejs.converse-overlayed .chatbox converse-dropdown .btn--standalone{padding:0 .2em;margin:0 0 0 .5em}@media (max-width:767.98px){#conversejs.converse-overlayed>.row{flex-direction:column}#conversejs.converse-overlayed>.row.no-gutters{margin:-1em}}#conversejs.converse-embedded .flyout,#conversejs.converse-fullscreen .flyout{border-radius:0;border:none;bottom:0}#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{margin:0;position:relative;width:100%;padding-right:15px;padding-left:15px}#conversejs.converse-embedded .chatbox .box-flyout,#conversejs.converse-fullscreen .chatbox .box-flyout{box-shadow:none;overflow:hidden}@media (min-width:768px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 66.66667%;max-width:66.66667%}}@media (min-width:992px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 75%;max-width:75%}}@media (min-width:1200px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 83.33333%;max-width:83.33333%}}#conversejs.converse-embedded.converse-singleton .flyout,#conversejs.converse-fullscreen.converse-singleton .flyout{border:none!important}#conversejs.converse-embedded.converse-singleton .chat-head,#conversejs.converse-fullscreen.converse-singleton .chat-head{padding:.5em}#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{margin:0;position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:768px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media (min-width:992px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media (min-width:1200px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}#conversejs.converse-embedded .chat-head{font-size:var(--font-size-huge)}#conversejs.converse-embedded .converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%;margin-left:-15px}#conversejs.converse-embedded .chatbox .box-flyout{bottom:0;height:100%;min-width:auto;width:100%}#conversejs.converse-embedded .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}#conversejs.converse-fullscreen .chatbox-btn{font-size:var(--fullpage-chatbox-button-size);margin:0 .3em}#conversejs.converse-fullscreen .chat-head{font-size:var(--font-size-huge)}#conversejs.converse-fullscreen .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}#conversejs.converse-fullscreen .chatbox .box-flyout{box-shadow:none;height:var(--fullpage-chat-height);min-height:calc(var(--fullpage-chat-height)/ 2);width:var(--fullpage-chat-width);overflow:hidden}#conversejs.converse-fullscreen .chatbox .chat-body{height:inherit;overflow:hidden;background-color:var(--chat-head-color)}#conversejs.converse-fullscreen .chatbox .chat-title{font-size:var(--font-size-huge);line-height:var(--line-height-huge)}#conversejs.converse-fullscreen .chatbox .sendXMPPMessage ul{width:100%}@media (max-width:767.98px){#conversejs:not(.converse-embedded)>.row{flex-direction:row-reverse}#conversejs:not(.converse-embedded) #converse-login-panel .converse-form{padding:3em 2em 3em}#conversejs:not(.converse-embedded) .chatbox{width:calc(100% - 50px)}#conversejs:not(.converse-embedded) .chatbox .row .box-flyout{left:50px;bottom:0;height:var(--fullpage-chat-height);box-shadow:none}#conversejs.converse-fullscreen .chatbox .box-flyout .chatbox-navback,#conversejs.converse-mobile .chatbox .box-flyout .chatbox-navback,#conversejs.converse-overlayed .chatbox .box-flyout .chatbox-navback{display:flex;padding-right:1em}#conversejs.converse-fullscreen .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before,#conversejs.converse-mobile .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before,#conversejs.converse-overlayed .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before{color:#fff}}#conversejs .oauth-providers{text-align:center}#conversejs .oauth-providers .oauth-provider{margin:1em 0}#conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}#conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}#conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}#conversejs .set-xmpp-status .chat-status--online,#conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}#conversejs .set-xmpp-status .chat-status--busy,#conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}#conversejs .set-xmpp-status .chat-status--away,#conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}#conversejs .set-xmpp-status .fa-times-circle,#conversejs .set-xmpp-status .far.fa-circle,#conversejs .xmpp-status .fa-times-circle,#conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}#conversejs .set-xmpp-status .chat-status{padding-right:.5em}#conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}#conversejs .room-info li.room-info{display:block;margin-left:5px}#conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}#conversejs div.room-info{padding:.3em 0;clear:left;width:100%}#conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}#conversejs #controlbox converse-brand-heading{width:100%;display:block}#conversejs #controlbox .brand-name-wrapper{font-size:200%}#conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}#conversejs #controlbox .open-rooms-toggle,#conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}#conversejs #controlbox .open-rooms-toggle .fa:hover,#conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}#conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}#conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}#conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}#conversejs #controlbox form.search-xmpp-contact input{width:8em}#conversejs #controlbox .msgs-indicator{margin-right:.5em}#conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}#conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}#conversejs #controlbox #converse-register .title{font-weight:700}#conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}#conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}#conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}#conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}#conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}#conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}#conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}#conversejs #controlbox #converse-register .input-group input[name=username],#conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}#conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}#conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}#conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}#conversejs #controlbox .conn-feedback.error{color:var(--error-color)}#conversejs #controlbox .conn-feedback p{padding-bottom:1em}#conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}#conversejs #controlbox #converse-login-panel,#conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}#conversejs #controlbox #converse-login-panel{flex-direction:row}#conversejs #controlbox .toggle-register-login{font-weight:700}#conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}#conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}#conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}#conversejs #controlbox #chatrooms{padding:0}#conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}#conversejs #controlbox #chatrooms .add-chatroom input[type=button],#conversejs #controlbox #chatrooms .add-chatroom input[type=submit],#conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}#conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}#conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}#conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}#conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}#conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}#conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}#conversejs #controlbox .dropdown a{width:143px;display:inline-block}#conversejs #controlbox .dropdown li{list-style:none;padding-left:0}#conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}#conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}#conversejs #controlbox .dropdown dd.search-xmpp{height:0}#conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}#conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}#conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}#conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}#conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}#conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}#conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}#conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}#conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}#conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}#conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}#conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}#conversejs #controlbox .controlbox-pane .switch-form p{margin-top:.5em}#conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}#conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}#conversejs #controlbox .add-xmpp-contact{padding:1em .5em}#conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}#conversejs #controlbox .add-xmpp-contact button{width:100%}#conversejs.converse-overlayed .toggle-controlbox{order:-1;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}#conversejs.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}#conversejs.converse-overlayed #controlbox{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}#conversejs.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}#conversejs.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}#conversejs.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}#conversejs.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}#conversejs.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}#conversejs.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}#conversejs.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}#conversejs.converse-overlayed #controlbox #converse-login,#conversejs.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}#conversejs.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}#conversejs.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}#conversejs.converse-embedded .toggle-controlbox,#conversejs.converse-fullscreen .toggle-controlbox{display:none}#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media (min-width:768px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 33.33333%;max-width:33.33333%}}@media (min-width:992px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media (min-width:1200px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 16.66667%;max-width:16.66667%}}#conversejs.converse-embedded #controlbox.logged-out,#conversejs.converse-fullscreen #controlbox.logged-out,#conversejs.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}#conversejs.converse-embedded #controlbox .controlbox-pane,#conversejs.converse-fullscreen #controlbox .controlbox-pane,#conversejs.converse-mobile #controlbox .controlbox-pane{border-radius:0}#conversejs.converse-embedded #controlbox .flyout,#conversejs.converse-fullscreen #controlbox .flyout,#conversejs.converse-mobile #controlbox .flyout{border-radius:0}#conversejs.converse-embedded #controlbox #converse-login-panel,#conversejs.converse-fullscreen #controlbox #converse-login-panel,#conversejs.converse-mobile #controlbox #converse-login-panel{border-radius:0}#conversejs.converse-embedded #controlbox #converse-login-panel .converse-form,#conversejs.converse-fullscreen #controlbox #converse-login-panel .converse-form,#conversejs.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}#conversejs.converse-embedded #controlbox .toggle-register-login,#conversejs.converse-fullscreen #controlbox .toggle-register-login,#conversejs.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}#conversejs.converse-embedded #controlbox converse-brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}#conversejs.converse-embedded #controlbox converse-brand-heading .brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-heading{font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}#conversejs.converse-embedded #controlbox converse-brand-heading .brand-subtitle,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-subtitle,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){#conversejs.converse-embedded #controlbox converse-brand-heading .brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-heading{font-size:300%}}#conversejs.converse-embedded #controlbox.logged-out,#conversejs.converse-fullscreen #controlbox.logged-out,#conversejs.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}#conversejs.converse-embedded #controlbox.logged-out .box-flyout,#conversejs.converse-fullscreen #controlbox.logged-out .box-flyout,#conversejs.converse-mobile #controlbox.logged-out .box-flyout{width:100%}#conversejs.converse-embedded #controlbox .box-flyout,#conversejs.converse-fullscreen #controlbox .box-flyout,#conversejs.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}#conversejs.converse-embedded #controlbox .box-flyout .controlbox-head,#conversejs.converse-fullscreen #controlbox .box-flyout .controlbox-head,#conversejs.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}@media (min-width:576px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}}@media (min-width:768px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}}@media (min-width:992px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}#conversejs.converse-embedded #controlbox #converse-login .instructions,#conversejs.converse-embedded #controlbox #converse-login .title,#conversejs.converse-embedded #controlbox #converse-register .instructions,#conversejs.converse-embedded #controlbox #converse-register .title,#conversejs.converse-fullscreen #controlbox #converse-login .instructions,#conversejs.converse-fullscreen #controlbox #converse-login .title,#conversejs.converse-fullscreen #controlbox #converse-register .instructions,#conversejs.converse-fullscreen #controlbox #converse-register .title,#conversejs.converse-mobile #controlbox #converse-login .instructions,#conversejs.converse-mobile #controlbox #converse-login .title,#conversejs.converse-mobile #controlbox #converse-register .instructions,#conversejs.converse-mobile #controlbox #converse-register .title{margin:1em 0}#conversejs.converse-embedded #controlbox #converse-login input[type=button],#conversejs.converse-embedded #controlbox #converse-login input[type=submit],#conversejs.converse-embedded #controlbox #converse-register input[type=button],#conversejs.converse-embedded #controlbox #converse-register input[type=submit],#conversejs.converse-fullscreen #controlbox #converse-login input[type=button],#conversejs.converse-fullscreen #controlbox #converse-login input[type=submit],#conversejs.converse-fullscreen #controlbox #converse-register input[type=button],#conversejs.converse-fullscreen #controlbox #converse-register input[type=submit],#conversejs.converse-mobile #controlbox #converse-login input[type=button],#conversejs.converse-mobile #controlbox #converse-login input[type=submit],#conversejs.converse-mobile #controlbox #converse-register input[type=button],#conversejs.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}@media (max-width:767.98px){#conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}#conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}#conversejs .converse-chatboxes .converse-chatroom{font-size:14px}#conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}#conversejs .converse-chatboxes #controlbox{width:100vw!important}#conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}#conversejs .converse-chatboxes #controlbox .sidebar{display:block}#conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}#conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}}#conversejs.converse-fullscreen .controlbox-panes{padding-top:1em}#conversejs.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}#conversejs.converse-overlayed .converse-svg-logo{height:1em}#conversejs.converse-overlayed #controlbox #converse-login-panel{height:100%}#conversejs.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}#conversejs #converse-modals .modal{background-color:rgba(0,0,0,.4)}#conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}#conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}#conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}#conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}#conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}#conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}#conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}#conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}#conversejs #converse-modals .affiliation-form,#conversejs #converse-modals .role-form{padding:2em 0 1em 0}#conversejs #converse-modals .set-xmpp-status{margin:1em}#conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}#conversejs #converse-modals #omemo-tabpanel{margin-top:1em}#conversejs #converse-modals .btn{font-weight:400}#conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}#conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}#conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}#conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}#conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}#conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}#conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em}#conversejs #converse-roster{text-align:left;width:100%;position:relative;margin:0;height:var(--roster-height);padding:0;overflow:hidden;height:calc(100% - 70px)}#conversejs #converse-roster #online-count{display:none}#conversejs #converse-roster .search-xmpp ul li.chat-info{padding-left:10px}#conversejs #converse-roster .roster-filter-form{width:100%}#conversejs #converse-roster .roster-filter-form .button-group{padding:.2em}#conversejs #converse-roster .roster-filter-form span{padding:.3em;cursor:pointer;min-width:25px;text-align:center}#conversejs #converse-roster .roster-filter-form .roster-filter{width:100%;margin:.2em;font-size:calc(var(--font-size) - 2px)}#conversejs #converse-roster .roster-filter-form .state-type{font-size:calc(var(--font-size) - 2px);width:100%}#conversejs #converse-roster .roster-contacts{padding:0;margin:0 0 .2em 0;height:100%;overflow-x:hidden;overflow-y:auto}#conversejs #converse-roster .roster-contacts .roster-group{border:none;color:var(--text-color);font-weight:400;text-shadow:0 1px 0 var(--text-shadow-color);margin:.75em 0 .75em 0}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle{font-family:var(--heading-font);display:block;width:100%;padding-top:0;padding-bottom:.3rem}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle,#conversejs #converse-roster .roster-contacts .roster-group .group-toggle .fa{color:var(--chat-head-color-dark)!important}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle .fa:hover,#conversejs #converse-roster .roster-contacts .roster-group .group-toggle:hover{color:var(--chat-head-color-darker)!important}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact{margin:.25em 0}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status{vertical-align:middle;font-size:.6em;margin-right:0;margin-left:-.7em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--offline{margin-right:.8em}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--online{color:var(--chat-status-online)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--busy{color:var(--chat-status-busy)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--away{color:var(--chat-status-away)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--offline{display:none}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .fa-times-circle,#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .far.fa-circle{color:var(--subdued-color)}#conversejs #converse-roster .roster-contacts .roster-group li.requesting-xmpp-contact a{line-height:var(--line-height)}#conversejs #converse-roster .roster-contacts .roster-group li.requesting-xmpp-contact .req-contact-name{padding:0 .2em 0 0}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat{margin:0;padding:0}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat.unread-msgs{font-weight:700}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat.unread-msgs .contact-name{width:70%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .msgs-indicator{color:#fff;background-color:var(--chat-head-color);opacity:1;border-radius:10%;padding:.2em .4em;font-size:var(--font-size-small)}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0;margin:0;max-width:85%;float:none;height:100%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name.unread-msgs{max-width:60%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name.contact-name--offline{margin-left:.7em}#conversejs #converse-roster .roster-contacts .roster-group li.odd{background-color:#dceac5}#conversejs #converse-roster .roster-contacts .roster-group li a,#conversejs #converse-roster .roster-contacts .roster-group li span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#conversejs #converse-roster .roster-contacts .roster-group li .span{display:inline-block}#conversejs #converse-roster .roster-contacts .roster-group li .decline-xmpp-request{margin-left:5px}#conversejs #converse-roster .roster-contacts .roster-group li:hover{background-color:var(controlbox-pane-bg-hover-color)}#conversejs #converse-roster span.pending-contact-name{line-height:var(--line-height);width:100%}#conversejs .list-container{text-align:left;padding:.3em 0}#conversejs .list-container .list-toggle{font-family:var(--heading-font);font-weight:var(--list-toggle-font-weight);display:block;color:var(--list-toggle-color);padding:0 0 .5rem 0}#conversejs .list-container .list-toggle:hover{color:var(--list-toggle-hover-color)}#conversejs .items-list{text-align:left}#conversejs .items-list .list-item{border:none;clear:both;color:var(--text-color);overflow:hidden;padding:.5em 0;text-shadow:0 1px 0 var(--text-shadow-color);word-wrap:break-word;height:2.5em}#conversejs .items-list .list-item.unread-msgs{font-weight:700}#conversejs .items-list .list-item .list-item-link{color:var(--list-item-link-color);margin:auto;font-size:var(--font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;vertical-align:baseline}#conversejs .items-list .list-item .list-item-link:hover{color:var(--list-item-link-hover-color)}#conversejs .items-list .list-item .list-item-badge{opacity:1;border-radius:25%;color:#fff;font-size:var(--font-size-small);line-height:var(--font-size-small)}#conversejs .items-list .list-item .list-item-action{opacity:0;font-size:var(--font-size-tiny);padding:.3em 0 0 0;margin:0 0 0 var(--inline-action-margin);width:2em;height:2em;color:var(--subdued-color)}#conversejs .items-list .list-item .list-item-action:before{font-size:var(--font-size)}#conversejs .items-list .list-item .list-item-action.button-on{color:var(--list-item-link-color)}#conversejs .items-list .list-item .list-item-action.button-on:hover{color:var(--list-item-link-hover-color)}#conversejs .items-list .list-item .list-item-action:hover{color:var(--list-toggle-hover-color);opacity:1}#conversejs .items-list .list-item .list-item-action--visible{opacity:1!important}#conversejs .items-list .list-item.open{background-color:var(--list-item-open-color)}#conversejs .items-list .list-item.open:hover{background-color:var(--list-item-open-hover-color)!important}#conversejs .items-list .list-item.open a{color:#fff}#conversejs .items-list .list-item.open .list-item-link:hover{color:#fff}#conversejs .items-list .list-item.open .list-item-action{color:var(--list-item-action-color)}#conversejs .items-list .list-item.open .list-item-action:hover{color:#fff}#conversejs .items-list .list-item:hover{background-color:var(--controlbox-pane-bg-hover-color)}#conversejs .items-list .list-item:hover .fa,#conversejs .items-list .list-item:hover .far,#conversejs .items-list .list-item:hover .fas{opacity:1}#conversejs .badge--muc,#conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}#conversejs .add-chatroom input[type=button],#conversejs .add-chatroom input[type=submit],#conversejs.converse-embedded .add-chatroom input[type=button],#conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}#conversejs #room-details-modal .features-list,#conversejs.converse-embedded #room-details-modal .features-list{margin-left:1em}#conversejs .chatroom-features,#conversejs.converse-embedded .chatroom-features{width:100%}#conversejs .chatroom-features .features-list,#conversejs.converse-embedded .chatroom-features .features-list{padding-top:0}#conversejs .chatroom-features .features-list .feature,#conversejs.converse-embedded .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#conversejs .chatroom-features .features-list .feature .fa,#conversejs.converse-embedded .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}#conversejs .chat-head-chatroom,#conversejs.converse-embedded .chat-head-chatroom{color:var(--chatroom-head-color);background-color:var(--chatroom-head-bg-color);border-bottom:var(--chatroom-head-border-bottom)}#conversejs .chat-head-chatroom .chat-head__desc,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc{color:var(--chatroom-head-color);display:var(--chatroom-head-description-display)}#conversejs .chat-head-chatroom .chat-head__desc a,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc a{color:var(--chatroom-head-description-link-color)}#conversejs .chat-head-chatroom .chat-head__desc:hover button,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc:hover button{display:inline-block}#conversejs .chat-head-chatroom .chatbox-title .btn--transparent i,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title .btn--transparent i{color:var(--chatroom-head-color)}#conversejs .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked{margin-left:.5em;color:var(--chatroom-head-color)}#conversejs .chat-head-chatroom .chatbox-title__buttons,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__buttons{background-color:var(--chatroom-head-bg-color)}#conversejs .chat-head-chatroom a.chatbox-btn.fa,#conversejs .chat-head-chatroom a:hover.chatbox-btn.fa,#conversejs .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs .chat-head-chatroom a:visited.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:hover.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:visited.chatbox-btn.fa{color:var(--chat-head-text-color)}#conversejs .chat-head-chatroom a.chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before{color:var(--chatroom-head-button-color)}#conversejs .chat-head-chatroom .chatbox-btn.button-on:before,#conversejs.converse-embedded .chat-head-chatroom .chatbox-btn.button-on:before{color:var(--chatroom-head-button-color)}#conversejs .chat-head-chatroom .chatbox-title__text,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__text{display:var(--heading-display);font-weight:var(--chatroom-head-title-font-weight);padding-right:var(--chatroom-head-title-padding-right);margin:auto 0}#conversejs .chat-head-chatroom .chatbox-title__text .chatroom-jid,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__text .chatroom-jid{font-size:var(--font-size-small)}#conversejs .empty-history-feedback,#conversejs.converse-embedded .empty-history-feedback{position:relative}#conversejs .empty-history-feedback span,#conversejs.converse-embedded .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--mobile-chat-width)}}#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{overflow-y:hidden;background-color:var(--chatroom-head-bg-color);width:100%}@media screen and (max-height:450px){#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}#conversejs .chatroom .box-flyout .chatroom-body,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;width:100%;overflow:hidden}#conversejs .chatroom .box-flyout .chatroom-body .row,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .row{flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .chat-topic,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-info,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}#conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}#conversejs .chatroom .box-flyout .chatroom-body .disconnect-container,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}#conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}#conversejs .chatroom .box-flyout .chatroom-body .chat-area,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help{border-top:1px solid var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants{display:flex;flex-direction:column;justify-content:space-between;overflow-x:hidden;overflow-y:hidden;vertical-align:top;background-color:var(--occupants-background-color);border-left:var(--occupants-border-left);padding:.5em;max-width:75%;min-width:20%;flex:0 0 25%}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header{display:flex;flex-direction:column}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .hide-occupants,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header .hide-occupants{align-self:flex-end;cursor:pointer;font-size:var(--font-size-small)}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header--title,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header--title{margin-top:.5em;margin-bottom:.5em;display:flex;flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .occupants .fa-user-plus,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .fa-user-plus{margin-right:.25em}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-family:var(--heading-font);color:var(--groupchats-header-color-dark);padding-left:0;margin-right:1em}#conversejs .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul{padding:0}#conversejs .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul li,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul li{padding:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul{padding:0;margin-bottom:.5em;overflow-x:hidden;overflow-y:auto;list-style:none}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list{overflow-y:auto;flex-basis:0;flex-grow:1}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li{cursor:default;display:block;font-size:var(--font-size-small);overflow:hidden;padding:.25em .25em .25em 0;text-overflow:ellipsis}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li .fa,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li .fa{margin-right:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.feature,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.feature{font-size:var(--font-size-tiny)}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant{cursor:pointer}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge{display:flex;justify-content:space-between;flex-wrap:wrap}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges{display:flex;justify-content:flex-end;flex-wrap:wrap;flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges span,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges span{margin-right:.25rem}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant div.row.no-gutters,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant div.row.no-gutters{flex-wrap:nowrap;min-height:1.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .badge{margin-bottom:.125rem}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status{display:inline-block;margin:0 .5em .125em 0;width:.5em;height:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-chat,#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-online,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-chat,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-online{background-color:#1a9707}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-dnd,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-dnd{background-color:red}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-away,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-away{background-color:#ff8c00}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-xa,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-xa{background-color:orange}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-offline,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-offline{background-color:#a9a9a9}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container .validation-message,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container .validation-message{font-size:90%;color:var(--error-color)}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=button],#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=submit],#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=button],#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=submit]{margin:0 .5em}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container .button-primary,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container .button-primary{background-color:var(--chatroom-head-button-color)}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}#conversejs .chatroom .muc-bottom-panel,#conversejs.converse-embedded .chatroom .muc-bottom-panel{height:3em;padding:.5em;text-align:center;font-size:var(--font-size-small);background-color:var(--chatroom-head-bg-color);color:#fff}#conversejs .chatroom .muc-bottom-panel.muc-bottom-panel--nickname,#conversejs.converse-embedded .chatroom .muc-bottom-panel.muc-bottom-panel--nickname{padding:0;height:16em}#conversejs .chatroom .muc-bottom-panel.muc-bottom-panel--nickname .chatroom-form-container .chatroom-form,#conversejs.converse-embedded .chatroom .muc-bottom-panel.muc-bottom-panel--nickname .chatroom-form-container .chatroom-form{padding-top:2em;padding-bottom:0}#conversejs .chatroom .sendXMPPMessage .suggestion-box__results--above,#conversejs.converse-embedded .chatroom .sendXMPPMessage .suggestion-box__results--above{bottom:4.5em}#conversejs .chatroom .sendXMPPMessage .chat-textarea:active,#conversejs .chatroom .sendXMPPMessage .chat-textarea:focus,#conversejs .chatroom .sendXMPPMessage input:active,#conversejs .chatroom .sendXMPPMessage input:focus,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea:active,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea:focus,#conversejs.converse-embedded .chatroom .sendXMPPMessage input:active,#conversejs.converse-embedded .chatroom .sendXMPPMessage input:focus{outline-color:var(--chatroom-head-bg-color)}#conversejs .chatroom .sendXMPPMessage .chat-textarea.correcting,#conversejs .chatroom .sendXMPPMessage input.correcting,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea.correcting,#conversejs.converse-embedded .chatroom .sendXMPPMessage input.correcting{background-color:var(--chatroom-correcting-color)}#conversejs .chatroom .sendXMPPMessage .chat-textarea,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea{border-bottom-right-radius:0}#conversejs .chatroom .room-invite .invited-contact,#conversejs.converse-embedded .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#conversejs.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}#conversejs.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}#conversejs.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.33333%;max-width:58.33333%}#conversejs.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.66667%;max-width:41.66667%}#conversejs.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}#conversejs.converse-embedded .chatroom .box-flyout,#conversejs.converse-fullscreen .chatroom .box-flyout,#conversejs.converse-mobile .chatroom .box-flyout{width:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}#conversejs.converse-embedded .chatroom .room-invite span .invited-contact,#conversejs.converse-fullscreen .chatroom .room-invite span .invited-contact,#conversejs.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}#conversejs.converse-embedded .chatroom{margin:0;width:100%}#conversejs.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}#conversejs.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}#conversejs.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container{height:100%;position:relative}#conversejs.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em}#conversejs .chat-head-headline{background-color:var(--headline-head-color)}#conversejs .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}#conversejs .chatbox.headlines .chat-body{background-color:var(--headline-head-color);border-radius:var(--chatbox-border-radius)}#conversejs .chatbox.headlines .chat-body .chat-message{color:var(--headline-message-color)}#conversejs .chatbox.headlines .chat-content{height:100%}#conversejs.converse-fullscreen .chatbox.headlines .box-flyout{background-color:var(--headline-head-color)}#conversejs.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}#conversejs.converse-fullscreen .chatbox.headlines .flyout{border:var(--flyout-padding) solid var(--headline-head-color);border-top:.8em solid var(--headline-head-color)}#conversejs .older-msg time{font-weight:700}#conversejs .message .mention{font-weight:700}#conversejs .message .mention--self{font-weight:400}#conversejs .message.date-separator,#conversejs .message.separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}#conversejs .message.date-separator .separator,#conversejs .message.separator .separator{border-top:0;border-bottom:var(--chat-separator-border-bottom);margin:0 1em;position:relative;top:1em;z-index:5}#conversejs .message.date-separator .separator-text,#conversejs .message.separator .separator-text{background:#fff;bottom:1px;color:var(--separator-text-color);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5}#conversejs .message.chat-msg--retracted .chat-msg__message{color:var(--subdued-color)}#conversejs .message.chat-info{color:var(--chat-head-color);font-size:var(--message-font-size);line-height:var(--line-height-small);font-size:90%;padding:.17rem 1rem}#conversejs .message.chat-info.badge{color:var(--chat-head-text-color)}#conversejs .message.chat-info.chat-state-notification{font-style:italic}#conversejs .message.chat-info.chat-event{clear:left;font-style:italic}#conversejs .message.chat-info.chat-error{color:var(--error-color);font-weight:700}#conversejs .message.chat-info .q{font-style:italic}#conversejs .message .chat-image{height:auto;width:auto;max-height:15em;max-width:100%}#conversejs .message.chat-msg--action{font-style:italic}#conversejs .message.chat-msg--action .chat-msg__author{padding-right:.2em}#conversejs .message.chat-msg{display:inline-flex;width:100%;flex-direction:row;padding:.125rem 1rem}#conversejs .message.chat-msg.onload{animation:colorchange-chatmessage 1s;-webkit-animation:colorchange-chatmessage 1s}#conversejs .message.chat-msg:hover{background-color:var(--list-item-hover-color)}#conversejs .message.chat-msg.correcting.groupchat{background-color:var(--chatroom-correcting-color)}#conversejs .message.chat-msg.correcting:not(.groupchat){background-color:var(--chat-correcting-color)}#conversejs .message.chat-msg .spoiler{margin-top:.5em}#conversejs .message.chat-msg .spoiler-hint{margin-bottom:.5em}#conversejs .message.chat-msg .spoiler-toggle{color:#fff}#conversejs .message.chat-msg .spoiler-toggle i{color:#fff;padding-right:.5em}#conversejs .message.chat-msg .spoiler-toggle:before{padding-right:.25em;whitespace:nowrap}#conversejs .message.chat-msg .chat-msg__content{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-left:.5rem;width:calc(100% - var(--message-avatar-width))}#conversejs .message.chat-msg .chat-msg__content:hover .btn--standalone{opacity:1}#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text{color:var(--subdued-color)}#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text,#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text{color:var(--message-text-color)}#conversejs .message.chat-msg .chat-msg__content--action{width:100%;margin-left:0}#conversejs .message.chat-msg .chat-msg__body{display:flex;flex-direction:row;justify-content:space-between}#conversejs .message.chat-msg converse-chat-message-body{display:inline}#conversejs .message.chat-msg .chat-msg__message{line-height:1.5em;display:inline-flex;flex-direction:column;width:100%;overflow-wrap:break-word}#conversejs .message.chat-msg .chat-msg__edit-modal{cursor:pointer;padding-right:.5em}#conversejs .message.chat-msg.headline .chat-msg__body{margin-left:0}#conversejs .message.chat-msg .chat-msg__subject{font-weight:700;clear:right}#conversejs .message.chat-msg .chat-msg__text{color:var(--message-text-color);padding:0;white-space:pre-wrap;word-wrap:break-word;word-break:break-word}#conversejs .message.chat-msg .chat-msg__text a{word-wrap:break-word;word-break:break-all;display:inline}#conversejs .message.chat-msg .chat-msg__text a.chat-image__link{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}#conversejs .message.chat-msg .chat-msg__text img.emoji{height:1.5em;width:1.5em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs .message.chat-msg .chat-msg__text .emojione{margin-bottom:-6px}#conversejs .message.chat-msg .chat-msg__text--larger{font-size:1.6em;padding-top:.25em;padding-bottom:.25em}#conversejs .message.chat-msg .chat-msg__error{color:var(--error-color)}#conversejs .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}#conversejs .message.chat-msg .chat-msg__media a{word-wrap:break-word}#conversejs .message.chat-msg .chat-msg__media audio{width:100%}#conversejs .message.chat-msg converse-message-actions{margin-left:.5em}#conversejs .message.chat-msg .chat-msg__actions .dropdown-menu{min-width:5rem}#conversejs .message.chat-msg .chat-msg__actions i{color:var(--text-color-lighten-15-percent);font-size:70%}#conversejs .message.chat-msg .chat-msg__actions button{border:none;background:0 0;color:var(--text-color-lighten-15-percent);padding:0 .25em}#conversejs .message.chat-msg .chat-msg__actions .btn--standalone{opacity:0;margin-top:-.2em}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action{width:100%;padding:.5em 1em;text-align:left;white-space:nowrap}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action converse-icon{margin-right:.25em}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action:hover{color:var(--text-color);background-color:var(--list-item-hover-color)}#conversejs .message.chat-msg .chat-msg__avatar{margin-top:.5em;vertical-align:middle;height:var(--message-avatar-height);width:var(--message-avatar-width);min-height:var(--message-avatar-height);min-width:var(--message-avatar-width)}#conversejs .message.chat-msg .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}#conversejs .message.chat-msg .chat-msg__heading{width:100%;margin-top:.5em;padding-right:.25rem;padding-bottom:.25rem}#conversejs .message.chat-msg .chat-msg__heading .badge{margin-left:.5em;font-family:var(--normal_font)}#conversejs .message.chat-msg .chat-msg__heading .chat-msg__time{padding-left:.25em;padding-right:.25em;color:var(--text-color-lighten-15-percent)}#conversejs .message.chat-msg.chat-msg--action .chat-msg__message{flex-direction:row}#conversejs .message.chat-msg.chat-msg--action .chat-msg__text{width:auto}#conversejs .message.chat-msg.chat-msg--action .chat-msg__heading{margin-top:0;padding-bottom:0;width:auto}#conversejs .message.chat-msg.chat-msg--action .chat-msg__heading .fa{margin-left:.5em}#conversejs .message.chat-msg.chat-msg--action .chat-msg__author{font-size:var(--message-font-size)}#conversejs .message.chat-msg.chat-msg--action .chat-msg__time{margin-left:0}#conversejs .message.chat-msg.chat-msg--followup .chat-msg__avatar,#conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading{display:none}#conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:2.75rem;width:100%}#conversejs .message.chat-msg .chat-msg__receipt{margin-left:.5em;margin-right:.5em;color:var(--message-receipt-color)}#conversejs .chatroom-body .message.onload{animation:colorchange-chatmessage-muc 1s;-webkit-animation:colorchange-chatmessage-muc 1s}#conversejs .chatroom-body .message .separator{border-top:0;border-bottom:var(--chatroom-separator-border-bottom)}#conversejs.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content{margin-left:0}@media screen and (max-width:767px){#conversejs:not(.converse-embedded) .message.chat-msg .chat-msg__author{white-space:normal}}#conversejs.converse-overlayed #minimized-chats{order:100;width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}#conversejs.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}#conversejs.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}#conversejs.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}#conversejs.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}#conversejs.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}#conversejs.converse-overlayed #minimized-chats .chat-head-message-count-hidden,#conversejs.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none}#conversejs #controlbox .bookmarks-toggle,#conversejs #controlbox .bookmarks-toggle .fa{color:var(--groupchats-header-color)!important}#conversejs #controlbox .bookmarks-toggle .fa:hover,#conversejs #controlbox .bookmarks-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.fullscreen #controlbox #chatrooms .bookmarks-list dl.rooms-list.bookmarks dd.available-chatroom a.open-room{width:80%}#conversejs [hidden]{display:none}#conversejs .visually-hidden{position:absolute;clip:rect(0,0,0,0)}#conversejs .form-group .suggestion-box{width:100%}#conversejs .suggestion-box{position:relative}#conversejs .suggestion-box mark{background:var(--completion-light-color)}#conversejs .suggestion-box>input{display:block}#conversejs .suggestion-box .suggestion-box__results,#conversejs .suggestion-box>ul{position:absolute;left:0;right:0;z-index:2;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:rgba(255,255,255,.9);background:linear-gradient(to bottom right,#fff,rgba(255,255,255,.9));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);text-shadow:none}#conversejs .suggestion-box .suggestion-box__results:before,#conversejs .suggestion-box>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}#conversejs .suggestion-box .suggestion-box__results>li,#conversejs .suggestion-box>ul>li{text-overflow:ellipsis;overflow-x:hidden;position:relative;cursor:pointer;padding:1em}#conversejs .suggestion-box .suggestion-box__results--below{top:2em}#conversejs .suggestion-box .suggestion-box__results--above{bottom:4.5em}#conversejs .suggestion-box .suggestion-box__results--above:before{display:none}#conversejs .suggestion-box .suggestion-box__results--above:after{z-index:-1;content:"";position:absolute;bottom:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-left:0;border-top:0;transform:rotate(45deg)}#conversejs .suggestion-box>ul:empty,#conversejs .suggestion-box>ul[hidden]{display:none}@supports (transform:scale(0)){#conversejs .suggestion-box>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}#conversejs .suggestion-box>ul:empty,#conversejs .suggestion-box>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}#conversejs .suggestion-box>ul>li[aria-selected=true]{background:var(--completion-dark-color);color:var(--inverse-link-color)}#conversejs .suggestion-box li:hover mark{background:var(--completion-light-color);color:var(--inverse-link-color)}#conversejs .suggestion-box li[aria-selected=true] mark{background:var(--completion-normal-color);color:inherit}#conversejs.converse-fullscreen .suggestion-box__results--above{bottom:4.5em}#conversejs.converse-overlayed .suggestion-box__results--above{bottom:3.5em}#conversejs .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}#conversejs .chatbox converse-emoji-dropdown{display:inline-block}#conversejs .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}#conversejs .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--chat-head-color);overflow-y:hidden;background:#fff}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--chat-head-color);width:auto;font-size:var(--font-size)}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}#conversejs .chatbox converse-emoji-picker .emoji-picker{background-color:#fff;padding:.5em 0 0 .5em}#conversejs .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}#conversejs .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header{display:flex;flex-direction:column;padding:.1em 0;background-color:var(--chat-head-color)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:#fff;border:1px var(--chat-head-color) solid;border-bottom:none}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}#conversejs .chatroom converse-emoji-picker{background-color:var(--chatroom-head-bg-color);background:#fff}#conversejs .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}#conversejs.converse-overlayed converse-emoji-dropdown .dropdown-menu{min-width:18em}#conversejs.converse-overlayed .chatbox .emoji-picker__header .emoji-category img{height:var(--font-size)!important;width:var(--font-size)!important}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji a{font-size:var(--font-size);line-height:calc(var(--font-size) * 1.5);padding:0;height:calc(var(--font-size) * 1.5);width:calc(var(--font-size) * 1.5)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji img{height:var(--font-size);width:var(--font-size)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-skintone-picker{font-size:var(--font-size-small)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__header .emoji-category{font-size:var(--font-size-small)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__lists{height:7em}#conversejs.converse-embedded converse-emoji-dropdown .dropdown-menu{min-width:20em}#conversejs.converse-fullscreen converse-emoji-dropdown .dropdown-menu{min-width:22em}#conversejs.converse-fullscreen .chatbox converse-emoji-picker .emoji-picker__lists{height:12em}#conversejs .chatbox converse-emoji-picker{max-width:40em}
+ */#conversejs :root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}#conversejs *,#conversejs ::after,#conversejs ::before{box-sizing:border-box}#conversejs html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}#conversejs article,#conversejs aside,#conversejs figcaption,#conversejs figure,#conversejs footer,#conversejs header,#conversejs hgroup,#conversejs main,#conversejs nav,#conversejs section{display:block}#conversejs body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}#conversejs [tabindex="-1"]:focus:not(:focus-visible){outline:0!important}#conversejs hr{box-sizing:content-box;height:0;overflow:visible}#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6{margin-top:0;margin-bottom:.5rem}#conversejs p{margin-top:0;margin-bottom:1rem}#conversejs abbr[data-original-title],#conversejs abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}#conversejs address{margin-bottom:1rem;font-style:normal;line-height:inherit}#conversejs dl,#conversejs ol,#conversejs ul{margin-top:0;margin-bottom:1rem}#conversejs ol ol,#conversejs ol ul,#conversejs ul ol,#conversejs ul ul{margin-bottom:0}#conversejs dt{font-weight:700}#conversejs dd{margin-bottom:.5rem;margin-left:0}#conversejs blockquote{margin:0 0 1rem}#conversejs b,#conversejs strong{font-weight:bolder}#conversejs small{font-size:80%}#conversejs sub,#conversejs sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}#conversejs sub{bottom:-.25em}#conversejs sup{top:-.5em}#conversejs a{color:#007bff;text-decoration:none;background-color:transparent}#conversejs a:hover{color:#0056b3;text-decoration:underline}#conversejs a:not([href]){color:inherit;text-decoration:none}#conversejs a:not([href]):hover{color:inherit;text-decoration:none}#conversejs code,#conversejs kbd,#conversejs pre,#conversejs samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}#conversejs pre{margin-top:0;margin-bottom:1rem;overflow:auto}#conversejs figure{margin:0 0 1rem}#conversejs img{vertical-align:middle;border-style:none}#conversejs svg{overflow:hidden;vertical-align:middle}#conversejs table{border-collapse:collapse}#conversejs caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}#conversejs th{text-align:inherit}#conversejs label{display:inline-block;margin-bottom:.5rem}#conversejs button{border-radius:0}#conversejs button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}#conversejs button,#conversejs input,#conversejs optgroup,#conversejs select,#conversejs textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}#conversejs button,#conversejs input{overflow:visible}#conversejs button,#conversejs select{text-transform:none}#conversejs select{word-wrap:normal}#conversejs [type=button],#conversejs [type=reset],#conversejs [type=submit],#conversejs button{-webkit-appearance:button}#conversejs [type=button]:not(:disabled),#conversejs [type=reset]:not(:disabled),#conversejs [type=submit]:not(:disabled),#conversejs button:not(:disabled){cursor:pointer}#conversejs [type=button]::-moz-focus-inner,#conversejs [type=reset]::-moz-focus-inner,#conversejs [type=submit]::-moz-focus-inner,#conversejs button::-moz-focus-inner{padding:0;border-style:none}#conversejs input[type=checkbox],#conversejs input[type=radio]{box-sizing:border-box;padding:0}#conversejs input[type=date],#conversejs input[type=datetime-local],#conversejs input[type=month],#conversejs input[type=time]{-webkit-appearance:listbox}#conversejs textarea{overflow:auto;resize:vertical}#conversejs fieldset{min-width:0;padding:0;margin:0;border:0}#conversejs legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}#conversejs progress{vertical-align:baseline}#conversejs [type=number]::-webkit-inner-spin-button,#conversejs [type=number]::-webkit-outer-spin-button{height:auto}#conversejs [type=search]{outline-offset:-2px;-webkit-appearance:none}#conversejs [type=search]::-webkit-search-decoration{-webkit-appearance:none}#conversejs ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}#conversejs output{display:inline-block}#conversejs summary{display:list-item;cursor:pointer}#conversejs template{display:none}#conversejs [hidden]{display:none!important}#conversejs .h1,#conversejs .h2,#conversejs .h3,#conversejs .h4,#conversejs .h5,#conversejs .h6,#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}#conversejs .h1,#conversejs h1{font-size:2.5rem}#conversejs .h2,#conversejs h2{font-size:2rem}#conversejs .h3,#conversejs h3{font-size:1.75rem}#conversejs .h4,#conversejs h4{font-size:1.5rem}#conversejs .h5,#conversejs h5{font-size:1.25rem}#conversejs .h6,#conversejs h6{font-size:1rem}#conversejs .lead{font-size:1.25rem;font-weight:300}#conversejs .display-1{font-size:6rem;font-weight:300;line-height:1.2}#conversejs .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}#conversejs .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}#conversejs .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}#conversejs hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}#conversejs .small,#conversejs small{font-size:80%;font-weight:400}#conversejs .mark,#conversejs mark{padding:.2em;background-color:#fcf8e3}#conversejs .list-unstyled{padding-left:0;list-style:none}#conversejs .list-inline{padding-left:0;list-style:none}#conversejs .list-inline-item{display:inline-block}#conversejs .list-inline-item:not(:last-child){margin-right:.5rem}#conversejs .initialism{font-size:90%;text-transform:uppercase}#conversejs .blockquote{margin-bottom:1rem;font-size:1.25rem}#conversejs .blockquote-footer{display:block;font-size:80%;color:#6c757d}#conversejs .blockquote-footer::before{content:"\2014\00A0"}#conversejs .img-fluid{max-width:100%;height:auto}#conversejs .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}#conversejs .figure{display:inline-block}#conversejs .figure-img{margin-bottom:.5rem;line-height:1}#conversejs .figure-caption{font-size:90%;color:#6c757d}#conversejs .container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){#conversejs .container{max-width:540px}}@media (min-width:768px){#conversejs .container{max-width:720px}}@media (min-width:992px){#conversejs .container{max-width:960px}}@media (min-width:1200px){#conversejs .container{max-width:1140px}}#conversejs .container-fluid,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm,#conversejs .container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){#conversejs .container,#conversejs .container-sm{max-width:540px}}@media (min-width:768px){#conversejs .container,#conversejs .container-md,#conversejs .container-sm{max-width:720px}}@media (min-width:992px){#conversejs .container,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm{max-width:960px}}@media (min-width:1200px){#conversejs .container,#conversejs .container-lg,#conversejs .container-md,#conversejs .container-sm,#conversejs .container-xl{max-width:1140px}}#conversejs .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}#conversejs .no-gutters{margin-right:0;margin-left:0}#conversejs .no-gutters>.col,#conversejs .no-gutters>[class*=col-]{padding-right:0;padding-left:0}#conversejs .col,#conversejs .col-1,#conversejs .col-10,#conversejs .col-11,#conversejs .col-12,#conversejs .col-2,#conversejs .col-3,#conversejs .col-4,#conversejs .col-5,#conversejs .col-6,#conversejs .col-7,#conversejs .col-8,#conversejs .col-9,#conversejs .col-auto,#conversejs .col-lg,#conversejs .col-lg-1,#conversejs .col-lg-10,#conversejs .col-lg-11,#conversejs .col-lg-12,#conversejs .col-lg-2,#conversejs .col-lg-3,#conversejs .col-lg-4,#conversejs .col-lg-5,#conversejs .col-lg-6,#conversejs .col-lg-7,#conversejs .col-lg-8,#conversejs .col-lg-9,#conversejs .col-lg-auto,#conversejs .col-md,#conversejs .col-md-1,#conversejs .col-md-10,#conversejs .col-md-11,#conversejs .col-md-12,#conversejs .col-md-2,#conversejs .col-md-3,#conversejs .col-md-4,#conversejs .col-md-5,#conversejs .col-md-6,#conversejs .col-md-7,#conversejs .col-md-8,#conversejs .col-md-9,#conversejs .col-md-auto,#conversejs .col-sm,#conversejs .col-sm-1,#conversejs .col-sm-10,#conversejs .col-sm-11,#conversejs .col-sm-12,#conversejs .col-sm-2,#conversejs .col-sm-3,#conversejs .col-sm-4,#conversejs .col-sm-5,#conversejs .col-sm-6,#conversejs .col-sm-7,#conversejs .col-sm-8,#conversejs .col-sm-9,#conversejs .col-sm-auto,#conversejs .col-xl,#conversejs .col-xl-1,#conversejs .col-xl-10,#conversejs .col-xl-11,#conversejs .col-xl-12,#conversejs .col-xl-2,#conversejs .col-xl-3,#conversejs .col-xl-4,#conversejs .col-xl-5,#conversejs .col-xl-6,#conversejs .col-xl-7,#conversejs .col-xl-8,#conversejs .col-xl-9,#conversejs .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}#conversejs .col{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-3{flex:0 0 25%;max-width:25%}#conversejs .col-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-6{flex:0 0 50%;max-width:50%}#conversejs .col-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-9{flex:0 0 75%;max-width:75%}#conversejs .col-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-12{flex:0 0 100%;max-width:100%}#conversejs .order-first{order:-1}#conversejs .order-last{order:13}#conversejs .order-0{order:0}#conversejs .order-1{order:1}#conversejs .order-2{order:2}#conversejs .order-3{order:3}#conversejs .order-4{order:4}#conversejs .order-5{order:5}#conversejs .order-6{order:6}#conversejs .order-7{order:7}#conversejs .order-8{order:8}#conversejs .order-9{order:9}#conversejs .order-10{order:10}#conversejs .order-11{order:11}#conversejs .order-12{order:12}#conversejs .offset-1{margin-left:8.33333%}#conversejs .offset-2{margin-left:16.66667%}#conversejs .offset-3{margin-left:25%}#conversejs .offset-4{margin-left:33.33333%}#conversejs .offset-5{margin-left:41.66667%}#conversejs .offset-6{margin-left:50%}#conversejs .offset-7{margin-left:58.33333%}#conversejs .offset-8{margin-left:66.66667%}#conversejs .offset-9{margin-left:75%}#conversejs .offset-10{margin-left:83.33333%}#conversejs .offset-11{margin-left:91.66667%}@media (min-width:576px){#conversejs .col-sm{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-sm-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-sm-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-sm-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-sm-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-sm-3{flex:0 0 25%;max-width:25%}#conversejs .col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-sm-6{flex:0 0 50%;max-width:50%}#conversejs .col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-sm-9{flex:0 0 75%;max-width:75%}#conversejs .col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-sm-12{flex:0 0 100%;max-width:100%}#conversejs .order-sm-first{order:-1}#conversejs .order-sm-last{order:13}#conversejs .order-sm-0{order:0}#conversejs .order-sm-1{order:1}#conversejs .order-sm-2{order:2}#conversejs .order-sm-3{order:3}#conversejs .order-sm-4{order:4}#conversejs .order-sm-5{order:5}#conversejs .order-sm-6{order:6}#conversejs .order-sm-7{order:7}#conversejs .order-sm-8{order:8}#conversejs .order-sm-9{order:9}#conversejs .order-sm-10{order:10}#conversejs .order-sm-11{order:11}#conversejs .order-sm-12{order:12}#conversejs .offset-sm-0{margin-left:0}#conversejs .offset-sm-1{margin-left:8.33333%}#conversejs .offset-sm-2{margin-left:16.66667%}#conversejs .offset-sm-3{margin-left:25%}#conversejs .offset-sm-4{margin-left:33.33333%}#conversejs .offset-sm-5{margin-left:41.66667%}#conversejs .offset-sm-6{margin-left:50%}#conversejs .offset-sm-7{margin-left:58.33333%}#conversejs .offset-sm-8{margin-left:66.66667%}#conversejs .offset-sm-9{margin-left:75%}#conversejs .offset-sm-10{margin-left:83.33333%}#conversejs .offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){#conversejs .col-md{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-md-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-md-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-md-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-md-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-md-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-md-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-md-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-md-3{flex:0 0 25%;max-width:25%}#conversejs .col-md-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-md-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-md-6{flex:0 0 50%;max-width:50%}#conversejs .col-md-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-md-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-md-9{flex:0 0 75%;max-width:75%}#conversejs .col-md-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-md-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-md-12{flex:0 0 100%;max-width:100%}#conversejs .order-md-first{order:-1}#conversejs .order-md-last{order:13}#conversejs .order-md-0{order:0}#conversejs .order-md-1{order:1}#conversejs .order-md-2{order:2}#conversejs .order-md-3{order:3}#conversejs .order-md-4{order:4}#conversejs .order-md-5{order:5}#conversejs .order-md-6{order:6}#conversejs .order-md-7{order:7}#conversejs .order-md-8{order:8}#conversejs .order-md-9{order:9}#conversejs .order-md-10{order:10}#conversejs .order-md-11{order:11}#conversejs .order-md-12{order:12}#conversejs .offset-md-0{margin-left:0}#conversejs .offset-md-1{margin-left:8.33333%}#conversejs .offset-md-2{margin-left:16.66667%}#conversejs .offset-md-3{margin-left:25%}#conversejs .offset-md-4{margin-left:33.33333%}#conversejs .offset-md-5{margin-left:41.66667%}#conversejs .offset-md-6{margin-left:50%}#conversejs .offset-md-7{margin-left:58.33333%}#conversejs .offset-md-8{margin-left:66.66667%}#conversejs .offset-md-9{margin-left:75%}#conversejs .offset-md-10{margin-left:83.33333%}#conversejs .offset-md-11{margin-left:91.66667%}}@media (min-width:992px){#conversejs .col-lg{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-lg-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-lg-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-lg-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-lg-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-lg-3{flex:0 0 25%;max-width:25%}#conversejs .col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-lg-6{flex:0 0 50%;max-width:50%}#conversejs .col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-lg-9{flex:0 0 75%;max-width:75%}#conversejs .col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-lg-12{flex:0 0 100%;max-width:100%}#conversejs .order-lg-first{order:-1}#conversejs .order-lg-last{order:13}#conversejs .order-lg-0{order:0}#conversejs .order-lg-1{order:1}#conversejs .order-lg-2{order:2}#conversejs .order-lg-3{order:3}#conversejs .order-lg-4{order:4}#conversejs .order-lg-5{order:5}#conversejs .order-lg-6{order:6}#conversejs .order-lg-7{order:7}#conversejs .order-lg-8{order:8}#conversejs .order-lg-9{order:9}#conversejs .order-lg-10{order:10}#conversejs .order-lg-11{order:11}#conversejs .order-lg-12{order:12}#conversejs .offset-lg-0{margin-left:0}#conversejs .offset-lg-1{margin-left:8.33333%}#conversejs .offset-lg-2{margin-left:16.66667%}#conversejs .offset-lg-3{margin-left:25%}#conversejs .offset-lg-4{margin-left:33.33333%}#conversejs .offset-lg-5{margin-left:41.66667%}#conversejs .offset-lg-6{margin-left:50%}#conversejs .offset-lg-7{margin-left:58.33333%}#conversejs .offset-lg-8{margin-left:66.66667%}#conversejs .offset-lg-9{margin-left:75%}#conversejs .offset-lg-10{margin-left:83.33333%}#conversejs .offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){#conversejs .col-xl{flex-basis:0;flex-grow:1;max-width:100%}#conversejs .row-cols-xl-1>*{flex:0 0 100%;max-width:100%}#conversejs .row-cols-xl-2>*{flex:0 0 50%;max-width:50%}#conversejs .row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .row-cols-xl-4>*{flex:0 0 25%;max-width:25%}#conversejs .row-cols-xl-5>*{flex:0 0 20%;max-width:20%}#conversejs .row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}#conversejs .col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}#conversejs .col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}#conversejs .col-xl-3{flex:0 0 25%;max-width:25%}#conversejs .col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}#conversejs .col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}#conversejs .col-xl-6{flex:0 0 50%;max-width:50%}#conversejs .col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}#conversejs .col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}#conversejs .col-xl-9{flex:0 0 75%;max-width:75%}#conversejs .col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}#conversejs .col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}#conversejs .col-xl-12{flex:0 0 100%;max-width:100%}#conversejs .order-xl-first{order:-1}#conversejs .order-xl-last{order:13}#conversejs .order-xl-0{order:0}#conversejs .order-xl-1{order:1}#conversejs .order-xl-2{order:2}#conversejs .order-xl-3{order:3}#conversejs .order-xl-4{order:4}#conversejs .order-xl-5{order:5}#conversejs .order-xl-6{order:6}#conversejs .order-xl-7{order:7}#conversejs .order-xl-8{order:8}#conversejs .order-xl-9{order:9}#conversejs .order-xl-10{order:10}#conversejs .order-xl-11{order:11}#conversejs .order-xl-12{order:12}#conversejs .offset-xl-0{margin-left:0}#conversejs .offset-xl-1{margin-left:8.33333%}#conversejs .offset-xl-2{margin-left:16.66667%}#conversejs .offset-xl-3{margin-left:25%}#conversejs .offset-xl-4{margin-left:33.33333%}#conversejs .offset-xl-5{margin-left:41.66667%}#conversejs .offset-xl-6{margin-left:50%}#conversejs .offset-xl-7{margin-left:58.33333%}#conversejs .offset-xl-8{margin-left:66.66667%}#conversejs .offset-xl-9{margin-left:75%}#conversejs .offset-xl-10{margin-left:83.33333%}#conversejs .offset-xl-11{margin-left:91.66667%}}#conversejs .form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .form-control{transition:none}}#conversejs .form-control::-ms-expand{background-color:transparent;border:0}#conversejs .form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}#conversejs .form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .form-control::-moz-placeholder{color:#6c757d;opacity:1}#conversejs .form-control:-ms-input-placeholder{color:#6c757d;opacity:1}#conversejs .form-control::placeholder{color:#6c757d;opacity:1}#conversejs .form-control:disabled,#conversejs .form-control[readonly]{background-color:#e9ecef;opacity:1}#conversejs select.form-control:focus::-ms-value{color:#495057;background-color:#fff}#conversejs .form-control-file,#conversejs .form-control-range{display:block;width:100%}#conversejs .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}#conversejs .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}#conversejs .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}#conversejs .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}#conversejs .form-control-plaintext.form-control-lg,#conversejs .form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}#conversejs .form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs select.form-control[multiple],#conversejs select.form-control[size]{height:auto}#conversejs textarea.form-control{height:auto}#conversejs .form-group{margin-bottom:1rem}#conversejs .form-text{display:block;margin-top:.25rem}#conversejs .form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}#conversejs .form-row>.col,#conversejs .form-row>[class*=col-]{padding-right:5px;padding-left:5px}#conversejs .form-check{position:relative;display:block;padding-left:1.25rem}#conversejs .form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}#conversejs .form-check-input:disabled~.form-check-label,#conversejs .form-check-input[disabled]~.form-check-label{color:#6c757d}#conversejs .form-check-label{margin-bottom:0}#conversejs .form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}#conversejs .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}#conversejs .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}#conversejs .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}#conversejs.is-valid~.valid-feedback,#conversejs.is-valid~.valid-tooltip,.was-validated #conversejs:valid~.valid-feedback,.was-validated #conversejs:valid~.valid-tooltip{display:block}#conversejs .form-control.is-valid,.was-validated #conversejs .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .form-control.is-valid:focus,.was-validated #conversejs .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs textarea.form-control.is-valid,.was-validated #conversejs textarea.form-control:valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}#conversejs .custom-select.is-valid,.was-validated #conversejs .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .custom-select.is-valid:focus,.was-validated #conversejs .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .form-check-input.is-valid~.form-check-label,.was-validated #conversejs .form-check-input:valid~.form-check-label{color:#28a745}#conversejs .form-check-input.is-valid~.valid-feedback,#conversejs .form-check-input.is-valid~.valid-tooltip,.was-validated #conversejs .form-check-input:valid~.valid-feedback,.was-validated #conversejs .form-check-input:valid~.valid-tooltip{display:block}#conversejs .custom-control-input.is-valid~.custom-control-label,.was-validated #conversejs .custom-control-input:valid~.custom-control-label{color:#28a745}#conversejs .custom-control-input.is-valid~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}#conversejs .custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}#conversejs .custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated #conversejs .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}#conversejs .custom-file-input.is-valid~.custom-file-label,.was-validated #conversejs .custom-file-input:valid~.custom-file-label{border-color:#28a745}#conversejs .custom-file-input.is-valid:focus~.custom-file-label,.was-validated #conversejs .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}#conversejs .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}#conversejs .invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}#conversejs.is-invalid~.invalid-feedback,#conversejs.is-invalid~.invalid-tooltip,.was-validated #conversejs:invalid~.invalid-feedback,.was-validated #conversejs:invalid~.invalid-tooltip{display:block}#conversejs .form-control.is-invalid,.was-validated #conversejs .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .form-control.is-invalid:focus,.was-validated #conversejs .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs textarea.form-control.is-invalid,.was-validated #conversejs textarea.form-control:invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}#conversejs .custom-select.is-invalid,.was-validated #conversejs .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}#conversejs .custom-select.is-invalid:focus,.was-validated #conversejs .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .form-check-input.is-invalid~.form-check-label,.was-validated #conversejs .form-check-input:invalid~.form-check-label{color:#dc3545}#conversejs .form-check-input.is-invalid~.invalid-feedback,#conversejs .form-check-input.is-invalid~.invalid-tooltip,.was-validated #conversejs .form-check-input:invalid~.invalid-feedback,.was-validated #conversejs .form-check-input:invalid~.invalid-tooltip{display:block}#conversejs .custom-control-input.is-invalid~.custom-control-label,.was-validated #conversejs .custom-control-input:invalid~.custom-control-label{color:#dc3545}#conversejs .custom-control-input.is-invalid~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}#conversejs .custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}#conversejs .custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated #conversejs .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}#conversejs .custom-file-input.is-invalid~.custom-file-label,.was-validated #conversejs .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}#conversejs .custom-file-input.is-invalid:focus~.custom-file-label,.was-validated #conversejs .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}#conversejs .form-inline{display:flex;flex-flow:row wrap;align-items:center}#conversejs .form-inline .form-check{width:100%}@media (min-width:576px){#conversejs .form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}#conversejs .form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}#conversejs .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}#conversejs .form-inline .form-control-plaintext{display:inline-block}#conversejs .form-inline .custom-select,#conversejs .form-inline .input-group{width:auto}#conversejs .form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}#conversejs .form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}#conversejs .form-inline .custom-control{align-items:center;justify-content:center}#conversejs .form-inline .custom-control-label{margin-bottom:0}}#conversejs .btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .btn{transition:none}}#conversejs .btn:hover{color:#212529;text-decoration:none}#conversejs .btn.focus,#conversejs .btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .btn.disabled,#conversejs .btn:disabled{opacity:.65}#conversejs a.btn.disabled,#conversejs fieldset:disabled a.btn{pointer-events:none}#conversejs .btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}#conversejs .btn-primary.focus,#conversejs .btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}#conversejs .btn-primary.disabled,#conversejs .btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-primary:not(:disabled):not(.disabled).active,#conversejs .btn-primary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}#conversejs .btn-primary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-primary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}#conversejs .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}#conversejs .btn-secondary.focus,#conversejs .btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}#conversejs .btn-secondary.disabled,#conversejs .btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-secondary:not(:disabled):not(.disabled).active,#conversejs .btn-secondary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}#conversejs .btn-secondary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}#conversejs .btn-success{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}#conversejs .btn-success.focus,#conversejs .btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}#conversejs .btn-success.disabled,#conversejs .btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-success:not(:disabled):not(.disabled).active,#conversejs .btn-success:not(:disabled):not(.disabled):active,.show>#conversejs .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}#conversejs .btn-success:not(:disabled):not(.disabled).active:focus,#conversejs .btn-success:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}#conversejs .btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}#conversejs .btn-info.focus,#conversejs .btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}#conversejs .btn-info.disabled,#conversejs .btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-info:not(:disabled):not(.disabled).active,#conversejs .btn-info:not(:disabled):not(.disabled):active,.show>#conversejs .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}#conversejs .btn-info:not(:disabled):not(.disabled).active:focus,#conversejs .btn-info:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}#conversejs .btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}#conversejs .btn-warning.focus,#conversejs .btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}#conversejs .btn-warning.disabled,#conversejs .btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-warning:not(:disabled):not(.disabled).active,#conversejs .btn-warning:not(:disabled):not(.disabled):active,.show>#conversejs .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}#conversejs .btn-warning:not(:disabled):not(.disabled).active:focus,#conversejs .btn-warning:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}#conversejs .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}#conversejs .btn-danger.focus,#conversejs .btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}#conversejs .btn-danger.disabled,#conversejs .btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-danger:not(:disabled):not(.disabled).active,#conversejs .btn-danger:not(:disabled):not(.disabled):active,.show>#conversejs .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}#conversejs .btn-danger:not(:disabled):not(.disabled).active:focus,#conversejs .btn-danger:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}#conversejs .btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}#conversejs .btn-light.focus,#conversejs .btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}#conversejs .btn-light.disabled,#conversejs .btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-light:not(:disabled):not(.disabled).active,#conversejs .btn-light:not(:disabled):not(.disabled):active,.show>#conversejs .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}#conversejs .btn-light:not(:disabled):not(.disabled).active:focus,#conversejs .btn-light:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}#conversejs .btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}#conversejs .btn-dark.focus,#conversejs .btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}#conversejs .btn-dark.disabled,#conversejs .btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-dark:not(:disabled):not(.disabled).active,#conversejs .btn-dark:not(:disabled):not(.disabled):active,.show>#conversejs .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}#conversejs .btn-dark:not(:disabled):not(.disabled).active:focus,#conversejs .btn-dark:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}#conversejs .btn-outline-primary{color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary.focus,#conversejs .btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .btn-outline-primary.disabled,#conversejs .btn-outline-primary:disabled{color:#007bff;background-color:transparent}#conversejs .btn-outline-primary:not(:disabled):not(.disabled).active,#conversejs .btn-outline-primary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .btn-outline-primary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .btn-outline-secondary{color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary.focus,#conversejs .btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .btn-outline-secondary.disabled,#conversejs .btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}#conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active,#conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}#conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .btn-outline-success{color:#28a745;border-color:#28a745}#conversejs .btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-outline-success.focus,#conversejs .btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .btn-outline-success.disabled,#conversejs .btn-outline-success:disabled{color:#28a745;background-color:transparent}#conversejs .btn-outline-success:not(:disabled):not(.disabled).active,#conversejs .btn-outline-success:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}#conversejs .btn-outline-success:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .btn-outline-info{color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info.focus,#conversejs .btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .btn-outline-info.disabled,#conversejs .btn-outline-info:disabled{color:#17a2b8;background-color:transparent}#conversejs .btn-outline-info:not(:disabled):not(.disabled).active,#conversejs .btn-outline-info:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}#conversejs .btn-outline-info:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .btn-outline-warning{color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning.focus,#conversejs .btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .btn-outline-warning.disabled,#conversejs .btn-outline-warning:disabled{color:#ffc107;background-color:transparent}#conversejs .btn-outline-warning:not(:disabled):not(.disabled).active,#conversejs .btn-outline-warning:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}#conversejs .btn-outline-warning:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .btn-outline-danger{color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger.focus,#conversejs .btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .btn-outline-danger.disabled,#conversejs .btn-outline-danger:disabled{color:#dc3545;background-color:transparent}#conversejs .btn-outline-danger:not(:disabled):not(.disabled).active,#conversejs .btn-outline-danger:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}#conversejs .btn-outline-danger:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light.focus,#conversejs .btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .btn-outline-light.disabled,#conversejs .btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}#conversejs .btn-outline-light:not(:disabled):not(.disabled).active,#conversejs .btn-outline-light:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}#conversejs .btn-outline-light:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .btn-outline-dark{color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark.focus,#conversejs .btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .btn-outline-dark.disabled,#conversejs .btn-outline-dark:disabled{color:#343a40;background-color:transparent}#conversejs .btn-outline-dark:not(:disabled):not(.disabled).active,#conversejs .btn-outline-dark:not(:disabled):not(.disabled):active,.show>#conversejs .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}#conversejs .btn-outline-dark:not(:disabled):not(.disabled).active:focus,#conversejs .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>#conversejs .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .btn-link{font-weight:400;color:#007bff;text-decoration:none}#conversejs .btn-link:hover{color:#0056b3;text-decoration:underline}#conversejs .btn-link.focus,#conversejs .btn-link:focus{text-decoration:underline;box-shadow:none}#conversejs .btn-link.disabled,#conversejs .btn-link:disabled{color:#6c757d;pointer-events:none}#conversejs .btn-group-lg>.btn,#conversejs .btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs .btn-group-sm>.btn,#conversejs .btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .btn-block{display:block;width:100%}#conversejs .btn-block+.btn-block{margin-top:.5rem}#conversejs input[type=button].btn-block,#conversejs input[type=reset].btn-block,#conversejs input[type=submit].btn-block{width:100%}#conversejs .fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){#conversejs .fade{transition:none}}#conversejs .fade:not(.show){opacity:0}#conversejs .collapse:not(.show){display:none}#conversejs .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){#conversejs .collapsing{transition:none}}#conversejs .dropdown,#conversejs .dropleft,#conversejs .dropright,#conversejs .dropup{position:relative}#conversejs .dropdown-toggle{white-space:nowrap}#conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}#conversejs .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}#conversejs .dropdown-menu-left{right:auto;left:0}#conversejs .dropdown-menu-right{right:0;left:auto}@media (min-width:576px){#conversejs .dropdown-menu-sm-left{right:auto;left:0}#conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){#conversejs .dropdown-menu-md-left{right:auto;left:0}#conversejs .dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){#conversejs .dropdown-menu-lg-left{right:auto;left:0}#conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){#conversejs .dropdown-menu-xl-left{right:auto;left:0}#conversejs .dropdown-menu-xl-right{right:0;left:auto}}#conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}#conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}#conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}#conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}#conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropright .dropdown-toggle::after{vertical-align:0}#conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}#conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}#conversejs .dropleft .dropdown-toggle::after{display:none}#conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}#conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}#conversejs .dropleft .dropdown-toggle::before{vertical-align:0}#conversejs .dropdown-menu[x-placement^=bottom],#conversejs .dropdown-menu[x-placement^=left],#conversejs .dropdown-menu[x-placement^=right],#conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}#conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}#conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}#conversejs .dropdown-item:focus,#conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}#conversejs .dropdown-item.active,#conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}#conversejs .dropdown-item.disabled,#conversejs .dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}#conversejs .dropdown-menu.show{display:block}#conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}#conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}#conversejs .btn-group,#conversejs .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}#conversejs .btn-group-vertical>.btn,#conversejs .btn-group>.btn{position:relative;flex:1 1 auto}#conversejs .btn-group-vertical>.btn:hover,#conversejs .btn-group>.btn:hover{z-index:1}#conversejs .btn-group-vertical>.btn.active,#conversejs .btn-group-vertical>.btn:active,#conversejs .btn-group-vertical>.btn:focus,#conversejs .btn-group>.btn.active,#conversejs .btn-group>.btn:active,#conversejs .btn-group>.btn:focus{z-index:1}#conversejs .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}#conversejs .btn-toolbar .input-group{width:auto}#conversejs .btn-group>.btn-group:not(:first-child),#conversejs .btn-group>.btn:not(:first-child){margin-left:-1px}#conversejs .btn-group>.btn-group:not(:last-child)>.btn,#conversejs .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .btn-group>.btn-group:not(:first-child)>.btn,#conversejs .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}#conversejs .dropdown-toggle-split::after,.dropright #conversejs .dropdown-toggle-split::after,.dropup #conversejs .dropdown-toggle-split::after{margin-left:0}.dropleft #conversejs .dropdown-toggle-split::before{margin-right:0}#conversejs .btn-group-sm>.btn+.dropdown-toggle-split,#conversejs .btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}#conversejs .btn-group-lg>.btn+.dropdown-toggle-split,#conversejs .btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}#conversejs .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}#conversejs .btn-group-vertical>.btn,#conversejs .btn-group-vertical>.btn-group{width:100%}#conversejs .btn-group-vertical>.btn-group:not(:first-child),#conversejs .btn-group-vertical>.btn:not(:first-child){margin-top:-1px}#conversejs .btn-group-vertical>.btn-group:not(:last-child)>.btn,#conversejs .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}#conversejs .btn-group-vertical>.btn-group:not(:first-child)>.btn,#conversejs .btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}#conversejs .btn-group-toggle>.btn,#conversejs .btn-group-toggle>.btn-group>.btn{margin-bottom:0}#conversejs .btn-group-toggle>.btn input[type=checkbox],#conversejs .btn-group-toggle>.btn input[type=radio],#conversejs .btn-group-toggle>.btn-group>.btn input[type=checkbox],#conversejs .btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}#conversejs .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}#conversejs .input-group>.custom-file,#conversejs .input-group>.custom-select,#conversejs .input-group>.form-control,#conversejs .input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}#conversejs .input-group>.custom-file+.custom-file,#conversejs .input-group>.custom-file+.custom-select,#conversejs .input-group>.custom-file+.form-control,#conversejs .input-group>.custom-select+.custom-file,#conversejs .input-group>.custom-select+.custom-select,#conversejs .input-group>.custom-select+.form-control,#conversejs .input-group>.form-control+.custom-file,#conversejs .input-group>.form-control+.custom-select,#conversejs .input-group>.form-control+.form-control,#conversejs .input-group>.form-control-plaintext+.custom-file,#conversejs .input-group>.form-control-plaintext+.custom-select,#conversejs .input-group>.form-control-plaintext+.form-control{margin-left:-1px}#conversejs .input-group>.custom-file .custom-file-input:focus~.custom-file-label,#conversejs .input-group>.custom-select:focus,#conversejs .input-group>.form-control:focus{z-index:3}#conversejs .input-group>.custom-file .custom-file-input:focus{z-index:4}#conversejs .input-group>.custom-select:not(:last-child),#conversejs .input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.custom-select:not(:first-child),#conversejs .input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .input-group>.custom-file{display:flex;align-items:center}#conversejs .input-group>.custom-file:not(:last-child) .custom-file-label,#conversejs .input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .input-group-append,#conversejs .input-group-prepend{display:flex}#conversejs .input-group-append .btn,#conversejs .input-group-prepend .btn{position:relative;z-index:2}#conversejs .input-group-append .btn:focus,#conversejs .input-group-prepend .btn:focus{z-index:3}#conversejs .input-group-append .btn+.btn,#conversejs .input-group-append .btn+.input-group-text,#conversejs .input-group-append .input-group-text+.btn,#conversejs .input-group-append .input-group-text+.input-group-text,#conversejs .input-group-prepend .btn+.btn,#conversejs .input-group-prepend .btn+.input-group-text,#conversejs .input-group-prepend .input-group-text+.btn,#conversejs .input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}#conversejs .input-group-prepend{margin-right:-1px}#conversejs .input-group-append{margin-left:-1px}#conversejs .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}#conversejs .input-group-text input[type=checkbox],#conversejs .input-group-text input[type=radio]{margin-top:0}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-lg>.form-control,#conversejs .input-group-lg>.input-group-append>.btn,#conversejs .input-group-lg>.input-group-append>.input-group-text,#conversejs .input-group-lg>.input-group-prepend>.btn,#conversejs .input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}#conversejs .input-group-sm>.custom-select,#conversejs .input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}#conversejs .input-group-sm>.custom-select,#conversejs .input-group-sm>.form-control,#conversejs .input-group-sm>.input-group-append>.btn,#conversejs .input-group-sm>.input-group-append>.input-group-text,#conversejs .input-group-sm>.input-group-prepend>.btn,#conversejs .input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}#conversejs .input-group-lg>.custom-select,#conversejs .input-group-sm>.custom-select{padding-right:1.75rem}#conversejs .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),#conversejs .input-group>.input-group-append:last-child>.input-group-text:not(:last-child),#conversejs .input-group>.input-group-append:not(:last-child)>.btn,#conversejs .input-group>.input-group-append:not(:last-child)>.input-group-text,#conversejs .input-group>.input-group-prepend>.btn,#conversejs .input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}#conversejs .input-group>.input-group-append>.btn,#conversejs .input-group>.input-group-append>.input-group-text,#conversejs .input-group>.input-group-prepend:first-child>.btn:not(:first-child),#conversejs .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),#conversejs .input-group>.input-group-prepend:not(:first-child)>.btn,#conversejs .input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}#conversejs .custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}#conversejs .custom-control-inline{display:inline-flex;margin-right:1rem}#conversejs .custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}#conversejs .custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}#conversejs .custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}#conversejs .custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}#conversejs .custom-control-input:disabled~.custom-control-label,#conversejs .custom-control-input[disabled]~.custom-control-label{color:#6c757d}#conversejs .custom-control-input:disabled~.custom-control-label::before,#conversejs .custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}#conversejs .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}#conversejs .custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}#conversejs .custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}#conversejs .custom-checkbox .custom-control-label::before{border-radius:.25rem}#conversejs .custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}#conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}#conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}#conversejs .custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-radio .custom-control-label::before{border-radius:50%}#conversejs .custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}#conversejs .custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-switch{padding-left:2.25rem}#conversejs .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}#conversejs .custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .custom-switch .custom-control-label::after{transition:none}}#conversejs .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}#conversejs .custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}#conversejs .custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs .custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-select:focus::-ms-value{color:#495057;background-color:#fff}#conversejs .custom-select[multiple],#conversejs .custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}#conversejs .custom-select:disabled{color:#6c757d;background-color:#e9ecef}#conversejs .custom-select::-ms-expand{display:none}#conversejs .custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}#conversejs .custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}#conversejs .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}#conversejs .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}#conversejs .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}#conversejs .custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-file-input:disabled~.custom-file-label,#conversejs .custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}#conversejs .custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}#conversejs .custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}#conversejs .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}#conversejs .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}#conversejs .custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs .custom-range:focus{outline:0}#conversejs .custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}#conversejs .custom-range::-moz-focus-outer{border:0}#conversejs .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}#conversejs .custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#conversejs .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}#conversejs .custom-range::-moz-range-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#conversejs .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){#conversejs .custom-range::-ms-thumb{-ms-transition:none;transition:none}}#conversejs .custom-range::-ms-thumb:active{background-color:#b3d7ff}#conversejs .custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}#conversejs .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}#conversejs .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}#conversejs .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}#conversejs .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}#conversejs .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}#conversejs .custom-range:disabled::-moz-range-track{cursor:default}#conversejs .custom-range:disabled::-ms-thumb{background-color:#adb5bd}#conversejs .custom-control-label::before,#conversejs .custom-file-label,#conversejs .custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .custom-control-label::before,#conversejs .custom-file-label,#conversejs .custom-select{transition:none}}#conversejs .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}#conversejs .nav-link{display:block;padding:.5rem 1rem}#conversejs .nav-link:focus,#conversejs .nav-link:hover{text-decoration:none}#conversejs .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}#conversejs .nav-tabs{border-bottom:1px solid #dee2e6}#conversejs .nav-tabs .nav-item{margin-bottom:-1px}#conversejs .nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}#conversejs .nav-tabs .nav-link:focus,#conversejs .nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}#conversejs .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}#conversejs .nav-tabs .nav-item.show .nav-link,#conversejs .nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}#conversejs .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}#conversejs .nav-pills .nav-link{border-radius:.25rem}#conversejs .nav-pills .nav-link.active,#conversejs .nav-pills .show>.nav-link{color:#fff;background-color:#007bff}#conversejs .nav-fill .nav-item{flex:1 1 auto;text-align:center}#conversejs .nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}#conversejs .tab-content>.tab-pane{display:none}#conversejs .tab-content>.active{display:block}#conversejs .badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){#conversejs .badge{transition:none}}a#conversejs .badge:focus,a#conversejs .badge:hover{text-decoration:none}#conversejs .badge:empty{display:none}#conversejs .btn .badge{position:relative;top:-1px}#conversejs .badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}#conversejs .badge-primary{color:#fff;background-color:#007bff}a#conversejs .badge-primary:focus,a#conversejs .badge-primary:hover{color:#fff;background-color:#0062cc}a#conversejs .badge-primary.focus,a#conversejs .badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}#conversejs .badge-secondary{color:#fff;background-color:#6c757d}a#conversejs .badge-secondary:focus,a#conversejs .badge-secondary:hover{color:#fff;background-color:#545b62}a#conversejs .badge-secondary.focus,a#conversejs .badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}#conversejs .badge-success{color:#fff;background-color:#28a745}a#conversejs .badge-success:focus,a#conversejs .badge-success:hover{color:#fff;background-color:#1e7e34}a#conversejs .badge-success.focus,a#conversejs .badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}#conversejs .badge-info{color:#fff;background-color:#17a2b8}a#conversejs .badge-info:focus,a#conversejs .badge-info:hover{color:#fff;background-color:#117a8b}a#conversejs .badge-info.focus,a#conversejs .badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}#conversejs .badge-warning{color:#212529;background-color:#ffc107}a#conversejs .badge-warning:focus,a#conversejs .badge-warning:hover{color:#212529;background-color:#d39e00}a#conversejs .badge-warning.focus,a#conversejs .badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}#conversejs .badge-danger{color:#fff;background-color:#dc3545}a#conversejs .badge-danger:focus,a#conversejs .badge-danger:hover{color:#fff;background-color:#bd2130}a#conversejs .badge-danger.focus,a#conversejs .badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}#conversejs .badge-light{color:#212529;background-color:#f8f9fa}a#conversejs .badge-light:focus,a#conversejs .badge-light:hover{color:#212529;background-color:#dae0e5}a#conversejs .badge-light.focus,a#conversejs .badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}#conversejs .badge-dark{color:#fff;background-color:#343a40}a#conversejs .badge-dark:focus,a#conversejs .badge-dark:hover{color:#fff;background-color:#1d2124}a#conversejs .badge-dark.focus,a#conversejs .badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}#conversejs .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}#conversejs .alert-heading{color:inherit}#conversejs .alert-link{font-weight:700}#conversejs .alert-dismissible{padding-right:4rem}#conversejs .alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}#conversejs .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}#conversejs .alert-primary hr{border-top-color:#9fcdff}#conversejs .alert-primary .alert-link{color:#002752}#conversejs .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}#conversejs .alert-secondary hr{border-top-color:#c8cbcf}#conversejs .alert-secondary .alert-link{color:#202326}#conversejs .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}#conversejs .alert-success hr{border-top-color:#b1dfbb}#conversejs .alert-success .alert-link{color:#0b2e13}#conversejs .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}#conversejs .alert-info hr{border-top-color:#abdde5}#conversejs .alert-info .alert-link{color:#062c33}#conversejs .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}#conversejs .alert-warning hr{border-top-color:#ffe8a1}#conversejs .alert-warning .alert-link{color:#533f03}#conversejs .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}#conversejs .alert-danger hr{border-top-color:#f1b0b7}#conversejs .alert-danger .alert-link{color:#491217}#conversejs .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}#conversejs .alert-light hr{border-top-color:#ececf6}#conversejs .alert-light .alert-link{color:#686868}#conversejs .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}#conversejs .alert-dark hr{border-top-color:#b9bbbe}#conversejs .alert-dark .alert-link{color:#040505}#conversejs .media{display:flex;align-items:flex-start}#conversejs .media-body{flex:1}#conversejs .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}#conversejs .list-group-item-action{width:100%;color:#495057;text-align:inherit}#conversejs .list-group-item-action:focus,#conversejs .list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}#conversejs .list-group-item-action:active{color:#212529;background-color:#e9ecef}#conversejs .list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}#conversejs .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}#conversejs .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}#conversejs .list-group-item.disabled,#conversejs .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}#conversejs .list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}#conversejs .list-group-item+#conversejs .list-group-item{border-top-width:0}#conversejs .list-group-item+#conversejs .list-group-item.active{margin-top:-1px;border-top-width:1px}#conversejs .list-group-horizontal{flex-direction:row}#conversejs .list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){#conversejs .list-group-horizontal-sm{flex-direction:row}#conversejs .list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-sm .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){#conversejs .list-group-horizontal-md{flex-direction:row}#conversejs .list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-md .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){#conversejs .list-group-horizontal-lg{flex-direction:row}#conversejs .list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-lg .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){#conversejs .list-group-horizontal-xl{flex-direction:row}#conversejs .list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#conversejs .list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#conversejs .list-group-horizontal-xl .list-group-item.active{margin-top:0}#conversejs .list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#conversejs .list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}#conversejs .list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}#conversejs .list-group-flush .list-group-item:first-child{border-top-width:0}#conversejs .list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}#conversejs .list-group-item-primary{color:#004085;background-color:#b8daff}#conversejs .list-group-item-primary.list-group-item-action:focus,#conversejs .list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}#conversejs .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}#conversejs .list-group-item-secondary{color:#383d41;background-color:#d6d8db}#conversejs .list-group-item-secondary.list-group-item-action:focus,#conversejs .list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}#conversejs .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}#conversejs .list-group-item-success{color:#155724;background-color:#c3e6cb}#conversejs .list-group-item-success.list-group-item-action:focus,#conversejs .list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}#conversejs .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}#conversejs .list-group-item-info{color:#0c5460;background-color:#bee5eb}#conversejs .list-group-item-info.list-group-item-action:focus,#conversejs .list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}#conversejs .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}#conversejs .list-group-item-warning{color:#856404;background-color:#ffeeba}#conversejs .list-group-item-warning.list-group-item-action:focus,#conversejs .list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}#conversejs .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}#conversejs .list-group-item-danger{color:#721c24;background-color:#f5c6cb}#conversejs .list-group-item-danger.list-group-item-action:focus,#conversejs .list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}#conversejs .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}#conversejs .list-group-item-light{color:#818182;background-color:#fdfdfe}#conversejs .list-group-item-light.list-group-item-action:focus,#conversejs .list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}#conversejs .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}#conversejs .list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}#conversejs .list-group-item-dark.list-group-item-action:focus,#conversejs .list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}#conversejs .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}#conversejs .close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}#conversejs .close:hover{color:#000;text-decoration:none}#conversejs .close:not(:disabled):not(.disabled):focus,#conversejs .close:not(:disabled):not(.disabled):hover{opacity:.75}#conversejs button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}#conversejs a.close.disabled{pointer-events:none}#conversejs .modal-open{overflow:hidden}#conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}#conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}#conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade #conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade #conversejs .modal-dialog{transition:none}}.modal.show #conversejs .modal-dialog{transform:none}.modal.modal-static #conversejs .modal-dialog{transform:scale(1.02)}#conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}#conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}#conversejs .modal-dialog-scrollable .modal-footer,#conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}#conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}#conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}#conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}#conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}#conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}#conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}#conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}#conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}#conversejs .modal-backdrop.fade{opacity:0}#conversejs .modal-backdrop.show{opacity:.5}#conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}#conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}#conversejs .modal-title{margin-bottom:0;line-height:1.5}#conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}#conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}#conversejs .modal-footer>*{margin:.25rem}#conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){#conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}#conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}#conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}#conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}#conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem)}#conversejs .modal-sm{max-width:300px}}@media (min-width:992px){#conversejs .modal-lg,#conversejs .modal-xl{max-width:800px}}@media (min-width:1200px){#conversejs .modal-xl{max-width:1140px}}#conversejs .tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}#conversejs .tooltip.show{opacity:.9}#conversejs .tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}#conversejs .tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}#conversejs .bs-tooltip-auto[x-placement^=top],#conversejs .bs-tooltip-top{padding:.4rem 0}#conversejs .bs-tooltip-auto[x-placement^=top] .arrow,#conversejs .bs-tooltip-top .arrow{bottom:0}#conversejs .bs-tooltip-auto[x-placement^=top] .arrow::before,#conversejs .bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}#conversejs .bs-tooltip-auto[x-placement^=right],#conversejs .bs-tooltip-right{padding:0 .4rem}#conversejs .bs-tooltip-auto[x-placement^=right] .arrow,#conversejs .bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}#conversejs .bs-tooltip-auto[x-placement^=right] .arrow::before,#conversejs .bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}#conversejs .bs-tooltip-auto[x-placement^=bottom],#conversejs .bs-tooltip-bottom{padding:.4rem 0}#conversejs .bs-tooltip-auto[x-placement^=bottom] .arrow,#conversejs .bs-tooltip-bottom .arrow{top:0}#conversejs .bs-tooltip-auto[x-placement^=bottom] .arrow::before,#conversejs .bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}#conversejs .bs-tooltip-auto[x-placement^=left],#conversejs .bs-tooltip-left{padding:0 .4rem}#conversejs .bs-tooltip-auto[x-placement^=left] .arrow,#conversejs .bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}#conversejs .bs-tooltip-auto[x-placement^=left] .arrow::before,#conversejs .bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}#conversejs .tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}#conversejs .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}#conversejs .popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}#conversejs .popover .arrow::after,#conversejs .popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}#conversejs .bs-popover-auto[x-placement^=top],#conversejs .bs-popover-top{margin-bottom:.5rem}#conversejs .bs-popover-auto[x-placement^=top]>.arrow,#conversejs .bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}#conversejs .bs-popover-auto[x-placement^=top]>.arrow::before,#conversejs .bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=top]>.arrow::after,#conversejs .bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}#conversejs .bs-popover-auto[x-placement^=right],#conversejs .bs-popover-right{margin-left:.5rem}#conversejs .bs-popover-auto[x-placement^=right]>.arrow,#conversejs .bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}#conversejs .bs-popover-auto[x-placement^=right]>.arrow::before,#conversejs .bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=right]>.arrow::after,#conversejs .bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}#conversejs .bs-popover-auto[x-placement^=bottom],#conversejs .bs-popover-bottom{margin-top:.5rem}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow,#conversejs .bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::before,#conversejs .bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::after,#conversejs .bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}#conversejs .bs-popover-auto[x-placement^=bottom] .popover-header::before,#conversejs .bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}#conversejs .bs-popover-auto[x-placement^=left],#conversejs .bs-popover-left{margin-right:.5rem}#conversejs .bs-popover-auto[x-placement^=left]>.arrow,#conversejs .bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}#conversejs .bs-popover-auto[x-placement^=left]>.arrow::before,#conversejs .bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}#conversejs .bs-popover-auto[x-placement^=left]>.arrow::after,#conversejs .bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}#conversejs .popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}#conversejs .popover-header:empty{display:none}#conversejs .popover-body{padding:.5rem .75rem;color:#212529}#conversejs .align-baseline{vertical-align:baseline!important}#conversejs .align-top{vertical-align:top!important}#conversejs .align-middle{vertical-align:middle!important}#conversejs .align-bottom{vertical-align:bottom!important}#conversejs .align-text-bottom{vertical-align:text-bottom!important}#conversejs .align-text-top{vertical-align:text-top!important}#conversejs .bg-primary{background-color:#007bff!important}#conversejs a.bg-primary:focus,#conversejs a.bg-primary:hover,#conversejs button.bg-primary:focus,#conversejs button.bg-primary:hover{background-color:#0062cc!important}#conversejs .bg-secondary{background-color:#6c757d!important}#conversejs a.bg-secondary:focus,#conversejs a.bg-secondary:hover,#conversejs button.bg-secondary:focus,#conversejs button.bg-secondary:hover{background-color:#545b62!important}#conversejs .bg-success{background-color:#28a745!important}#conversejs a.bg-success:focus,#conversejs a.bg-success:hover,#conversejs button.bg-success:focus,#conversejs button.bg-success:hover{background-color:#1e7e34!important}#conversejs .bg-info{background-color:#17a2b8!important}#conversejs a.bg-info:focus,#conversejs a.bg-info:hover,#conversejs button.bg-info:focus,#conversejs button.bg-info:hover{background-color:#117a8b!important}#conversejs .bg-warning{background-color:#ffc107!important}#conversejs a.bg-warning:focus,#conversejs a.bg-warning:hover,#conversejs button.bg-warning:focus,#conversejs button.bg-warning:hover{background-color:#d39e00!important}#conversejs .bg-danger{background-color:#dc3545!important}#conversejs a.bg-danger:focus,#conversejs a.bg-danger:hover,#conversejs button.bg-danger:focus,#conversejs button.bg-danger:hover{background-color:#bd2130!important}#conversejs .bg-light{background-color:#f8f9fa!important}#conversejs a.bg-light:focus,#conversejs a.bg-light:hover,#conversejs button.bg-light:focus,#conversejs button.bg-light:hover{background-color:#dae0e5!important}#conversejs .bg-dark{background-color:#343a40!important}#conversejs a.bg-dark:focus,#conversejs a.bg-dark:hover,#conversejs button.bg-dark:focus,#conversejs button.bg-dark:hover{background-color:#1d2124!important}#conversejs .bg-white{background-color:#fff!important}#conversejs .bg-transparent{background-color:transparent!important}#conversejs .border{border:1px solid #dee2e6!important}#conversejs .border-top{border-top:1px solid #dee2e6!important}#conversejs .border-right{border-right:1px solid #dee2e6!important}#conversejs .border-bottom{border-bottom:1px solid #dee2e6!important}#conversejs .border-left{border-left:1px solid #dee2e6!important}#conversejs .border-0{border:0!important}#conversejs .border-top-0{border-top:0!important}#conversejs .border-right-0{border-right:0!important}#conversejs .border-bottom-0{border-bottom:0!important}#conversejs .border-left-0{border-left:0!important}#conversejs .border-primary{border-color:#007bff!important}#conversejs .border-secondary{border-color:#6c757d!important}#conversejs .border-success{border-color:#28a745!important}#conversejs .border-info{border-color:#17a2b8!important}#conversejs .border-warning{border-color:#ffc107!important}#conversejs .border-danger{border-color:#dc3545!important}#conversejs .border-light{border-color:#f8f9fa!important}#conversejs .border-dark{border-color:#343a40!important}#conversejs .border-white{border-color:#fff!important}#conversejs .rounded-sm{border-radius:.2rem!important}#conversejs .rounded{border-radius:.25rem!important}#conversejs .rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}#conversejs .rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}#conversejs .rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}#conversejs .rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}#conversejs .rounded-lg{border-radius:.3rem!important}#conversejs .rounded-circle{border-radius:50%!important}#conversejs .rounded-pill{border-radius:50rem!important}#conversejs .rounded-0{border-radius:0!important}#conversejs .clearfix::after{display:block;clear:both;content:""}#conversejs .d-none{display:none!important}#conversejs .d-inline{display:inline!important}#conversejs .d-inline-block{display:inline-block!important}#conversejs .d-block{display:block!important}#conversejs .d-table{display:table!important}#conversejs .d-table-row{display:table-row!important}#conversejs .d-table-cell{display:table-cell!important}#conversejs .d-flex{display:flex!important}#conversejs .d-inline-flex{display:inline-flex!important}@media (min-width:576px){#conversejs .d-sm-none{display:none!important}#conversejs .d-sm-inline{display:inline!important}#conversejs .d-sm-inline-block{display:inline-block!important}#conversejs .d-sm-block{display:block!important}#conversejs .d-sm-table{display:table!important}#conversejs .d-sm-table-row{display:table-row!important}#conversejs .d-sm-table-cell{display:table-cell!important}#conversejs .d-sm-flex{display:flex!important}#conversejs .d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){#conversejs .d-md-none{display:none!important}#conversejs .d-md-inline{display:inline!important}#conversejs .d-md-inline-block{display:inline-block!important}#conversejs .d-md-block{display:block!important}#conversejs .d-md-table{display:table!important}#conversejs .d-md-table-row{display:table-row!important}#conversejs .d-md-table-cell{display:table-cell!important}#conversejs .d-md-flex{display:flex!important}#conversejs .d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){#conversejs .d-lg-none{display:none!important}#conversejs .d-lg-inline{display:inline!important}#conversejs .d-lg-inline-block{display:inline-block!important}#conversejs .d-lg-block{display:block!important}#conversejs .d-lg-table{display:table!important}#conversejs .d-lg-table-row{display:table-row!important}#conversejs .d-lg-table-cell{display:table-cell!important}#conversejs .d-lg-flex{display:flex!important}#conversejs .d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){#conversejs .d-xl-none{display:none!important}#conversejs .d-xl-inline{display:inline!important}#conversejs .d-xl-inline-block{display:inline-block!important}#conversejs .d-xl-block{display:block!important}#conversejs .d-xl-table{display:table!important}#conversejs .d-xl-table-row{display:table-row!important}#conversejs .d-xl-table-cell{display:table-cell!important}#conversejs .d-xl-flex{display:flex!important}#conversejs .d-xl-inline-flex{display:inline-flex!important}}@media print{#conversejs .d-print-none{display:none!important}#conversejs .d-print-inline{display:inline!important}#conversejs .d-print-inline-block{display:inline-block!important}#conversejs .d-print-block{display:block!important}#conversejs .d-print-table{display:table!important}#conversejs .d-print-table-row{display:table-row!important}#conversejs .d-print-table-cell{display:table-cell!important}#conversejs .d-print-flex{display:flex!important}#conversejs .d-print-inline-flex{display:inline-flex!important}}#conversejs .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}#conversejs .embed-responsive::before{display:block;content:""}#conversejs .embed-responsive .embed-responsive-item,#conversejs .embed-responsive embed,#conversejs .embed-responsive iframe,#conversejs .embed-responsive object,#conversejs .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}#conversejs .embed-responsive-21by9::before{padding-top:42.85714%}#conversejs .embed-responsive-16by9::before{padding-top:56.25%}#conversejs .embed-responsive-4by3::before{padding-top:75%}#conversejs .embed-responsive-1by1::before{padding-top:100%}#conversejs .flex-row{flex-direction:row!important}#conversejs .flex-column{flex-direction:column!important}#conversejs .flex-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-wrap{flex-wrap:wrap!important}#conversejs .flex-nowrap{flex-wrap:nowrap!important}#conversejs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-fill{flex:1 1 auto!important}#conversejs .flex-grow-0{flex-grow:0!important}#conversejs .flex-grow-1{flex-grow:1!important}#conversejs .flex-shrink-0{flex-shrink:0!important}#conversejs .flex-shrink-1{flex-shrink:1!important}#conversejs .justify-content-start{justify-content:flex-start!important}#conversejs .justify-content-end{justify-content:flex-end!important}#conversejs .justify-content-center{justify-content:center!important}#conversejs .justify-content-between{justify-content:space-between!important}#conversejs .justify-content-around{justify-content:space-around!important}#conversejs .align-items-start{align-items:flex-start!important}#conversejs .align-items-end{align-items:flex-end!important}#conversejs .align-items-center{align-items:center!important}#conversejs .align-items-baseline{align-items:baseline!important}#conversejs .align-items-stretch{align-items:stretch!important}#conversejs .align-content-start{align-content:flex-start!important}#conversejs .align-content-end{align-content:flex-end!important}#conversejs .align-content-center{align-content:center!important}#conversejs .align-content-between{align-content:space-between!important}#conversejs .align-content-around{align-content:space-around!important}#conversejs .align-content-stretch{align-content:stretch!important}#conversejs .align-self-auto{align-self:auto!important}#conversejs .align-self-start{align-self:flex-start!important}#conversejs .align-self-end{align-self:flex-end!important}#conversejs .align-self-center{align-self:center!important}#conversejs .align-self-baseline{align-self:baseline!important}#conversejs .align-self-stretch{align-self:stretch!important}@media (min-width:576px){#conversejs .flex-sm-row{flex-direction:row!important}#conversejs .flex-sm-column{flex-direction:column!important}#conversejs .flex-sm-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-sm-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-sm-wrap{flex-wrap:wrap!important}#conversejs .flex-sm-nowrap{flex-wrap:nowrap!important}#conversejs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-sm-fill{flex:1 1 auto!important}#conversejs .flex-sm-grow-0{flex-grow:0!important}#conversejs .flex-sm-grow-1{flex-grow:1!important}#conversejs .flex-sm-shrink-0{flex-shrink:0!important}#conversejs .flex-sm-shrink-1{flex-shrink:1!important}#conversejs .justify-content-sm-start{justify-content:flex-start!important}#conversejs .justify-content-sm-end{justify-content:flex-end!important}#conversejs .justify-content-sm-center{justify-content:center!important}#conversejs .justify-content-sm-between{justify-content:space-between!important}#conversejs .justify-content-sm-around{justify-content:space-around!important}#conversejs .align-items-sm-start{align-items:flex-start!important}#conversejs .align-items-sm-end{align-items:flex-end!important}#conversejs .align-items-sm-center{align-items:center!important}#conversejs .align-items-sm-baseline{align-items:baseline!important}#conversejs .align-items-sm-stretch{align-items:stretch!important}#conversejs .align-content-sm-start{align-content:flex-start!important}#conversejs .align-content-sm-end{align-content:flex-end!important}#conversejs .align-content-sm-center{align-content:center!important}#conversejs .align-content-sm-between{align-content:space-between!important}#conversejs .align-content-sm-around{align-content:space-around!important}#conversejs .align-content-sm-stretch{align-content:stretch!important}#conversejs .align-self-sm-auto{align-self:auto!important}#conversejs .align-self-sm-start{align-self:flex-start!important}#conversejs .align-self-sm-end{align-self:flex-end!important}#conversejs .align-self-sm-center{align-self:center!important}#conversejs .align-self-sm-baseline{align-self:baseline!important}#conversejs .align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){#conversejs .flex-md-row{flex-direction:row!important}#conversejs .flex-md-column{flex-direction:column!important}#conversejs .flex-md-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-md-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-md-wrap{flex-wrap:wrap!important}#conversejs .flex-md-nowrap{flex-wrap:nowrap!important}#conversejs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-md-fill{flex:1 1 auto!important}#conversejs .flex-md-grow-0{flex-grow:0!important}#conversejs .flex-md-grow-1{flex-grow:1!important}#conversejs .flex-md-shrink-0{flex-shrink:0!important}#conversejs .flex-md-shrink-1{flex-shrink:1!important}#conversejs .justify-content-md-start{justify-content:flex-start!important}#conversejs .justify-content-md-end{justify-content:flex-end!important}#conversejs .justify-content-md-center{justify-content:center!important}#conversejs .justify-content-md-between{justify-content:space-between!important}#conversejs .justify-content-md-around{justify-content:space-around!important}#conversejs .align-items-md-start{align-items:flex-start!important}#conversejs .align-items-md-end{align-items:flex-end!important}#conversejs .align-items-md-center{align-items:center!important}#conversejs .align-items-md-baseline{align-items:baseline!important}#conversejs .align-items-md-stretch{align-items:stretch!important}#conversejs .align-content-md-start{align-content:flex-start!important}#conversejs .align-content-md-end{align-content:flex-end!important}#conversejs .align-content-md-center{align-content:center!important}#conversejs .align-content-md-between{align-content:space-between!important}#conversejs .align-content-md-around{align-content:space-around!important}#conversejs .align-content-md-stretch{align-content:stretch!important}#conversejs .align-self-md-auto{align-self:auto!important}#conversejs .align-self-md-start{align-self:flex-start!important}#conversejs .align-self-md-end{align-self:flex-end!important}#conversejs .align-self-md-center{align-self:center!important}#conversejs .align-self-md-baseline{align-self:baseline!important}#conversejs .align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){#conversejs .flex-lg-row{flex-direction:row!important}#conversejs .flex-lg-column{flex-direction:column!important}#conversejs .flex-lg-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-lg-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-lg-wrap{flex-wrap:wrap!important}#conversejs .flex-lg-nowrap{flex-wrap:nowrap!important}#conversejs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-lg-fill{flex:1 1 auto!important}#conversejs .flex-lg-grow-0{flex-grow:0!important}#conversejs .flex-lg-grow-1{flex-grow:1!important}#conversejs .flex-lg-shrink-0{flex-shrink:0!important}#conversejs .flex-lg-shrink-1{flex-shrink:1!important}#conversejs .justify-content-lg-start{justify-content:flex-start!important}#conversejs .justify-content-lg-end{justify-content:flex-end!important}#conversejs .justify-content-lg-center{justify-content:center!important}#conversejs .justify-content-lg-between{justify-content:space-between!important}#conversejs .justify-content-lg-around{justify-content:space-around!important}#conversejs .align-items-lg-start{align-items:flex-start!important}#conversejs .align-items-lg-end{align-items:flex-end!important}#conversejs .align-items-lg-center{align-items:center!important}#conversejs .align-items-lg-baseline{align-items:baseline!important}#conversejs .align-items-lg-stretch{align-items:stretch!important}#conversejs .align-content-lg-start{align-content:flex-start!important}#conversejs .align-content-lg-end{align-content:flex-end!important}#conversejs .align-content-lg-center{align-content:center!important}#conversejs .align-content-lg-between{align-content:space-between!important}#conversejs .align-content-lg-around{align-content:space-around!important}#conversejs .align-content-lg-stretch{align-content:stretch!important}#conversejs .align-self-lg-auto{align-self:auto!important}#conversejs .align-self-lg-start{align-self:flex-start!important}#conversejs .align-self-lg-end{align-self:flex-end!important}#conversejs .align-self-lg-center{align-self:center!important}#conversejs .align-self-lg-baseline{align-self:baseline!important}#conversejs .align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){#conversejs .flex-xl-row{flex-direction:row!important}#conversejs .flex-xl-column{flex-direction:column!important}#conversejs .flex-xl-row-reverse{flex-direction:row-reverse!important}#conversejs .flex-xl-column-reverse{flex-direction:column-reverse!important}#conversejs .flex-xl-wrap{flex-wrap:wrap!important}#conversejs .flex-xl-nowrap{flex-wrap:nowrap!important}#conversejs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}#conversejs .flex-xl-fill{flex:1 1 auto!important}#conversejs .flex-xl-grow-0{flex-grow:0!important}#conversejs .flex-xl-grow-1{flex-grow:1!important}#conversejs .flex-xl-shrink-0{flex-shrink:0!important}#conversejs .flex-xl-shrink-1{flex-shrink:1!important}#conversejs .justify-content-xl-start{justify-content:flex-start!important}#conversejs .justify-content-xl-end{justify-content:flex-end!important}#conversejs .justify-content-xl-center{justify-content:center!important}#conversejs .justify-content-xl-between{justify-content:space-between!important}#conversejs .justify-content-xl-around{justify-content:space-around!important}#conversejs .align-items-xl-start{align-items:flex-start!important}#conversejs .align-items-xl-end{align-items:flex-end!important}#conversejs .align-items-xl-center{align-items:center!important}#conversejs .align-items-xl-baseline{align-items:baseline!important}#conversejs .align-items-xl-stretch{align-items:stretch!important}#conversejs .align-content-xl-start{align-content:flex-start!important}#conversejs .align-content-xl-end{align-content:flex-end!important}#conversejs .align-content-xl-center{align-content:center!important}#conversejs .align-content-xl-between{align-content:space-between!important}#conversejs .align-content-xl-around{align-content:space-around!important}#conversejs .align-content-xl-stretch{align-content:stretch!important}#conversejs .align-self-xl-auto{align-self:auto!important}#conversejs .align-self-xl-start{align-self:flex-start!important}#conversejs .align-self-xl-end{align-self:flex-end!important}#conversejs .align-self-xl-center{align-self:center!important}#conversejs .align-self-xl-baseline{align-self:baseline!important}#conversejs .align-self-xl-stretch{align-self:stretch!important}}#conversejs .float-left{float:left!important}#conversejs .float-right{float:right!important}#conversejs .float-none{float:none!important}@media (min-width:576px){#conversejs .float-sm-left{float:left!important}#conversejs .float-sm-right{float:right!important}#conversejs .float-sm-none{float:none!important}}@media (min-width:768px){#conversejs .float-md-left{float:left!important}#conversejs .float-md-right{float:right!important}#conversejs .float-md-none{float:none!important}}@media (min-width:992px){#conversejs .float-lg-left{float:left!important}#conversejs .float-lg-right{float:right!important}#conversejs .float-lg-none{float:none!important}}@media (min-width:1200px){#conversejs .float-xl-left{float:left!important}#conversejs .float-xl-right{float:right!important}#conversejs .float-xl-none{float:none!important}}#conversejs .overflow-auto{overflow:auto!important}#conversejs .overflow-hidden{overflow:hidden!important}#conversejs .position-static{position:static!important}#conversejs .position-relative{position:relative!important}#conversejs .position-absolute{position:absolute!important}#conversejs .position-fixed{position:fixed!important}#conversejs .position-sticky{position:-webkit-sticky!important;position:sticky!important}#conversejs .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}#conversejs .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){#conversejs .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}#conversejs .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#conversejs .sr-only-focusable:active,#conversejs .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}#conversejs .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}#conversejs .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}#conversejs .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}#conversejs .shadow-none{box-shadow:none!important}#conversejs .w-25{width:25%!important}#conversejs .w-50{width:50%!important}#conversejs .w-75{width:75%!important}#conversejs .w-100{width:100%!important}#conversejs .w-auto{width:auto!important}#conversejs .h-25{height:25%!important}#conversejs .h-50{height:50%!important}#conversejs .h-75{height:75%!important}#conversejs .h-100{height:100%!important}#conversejs .h-auto{height:auto!important}#conversejs .mw-100{max-width:100%!important}#conversejs .mh-100{max-height:100%!important}#conversejs .min-vw-100{min-width:100vw!important}#conversejs .min-vh-100{min-height:100vh!important}#conversejs .vw-100{width:100vw!important}#conversejs .vh-100{height:100vh!important}#conversejs .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}#conversejs .m-0{margin:0!important}#conversejs .mt-0,#conversejs .my-0{margin-top:0!important}#conversejs .mr-0,#conversejs .mx-0{margin-right:0!important}#conversejs .mb-0,#conversejs .my-0{margin-bottom:0!important}#conversejs .ml-0,#conversejs .mx-0{margin-left:0!important}#conversejs .m-1{margin:.25rem!important}#conversejs .mt-1,#conversejs .my-1{margin-top:.25rem!important}#conversejs .mr-1,#conversejs .mx-1{margin-right:.25rem!important}#conversejs .mb-1,#conversejs .my-1{margin-bottom:.25rem!important}#conversejs .ml-1,#conversejs .mx-1{margin-left:.25rem!important}#conversejs .m-2{margin:.5rem!important}#conversejs .mt-2,#conversejs .my-2{margin-top:.5rem!important}#conversejs .mr-2,#conversejs .mx-2{margin-right:.5rem!important}#conversejs .mb-2,#conversejs .my-2{margin-bottom:.5rem!important}#conversejs .ml-2,#conversejs .mx-2{margin-left:.5rem!important}#conversejs .m-3{margin:1rem!important}#conversejs .mt-3,#conversejs .my-3{margin-top:1rem!important}#conversejs .mr-3,#conversejs .mx-3{margin-right:1rem!important}#conversejs .mb-3,#conversejs .my-3{margin-bottom:1rem!important}#conversejs .ml-3,#conversejs .mx-3{margin-left:1rem!important}#conversejs .m-4{margin:1.5rem!important}#conversejs .mt-4,#conversejs .my-4{margin-top:1.5rem!important}#conversejs .mr-4,#conversejs .mx-4{margin-right:1.5rem!important}#conversejs .mb-4,#conversejs .my-4{margin-bottom:1.5rem!important}#conversejs .ml-4,#conversejs .mx-4{margin-left:1.5rem!important}#conversejs .m-5{margin:3rem!important}#conversejs .mt-5,#conversejs .my-5{margin-top:3rem!important}#conversejs .mr-5,#conversejs .mx-5{margin-right:3rem!important}#conversejs .mb-5,#conversejs .my-5{margin-bottom:3rem!important}#conversejs .ml-5,#conversejs .mx-5{margin-left:3rem!important}#conversejs .p-0{padding:0!important}#conversejs .pt-0,#conversejs .py-0{padding-top:0!important}#conversejs .pr-0,#conversejs .px-0{padding-right:0!important}#conversejs .pb-0,#conversejs .py-0{padding-bottom:0!important}#conversejs .pl-0,#conversejs .px-0{padding-left:0!important}#conversejs .p-1{padding:.25rem!important}#conversejs .pt-1,#conversejs .py-1{padding-top:.25rem!important}#conversejs .pr-1,#conversejs .px-1{padding-right:.25rem!important}#conversejs .pb-1,#conversejs .py-1{padding-bottom:.25rem!important}#conversejs .pl-1,#conversejs .px-1{padding-left:.25rem!important}#conversejs .p-2{padding:.5rem!important}#conversejs .pt-2,#conversejs .py-2{padding-top:.5rem!important}#conversejs .pr-2,#conversejs .px-2{padding-right:.5rem!important}#conversejs .pb-2,#conversejs .py-2{padding-bottom:.5rem!important}#conversejs .pl-2,#conversejs .px-2{padding-left:.5rem!important}#conversejs .p-3{padding:1rem!important}#conversejs .pt-3,#conversejs .py-3{padding-top:1rem!important}#conversejs .pr-3,#conversejs .px-3{padding-right:1rem!important}#conversejs .pb-3,#conversejs .py-3{padding-bottom:1rem!important}#conversejs .pl-3,#conversejs .px-3{padding-left:1rem!important}#conversejs .p-4{padding:1.5rem!important}#conversejs .pt-4,#conversejs .py-4{padding-top:1.5rem!important}#conversejs .pr-4,#conversejs .px-4{padding-right:1.5rem!important}#conversejs .pb-4,#conversejs .py-4{padding-bottom:1.5rem!important}#conversejs .pl-4,#conversejs .px-4{padding-left:1.5rem!important}#conversejs .p-5{padding:3rem!important}#conversejs .pt-5,#conversejs .py-5{padding-top:3rem!important}#conversejs .pr-5,#conversejs .px-5{padding-right:3rem!important}#conversejs .pb-5,#conversejs .py-5{padding-bottom:3rem!important}#conversejs .pl-5,#conversejs .px-5{padding-left:3rem!important}#conversejs .m-n1{margin:-.25rem!important}#conversejs .mt-n1,#conversejs .my-n1{margin-top:-.25rem!important}#conversejs .mr-n1,#conversejs .mx-n1{margin-right:-.25rem!important}#conversejs .mb-n1,#conversejs .my-n1{margin-bottom:-.25rem!important}#conversejs .ml-n1,#conversejs .mx-n1{margin-left:-.25rem!important}#conversejs .m-n2{margin:-.5rem!important}#conversejs .mt-n2,#conversejs .my-n2{margin-top:-.5rem!important}#conversejs .mr-n2,#conversejs .mx-n2{margin-right:-.5rem!important}#conversejs .mb-n2,#conversejs .my-n2{margin-bottom:-.5rem!important}#conversejs .ml-n2,#conversejs .mx-n2{margin-left:-.5rem!important}#conversejs .m-n3{margin:-1rem!important}#conversejs .mt-n3,#conversejs .my-n3{margin-top:-1rem!important}#conversejs .mr-n3,#conversejs .mx-n3{margin-right:-1rem!important}#conversejs .mb-n3,#conversejs .my-n3{margin-bottom:-1rem!important}#conversejs .ml-n3,#conversejs .mx-n3{margin-left:-1rem!important}#conversejs .m-n4{margin:-1.5rem!important}#conversejs .mt-n4,#conversejs .my-n4{margin-top:-1.5rem!important}#conversejs .mr-n4,#conversejs .mx-n4{margin-right:-1.5rem!important}#conversejs .mb-n4,#conversejs .my-n4{margin-bottom:-1.5rem!important}#conversejs .ml-n4,#conversejs .mx-n4{margin-left:-1.5rem!important}#conversejs .m-n5{margin:-3rem!important}#conversejs .mt-n5,#conversejs .my-n5{margin-top:-3rem!important}#conversejs .mr-n5,#conversejs .mx-n5{margin-right:-3rem!important}#conversejs .mb-n5,#conversejs .my-n5{margin-bottom:-3rem!important}#conversejs .ml-n5,#conversejs .mx-n5{margin-left:-3rem!important}#conversejs .m-auto{margin:auto!important}#conversejs .mt-auto,#conversejs .my-auto{margin-top:auto!important}#conversejs .mr-auto,#conversejs .mx-auto{margin-right:auto!important}#conversejs .mb-auto,#conversejs .my-auto{margin-bottom:auto!important}#conversejs .ml-auto,#conversejs .mx-auto{margin-left:auto!important}@media (min-width:576px){#conversejs .m-sm-0{margin:0!important}#conversejs .mt-sm-0,#conversejs .my-sm-0{margin-top:0!important}#conversejs .mr-sm-0,#conversejs .mx-sm-0{margin-right:0!important}#conversejs .mb-sm-0,#conversejs .my-sm-0{margin-bottom:0!important}#conversejs .ml-sm-0,#conversejs .mx-sm-0{margin-left:0!important}#conversejs .m-sm-1{margin:.25rem!important}#conversejs .mt-sm-1,#conversejs .my-sm-1{margin-top:.25rem!important}#conversejs .mr-sm-1,#conversejs .mx-sm-1{margin-right:.25rem!important}#conversejs .mb-sm-1,#conversejs .my-sm-1{margin-bottom:.25rem!important}#conversejs .ml-sm-1,#conversejs .mx-sm-1{margin-left:.25rem!important}#conversejs .m-sm-2{margin:.5rem!important}#conversejs .mt-sm-2,#conversejs .my-sm-2{margin-top:.5rem!important}#conversejs .mr-sm-2,#conversejs .mx-sm-2{margin-right:.5rem!important}#conversejs .mb-sm-2,#conversejs .my-sm-2{margin-bottom:.5rem!important}#conversejs .ml-sm-2,#conversejs .mx-sm-2{margin-left:.5rem!important}#conversejs .m-sm-3{margin:1rem!important}#conversejs .mt-sm-3,#conversejs .my-sm-3{margin-top:1rem!important}#conversejs .mr-sm-3,#conversejs .mx-sm-3{margin-right:1rem!important}#conversejs .mb-sm-3,#conversejs .my-sm-3{margin-bottom:1rem!important}#conversejs .ml-sm-3,#conversejs .mx-sm-3{margin-left:1rem!important}#conversejs .m-sm-4{margin:1.5rem!important}#conversejs .mt-sm-4,#conversejs .my-sm-4{margin-top:1.5rem!important}#conversejs .mr-sm-4,#conversejs .mx-sm-4{margin-right:1.5rem!important}#conversejs .mb-sm-4,#conversejs .my-sm-4{margin-bottom:1.5rem!important}#conversejs .ml-sm-4,#conversejs .mx-sm-4{margin-left:1.5rem!important}#conversejs .m-sm-5{margin:3rem!important}#conversejs .mt-sm-5,#conversejs .my-sm-5{margin-top:3rem!important}#conversejs .mr-sm-5,#conversejs .mx-sm-5{margin-right:3rem!important}#conversejs .mb-sm-5,#conversejs .my-sm-5{margin-bottom:3rem!important}#conversejs .ml-sm-5,#conversejs .mx-sm-5{margin-left:3rem!important}#conversejs .p-sm-0{padding:0!important}#conversejs .pt-sm-0,#conversejs .py-sm-0{padding-top:0!important}#conversejs .pr-sm-0,#conversejs .px-sm-0{padding-right:0!important}#conversejs .pb-sm-0,#conversejs .py-sm-0{padding-bottom:0!important}#conversejs .pl-sm-0,#conversejs .px-sm-0{padding-left:0!important}#conversejs .p-sm-1{padding:.25rem!important}#conversejs .pt-sm-1,#conversejs .py-sm-1{padding-top:.25rem!important}#conversejs .pr-sm-1,#conversejs .px-sm-1{padding-right:.25rem!important}#conversejs .pb-sm-1,#conversejs .py-sm-1{padding-bottom:.25rem!important}#conversejs .pl-sm-1,#conversejs .px-sm-1{padding-left:.25rem!important}#conversejs .p-sm-2{padding:.5rem!important}#conversejs .pt-sm-2,#conversejs .py-sm-2{padding-top:.5rem!important}#conversejs .pr-sm-2,#conversejs .px-sm-2{padding-right:.5rem!important}#conversejs .pb-sm-2,#conversejs .py-sm-2{padding-bottom:.5rem!important}#conversejs .pl-sm-2,#conversejs .px-sm-2{padding-left:.5rem!important}#conversejs .p-sm-3{padding:1rem!important}#conversejs .pt-sm-3,#conversejs .py-sm-3{padding-top:1rem!important}#conversejs .pr-sm-3,#conversejs .px-sm-3{padding-right:1rem!important}#conversejs .pb-sm-3,#conversejs .py-sm-3{padding-bottom:1rem!important}#conversejs .pl-sm-3,#conversejs .px-sm-3{padding-left:1rem!important}#conversejs .p-sm-4{padding:1.5rem!important}#conversejs .pt-sm-4,#conversejs .py-sm-4{padding-top:1.5rem!important}#conversejs .pr-sm-4,#conversejs .px-sm-4{padding-right:1.5rem!important}#conversejs .pb-sm-4,#conversejs .py-sm-4{padding-bottom:1.5rem!important}#conversejs .pl-sm-4,#conversejs .px-sm-4{padding-left:1.5rem!important}#conversejs .p-sm-5{padding:3rem!important}#conversejs .pt-sm-5,#conversejs .py-sm-5{padding-top:3rem!important}#conversejs .pr-sm-5,#conversejs .px-sm-5{padding-right:3rem!important}#conversejs .pb-sm-5,#conversejs .py-sm-5{padding-bottom:3rem!important}#conversejs .pl-sm-5,#conversejs .px-sm-5{padding-left:3rem!important}#conversejs .m-sm-n1{margin:-.25rem!important}#conversejs .mt-sm-n1,#conversejs .my-sm-n1{margin-top:-.25rem!important}#conversejs .mr-sm-n1,#conversejs .mx-sm-n1{margin-right:-.25rem!important}#conversejs .mb-sm-n1,#conversejs .my-sm-n1{margin-bottom:-.25rem!important}#conversejs .ml-sm-n1,#conversejs .mx-sm-n1{margin-left:-.25rem!important}#conversejs .m-sm-n2{margin:-.5rem!important}#conversejs .mt-sm-n2,#conversejs .my-sm-n2{margin-top:-.5rem!important}#conversejs .mr-sm-n2,#conversejs .mx-sm-n2{margin-right:-.5rem!important}#conversejs .mb-sm-n2,#conversejs .my-sm-n2{margin-bottom:-.5rem!important}#conversejs .ml-sm-n2,#conversejs .mx-sm-n2{margin-left:-.5rem!important}#conversejs .m-sm-n3{margin:-1rem!important}#conversejs .mt-sm-n3,#conversejs .my-sm-n3{margin-top:-1rem!important}#conversejs .mr-sm-n3,#conversejs .mx-sm-n3{margin-right:-1rem!important}#conversejs .mb-sm-n3,#conversejs .my-sm-n3{margin-bottom:-1rem!important}#conversejs .ml-sm-n3,#conversejs .mx-sm-n3{margin-left:-1rem!important}#conversejs .m-sm-n4{margin:-1.5rem!important}#conversejs .mt-sm-n4,#conversejs .my-sm-n4{margin-top:-1.5rem!important}#conversejs .mr-sm-n4,#conversejs .mx-sm-n4{margin-right:-1.5rem!important}#conversejs .mb-sm-n4,#conversejs .my-sm-n4{margin-bottom:-1.5rem!important}#conversejs .ml-sm-n4,#conversejs .mx-sm-n4{margin-left:-1.5rem!important}#conversejs .m-sm-n5{margin:-3rem!important}#conversejs .mt-sm-n5,#conversejs .my-sm-n5{margin-top:-3rem!important}#conversejs .mr-sm-n5,#conversejs .mx-sm-n5{margin-right:-3rem!important}#conversejs .mb-sm-n5,#conversejs .my-sm-n5{margin-bottom:-3rem!important}#conversejs .ml-sm-n5,#conversejs .mx-sm-n5{margin-left:-3rem!important}#conversejs .m-sm-auto{margin:auto!important}#conversejs .mt-sm-auto,#conversejs .my-sm-auto{margin-top:auto!important}#conversejs .mr-sm-auto,#conversejs .mx-sm-auto{margin-right:auto!important}#conversejs .mb-sm-auto,#conversejs .my-sm-auto{margin-bottom:auto!important}#conversejs .ml-sm-auto,#conversejs .mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){#conversejs .m-md-0{margin:0!important}#conversejs .mt-md-0,#conversejs .my-md-0{margin-top:0!important}#conversejs .mr-md-0,#conversejs .mx-md-0{margin-right:0!important}#conversejs .mb-md-0,#conversejs .my-md-0{margin-bottom:0!important}#conversejs .ml-md-0,#conversejs .mx-md-0{margin-left:0!important}#conversejs .m-md-1{margin:.25rem!important}#conversejs .mt-md-1,#conversejs .my-md-1{margin-top:.25rem!important}#conversejs .mr-md-1,#conversejs .mx-md-1{margin-right:.25rem!important}#conversejs .mb-md-1,#conversejs .my-md-1{margin-bottom:.25rem!important}#conversejs .ml-md-1,#conversejs .mx-md-1{margin-left:.25rem!important}#conversejs .m-md-2{margin:.5rem!important}#conversejs .mt-md-2,#conversejs .my-md-2{margin-top:.5rem!important}#conversejs .mr-md-2,#conversejs .mx-md-2{margin-right:.5rem!important}#conversejs .mb-md-2,#conversejs .my-md-2{margin-bottom:.5rem!important}#conversejs .ml-md-2,#conversejs .mx-md-2{margin-left:.5rem!important}#conversejs .m-md-3{margin:1rem!important}#conversejs .mt-md-3,#conversejs .my-md-3{margin-top:1rem!important}#conversejs .mr-md-3,#conversejs .mx-md-3{margin-right:1rem!important}#conversejs .mb-md-3,#conversejs .my-md-3{margin-bottom:1rem!important}#conversejs .ml-md-3,#conversejs .mx-md-3{margin-left:1rem!important}#conversejs .m-md-4{margin:1.5rem!important}#conversejs .mt-md-4,#conversejs .my-md-4{margin-top:1.5rem!important}#conversejs .mr-md-4,#conversejs .mx-md-4{margin-right:1.5rem!important}#conversejs .mb-md-4,#conversejs .my-md-4{margin-bottom:1.5rem!important}#conversejs .ml-md-4,#conversejs .mx-md-4{margin-left:1.5rem!important}#conversejs .m-md-5{margin:3rem!important}#conversejs .mt-md-5,#conversejs .my-md-5{margin-top:3rem!important}#conversejs .mr-md-5,#conversejs .mx-md-5{margin-right:3rem!important}#conversejs .mb-md-5,#conversejs .my-md-5{margin-bottom:3rem!important}#conversejs .ml-md-5,#conversejs .mx-md-5{margin-left:3rem!important}#conversejs .p-md-0{padding:0!important}#conversejs .pt-md-0,#conversejs .py-md-0{padding-top:0!important}#conversejs .pr-md-0,#conversejs .px-md-0{padding-right:0!important}#conversejs .pb-md-0,#conversejs .py-md-0{padding-bottom:0!important}#conversejs .pl-md-0,#conversejs .px-md-0{padding-left:0!important}#conversejs .p-md-1{padding:.25rem!important}#conversejs .pt-md-1,#conversejs .py-md-1{padding-top:.25rem!important}#conversejs .pr-md-1,#conversejs .px-md-1{padding-right:.25rem!important}#conversejs .pb-md-1,#conversejs .py-md-1{padding-bottom:.25rem!important}#conversejs .pl-md-1,#conversejs .px-md-1{padding-left:.25rem!important}#conversejs .p-md-2{padding:.5rem!important}#conversejs .pt-md-2,#conversejs .py-md-2{padding-top:.5rem!important}#conversejs .pr-md-2,#conversejs .px-md-2{padding-right:.5rem!important}#conversejs .pb-md-2,#conversejs .py-md-2{padding-bottom:.5rem!important}#conversejs .pl-md-2,#conversejs .px-md-2{padding-left:.5rem!important}#conversejs .p-md-3{padding:1rem!important}#conversejs .pt-md-3,#conversejs .py-md-3{padding-top:1rem!important}#conversejs .pr-md-3,#conversejs .px-md-3{padding-right:1rem!important}#conversejs .pb-md-3,#conversejs .py-md-3{padding-bottom:1rem!important}#conversejs .pl-md-3,#conversejs .px-md-3{padding-left:1rem!important}#conversejs .p-md-4{padding:1.5rem!important}#conversejs .pt-md-4,#conversejs .py-md-4{padding-top:1.5rem!important}#conversejs .pr-md-4,#conversejs .px-md-4{padding-right:1.5rem!important}#conversejs .pb-md-4,#conversejs .py-md-4{padding-bottom:1.5rem!important}#conversejs .pl-md-4,#conversejs .px-md-4{padding-left:1.5rem!important}#conversejs .p-md-5{padding:3rem!important}#conversejs .pt-md-5,#conversejs .py-md-5{padding-top:3rem!important}#conversejs .pr-md-5,#conversejs .px-md-5{padding-right:3rem!important}#conversejs .pb-md-5,#conversejs .py-md-5{padding-bottom:3rem!important}#conversejs .pl-md-5,#conversejs .px-md-5{padding-left:3rem!important}#conversejs .m-md-n1{margin:-.25rem!important}#conversejs .mt-md-n1,#conversejs .my-md-n1{margin-top:-.25rem!important}#conversejs .mr-md-n1,#conversejs .mx-md-n1{margin-right:-.25rem!important}#conversejs .mb-md-n1,#conversejs .my-md-n1{margin-bottom:-.25rem!important}#conversejs .ml-md-n1,#conversejs .mx-md-n1{margin-left:-.25rem!important}#conversejs .m-md-n2{margin:-.5rem!important}#conversejs .mt-md-n2,#conversejs .my-md-n2{margin-top:-.5rem!important}#conversejs .mr-md-n2,#conversejs .mx-md-n2{margin-right:-.5rem!important}#conversejs .mb-md-n2,#conversejs .my-md-n2{margin-bottom:-.5rem!important}#conversejs .ml-md-n2,#conversejs .mx-md-n2{margin-left:-.5rem!important}#conversejs .m-md-n3{margin:-1rem!important}#conversejs .mt-md-n3,#conversejs .my-md-n3{margin-top:-1rem!important}#conversejs .mr-md-n3,#conversejs .mx-md-n3{margin-right:-1rem!important}#conversejs .mb-md-n3,#conversejs .my-md-n3{margin-bottom:-1rem!important}#conversejs .ml-md-n3,#conversejs .mx-md-n3{margin-left:-1rem!important}#conversejs .m-md-n4{margin:-1.5rem!important}#conversejs .mt-md-n4,#conversejs .my-md-n4{margin-top:-1.5rem!important}#conversejs .mr-md-n4,#conversejs .mx-md-n4{margin-right:-1.5rem!important}#conversejs .mb-md-n4,#conversejs .my-md-n4{margin-bottom:-1.5rem!important}#conversejs .ml-md-n4,#conversejs .mx-md-n4{margin-left:-1.5rem!important}#conversejs .m-md-n5{margin:-3rem!important}#conversejs .mt-md-n5,#conversejs .my-md-n5{margin-top:-3rem!important}#conversejs .mr-md-n5,#conversejs .mx-md-n5{margin-right:-3rem!important}#conversejs .mb-md-n5,#conversejs .my-md-n5{margin-bottom:-3rem!important}#conversejs .ml-md-n5,#conversejs .mx-md-n5{margin-left:-3rem!important}#conversejs .m-md-auto{margin:auto!important}#conversejs .mt-md-auto,#conversejs .my-md-auto{margin-top:auto!important}#conversejs .mr-md-auto,#conversejs .mx-md-auto{margin-right:auto!important}#conversejs .mb-md-auto,#conversejs .my-md-auto{margin-bottom:auto!important}#conversejs .ml-md-auto,#conversejs .mx-md-auto{margin-left:auto!important}}@media (min-width:992px){#conversejs .m-lg-0{margin:0!important}#conversejs .mt-lg-0,#conversejs .my-lg-0{margin-top:0!important}#conversejs .mr-lg-0,#conversejs .mx-lg-0{margin-right:0!important}#conversejs .mb-lg-0,#conversejs .my-lg-0{margin-bottom:0!important}#conversejs .ml-lg-0,#conversejs .mx-lg-0{margin-left:0!important}#conversejs .m-lg-1{margin:.25rem!important}#conversejs .mt-lg-1,#conversejs .my-lg-1{margin-top:.25rem!important}#conversejs .mr-lg-1,#conversejs .mx-lg-1{margin-right:.25rem!important}#conversejs .mb-lg-1,#conversejs .my-lg-1{margin-bottom:.25rem!important}#conversejs .ml-lg-1,#conversejs .mx-lg-1{margin-left:.25rem!important}#conversejs .m-lg-2{margin:.5rem!important}#conversejs .mt-lg-2,#conversejs .my-lg-2{margin-top:.5rem!important}#conversejs .mr-lg-2,#conversejs .mx-lg-2{margin-right:.5rem!important}#conversejs .mb-lg-2,#conversejs .my-lg-2{margin-bottom:.5rem!important}#conversejs .ml-lg-2,#conversejs .mx-lg-2{margin-left:.5rem!important}#conversejs .m-lg-3{margin:1rem!important}#conversejs .mt-lg-3,#conversejs .my-lg-3{margin-top:1rem!important}#conversejs .mr-lg-3,#conversejs .mx-lg-3{margin-right:1rem!important}#conversejs .mb-lg-3,#conversejs .my-lg-3{margin-bottom:1rem!important}#conversejs .ml-lg-3,#conversejs .mx-lg-3{margin-left:1rem!important}#conversejs .m-lg-4{margin:1.5rem!important}#conversejs .mt-lg-4,#conversejs .my-lg-4{margin-top:1.5rem!important}#conversejs .mr-lg-4,#conversejs .mx-lg-4{margin-right:1.5rem!important}#conversejs .mb-lg-4,#conversejs .my-lg-4{margin-bottom:1.5rem!important}#conversejs .ml-lg-4,#conversejs .mx-lg-4{margin-left:1.5rem!important}#conversejs .m-lg-5{margin:3rem!important}#conversejs .mt-lg-5,#conversejs .my-lg-5{margin-top:3rem!important}#conversejs .mr-lg-5,#conversejs .mx-lg-5{margin-right:3rem!important}#conversejs .mb-lg-5,#conversejs .my-lg-5{margin-bottom:3rem!important}#conversejs .ml-lg-5,#conversejs .mx-lg-5{margin-left:3rem!important}#conversejs .p-lg-0{padding:0!important}#conversejs .pt-lg-0,#conversejs .py-lg-0{padding-top:0!important}#conversejs .pr-lg-0,#conversejs .px-lg-0{padding-right:0!important}#conversejs .pb-lg-0,#conversejs .py-lg-0{padding-bottom:0!important}#conversejs .pl-lg-0,#conversejs .px-lg-0{padding-left:0!important}#conversejs .p-lg-1{padding:.25rem!important}#conversejs .pt-lg-1,#conversejs .py-lg-1{padding-top:.25rem!important}#conversejs .pr-lg-1,#conversejs .px-lg-1{padding-right:.25rem!important}#conversejs .pb-lg-1,#conversejs .py-lg-1{padding-bottom:.25rem!important}#conversejs .pl-lg-1,#conversejs .px-lg-1{padding-left:.25rem!important}#conversejs .p-lg-2{padding:.5rem!important}#conversejs .pt-lg-2,#conversejs .py-lg-2{padding-top:.5rem!important}#conversejs .pr-lg-2,#conversejs .px-lg-2{padding-right:.5rem!important}#conversejs .pb-lg-2,#conversejs .py-lg-2{padding-bottom:.5rem!important}#conversejs .pl-lg-2,#conversejs .px-lg-2{padding-left:.5rem!important}#conversejs .p-lg-3{padding:1rem!important}#conversejs .pt-lg-3,#conversejs .py-lg-3{padding-top:1rem!important}#conversejs .pr-lg-3,#conversejs .px-lg-3{padding-right:1rem!important}#conversejs .pb-lg-3,#conversejs .py-lg-3{padding-bottom:1rem!important}#conversejs .pl-lg-3,#conversejs .px-lg-3{padding-left:1rem!important}#conversejs .p-lg-4{padding:1.5rem!important}#conversejs .pt-lg-4,#conversejs .py-lg-4{padding-top:1.5rem!important}#conversejs .pr-lg-4,#conversejs .px-lg-4{padding-right:1.5rem!important}#conversejs .pb-lg-4,#conversejs .py-lg-4{padding-bottom:1.5rem!important}#conversejs .pl-lg-4,#conversejs .px-lg-4{padding-left:1.5rem!important}#conversejs .p-lg-5{padding:3rem!important}#conversejs .pt-lg-5,#conversejs .py-lg-5{padding-top:3rem!important}#conversejs .pr-lg-5,#conversejs .px-lg-5{padding-right:3rem!important}#conversejs .pb-lg-5,#conversejs .py-lg-5{padding-bottom:3rem!important}#conversejs .pl-lg-5,#conversejs .px-lg-5{padding-left:3rem!important}#conversejs .m-lg-n1{margin:-.25rem!important}#conversejs .mt-lg-n1,#conversejs .my-lg-n1{margin-top:-.25rem!important}#conversejs .mr-lg-n1,#conversejs .mx-lg-n1{margin-right:-.25rem!important}#conversejs .mb-lg-n1,#conversejs .my-lg-n1{margin-bottom:-.25rem!important}#conversejs .ml-lg-n1,#conversejs .mx-lg-n1{margin-left:-.25rem!important}#conversejs .m-lg-n2{margin:-.5rem!important}#conversejs .mt-lg-n2,#conversejs .my-lg-n2{margin-top:-.5rem!important}#conversejs .mr-lg-n2,#conversejs .mx-lg-n2{margin-right:-.5rem!important}#conversejs .mb-lg-n2,#conversejs .my-lg-n2{margin-bottom:-.5rem!important}#conversejs .ml-lg-n2,#conversejs .mx-lg-n2{margin-left:-.5rem!important}#conversejs .m-lg-n3{margin:-1rem!important}#conversejs .mt-lg-n3,#conversejs .my-lg-n3{margin-top:-1rem!important}#conversejs .mr-lg-n3,#conversejs .mx-lg-n3{margin-right:-1rem!important}#conversejs .mb-lg-n3,#conversejs .my-lg-n3{margin-bottom:-1rem!important}#conversejs .ml-lg-n3,#conversejs .mx-lg-n3{margin-left:-1rem!important}#conversejs .m-lg-n4{margin:-1.5rem!important}#conversejs .mt-lg-n4,#conversejs .my-lg-n4{margin-top:-1.5rem!important}#conversejs .mr-lg-n4,#conversejs .mx-lg-n4{margin-right:-1.5rem!important}#conversejs .mb-lg-n4,#conversejs .my-lg-n4{margin-bottom:-1.5rem!important}#conversejs .ml-lg-n4,#conversejs .mx-lg-n4{margin-left:-1.5rem!important}#conversejs .m-lg-n5{margin:-3rem!important}#conversejs .mt-lg-n5,#conversejs .my-lg-n5{margin-top:-3rem!important}#conversejs .mr-lg-n5,#conversejs .mx-lg-n5{margin-right:-3rem!important}#conversejs .mb-lg-n5,#conversejs .my-lg-n5{margin-bottom:-3rem!important}#conversejs .ml-lg-n5,#conversejs .mx-lg-n5{margin-left:-3rem!important}#conversejs .m-lg-auto{margin:auto!important}#conversejs .mt-lg-auto,#conversejs .my-lg-auto{margin-top:auto!important}#conversejs .mr-lg-auto,#conversejs .mx-lg-auto{margin-right:auto!important}#conversejs .mb-lg-auto,#conversejs .my-lg-auto{margin-bottom:auto!important}#conversejs .ml-lg-auto,#conversejs .mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){#conversejs .m-xl-0{margin:0!important}#conversejs .mt-xl-0,#conversejs .my-xl-0{margin-top:0!important}#conversejs .mr-xl-0,#conversejs .mx-xl-0{margin-right:0!important}#conversejs .mb-xl-0,#conversejs .my-xl-0{margin-bottom:0!important}#conversejs .ml-xl-0,#conversejs .mx-xl-0{margin-left:0!important}#conversejs .m-xl-1{margin:.25rem!important}#conversejs .mt-xl-1,#conversejs .my-xl-1{margin-top:.25rem!important}#conversejs .mr-xl-1,#conversejs .mx-xl-1{margin-right:.25rem!important}#conversejs .mb-xl-1,#conversejs .my-xl-1{margin-bottom:.25rem!important}#conversejs .ml-xl-1,#conversejs .mx-xl-1{margin-left:.25rem!important}#conversejs .m-xl-2{margin:.5rem!important}#conversejs .mt-xl-2,#conversejs .my-xl-2{margin-top:.5rem!important}#conversejs .mr-xl-2,#conversejs .mx-xl-2{margin-right:.5rem!important}#conversejs .mb-xl-2,#conversejs .my-xl-2{margin-bottom:.5rem!important}#conversejs .ml-xl-2,#conversejs .mx-xl-2{margin-left:.5rem!important}#conversejs .m-xl-3{margin:1rem!important}#conversejs .mt-xl-3,#conversejs .my-xl-3{margin-top:1rem!important}#conversejs .mr-xl-3,#conversejs .mx-xl-3{margin-right:1rem!important}#conversejs .mb-xl-3,#conversejs .my-xl-3{margin-bottom:1rem!important}#conversejs .ml-xl-3,#conversejs .mx-xl-3{margin-left:1rem!important}#conversejs .m-xl-4{margin:1.5rem!important}#conversejs .mt-xl-4,#conversejs .my-xl-4{margin-top:1.5rem!important}#conversejs .mr-xl-4,#conversejs .mx-xl-4{margin-right:1.5rem!important}#conversejs .mb-xl-4,#conversejs .my-xl-4{margin-bottom:1.5rem!important}#conversejs .ml-xl-4,#conversejs .mx-xl-4{margin-left:1.5rem!important}#conversejs .m-xl-5{margin:3rem!important}#conversejs .mt-xl-5,#conversejs .my-xl-5{margin-top:3rem!important}#conversejs .mr-xl-5,#conversejs .mx-xl-5{margin-right:3rem!important}#conversejs .mb-xl-5,#conversejs .my-xl-5{margin-bottom:3rem!important}#conversejs .ml-xl-5,#conversejs .mx-xl-5{margin-left:3rem!important}#conversejs .p-xl-0{padding:0!important}#conversejs .pt-xl-0,#conversejs .py-xl-0{padding-top:0!important}#conversejs .pr-xl-0,#conversejs .px-xl-0{padding-right:0!important}#conversejs .pb-xl-0,#conversejs .py-xl-0{padding-bottom:0!important}#conversejs .pl-xl-0,#conversejs .px-xl-0{padding-left:0!important}#conversejs .p-xl-1{padding:.25rem!important}#conversejs .pt-xl-1,#conversejs .py-xl-1{padding-top:.25rem!important}#conversejs .pr-xl-1,#conversejs .px-xl-1{padding-right:.25rem!important}#conversejs .pb-xl-1,#conversejs .py-xl-1{padding-bottom:.25rem!important}#conversejs .pl-xl-1,#conversejs .px-xl-1{padding-left:.25rem!important}#conversejs .p-xl-2{padding:.5rem!important}#conversejs .pt-xl-2,#conversejs .py-xl-2{padding-top:.5rem!important}#conversejs .pr-xl-2,#conversejs .px-xl-2{padding-right:.5rem!important}#conversejs .pb-xl-2,#conversejs .py-xl-2{padding-bottom:.5rem!important}#conversejs .pl-xl-2,#conversejs .px-xl-2{padding-left:.5rem!important}#conversejs .p-xl-3{padding:1rem!important}#conversejs .pt-xl-3,#conversejs .py-xl-3{padding-top:1rem!important}#conversejs .pr-xl-3,#conversejs .px-xl-3{padding-right:1rem!important}#conversejs .pb-xl-3,#conversejs .py-xl-3{padding-bottom:1rem!important}#conversejs .pl-xl-3,#conversejs .px-xl-3{padding-left:1rem!important}#conversejs .p-xl-4{padding:1.5rem!important}#conversejs .pt-xl-4,#conversejs .py-xl-4{padding-top:1.5rem!important}#conversejs .pr-xl-4,#conversejs .px-xl-4{padding-right:1.5rem!important}#conversejs .pb-xl-4,#conversejs .py-xl-4{padding-bottom:1.5rem!important}#conversejs .pl-xl-4,#conversejs .px-xl-4{padding-left:1.5rem!important}#conversejs .p-xl-5{padding:3rem!important}#conversejs .pt-xl-5,#conversejs .py-xl-5{padding-top:3rem!important}#conversejs .pr-xl-5,#conversejs .px-xl-5{padding-right:3rem!important}#conversejs .pb-xl-5,#conversejs .py-xl-5{padding-bottom:3rem!important}#conversejs .pl-xl-5,#conversejs .px-xl-5{padding-left:3rem!important}#conversejs .m-xl-n1{margin:-.25rem!important}#conversejs .mt-xl-n1,#conversejs .my-xl-n1{margin-top:-.25rem!important}#conversejs .mr-xl-n1,#conversejs .mx-xl-n1{margin-right:-.25rem!important}#conversejs .mb-xl-n1,#conversejs .my-xl-n1{margin-bottom:-.25rem!important}#conversejs .ml-xl-n1,#conversejs .mx-xl-n1{margin-left:-.25rem!important}#conversejs .m-xl-n2{margin:-.5rem!important}#conversejs .mt-xl-n2,#conversejs .my-xl-n2{margin-top:-.5rem!important}#conversejs .mr-xl-n2,#conversejs .mx-xl-n2{margin-right:-.5rem!important}#conversejs .mb-xl-n2,#conversejs .my-xl-n2{margin-bottom:-.5rem!important}#conversejs .ml-xl-n2,#conversejs .mx-xl-n2{margin-left:-.5rem!important}#conversejs .m-xl-n3{margin:-1rem!important}#conversejs .mt-xl-n3,#conversejs .my-xl-n3{margin-top:-1rem!important}#conversejs .mr-xl-n3,#conversejs .mx-xl-n3{margin-right:-1rem!important}#conversejs .mb-xl-n3,#conversejs .my-xl-n3{margin-bottom:-1rem!important}#conversejs .ml-xl-n3,#conversejs .mx-xl-n3{margin-left:-1rem!important}#conversejs .m-xl-n4{margin:-1.5rem!important}#conversejs .mt-xl-n4,#conversejs .my-xl-n4{margin-top:-1.5rem!important}#conversejs .mr-xl-n4,#conversejs .mx-xl-n4{margin-right:-1.5rem!important}#conversejs .mb-xl-n4,#conversejs .my-xl-n4{margin-bottom:-1.5rem!important}#conversejs .ml-xl-n4,#conversejs .mx-xl-n4{margin-left:-1.5rem!important}#conversejs .m-xl-n5{margin:-3rem!important}#conversejs .mt-xl-n5,#conversejs .my-xl-n5{margin-top:-3rem!important}#conversejs .mr-xl-n5,#conversejs .mx-xl-n5{margin-right:-3rem!important}#conversejs .mb-xl-n5,#conversejs .my-xl-n5{margin-bottom:-3rem!important}#conversejs .ml-xl-n5,#conversejs .mx-xl-n5{margin-left:-3rem!important}#conversejs .m-xl-auto{margin:auto!important}#conversejs .mt-xl-auto,#conversejs .my-xl-auto{margin-top:auto!important}#conversejs .mr-xl-auto,#conversejs .mx-xl-auto{margin-right:auto!important}#conversejs .mb-xl-auto,#conversejs .my-xl-auto{margin-bottom:auto!important}#conversejs .ml-xl-auto,#conversejs .mx-xl-auto{margin-left:auto!important}}#conversejs .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}#conversejs .text-justify{text-align:justify!important}#conversejs .text-wrap{white-space:normal!important}#conversejs .text-nowrap{white-space:nowrap!important}#conversejs .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs .text-left{text-align:left!important}#conversejs .text-right{text-align:right!important}#conversejs .text-center{text-align:center!important}@media (min-width:576px){#conversejs .text-sm-left{text-align:left!important}#conversejs .text-sm-right{text-align:right!important}#conversejs .text-sm-center{text-align:center!important}}@media (min-width:768px){#conversejs .text-md-left{text-align:left!important}#conversejs .text-md-right{text-align:right!important}#conversejs .text-md-center{text-align:center!important}}@media (min-width:992px){#conversejs .text-lg-left{text-align:left!important}#conversejs .text-lg-right{text-align:right!important}#conversejs .text-lg-center{text-align:center!important}}@media (min-width:1200px){#conversejs .text-xl-left{text-align:left!important}#conversejs .text-xl-right{text-align:right!important}#conversejs .text-xl-center{text-align:center!important}}#conversejs .text-lowercase{text-transform:lowercase!important}#conversejs .text-uppercase{text-transform:uppercase!important}#conversejs .text-capitalize{text-transform:capitalize!important}#conversejs .font-weight-light{font-weight:300!important}#conversejs .font-weight-lighter{font-weight:lighter!important}#conversejs .font-weight-normal{font-weight:400!important}#conversejs .font-weight-bold{font-weight:700!important}#conversejs .font-weight-bolder{font-weight:bolder!important}#conversejs .font-italic{font-style:italic!important}#conversejs .text-white{color:#fff!important}#conversejs .text-primary{color:#007bff!important}#conversejs a.text-primary:focus,#conversejs a.text-primary:hover{color:#0056b3!important}#conversejs .text-secondary{color:#6c757d!important}#conversejs a.text-secondary:focus,#conversejs a.text-secondary:hover{color:#494f54!important}#conversejs .text-success{color:#28a745!important}#conversejs a.text-success:focus,#conversejs a.text-success:hover{color:#19692c!important}#conversejs .text-info{color:#17a2b8!important}#conversejs a.text-info:focus,#conversejs a.text-info:hover{color:#0f6674!important}#conversejs .text-warning{color:#ffc107!important}#conversejs a.text-warning:focus,#conversejs a.text-warning:hover{color:#ba8b00!important}#conversejs .text-danger{color:#dc3545!important}#conversejs a.text-danger:focus,#conversejs a.text-danger:hover{color:#a71d2a!important}#conversejs .text-light{color:#f8f9fa!important}#conversejs a.text-light:focus,#conversejs a.text-light:hover{color:#cbd3da!important}#conversejs .text-dark{color:#343a40!important}#conversejs a.text-dark:focus,#conversejs a.text-dark:hover{color:#121416!important}#conversejs .text-body{color:#212529!important}#conversejs .text-muted{color:#6c757d!important}#conversejs .text-black-50{color:rgba(0,0,0,.5)!important}#conversejs .text-white-50{color:rgba(255,255,255,.5)!important}#conversejs .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#conversejs .text-decoration-none{text-decoration:none!important}#conversejs .text-break{word-break:break-word!important;overflow-wrap:break-word!important}#conversejs .text-reset{color:inherit!important}#conversejs .visible{visibility:visible!important}#conversejs .invisible{visibility:hidden!important}@font-face{font-family:Baumans;font-style:normal;font-weight:400;src:local("Baumans Regular"),local("Baumans-Regular"),url(webfonts/baumans.ttf) format("truetype")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:local("Muli Regular"),local("Muli-Regular"),url(webfonts/muli.ttf) format("truetype")}@font-face{font-family:ConverseFontAwesomeBrands;font-style:normal;font-weight:400;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-brands-400.woff2) format("woff2"),url(webfonts/fa-brands-400.woff) format("woff"),url(webfonts/fa-brands-400.ttf) format("truetype"),url(webfonts/fa-brands-400.svg#fontawesome) format("svg")}@font-face{font-family:ConverseFontAwesomeRegular;font-style:normal;font-weight:400;src:url(webfonts/fa-regular-400.eot);src:url(webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-regular-400.woff2) format("woff2"),url(webfonts/fa-regular-400.woff) format("woff"),url(webfonts/fa-regular-400.ttf) format("truetype"),url(webfonts/fa-regular-400.svg#fontawesome) format("svg");font-weight:400;font-style:normal}@font-face{font-family:ConverseFontAwesomeSolid;font-style:normal;font-weight:900;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-solid-900.svg#fontawesome) format("svg"),url(webfonts/fa-solid-900.woff2) format("woff2"),url(webfonts/fa-solid-900.woff) format("woff"),url(webfonts/fa-solid-900.ttf) format("truetype")}.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}#conversejs converse-icon:before,.converse-website converse-icon:before{content:none!important}#conversejs .far:not(converse-icon),.converse-website .far:not(converse-icon){font-family:ConverseFontAwesomeRegular!important;font-weight:400}#conversejs .fa:not(converse-icon),#conversejs .fas:not(converse-icon),.converse-website .fa:not(converse-icon),.converse-website .fas:not(converse-icon){font-family:ConverseFontAwesomeSolid!important;font-weight:900}#conversejs .fab:not(converse-icon),.converse-website .fab:not(converse-icon){font-family:ConverseFontAwesomeBrands}#conversejs .fa:not(converse-icon),#conversejs .fab:not(converse-icon),#conversejs .far:not(converse-icon),#conversejs .fas:not(converse-icon),.converse-website .fa:not(converse-icon),.converse-website .fab:not(converse-icon),.converse-website .far:not(converse-icon),.converse-website .fas:not(converse-icon){display:inline-block;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#conversejs .fa-info-circle,.converse-website .fa-info-circle{height:1em}#conversejs,#conversejs-bg,.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:'Muli',normal;--branding-font:'Baumans',cursive;--heading-display:block;--heading-color:white;--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}#conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}body.converse-fullscreen{margin:0;background-color:var(--global-background-color)}#conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media (min-width:768px){#conversejs-bg .converse-brand__padding{flex:0 0 33.33333%;max-width:33.33333%}}@media (min-width:992px){#conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media (min-width:1200px){#conversejs-bg .converse-brand__padding{flex:0 0 16.66667%;max-width:16.66667%}}#conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media (min-width:768px){#conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.66667%;max-width:66.66667%}}@media (min-width:992px){#conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media (min-width:1200px){#conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.33333%;max-width:83.33333%}}#conversejs-bg .converse-brand__heading svg{margin-top:.3em}#conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}#conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px}#conversejs .subdued,#conversejs-bg .subdued{opacity:.35}#conversejs{bottom:0;height:100%;position:fixed;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);color:var(--text-color);font-family:var(--normal-font);font-size:var(--font-size);direction:ltr;z-index:1031}#conversejs textarea:disabled{background-color:#eee!important}#conversejs .fit-content{width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important;max-width:-webkit-fit-content!important;max-width:-moz-fit-content!important;max-width:fit-content!important}#conversejs .nopadding{padding:0!important}#conversejs.converse-overlayed>.row{flex-direction:row-reverse}#conversejs.converse-fullscreen .converse-chatboxes,#conversejs.converse-mobile .converse-chatboxes{width:100vw;left:-15px}#conversejs.converse-overlayed{height:3em}#conversejs.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}#conversejs.converse-embedded *,#conversejs.converse-embedded :after,#conversejs.converse-embedded :before{box-sizing:border-box}#conversejs converse-brand-heading{text-align:center}#conversejs .brand-heading{display:inline-flex;flex-direction:row;align-items:flex-start;font-family:var(--branding-font);color:var(--link-color);margin-bottom:.75em}#conversejs .brand-heading .brand-name-wrapper{display:flex;white-space:nowrap;margin:auto}#conversejs .brand-heading .brand-name{color:var(--link-color);display:flex;flex-direction:column;align-items:center;margin-top:-.25em}#conversejs .brand-heading .brand-name .byline{font-family:var(--heading-font);font-size:.3em;margin-bottom:.75em;margin-left:-2.7em;opacity:.55;word-spacing:5px}#conversejs .brand-heading .brand-subtitle{color:var(--text-color)}#conversejs .brand-heading .brand-name__text{font-size:120%;vertical-align:text-bottom}#conversejs .brand-heading .converse-svg-logo{color:var(--link-color);height:1.5em;margin-right:.25em;margin-bottom:-.25em}#conversejs .brand-heading .converse-svg-logo .cls-1{isolation:isolate}#conversejs .brand-heading .converse-svg-logo .cls-2{opacity:.5;mix-blend-mode:multiply}#conversejs .brand-heading .converse-svg-logo .cls-3{fill:var(--link-color)}#conversejs .brand-heading .converse-svg-logo .cls-4{fill:var(--link-color)}#conversejs .brand-heading--inverse .converse-svg-logo{margin-bottom:0;margin-top:-.2em}#conversejs .brand-heading--inverse .byline{margin:0;font-family:var(--heading-font);font-size:.25em;opacity:.55;margin-left:-7em;word-spacing:5px}#conversejs .dropdown-item{padding:.5rem 1rem}#conversejs .dropdown-item .fa{width:1.25em;margin-right:.75rem}#conversejs .dropdown-item.selected,#conversejs .dropdown-item:active{color:#fff!important;background-color:var(--list-item-open-color)}#conversejs .dropdown-item.selected .fa,#conversejs .dropdown-item:active .fa{color:#fff!important}#conversejs .popover{position:fixed}#conversejs .converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}#conversejs ::-moz-placeholder{color:var(--subdued-color)}#conversejs :-ms-input-placeholder{color:var(--subdued-color)}#conversejs ::placeholder{color:var(--subdued-color)}#conversejs ::-moz-selection{background-color:var(--highlight-color)}#conversejs ::selection{background-color:var(--highlight-color)}#conversejs ::-moz-selection{background-color:var(--highlight-color)}@media screen and (max-width:480px){#conversejs{margin:0;right:10px;left:10px;bottom:5px}}@media screen and (max-height:450px){#conversejs{margin:0;right:10px;left:10px;bottom:5px}}#conversejs ul li{height:auto}#conversejs a,#conversejs article,#conversejs aside,#conversejs audio,#conversejs blockquote,#conversejs caption,#conversejs dd,#conversejs details,#conversejs div,#conversejs dl,#conversejs dt,#conversejs em,#conversejs embed,#conversejs fieldset,#conversejs figcaption,#conversejs figure,#conversejs footer,#conversejs form,#conversejs h1,#conversejs h2,#conversejs h3,#conversejs h4,#conversejs h5,#conversejs h6,#conversejs header,#conversejs hgroup,#conversejs img,#conversejs legend,#conversejs li,#conversejs mark,#conversejs menu,#conversejs nav,#conversejs ol,#conversejs output,#conversejs p,#conversejs pre,#conversejs ruby,#conversejs section,#conversejs span,#conversejs strong,#conversejs summary,#conversejs table,#conversejs tbody,#conversejs td,#conversejs tfoot,#conversejs th,#conversejs thead,#conversejs time,#conversejs tr,#conversejs ul,#conversejs video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}#conversejs button,#conversejs input[type=button],#conversejs input[type=password],#conversejs input[type=submit],#conversejs input[type=text],#conversejs textarea{font-size:var(--font-size);min-height:0}#conversejs strong{font-weight:700}#conversejs em{font-style:italic}#conversejs ol,#conversejs ul{list-style:none}#conversejs li{height:10px}#conversejs dl,#conversejs ol,#conversejs ul{font:inherit;margin:0}#conversejs a{cursor:pointer}#conversejs a,#conversejs a:not([href]):not([tabindex]),#conversejs a:visited{text-decoration:none;color:var(--link-color);text-shadow:none;cursor:pointer}#conversejs a:hover,#conversejs a:not([href]):not([tabindex]):hover,#conversejs a:visited:hover{color:var(--link-hover-color);text-decoration:none;text-shadow:none}#conversejs a.fa,#conversejs a.far,#conversejs a.fas,#conversejs a:not([href]):not([tabindex]).fa,#conversejs a:not([href]):not([tabindex]).far,#conversejs a:not([href]):not([tabindex]).fas,#conversejs a:visited.fa,#conversejs a:visited.far,#conversejs a:visited.fas{color:var(--subdued-color)}#conversejs a.fa:hover,#conversejs a.far:hover,#conversejs a.fas:hover,#conversejs a:not([href]):not([tabindex]).fa:hover,#conversejs a:not([href]):not([tabindex]).far:hover,#conversejs a:not([href]):not([tabindex]).fas:hover,#conversejs a:visited.fa:hover,#conversejs a:visited.far:hover,#conversejs a:visited.fas:hover{color:var(--gray-color)}#conversejs svg{border-radius:var(--chatbox-border-radius)}#conversejs .fa,#conversejs .far,#conversejs .fas{color:var(--subdued-color)}#conversejs .fa:hover,#conversejs .far:hover,#conversejs .fas:hover{color:var(--gray-color)}#conversejs q{quotes:"“" "”" "‘" "’"}#conversejs q.reason{display:inline}#conversejs q:before{content:open-quote}#conversejs q:after{content:close-quote}#conversejs .helptext{font-size:var(--font-size-tiny);color:var(--text-color-lighten-15-percent)}#conversejs .selected{color:var(--link-color)!important}#conversejs .circle{border-radius:50%}#conversejs .badge{line-height:1;font-weight:400;font-size:90%}#conversejs .btn{font-weight:400;color:#fff}#conversejs .btn .fa,#conversejs .btn .far,#conversejs .btn .fas{color:#fff;margin-right:.5em}#conversejs .btn .fa.only-icon,#conversejs .btn .far.only-icon,#conversejs .btn .fas.only-icon{margin-right:0}#conversejs .no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}#conversejs .fade-in{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs .visible{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs .hidden{opacity:0!important;display:none!important}#conversejs .fade-out{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}#conversejs .collapsed{height:0!important;overflow:hidden!important;padding:0!important}#conversejs .locked{padding-right:22px}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}#conversejs .spinner{-webkit-animation:spin 2s infinite,linear;animation:spin 2s infinite,linear;width:1em;display:block;text-align:center;padding:.5em 0;font-size:24px}#conversejs .left{float:left}#conversejs .right{float:right}#conversejs .centered{text-align:center;display:block;margin:auto}#conversejs .hor_centered{width:100%;text-align:center;display:block;margin:0 auto;clear:both}#conversejs .error{color:var(--error-color)!important}#conversejs .info{color:var(--info-color)}#conversejs .reg-feedback{font-size:85%;margin-bottom:1em}#conversejs #converse-login .conn-feedback,#conversejs .reg-feedback{display:block;text-align:center;width:100%}#conversejs .avatar{border-radius:var(--avatar-border-radius);border:var(--avatar-border);background-color:var(--avatar-background-color)}#conversejs .avatar-autocomplete{margin-right:.5em;vertical-align:middle}#conversejs .activated{display:block!important}#conversejs .form-help{color:var(--subdued-color);font-size:90%}#conversejs .form-control--labeled{margin-top:.5em}#conversejs .nav-pills .nav-link.active,#conversejs .nav-pills .show>.nav-link{background-color:var(--primary-color)}#conversejs .list-group-item.active{background-color:var(--primary-color);border-color:var(--primary-color-dark)}#conversejs .badge{text-shadow:none;color:#fff}#conversejs .badge-light{color:var(--text-color)}#conversejs .badge-primary,#conversejs .btn-primary,#conversejs .button-primary{background-color:var(--primary-color);border-color:transparent}#conversejs .badge-primary:active,#conversejs .badge-primary:focus,#conversejs .badge-primary:hover,#conversejs .btn-primary:active,#conversejs .btn-primary:focus,#conversejs .btn-primary:hover,#conversejs .button-primary:active,#conversejs .button-primary:focus,#conversejs .button-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}#conversejs .btn--transparent{background:0 0;border:none}#conversejs .btn-circle{width:30px;height:30px;text-align:center;padding:.5em 0;font-size:var(--font-size-small);line-height:1.428571429;border-radius:50%}#conversejs .btn.fa{color:#fff!important}#conversejs .badge-groupchat{background-color:var(--chatroom-badge-color);border-color:transparent}#conversejs .badge-groupchat:hover{background-color:var(--chatroom-badge-hover-color);border-color:transparent}#conversejs .badge-groupchat.active{background-color:var(--chatroom-badge-hover-color)!important;border-color:transparent!important}#conversejs .badge-info,#conversejs .btn-info{background-color:var(--primary-color);border-color:var(--primary-color)}#conversejs .badge-info:hover,#conversejs .btn-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}#conversejs .badge-secondary,#conversejs .btn-secondary,#conversejs .button-cancel{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}#conversejs .badge-secondary:hover,#conversejs .btn-secondary:hover,#conversejs .button-cancel:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}#conversejs .btn-warning{color:#fff;background-color:var(--warning-color);border-color:var(--warning-color)}#conversejs .btn-warning:hover{color:#fff;background-color:var(--warning-color-dark);border-color:var(--warning-color-dark)}#conversejs .btn-danger{color:#fff;background-color:var(--danger-color);border-color:var(--danger-color)!important}#conversejs .btn-danger:hover{background-color:var(--danger-color-dark);border-color:var(--danger-color-dark)}@media screen and (max-width:575px){body .converse-brand{font-size:3.75em}#conversejs:not(.converse-embedded) .chatbox .chat-body{border-radius:var(--chatbox-border-radius)}#conversejs:not(.converse-embedded) .flyout{border-radius:var(--chatbox-border-radius)}}@media screen and (min-width:576px){#conversejs .offset-sm-2{margin-left:16.666667%}}@media screen and (min-width:768px){#conversejs .offset-md-2{margin-left:16.666667%}#conversejs .offset-md-3{margin-left:25%}}@media screen and (min-width:992px){#conversejs .offset-lg-2{margin-left:16.666667%}#conversejs .offset-lg-3{margin-left:25%}}@media screen and (min-width:1200px){#conversejs .offset-xl-2{margin-left:16.666667%}}@media screen and (max-height:450px){#conversejs{left:0}}#conversejs .btn--small{font-size:80%;font-weight:400}#conversejs form .hidden-username{opacity:0!important;height:0!important;padding:0!important}#conversejs form .error-feedback{margin-bottom:.5em}#conversejs form .form-check-label{margin-top:.3rem}#conversejs form .form-control::-moz-placeholder{color:var(--subdued-color)}#conversejs form .form-control:-ms-input-placeholder{color:var(--subdued-color)}#conversejs form .form-control::placeholder{color:var(--subdued-color)}#conversejs form .clear-input{margin-top:.5em;margin-bottom:.5em;position:absolute;right:.2em;cursor:pointer;font-size:var(--font-size)}#conversejs form#converse-login,#conversejs form#converse-register{background:var(--controlbox-pane-background-color)}#conversejs form#converse-login legend,#conversejs form#converse-register legend{width:100%;text-align:center;margin:0 auto .5em auto}#conversejs form#converse-login fieldset.buttons,#conversejs form#converse-register fieldset.buttons{text-align:center}#conversejs form#converse-login .login-anon,#conversejs form#converse-register .login-anon{height:auto;white-space:normal}#conversejs form#converse-login .save-submit,#conversejs form#converse-register .save-submit{color:var(--save-button-color)}#conversejs form#converse-login .form-url,#conversejs form#converse-register .form-url{display:block;font-weight:400;margin:1em 0}#conversejs form.converse-form{padding:1.2rem}#conversejs form.converse-form legend{color:var(--text-color);font-size:125%;margin-bottom:1.5em}#conversejs form.converse-form input[type=number],#conversejs form.converse-form input[type=password],#conversejs form.converse-form input[type=text],#conversejs form.converse-form select{min-width:50%}#conversejs form.converse-form input[type=button],#conversejs form.converse-form input[type=number],#conversejs form.converse-form input[type=password],#conversejs form.converse-form input[type=submit],#conversejs form.converse-form input[type=text]{padding:.5em}#conversejs form.converse-form input[type=button],#conversejs form.converse-form input[type=submit]{padding-left:1em;padding-right:1em;border:none}#conversejs form.converse-form input.error{border:1px solid var(--error-color);color:var(--text-color)}#conversejs form.converse-form .text-muted{color:var(--subdued-color)!important;font-size:85%;padding-top:.5em}#conversejs form.converse-form .text-muted a{color:var(--link-color-lighten-10-percent)}#conversejs form.converse-form .text-muted.error{color:var(--error-color)}#conversejs form.converse-form--modal{padding-bottom:0}#conversejs form.converse-centered-form{min-height:66%;text-align:center}#conversejs form.converse-centered-form input{max-width:30em;margin:auto}#conversejs .send-button{border-radius:0;bottom:var(--send-button-bottom);color:var(--inverse-link-color)}#conversejs .chatbox .send-button{background-color:var(--chat-head-color)}#conversejs .chatroom .send-button{background-color:var(--muc-toolbar-btn-color)}#conversejs .chat-toolbar .toolbar-buttons{width:100%;display:inline-block}#conversejs .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}#conversejs .chat-toolbar .unverified,#conversejs .chat-toolbar .unverified a{color:#cf5300}#conversejs .chat-toolbar .private,#conversejs .chat-toolbar .private a{color:#4b7003}#conversejs .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}#conversejs .chat-toolbar li:hover{cursor:pointer}#conversejs .chat-toolbar li .toolbar-menu{background-color:#fff;bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}#conversejs .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}#conversejs .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}#conversejs .chat-toolbar li .toolbar-menu a{color:var(--link-color)}#conversejs .chat-toolbar li.toggle-otr ul{z-index:99}#conversejs .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}#conversejs .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}#conversejs .chat-toolbar li.toggle-otr ul li a{display:block}#conversejs converse-chat-toolbar{background-color:#fff;box-sizing:border-box;display:flex;justify-content:space-between;margin:0;width:100%}#conversejs converse-chat-toolbar .fa,#conversejs converse-chat-toolbar .fa:hover,#conversejs converse-chat-toolbar .far,#conversejs converse-chat-toolbar .far:hover,#conversejs converse-chat-toolbar .fas,#conversejs converse-chat-toolbar .fas:hover{color:var(--chat-head-color);font-size:var(--font-size-large)}#conversejs converse-chat-toolbar .fa svg,#conversejs converse-chat-toolbar .fa:hover svg,#conversejs converse-chat-toolbar .far svg,#conversejs converse-chat-toolbar .far:hover svg,#conversejs converse-chat-toolbar .fas svg,#conversejs converse-chat-toolbar .fas:hover svg{fill:var(--chat-head-color)}#conversejs converse-chat-toolbar .unencrypted,#conversejs converse-chat-toolbar .unencrypted a{color:var(--text-color)}#conversejs converse-chat-toolbar .unencrypted .toolbar-menu a,#conversejs converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}#conversejs converse-chat-toolbar button{margin-top:.4em;border:1px transparent solid;background-color:transparent}#conversejs converse-chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}#conversejs .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--chat-toolbar-btn-color);background-color:#fff}#conversejs .chatbox converse-chat-toolbar .fa,#conversejs .chatbox converse-chat-toolbar .fa:hover,#conversejs .chatbox converse-chat-toolbar .far,#conversejs .chatbox converse-chat-toolbar .far:hover,#conversejs .chatbox converse-chat-toolbar .fas,#conversejs .chatbox converse-chat-toolbar .fas:hover{color:var(--chat-toolbar-btn-color)}#conversejs .chatbox converse-chat-toolbar button:focus{outline-color:var(--chat-toolbar-btn-color)!important}#conversejs .chatbox converse-chat-toolbar button:disabled .fa{color:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover{color:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatbox converse-chat-toolbar button:disabled .fa svg,#conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--chat-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--muc-toolbar-btn-color)}#conversejs .chatroom converse-chat-toolbar .fa,#conversejs .chatroom converse-chat-toolbar .fa:hover,#conversejs .chatroom converse-chat-toolbar .far,#conversejs .chatroom converse-chat-toolbar .far:hover,#conversejs .chatroom converse-chat-toolbar .fas,#conversejs .chatroom converse-chat-toolbar .fas:hover{color:var(--muc-toolbar-btn-color);font-size:var(--font-size-large)}#conversejs .chatroom converse-chat-toolbar .fa svg,#conversejs .chatroom converse-chat-toolbar .fa:hover svg,#conversejs .chatroom converse-chat-toolbar .far svg,#conversejs .chatroom converse-chat-toolbar .far:hover svg,#conversejs .chatroom converse-chat-toolbar .fas svg,#conversejs .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--muc-toolbar-btn-color)}#conversejs .chatroom converse-chat-toolbar button:focus{outline-color:var(--muc-toolbar-btn-color)!important}#conversejs .chatroom converse-chat-toolbar button:disabled .fa{color:var(--muc-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover{color:var(--muc-toolbar-btn-disabled-color)}#conversejs .chatroom converse-chat-toolbar button:disabled .fa svg,#conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--muc-toolbar-btn-disabled-color)}#conversejs.converse-overlayed .chat-toolbar li .toolbar-menu{min-width:235px}#conversejs.converse-overlayed .chatroom .chat-toolbar li .toolbar-menu{min-width:280px}#conversejs .chatbox-navback{display:none}#conversejs .flyout{position:absolute}@media screen and (max-height:450px){#conversejs .flyout{border-radius:0}}@media screen and (max-width:480px){#conversejs .flyout{border-radius:0}}@media screen and (max-height:450px){#conversejs .flyout{bottom:0}}@media screen and (max-width:480px){#conversejs .flyout{bottom:0}}#conversejs .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}#conversejs .chatbox-btn:active{position:relative;top:1px}#conversejs .chat-head{display:flex;flex-direction:row;color:#fff;font-size:100%;margin:0;padding:0;position:relative}#conversejs .chat-head.chat-head-chatbox{background-color:var(--chat-head-color)}#conversejs .chat-head .avatar{margin-right:.5em}#conversejs .chat-head .show-msg-author-modal{color:#fff!important}#conversejs .chat-head .chat-head__desc{color:var(--chat-head-color-lighten-50-percent);font-size:var(--font-size-small);margin:0;overflow:hidden;padding:.5rem 1rem .5rem 1rem;text-overflow:ellipsis;width:100%;max-height:5em}#conversejs .chat-head .chatbox-title{padding:.75rem 1rem 0 1rem;display:flex;flex-direction:row;justify-content:space-between;width:100%}#conversejs .chat-head .chatbox-title--no-desc{padding:.75rem 1rem}#conversejs .chat-head .chatbox-title--row{display:flex;flex-direction:row;overflow:hidden}#conversejs .chat-head .chatbox-title__text{overflow:hidden;text-overflow:ellipsis}#conversejs .chat-head .chatbox-title__buttons{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;padding:0}#conversejs .chat-head a.chatbox-btn.fa,#conversejs .chat-head a.chatbox-btn.far,#conversejs .chat-head a.chatbox-btn.fas,#conversejs .chat-head a:hover.chatbox-btn.fa,#conversejs .chat-head a:hover.chatbox-btn.far,#conversejs .chat-head a:hover.chatbox-btn.fas,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.far,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas,#conversejs .chat-head a:visited.chatbox-btn.fa,#conversejs .chat-head a:visited.chatbox-btn.far,#conversejs .chat-head a:visited.chatbox-btn.fas{color:#fff}#conversejs .chat-head a.chatbox-btn.fa.button-on:before,#conversejs .chat-head a.chatbox-btn.far.button-on:before,#conversejs .chat-head a.chatbox-btn.fas.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.fa.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.far.button-on:before,#conversejs .chat-head a:hover.chatbox-btn.fas.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on:before,#conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.fa.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.far.button-on:before,#conversejs .chat-head a:visited.chatbox-btn.fas.button-on:before{padding:.2em;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}#conversejs .chat-head .chatbox-btn{color:#fff}#conversejs .chat-head .chatbox-btn.fa,#conversejs .chat-head .chatbox-btn.far,#conversejs .chat-head .chatbox-btn.fas{color:#fff}#conversejs .chat-head .chatbox-btn:active{position:relative;top:1px}#conversejs .chat-head .chatbox-btn.button-on:before{border-radius:5%;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}#conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){#conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){#conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}#conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){#conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){#conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}#conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}#conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}#conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-head-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){#conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){#conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}#conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}#conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}#conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}#conversejs .chatbox .chat-content converse-chat-content{display:flex;flex-direction:column;height:100%;justify-content:space-between}#conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}#conversejs .chatbox .chat-content .chat-content__help{border-top:1px solid var(--chat-head-color);max-height:100%}#conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}#conversejs .chatbox .chat-content .chat-content__help converse-chat-help{height:100%;overflow-y:auto;display:block;padding:.5em 0}#conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}#conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}#conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}#conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}#conversejs .chatbox .chat-content video{width:100%}#conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}#conversejs .chatbox .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}#conversejs .chatbox .dropdown{background-color:var(--light-background-color)}#conversejs .chatbox .dropdown dd{margin:0;padding:0;position:relative}#conversejs .chatbox .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){#conversejs .chatbox .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){#conversejs .chatbox .sendXMPPMessage{width:100%}}#conversejs .chatbox .sendXMPPMessage .suggestion-box__results:after{display:none}#conversejs .chatbox .sendXMPPMessage .spoiler-hint{width:100%}#conversejs .chatbox .sendXMPPMessage .chat-textarea:active,#conversejs .chatbox .sendXMPPMessage .chat-textarea:focus,#conversejs .chatbox .sendXMPPMessage input:active,#conversejs .chatbox .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}#conversejs .chatbox .sendXMPPMessage .chat-textarea.correcting,#conversejs .chatbox .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}#conversejs .chatbox .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}#conversejs .chatbox .sendXMPPMessage .chat-textarea.spoiler{height:42px}#conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}#conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}#conversejs .chatbox .dragresize-left,#conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}#conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}#conversejs.converse-embedded .controlbox-head,#conversejs.converse-overlayed .controlbox-head{padding:.5em}#conversejs.converse-embedded .chat-head,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}#conversejs.converse-embedded .chatbox,#conversejs.converse-overlayed .chatbox{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}#conversejs.converse-embedded .chatbox .box-flyout,#conversejs.converse-overlayed .chatbox .box-flyout{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius)}@media screen and (max-height:450px){#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width:480px){#conversejs.converse-overlayed .box-flyout,#conversejs.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}#conversejs.converse-overlayed .flyout{bottom:var(--overlayed-chatbox-hover-height)}#conversejs.converse-overlayed .box-flyout{height:var(--overlayed-chat-height);min-height:calc(var(--overlayed-chat-height)/ 2)}#conversejs.converse-overlayed .chat-head{min-height:var(--overlayed-chat-head-height)}#conversejs.converse-overlayed .minimized-chats-flyout .chat-head{cursor:default}#conversejs.converse-overlayed .chat-textarea{max-height:var(--overlayed-max-chat-textarea-height)}#conversejs.converse-overlayed .chatbox .chat-body{height:calc(100% - var(--overlayed-chat-head-height))}#conversejs.converse-overlayed .chatbox .chatbox-title{padding:.5rem .75rem 0 .75rem}#conversejs.converse-overlayed .chatbox .chatbox-title--no-desc{padding:.5rem .75rem}#conversejs.converse-overlayed .chatbox converse-dropdown .btn--standalone{padding:0 .2em;margin:0 0 0 .5em}@media (max-width:767.98px){#conversejs.converse-overlayed>.row{flex-direction:column}#conversejs.converse-overlayed>.row.no-gutters{margin:-1em}}#conversejs.converse-embedded .flyout,#conversejs.converse-fullscreen .flyout{border-radius:0;border:none;bottom:0}#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{margin:0;position:relative;width:100%;padding-right:15px;padding-left:15px}#conversejs.converse-embedded .chatbox .box-flyout,#conversejs.converse-fullscreen .chatbox .box-flyout{box-shadow:none;overflow:hidden}@media (min-width:768px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 66.66667%;max-width:66.66667%}}@media (min-width:992px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 75%;max-width:75%}}@media (min-width:1200px){#conversejs.converse-embedded .chatbox,#conversejs.converse-fullscreen .chatbox{flex:0 0 83.33333%;max-width:83.33333%}}#conversejs.converse-embedded.converse-singleton .flyout,#conversejs.converse-fullscreen.converse-singleton .flyout{border:none!important}#conversejs.converse-embedded.converse-singleton .chat-head,#conversejs.converse-fullscreen.converse-singleton .chat-head{padding:.5em}#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{margin:0;position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:768px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media (min-width:992px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media (min-width:1200px){#conversejs.converse-embedded.converse-singleton .chatbox,#conversejs.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}#conversejs.converse-embedded .chat-head{font-size:var(--font-size-huge)}#conversejs.converse-embedded .converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%;margin-left:-15px}#conversejs.converse-embedded .chatbox .box-flyout{bottom:0;height:100%;min-width:auto;width:100%}#conversejs.converse-embedded .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}#conversejs.converse-fullscreen .chatbox-btn{font-size:var(--fullpage-chatbox-button-size);margin:0 .3em}#conversejs.converse-fullscreen .chat-head{font-size:var(--font-size-huge)}#conversejs.converse-fullscreen .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}#conversejs.converse-fullscreen .chatbox .box-flyout{box-shadow:none;height:var(--fullpage-chat-height);min-height:calc(var(--fullpage-chat-height)/ 2);width:var(--fullpage-chat-width);overflow:hidden}#conversejs.converse-fullscreen .chatbox .chat-body{height:inherit;overflow:hidden;background-color:var(--chat-head-color)}#conversejs.converse-fullscreen .chatbox .chat-title{font-size:var(--font-size-huge);line-height:var(--line-height-huge)}#conversejs.converse-fullscreen .chatbox .sendXMPPMessage ul{width:100%}@media (max-width:767.98px){#conversejs:not(.converse-embedded)>.row{flex-direction:row-reverse}#conversejs:not(.converse-embedded) #converse-login-panel .converse-form{padding:3em 2em 3em}#conversejs:not(.converse-embedded) .chatbox{width:calc(100% - 50px)}#conversejs:not(.converse-embedded) .chatbox .row .box-flyout{left:50px;bottom:0;height:var(--fullpage-chat-height);box-shadow:none}#conversejs.converse-fullscreen .chatbox .box-flyout .chatbox-navback,#conversejs.converse-mobile .chatbox .box-flyout .chatbox-navback,#conversejs.converse-overlayed .chatbox .box-flyout .chatbox-navback{margin:auto 0;margin-right:1em;display:flex}#conversejs.converse-fullscreen .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before,#conversejs.converse-mobile .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before,#conversejs.converse-overlayed .chatbox .box-flyout .chatbox-navback .fa-arrow-left:before{color:#fff}}#conversejs .oauth-providers{text-align:center}#conversejs .oauth-providers .oauth-provider{margin:1em 0}#conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}#conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}#conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}#conversejs .set-xmpp-status .chat-status--online,#conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}#conversejs .set-xmpp-status .chat-status--busy,#conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}#conversejs .set-xmpp-status .chat-status--away,#conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}#conversejs .set-xmpp-status .fa-times-circle,#conversejs .set-xmpp-status .far.fa-circle,#conversejs .xmpp-status .fa-times-circle,#conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}#conversejs .set-xmpp-status .chat-status{padding-right:.5em}#conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}#conversejs .room-info li.room-info{display:block;margin-left:5px}#conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}#conversejs div.room-info{padding:.3em 0;clear:left;width:100%}#conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}#conversejs #controlbox converse-brand-heading{width:100%;display:block}#conversejs #controlbox .brand-name-wrapper{font-size:200%}#conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}#conversejs #controlbox .open-rooms-toggle,#conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}#conversejs #controlbox .open-rooms-toggle .fa:hover,#conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}#conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}#conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}#conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}#conversejs #controlbox form.search-xmpp-contact input{width:8em}#conversejs #controlbox .msgs-indicator{margin-right:.5em}#conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}#conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}#conversejs #controlbox #converse-register .title{font-weight:700}#conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}#conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}#conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}#conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}#conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}#conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}#conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}#conversejs #controlbox #converse-register .input-group input[name=username],#conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}#conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}#conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}#conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}#conversejs #controlbox .conn-feedback.error{color:var(--error-color)}#conversejs #controlbox .conn-feedback p{padding-bottom:1em}#conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}#conversejs #controlbox #converse-login-panel,#conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}#conversejs #controlbox #converse-login-panel{flex-direction:row}#conversejs #controlbox .toggle-register-login{font-weight:700}#conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}#conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}#conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}#conversejs #controlbox #chatrooms{padding:0}#conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}#conversejs #controlbox #chatrooms .add-chatroom input[type=button],#conversejs #controlbox #chatrooms .add-chatroom input[type=submit],#conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}#conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}#conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}#conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}#conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}#conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}#conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}#conversejs #controlbox .dropdown a{width:143px;display:inline-block}#conversejs #controlbox .dropdown li{list-style:none;padding-left:0}#conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}#conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}#conversejs #controlbox .dropdown dd.search-xmpp{height:0}#conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}#conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}#conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}#conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}#conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}#conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}#conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}#conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}#conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}#conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}#conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}#conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}#conversejs #controlbox .controlbox-pane .switch-form p{margin-top:.5em}#conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}#conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}#conversejs #controlbox .add-xmpp-contact{padding:1em .5em}#conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}#conversejs #controlbox .add-xmpp-contact button{width:100%}#conversejs.converse-overlayed .toggle-controlbox{order:-1;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}#conversejs.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}#conversejs.converse-overlayed #controlbox{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}#conversejs.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}#conversejs.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}#conversejs.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}#conversejs.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}#conversejs.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}#conversejs.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}#conversejs.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}#conversejs.converse-overlayed #controlbox #converse-login,#conversejs.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}#conversejs.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}#conversejs.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}#conversejs.converse-embedded .toggle-controlbox,#conversejs.converse-fullscreen .toggle-controlbox{display:none}#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media (min-width:768px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 33.33333%;max-width:33.33333%}}@media (min-width:992px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media (min-width:1200px){#conversejs.converse-embedded #controlbox,#conversejs.converse-fullscreen #controlbox,#conversejs.converse-mobile #controlbox{flex:0 0 16.66667%;max-width:16.66667%}}#conversejs.converse-embedded #controlbox.logged-out,#conversejs.converse-fullscreen #controlbox.logged-out,#conversejs.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}#conversejs.converse-embedded #controlbox .controlbox-pane,#conversejs.converse-fullscreen #controlbox .controlbox-pane,#conversejs.converse-mobile #controlbox .controlbox-pane{border-radius:0}#conversejs.converse-embedded #controlbox .flyout,#conversejs.converse-fullscreen #controlbox .flyout,#conversejs.converse-mobile #controlbox .flyout{border-radius:0}#conversejs.converse-embedded #controlbox #converse-login-panel,#conversejs.converse-fullscreen #controlbox #converse-login-panel,#conversejs.converse-mobile #controlbox #converse-login-panel{border-radius:0}#conversejs.converse-embedded #controlbox #converse-login-panel .converse-form,#conversejs.converse-fullscreen #controlbox #converse-login-panel .converse-form,#conversejs.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}#conversejs.converse-embedded #controlbox .toggle-register-login,#conversejs.converse-fullscreen #controlbox .toggle-register-login,#conversejs.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}#conversejs.converse-embedded #controlbox converse-brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}#conversejs.converse-embedded #controlbox converse-brand-heading .brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-heading{font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}#conversejs.converse-embedded #controlbox converse-brand-heading .brand-subtitle,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-subtitle,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){#conversejs.converse-embedded #controlbox converse-brand-heading .brand-heading,#conversejs.converse-fullscreen #controlbox converse-brand-heading .brand-heading,#conversejs.converse-mobile #controlbox converse-brand-heading .brand-heading{font-size:300%}}#conversejs.converse-embedded #controlbox.logged-out,#conversejs.converse-fullscreen #controlbox.logged-out,#conversejs.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}#conversejs.converse-embedded #controlbox.logged-out .box-flyout,#conversejs.converse-fullscreen #controlbox.logged-out .box-flyout,#conversejs.converse-mobile #controlbox.logged-out .box-flyout{width:100%}#conversejs.converse-embedded #controlbox .box-flyout,#conversejs.converse-fullscreen #controlbox .box-flyout,#conversejs.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}#conversejs.converse-embedded #controlbox .box-flyout .controlbox-head,#conversejs.converse-fullscreen #controlbox .box-flyout .controlbox-head,#conversejs.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}@media (min-width:576px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}}@media (min-width:768px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 66.66667%;max-width:66.66667%;margin-left:16.66667%}}@media (min-width:992px){#conversejs.converse-embedded #controlbox #converse-login,#conversejs.converse-embedded #controlbox #converse-register,#conversejs.converse-fullscreen #controlbox #converse-login,#conversejs.converse-fullscreen #controlbox #converse-register,#conversejs.converse-mobile #controlbox #converse-login,#conversejs.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}#conversejs.converse-embedded #controlbox #converse-login .instructions,#conversejs.converse-embedded #controlbox #converse-login .title,#conversejs.converse-embedded #controlbox #converse-register .instructions,#conversejs.converse-embedded #controlbox #converse-register .title,#conversejs.converse-fullscreen #controlbox #converse-login .instructions,#conversejs.converse-fullscreen #controlbox #converse-login .title,#conversejs.converse-fullscreen #controlbox #converse-register .instructions,#conversejs.converse-fullscreen #controlbox #converse-register .title,#conversejs.converse-mobile #controlbox #converse-login .instructions,#conversejs.converse-mobile #controlbox #converse-login .title,#conversejs.converse-mobile #controlbox #converse-register .instructions,#conversejs.converse-mobile #controlbox #converse-register .title{margin:1em 0}#conversejs.converse-embedded #controlbox #converse-login input[type=button],#conversejs.converse-embedded #controlbox #converse-login input[type=submit],#conversejs.converse-embedded #controlbox #converse-register input[type=button],#conversejs.converse-embedded #controlbox #converse-register input[type=submit],#conversejs.converse-fullscreen #controlbox #converse-login input[type=button],#conversejs.converse-fullscreen #controlbox #converse-login input[type=submit],#conversejs.converse-fullscreen #controlbox #converse-register input[type=button],#conversejs.converse-fullscreen #controlbox #converse-register input[type=submit],#conversejs.converse-mobile #controlbox #converse-login input[type=button],#conversejs.converse-mobile #controlbox #converse-login input[type=submit],#conversejs.converse-mobile #controlbox #converse-register input[type=button],#conversejs.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}@media (max-width:767.98px){#conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}#conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}#conversejs .converse-chatboxes .converse-chatroom{font-size:14px}#conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}#conversejs .converse-chatboxes #controlbox{width:100vw!important}#conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}#conversejs .converse-chatboxes #controlbox .sidebar{display:block}#conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}#conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}}#conversejs.converse-fullscreen .controlbox-panes{padding-top:1em}#conversejs.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}#conversejs.converse-overlayed .converse-svg-logo{height:1em}#conversejs.converse-overlayed #controlbox #converse-login-panel{height:100%}#conversejs.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}#conversejs #converse-modals .modal{background-color:rgba(0,0,0,.4)}#conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}#conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}#conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}#conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}#conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}#conversejs #converse-modals .modal .modal-body--image .chat-image{max-height:99%;max-width:100%}#conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}#conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}#conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}#conversejs #converse-modals .affiliation-form,#conversejs #converse-modals .role-form{padding:2em 0 1em 0}#conversejs #converse-modals .set-xmpp-status{margin:1em}#conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}#conversejs #converse-modals #omemo-tabpanel{margin-top:1em}#conversejs #converse-modals .btn{font-weight:400}#conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}#conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}#conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}#conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}#conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}#conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}#conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em}#conversejs #converse-roster{text-align:left;width:100%;position:relative;margin:0;height:var(--roster-height);padding:0;overflow:hidden;height:calc(100% - 70px)}#conversejs #converse-roster #online-count{display:none}#conversejs #converse-roster .search-xmpp ul li.chat-info{padding-left:10px}#conversejs #converse-roster .roster-filter-form{width:100%}#conversejs #converse-roster .roster-filter-form .button-group{padding:.2em}#conversejs #converse-roster .roster-filter-form span{padding:.3em;cursor:pointer;min-width:25px;text-align:center}#conversejs #converse-roster .roster-filter-form .roster-filter{width:100%;margin:.2em;font-size:calc(var(--font-size) - 2px)}#conversejs #converse-roster .roster-filter-form .state-type{font-size:calc(var(--font-size) - 2px);width:100%}#conversejs #converse-roster .roster-contacts{padding:0;margin:0 0 .2em 0;height:100%;overflow-x:hidden;overflow-y:auto}#conversejs #converse-roster .roster-contacts .roster-group{border:none;color:var(--text-color);font-weight:400;text-shadow:0 1px 0 var(--text-shadow-color);margin:.75em 0 .75em 0}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle{font-family:var(--heading-font);display:block;width:100%;padding-top:0;padding-bottom:.3rem}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle,#conversejs #converse-roster .roster-contacts .roster-group .group-toggle .fa{color:var(--chat-head-color-dark)!important}#conversejs #converse-roster .roster-contacts .roster-group .group-toggle .fa:hover,#conversejs #converse-roster .roster-contacts .roster-group .group-toggle:hover{color:var(--chat-head-color-darker)!important}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact{margin:.25em 0}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status{vertical-align:middle;font-size:.6em;margin-right:0;margin-left:-.7em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--offline{margin-right:.8em}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--online{color:var(--chat-status-online)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--busy{color:var(--chat-status-busy)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--away{color:var(--chat-status-away)}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .chat-status--offline{display:none}#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .fa-times-circle,#conversejs #converse-roster .roster-contacts .roster-group .current-xmpp-contact .far.fa-circle{color:var(--subdued-color)}#conversejs #converse-roster .roster-contacts .roster-group li.requesting-xmpp-contact a{line-height:var(--line-height)}#conversejs #converse-roster .roster-contacts .roster-group li.requesting-xmpp-contact .req-contact-name{padding:0 .2em 0 0}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat{margin:0;padding:0}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat.unread-msgs{font-weight:700}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat.unread-msgs .contact-name{width:70%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .msgs-indicator{color:#fff;background-color:var(--chat-head-color);opacity:1;border-radius:10%;padding:.2em .4em;font-size:var(--font-size-small)}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0;margin:0;max-width:85%;float:none;height:100%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name.unread-msgs{max-width:60%}#conversejs #converse-roster .roster-contacts .roster-group li .open-chat .contact-name.contact-name--offline{margin-left:.7em}#conversejs #converse-roster .roster-contacts .roster-group li.odd{background-color:#dceac5}#conversejs #converse-roster .roster-contacts .roster-group li a,#conversejs #converse-roster .roster-contacts .roster-group li span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#conversejs #converse-roster .roster-contacts .roster-group li .span{display:inline-block}#conversejs #converse-roster .roster-contacts .roster-group li .decline-xmpp-request{margin-left:5px}#conversejs #converse-roster .roster-contacts .roster-group li:hover{background-color:var(controlbox-pane-bg-hover-color)}#conversejs #converse-roster span.pending-contact-name{line-height:var(--line-height);width:100%}#conversejs .list-container{text-align:left;padding:.3em 0}#conversejs .list-container .list-toggle{font-family:var(--heading-font);font-weight:var(--list-toggle-font-weight);display:block;color:var(--list-toggle-color);padding:0 0 .5rem 0}#conversejs .list-container .list-toggle:hover{color:var(--list-toggle-hover-color)}#conversejs .items-list{text-align:left}#conversejs .items-list .list-item{border:none;clear:both;color:var(--text-color);overflow:hidden;padding:.5em 0;text-shadow:0 1px 0 var(--text-shadow-color);word-wrap:break-word;height:2.5em}#conversejs .items-list .list-item.unread-msgs{font-weight:700}#conversejs .items-list .list-item .list-item-link{color:var(--list-item-link-color);margin:auto;font-size:var(--font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;vertical-align:baseline}#conversejs .items-list .list-item .list-item-link:hover{color:var(--list-item-link-hover-color)}#conversejs .items-list .list-item .list-item-badge{opacity:1;border-radius:25%;color:#fff;font-size:var(--font-size-small);line-height:var(--font-size-small)}#conversejs .items-list .list-item .list-item-action{opacity:0;font-size:var(--font-size-tiny);padding:.3em 0 0 0;margin:0 0 0 var(--inline-action-margin);width:2em;height:2em;color:var(--subdued-color)}#conversejs .items-list .list-item .list-item-action:before{font-size:var(--font-size)}#conversejs .items-list .list-item .list-item-action.button-on{color:var(--list-item-link-color)}#conversejs .items-list .list-item .list-item-action.button-on:hover{color:var(--list-item-link-hover-color)}#conversejs .items-list .list-item .list-item-action:hover{color:var(--list-toggle-hover-color);opacity:1}#conversejs .items-list .list-item .list-item-action--visible{opacity:1!important}#conversejs .items-list .list-item.open{background-color:var(--list-item-open-color)}#conversejs .items-list .list-item.open:hover{background-color:var(--list-item-open-hover-color)!important}#conversejs .items-list .list-item.open a{color:#fff}#conversejs .items-list .list-item.open .list-item-link:hover{color:#fff}#conversejs .items-list .list-item.open .list-item-action{color:var(--list-item-action-color)}#conversejs .items-list .list-item.open .list-item-action:hover{color:#fff}#conversejs .items-list .list-item:hover{background-color:var(--controlbox-pane-bg-hover-color)}#conversejs .items-list .list-item:hover .fa,#conversejs .items-list .list-item:hover .far,#conversejs .items-list .list-item:hover .fas{opacity:1}#conversejs .badge--muc,#conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}#conversejs .add-chatroom input[type=button],#conversejs .add-chatroom input[type=submit],#conversejs.converse-embedded .add-chatroom input[type=button],#conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}#conversejs #muc-details-modal .features-list,#conversejs.converse-embedded #muc-details-modal .features-list{margin-left:1em}#conversejs .chatroom-features,#conversejs.converse-embedded .chatroom-features{width:100%}#conversejs .chatroom-features .features-list,#conversejs.converse-embedded .chatroom-features .features-list{padding-top:0}#conversejs .chatroom-features .features-list .feature,#conversejs.converse-embedded .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#conversejs .chatroom-features .features-list .feature .fa,#conversejs.converse-embedded .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}#conversejs .chat-head-chatroom,#conversejs.converse-embedded .chat-head-chatroom{color:var(--chatroom-head-color);background-color:var(--chatroom-head-bg-color);border-bottom:var(--chatroom-head-border-bottom)}#conversejs .chat-head-chatroom .chat-head__desc,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc{color:var(--chatroom-head-color);display:var(--chatroom-head-description-display)}#conversejs .chat-head-chatroom .chat-head__desc a,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc a{color:var(--chatroom-head-description-link-color)}#conversejs .chat-head-chatroom .chat-head__desc:hover button,#conversejs.converse-embedded .chat-head-chatroom .chat-head__desc:hover button{display:inline-block}#conversejs .chat-head-chatroom .chatbox-title .btn--transparent i,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title .btn--transparent i{color:var(--chatroom-head-color)}#conversejs .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked{margin-left:.5em;color:var(--chatroom-head-color)}#conversejs .chat-head-chatroom .chatbox-title__buttons,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__buttons{background-color:var(--chatroom-head-bg-color)}#conversejs .chat-head-chatroom a.chatbox-btn.fa,#conversejs .chat-head-chatroom a:hover.chatbox-btn.fa,#conversejs .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs .chat-head-chatroom a:visited.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:hover.chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,#conversejs.converse-embedded .chat-head-chatroom a:visited.chatbox-btn.fa{color:var(--chat-head-text-color)}#conversejs .chat-head-chatroom a.chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,#conversejs.converse-embedded .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before{color:var(--chatroom-head-button-color)}#conversejs .chat-head-chatroom .chatbox-btn.button-on:before,#conversejs.converse-embedded .chat-head-chatroom .chatbox-btn.button-on:before{color:var(--chatroom-head-button-color)}#conversejs .chat-head-chatroom .chatbox-title__text,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__text{display:var(--heading-display);font-weight:var(--chatroom-head-title-font-weight);margin:auto 0;padding-right:var(--chatroom-head-title-padding-right);white-space:nowrap}#conversejs .chat-head-chatroom .chatbox-title__text .chatroom-jid,#conversejs.converse-embedded .chat-head-chatroom .chatbox-title__text .chatroom-jid{font-size:var(--font-size-small)}#conversejs .empty-history-feedback,#conversejs.converse-embedded .empty-history-feedback{position:relative}#conversejs .empty-history-feedback span,#conversejs.converse-embedded .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){#conversejs .chatroom,#conversejs.converse-embedded .chatroom{width:var(--mobile-chat-width)}}#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{overflow-y:hidden;background-color:var(--chatroom-head-bg-color);width:100%}@media screen and (max-height:450px){#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){#conversejs .chatroom .box-flyout,#conversejs.converse-embedded .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}#conversejs .chatroom .box-flyout .chatroom-body,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;width:100%;overflow:hidden}#conversejs .chatroom .box-flyout .chatroom-body .row,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .row{flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .chat-topic,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-info,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}#conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}#conversejs .chatroom .box-flyout .chatroom-body .disconnect-container,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}#conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}#conversejs .chatroom .box-flyout .chatroom-body .chat-area,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help{border-top:1px solid var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-head-bg-color)}#conversejs .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants{display:flex;flex-direction:column;justify-content:space-between;overflow-x:hidden;overflow-y:hidden;vertical-align:top;background-color:var(--occupants-background-color);border-left:var(--occupants-border-left);padding:.5em;max-width:75%;min-width:20%;flex:0 0 25%}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header{display:flex;flex-direction:column}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .hide-occupants,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header .hide-occupants{align-self:flex-end;cursor:pointer;font-size:var(--font-size-small)}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header--title,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-header--title{margin-top:.5em;margin-bottom:.5em;display:flex;flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .occupants .fa-user-plus,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .fa-user-plus{margin-right:.25em}#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-family:var(--heading-font);color:var(--groupchats-header-color-dark);padding-left:0;margin-right:1em}#conversejs .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul{padding:0}#conversejs .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul li,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .suggestion-box ul li{padding:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul{padding:0;margin-bottom:.5em;overflow-x:hidden;overflow-y:auto;list-style:none}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list{overflow-y:auto;flex-basis:0;flex-grow:1}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li{cursor:default;display:block;font-size:var(--font-size-small);overflow:hidden;padding:.25em .25em .25em 0;text-overflow:ellipsis}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li .fa,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li .fa{margin-right:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.feature,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.feature{font-size:var(--font-size-tiny)}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant{cursor:pointer}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge{display:flex;justify-content:space-between;flex-wrap:wrap}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges{display:flex;justify-content:flex-end;flex-wrap:wrap;flex-direction:row}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges span,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-nick-badge .occupant-badges span{margin-right:.25rem}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant div.row.no-gutters,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant div.row.no-gutters{flex-wrap:nowrap;min-height:1.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .badge,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .badge{margin-bottom:.125rem}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status{display:inline-block;margin:0 .5em .125em 0;width:.5em;height:.5em}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-chat,#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-online,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-chat,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-online{background-color:#1a9707}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-dnd,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-dnd{background-color:red}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-away,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-away{background-color:#ff8c00}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-xa,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-xa{background-color:orange}#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-offline,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li.occupant .occupant-status.occupant-offline{background-color:#a9a9a9}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container .validation-message,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container .validation-message{font-size:90%;color:var(--error-color)}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=button],#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=submit],#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=button],#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container input[type=submit]{margin:0 .5em}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form-container .button-primary,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container .button-primary{background-color:var(--chatroom-head-button-color)}#conversejs .chatroom .box-flyout .chatroom-body .chatroom-form,#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}#conversejs .chatroom .muc-bottom-panel,#conversejs.converse-embedded .chatroom .muc-bottom-panel{height:3em;padding:.5em;text-align:center;font-size:var(--font-size-small);background-color:var(--chatroom-head-bg-color);color:#fff}#conversejs .chatroom .muc-bottom-panel.muc-bottom-panel--nickname,#conversejs.converse-embedded .chatroom .muc-bottom-panel.muc-bottom-panel--nickname{padding:0;height:16em}#conversejs .chatroom .muc-bottom-panel.muc-bottom-panel--nickname .chatroom-form-container .chatroom-form,#conversejs.converse-embedded .chatroom .muc-bottom-panel.muc-bottom-panel--nickname .chatroom-form-container .chatroom-form{padding-top:2em;padding-bottom:0}#conversejs .chatroom .sendXMPPMessage .suggestion-box__results--above,#conversejs.converse-embedded .chatroom .sendXMPPMessage .suggestion-box__results--above{bottom:4.5em}#conversejs .chatroom .sendXMPPMessage .chat-textarea:active,#conversejs .chatroom .sendXMPPMessage .chat-textarea:focus,#conversejs .chatroom .sendXMPPMessage input:active,#conversejs .chatroom .sendXMPPMessage input:focus,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea:active,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea:focus,#conversejs.converse-embedded .chatroom .sendXMPPMessage input:active,#conversejs.converse-embedded .chatroom .sendXMPPMessage input:focus{outline-color:var(--chatroom-head-bg-color)}#conversejs .chatroom .sendXMPPMessage .chat-textarea.correcting,#conversejs .chatroom .sendXMPPMessage input.correcting,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea.correcting,#conversejs.converse-embedded .chatroom .sendXMPPMessage input.correcting{background-color:var(--chatroom-correcting-color)}#conversejs .chatroom .sendXMPPMessage .chat-textarea,#conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-textarea{border-bottom-right-radius:0}#conversejs .chatroom .room-invite .invited-contact,#conversejs.converse-embedded .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#conversejs.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}#conversejs.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}#conversejs.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.33333%;max-width:58.33333%}#conversejs.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.66667%;max-width:41.66667%}#conversejs.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}#conversejs.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}#conversejs.converse-embedded .chatroom .box-flyout,#conversejs.converse-fullscreen .chatroom .box-flyout,#conversejs.converse-mobile .chatroom .box-flyout{width:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,#conversejs.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,#conversejs.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}#conversejs.converse-embedded .chatroom .room-invite span .invited-contact,#conversejs.converse-fullscreen .chatroom .room-invite span .invited-contact,#conversejs.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}#conversejs.converse-embedded .chatroom{margin:0;width:100%}#conversejs.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}#conversejs.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}#conversejs.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .chatroom-form-container{height:100%;position:relative}#conversejs.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em}@media (max-width:767.98px){#conversejs.converse-fullscreen .chatbox .box-flyout .chat-head-chatroom .chatbox-navback,#conversejs.converse-mobile .chatbox .box-flyout .chat-head-chatroom .chatbox-navback,#conversejs.converse-overlayed .chatbox .box-flyout .chat-head-chatroom .chatbox-navback{margin-right:0!important}#conversejs.converse-fullscreen .chatbox .box-flyout .chat-head-chatroom .chatbox-navback .fa-arrow-left:before,#conversejs.converse-mobile .chatbox .box-flyout .chat-head-chatroom .chatbox-navback .fa-arrow-left:before,#conversejs.converse-overlayed .chatbox .box-flyout .chat-head-chatroom .chatbox-navback .fa-arrow-left:before{color:var(--chatroom-head-color)}}#conversejs .chat-head-headline{background-color:var(--headline-head-color)}#conversejs .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}#conversejs .chatbox.headlines .chat-body{background-color:var(--headline-head-color)}#conversejs .chatbox.headlines .chat-body .chat-message{color:var(--headline-message-color)}#conversejs .chatbox.headlines .chat-content{height:100%}#conversejs .message.chat-msg.headline .chat-msg__body{margin-left:0}#conversejs.converse-fullscreen .chatbox.headlines .box-flyout{background-color:var(--headline-head-color)}#conversejs.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}#conversejs.converse-fullscreen .chatbox.headlines .flyout{border-color:var(--headline-head-color)}#conversejs .styling-directive{color:var(--subdued-color)}#conversejs .older-msg time{font-weight:700}#conversejs .message .show-msg-author-modal{color:var(--text-color)!important}#conversejs .message blockquote{margin-left:.5em;margin-bottom:.25em;padding-right:1em;color:var(--subdued-color);border-left:.3em solid var(--subdued-color);padding-left:.5em;display:inline-block}#conversejs .message code{font-family:monospace}#conversejs .message .mention{font-weight:700}#conversejs .message .mention--self{font-weight:400}#conversejs .message.date-separator,#conversejs .message.separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}#conversejs .message.date-separator .separator,#conversejs .message.separator .separator{border-top:0;border-bottom:var(--chat-separator-border-bottom);margin:0 1em;position:relative;top:1em;z-index:5}#conversejs .message.date-separator .separator-text,#conversejs .message.separator .separator-text{background:#fff;bottom:1px;color:var(--separator-text-color);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5}#conversejs .message.chat-msg--retracted .chat-msg__message{color:var(--subdued-color)}#conversejs .message.chat-info{color:var(--chat-head-color);font-size:var(--message-font-size);line-height:var(--line-height-small);font-size:90%;padding:.17rem 1rem}#conversejs .message.chat-info.badge{color:var(--chat-head-text-color)}#conversejs .message.chat-info.chat-state-notification{font-style:italic}#conversejs .message.chat-info.chat-event{clear:left;font-style:italic}#conversejs .message.chat-info.chat-error{color:var(--error-color);font-weight:700}#conversejs .message.chat-info .q{font-style:italic}#conversejs .message .chat-image{height:auto;width:auto;max-height:15em;max-width:100%}#conversejs .message.chat-msg--action{font-style:italic}#conversejs .message.chat-msg--action .chat-msg__author{padding-right:.2em}#conversejs .message.chat-msg{display:inline-flex;width:100%;flex-direction:row;padding:.125rem 1rem}#conversejs .message.chat-msg.onload{animation:colorchange-chatmessage 1s;-webkit-animation:colorchange-chatmessage 1s}#conversejs .message.chat-msg:hover{background-color:var(--list-item-hover-color)}#conversejs .message.chat-msg.correcting.groupchat{background-color:var(--chatroom-correcting-color)}#conversejs .message.chat-msg.correcting:not(.groupchat){background-color:var(--chat-correcting-color)}#conversejs .message.chat-msg .spoiler{margin-top:.5em}#conversejs .message.chat-msg .spoiler-hint{margin-bottom:.5em}#conversejs .message.chat-msg .spoiler-toggle{color:#fff}#conversejs .message.chat-msg .spoiler-toggle i{color:#fff;padding-right:.5em}#conversejs .message.chat-msg .spoiler-toggle:before{padding-right:.25em;whitespace:nowrap}#conversejs .message.chat-msg .chat-msg__content{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-left:.5rem;width:calc(100% - var(--message-avatar-width))}#conversejs .message.chat-msg .chat-msg__content:hover .btn--standalone{opacity:1}#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text{color:var(--subdued-color)}#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text,#conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text{color:var(--message-text-color)}#conversejs .message.chat-msg .chat-msg__content--action{width:100%;margin-left:0}#conversejs .message.chat-msg .chat-msg__body{display:flex;flex-direction:row;justify-content:space-between}#conversejs .message.chat-msg converse-chat-message-body{display:inline}#conversejs .message.chat-msg .chat-msg__message{line-height:1.5em;display:inline-flex;flex-direction:column;width:100%;overflow-wrap:break-word}#conversejs .message.chat-msg .chat-msg__edit-modal{cursor:pointer;padding-right:.5em}#conversejs .message.chat-msg .chat-msg__subject{font-weight:700;clear:right}#conversejs .message.chat-msg .chat-msg__text{color:var(--message-text-color);padding:0;white-space:pre-wrap;word-wrap:break-word;word-break:break-word}#conversejs .message.chat-msg .chat-msg__text a{word-wrap:break-word;word-break:break-all;display:inline}#conversejs .message.chat-msg .chat-msg__text a.chat-image__link{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}#conversejs .message.chat-msg .chat-msg__text img.emoji{height:1.5em;width:1.5em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs .message.chat-msg .chat-msg__text .emojione{margin-bottom:-6px}#conversejs .message.chat-msg .chat-msg__text--larger{font-size:1.6em;padding-top:.25em;padding-bottom:.25em}#conversejs .message.chat-msg .chat-msg__error{color:var(--error-color)}#conversejs .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}#conversejs .message.chat-msg .chat-msg__media a{word-wrap:break-word}#conversejs .message.chat-msg .chat-msg__media audio{width:100%}#conversejs .message.chat-msg converse-message-actions{margin-left:.5em}#conversejs .message.chat-msg .chat-msg__actions .dropdown-menu{min-width:5rem}#conversejs .message.chat-msg .chat-msg__actions i{color:var(--text-color-lighten-15-percent);font-size:70%}#conversejs .message.chat-msg .chat-msg__actions button{border:none;background:0 0;color:var(--text-color-lighten-15-percent);padding:0 .25em}#conversejs .message.chat-msg .chat-msg__actions .btn--standalone{opacity:0;margin-top:-.2em}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action{width:100%;padding:.5em 1em;text-align:left;white-space:nowrap}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action converse-icon{margin-right:.25em}#conversejs .message.chat-msg .chat-msg__actions .chat-msg__action:hover{color:var(--text-color);background-color:var(--list-item-hover-color)}#conversejs .message.chat-msg .chat-msg__avatar{margin-top:.5em;vertical-align:middle;height:var(--message-avatar-height);width:var(--message-avatar-width);min-height:var(--message-avatar-height);min-width:var(--message-avatar-width)}#conversejs .message.chat-msg .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}#conversejs .message.chat-msg .chat-msg__heading{width:100%;margin-top:.5em;padding-right:.25rem;padding-bottom:.25rem}#conversejs .message.chat-msg .chat-msg__heading .badge{margin-left:.5em;font-family:var(--normal_font)}#conversejs .message.chat-msg .chat-msg__heading .chat-msg__time{padding-left:.25em;padding-right:.25em;color:var(--text-color-lighten-15-percent)}#conversejs .message.chat-msg.chat-msg--action .chat-msg__message{flex-direction:row}#conversejs .message.chat-msg.chat-msg--action .chat-msg__text{width:auto}#conversejs .message.chat-msg.chat-msg--action .chat-msg__heading{margin-top:0;padding-bottom:0;width:auto}#conversejs .message.chat-msg.chat-msg--action .chat-msg__heading .fa{margin-left:.5em}#conversejs .message.chat-msg.chat-msg--action .chat-msg__author{font-size:var(--message-font-size)}#conversejs .message.chat-msg.chat-msg--action .chat-msg__time{margin-left:0}#conversejs .message.chat-msg.chat-msg--followup .chat-msg__avatar,#conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading{display:none}#conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:2.75rem;width:100%}#conversejs .message.chat-msg .chat-msg__receipt{margin-left:.5em;margin-right:.5em;color:var(--message-receipt-color)}#conversejs .chatroom-body .message.onload{animation:colorchange-chatmessage-muc 1s;-webkit-animation:colorchange-chatmessage-muc 1s}#conversejs .chatroom-body .message .separator{border-top:0;border-bottom:var(--chatroom-separator-border-bottom)}#conversejs.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content{margin-left:0}@media screen and (max-width:767px){#conversejs:not(.converse-embedded) .message.chat-msg .chat-msg__author{white-space:normal}}#conversejs.converse-overlayed #minimized-chats{order:100;width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}#conversejs.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}#conversejs.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}#conversejs.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#conversejs.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}#conversejs.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap}#conversejs.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}#conversejs.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}#conversejs.converse-overlayed #minimized-chats .chat-head-message-count-hidden,#conversejs.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none}#conversejs #controlbox .bookmarks-toggle,#conversejs #controlbox .bookmarks-toggle .fa{color:var(--groupchats-header-color)!important}#conversejs #controlbox .bookmarks-toggle .fa:hover,#conversejs #controlbox .bookmarks-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.fullscreen #controlbox #chatrooms .bookmarks-list dl.rooms-list.bookmarks dd.available-chatroom a.open-room{width:80%}#conversejs [hidden]{display:none}#conversejs .visually-hidden{position:absolute;clip:rect(0,0,0,0)}#conversejs .form-group .suggestion-box{width:100%}#conversejs .suggestion-box{position:relative}#conversejs .suggestion-box mark{background:var(--completion-light-color)}#conversejs .suggestion-box>input{display:block}#conversejs .suggestion-box .suggestion-box__results,#conversejs .suggestion-box>ul{position:absolute;left:0;right:0;z-index:2;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:rgba(255,255,255,.9);background:linear-gradient(to bottom right,#fff,rgba(255,255,255,.9));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);text-shadow:none}#conversejs .suggestion-box .suggestion-box__results:before,#conversejs .suggestion-box>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}#conversejs .suggestion-box .suggestion-box__results>li,#conversejs .suggestion-box>ul>li{text-overflow:ellipsis;overflow-x:hidden;position:relative;cursor:pointer;padding:1em}#conversejs .suggestion-box .suggestion-box__results--below{top:2em}#conversejs .suggestion-box .suggestion-box__results--above{bottom:4.5em}#conversejs .suggestion-box .suggestion-box__results--above:before{display:none}#conversejs .suggestion-box .suggestion-box__results--above:after{z-index:-1;content:"";position:absolute;bottom:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-left:0;border-top:0;transform:rotate(45deg)}#conversejs .suggestion-box>ul:empty,#conversejs .suggestion-box>ul[hidden]{display:none}@supports (transform:scale(0)){#conversejs .suggestion-box>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}#conversejs .suggestion-box>ul:empty,#conversejs .suggestion-box>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}#conversejs .suggestion-box>ul>li[aria-selected=true]{background:var(--completion-dark-color);color:var(--inverse-link-color)}#conversejs .suggestion-box li:hover mark{background:var(--completion-light-color);color:var(--inverse-link-color)}#conversejs .suggestion-box li[aria-selected=true] mark{background:var(--completion-normal-color);color:inherit}#conversejs.converse-fullscreen .suggestion-box__results--above{bottom:4.5em}#conversejs.converse-overlayed .suggestion-box__results--above{bottom:3.5em}#conversejs .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}#conversejs .chatbox converse-emoji-dropdown{display:inline-block}#conversejs .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}#conversejs .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--chat-head-color);overflow-y:hidden;background:#fff}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}#conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--chat-head-color);width:auto;font-size:var(--font-size)}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}#conversejs .chatbox converse-emoji-picker .emoji-picker{background-color:#fff;padding:.5em 0 0 .5em}#conversejs .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}#conversejs .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}#conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header{display:flex;flex-direction:column;padding:.1em 0;background-color:var(--chat-head-color)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:#fff;border:1px var(--chat-head-color) solid;border-bottom:none}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--highlight-color-darker)}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}#conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}#conversejs .chatroom converse-emoji-picker{background-color:var(--chatroom-head-bg-color);background:#fff}#conversejs .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--chatroom-head-bg-color)}#conversejs .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}#conversejs.converse-overlayed converse-emoji-dropdown .dropdown-menu{min-width:18em}#conversejs.converse-overlayed .chatbox .emoji-picker__header .emoji-category img{height:var(--font-size)!important;width:var(--font-size)!important}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji a{font-size:var(--font-size);line-height:calc(var(--font-size) * 1.5);padding:0;height:calc(var(--font-size) * 1.5);width:calc(var(--font-size) * 1.5)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji img{height:var(--font-size);width:var(--font-size)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-skintone-picker{font-size:var(--font-size-small)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__header .emoji-category{font-size:var(--font-size-small)}#conversejs.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__lists{height:7em}#conversejs.converse-embedded converse-emoji-dropdown .dropdown-menu{min-width:20em}#conversejs.converse-fullscreen converse-emoji-dropdown .dropdown-menu{min-width:22em}#conversejs.converse-fullscreen .chatbox converse-emoji-picker .emoji-picker__lists{height:12em}#conversejs .chatbox converse-emoji-picker{max-width:40em}
 
 /*# sourceMappingURL=converse.min.css.map*/
\ No newline at end of file
diff --git a/src/conversejs/converse.min.js b/src/conversejs/converse.min.js
index de4f5997b6dca070798b7e4f08efd4a4d80fe58d..07010e7dfce6a52f07a15134eaa922d6de7a6533 100644
--- a/src/conversejs/converse.min.js
+++ b/src/conversejs/converse.min.js
@@ -1,4 +1,4 @@
-!function(e){function t(t){for(var n,i,s=t[0],o=t[1],a=0,l=[];a<s.length;a++)i=s[a],Object.prototype.hasOwnProperty.call(r,i)&&r[i]&&l.push(r[i][0]),r[i]=0;for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n]);for(c&&c(t);l.length;)l.shift()()}var n={},r={177:0};function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var s=new Promise((function(t,i){n=r[e]=[t,i]}));t.push(n[2]=s);var o,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+""+({0:"locales/dayjs/af",1:"locales/dayjs/ar",2:"locales/dayjs/ar-dz",3:"locales/dayjs/ar-kw",4:"locales/dayjs/ar-ly",5:"locales/dayjs/ar-ma",6:"locales/dayjs/ar-sa",7:"locales/dayjs/ar-tn",8:"locales/dayjs/az",9:"locales/dayjs/be",10:"locales/dayjs/bg",11:"locales/dayjs/bi",12:"locales/dayjs/bm",13:"locales/dayjs/bn",14:"locales/dayjs/bo",15:"locales/dayjs/br",16:"locales/dayjs/bs",17:"locales/dayjs/ca",18:"locales/dayjs/cs",19:"locales/dayjs/cv",20:"locales/dayjs/cy",21:"locales/dayjs/da",22:"locales/dayjs/de",23:"locales/dayjs/de-at",24:"locales/dayjs/de-ch",25:"locales/dayjs/dv",26:"locales/dayjs/el",27:"locales/dayjs/en",28:"locales/dayjs/en-SG",29:"locales/dayjs/en-au",30:"locales/dayjs/en-ca",31:"locales/dayjs/en-gb",32:"locales/dayjs/en-ie",33:"locales/dayjs/en-il",34:"locales/dayjs/en-in",35:"locales/dayjs/en-nz",36:"locales/dayjs/en-tt",37:"locales/dayjs/eo",38:"locales/dayjs/es",39:"locales/dayjs/es-do",40:"locales/dayjs/es-pr",41:"locales/dayjs/es-us",42:"locales/dayjs/et",43:"locales/dayjs/eu",44:"locales/dayjs/fa",45:"locales/dayjs/fi",46:"locales/dayjs/fo",47:"locales/dayjs/fr",48:"locales/dayjs/fr-ca",49:"locales/dayjs/fr-ch",50:"locales/dayjs/fy",51:"locales/dayjs/ga",52:"locales/dayjs/gd",53:"locales/dayjs/gl",54:"locales/dayjs/gom-latn",55:"locales/dayjs/gu",56:"locales/dayjs/he",57:"locales/dayjs/hi",58:"locales/dayjs/hr",59:"locales/dayjs/ht",60:"locales/dayjs/hu",61:"locales/dayjs/hy-am",62:"locales/dayjs/id",63:"locales/dayjs/is",64:"locales/dayjs/it",65:"locales/dayjs/it-ch",66:"locales/dayjs/ja",67:"locales/dayjs/jv",68:"locales/dayjs/ka",69:"locales/dayjs/kk",70:"locales/dayjs/km",71:"locales/dayjs/kn",72:"locales/dayjs/ko",73:"locales/dayjs/ku",74:"locales/dayjs/ky",75:"locales/dayjs/lb",76:"locales/dayjs/lo",77:"locales/dayjs/lt",78:"locales/dayjs/lv",79:"locales/dayjs/me",80:"locales/dayjs/mi",81:"locales/dayjs/mk",82:"locales/dayjs/ml",83:"locales/dayjs/mn",84:"locales/dayjs/mr",85:"locales/dayjs/ms",86:"locales/dayjs/ms-my",87:"locales/dayjs/mt",88:"locales/dayjs/my",89:"locales/dayjs/nb",90:"locales/dayjs/ne",91:"locales/dayjs/nl",92:"locales/dayjs/nl-be",93:"locales/dayjs/nn",94:"locales/dayjs/oc-lnc",95:"locales/dayjs/pa-in",96:"locales/dayjs/pl",97:"locales/dayjs/pt",98:"locales/dayjs/pt-br",99:"locales/dayjs/ro",100:"locales/dayjs/ru",101:"locales/dayjs/rw",102:"locales/dayjs/sd",103:"locales/dayjs/se",104:"locales/dayjs/si",105:"locales/dayjs/sk",106:"locales/dayjs/sl",107:"locales/dayjs/sq",108:"locales/dayjs/sr",109:"locales/dayjs/sr-cyrl",110:"locales/dayjs/ss",111:"locales/dayjs/sv",112:"locales/dayjs/sw",113:"locales/dayjs/ta",114:"locales/dayjs/te",115:"locales/dayjs/tet",116:"locales/dayjs/tg",117:"locales/dayjs/th",118:"locales/dayjs/tk",119:"locales/dayjs/tl-ph",120:"locales/dayjs/tlh",121:"locales/dayjs/tr",122:"locales/dayjs/tzl",123:"locales/dayjs/tzm",124:"locales/dayjs/tzm-latn",125:"locales/dayjs/ug-cn",126:"locales/dayjs/uk",127:"locales/dayjs/ur",128:"locales/dayjs/uz",129:"locales/dayjs/uz-latn",130:"locales/dayjs/vi",131:"locales/dayjs/x-pseudo",132:"locales/dayjs/yo",133:"locales/dayjs/zh",134:"locales/dayjs/zh-cn",135:"locales/dayjs/zh-hk",136:"locales/dayjs/zh-tw",137:"emojis",138:"icons",139:"locales/af-LC_MESSAGES-converse-po",140:"locales/ar-LC_MESSAGES-converse-po",141:"locales/bg-LC_MESSAGES-converse-po",142:"locales/ca-LC_MESSAGES-converse-po",143:"locales/cs-LC_MESSAGES-converse-po",144:"locales/da-LC_MESSAGES-converse-po",145:"locales/dayjs/index-d-ts",146:"locales/dayjs/types-d-ts",147:"locales/de-LC_MESSAGES-converse-po",148:"locales/eo-LC_MESSAGES-converse-po",149:"locales/es-LC_MESSAGES-converse-po",150:"locales/eu-LC_MESSAGES-converse-po",151:"locales/fi-LC_MESSAGES-converse-po",152:"locales/fr-LC_MESSAGES-converse-po",153:"locales/gl-LC_MESSAGES-converse-po",154:"locales/he-LC_MESSAGES-converse-po",155:"locales/hi-LC_MESSAGES-converse-po",156:"locales/hu-LC_MESSAGES-converse-po",157:"locales/id-LC_MESSAGES-converse-po",158:"locales/it-LC_MESSAGES-converse-po",159:"locales/ja-LC_MESSAGES-converse-po",160:"locales/lt-LC_MESSAGES-converse-po",161:"locales/mr-LC_MESSAGES-converse-po",162:"locales/nb-LC_MESSAGES-converse-po",163:"locales/nl-LC_MESSAGES-converse-po",164:"locales/nl_BE-LC_MESSAGES-converse-po",165:"locales/oc-LC_MESSAGES-converse-po",166:"locales/pl-LC_MESSAGES-converse-po",167:"locales/pt-LC_MESSAGES-converse-po",168:"locales/pt_BR-LC_MESSAGES-converse-po",169:"locales/ro-LC_MESSAGES-converse-po",170:"locales/ru-LC_MESSAGES-converse-po",171:"locales/th-LC_MESSAGES-converse-po",172:"locales/tr-LC_MESSAGES-converse-po",173:"locales/uk-LC_MESSAGES-converse-po",174:"locales/vi-LC_MESSAGES-converse-po",175:"locales/zh_CN-LC_MESSAGES-converse-po",176:"locales/zh_TW-LC_MESSAGES-converse-po"}[e]||e)+".js"}(e);var c=new Error;o=function(t){a.onerror=a.onload=null,clearTimeout(l);var n=r[e];if(0!==n){if(n){var i=t&&("load"===t.type?"missing":t.type),s=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+i+": "+s+")",c.name="ChunkLoadError",c.type=i,c.request=s,n[1](c)}r[e]=void 0}};var l=setTimeout((function(){o({type:"timeout",target:a})}),12e4);a.onerror=a.onload=o,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i.oe=function(e){throw console.error(e),e};var s=window.webpackJsonp=window.webpackJsonp||[],o=s.push.bind(s);s.push=t,s=s.slice();for(var a=0;a<s.length;a++)t(s[a]);var c=o;i(i.s=284)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return v})),n.d(t,"c",(function(){return _})),n.d(t,"b",(function(){return b})),n.d(t,"d",(function(){return y})),n.d(t,"e",(function(){return w}));var r=n(13);const i=function(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n},s=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<n%32;return t},o=function(e,t,n,r,s,o){return i((a=i(i(t,e),i(r,o)))<<(c=s)|a>>>32-c,n);var a,c},a=function(e,t,n,r,i,s,a){return o(t&n|~t&r,e,t,i,s,a)},c=function(e,t,n,r,i,s,a){return o(t&r|n&~r,e,t,i,s,a)},l=function(e,t,n,r,i,s,a){return o(t^n^r,e,t,i,s,a)},u=function(e,t,n,r,i,s,a){return o(n^(t|~r),e,t,i,s,a)},d=function(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;let n,r,s,o,d=1732584193,h=-271733879,f=-1732584194,p=271733878;for(let t=0;t<e.length;t+=16)n=d,r=h,s=f,o=p,d=a(d,h,f,p,e[t+0],7,-680876936),p=a(p,d,h,f,e[t+1],12,-389564586),f=a(f,p,d,h,e[t+2],17,606105819),h=a(h,f,p,d,e[t+3],22,-1044525330),d=a(d,h,f,p,e[t+4],7,-176418897),p=a(p,d,h,f,e[t+5],12,1200080426),f=a(f,p,d,h,e[t+6],17,-1473231341),h=a(h,f,p,d,e[t+7],22,-45705983),d=a(d,h,f,p,e[t+8],7,1770035416),p=a(p,d,h,f,e[t+9],12,-1958414417),f=a(f,p,d,h,e[t+10],17,-42063),h=a(h,f,p,d,e[t+11],22,-1990404162),d=a(d,h,f,p,e[t+12],7,1804603682),p=a(p,d,h,f,e[t+13],12,-40341101),f=a(f,p,d,h,e[t+14],17,-1502002290),h=a(h,f,p,d,e[t+15],22,1236535329),d=c(d,h,f,p,e[t+1],5,-165796510),p=c(p,d,h,f,e[t+6],9,-1069501632),f=c(f,p,d,h,e[t+11],14,643717713),h=c(h,f,p,d,e[t+0],20,-373897302),d=c(d,h,f,p,e[t+5],5,-701558691),p=c(p,d,h,f,e[t+10],9,38016083),f=c(f,p,d,h,e[t+15],14,-660478335),h=c(h,f,p,d,e[t+4],20,-405537848),d=c(d,h,f,p,e[t+9],5,568446438),p=c(p,d,h,f,e[t+14],9,-1019803690),f=c(f,p,d,h,e[t+3],14,-187363961),h=c(h,f,p,d,e[t+8],20,1163531501),d=c(d,h,f,p,e[t+13],5,-1444681467),p=c(p,d,h,f,e[t+2],9,-51403784),f=c(f,p,d,h,e[t+7],14,1735328473),h=c(h,f,p,d,e[t+12],20,-1926607734),d=l(d,h,f,p,e[t+5],4,-378558),p=l(p,d,h,f,e[t+8],11,-2022574463),f=l(f,p,d,h,e[t+11],16,1839030562),h=l(h,f,p,d,e[t+14],23,-35309556),d=l(d,h,f,p,e[t+1],4,-1530992060),p=l(p,d,h,f,e[t+4],11,1272893353),f=l(f,p,d,h,e[t+7],16,-155497632),h=l(h,f,p,d,e[t+10],23,-1094730640),d=l(d,h,f,p,e[t+13],4,681279174),p=l(p,d,h,f,e[t+0],11,-358537222),f=l(f,p,d,h,e[t+3],16,-722521979),h=l(h,f,p,d,e[t+6],23,76029189),d=l(d,h,f,p,e[t+9],4,-640364487),p=l(p,d,h,f,e[t+12],11,-421815835),f=l(f,p,d,h,e[t+15],16,530742520),h=l(h,f,p,d,e[t+2],23,-995338651),d=u(d,h,f,p,e[t+0],6,-198630844),p=u(p,d,h,f,e[t+7],10,1126891415),f=u(f,p,d,h,e[t+14],15,-1416354905),h=u(h,f,p,d,e[t+5],21,-57434055),d=u(d,h,f,p,e[t+12],6,1700485571),p=u(p,d,h,f,e[t+3],10,-1894986606),f=u(f,p,d,h,e[t+10],15,-1051523),h=u(h,f,p,d,e[t+1],21,-2054922799),d=u(d,h,f,p,e[t+8],6,1873313359),p=u(p,d,h,f,e[t+15],10,-30611744),f=u(f,p,d,h,e[t+6],15,-1560198380),h=u(h,f,p,d,e[t+13],21,1309151649),d=u(d,h,f,p,e[t+4],6,-145523070),p=u(p,d,h,f,e[t+11],10,-1120210379),f=u(f,p,d,h,e[t+2],15,718787259),h=u(h,f,p,d,e[t+9],21,-343485551),d=i(d,n),h=i(h,r),f=i(f,s),p=i(p,o);return[d,h,f,p]},h={hexdigest:function(e){return function(e){let t="";for(let n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(d(s(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(d(s(e),8*e.length))}};var f=n(7);const p=function(e){var t,n,r="",i=e.length;for(t=0;t<i;t++)(n=e.charCodeAt(t))>=0&&n<=127?r+=e.charAt(t):n>2047?(r+=String.fromCharCode(224|n>>12&15),r+=String.fromCharCode(128|n>>6&63),r+=String.fromCharCode(128|n>>0&63)):(r+=String.fromCharCode(192|n>>6&31),r+=String.fromCharCode(128|n>>0&63));return r},g=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",r="",i="";const s=e[t],o="object"==typeof s,a=escape(unescape(o?s.value:s));o&&(n=s.expires?";expires="+s.expires:"",r=s.domain?";domain="+s.domain:"",i=s.path?";path="+s.path:""),document.cookie=t+"="+a+n+r+i}};var m=n(9);function v(e,t){return new w.Builder(e,t)}function _(e){return new w.Builder("message",e)}function b(e){return new w.Builder("iq",e)}function y(e){return new w.Builder("presence",e)}const w={VERSION:"1.3.6",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",FRAMING:"urn:ietf:params:xml:ns:xmpp-framing",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag(e){for(let t=0;t<w.XHTML.tags.length;t++)if(e===w.XHTML.tags[t])return!0;return!1},validAttribute(e,t){if(void 0!==w.XHTML.attributes[e]&&w.XHTML.attributes[e].length>0)for(let n=0;n<w.XHTML.attributes[e].length;n++)if(t===w.XHTML.attributes[e][n])return!0;return!1},validCSS(e){for(let t=0;t<w.XHTML.css.length;t++)if(e===w.XHTML.css[t])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8,REDIRECT:9,CONNTIMEOUT:10,BINDREQUIRED:11,ATTACHFAIL:12},ErrorCondition:{BAD_FORMAT:"bad-format",CONFLICT:"conflict",MISSING_JID_NODE:"x-strophe-bad-non-anon-jid",NO_AUTH_MECH:"no-auth-mech",UNKNOWN_REASON:"unknown"},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace(e,t){w.NS[e]=t},forEachChild(e,t,n){for(let r=0;r<e.childNodes.length;r++){const i=e.childNodes[r];i.nodeType!==w.ElementType.NORMAL||t&&!this.isTagEqual(i,t)||n(i)}},isTagEqual:(e,t)=>e.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(w._xmlGenerator||(w._xmlGenerator=r.b()),w._xmlGenerator),xmlElement(e){if(!e)return null;const t=w.xmlGenerator().createElement(e);for(let e=1;e<arguments.length;e++){const n=arguments[e];if(n)if("string"==typeof n||"number"==typeof n)t.appendChild(w.xmlTextNode(n));else if("object"==typeof n&&"function"==typeof n.sort)for(let e=0;e<n.length;e++){const r=n[e];"object"==typeof r&&"function"==typeof r.sort&&void 0!==r[1]&&null!==r[1]&&t.setAttribute(r[0],r[1])}else if("object"==typeof n)for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&void 0!==n[e]&&null!==n[e]&&t.setAttribute(e,n[e])}return t},xmlescape:e=>e=(e=(e=(e=(e=e.replace(/\&/g,"&amp;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;")).replace(/'/g,"&apos;")).replace(/"/g,"&quot;"),xmlunescape:e=>e=(e=(e=(e=(e=e.replace(/\&amp;/g,"&")).replace(/&lt;/g,"<")).replace(/&gt;/g,">")).replace(/&apos;/g,"'")).replace(/&quot;/g,'"'),xmlTextNode:e=>w.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;if(r.a){t=(new r.a).parseFromString(e,"text/xml")}else t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e);return t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===w.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===w.ElementType.TEXT&&(t+=e.childNodes[n].nodeValue);return w.xmlescape(t)},copyElement(e){let t;if(e.nodeType===w.ElementType.NORMAL){t=w.xmlElement(e.tagName);for(let n=0;n<e.attributes.length;n++)t.setAttribute(e.attributes[n].nodeName,e.attributes[n].value);for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.copyElement(e.childNodes[n]))}else e.nodeType===w.ElementType.TEXT&&(t=w.xmlGenerator().createTextNode(e.nodeValue));return t},createHtml(e){let t;if(e.nodeType===w.ElementType.NORMAL){const n=e.nodeName.toLowerCase();if(w.XHTML.validTag(n))try{t=w.xmlElement(n);for(let r=0;r<w.XHTML.attributes[n].length;r++){const i=w.XHTML.attributes[n][r];let s=e.getAttribute(i);if(null!=s&&""!==s&&!1!==s&&0!==s)if("style"===i&&"object"==typeof s&&void 0!==s.cssText&&(s=s.cssText),"style"===i){const e=[],n=s.split(";");for(let t=0;t<n.length;t++){const r=n[t].split(":"),i=r[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase();if(w.XHTML.validCSS(i)){const t=r[1].replace(/^\s*/,"").replace(/\s*$/,"");e.push(i+": "+t)}}e.length>0&&(s=e.join("; "),t.setAttribute(i,s))}else t.setAttribute(i,s)}for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}catch(e){t=w.xmlTextNode("")}else{t=w.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}}else if(e.nodeType===w.ElementType.FRAGMENT){t=w.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}else e.nodeType===w.ElementType.TEXT&&(t=w.xmlTextNode(e.nodeValue));return t},escapeNode:e=>"string"!=typeof e?e:e.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=w.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&w.fatal(e.stack),e.sourceURL?w.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?w.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):w.fatal("error: "+e.message)},log(e,t){e===this.LogLevel.FATAL&&"object"==typeof window.console&&"function"==typeof window.console.error&&window.console.error(t)},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map(t=>e.attributes[t].nodeName);t.sort();let n=t.reduce((t,n)=>"".concat(t," ").concat(n,'="').concat(w.xmlescape(e.attributes.getNamedItem(n).value),'"'),"<".concat(e.nodeName));if(e.childNodes.length>0){n+=">";for(let t=0;t<e.childNodes.length;t++){const r=e.childNodes[t];switch(r.nodeType){case w.ElementType.NORMAL:n+=w.serialize(r);break;case w.ElementType.TEXT:n+=w.xmlescape(r.nodeValue);break;case w.ElementType.CDATA:n+="<![CDATA["+r.nodeValue+"]]>"}}n+="</"+e.nodeName+">"}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){w._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=w.NS.CLIENT:t||(t={xmlns:w.NS.CLIENT})),this.nodeTree=w.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return w.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const r=w.xmlElement(e,t,n);return this.node.appendChild(r),"string"!=typeof n&&"number"!=typeof n&&(this.node=r),this}cnode(e){let t;const n=w.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const r=t?n.importNode(e,!0):w.copyElement(e);return this.node.appendChild(r),this.node=r,this}t(e){const t=w.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=w.xmlGenerator().createElement("body");t.innerHTML=e;const n=w.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,r,i,s,o){this.handler=e,this.ns=t,this.name=n,this.type=r,this.id=i,this.options=o||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(w.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=s?w.getBareJidFromJid(s):null:this.from=s,this.user=!0}};w.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(w.forEachChild(e,null,e=>{this.getNamespace(e)===this.ns&&(t=!0)}),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=w.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!w.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw w._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},w.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},w.Connection=class{constructor(e,t){this.service=e,this.options=t||{};const n=this.options.protocol||"";this.options.worker?this._proto=new w.WorkerWebsocket(this):0===e.indexOf("ws:")||0===e.indexOf("wss:")||0===n.indexOf("ws")?this._proto=new w.Websocket(this):this._proto=new w.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(()=>this._onIdle(),100),g(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms);for(const e in w._connectionPlugins)if(Object.prototype.hasOwnProperty.call(w._connectionPlugins,e)){const t=function(){};t.prototype=w._connectionPlugins[e],this[e]=new t,this[e].init(this)}}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,r,i,s,o){this.jid=e,this.authzid=w.getBareJidFromJid(this.jid),this.authcid=o||w.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.domain=w.getDomainFromJid(this.jid),this._changeConnectStatus(w.Status.CONNECTING,null),this._proto._connect(r,i,s)}attach(e,t,n,r,i,s,o){if(this._proto._attach)return this._proto._attach(e,t,n,r,i,s,o);{const e=new Error('The "attach" method is not available for your connection protocol');throw e.name="StropheSessionError",e}}restore(e,t,n,r,i){if(!this._sessionCachingSupported()){const e=new Error('The "restore" method can only be used with a BOSH connection.');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,r,i)}_sessionCachingSupported(){if(this._proto instanceof w.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t<e.length;t++)this._queueData(e[t]);else"function"==typeof e.tree?this._queueData(e.tree()):this._queueData(e);this._proto._send()}}flush(){clearTimeout(this._idleTimeout),this._onIdle()}sendPresence(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let s=e.getAttribute("id");if(s||(s=this.getUniqueId("sendPresence"),e.setAttribute("id",s)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)},null,"presence",null,s);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),s}sendIQ(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let s=e.getAttribute("id");if(s||(s=this.getUniqueId("sendIQ"),e.setAttribute("id",s)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i);const r=e.getAttribute("type");if("result"===r)t&&t(e);else{if("error"!==r){const e=new Error("Got bad IQ type of ".concat(r));throw e.name="StropheError",e}n&&n(e)}},null,"iq",["error","result"],s);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),s}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(()=>this._onIdle(),100)}addTimedHandler(e,t){const n=new w.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,r,i,s,o){const a=new w.Handler(e,t,n,r,i,s,o);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[w.SASLAnonymous,w.SASLExternal,w.SASLOAuthBearer,w.SASLXOAuth2,w.SASLPlain,w.SASLSHA1]).forEach(e=>this.registerSASLMechanism(e))}registerSASLMechanism(e){this.mechanisms[e.name]=e}disconnect(e){if(this._changeConnectStatus(w.Status.DISCONNECTING,e),e?w.warn("Disconnect was called because: "+e):w.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=y({xmlns:w.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else w.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in w._connectionPlugins)if(Object.prototype.hasOwnProperty.call(w._connectionPlugins,n)){const r=this[n];if(r.statusChanged)try{r.statusChanged(e,t)}catch(e){w.error("".concat(n," plugin caused an exception changing status: ").concat(e))}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){w._handleError(e),w.error("User connection callback caused an exception: ".concat(e))}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),w.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(w.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==w.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==w.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(w.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const r=n.getAttribute("type");if(null!==r&&"terminate"===r){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(w.Status.CONNFAIL,e)):this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}w.forEachChild(n,null,e=>{const t=this.handlers;this.handlers=[];for(let n=0;n<t.length;n++){const r=t[n];try{(!r.isMatch(e)||!this.authenticated&&r.user||r.run(e))&&this.handlers.push(r)}catch(e){w.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}_connect_cb(e,t,n){let r;w.debug("_connect_cb was called"),this.connected=!0;try{r=this._proto._reqToData(e)}catch(e){if(e.name!==w.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.BAD_FORMAT),this._doDisconnect(w.ErrorCondition.BAD_FORMAT)}if(!r)return;if(this.xmlInput!==w.Connection.prototype.xmlInput&&(r.nodeName===this._proto.strip&&r.childNodes.length?this.xmlInput(r.childNodes[0]):this.xmlInput(r)),this.rawInput!==w.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(w.serialize(r))),this._proto._connect_cb(r)===w.Status.CONNFAIL)return;let i;if(i=r.getElementsByTagNameNS?r.getElementsByTagNameNS(w.NS.STREAM,"features").length>0:r.getElementsByTagName("stream:features").length>0||r.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(t);const s=Array.from(r.getElementsByTagName("mechanism")).map(e=>this.mechanisms[e.textContent]).filter(e=>e);0!==s.length||0!==r.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(s):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;t<e.length-1;++t){let n=t;for(let r=t+1;r<e.length;++r)e[r].priority>e[n].priority&&(n=r);if(n!==t){const r=e[t];e[t]=e[n],e[n]=r}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n<e.length;++n){if(!e[n].test(this))continue;this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=new e[n],this._sasl_mechanism.onStart(this);const r=v("auth",{xmlns:w.NS.SASL,mechanism:this._sasl_mechanism.name});if(this._sasl_mechanism.isClientFirst){const e=this._sasl_mechanism.onChallenge(this,null);r.t(Object(m.btoa)(e))}this.send(r.tree()),t=!0;break}return t}_sasl_challenge_cb(e){const t=Object(m.atob)(w.getText(e)),n=this._sasl_mechanism.onChallenge(this,t),r=v("response",{xmlns:w.NS.SASL});return""!==n&&r.t(Object(m.btoa)(n)),this.send(r.tree()),!0}_attemptLegacyAuth(){null===w.getNodeFromJid(this.jid)?(this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.MISSING_JID_NODE),this.disconnect(w.ErrorCondition.MISSING_JID_NODE)):(this._changeConnectStatus(w.Status.AUTHENTICATING,null),this._addSysHandler(this._onLegacyAuthIQResult.bind(this),null,null,null,"_auth_1"),this.send(b({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:w.NS.AUTH}).c("username",{}).t(w.getNodeFromJid(this.jid)).tree()))}_onLegacyAuthIQResult(e){const t=b({type:"set",id:"_auth_2"}).c("query",{xmlns:w.NS.AUTH}).c("username",{}).t(w.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return w.getResourceFromJid(this.jid)||(this.jid=w.getBareJidFromJid(this.jid)+"/strophe"),t.up().c("resource",{}).t(w.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(t.tree()),!1}_sasl_success_cb(e){if(this._sasl_data["server-signature"]){let t;const n=/([a-z]+)=([^,]+)(,|$)/,r=Object(m.atob)(w.getText(e)).match(n);if("v"===r[1]&&(t=r[2]),t!==this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}w.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null);const t=[],n=(e,t)=>{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler(e=>n(t,e),null,"stream:features",null,null)),t.push(this._addSysHandler(e=>n(t,e),w.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t<e.childNodes.length;t++){const n=e.childNodes[t];"bind"===n.nodeName&&(this.do_bind=!0),"session"===n.nodeName&&(this.do_session=!0)}return this.do_bind?(this.options.explicitResourceBinding?this._changeConnectStatus(w.Status.BINDREQUIRED,null):this.bind(),!1):(this._changeConnectStatus(w.Status.AUTHFAIL,null),!1)}bind(){if(!this.do_bind)return void w.log(w.LogLevel.INFO,'Strophe.Connection.prototype.bind called but "do_bind" is false');this._addSysHandler(this._onResourceBindResultIQ.bind(this),null,null,null,"_bind_auth_2");const e=w.getResourceFromJid(this.jid);e?this.send(b({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:w.NS.BIND}).c("resource",{}).t(e).tree()):this.send(b({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:w.NS.BIND}).tree())}_onResourceBindResultIQ(e){if("error"===e.getAttribute("type")){let t;return w.warn("Resource binding failed."),e.getElementsByTagName("conflict").length>0&&(t=w.ErrorCondition.CONFLICT),this._changeConnectStatus(w.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return w.warn("Resource binding failed."),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.jid=w.getText(e[0]),this.do_session?this._establishSession():(this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null)))}}_establishSession(){if(!this.do_session)throw new Error("Strophe.Connection.prototype._establishSession "+"called but apparently ".concat(w.NS.SESSION," wasn't advertised by the server"));this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(b({type:"set",id:"_session_auth_2"}).c("session",{xmlns:w.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return w.warn("Session creation failed."),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(w.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new w.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,r,i){const s=new w.Handler(e,t,n,r,i);return s.user=!1,this.addHandlers.push(s),s}_onDisconnectTimeout(){return w.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(w.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;n<this.timedHandlers.length;n++){const r=this.timedHandlers[n];if(this.authenticated||!r.user){r.lastCalled+r.period-e<=0?r.run()&&t.push(r):t.push(r)}}this.timedHandlers=t,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(()=>this._onIdle(),100))}},w.SASLMechanism=class{constructor(e,t,n){this.name=e,this.isClientFirst=t,this.priority=n}static test(e){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}onFailure(){this._connection=null}onSuccess(){this._connection=null}},w.SASLAnonymous=class extends w.SASLMechanism{constructor(){super(w.SASLAnonymous.name,!1,w.SASLAnonymous.priority)}static get name(){return"ANONYMOUS"}static get priority(){return 20}static test(e){return null===e.authcid}},w.SASLPlain=class extends w.SASLMechanism{constructor(){super(w.SASLPlain.name,!0,w.SASLPlain.priority)}static get name(){return"PLAIN"}static get priority(){return 50}static test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:r,pass:i}=e;if(!r)throw new Error("SASLPlain onChallenge: domain is not defined!");let s=n!=="".concat(t,"@").concat(r)?n:"";return s+="\0",s+=t,s+="\0",s+=i,p(s)}},w.SASLSHA1=class extends w.SASLMechanism{constructor(){super(w.SASLSHA1.name,!0,w.SASLSHA1.priority)}static get name(){return"SCRAM-SHA-1"}static get priority(){return 60}static test(e){return null!==e.authcid}onChallenge(e,t,n){const r=n||h.hexdigest(""+1234567890*Math.random());let i="n="+p(e.authcid);return i+=",r=",i+=r,e._sasl_data.cnonce=r,e._sasl_data["client-first-message-bare"]=i,i="n,,"+i,this.onChallenge=(e,t)=>{let n,r,i,s,o,a,c,l,u="c=biws,",d="".concat(e._sasl_data["client-first-message-bare"],",").concat(t,",");const h=e._sasl_data.cnonce,g=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(g);){const e=t.match(g);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":r=e[2];break;case"i":i=e[2]}}if(n.substr(0,h.length)!==h)return e._sasl_data={},e._sasl_failure_cb();u+="r="+n,d+=u,r=Object(m.atob)(r),r+="\0\0\0";const v=p(e.pass);for(s=a=f.a.core_hmac_sha1(v,r),c=1;c<i;c++){for(o=f.a.core_hmac_sha1(v,f.a.binb2str(a)),l=0;l<5;l++)s[l]^=o[l];a=o}s=f.a.binb2str(s);const _=f.a.core_hmac_sha1(s,"Client Key"),b=f.a.str_hmac_sha1(s,"Server Key"),y=f.a.core_hmac_sha1(f.a.str_sha1(f.a.binb2str(_)),d);for(e._sasl_data["server-signature"]=f.a.b64_hmac_sha1(b,d),l=0;l<5;l++)_[l]^=y[l];return u+=",p="+Object(m.btoa)(f.a.binb2str(_)),u},i}},w.SASLOAuthBearer=class extends w.SASLMechanism{constructor(){super(w.SASLOAuthBearer.name,!0,w.SASLOAuthBearer.priority)}static get name(){return"OAUTHBEARER"}static get priority(){return 40}static test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",p(t)}},w.SASLExternal=class extends w.SASLMechanism{constructor(){super(w.SASLExternal.name,!0,w.SASLExternal.priority)}static get name(){return"EXTERNAL"}static get priority(){return 10}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},w.SASLXOAuth2=class extends w.SASLMechanism{constructor(){super(w.SASLXOAuth2.name,!0,w.SASLXOAuth2.priority)}static get name(){return"X-OAUTH2"}static get priority(){return 30}static test(e){return null!==e.pass}onChallenge(e){let t="\0";return null!==e.authcid&&(t+=e.authzid),t+="\0",t+=e.pass,p(t)}};t.f={Strophe:w,$build:v,$iq:b,$msg:_,$pres:y,SHA1:f.a,MD5:h,b64_hmac_sha1:f.a.b64_hmac_sha1,b64_sha1:f.a.b64_sha1,str_hmac_sha1:f.a.str_hmac_sha1,str_sha1:f.a.str_sha1}},function(e,t,n){"use strict";n.d(t,"a",(function(){return C})),n.d(t,"b",(function(){return j})),n.d(t,"c",(function(){return O}));var r=n(14);const i=function(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n},s=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<n%32;return t},o=function(e,t,n,r,s,o){return i((a=i(i(t,e),i(r,o)))<<(c=s)|a>>>32-c,n);var a,c},a=function(e,t,n,r,i,s,a){return o(t&n|~t&r,e,t,i,s,a)},c=function(e,t,n,r,i,s,a){return o(t&r|n&~r,e,t,i,s,a)},l=function(e,t,n,r,i,s,a){return o(t^n^r,e,t,i,s,a)},u=function(e,t,n,r,i,s,a){return o(n^(t|~r),e,t,i,s,a)},d=function(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;let n,r,s,o,d=1732584193,h=-271733879,f=-1732584194,p=271733878;for(let t=0;t<e.length;t+=16)n=d,r=h,s=f,o=p,d=a(d,h,f,p,e[t+0],7,-680876936),p=a(p,d,h,f,e[t+1],12,-389564586),f=a(f,p,d,h,e[t+2],17,606105819),h=a(h,f,p,d,e[t+3],22,-1044525330),d=a(d,h,f,p,e[t+4],7,-176418897),p=a(p,d,h,f,e[t+5],12,1200080426),f=a(f,p,d,h,e[t+6],17,-1473231341),h=a(h,f,p,d,e[t+7],22,-45705983),d=a(d,h,f,p,e[t+8],7,1770035416),p=a(p,d,h,f,e[t+9],12,-1958414417),f=a(f,p,d,h,e[t+10],17,-42063),h=a(h,f,p,d,e[t+11],22,-1990404162),d=a(d,h,f,p,e[t+12],7,1804603682),p=a(p,d,h,f,e[t+13],12,-40341101),f=a(f,p,d,h,e[t+14],17,-1502002290),h=a(h,f,p,d,e[t+15],22,1236535329),d=c(d,h,f,p,e[t+1],5,-165796510),p=c(p,d,h,f,e[t+6],9,-1069501632),f=c(f,p,d,h,e[t+11],14,643717713),h=c(h,f,p,d,e[t+0],20,-373897302),d=c(d,h,f,p,e[t+5],5,-701558691),p=c(p,d,h,f,e[t+10],9,38016083),f=c(f,p,d,h,e[t+15],14,-660478335),h=c(h,f,p,d,e[t+4],20,-405537848),d=c(d,h,f,p,e[t+9],5,568446438),p=c(p,d,h,f,e[t+14],9,-1019803690),f=c(f,p,d,h,e[t+3],14,-187363961),h=c(h,f,p,d,e[t+8],20,1163531501),d=c(d,h,f,p,e[t+13],5,-1444681467),p=c(p,d,h,f,e[t+2],9,-51403784),f=c(f,p,d,h,e[t+7],14,1735328473),h=c(h,f,p,d,e[t+12],20,-1926607734),d=l(d,h,f,p,e[t+5],4,-378558),p=l(p,d,h,f,e[t+8],11,-2022574463),f=l(f,p,d,h,e[t+11],16,1839030562),h=l(h,f,p,d,e[t+14],23,-35309556),d=l(d,h,f,p,e[t+1],4,-1530992060),p=l(p,d,h,f,e[t+4],11,1272893353),f=l(f,p,d,h,e[t+7],16,-155497632),h=l(h,f,p,d,e[t+10],23,-1094730640),d=l(d,h,f,p,e[t+13],4,681279174),p=l(p,d,h,f,e[t+0],11,-358537222),f=l(f,p,d,h,e[t+3],16,-722521979),h=l(h,f,p,d,e[t+6],23,76029189),d=l(d,h,f,p,e[t+9],4,-640364487),p=l(p,d,h,f,e[t+12],11,-421815835),f=l(f,p,d,h,e[t+15],16,530742520),h=l(h,f,p,d,e[t+2],23,-995338651),d=u(d,h,f,p,e[t+0],6,-198630844),p=u(p,d,h,f,e[t+7],10,1126891415),f=u(f,p,d,h,e[t+14],15,-1416354905),h=u(h,f,p,d,e[t+5],21,-57434055),d=u(d,h,f,p,e[t+12],6,1700485571),p=u(p,d,h,f,e[t+3],10,-1894986606),f=u(f,p,d,h,e[t+10],15,-1051523),h=u(h,f,p,d,e[t+1],21,-2054922799),d=u(d,h,f,p,e[t+8],6,1873313359),p=u(p,d,h,f,e[t+15],10,-30611744),f=u(f,p,d,h,e[t+6],15,-1560198380),h=u(h,f,p,d,e[t+13],21,1309151649),d=u(d,h,f,p,e[t+4],6,-145523070),p=u(p,d,h,f,e[t+11],10,-1120210379),f=u(f,p,d,h,e[t+2],15,718787259),h=u(h,f,p,d,e[t+9],21,-343485551),d=i(d,n),h=i(h,r),f=i(f,s),p=i(p,o);return[d,h,f,p]},h={hexdigest:function(e){return function(e){let t="";for(let n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(d(s(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(d(s(e),8*e.length))}};function f(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,r,i,s,o,a,c,l,u=new Array(80),d=1732584193,h=-271733879,f=-1732584194,m=271733878,b=-1009589776;for(n=0;n<e.length;n+=16){for(s=d,o=h,a=f,c=m,l=b,r=0;r<80;r++)u[r]=r<16?e[n+r]:_(u[r-3]^u[r-8]^u[r-14]^u[r-16],1),i=v(v(_(d,5),p(r,h,f,m)),v(v(b,u[r]),g(r))),b=m,m=f,f=_(h,30),h=d,d=i;d=v(d,s),h=v(h,o),f=v(f,a),m=v(m,c),b=v(b,l)}return[d,h,f,m,b]}function p(e,t,n,r){return e<20?t&n|~t&r:e<40?t^n^r:e<60?t&n|t&r|n&r:t^n^r}function g(e){return e<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514}function m(e,t){var n=b(e);n.length>16&&(n=f(n,8*e.length));for(var r=new Array(16),i=new Array(16),s=0;s<16;s++)r[s]=909522486^n[s],i[s]=1549556828^n[s];var o=f(r.concat(b(t)),512+8*t.length);return f(i.concat(o),672)}function v(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function _(e,t){return e<<t|e>>>32-t}function b(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function y(e){for(var t,n,r="",i=0;i<4*e.length;i+=3)for(t=(e[i>>2]>>8*(3-i%4)&255)<<16|(e[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|e[i+2>>2]>>8*(3-(i+2)%4)&255,n=0;n<4;n++)8*i+6*n>32*e.length?r+="=":r+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return r}function w(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}const S={b64_hmac_sha1:function(e,t){return y(m(e,t))},b64_sha1:function(e){return y(f(b(e),8*e.length))},binb2str:w,core_hmac_sha1:m,str_hmac_sha1:function(e,t){return w(m(e,t))},str_sha1:function(e){return w(f(b(e),8*e.length))}},x=function(e){var t,n,r="",i=e.length;for(t=0;t<i;t++)(n=e.charCodeAt(t))>=0&&n<=127?r+=e.charAt(t):n>2047?(r+=String.fromCharCode(224|n>>12&15),r+=String.fromCharCode(128|n>>6&63),r+=String.fromCharCode(128|n>>0&63)):(r+=String.fromCharCode(192|n>>6&31),r+=String.fromCharCode(128|n>>0&63));return r},E=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",r="",i="";const s=e[t],o="object"==typeof s,a=escape(unescape(o?s.value:s));o&&(n=s.expires?";expires="+s.expires:"",r=s.domain?";domain="+s.domain:"",i=s.path?";path="+s.path:""),document.cookie=t+"="+a+n+r+i}};var A=n(9);function C(e,t){return new O.Builder(e,t)}function j(e){return new O.Builder("iq",e)}function T(e){return new O.Builder("presence",e)}const O={VERSION:"1.4.0",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",FRAMING:"urn:ietf:params:xml:ns:xmpp-framing",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag(e){for(let t=0;t<O.XHTML.tags.length;t++)if(e===O.XHTML.tags[t])return!0;return!1},validAttribute(e,t){if(void 0!==O.XHTML.attributes[e]&&O.XHTML.attributes[e].length>0)for(let n=0;n<O.XHTML.attributes[e].length;n++)if(t===O.XHTML.attributes[e][n])return!0;return!1},validCSS(e){for(let t=0;t<O.XHTML.css.length;t++)if(e===O.XHTML.css[t])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8,REDIRECT:9,CONNTIMEOUT:10,BINDREQUIRED:11,ATTACHFAIL:12},ErrorCondition:{BAD_FORMAT:"bad-format",CONFLICT:"conflict",MISSING_JID_NODE:"x-strophe-bad-non-anon-jid",NO_AUTH_MECH:"no-auth-mech",UNKNOWN_REASON:"unknown"},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace(e,t){O.NS[e]=t},forEachChild(e,t,n){for(let r=0;r<e.childNodes.length;r++){const i=e.childNodes[r];i.nodeType!==O.ElementType.NORMAL||t&&!this.isTagEqual(i,t)||n(i)}},isTagEqual:(e,t)=>e.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(O._xmlGenerator||(O._xmlGenerator=r.b()),O._xmlGenerator),xmlElement(e){if(!e)return null;const t=O.xmlGenerator().createElement(e);for(let e=1;e<arguments.length;e++){const n=arguments[e];if(n)if("string"==typeof n||"number"==typeof n)t.appendChild(O.xmlTextNode(n));else if("object"==typeof n&&"function"==typeof n.sort)for(let e=0;e<n.length;e++){const r=n[e];"object"==typeof r&&"function"==typeof r.sort&&void 0!==r[1]&&null!==r[1]&&t.setAttribute(r[0],r[1])}else if("object"==typeof n)for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&void 0!==n[e]&&null!==n[e]&&t.setAttribute(e,n[e])}return t},xmlescape:e=>e=(e=(e=(e=(e=e.replace(/\&/g,"&amp;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;")).replace(/'/g,"&apos;")).replace(/"/g,"&quot;"),xmlunescape:e=>e=(e=(e=(e=(e=e.replace(/\&amp;/g,"&")).replace(/&lt;/g,"<")).replace(/&gt;/g,">")).replace(/&apos;/g,"'")).replace(/&quot;/g,'"'),xmlTextNode:e=>O.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;if(r.a){t=(new r.a).parseFromString(e,"text/xml")}else t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e);return t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===O.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===O.ElementType.TEXT&&(t+=e.childNodes[n].nodeValue);return O.xmlescape(t)},copyElement(e){let t;if(e.nodeType===O.ElementType.NORMAL){t=O.xmlElement(e.tagName);for(let n=0;n<e.attributes.length;n++)t.setAttribute(e.attributes[n].nodeName,e.attributes[n].value);for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.copyElement(e.childNodes[n]))}else e.nodeType===O.ElementType.TEXT&&(t=O.xmlGenerator().createTextNode(e.nodeValue));return t},createHtml(e){let t;if(e.nodeType===O.ElementType.NORMAL){const n=e.nodeName.toLowerCase();if(O.XHTML.validTag(n))try{t=O.xmlElement(n);for(let r=0;r<O.XHTML.attributes[n].length;r++){const i=O.XHTML.attributes[n][r];let s=e.getAttribute(i);if(null!=s&&""!==s&&!1!==s&&0!==s)if("style"===i&&"object"==typeof s&&void 0!==s.cssText&&(s=s.cssText),"style"===i){const e=[],n=s.split(";");for(let t=0;t<n.length;t++){const r=n[t].split(":"),i=r[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase();if(O.XHTML.validCSS(i)){const t=r[1].replace(/^\s*/,"").replace(/\s*$/,"");e.push(i+": "+t)}}e.length>0&&(s=e.join("; "),t.setAttribute(i,s))}else t.setAttribute(i,s)}for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}catch(e){t=O.xmlTextNode("")}else{t=O.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}}else if(e.nodeType===O.ElementType.FRAGMENT){t=O.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}else e.nodeType===O.ElementType.TEXT&&(t=O.xmlTextNode(e.nodeValue));return t},escapeNode:e=>"string"!=typeof e?e:e.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=O.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&O.fatal(e.stack),e.sourceURL?O.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?O.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):O.fatal("error: "+e.message)},log(e,t){e===this.LogLevel.FATAL&&"object"==typeof window.console&&"function"==typeof window.console.error&&window.console.error(t)},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map(t=>e.attributes[t].nodeName);t.sort();let n=t.reduce((t,n)=>"".concat(t," ").concat(n,'="').concat(O.xmlescape(e.attributes.getNamedItem(n).value),'"'),"<".concat(e.nodeName));if(e.childNodes.length>0){n+=">";for(let t=0;t<e.childNodes.length;t++){const r=e.childNodes[t];switch(r.nodeType){case O.ElementType.NORMAL:n+=O.serialize(r);break;case O.ElementType.TEXT:n+=O.xmlescape(r.nodeValue);break;case O.ElementType.CDATA:n+="<![CDATA["+r.nodeValue+"]]>"}}n+="</"+e.nodeName+">"}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){O._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=O.NS.CLIENT:t||(t={xmlns:O.NS.CLIENT})),this.nodeTree=O.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return O.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const r=O.xmlElement(e,t,n);return this.node.appendChild(r),"string"!=typeof n&&"number"!=typeof n&&(this.node=r),this}cnode(e){let t;const n=O.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const r=t?n.importNode(e,!0):O.copyElement(e);return this.node.appendChild(r),this.node=r,this}t(e){const t=O.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=O.xmlGenerator().createElement("body");t.innerHTML=e;const n=O.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,r,i,s,o){this.handler=e,this.ns=t,this.name=n,this.type=r,this.id=i,this.options=o||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(O.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=s?O.getBareJidFromJid(s):null:this.from=s,this.user=!0}};O.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(O.forEachChild(e,null,e=>{this.getNamespace(e)===this.ns&&(t=!0)}),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=O.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!O.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw O._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},O.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},O.Connection=class{constructor(e,t){this.service=e,this.options=t||{};const n=this.options.protocol||"";this.options.worker?this._proto=new O.WorkerWebsocket(this):0===e.indexOf("ws:")||0===e.indexOf("wss:")||0===n.indexOf("ws")?this._proto=new O.Websocket(this):this._proto=new O.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(()=>this._onIdle(),100),E(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms);for(const e in O._connectionPlugins)if(Object.prototype.hasOwnProperty.call(O._connectionPlugins,e)){const t=function(){};t.prototype=O._connectionPlugins[e],this[e]=new t,this[e].init(this)}}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,r,i,s,o){this.jid=e,this.authzid=O.getBareJidFromJid(this.jid),this.authcid=o||O.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.domain=O.getDomainFromJid(this.jid),this._changeConnectStatus(O.Status.CONNECTING,null),this._proto._connect(r,i,s)}attach(e,t,n,r,i,s,o){if(this._proto._attach)return this._proto._attach(e,t,n,r,i,s,o);{const e=new Error('The "attach" method is not available for your connection protocol');throw e.name="StropheSessionError",e}}restore(e,t,n,r,i){if(!this._sessionCachingSupported()){const e=new Error('The "restore" method can only be used with a BOSH connection.');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,r,i)}_sessionCachingSupported(){if(this._proto instanceof O.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t<e.length;t++)this._queueData(e[t]);else"function"==typeof e.tree?this._queueData(e.tree()):this._queueData(e);this._proto._send()}}flush(){clearTimeout(this._idleTimeout),this._onIdle()}sendPresence(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let s=e.getAttribute("id");if(s||(s=this.getUniqueId("sendPresence"),e.setAttribute("id",s)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)},null,"presence",null,s);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),s}sendIQ(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let s=e.getAttribute("id");if(s||(s=this.getUniqueId("sendIQ"),e.setAttribute("id",s)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i);const r=e.getAttribute("type");if("result"===r)t&&t(e);else{if("error"!==r){const e=new Error("Got bad IQ type of ".concat(r));throw e.name="StropheError",e}n&&n(e)}},null,"iq",["error","result"],s);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),s}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(()=>this._onIdle(),100)}addTimedHandler(e,t){const n=new O.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,r,i,s,o){const a=new O.Handler(e,t,n,r,i,s,o);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[O.SASLAnonymous,O.SASLExternal,O.SASLOAuthBearer,O.SASLXOAuth2,O.SASLPlain,O.SASLSHA1]).forEach(e=>this.registerSASLMechanism(e))}registerSASLMechanism(e){const t=new e;this.mechanisms[t.mechname]=t}disconnect(e){if(this._changeConnectStatus(O.Status.DISCONNECTING,e),e?O.warn("Disconnect was called because: "+e):O.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=T({xmlns:O.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else O.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in O._connectionPlugins)if(Object.prototype.hasOwnProperty.call(O._connectionPlugins,n)){const r=this[n];if(r.statusChanged)try{r.statusChanged(e,t)}catch(e){O.error("".concat(n," plugin caused an exception changing status: ").concat(e))}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){O._handleError(e),O.error("User connection callback caused an exception: ".concat(e))}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),O.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(O.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==O.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==O.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(O.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const r=n.getAttribute("type");if(null!==r&&"terminate"===r){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(O.Status.CONNFAIL,e)):this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}O.forEachChild(n,null,e=>{const t=this.handlers;this.handlers=[];for(let n=0;n<t.length;n++){const r=t[n];try{(!r.isMatch(e)||!this.authenticated&&r.user||r.run(e))&&this.handlers.push(r)}catch(e){O.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}_connect_cb(e,t,n){let r;O.debug("_connect_cb was called"),this.connected=!0;try{r=this._proto._reqToData(e)}catch(e){if(e.name!==O.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.BAD_FORMAT),this._doDisconnect(O.ErrorCondition.BAD_FORMAT)}if(!r)return;if(this.xmlInput!==O.Connection.prototype.xmlInput&&(r.nodeName===this._proto.strip&&r.childNodes.length?this.xmlInput(r.childNodes[0]):this.xmlInput(r)),this.rawInput!==O.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(O.serialize(r))),this._proto._connect_cb(r)===O.Status.CONNFAIL)return;let i;if(i=r.getElementsByTagNameNS?r.getElementsByTagNameNS(O.NS.STREAM,"features").length>0:r.getElementsByTagName("stream:features").length>0||r.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(t);const s=Array.from(r.getElementsByTagName("mechanism")).map(e=>this.mechanisms[e.textContent]).filter(e=>e);0!==s.length||0!==r.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(s):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;t<e.length-1;++t){let n=t;for(let r=t+1;r<e.length;++r)e[r].priority>e[n].priority&&(n=r);if(n!==t){const r=e[t];e[t]=e[n],e[n]=r}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n<e.length;++n){if(!e[n].test(this))continue;this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=e[n],this._sasl_mechanism.onStart(this);const r=C("auth",{xmlns:O.NS.SASL,mechanism:this._sasl_mechanism.mechname});if(this._sasl_mechanism.isClientFirst){const e=this._sasl_mechanism.onChallenge(this,null);r.t(Object(A.btoa)(e))}this.send(r.tree()),t=!0;break}return t}_sasl_challenge_cb(e){const t=Object(A.atob)(O.getText(e)),n=this._sasl_mechanism.onChallenge(this,t),r=C("response",{xmlns:O.NS.SASL});return""!==n&&r.t(Object(A.btoa)(n)),this.send(r.tree()),!0}_attemptLegacyAuth(){null===O.getNodeFromJid(this.jid)?(this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.MISSING_JID_NODE),this.disconnect(O.ErrorCondition.MISSING_JID_NODE)):(this._changeConnectStatus(O.Status.AUTHENTICATING,null),this._addSysHandler(this._onLegacyAuthIQResult.bind(this),null,null,null,"_auth_1"),this.send(j({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:O.NS.AUTH}).c("username",{}).t(O.getNodeFromJid(this.jid)).tree()))}_onLegacyAuthIQResult(e){const t=j({type:"set",id:"_auth_2"}).c("query",{xmlns:O.NS.AUTH}).c("username",{}).t(O.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return O.getResourceFromJid(this.jid)||(this.jid=O.getBareJidFromJid(this.jid)+"/strophe"),t.up().c("resource",{}).t(O.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(t.tree()),!1}_sasl_success_cb(e){if(this._sasl_data["server-signature"]){let t;const n=/([a-z]+)=([^,]+)(,|$)/,r=Object(A.atob)(O.getText(e)).match(n);if("v"===r[1]&&(t=r[2]),t!==this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}O.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null);const t=[],n=(e,t)=>{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler(e=>n(t,e),null,"stream:features",null,null)),t.push(this._addSysHandler(e=>n(t,e),O.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t<e.childNodes.length;t++){const n=e.childNodes[t];"bind"===n.nodeName&&(this.do_bind=!0),"session"===n.nodeName&&(this.do_session=!0)}return this.do_bind?(this.options.explicitResourceBinding?this._changeConnectStatus(O.Status.BINDREQUIRED,null):this.bind(),!1):(this._changeConnectStatus(O.Status.AUTHFAIL,null),!1)}bind(){if(!this.do_bind)return void O.log(O.LogLevel.INFO,'Strophe.Connection.prototype.bind called but "do_bind" is false');this._addSysHandler(this._onResourceBindResultIQ.bind(this),null,null,null,"_bind_auth_2");const e=O.getResourceFromJid(this.jid);e?this.send(j({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:O.NS.BIND}).c("resource",{}).t(e).tree()):this.send(j({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:O.NS.BIND}).tree())}_onResourceBindResultIQ(e){if("error"===e.getAttribute("type")){let t;return O.warn("Resource binding failed."),e.getElementsByTagName("conflict").length>0&&(t=O.ErrorCondition.CONFLICT),this._changeConnectStatus(O.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return O.warn("Resource binding failed."),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.authenticated=!0,this.jid=O.getText(e[0]),this.do_session?this._establishSession():this._changeConnectStatus(O.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error("Strophe.Connection.prototype._establishSession "+"called but apparently ".concat(O.NS.SESSION," wasn't advertised by the server"));this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(j({type:"set",id:"_session_auth_2"}).c("session",{xmlns:O.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(O.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return this.authenticated=!1,O.warn("Session creation failed."),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(O.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(O.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new O.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,r,i){const s=new O.Handler(e,t,n,r,i);return s.user=!1,this.addHandlers.push(s),s}_onDisconnectTimeout(){return O.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(O.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;n<this.timedHandlers.length;n++){const r=this.timedHandlers[n];if(this.authenticated||!r.user){r.lastCalled+r.period-e<=0?r.run()&&t.push(r):t.push(r)}}this.timedHandlers=t,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(()=>this._onIdle(),100))}},O.SASLMechanism=class{constructor(e,t,n){this.mechname=e,this.isClientFirst=t,this.priority=n}test(){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}onFailure(){this._connection=null}onSuccess(){this._connection=null}},O.SASLAnonymous=class extends O.SASLMechanism{constructor(e="ANONYMOUS",t=!1,n=20){super(e,t,n)}test(e){return null===e.authcid}},O.SASLPlain=class extends O.SASLMechanism{constructor(e="PLAIN",t=!0,n=50){super(e,t,n)}test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:r,pass:i}=e;if(!r)throw new Error("SASLPlain onChallenge: domain is not defined!");let s=n!=="".concat(t,"@").concat(r)?n:"";return s+="\0",s+=t,s+="\0",s+=i,x(s)}},O.SASLSHA1=class extends O.SASLMechanism{constructor(e="SCRAM-SHA-1",t=!0,n=60){super(e,t,n)}test(e){return null!==e.authcid}onChallenge(e,t,n){const r=n||h.hexdigest(""+1234567890*Math.random());let i="n="+x(e.authcid);return i+=",r=",i+=r,e._sasl_data.cnonce=r,e._sasl_data["client-first-message-bare"]=i,i="n,,"+i,this.onChallenge=(e,t)=>{let n,r,i,s,o,a,c,l,u="c=biws,",d="".concat(e._sasl_data["client-first-message-bare"],",").concat(t,",");const h=e._sasl_data.cnonce,f=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(f);){const e=t.match(f);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":r=e[2];break;case"i":i=e[2]}}if(n.substr(0,h.length)!==h)return e._sasl_data={},e._sasl_failure_cb();u+="r="+n,d+=u,r=Object(A.atob)(r),r+="\0\0\0";const p=x(e.pass);for(s=a=S.core_hmac_sha1(p,r),c=1;c<i;c++){for(o=S.core_hmac_sha1(p,S.binb2str(a)),l=0;l<5;l++)s[l]^=o[l];a=o}s=S.binb2str(s);const g=S.core_hmac_sha1(s,"Client Key"),m=S.str_hmac_sha1(s,"Server Key"),v=S.core_hmac_sha1(S.str_sha1(S.binb2str(g)),d);for(e._sasl_data["server-signature"]=S.b64_hmac_sha1(m,d),l=0;l<5;l++)g[l]^=v[l];return u+=",p="+Object(A.btoa)(S.binb2str(g)),u},i}},O.SASLOAuthBearer=class extends O.SASLMechanism{constructor(e="OAUTHBEARER",t=!0,n=40){super(e,t,n)}test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",x(t)}},O.SASLExternal=class extends O.SASLMechanism{constructor(e="EXTERNAL",t=!0,n=10){super(e,t,n)}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},O.SASLXOAuth2=class extends O.SASLMechanism{constructor(e="X-OAUTH2",t=!0,n=30){super(e,t,n)}test(e){return null!==e.pass}onChallenge(e){let t="\0";return null!==e.authcid&&(t+=e.authzid),t+="\0",t+=e.pass,x(t)}};t.d={Strophe:O,$build:C,$iq:j,$msg:function(e){return new O.Builder("message",e)},$pres:T,SHA1:S,MD5:h,b64_hmac_sha1:S.b64_hmac_sha1,b64_sha1:S.b64_sha1,str_hmac_sha1:S.str_hmac_sha1,str_sha1:S.str_sha1}},function(e,t,n){var r;
+!function(e){function t(t){for(var n,i,o=t[0],s=t[1],a=0,l=[];a<o.length;a++)i=o[a],Object.prototype.hasOwnProperty.call(r,i)&&r[i]&&l.push(r[i][0]),r[i]=0;for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=s[n]);for(c&&c(t);l.length;)l.shift()()}var n={},r={178:0};function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var o=new Promise((function(t,i){n=r[e]=[t,i]}));t.push(n[2]=o);var s,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+""+({0:"locales/dayjs/af",1:"locales/dayjs/ar",2:"locales/dayjs/ar-dz",3:"locales/dayjs/ar-kw",4:"locales/dayjs/ar-ly",5:"locales/dayjs/ar-ma",6:"locales/dayjs/ar-sa",7:"locales/dayjs/ar-tn",8:"locales/dayjs/az",9:"locales/dayjs/be",10:"locales/dayjs/bg",11:"locales/dayjs/bi",12:"locales/dayjs/bm",13:"locales/dayjs/bn",14:"locales/dayjs/bo",15:"locales/dayjs/br",16:"locales/dayjs/bs",17:"locales/dayjs/ca",18:"locales/dayjs/cs",19:"locales/dayjs/cv",20:"locales/dayjs/cy",21:"locales/dayjs/da",22:"locales/dayjs/de",23:"locales/dayjs/de-at",24:"locales/dayjs/de-ch",25:"locales/dayjs/dv",26:"locales/dayjs/el",27:"locales/dayjs/en",28:"locales/dayjs/en-SG",29:"locales/dayjs/en-au",30:"locales/dayjs/en-ca",31:"locales/dayjs/en-gb",32:"locales/dayjs/en-ie",33:"locales/dayjs/en-il",34:"locales/dayjs/en-in",35:"locales/dayjs/en-nz",36:"locales/dayjs/en-tt",37:"locales/dayjs/eo",38:"locales/dayjs/es",39:"locales/dayjs/es-do",40:"locales/dayjs/es-pr",41:"locales/dayjs/es-us",42:"locales/dayjs/et",43:"locales/dayjs/eu",44:"locales/dayjs/fa",45:"locales/dayjs/fi",46:"locales/dayjs/fo",47:"locales/dayjs/fr",48:"locales/dayjs/fr-ca",49:"locales/dayjs/fr-ch",50:"locales/dayjs/fy",51:"locales/dayjs/ga",52:"locales/dayjs/gd",53:"locales/dayjs/gl",54:"locales/dayjs/gom-latn",55:"locales/dayjs/gu",56:"locales/dayjs/he",57:"locales/dayjs/hi",58:"locales/dayjs/hr",59:"locales/dayjs/ht",60:"locales/dayjs/hu",61:"locales/dayjs/hy-am",62:"locales/dayjs/id",63:"locales/dayjs/is",64:"locales/dayjs/it",65:"locales/dayjs/it-ch",66:"locales/dayjs/ja",67:"locales/dayjs/jv",68:"locales/dayjs/ka",69:"locales/dayjs/kk",70:"locales/dayjs/km",71:"locales/dayjs/kn",72:"locales/dayjs/ko",73:"locales/dayjs/ku",74:"locales/dayjs/ky",75:"locales/dayjs/lb",76:"locales/dayjs/lo",77:"locales/dayjs/lt",78:"locales/dayjs/lv",79:"locales/dayjs/me",80:"locales/dayjs/mi",81:"locales/dayjs/mk",82:"locales/dayjs/ml",83:"locales/dayjs/mn",84:"locales/dayjs/mr",85:"locales/dayjs/ms",86:"locales/dayjs/ms-my",87:"locales/dayjs/mt",88:"locales/dayjs/my",89:"locales/dayjs/nb",90:"locales/dayjs/ne",91:"locales/dayjs/nl",92:"locales/dayjs/nl-be",93:"locales/dayjs/nn",94:"locales/dayjs/oc-lnc",95:"locales/dayjs/pa-in",96:"locales/dayjs/pl",97:"locales/dayjs/pt",98:"locales/dayjs/pt-br",99:"locales/dayjs/ro",100:"locales/dayjs/ru",101:"locales/dayjs/rw",102:"locales/dayjs/sd",103:"locales/dayjs/se",104:"locales/dayjs/si",105:"locales/dayjs/sk",106:"locales/dayjs/sl",107:"locales/dayjs/sq",108:"locales/dayjs/sr",109:"locales/dayjs/sr-cyrl",110:"locales/dayjs/ss",111:"locales/dayjs/sv",112:"locales/dayjs/sw",113:"locales/dayjs/ta",114:"locales/dayjs/te",115:"locales/dayjs/tet",116:"locales/dayjs/tg",117:"locales/dayjs/th",118:"locales/dayjs/tk",119:"locales/dayjs/tl-ph",120:"locales/dayjs/tlh",121:"locales/dayjs/tr",122:"locales/dayjs/tzl",123:"locales/dayjs/tzm",124:"locales/dayjs/tzm-latn",125:"locales/dayjs/ug-cn",126:"locales/dayjs/uk",127:"locales/dayjs/ur",128:"locales/dayjs/uz",129:"locales/dayjs/uz-latn",130:"locales/dayjs/vi",131:"locales/dayjs/x-pseudo",132:"locales/dayjs/yo",133:"locales/dayjs/zh",134:"locales/dayjs/zh-cn",135:"locales/dayjs/zh-hk",136:"locales/dayjs/zh-tw",137:"emojis",138:"icons",139:"locales/af-LC_MESSAGES-converse-po",140:"locales/ar-LC_MESSAGES-converse-po",141:"locales/bg-LC_MESSAGES-converse-po",142:"locales/ca-LC_MESSAGES-converse-po",143:"locales/cs-LC_MESSAGES-converse-po",144:"locales/da-LC_MESSAGES-converse-po",145:"locales/dayjs/index-d-ts",146:"locales/dayjs/types-d-ts",147:"locales/de-LC_MESSAGES-converse-po",148:"locales/eo-LC_MESSAGES-converse-po",149:"locales/es-LC_MESSAGES-converse-po",150:"locales/eu-LC_MESSAGES-converse-po",151:"locales/fi-LC_MESSAGES-converse-po",152:"locales/fr-LC_MESSAGES-converse-po",153:"locales/gl-LC_MESSAGES-converse-po",154:"locales/he-LC_MESSAGES-converse-po",155:"locales/hi-LC_MESSAGES-converse-po",156:"locales/hu-LC_MESSAGES-converse-po",157:"locales/id-LC_MESSAGES-converse-po",158:"locales/it-LC_MESSAGES-converse-po",159:"locales/ja-LC_MESSAGES-converse-po",160:"locales/lt-LC_MESSAGES-converse-po",161:"locales/mr-LC_MESSAGES-converse-po",162:"locales/nb-LC_MESSAGES-converse-po",163:"locales/nl-LC_MESSAGES-converse-po",164:"locales/nl_BE-LC_MESSAGES-converse-po",165:"locales/oc-LC_MESSAGES-converse-po",166:"locales/pl-LC_MESSAGES-converse-po",167:"locales/pt-LC_MESSAGES-converse-po",168:"locales/pt_BR-LC_MESSAGES-converse-po",169:"locales/ro-LC_MESSAGES-converse-po",170:"locales/ru-LC_MESSAGES-converse-po",171:"locales/sv-LC_MESSAGES-converse-po",172:"locales/th-LC_MESSAGES-converse-po",173:"locales/tr-LC_MESSAGES-converse-po",174:"locales/uk-LC_MESSAGES-converse-po",175:"locales/vi-LC_MESSAGES-converse-po",176:"locales/zh_CN-LC_MESSAGES-converse-po",177:"locales/zh_TW-LC_MESSAGES-converse-po"}[e]||e)+".js"}(e);var c=new Error;s=function(t){a.onerror=a.onload=null,clearTimeout(l);var n=r[e];if(0!==n){if(n){var i=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+i+": "+o+")",c.name="ChunkLoadError",c.type=i,c.request=o,n[1](c)}r[e]=void 0}};var l=setTimeout((function(){s({type:"timeout",target:a})}),12e4);a.onerror=a.onload=s,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i.oe=function(e){throw console.error(e),e};var o=window.webpackJsonp=window.webpackJsonp||[],s=o.push.bind(o);o.push=t,o=o.slice();for(var a=0;a<o.length;a++)t(o[a]);var c=s;i(i.s=326)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return v})),n.d(t,"c",(function(){return _})),n.d(t,"b",(function(){return b})),n.d(t,"d",(function(){return y})),n.d(t,"e",(function(){return w}));var r=n(15);const i=function(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n},o=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<n%32;return t},s=function(e,t,n,r,o,s){return i((a=i(i(t,e),i(r,s)))<<(c=o)|a>>>32-c,n);var a,c},a=function(e,t,n,r,i,o,a){return s(t&n|~t&r,e,t,i,o,a)},c=function(e,t,n,r,i,o,a){return s(t&r|n&~r,e,t,i,o,a)},l=function(e,t,n,r,i,o,a){return s(t^n^r,e,t,i,o,a)},u=function(e,t,n,r,i,o,a){return s(n^(t|~r),e,t,i,o,a)},d=function(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;let n,r,o,s,d=1732584193,h=-271733879,f=-1732584194,p=271733878;for(let t=0;t<e.length;t+=16)n=d,r=h,o=f,s=p,d=a(d,h,f,p,e[t+0],7,-680876936),p=a(p,d,h,f,e[t+1],12,-389564586),f=a(f,p,d,h,e[t+2],17,606105819),h=a(h,f,p,d,e[t+3],22,-1044525330),d=a(d,h,f,p,e[t+4],7,-176418897),p=a(p,d,h,f,e[t+5],12,1200080426),f=a(f,p,d,h,e[t+6],17,-1473231341),h=a(h,f,p,d,e[t+7],22,-45705983),d=a(d,h,f,p,e[t+8],7,1770035416),p=a(p,d,h,f,e[t+9],12,-1958414417),f=a(f,p,d,h,e[t+10],17,-42063),h=a(h,f,p,d,e[t+11],22,-1990404162),d=a(d,h,f,p,e[t+12],7,1804603682),p=a(p,d,h,f,e[t+13],12,-40341101),f=a(f,p,d,h,e[t+14],17,-1502002290),h=a(h,f,p,d,e[t+15],22,1236535329),d=c(d,h,f,p,e[t+1],5,-165796510),p=c(p,d,h,f,e[t+6],9,-1069501632),f=c(f,p,d,h,e[t+11],14,643717713),h=c(h,f,p,d,e[t+0],20,-373897302),d=c(d,h,f,p,e[t+5],5,-701558691),p=c(p,d,h,f,e[t+10],9,38016083),f=c(f,p,d,h,e[t+15],14,-660478335),h=c(h,f,p,d,e[t+4],20,-405537848),d=c(d,h,f,p,e[t+9],5,568446438),p=c(p,d,h,f,e[t+14],9,-1019803690),f=c(f,p,d,h,e[t+3],14,-187363961),h=c(h,f,p,d,e[t+8],20,1163531501),d=c(d,h,f,p,e[t+13],5,-1444681467),p=c(p,d,h,f,e[t+2],9,-51403784),f=c(f,p,d,h,e[t+7],14,1735328473),h=c(h,f,p,d,e[t+12],20,-1926607734),d=l(d,h,f,p,e[t+5],4,-378558),p=l(p,d,h,f,e[t+8],11,-2022574463),f=l(f,p,d,h,e[t+11],16,1839030562),h=l(h,f,p,d,e[t+14],23,-35309556),d=l(d,h,f,p,e[t+1],4,-1530992060),p=l(p,d,h,f,e[t+4],11,1272893353),f=l(f,p,d,h,e[t+7],16,-155497632),h=l(h,f,p,d,e[t+10],23,-1094730640),d=l(d,h,f,p,e[t+13],4,681279174),p=l(p,d,h,f,e[t+0],11,-358537222),f=l(f,p,d,h,e[t+3],16,-722521979),h=l(h,f,p,d,e[t+6],23,76029189),d=l(d,h,f,p,e[t+9],4,-640364487),p=l(p,d,h,f,e[t+12],11,-421815835),f=l(f,p,d,h,e[t+15],16,530742520),h=l(h,f,p,d,e[t+2],23,-995338651),d=u(d,h,f,p,e[t+0],6,-198630844),p=u(p,d,h,f,e[t+7],10,1126891415),f=u(f,p,d,h,e[t+14],15,-1416354905),h=u(h,f,p,d,e[t+5],21,-57434055),d=u(d,h,f,p,e[t+12],6,1700485571),p=u(p,d,h,f,e[t+3],10,-1894986606),f=u(f,p,d,h,e[t+10],15,-1051523),h=u(h,f,p,d,e[t+1],21,-2054922799),d=u(d,h,f,p,e[t+8],6,1873313359),p=u(p,d,h,f,e[t+15],10,-30611744),f=u(f,p,d,h,e[t+6],15,-1560198380),h=u(h,f,p,d,e[t+13],21,1309151649),d=u(d,h,f,p,e[t+4],6,-145523070),p=u(p,d,h,f,e[t+11],10,-1120210379),f=u(f,p,d,h,e[t+2],15,718787259),h=u(h,f,p,d,e[t+9],21,-343485551),d=i(d,n),h=i(h,r),f=i(f,o),p=i(p,s);return[d,h,f,p]},h={hexdigest:function(e){return function(e){let t="";for(let n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(d(o(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(d(o(e),8*e.length))}};var f=n(7);const p=function(e){var t,n,r="",i=e.length;for(t=0;t<i;t++)(n=e.charCodeAt(t))>=0&&n<=127?r+=e.charAt(t):n>2047?(r+=String.fromCharCode(224|n>>12&15),r+=String.fromCharCode(128|n>>6&63),r+=String.fromCharCode(128|n>>0&63)):(r+=String.fromCharCode(192|n>>6&31),r+=String.fromCharCode(128|n>>0&63));return r},g=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",r="",i="";const o=e[t],s="object"==typeof o,a=escape(unescape(s?o.value:o));s&&(n=o.expires?";expires="+o.expires:"",r=o.domain?";domain="+o.domain:"",i=o.path?";path="+o.path:""),document.cookie=t+"="+a+n+r+i}};var m=n(10);function v(e,t){return new w.Builder(e,t)}function _(e){return new w.Builder("message",e)}function b(e){return new w.Builder("iq",e)}function y(e){return new w.Builder("presence",e)}const w={VERSION:"1.3.6",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",FRAMING:"urn:ietf:params:xml:ns:xmpp-framing",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag(e){for(let t=0;t<w.XHTML.tags.length;t++)if(e===w.XHTML.tags[t])return!0;return!1},validAttribute(e,t){if(void 0!==w.XHTML.attributes[e]&&w.XHTML.attributes[e].length>0)for(let n=0;n<w.XHTML.attributes[e].length;n++)if(t===w.XHTML.attributes[e][n])return!0;return!1},validCSS(e){for(let t=0;t<w.XHTML.css.length;t++)if(e===w.XHTML.css[t])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8,REDIRECT:9,CONNTIMEOUT:10,BINDREQUIRED:11,ATTACHFAIL:12},ErrorCondition:{BAD_FORMAT:"bad-format",CONFLICT:"conflict",MISSING_JID_NODE:"x-strophe-bad-non-anon-jid",NO_AUTH_MECH:"no-auth-mech",UNKNOWN_REASON:"unknown"},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace(e,t){w.NS[e]=t},forEachChild(e,t,n){for(let r=0;r<e.childNodes.length;r++){const i=e.childNodes[r];i.nodeType!==w.ElementType.NORMAL||t&&!this.isTagEqual(i,t)||n(i)}},isTagEqual:(e,t)=>e.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(w._xmlGenerator||(w._xmlGenerator=r.b()),w._xmlGenerator),xmlElement(e){if(!e)return null;const t=w.xmlGenerator().createElement(e);for(let e=1;e<arguments.length;e++){const n=arguments[e];if(n)if("string"==typeof n||"number"==typeof n)t.appendChild(w.xmlTextNode(n));else if("object"==typeof n&&"function"==typeof n.sort)for(let e=0;e<n.length;e++){const r=n[e];"object"==typeof r&&"function"==typeof r.sort&&void 0!==r[1]&&null!==r[1]&&t.setAttribute(r[0],r[1])}else if("object"==typeof n)for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&void 0!==n[e]&&null!==n[e]&&t.setAttribute(e,n[e])}return t},xmlescape:e=>e=(e=(e=(e=(e=e.replace(/\&/g,"&amp;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;")).replace(/'/g,"&apos;")).replace(/"/g,"&quot;"),xmlunescape:e=>e=(e=(e=(e=(e=e.replace(/\&amp;/g,"&")).replace(/&lt;/g,"<")).replace(/&gt;/g,">")).replace(/&apos;/g,"'")).replace(/&quot;/g,'"'),xmlTextNode:e=>w.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;if(r.a){t=(new r.a).parseFromString(e,"text/xml")}else t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e);return t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===w.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===w.ElementType.TEXT&&(t+=e.childNodes[n].nodeValue);return w.xmlescape(t)},copyElement(e){let t;if(e.nodeType===w.ElementType.NORMAL){t=w.xmlElement(e.tagName);for(let n=0;n<e.attributes.length;n++)t.setAttribute(e.attributes[n].nodeName,e.attributes[n].value);for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.copyElement(e.childNodes[n]))}else e.nodeType===w.ElementType.TEXT&&(t=w.xmlGenerator().createTextNode(e.nodeValue));return t},createHtml(e){let t;if(e.nodeType===w.ElementType.NORMAL){const n=e.nodeName.toLowerCase();if(w.XHTML.validTag(n))try{t=w.xmlElement(n);for(let r=0;r<w.XHTML.attributes[n].length;r++){const i=w.XHTML.attributes[n][r];let o=e.getAttribute(i);if(null!=o&&""!==o&&!1!==o&&0!==o)if("style"===i&&"object"==typeof o&&void 0!==o.cssText&&(o=o.cssText),"style"===i){const e=[],n=o.split(";");for(let t=0;t<n.length;t++){const r=n[t].split(":"),i=r[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase();if(w.XHTML.validCSS(i)){const t=r[1].replace(/^\s*/,"").replace(/\s*$/,"");e.push(i+": "+t)}}e.length>0&&(o=e.join("; "),t.setAttribute(i,o))}else t.setAttribute(i,o)}for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}catch(e){t=w.xmlTextNode("")}else{t=w.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}}else if(e.nodeType===w.ElementType.FRAGMENT){t=w.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(w.createHtml(e.childNodes[n]))}else e.nodeType===w.ElementType.TEXT&&(t=w.xmlTextNode(e.nodeValue));return t},escapeNode:e=>"string"!=typeof e?e:e.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=w.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&w.fatal(e.stack),e.sourceURL?w.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?w.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):w.fatal("error: "+e.message)},log(e,t){e===this.LogLevel.FATAL&&"object"==typeof window.console&&"function"==typeof window.console.error&&window.console.error(t)},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map(t=>e.attributes[t].nodeName);t.sort();let n=t.reduce((t,n)=>"".concat(t," ").concat(n,'="').concat(w.xmlescape(e.attributes.getNamedItem(n).value),'"'),"<".concat(e.nodeName));if(e.childNodes.length>0){n+=">";for(let t=0;t<e.childNodes.length;t++){const r=e.childNodes[t];switch(r.nodeType){case w.ElementType.NORMAL:n+=w.serialize(r);break;case w.ElementType.TEXT:n+=w.xmlescape(r.nodeValue);break;case w.ElementType.CDATA:n+="<![CDATA["+r.nodeValue+"]]>"}}n+="</"+e.nodeName+">"}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){w._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=w.NS.CLIENT:t||(t={xmlns:w.NS.CLIENT})),this.nodeTree=w.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return w.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const r=w.xmlElement(e,t,n);return this.node.appendChild(r),"string"!=typeof n&&"number"!=typeof n&&(this.node=r),this}cnode(e){let t;const n=w.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const r=t?n.importNode(e,!0):w.copyElement(e);return this.node.appendChild(r),this.node=r,this}t(e){const t=w.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=w.xmlGenerator().createElement("body");t.innerHTML=e;const n=w.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,r,i,o,s){this.handler=e,this.ns=t,this.name=n,this.type=r,this.id=i,this.options=s||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(w.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=o?w.getBareJidFromJid(o):null:this.from=o,this.user=!0}};w.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(w.forEachChild(e,null,e=>{this.getNamespace(e)===this.ns&&(t=!0)}),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=w.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!w.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw w._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},w.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},w.Connection=class{constructor(e,t){this.service=e,this.options=t||{};const n=this.options.protocol||"";this.options.worker?this._proto=new w.WorkerWebsocket(this):0===e.indexOf("ws:")||0===e.indexOf("wss:")||0===n.indexOf("ws")?this._proto=new w.Websocket(this):this._proto=new w.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(()=>this._onIdle(),100),g(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms);for(const e in w._connectionPlugins)if(Object.prototype.hasOwnProperty.call(w._connectionPlugins,e)){const t=function(){};t.prototype=w._connectionPlugins[e],this[e]=new t,this[e].init(this)}}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,r,i,o,s){this.jid=e,this.authzid=w.getBareJidFromJid(this.jid),this.authcid=s||w.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.domain=w.getDomainFromJid(this.jid),this._changeConnectStatus(w.Status.CONNECTING,null),this._proto._connect(r,i,o)}attach(e,t,n,r,i,o,s){if(this._proto._attach)return this._proto._attach(e,t,n,r,i,o,s);{const e=new Error('The "attach" method is not available for your connection protocol');throw e.name="StropheSessionError",e}}restore(e,t,n,r,i){if(!this._sessionCachingSupported()){const e=new Error('The "restore" method can only be used with a BOSH connection.');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,r,i)}_sessionCachingSupported(){if(this._proto instanceof w.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t<e.length;t++)this._queueData(e[t]);else"function"==typeof e.tree?this._queueData(e.tree()):this._queueData(e);this._proto._send()}}flush(){clearTimeout(this._idleTimeout),this._onIdle()}sendPresence(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendPresence"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)},null,"presence",null,o);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),o}sendIQ(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendIQ"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i);const r=e.getAttribute("type");if("result"===r)t&&t(e);else{if("error"!==r){const e=new Error("Got bad IQ type of ".concat(r));throw e.name="StropheError",e}n&&n(e)}},null,"iq",["error","result"],o);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),o}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(()=>this._onIdle(),100)}addTimedHandler(e,t){const n=new w.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,r,i,o,s){const a=new w.Handler(e,t,n,r,i,o,s);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[w.SASLAnonymous,w.SASLExternal,w.SASLOAuthBearer,w.SASLXOAuth2,w.SASLPlain,w.SASLSHA1]).forEach(e=>this.registerSASLMechanism(e))}registerSASLMechanism(e){this.mechanisms[e.name]=e}disconnect(e){if(this._changeConnectStatus(w.Status.DISCONNECTING,e),e?w.warn("Disconnect was called because: "+e):w.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=y({xmlns:w.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else w.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in w._connectionPlugins)if(Object.prototype.hasOwnProperty.call(w._connectionPlugins,n)){const r=this[n];if(r.statusChanged)try{r.statusChanged(e,t)}catch(e){w.error("".concat(n," plugin caused an exception changing status: ").concat(e))}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){w._handleError(e),w.error("User connection callback caused an exception: ".concat(e))}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),w.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(w.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==w.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==w.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(w.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const r=n.getAttribute("type");if(null!==r&&"terminate"===r){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(w.Status.CONNFAIL,e)):this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}w.forEachChild(n,null,e=>{const t=this.handlers;this.handlers=[];for(let n=0;n<t.length;n++){const r=t[n];try{(!r.isMatch(e)||!this.authenticated&&r.user||r.run(e))&&this.handlers.push(r)}catch(e){w.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}_connect_cb(e,t,n){let r;w.debug("_connect_cb was called"),this.connected=!0;try{r=this._proto._reqToData(e)}catch(e){if(e.name!==w.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.BAD_FORMAT),this._doDisconnect(w.ErrorCondition.BAD_FORMAT)}if(!r)return;if(this.xmlInput!==w.Connection.prototype.xmlInput&&(r.nodeName===this._proto.strip&&r.childNodes.length?this.xmlInput(r.childNodes[0]):this.xmlInput(r)),this.rawInput!==w.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(w.serialize(r))),this._proto._connect_cb(r)===w.Status.CONNFAIL)return;let i;if(i=r.getElementsByTagNameNS?r.getElementsByTagNameNS(w.NS.STREAM,"features").length>0:r.getElementsByTagName("stream:features").length>0||r.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(t);const o=Array.from(r.getElementsByTagName("mechanism")).map(e=>this.mechanisms[e.textContent]).filter(e=>e);0!==o.length||0!==r.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(o):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;t<e.length-1;++t){let n=t;for(let r=t+1;r<e.length;++r)e[r].priority>e[n].priority&&(n=r);if(n!==t){const r=e[t];e[t]=e[n],e[n]=r}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n<e.length;++n){if(!e[n].test(this))continue;this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=new e[n],this._sasl_mechanism.onStart(this);const r=v("auth",{xmlns:w.NS.SASL,mechanism:this._sasl_mechanism.name});if(this._sasl_mechanism.isClientFirst){const e=this._sasl_mechanism.onChallenge(this,null);r.t(Object(m.btoa)(e))}this.send(r.tree()),t=!0;break}return t}_sasl_challenge_cb(e){const t=Object(m.atob)(w.getText(e)),n=this._sasl_mechanism.onChallenge(this,t),r=v("response",{xmlns:w.NS.SASL});return""!==n&&r.t(Object(m.btoa)(n)),this.send(r.tree()),!0}_attemptLegacyAuth(){null===w.getNodeFromJid(this.jid)?(this._changeConnectStatus(w.Status.CONNFAIL,w.ErrorCondition.MISSING_JID_NODE),this.disconnect(w.ErrorCondition.MISSING_JID_NODE)):(this._changeConnectStatus(w.Status.AUTHENTICATING,null),this._addSysHandler(this._onLegacyAuthIQResult.bind(this),null,null,null,"_auth_1"),this.send(b({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:w.NS.AUTH}).c("username",{}).t(w.getNodeFromJid(this.jid)).tree()))}_onLegacyAuthIQResult(e){const t=b({type:"set",id:"_auth_2"}).c("query",{xmlns:w.NS.AUTH}).c("username",{}).t(w.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return w.getResourceFromJid(this.jid)||(this.jid=w.getBareJidFromJid(this.jid)+"/strophe"),t.up().c("resource",{}).t(w.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(t.tree()),!1}_sasl_success_cb(e){if(this._sasl_data["server-signature"]){let t;const n=/([a-z]+)=([^,]+)(,|$)/,r=Object(m.atob)(w.getText(e)).match(n);if("v"===r[1]&&(t=r[2]),t!==this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}w.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null);const t=[],n=(e,t)=>{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler(e=>n(t,e),null,"stream:features",null,null)),t.push(this._addSysHandler(e=>n(t,e),w.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t<e.childNodes.length;t++){const n=e.childNodes[t];"bind"===n.nodeName&&(this.do_bind=!0),"session"===n.nodeName&&(this.do_session=!0)}return this.do_bind?(this.options.explicitResourceBinding?this._changeConnectStatus(w.Status.BINDREQUIRED,null):this.bind(),!1):(this._changeConnectStatus(w.Status.AUTHFAIL,null),!1)}bind(){if(!this.do_bind)return void w.log(w.LogLevel.INFO,'Strophe.Connection.prototype.bind called but "do_bind" is false');this._addSysHandler(this._onResourceBindResultIQ.bind(this),null,null,null,"_bind_auth_2");const e=w.getResourceFromJid(this.jid);e?this.send(b({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:w.NS.BIND}).c("resource",{}).t(e).tree()):this.send(b({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:w.NS.BIND}).tree())}_onResourceBindResultIQ(e){if("error"===e.getAttribute("type")){let t;return w.warn("Resource binding failed."),e.getElementsByTagName("conflict").length>0&&(t=w.ErrorCondition.CONFLICT),this._changeConnectStatus(w.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return w.warn("Resource binding failed."),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.jid=w.getText(e[0]),this.do_session?this._establishSession():(this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null)))}}_establishSession(){if(!this.do_session)throw new Error("Strophe.Connection.prototype._establishSession "+"called but apparently ".concat(w.NS.SESSION," wasn't advertised by the server"));this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(b({type:"set",id:"_session_auth_2"}).c("session",{xmlns:w.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return w.warn("Session creation failed."),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(w.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(w.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(w.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new w.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,r,i){const o=new w.Handler(e,t,n,r,i);return o.user=!1,this.addHandlers.push(o),o}_onDisconnectTimeout(){return w.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(w.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;n<this.timedHandlers.length;n++){const r=this.timedHandlers[n];if(this.authenticated||!r.user){r.lastCalled+r.period-e<=0?r.run()&&t.push(r):t.push(r)}}this.timedHandlers=t,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(()=>this._onIdle(),100))}},w.SASLMechanism=class{constructor(e,t,n){this.name=e,this.isClientFirst=t,this.priority=n}static test(e){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}onFailure(){this._connection=null}onSuccess(){this._connection=null}},w.SASLAnonymous=class extends w.SASLMechanism{constructor(){super(w.SASLAnonymous.name,!1,w.SASLAnonymous.priority)}static get name(){return"ANONYMOUS"}static get priority(){return 20}static test(e){return null===e.authcid}},w.SASLPlain=class extends w.SASLMechanism{constructor(){super(w.SASLPlain.name,!0,w.SASLPlain.priority)}static get name(){return"PLAIN"}static get priority(){return 50}static test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:r,pass:i}=e;if(!r)throw new Error("SASLPlain onChallenge: domain is not defined!");let o=n!=="".concat(t,"@").concat(r)?n:"";return o+="\0",o+=t,o+="\0",o+=i,p(o)}},w.SASLSHA1=class extends w.SASLMechanism{constructor(){super(w.SASLSHA1.name,!0,w.SASLSHA1.priority)}static get name(){return"SCRAM-SHA-1"}static get priority(){return 60}static test(e){return null!==e.authcid}onChallenge(e,t,n){const r=n||h.hexdigest(""+1234567890*Math.random());let i="n="+p(e.authcid);return i+=",r=",i+=r,e._sasl_data.cnonce=r,e._sasl_data["client-first-message-bare"]=i,i="n,,"+i,this.onChallenge=(e,t)=>{let n,r,i,o,s,a,c,l,u="c=biws,",d="".concat(e._sasl_data["client-first-message-bare"],",").concat(t,",");const h=e._sasl_data.cnonce,g=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(g);){const e=t.match(g);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":r=e[2];break;case"i":i=e[2]}}if(n.substr(0,h.length)!==h)return e._sasl_data={},e._sasl_failure_cb();u+="r="+n,d+=u,r=Object(m.atob)(r),r+="\0\0\0";const v=p(e.pass);for(o=a=f.a.core_hmac_sha1(v,r),c=1;c<i;c++){for(s=f.a.core_hmac_sha1(v,f.a.binb2str(a)),l=0;l<5;l++)o[l]^=s[l];a=s}o=f.a.binb2str(o);const _=f.a.core_hmac_sha1(o,"Client Key"),b=f.a.str_hmac_sha1(o,"Server Key"),y=f.a.core_hmac_sha1(f.a.str_sha1(f.a.binb2str(_)),d);for(e._sasl_data["server-signature"]=f.a.b64_hmac_sha1(b,d),l=0;l<5;l++)_[l]^=y[l];return u+=",p="+Object(m.btoa)(f.a.binb2str(_)),u},i}},w.SASLOAuthBearer=class extends w.SASLMechanism{constructor(){super(w.SASLOAuthBearer.name,!0,w.SASLOAuthBearer.priority)}static get name(){return"OAUTHBEARER"}static get priority(){return 40}static test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",p(t)}},w.SASLExternal=class extends w.SASLMechanism{constructor(){super(w.SASLExternal.name,!0,w.SASLExternal.priority)}static get name(){return"EXTERNAL"}static get priority(){return 10}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},w.SASLXOAuth2=class extends w.SASLMechanism{constructor(){super(w.SASLXOAuth2.name,!0,w.SASLXOAuth2.priority)}static get name(){return"X-OAUTH2"}static get priority(){return 30}static test(e){return null!==e.pass}onChallenge(e){let t="\0";return null!==e.authcid&&(t+=e.authzid),t+="\0",t+=e.pass,p(t)}};t.f={Strophe:w,$build:v,$iq:b,$msg:_,$pres:y,SHA1:f.a,MD5:h,b64_hmac_sha1:f.a.b64_hmac_sha1,b64_sha1:f.a.b64_sha1,str_hmac_sha1:f.a.str_hmac_sha1,str_sha1:f.a.str_sha1}},function(e,t,n){"use strict";(function(e){n(154),n(68),n(493);var r=n(0);n.d(t,"e",(function(){return r.e})),n.d(t,"a",(function(){return r.a})),n.d(t,"b",(function(){return r.b})),n.d(t,"c",(function(){return r.c})),n.d(t,"d",(function(){return r.d})),e.$build=r.f.$build,e.$iq=r.f.$iq,e.$msg=r.f.$msg,e.$pres=r.f.$pres,e.Strophe=r.f.Strophe}).call(this,n(12))},function(e,t,n){"use strict";n.d(t,"a",(function(){return C})),n.d(t,"b",(function(){return j})),n.d(t,"d",(function(){return O})),n.d(t,"c",(function(){return S}));var r=n(9);const i=function(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n},o=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<n%32;return t},s=function(e,t,n,r,o,s){return i((a=i(i(t,e),i(r,s)))<<(c=o)|a>>>32-c,n);var a,c},a=function(e,t,n,r,i,o,a){return s(t&n|~t&r,e,t,i,o,a)},c=function(e,t,n,r,i,o,a){return s(t&r|n&~r,e,t,i,o,a)},l=function(e,t,n,r,i,o,a){return s(t^n^r,e,t,i,o,a)},u=function(e,t,n,r,i,o,a){return s(n^(t|~r),e,t,i,o,a)},d=function(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;let n,r,o,s,d=1732584193,h=-271733879,f=-1732584194,p=271733878;for(let t=0;t<e.length;t+=16)n=d,r=h,o=f,s=p,d=a(d,h,f,p,e[t+0],7,-680876936),p=a(p,d,h,f,e[t+1],12,-389564586),f=a(f,p,d,h,e[t+2],17,606105819),h=a(h,f,p,d,e[t+3],22,-1044525330),d=a(d,h,f,p,e[t+4],7,-176418897),p=a(p,d,h,f,e[t+5],12,1200080426),f=a(f,p,d,h,e[t+6],17,-1473231341),h=a(h,f,p,d,e[t+7],22,-45705983),d=a(d,h,f,p,e[t+8],7,1770035416),p=a(p,d,h,f,e[t+9],12,-1958414417),f=a(f,p,d,h,e[t+10],17,-42063),h=a(h,f,p,d,e[t+11],22,-1990404162),d=a(d,h,f,p,e[t+12],7,1804603682),p=a(p,d,h,f,e[t+13],12,-40341101),f=a(f,p,d,h,e[t+14],17,-1502002290),h=a(h,f,p,d,e[t+15],22,1236535329),d=c(d,h,f,p,e[t+1],5,-165796510),p=c(p,d,h,f,e[t+6],9,-1069501632),f=c(f,p,d,h,e[t+11],14,643717713),h=c(h,f,p,d,e[t+0],20,-373897302),d=c(d,h,f,p,e[t+5],5,-701558691),p=c(p,d,h,f,e[t+10],9,38016083),f=c(f,p,d,h,e[t+15],14,-660478335),h=c(h,f,p,d,e[t+4],20,-405537848),d=c(d,h,f,p,e[t+9],5,568446438),p=c(p,d,h,f,e[t+14],9,-1019803690),f=c(f,p,d,h,e[t+3],14,-187363961),h=c(h,f,p,d,e[t+8],20,1163531501),d=c(d,h,f,p,e[t+13],5,-1444681467),p=c(p,d,h,f,e[t+2],9,-51403784),f=c(f,p,d,h,e[t+7],14,1735328473),h=c(h,f,p,d,e[t+12],20,-1926607734),d=l(d,h,f,p,e[t+5],4,-378558),p=l(p,d,h,f,e[t+8],11,-2022574463),f=l(f,p,d,h,e[t+11],16,1839030562),h=l(h,f,p,d,e[t+14],23,-35309556),d=l(d,h,f,p,e[t+1],4,-1530992060),p=l(p,d,h,f,e[t+4],11,1272893353),f=l(f,p,d,h,e[t+7],16,-155497632),h=l(h,f,p,d,e[t+10],23,-1094730640),d=l(d,h,f,p,e[t+13],4,681279174),p=l(p,d,h,f,e[t+0],11,-358537222),f=l(f,p,d,h,e[t+3],16,-722521979),h=l(h,f,p,d,e[t+6],23,76029189),d=l(d,h,f,p,e[t+9],4,-640364487),p=l(p,d,h,f,e[t+12],11,-421815835),f=l(f,p,d,h,e[t+15],16,530742520),h=l(h,f,p,d,e[t+2],23,-995338651),d=u(d,h,f,p,e[t+0],6,-198630844),p=u(p,d,h,f,e[t+7],10,1126891415),f=u(f,p,d,h,e[t+14],15,-1416354905),h=u(h,f,p,d,e[t+5],21,-57434055),d=u(d,h,f,p,e[t+12],6,1700485571),p=u(p,d,h,f,e[t+3],10,-1894986606),f=u(f,p,d,h,e[t+10],15,-1051523),h=u(h,f,p,d,e[t+1],21,-2054922799),d=u(d,h,f,p,e[t+8],6,1873313359),p=u(p,d,h,f,e[t+15],10,-30611744),f=u(f,p,d,h,e[t+6],15,-1560198380),h=u(h,f,p,d,e[t+13],21,1309151649),d=u(d,h,f,p,e[t+4],6,-145523070),p=u(p,d,h,f,e[t+11],10,-1120210379),f=u(f,p,d,h,e[t+2],15,718787259),h=u(h,f,p,d,e[t+9],21,-343485551),d=i(d,n),h=i(h,r),f=i(f,o),p=i(p,s);return[d,h,f,p]},h={hexdigest:function(e){return function(e){let t="";for(let n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(d(o(e),8*e.length))},hash:function(e){return function(e){let t="";for(let n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>n%32&255);return t}(d(o(e),8*e.length))}};function f(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,r,i,o,s,a,c,l,u=new Array(80),d=1732584193,h=-271733879,f=-1732584194,m=271733878,b=-1009589776;for(n=0;n<e.length;n+=16){for(o=d,s=h,a=f,c=m,l=b,r=0;r<80;r++)u[r]=r<16?e[n+r]:_(u[r-3]^u[r-8]^u[r-14]^u[r-16],1),i=v(v(_(d,5),p(r,h,f,m)),v(v(b,u[r]),g(r))),b=m,m=f,f=_(h,30),h=d,d=i;d=v(d,o),h=v(h,s),f=v(f,a),m=v(m,c),b=v(b,l)}return[d,h,f,m,b]}function p(e,t,n,r){return e<20?t&n|~t&r:e<40?t^n^r:e<60?t&n|t&r|n&r:t^n^r}function g(e){return e<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514}function m(e,t){var n=b(e);n.length>16&&(n=f(n,8*e.length));for(var r=new Array(16),i=new Array(16),o=0;o<16;o++)r[o]=909522486^n[o],i[o]=1549556828^n[o];var s=f(r.concat(b(t)),512+8*t.length);return f(i.concat(s),672)}function v(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function _(e,t){return e<<t|e>>>32-t}function b(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function y(e){for(var t,n,r="",i=0;i<4*e.length;i+=3)for(t=(e[i>>2]>>8*(3-i%4)&255)<<16|(e[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|e[i+2>>2]>>8*(3-(i+2)%4)&255,n=0;n<4;n++)8*i+6*n>32*e.length?r+="=":r+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return r}function w(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}const S={b64_hmac_sha1:function(e,t){return y(m(e,t))},b64_sha1:function(e){return y(f(b(e),8*e.length))},binb2str:w,core_hmac_sha1:m,str_hmac_sha1:function(e,t){return w(m(e,t))},str_sha1:function(e){return w(f(b(e),8*e.length))}},x=function(e){var t,n,r="",i=e.length;for(t=0;t<i;t++)(n=e.charCodeAt(t))>=0&&n<=127?r+=e.charAt(t):n>2047?(r+=String.fromCharCode(224|n>>12&15),r+=String.fromCharCode(128|n>>6&63),r+=String.fromCharCode(128|n>>0&63)):(r+=String.fromCharCode(192|n>>6&31),r+=String.fromCharCode(128|n>>0&63));return r},E=function(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n="",r="",i="";const o=e[t],s="object"==typeof o,a=escape(unescape(s?o.value:o));s&&(n=o.expires?";expires="+o.expires:"",r=o.domain?";domain="+o.domain:"",i=o.path?";path="+o.path:""),document.cookie=t+"="+a+n+r+i}};var A=n(10);function C(e,t){return new O.Builder(e,t)}function j(e){return new O.Builder("iq",e)}function T(e){return new O.Builder("presence",e)}const O={VERSION:"1.4.1",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",FRAMING:"urn:ietf:params:xml:ns:xmpp-framing",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag(e){for(let t=0;t<O.XHTML.tags.length;t++)if(e===O.XHTML.tags[t])return!0;return!1},validAttribute(e,t){if(void 0!==O.XHTML.attributes[e]&&O.XHTML.attributes[e].length>0)for(let n=0;n<O.XHTML.attributes[e].length;n++)if(t===O.XHTML.attributes[e][n])return!0;return!1},validCSS(e){for(let t=0;t<O.XHTML.css.length;t++)if(e===O.XHTML.css[t])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8,REDIRECT:9,CONNTIMEOUT:10,BINDREQUIRED:11,ATTACHFAIL:12},ErrorCondition:{BAD_FORMAT:"bad-format",CONFLICT:"conflict",MISSING_JID_NODE:"x-strophe-bad-non-anon-jid",NO_AUTH_MECH:"no-auth-mech",UNKNOWN_REASON:"unknown"},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace(e,t){O.NS[e]=t},forEachChild(e,t,n){for(let r=0;r<e.childNodes.length;r++){const i=e.childNodes[r];i.nodeType!==O.ElementType.NORMAL||t&&!this.isTagEqual(i,t)||n(i)}},isTagEqual:(e,t)=>e.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(O._xmlGenerator||(O._xmlGenerator=r.c()),O._xmlGenerator),xmlElement(e){if(!e)return null;const t=O.xmlGenerator().createElement(e);for(let e=1;e<arguments.length;e++){const n=arguments[e];if(n)if("string"==typeof n||"number"==typeof n)t.appendChild(O.xmlTextNode(n));else if("object"==typeof n&&"function"==typeof n.sort)for(let e=0;e<n.length;e++){const r=n[e];"object"==typeof r&&"function"==typeof r.sort&&void 0!==r[1]&&null!==r[1]&&t.setAttribute(r[0],r[1])}else if("object"==typeof n)for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&void 0!==n[e]&&null!==n[e]&&t.setAttribute(e,n[e])}return t},xmlescape:e=>e=(e=(e=(e=(e=e.replace(/\&/g,"&amp;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;")).replace(/'/g,"&apos;")).replace(/"/g,"&quot;"),xmlunescape:e=>e=(e=(e=(e=(e=e.replace(/\&amp;/g,"&")).replace(/&lt;/g,"<")).replace(/&gt;/g,">")).replace(/&apos;/g,"'")).replace(/&quot;/g,'"'),xmlTextNode:e=>O.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;if(r.a){t=(new r.a).parseFromString(e,"text/xml")}else t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e);return t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===O.ElementType.TEXT&&(t+=e.nodeValue);for(let n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===O.ElementType.TEXT&&(t+=e.childNodes[n].nodeValue);return O.xmlescape(t)},copyElement(e){let t;if(e.nodeType===O.ElementType.NORMAL){t=O.xmlElement(e.tagName);for(let n=0;n<e.attributes.length;n++)t.setAttribute(e.attributes[n].nodeName,e.attributes[n].value);for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.copyElement(e.childNodes[n]))}else e.nodeType===O.ElementType.TEXT&&(t=O.xmlGenerator().createTextNode(e.nodeValue));return t},createHtml(e){let t;if(e.nodeType===O.ElementType.NORMAL){const n=e.nodeName.toLowerCase();if(O.XHTML.validTag(n))try{t=O.xmlElement(n);for(let r=0;r<O.XHTML.attributes[n].length;r++){const i=O.XHTML.attributes[n][r];let o=e.getAttribute(i);if(null!=o&&""!==o&&!1!==o&&0!==o)if("style"===i&&"object"==typeof o&&void 0!==o.cssText&&(o=o.cssText),"style"===i){const e=[],n=o.split(";");for(let t=0;t<n.length;t++){const r=n[t].split(":"),i=r[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase();if(O.XHTML.validCSS(i)){const t=r[1].replace(/^\s*/,"").replace(/\s*$/,"");e.push(i+": "+t)}}e.length>0&&(o=e.join("; "),t.setAttribute(i,o))}else t.setAttribute(i,o)}for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}catch(e){t=O.xmlTextNode("")}else{t=O.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}}else if(e.nodeType===O.ElementType.FRAGMENT){t=O.xmlGenerator().createDocumentFragment();for(let n=0;n<e.childNodes.length;n++)t.appendChild(O.createHtml(e.childNodes[n]))}else e.nodeType===O.ElementType.TEXT&&(t=O.xmlTextNode(e.nodeValue));return t},escapeNode:e=>"string"!=typeof e?e:e.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40"),unescapeNode:e=>"string"!=typeof e?e:e.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\"),getNodeFromJid:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=O.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&O.fatal(e.stack),e.sourceURL?O.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?O.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):O.fatal("error: "+e.message)},log(e,t){var n;e===this.LogLevel.FATAL&&(null===(n=console)||void 0===n||n.error(t))},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map(t=>e.attributes[t].nodeName);t.sort();let n=t.reduce((t,n)=>"".concat(t," ").concat(n,'="').concat(O.xmlescape(e.attributes.getNamedItem(n).value),'"'),"<".concat(e.nodeName));if(e.childNodes.length>0){n+=">";for(let t=0;t<e.childNodes.length;t++){const r=e.childNodes[t];switch(r.nodeType){case O.ElementType.NORMAL:n+=O.serialize(r);break;case O.ElementType.TEXT:n+=O.xmlescape(r.nodeValue);break;case O.ElementType.CDATA:n+="<![CDATA["+r.nodeValue+"]]>"}}n+="</"+e.nodeName+">"}else n+="/>";return n},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){O._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=O.NS.CLIENT:t||(t={xmlns:O.NS.CLIENT})),this.nodeTree=O.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return O.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,n){const r=O.xmlElement(e,t,n);return this.node.appendChild(r),"string"!=typeof n&&"number"!=typeof n&&(this.node=r),this}cnode(e){let t;const n=O.xmlGenerator();try{t=void 0!==n.importNode}catch(e){t=!1}const r=t?n.importNode(e,!0):O.copyElement(e);return this.node.appendChild(r),this.node=r,this}t(e){const t=O.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=O.xmlGenerator().createElement("body");t.innerHTML=e;const n=O.createHtml(t);for(;n.childNodes.length>0;)this.node.appendChild(n.childNodes[0]);return this}},Handler:function(e,t,n,r,i,o,s){this.handler=e,this.ns=t,this.name=n,this.type=r,this.id=i,this.options=s||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(O.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=o?O.getBareJidFromJid(o):null:this.from=o,this.user=!0}};O.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(O.forEachChild(e,null,e=>{this.getNamespace(e)===this.ns&&(t=!0)}),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=O.getBareJidFromJid(t));const n=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!O.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(n):n!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw O._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},O.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},O.Connection=class{constructor(e,t){this.service=e,this.options=t||{},this.setProtocol(),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(()=>this._onIdle(),100),E(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms);for(const e in O._connectionPlugins)if(Object.prototype.hasOwnProperty.call(O._connectionPlugins,e)){const t=function(){};t.prototype=O._connectionPlugins[e],this[e]=new t,this[e].init(this)}}setProtocol(){const e=this.options.protocol||"";this.options.worker?this._proto=new O.WorkerWebsocket(this):0===this.service.indexOf("ws:")||0===this.service.indexOf("wss:")||0===e.indexOf("ws")?this._proto=new O.Websocket(this):this._proto=new O.Bosh(this)}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,n){this.protocolErrorHandlers[e][t]=n}connect(e,t,n,r,i,o,s){this.jid=e,this.authzid=O.getBareJidFromJid(this.jid),this.authcid=s||O.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=n,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.domain=O.getDomainFromJid(this.jid),this._changeConnectStatus(O.Status.CONNECTING,null),this._proto._connect(r,i,o)}attach(e,t,n,r,i,o,s){if(this._proto._attach)return this._proto._attach(e,t,n,r,i,o,s);{const e=new Error('The "attach" method is not available for your connection protocol');throw e.name="StropheSessionError",e}}restore(e,t,n,r,i){if(!this._sessionCachingSupported()){const e=new Error('The "restore" method can only be used with a BOSH connection.');throw e.name="StropheSessionError",e}this._proto._restore(e,t,n,r,i)}_sessionCachingSupported(){if(this._proto instanceof O.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t<e.length;t++)this._queueData(e[t]);else"function"==typeof e.tree?this._queueData(e.tree()):this._queueData(e);this._proto._send()}}flush(){clearTimeout(this._idleTimeout),this._onIdle()}sendPresence(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendPresence"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i),"error"===e.getAttribute("type")?n&&n(e):t&&t(e)},null,"presence",null,o);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),o}sendIQ(e,t,n,r){let i=null;"function"==typeof e.tree&&(e=e.tree());let o=e.getAttribute("id");if(o||(o=this.getUniqueId("sendIQ"),e.setAttribute("id",o)),"function"==typeof t||"function"==typeof n){const e=this.addHandler(e=>{i&&this.deleteTimedHandler(i);const r=e.getAttribute("type");if("result"===r)t&&t(e);else{if("error"!==r){const e=new Error("Got bad IQ type of ".concat(r));throw e.name="StropheError",e}n&&n(e)}},null,"iq",["error","result"],o);r&&(i=this.addTimedHandler(r,()=>(this.deleteHandler(e),n&&n(null),!1)))}return this.send(e),o}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(()=>this._onIdle(),100)}addTimedHandler(e,t){const n=new O.TimedHandler(e,t);return this.addTimeds.push(n),n}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,n,r,i,o,s){const a=new O.Handler(e,t,n,r,i,o,s);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[O.SASLAnonymous,O.SASLExternal,O.SASLOAuthBearer,O.SASLXOAuth2,O.SASLPlain,O.SASLSHA1]).forEach(e=>this.registerSASLMechanism(e))}registerSASLMechanism(e){const t=new e;this.mechanisms[t.mechname]=t}disconnect(e){if(this._changeConnectStatus(O.Status.DISCONNECTING,e),e?O.warn("Disconnect was called because: "+e):O.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=T({xmlns:O.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else O.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,n){for(const n in O._connectionPlugins)if(Object.prototype.hasOwnProperty.call(O._connectionPlugins,n)){const r=this[n];if(r.statusChanged)try{r.statusChanged(e,t)}catch(e){O.error("".concat(n," plugin caused an exception changing status: ").concat(e))}}if(this.connect_callback)try{this.connect_callback(e,t,n)}catch(e){O._handleError(e),O.error("User connection callback caused an exception: ".concat(e))}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),O.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(O.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const n=this._proto._reqToData(e);if(null===n)return;for(this.xmlInput!==O.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==O.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(O.serialize(n)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const r=n.getAttribute("type");if(null!==r&&"terminate"===r){if(this.disconnecting)return;let e=n.getAttribute("condition");const t=n.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(O.Status.CONNFAIL,e)):this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}O.forEachChild(n,null,e=>{const t=this.handlers;this.handlers=[];for(let n=0;n<t.length;n++){const r=t[n];try{(!r.isMatch(e)||!this.authenticated&&r.user||r.run(e))&&this.handlers.push(r)}catch(e){O.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}_connect_cb(e,t,n){let r;O.debug("_connect_cb was called"),this.connected=!0;try{r=this._proto._reqToData(e)}catch(e){if(e.name!==O.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.BAD_FORMAT),this._doDisconnect(O.ErrorCondition.BAD_FORMAT)}if(!r)return;if(this.xmlInput!==O.Connection.prototype.xmlInput&&(r.nodeName===this._proto.strip&&r.childNodes.length?this.xmlInput(r.childNodes[0]):this.xmlInput(r)),this.rawInput!==O.Connection.prototype.rawInput&&(n?this.rawInput(n):this.rawInput(O.serialize(r))),this._proto._connect_cb(r)===O.Status.CONNFAIL)return;let i;if(i=r.getElementsByTagNameNS?r.getElementsByTagNameNS(O.NS.STREAM,"features").length>0:r.getElementsByTagName("stream:features").length>0||r.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(t);const o=Array.from(r.getElementsByTagName("mechanism")).map(e=>this.mechanisms[e.textContent]).filter(e=>e);0!==o.length||0!==r.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(o):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;t<e.length-1;++t){let n=t;for(let r=t+1;r<e.length;++r)e[r].priority>e[n].priority&&(n=r);if(n!==t){const r=e[t];e[t]=e[n],e[n]=r}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let n=0;n<e.length;++n){if(!e[n].test(this))continue;this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=e[n],this._sasl_mechanism.onStart(this);const r=C("auth",{xmlns:O.NS.SASL,mechanism:this._sasl_mechanism.mechname});if(this._sasl_mechanism.isClientFirst){const e=this._sasl_mechanism.onChallenge(this,null);r.t(Object(A.btoa)(e))}this.send(r.tree()),t=!0;break}return t}_sasl_challenge_cb(e){const t=Object(A.atob)(O.getText(e)),n=this._sasl_mechanism.onChallenge(this,t),r=C("response",{xmlns:O.NS.SASL});return""!==n&&r.t(Object(A.btoa)(n)),this.send(r.tree()),!0}_attemptLegacyAuth(){null===O.getNodeFromJid(this.jid)?(this._changeConnectStatus(O.Status.CONNFAIL,O.ErrorCondition.MISSING_JID_NODE),this.disconnect(O.ErrorCondition.MISSING_JID_NODE)):(this._changeConnectStatus(O.Status.AUTHENTICATING,null),this._addSysHandler(this._onLegacyAuthIQResult.bind(this),null,null,null,"_auth_1"),this.send(j({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:O.NS.AUTH}).c("username",{}).t(O.getNodeFromJid(this.jid)).tree()))}_onLegacyAuthIQResult(e){const t=j({type:"set",id:"_auth_2"}).c("query",{xmlns:O.NS.AUTH}).c("username",{}).t(O.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return O.getResourceFromJid(this.jid)||(this.jid=O.getBareJidFromJid(this.jid)+"/strophe"),t.up().c("resource",{}).t(O.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(t.tree()),!1}_sasl_success_cb(e){if(this._sasl_data["server-signature"]){let t;const n=/([a-z]+)=([^,]+)(,|$)/,r=Object(A.atob)(O.getText(e)).match(n);if("v"===r[1]&&(t=r[2]),t!==this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}O.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null);const t=[],n=(e,t)=>{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler(e=>n(t,e),null,"stream:features",null,null)),t.push(this._addSysHandler(e=>n(t,e),O.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t<e.childNodes.length;t++){const n=e.childNodes[t];"bind"===n.nodeName&&(this.do_bind=!0),"session"===n.nodeName&&(this.do_session=!0)}return this.do_bind?(this.options.explicitResourceBinding?this._changeConnectStatus(O.Status.BINDREQUIRED,null):this.bind(),!1):(this._changeConnectStatus(O.Status.AUTHFAIL,null),!1)}bind(){if(!this.do_bind)return void O.log(O.LogLevel.INFO,'Strophe.Connection.prototype.bind called but "do_bind" is false');this._addSysHandler(this._onResourceBindResultIQ.bind(this),null,null,null,"_bind_auth_2");const e=O.getResourceFromJid(this.jid);e?this.send(j({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:O.NS.BIND}).c("resource",{}).t(e).tree()):this.send(j({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:O.NS.BIND}).tree())}_onResourceBindResultIQ(e){if("error"===e.getAttribute("type")){let t;return O.warn("Resource binding failed."),e.getElementsByTagName("conflict").length>0&&(t=O.ErrorCondition.CONFLICT),this._changeConnectStatus(O.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return O.warn("Resource binding failed."),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.authenticated=!0,this.jid=O.getText(e[0]),this.do_session?this._establishSession():this._changeConnectStatus(O.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error("Strophe.Connection.prototype._establishSession "+"called but apparently ".concat(O.NS.SESSION," wasn't advertised by the server"));this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(j({type:"set",id:"_session_auth_2"}).c("session",{xmlns:O.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(O.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return this.authenticated=!1,O.warn("Session creation failed."),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(O.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(O.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(O.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const n=new O.TimedHandler(e,t);return n.user=!1,this.addTimeds.push(n),n}_addSysHandler(e,t,n,r,i){const o=new O.Handler(e,t,n,r,i);return o.user=!1,this.addHandlers.push(o),o}_onDisconnectTimeout(){return O.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(O.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let n=0;n<this.timedHandlers.length;n++){const r=this.timedHandlers[n];if(this.authenticated||!r.user){r.lastCalled+r.period-e<=0?r.run()&&t.push(r):t.push(r)}}this.timedHandlers=t,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(()=>this._onIdle(),100))}},O.SASLMechanism=class{constructor(e,t,n){this.mechname=e,this.isClientFirst=t,this.priority=n}test(){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}onFailure(){this._connection=null}onSuccess(){this._connection=null}},O.SASLAnonymous=class extends O.SASLMechanism{constructor(e="ANONYMOUS",t=!1,n=20){super(e,t,n)}test(e){return null===e.authcid}},O.SASLPlain=class extends O.SASLMechanism{constructor(e="PLAIN",t=!0,n=50){super(e,t,n)}test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:n,domain:r,pass:i}=e;if(!r)throw new Error("SASLPlain onChallenge: domain is not defined!");let o=n!=="".concat(t,"@").concat(r)?n:"";return o+="\0",o+=t,o+="\0",o+=i,x(o)}},O.SASLSHA1=class extends O.SASLMechanism{constructor(e="SCRAM-SHA-1",t=!0,n=60){super(e,t,n)}test(e){return null!==e.authcid}onChallenge(e,t,n){const r=n||h.hexdigest(""+1234567890*Math.random());let i="n="+x(e.authcid);return i+=",r=",i+=r,e._sasl_data.cnonce=r,e._sasl_data["client-first-message-bare"]=i,i="n,,"+i,this.onChallenge=(e,t)=>{let n,r,i,o,s,a,c,l,u="c=biws,",d="".concat(e._sasl_data["client-first-message-bare"],",").concat(t,",");const h=e._sasl_data.cnonce,f=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(f);){const e=t.match(f);switch(t=t.replace(e[0],""),e[1]){case"r":n=e[2];break;case"s":r=e[2];break;case"i":i=e[2]}}if(n.substr(0,h.length)!==h)return e._sasl_data={},e._sasl_failure_cb();u+="r="+n,d+=u,r=Object(A.atob)(r),r+="\0\0\0";const p=x(e.pass);for(o=a=S.core_hmac_sha1(p,r),c=1;c<i;c++){for(s=S.core_hmac_sha1(p,S.binb2str(a)),l=0;l<5;l++)o[l]^=s[l];a=s}o=S.binb2str(o);const g=S.core_hmac_sha1(o,"Client Key"),m=S.str_hmac_sha1(o,"Server Key"),v=S.core_hmac_sha1(S.str_sha1(S.binb2str(g)),d);for(e._sasl_data["server-signature"]=S.b64_hmac_sha1(m,d),l=0;l<5;l++)g[l]^=v[l];return u+=",p="+Object(A.btoa)(S.binb2str(g)),u},i}},O.SASLOAuthBearer=class extends O.SASLMechanism{constructor(e="OAUTHBEARER",t=!0,n=40){super(e,t,n)}test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",x(t)}},O.SASLExternal=class extends O.SASLMechanism{constructor(e="EXTERNAL",t=!0,n=10){super(e,t,n)}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},O.SASLXOAuth2=class extends O.SASLMechanism{constructor(e="X-OAUTH2",t=!0,n=30){super(e,t,n)}test(e){return null!==e.pass}onChallenge(e){let t="\0";return null!==e.authcid&&(t+=e.authzid),t+="\0",t+=e.pass,x(t)}};t.e={Strophe:O,$build:C,$iq:j,$msg:function(e){return new O.Builder("message",e)},$pres:T,SHA1:S,MD5:h,b64_hmac_sha1:S.b64_hmac_sha1,b64_sha1:S.b64_sha1,str_hmac_sha1:S.str_hmac_sha1,str_sha1:S.str_sha1}},function(e,t,n){var r;
 /*!
  * Sizzle CSS Selector Engine v2.3.5
  * https://sizzlejs.com/
@@ -8,7 +8,7 @@
  * https://js.foundation/
  *
  * Date: 2020-03-14
- */!function(i){var s,o,a,c,l,u,d,h,f,p,g,m,v,_,b,y,w,S,x,E="sizzle"+1*new Date,A=i.document,C=0,j=0,T=he(),O=he(),k=he(),N=he(),I=function(e,t){return e===t&&(g=!0),0},M={}.hasOwnProperty,R=[],D=R.pop,P=R.push,L=R.push,z=R.slice,F=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",q="[\\x20\\t\\r\\n\\f]",H="(?:\\\\[\\da-fA-F]{1,6}"+q+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",U="\\["+q+"*("+H+")(?:"+q+"*([*^$|!~]?=)"+q+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+H+"))|)"+q+"*\\]",$=":("+H+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+U+")*)|.*)\\)|)",W=new RegExp(q+"+","g"),V=new RegExp("^"+q+"+|((?:^|[^\\\\])(?:\\\\.)*)"+q+"+$","g"),G=new RegExp("^"+q+"*,"+q+"*"),J=new RegExp("^"+q+"*([>+~]|"+q+")"+q+"*"),X=new RegExp(q+"|>"),Q=new RegExp($),Y=new RegExp("^"+H+"$"),K={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H+"|[*])"),ATTR:new RegExp("^"+U),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+q+"*(even|odd|(([+-]|)(\\d*)n|)"+q+"*(?:([+-]|)"+q+"*(\\d+)|))"+q+"*\\)|)","i"),bool:new RegExp("^(?:"+B+")$","i"),needsContext:new RegExp("^"+q+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+q+"*((?:-\\d)?\\d*)"+q+"*\\)|)(?=[^-]|$)","i")},Z=/HTML$/i,ee=/^(?:input|select|textarea|button)$/i,te=/^h\d$/i,ne=/^[^{]+\{\s*\[native \w/,re=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ie=/[+~]/,se=new RegExp("\\\\[\\da-fA-F]{1,6}"+q+"?|\\\\([^\\r\\n\\f])","g"),oe=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ae=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ce=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},le=function(){m()},ue=Ee((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{L.apply(R=z.call(A.childNodes),A.childNodes),R[A.childNodes.length].nodeType}catch(e){L={apply:R.length?function(e,t){P.apply(e,z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function de(e,t,n,r){var i,s,a,c,l,d,f,p=t&&t.ownerDocument,g=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==g&&9!==g&&11!==g)return n;if(!r&&(m(t),t=t||v,b)){if(11!==g&&(l=re.exec(e)))if(i=l[1]){if(9===g){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(p&&(a=p.getElementById(i))&&x(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return L.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&o.getElementsByClassName&&t.getElementsByClassName)return L.apply(n,t.getElementsByClassName(i)),n}if(o.qsa&&!N[e+" "]&&(!y||!y.test(e))&&(1!==g||"object"!==t.nodeName.toLowerCase())){if(f=e,p=t,1===g&&(X.test(e)||J.test(e))){for((p=ie.test(e)&&we(t.parentNode)||t)===t&&o.scope||((c=t.getAttribute("id"))?c=c.replace(ae,ce):t.setAttribute("id",c=E)),s=(d=u(e)).length;s--;)d[s]=(c?"#"+c:":scope")+" "+xe(d[s]);f=d.join(",")}try{return L.apply(n,p.querySelectorAll(f)),n}catch(t){N(e,!0)}finally{c===E&&t.removeAttribute("id")}}}return h(e.replace(V,"$1"),t,n,r)}function he(){var e=[];return function t(n,r){return e.push(n+" ")>a.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function fe(e){return e[E]=!0,e}function pe(e){var t=v.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ge(e,t){for(var n=e.split("|"),r=n.length;r--;)a.attrHandle[n[r]]=t}function me(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ve(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function _e(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function be(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ue(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ye(e){return fe((function(t){return t=+t,fe((function(n,r){for(var i,s=e([],n.length,t),o=s.length;o--;)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))}))}))}function we(e){return e&&void 0!==e.getElementsByTagName&&e}for(s in o=de.support={},l=de.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Z.test(t||n&&n.nodeName||"HTML")},m=de.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:A;return r!=v&&9===r.nodeType&&r.documentElement?(_=(v=r).documentElement,b=!l(v),A!=v&&(n=v.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",le,!1):n.attachEvent&&n.attachEvent("onunload",le)),o.scope=pe((function(e){return _.appendChild(e).appendChild(v.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),o.attributes=pe((function(e){return e.className="i",!e.getAttribute("className")})),o.getElementsByTagName=pe((function(e){return e.appendChild(v.createComment("")),!e.getElementsByTagName("*").length})),o.getElementsByClassName=ne.test(v.getElementsByClassName),o.getById=pe((function(e){return _.appendChild(e).id=E,!v.getElementsByName||!v.getElementsByName(E).length})),o.getById?(a.filter.ID=function(e){var t=e.replace(se,oe);return function(e){return e.getAttribute("id")===t}},a.find.ID=function(e,t){if(void 0!==t.getElementById&&b){var n=t.getElementById(e);return n?[n]:[]}}):(a.filter.ID=function(e){var t=e.replace(se,oe);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},a.find.ID=function(e,t){if(void 0!==t.getElementById&&b){var n,r,i,s=t.getElementById(e);if(s){if((n=s.getAttributeNode("id"))&&n.value===e)return[s];for(i=t.getElementsByName(e),r=0;s=i[r++];)if((n=s.getAttributeNode("id"))&&n.value===e)return[s]}return[]}}),a.find.TAG=o.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):o.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,s=t.getElementsByTagName(e);if("*"===e){for(;n=s[i++];)1===n.nodeType&&r.push(n);return r}return s},a.find.CLASS=o.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&b)return t.getElementsByClassName(e)},w=[],y=[],(o.qsa=ne.test(v.querySelectorAll))&&(pe((function(e){var t;_.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+q+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+q+"*(?:value|"+B+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=v.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+q+"*name"+q+"*="+q+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")})),pe((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=v.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+q+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),_.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")}))),(o.matchesSelector=ne.test(S=_.matches||_.webkitMatchesSelector||_.mozMatchesSelector||_.oMatchesSelector||_.msMatchesSelector))&&pe((function(e){o.disconnectedMatch=S.call(e,"*"),S.call(e,"[s!='']:x"),w.push("!=",$)})),y=y.length&&new RegExp(y.join("|")),w=w.length&&new RegExp(w.join("|")),t=ne.test(_.compareDocumentPosition),x=t||ne.test(_.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},I=t?function(e,t){if(e===t)return g=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!o.sortDetached&&t.compareDocumentPosition(e)===n?e==v||e.ownerDocument==A&&x(A,e)?-1:t==v||t.ownerDocument==A&&x(A,t)?1:p?F(p,e)-F(p,t):0:4&n?-1:1)}:function(e,t){if(e===t)return g=!0,0;var n,r=0,i=e.parentNode,s=t.parentNode,o=[e],a=[t];if(!i||!s)return e==v?-1:t==v?1:i?-1:s?1:p?F(p,e)-F(p,t):0;if(i===s)return me(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;o[r]===a[r];)r++;return r?me(o[r],a[r]):o[r]==A?-1:a[r]==A?1:0},v):v},de.matches=function(e,t){return de(e,null,null,t)},de.matchesSelector=function(e,t){if(m(e),o.matchesSelector&&b&&!N[t+" "]&&(!w||!w.test(t))&&(!y||!y.test(t)))try{var n=S.call(e,t);if(n||o.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return de(t,v,null,[e]).length>0},de.contains=function(e,t){return(e.ownerDocument||e)!=v&&m(e),x(e,t)},de.attr=function(e,t){(e.ownerDocument||e)!=v&&m(e);var n=a.attrHandle[t.toLowerCase()],r=n&&M.call(a.attrHandle,t.toLowerCase())?n(e,t,!b):void 0;return void 0!==r?r:o.attributes||!b?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},de.escape=function(e){return(e+"").replace(ae,ce)},de.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},de.uniqueSort=function(e){var t,n=[],r=0,i=0;if(g=!o.detectDuplicates,p=!o.sortStable&&e.slice(0),e.sort(I),g){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return p=null,e},c=de.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=c(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=c(t);return n},(a=de.selectors={cacheLength:50,createPseudo:fe,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(se,oe),e[3]=(e[3]||e[4]||e[5]||"").replace(se,oe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||de.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&de.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Q.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(se,oe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+q+")"+e+"("+q+"|$)"))&&T(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=de.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var s="nth"!==e.slice(0,3),o="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,c){var l,u,d,h,f,p,g=s!==o?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),_=!c&&!a,b=!1;if(m){if(s){for(;g;){for(h=t;h=h[g];)if(a?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?m.firstChild:m.lastChild],o&&_){for(b=(f=(l=(u=(d=(h=m)[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===C&&l[1])&&l[2],h=f&&m.childNodes[f];h=++f&&h&&h[g]||(b=f=0)||p.pop();)if(1===h.nodeType&&++b&&h===t){u[e]=[C,f,b];break}}else if(_&&(b=f=(l=(u=(d=(h=t)[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===C&&l[1]),!1===b)for(;(h=++f&&h&&h[g]||(b=f=0)||p.pop())&&((a?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++b||(_&&((u=(d=h[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]=[C,b]),h!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,r=a.pseudos[e]||a.setFilters[e.toLowerCase()]||de.error("unsupported pseudo: "+e);return r[E]?r(t):r.length>1?(n=[e,e,"",t],a.setFilters.hasOwnProperty(e.toLowerCase())?fe((function(e,n){for(var i,s=r(e,t),o=s.length;o--;)e[i=F(e,s[o])]=!(n[i]=s[o])})):function(e){return r(e,0,n)}):r}},pseudos:{not:fe((function(e){var t=[],n=[],r=d(e.replace(V,"$1"));return r[E]?fe((function(e,t,n,i){for(var s,o=r(e,null,i,[]),a=e.length;a--;)(s=o[a])&&(e[a]=!(t[a]=s))})):function(e,i,s){return t[0]=e,r(t,null,s,n),t[0]=null,!n.pop()}})),has:fe((function(e){return function(t){return de(e,t).length>0}})),contains:fe((function(e){return e=e.replace(se,oe),function(t){return(t.textContent||c(t)).indexOf(e)>-1}})),lang:fe((function(e){return Y.test(e||"")||de.error("unsupported lang: "+e),e=e.replace(se,oe).toLowerCase(),function(t){var n;do{if(n=b?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(e){var t=i.location&&i.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===_},focus:function(e){return e===v.activeElement&&(!v.hasFocus||v.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:be(!1),disabled:be(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!a.pseudos.empty(e)},header:function(e){return te.test(e.nodeName)},input:function(e){return ee.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye((function(){return[0]})),last:ye((function(e,t){return[t-1]})),eq:ye((function(e,t,n){return[n<0?n+t:n]})),even:ye((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ye((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ye((function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e})),gt:ye((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}}).pseudos.nth=a.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})a.pseudos[s]=ve(s);for(s in{submit:!0,reset:!0})a.pseudos[s]=_e(s);function Se(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ee(e,t,n){var r=t.dir,i=t.next,s=i||r,o=n&&"parentNode"===s,a=j++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,i);return!1}:function(t,n,c){var l,u,d,h=[C,a];if(c){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,c))return!0}else for(;t=t[r];)if(1===t.nodeType||o)if(u=(d=t[E]||(t[E]={}))[t.uniqueID]||(d[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=u[s])&&l[0]===C&&l[1]===a)return h[2]=l[2];if(u[s]=h,h[2]=e(t,n,c))return!0}return!1}}function Ae(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ce(e,t,n,r,i){for(var s,o=[],a=0,c=e.length,l=null!=t;a<c;a++)(s=e[a])&&(n&&!n(s,r,i)||(o.push(s),l&&t.push(a)));return o}function je(e,t,n,r,i,s){return r&&!r[E]&&(r=je(r)),i&&!i[E]&&(i=je(i,s)),fe((function(s,o,a,c){var l,u,d,h=[],f=[],p=o.length,g=s||function(e,t,n){for(var r=0,i=t.length;r<i;r++)de(e,t[r],n);return n}(t||"*",a.nodeType?[a]:a,[]),m=!e||!s&&t?g:Ce(g,h,e,a,c),v=n?i||(s?e:p||r)?[]:o:m;if(n&&n(m,v,a,c),r)for(l=Ce(v,f),r(l,[],a,c),u=l.length;u--;)(d=l[u])&&(v[f[u]]=!(m[f[u]]=d));if(s){if(i||e){if(i){for(l=[],u=v.length;u--;)(d=v[u])&&l.push(m[u]=d);i(null,v=[],l,c)}for(u=v.length;u--;)(d=v[u])&&(l=i?F(s,d):h[u])>-1&&(s[l]=!(o[l]=d))}}else v=Ce(v===o?v.splice(p,v.length):v),i?i(null,o,v,c):L.apply(o,v)}))}function Te(e){for(var t,n,r,i=e.length,s=a.relative[e[0].type],o=s||a.relative[" "],c=s?1:0,l=Ee((function(e){return e===t}),o,!0),u=Ee((function(e){return F(t,e)>-1}),o,!0),d=[function(e,n,r){var i=!s&&(r||n!==f)||((t=n).nodeType?l(e,n,r):u(e,n,r));return t=null,i}];c<i;c++)if(n=a.relative[e[c].type])d=[Ee(Ae(d),n)];else{if((n=a.filter[e[c].type].apply(null,e[c].matches))[E]){for(r=++c;r<i&&!a.relative[e[r].type];r++);return je(c>1&&Ae(d),c>1&&xe(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(V,"$1"),n,c<r&&Te(e.slice(c,r)),r<i&&Te(e=e.slice(r)),r<i&&xe(e))}d.push(n)}return Ae(d)}Se.prototype=a.filters=a.pseudos,a.setFilters=new Se,u=de.tokenize=function(e,t){var n,r,i,s,o,c,l,u=O[e+" "];if(u)return t?0:u.slice(0);for(o=e,c=[],l=a.preFilter;o;){for(s in n&&!(r=G.exec(o))||(r&&(o=o.slice(r[0].length)||o),c.push(i=[])),n=!1,(r=J.exec(o))&&(n=r.shift(),i.push({value:n,type:r[0].replace(V," ")}),o=o.slice(n.length)),a.filter)!(r=K[s].exec(o))||l[s]&&!(r=l[s](r))||(n=r.shift(),i.push({value:n,type:s,matches:r}),o=o.slice(n.length));if(!n)break}return t?o.length:o?de.error(e):O(e,c).slice(0)},d=de.compile=function(e,t){var n,r=[],i=[],s=k[e+" "];if(!s){for(t||(t=u(e)),n=t.length;n--;)(s=Te(t[n]))[E]?r.push(s):i.push(s);(s=k(e,function(e,t){var n=t.length>0,r=e.length>0,i=function(i,s,o,c,l){var u,d,h,p=0,g="0",_=i&&[],y=[],w=f,S=i||r&&a.find.TAG("*",l),x=C+=null==w?1:Math.random()||.1,E=S.length;for(l&&(f=s==v||s||l);g!==E&&null!=(u=S[g]);g++){if(r&&u){for(d=0,s||u.ownerDocument==v||(m(u),o=!b);h=e[d++];)if(h(u,s||v,o)){c.push(u);break}l&&(C=x)}n&&((u=!h&&u)&&p--,i&&_.push(u))}if(p+=g,n&&g!==p){for(d=0;h=t[d++];)h(_,y,s,o);if(i){if(p>0)for(;g--;)_[g]||y[g]||(y[g]=D.call(c));y=Ce(y)}L.apply(c,y),l&&!i&&y.length>0&&p+t.length>1&&de.uniqueSort(c)}return l&&(C=x,f=w),_};return n?fe(i):i}(i,r))).selector=e}return s},h=de.select=function(e,t,n,r){var i,s,o,c,l,h="function"==typeof e&&e,f=!r&&u(e=h.selector||e);if(n=n||[],1===f.length){if((s=f[0]=f[0].slice(0)).length>2&&"ID"===(o=s[0]).type&&9===t.nodeType&&b&&a.relative[s[1].type]){if(!(t=(a.find.ID(o.matches[0].replace(se,oe),t)||[])[0]))return n;h&&(t=t.parentNode),e=e.slice(s.shift().value.length)}for(i=K.needsContext.test(e)?0:s.length;i--&&(o=s[i],!a.relative[c=o.type]);)if((l=a.find[c])&&(r=l(o.matches[0].replace(se,oe),ie.test(s[0].type)&&we(t.parentNode)||t))){if(s.splice(i,1),!(e=r.length&&xe(s)))return L.apply(n,r),n;break}}return(h||d(e,f))(r,t,!b,n,!t||ie.test(e)&&we(t.parentNode)||t),n},o.sortStable=E.split("").sort(I).join("")===E,o.detectDuplicates=!!g,m(),o.sortDetached=pe((function(e){return 1&e.compareDocumentPosition(v.createElement("fieldset"))})),pe((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||ge("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),o.attributes&&pe((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||ge("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),pe((function(e){return null==e.getAttribute("disabled")}))||ge(B,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}));var Oe=i.Sizzle;de.noConflict=function(){return i.Sizzle===de&&(i.Sizzle=Oe),de},void 0===(r=function(){return de}.call(t,n,t,e))||(e.exports=r)}(window)},function(e,t,n){"use strict";(function(e){n(115),n(54),n(405);var r=n(0);n.d(t,"e",(function(){return r.e})),n.d(t,"a",(function(){return r.a})),n.d(t,"b",(function(){return r.b})),n.d(t,"c",(function(){return r.c})),n.d(t,"d",(function(){return r.d})),e.$build=r.f.$build,e.$iq=r.f.$iq,e.$msg=r.f.$msg,e.$pres=r.f.$pres,e.Strophe=r.f.Strophe}).call(this,n(11))},function(e,t,n){e.exports=function(){"use strict";var e="millisecond",t="second",n="minute",r="hour",i="day",s="week",o="month",a="quarter",c="year",l=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,u=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,d=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},h={s:d,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?"+":"-")+d(r,2,"0")+":"+d(i,2,"0")},m:function(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,o),i=t-r<0,s=e.clone().add(n+(i?-1:1),o);return Number(-(n+(t-r)/(i?r-s:s-r))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(l){return{M:o,y:c,w:s,d:i,D:"date",h:r,m:n,s:t,ms:e,Q:a}[l]||String(l||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},f={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},p="en",g={};g[p]=f;var m=function(e){return e instanceof y},v=function(e,t,n){var r;if(!e)return p;if("string"==typeof e)g[e]&&(r=e),t&&(g[e]=t,r=e);else{var i=e.name;g[i]=e,r=i}return!n&&r&&(p=r),r||!n&&p},_=function(e,t){if(m(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new y(n)},b=h;b.l=v,b.i=m,b.w=function(e,t){return _(e,{locale:t.$L,utc:t.$u,$offset:t.$offset})};var y=function(){function d(e){this.$L=this.$L||v(e.locale,null,!0),this.parse(e)}var h=d.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(b.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(l);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return b},h.isValid=function(){return!("Invalid Date"===this.$d.toString())},h.isSame=function(e,t){var n=_(e);return this.startOf(t)<=n&&n<=this.endOf(t)},h.isAfter=function(e,t){return _(e)<this.startOf(t)},h.isBefore=function(e,t){return this.endOf(t)<_(e)},h.$g=function(e,t,n){return b.u(e)?this[t]:this.set(n,e)},h.year=function(e){return this.$g(e,"$y",c)},h.month=function(e){return this.$g(e,"$M",o)},h.day=function(e){return this.$g(e,"$W",i)},h.date=function(e){return this.$g(e,"$D","date")},h.hour=function(e){return this.$g(e,"$H",r)},h.minute=function(e){return this.$g(e,"$m",n)},h.second=function(e){return this.$g(e,"$s",t)},h.millisecond=function(t){return this.$g(t,"$ms",e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,a){var l=this,u=!!b.u(a)||a,d=b.p(e),h=function(e,t){var n=b.w(l.$u?Date.UTC(l.$y,t,e):new Date(l.$y,t,e),l);return u?n:n.endOf(i)},f=function(e,t){return b.w(l.toDate()[e].apply(l.toDate("s"),(u?[0,0,0,0]:[23,59,59,999]).slice(t)),l)},p=this.$W,g=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(d){case c:return u?h(1,0):h(31,11);case o:return u?h(1,g):h(0,g+1);case s:var _=this.$locale().weekStart||0,y=(p<_?p+7:p)-_;return h(u?m-y:m+(6-y),g);case i:case"date":return f(v+"Hours",0);case r:return f(v+"Minutes",1);case n:return f(v+"Seconds",2);case t:return f(v+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(s,a){var l,u=b.p(s),d="set"+(this.$u?"UTC":""),h=(l={},l.day=d+"Date",l.date=d+"Date",l[o]=d+"Month",l[c]=d+"FullYear",l[r]=d+"Hours",l[n]=d+"Minutes",l[t]=d+"Seconds",l[e]=d+"Milliseconds",l)[u],f=u===i?this.$D+(a-this.$W):a;if(u===o||u===c){var p=this.clone().set("date",1);p.$d[h](f),p.init(),this.$d=p.set("date",Math.min(this.$D,p.daysInMonth())).$d}else h&&this.$d[h](f);return this.init(),this},h.set=function(e,t){return this.clone().$set(e,t)},h.get=function(e){return this[b.p(e)]()},h.add=function(e,a){var l,u=this;e=Number(e);var d=b.p(a),h=function(t){var n=_(u);return b.w(n.date(n.date()+Math.round(t*e)),u)};if(d===o)return this.set(o,this.$M+e);if(d===c)return this.set(c,this.$y+e);if(d===i)return h(1);if(d===s)return h(7);var f=(l={},l[n]=6e4,l[r]=36e5,l[t]=1e3,l)[d]||1,p=this.$d.getTime()+e*f;return b.w(p,this)},h.subtract=function(e,t){return this.add(-1*e,t)},h.format=function(e){var t=this;if(!this.isValid())return"Invalid Date";var n=e||"YYYY-MM-DDTHH:mm:ssZ",r=b.z(this),i=this.$locale(),s=this.$H,o=this.$m,a=this.$M,c=i.weekdays,l=i.months,d=function(e,r,i,s){return e&&(e[r]||e(t,n))||i[r].substr(0,s)},h=function(e){return b.s(s%12||12,e,"0")},f=i.meridiem||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r},p={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:b.s(a+1,2,"0"),MMM:d(i.monthsShort,a,l,3),MMMM:d(l,a),D:this.$D,DD:b.s(this.$D,2,"0"),d:String(this.$W),dd:d(i.weekdaysMin,this.$W,c,2),ddd:d(i.weekdaysShort,this.$W,c,3),dddd:c[this.$W],H:String(s),HH:b.s(s,2,"0"),h:h(1),hh:h(2),a:f(s,o,!0),A:f(s,o,!1),m:String(o),mm:b.s(o,2,"0"),s:String(this.$s),ss:b.s(this.$s,2,"0"),SSS:b.s(this.$ms,3,"0"),Z:r};return n.replace(u,(function(e,t){return t||p[e]||r.replace(":","")}))},h.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},h.diff=function(e,i,l){var u,d=b.p(i),h=_(e),f=6e4*(h.utcOffset()-this.utcOffset()),p=this-h,g=b.m(this,h);return g=(u={},u[c]=g/12,u[o]=g,u[a]=g/3,u[s]=(p-f)/6048e5,u.day=(p-f)/864e5,u[r]=p/36e5,u[n]=p/6e4,u[t]=p/1e3,u)[d]||p,l?g:b.a(g)},h.daysInMonth=function(){return this.endOf(o).$D},h.$locale=function(){return g[this.$L]},h.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=v(e,t,!0);return r&&(n.$L=r),n},h.clone=function(){return b.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},d}();return _.prototype=y.prototype,_.extend=function(e,t){return e(t,y,_),_},_.locale=v,_.isDayjs=m,_.unix=function(e){return _(1e3*e)},_.en=g[p],_.Ls=g,_}()},function(e,t,n){"use strict";var r=n(49),i="object"==typeof self&&self&&self.Object===Object&&self,s=r.a||i||Function("return this")();t.a=s},,function(e,t,n){"use strict";function r(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,r,o,l,u,d,h,f,p=new Array(80),g=1732584193,m=-271733879,v=-1732584194,_=271733878,b=-1009589776;for(n=0;n<e.length;n+=16){for(l=g,u=m,d=v,h=_,f=b,r=0;r<80;r++)p[r]=r<16?e[n+r]:c(p[r-3]^p[r-8]^p[r-14]^p[r-16],1),o=a(a(c(g,5),i(r,m,v,_)),a(a(b,p[r]),s(r))),b=_,_=v,v=c(m,30),m=g,g=o;g=a(g,l),m=a(m,u),v=a(v,d),_=a(_,h),b=a(b,f)}return[g,m,v,_,b]}function i(e,t,n,r){return e<20?t&n|~t&r:e<40?t^n^r:e<60?t&n|t&r|n&r:t^n^r}function s(e){return e<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514}function o(e,t){var n=l(e);n.length>16&&(n=r(n,8*e.length));for(var i=new Array(16),s=new Array(16),o=0;o<16;o++)i[o]=909522486^n[o],s[o]=1549556828^n[o];var a=r(i.concat(l(t)),512+8*t.length);return r(s.concat(a),672)}function a(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function c(e,t){return e<<t|e>>>32-t}function l(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function u(e){for(var t,n,r="",i=0;i<4*e.length;i+=3)for(t=(e[i>>2]>>8*(3-i%4)&255)<<16|(e[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|e[i+2>>2]>>8*(3-(i+2)%4)&255,n=0;n<4;n++)8*i+6*n>32*e.length?r+="=":r+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return r}function d(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}n.d(t,"a",(function(){return h}));const h={b64_hmac_sha1:function(e,t){return u(o(e,t))},b64_sha1:function(e){return u(r(l(e),8*e.length))},binb2str:d,core_hmac_sha1:o,str_hmac_sha1:function(e,t){return d(o(e,t))},str_sha1:function(e){return d(r(l(e),8*e.length))}}},function(e,t,n){var r=n(408),i=n(113),s=/[&<>"']/g,o=RegExp(s.source);e.exports=function(e){return(e=i(e))&&o.test(e)?e.replace(s,r):e}},function(e,t,n){"use strict";const r=n(288),i=n(289);e.exports={atob:r,btoa:i}},function(e,t,n){var r=n(72),i="object"==typeof self&&self&&self.Object===Object&&self,s=r||i||Function("return this")();e.exports=s},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";(function(e){var r=n(49),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=s&&s.exports===i&&r.a.process,a=function(){try{var e=s&&s.require&&s.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();t.a=a}).call(this,n(55)(e))},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}));!function(){let t=e.WebSocket;if(void 0===t)try{t=n(286)}catch(e){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}}();const r=function(){let t=e.DOMParser;if(void 0===t)try{t=n(37).DOMParser}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}return t}();function i(){if("undefined"==typeof document)try{return(new(0,n(37).DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}if(void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10){const e=function(){const e=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}();return e.appendChild(e.createElement("strophe")),e}return document.implementation.createDocument("jabber:client","strophe",null)}}).call(this,n(11))},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}));!function(){let t=e.WebSocket;if(void 0===t)try{t=n(411)}catch(e){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}}();const r=function(){let t=e.DOMParser;if(void 0===t)try{t=n(37).DOMParser}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}return t}();function i(){if("undefined"==typeof document)try{return(new(0,n(37).DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}if(void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10){const e=function(){const e=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}();return e.appendChild(e.createElement("strophe")),e}return document.implementation.createDocument("jabber:client","strophe",null)}}).call(this,n(11))},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){!function e(t,n,r){function i(o,a){if(!n[o]){if(!t[o]){if(s)return s(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};t[o][0].call(l.exports,(function(e){return i(t[o][1][e]||e)}),l,l.exports,e,t,n,r)}return n[o].exports}for(var s=!1,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,t,n){var r=e("cssfilter").FilterCSS,i=e("cssfilter").getDefaultWhiteList,s=e("./util");function o(){return{a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]}}var a=new r;function c(e){return e.replace(l,"&lt;").replace(u,"&gt;")}var l=/</g,u=/>/g,d=/"/g,h=/&quot;/g,f=/&#([a-zA-Z0-9]*);?/gim,p=/&colon;?/gim,g=/&newline;?/gim,m=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi,v=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,_=/u\s*r\s*l\s*\(.*/gi;function b(e){return e.replace(d,"&quot;")}function y(e){return e.replace(h,'"')}function w(e){return e.replace(f,(function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))}))}function S(e){return e.replace(p,":").replace(g," ")}function x(e){for(var t="",n=0,r=e.length;n<r;n++)t+=e.charCodeAt(n)<32?" ":e.charAt(n);return s.trim(t)}function E(e){return e=x(e=S(e=w(e=y(e))))}function A(e){return e=c(e=b(e))}var C=/<!--[\s\S]*?-->/g;n.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]},n.getDefaultWhiteList=o,n.onTag=function(e,t,n){},n.onIgnoreTag=function(e,t,n){},n.onTagAttr=function(e,t,n){},n.onIgnoreTagAttr=function(e,t,n){},n.safeAttrValue=function(e,t,n,r){if(n=E(n),"href"===t||"src"===t){if("#"===(n=s.trim(n)))return"#";if("http://"!==n.substr(0,7)&&"https://"!==n.substr(0,8)&&"mailto:"!==n.substr(0,7)&&"tel:"!==n.substr(0,4)&&"data:image/"!==n.substr(0,11)&&"ftp://"!==n.substr(0,6)&&"./"!==n.substr(0,2)&&"../"!==n.substr(0,3)&&"#"!==n[0]&&"/"!==n[0])return""}else if("background"===t){if(m.lastIndex=0,m.test(n))return""}else if("style"===t){if(v.lastIndex=0,v.test(n))return"";if(_.lastIndex=0,_.test(n)&&(m.lastIndex=0,m.test(n)))return"";!1!==r&&(n=(r=r||a).process(n))}return n=A(n)},n.escapeHtml=c,n.escapeQuote=b,n.unescapeQuote=y,n.escapeHtmlEntities=w,n.escapeDangerHtml5Entities=S,n.clearNonPrintableCharacter=x,n.friendlyAttrValue=E,n.escapeAttrValue=A,n.onIgnoreTagStripAll=function(){return""},n.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var n=!Array.isArray(e),r=[],i=!1;return{onIgnoreTag:function(o,a,c){if(function(t){return!!n||-1!==s.indexOf(e,t)}(o)){if(c.isClosing){var l="[/removed]",u=c.position+l.length;return r.push([!1!==i?i:c.position,u]),i=!1,l}return i||(i=c.position),"[removed]"}return t(o,a,c)},remove:function(e){var t="",n=0;return s.forEach(r,(function(r){t+=e.slice(n,r[0]),n=r[1]})),t+=e.slice(n)}}},n.stripCommentTag=function(e){return e.replace(C,"")},n.stripBlankChar=function(e){var t=e.split("");return(t=t.filter((function(e){var t=e.charCodeAt(0);return 127!==t&&(!(t<=31)||(10===t||13===t))}))).join("")},n.cssFilter=a,n.getDefaultCSSWhiteList=i},{"./util":4,cssfilter:8}],2:[function(e,t,n){var r=e("./default"),i=e("./parser"),s=e("./xss");function o(e,t){return new s(t).process(e)}for(var a in(n=t.exports=o).filterXSS=o,n.FilterXSS=s,r)n[a]=r[a];for(var a in i)n[a]=i[a];"undefined"!=typeof window&&(window.filterXSS=t.exports),"undefined"!=typeof self&&"undefined"!=typeof DedicatedWorkerGlobalScope&&self instanceof DedicatedWorkerGlobalScope&&(self.filterXSS=t.exports)},{"./default":1,"./parser":3,"./xss":5}],3:[function(e,t,n){var r=e("./util");function i(e){var t=r.spaceIndex(e);if(-1===t)var n=e.slice(1,-1);else n=e.slice(1,t+1);return"/"===(n=r.trim(n).toLowerCase()).slice(0,1)&&(n=n.slice(1)),"/"===n.slice(-1)&&(n=n.slice(0,-1)),n}function s(e){return"</"===e.slice(0,2)}var o=/[^a-zA-Z0-9_:\.\-]/gim;function a(e,t){for(;t<e.length;t++){var n=e[t];if(" "!==n)return"="===n?t:-1}}function c(e,t){for(;t>0;t--){var n=e[t];if(" "!==n)return"="===n?t:-1}}function l(e){return function(e){return'"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1]}(e)?e.substr(1,e.length-2):e}n.parseTag=function(e,t,n){"use strict";var r="",o=0,a=!1,c=!1,l=0,u=e.length,d="",h="";for(l=0;l<u;l++){var f=e.charAt(l);if(!1===a){if("<"===f){a=l;continue}}else if(!1===c){if("<"===f){r+=n(e.slice(o,l)),a=l,o=l;continue}if(">"===f){r+=n(e.slice(o,a)),d=i(h=e.slice(a,l+1)),r+=t(a,r.length,d,h,s(h)),o=l+1,a=!1;continue}if(('"'===f||"'"===f)&&"="===e.charAt(l-1)){c=f;continue}}else if(f===c){c=!1;continue}}return o<e.length&&(r+=n(e.substr(o))),r},n.parseAttr=function(e,t){"use strict";var n=0,i=[],s=!1,u=e.length;function d(e,n){if(!((e=(e=r.trim(e)).replace(o,"").toLowerCase()).length<1)){var s=t(e,n||"");s&&i.push(s)}}for(var h=0;h<u;h++){var f,p=e.charAt(h);if(!1!==s||"="!==p)if(!1===s||h!==n||'"'!==p&&"'"!==p||"="!==e.charAt(h-1))if(/\s|\n|\t/.test(p)){if(e=e.replace(/\s|\n|\t/g," "),!1===s){if(-1===(f=a(e,h))){d(r.trim(e.slice(n,h))),s=!1,n=h+1;continue}h=f-1;continue}if(-1===(f=c(e,h-1))){d(s,l(r.trim(e.slice(n,h)))),s=!1,n=h+1;continue}}else;else{if(-1===(f=e.indexOf(p,h+1)))break;d(s,r.trim(e.slice(n+1,f))),s=!1,n=(h=f)+1}else s=e.slice(n,h),n=h+1}return n<e.length&&(!1===s?d(e.slice(n)):d(s,l(r.trim(e.slice(n))))),r.trim(i.join(" "))}},{"./util":4}],4:[function(e,t,n){t.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t,n){var r,i;if(Array.prototype.forEach)return e.forEach(t,n);for(r=0,i=e.length;r<i;r++)t.call(n,e[r],r,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},spaceIndex:function(e){var t=/\s|\n|\t/.exec(e);return t?t.index:-1}}},{}],5:[function(e,t,n){var r=e("cssfilter").FilterCSS,i=e("./default"),s=e("./parser"),o=s.parseTag,a=s.parseAttr,c=e("./util");function l(e){return null==e}function u(e){(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=i.onIgnoreTagStripAll),e.whiteList=e.whiteList||i.whiteList,e.onTag=e.onTag||i.onTag,e.onTagAttr=e.onTagAttr||i.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||i.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||i.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||i.safeAttrValue,e.escapeHtml=e.escapeHtml||i.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new r(e.css))}u.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,n=t.whiteList,r=t.onTag,s=t.onIgnoreTag,u=t.onTagAttr,d=t.onIgnoreTagAttr,h=t.safeAttrValue,f=t.escapeHtml,p=this.cssFilter;t.stripBlankChar&&(e=i.stripBlankChar(e)),t.allowCommentTag||(e=i.stripCommentTag(e));var g=!1;if(t.stripIgnoreTagBody){g=i.StripTagBody(t.stripIgnoreTagBody,s);s=g.onIgnoreTag}var m=o(e,(function(e,t,i,o,g){var m,v={sourcePosition:e,position:t,isClosing:g,isWhite:n.hasOwnProperty(i)};if(!l(m=r(i,o,v)))return m;if(v.isWhite){if(v.isClosing)return"</"+i+">";var _=function(e){var t=c.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var n="/"===(e=c.trim(e.slice(t+1,-1)))[e.length-1];return n&&(e=c.trim(e.slice(0,-1))),{html:e,closing:n}}(o),b=n[i],y=a(_.html,(function(e,t){var n,r=-1!==c.indexOf(b,e);return l(n=u(i,e,t,r))?r?(t=h(i,e,t,p))?e+'="'+t+'"':e:l(n=d(i,e,t,r))?void 0:n:n}));o="<"+i;return y&&(o+=" "+y),_.closing&&(o+=" /"),o+=">"}return l(m=s(i,o,v))?f(o):m}),f);return g&&(m=g.remove(m)),m},t.exports=u},{"./default":1,"./parser":3,"./util":4,cssfilter:8}],6:[function(e,t,n){var r=e("./default"),i=e("./parser");e("./util");function s(e){return null==e}function o(e){(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e||{})).whiteList=e.whiteList||r.whiteList,e.onAttr=e.onAttr||r.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||r.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||r.safeAttrValue,this.options=e}o.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,n=t.whiteList,r=t.onAttr,o=t.onIgnoreAttr,a=t.safeAttrValue;return i(e,(function(e,t,i,c,l){var u=n[i],d=!1;if(!0===u?d=u:"function"==typeof u?d=u(c):u instanceof RegExp&&(d=u.test(c)),!0!==d&&(d=!1),c=a(i,c)){var h,f={position:t,sourcePosition:e,source:l,isWhite:d};return d?s(h=r(i,c,f))?i+":"+c:h:s(h=o(i,c,f))?void 0:h}}))},t.exports=o},{"./default":7,"./parser":9,"./util":10}],7:[function(e,t,n){function r(){var e={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return e}var i=/javascript\s*\:/gim;n.whiteList=r(),n.getDefaultWhiteList=r,n.onAttr=function(e,t,n){},n.onIgnoreAttr=function(e,t,n){},n.safeAttrValue=function(e,t){return i.test(t)?"":t}},{}],8:[function(e,t,n){var r=e("./default"),i=e("./css");for(var s in(n=t.exports=function(e,t){return new i(t).process(e)}).FilterCSS=i,r)n[s]=r[s];"undefined"!=typeof window&&(window.filterCSS=t.exports)},{"./css":6,"./default":7}],9:[function(e,t,n){var r=e("./util");t.exports=function(e,t){";"!==(e=r.trimRight(e))[e.length-1]&&(e+=";");var n=e.length,i=!1,s=0,o=0,a="";function c(){if(!i){var n=r.trim(e.slice(s,o)),c=n.indexOf(":");if(-1!==c){var l=r.trim(n.slice(0,c)),u=r.trim(n.slice(c+1));if(l){var d=t(s,a.length,l,u,n);d&&(a+=d+"; ")}}}s=o+1}for(;o<n;o++){var l=e[o];if("/"===l&&"*"===e[o+1]){var u=e.indexOf("*/",o+2);if(-1===u)break;s=(o=u+1)+1,i=!1}else"("===l?i=!0:")"===l?i=!1:";"===l?i||c():"\n"===l&&c()}return r.trim(a)}},{"./util":10}],10:[function(e,t,n){t.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t,n){var r,i;if(Array.prototype.forEach)return e.forEach(t,n);for(r=0,i=e.length;r<i;r++)t.call(n,e[r],r,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},trimRight:function(e){return String.prototype.trimRight?e.trimRight():e.replace(/(\s*$)/g,"")}}},{}]},{},[2]),t.filterXSS=filterXSS,t.filterCSS=filterCSS},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";(function(e){var r=n(5),i=n(120),s="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=s&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===s?r.a.Buffer:void 0,c=(a?a.isBuffer:void 0)||i.a;t.a=c}).call(this,n(55)(e))},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(e){n(410),n(119),n(412);var r=n(1);n.d(t,"b",(function(){return r.c})),n.d(t,"a",(function(){return r.b})),e.$build=r.d.$build,e.$iq=r.d.$iq,e.$msg=r.d.$msg,e.$pres=r.d.$pres,e.Strophe=r.d.Strophe}).call(this,n(11))},function(e,t,n){var r=n(39),i=n(293),s=n(294),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):s(e)}},function(e,t,n){var r=n(311),i=n(314);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){(function(t){e.exports=function e(t,n,r){function i(o,a){if(!n[o]){if(!t[o]){if(s)return s(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};t[o][0].call(l.exports,(function(e){var n=t[o][1][e];return i(n||e)}),l,l.exports,e,t,n,r)}return n[o].exports}for(var s=!1,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,n,r){(function(e){"use strict";var t,r,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var s=0,o=new i(u),a=e.document.createTextNode("");o.observe(a,{characterData:!0}),t=function(){a.data=s=++s%2}}else if(e.setImmediate||void 0===e.MessageChannel)t="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var c=new e.MessageChannel;c.port1.onmessage=u,t=function(){c.port2.postMessage(0)}}var l=[];function u(){var e,t;r=!0;for(var n=l.length;n;){for(t=l,l=[],e=-1;++e<n;)t[e]();n=l.length}r=!1}n.exports=function(e){1!==l.push(e)||r||t()}}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,n){"use strict";var r=e(1);function i(){}var s={},o=["REJECTED"],a=["FULFILLED"],c=["PENDING"];function l(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,e!==i&&f(this,e)}function u(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function d(e,t,n){r((function(){var r;try{r=t(n)}catch(t){return s.reject(e,t)}r===e?s.reject(e,new TypeError("Cannot resolve promise with itself")):s.resolve(e,r)}))}function h(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function f(e,t){var n=!1;function r(t){n||(n=!0,s.reject(e,t))}function i(t){n||(n=!0,s.resolve(e,t))}var o=p((function(){t(i,r)}));"error"===o.status&&r(o.value)}function p(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}t.exports=l,l.prototype.catch=function(e){return this.then(null,e)},l.prototype.then=function(e,t){if("function"!=typeof e&&this.state===a||"function"!=typeof t&&this.state===o)return this;var n=new this.constructor(i);return this.state!==c?d(n,this.state===a?e:t,this.outcome):this.queue.push(new u(n,e,t)),n},u.prototype.callFulfilled=function(e){s.resolve(this.promise,e)},u.prototype.otherCallFulfilled=function(e){d(this.promise,this.onFulfilled,e)},u.prototype.callRejected=function(e){s.reject(this.promise,e)},u.prototype.otherCallRejected=function(e){d(this.promise,this.onRejected,e)},s.resolve=function(e,t){var n=p(h,t);if("error"===n.status)return s.reject(e,n.value);var r=n.value;if(r)f(e,r);else{e.state=a,e.outcome=t;for(var i=-1,o=e.queue.length;++i<o;)e.queue[i].callFulfilled(t)}return e},s.reject=function(e,t){e.state=o,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},l.resolve=function(e){return e instanceof this?e:s.resolve(new this(i),e)},l.reject=function(e){var t=new this(i);return s.reject(t,e)},l.all=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var o=new Array(n),a=0,c=-1,l=new this(i);++c<n;)u(e[c],c);return l;function u(e,i){t.resolve(e).then((function(e){o[i]=e,++a!==n||r||(r=!0,s.resolve(l,o))}),(function(e){r||(r=!0,s.reject(l,e))}))}},l.race=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var o,a=-1,c=new this(i);++a<n;)o=e[a],t.resolve(o).then((function(e){r||(r=!0,s.resolve(c,e))}),(function(e){r||(r=!0,s.reject(c,e))}));return c}},{1:1}],3:[function(e,n,r){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(2))}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(e){return}}();function s(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(i){if("TypeError"!==i.name)throw i;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}}"undefined"==typeof Promise&&e(3);var o=Promise;function a(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))}function c(e,t,n){"function"==typeof t&&e.then(t),"function"==typeof n&&e.catch(n)}function l(e){return"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e)),e}function u(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var d=void 0,h={},f=Object.prototype.toString;function p(e){return"boolean"==typeof d?o.resolve(d):function(e){return new o((function(t){var n=e.transaction("local-forage-detect-blob-support","readwrite"),r=s([""]);n.objectStore("local-forage-detect-blob-support").put(r,"key"),n.onabort=function(e){e.preventDefault(),e.stopPropagation(),t(!1)},n.oncomplete=function(){var e=navigator.userAgent.match(/Chrome\/(\d+)/),n=navigator.userAgent.match(/Edge\//);t(n||!e||parseInt(e[1],10)>=43)}})).catch((function(){return!1}))}(e).then((function(e){return d=e}))}function g(e){var t=h[e.name],n={};n.promise=new o((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function m(e){var t=h[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function v(e,t){var n=h[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function _(e,t){return new o((function(n,r){if(h[e.name]=h[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return n(e.db);g(e),e.db.close()}var s=[e.name];t&&s.push(e.version);var o=i.open.apply(i,s);t&&(o.onupgradeneeded=function(t){var n=o.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore("local-forage-detect-blob-support")}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),o.onerror=function(e){e.preventDefault(),r(o.error)},o.onsuccess=function(){n(o.result),m(e)}}))}function b(e){return _(e,!1)}function y(e){return _(e,!0)}function w(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.version<e.db.version,i=e.version>e.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),i||n){if(n){var s=e.db.version+1;s>e.version&&(e.version=s)}return!0}return!1}function S(e){return s([function(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n),i=0;i<t;i++)r[i]=e.charCodeAt(i);return n}(atob(e.data))],{type:e.type})}function x(e){return e&&e.__local_forage_encoded_blob}function E(e){var t=this,n=t._initReady().then((function(){var e=h[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return c(n,e,e),n}function A(e,t,n,r){void 0===r&&(r=1);try{var i=e.db.transaction(e.storeName,t);n(null,i)}catch(i){if(r>0&&(!e.db||"InvalidStateError"===i.name||"NotFoundError"===i.name))return o.resolve().then((function(){if(!e.db||"NotFoundError"===i.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),y(e)})).then((function(){return function(e){g(e);for(var t=h[e.name],n=t.forages,r=0;r<n.length;r++){var i=n[r];i._dbInfo.db&&(i._dbInfo.db.close(),i._dbInfo.db=null)}return e.db=null,b(e).then((function(t){return e.db=t,w(e)?y(e):t})).then((function(r){e.db=t.db=r;for(var i=0;i<n.length;i++)n[i]._dbInfo.db=r})).catch((function(t){throw v(e,t),t}))}(e).then((function(){A(e,t,n,r-1)}))})).catch(n);n(i)}}var C={_driver:"asyncStorage",_initStorage:function(e){var t=this,n={db:null};if(e)for(var r in e)n[r]=e[r];var i=h[n.name];i||(i={forages:[],db:null,dbReady:null,deferredOperations:[]},h[n.name]=i),i.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=E);var s=[];function a(){return o.resolve()}for(var c=0;c<i.forages.length;c++){var l=i.forages[c];l!==t&&s.push(l._initReady().catch(a))}var u=i.forages.slice(0);return o.all(s).then((function(){return n.db=i.db,b(n)})).then((function(e){return n.db=e,w(n,t._defaultConfig.version)?y(n):e})).then((function(e){n.db=i.db=e,t._dbInfo=n;for(var r=0;r<u.length;r++){var s=u[r];s!==t&&(s._dbInfo.db=n.db,s._dbInfo.version=n.version)}}))},_support:function(){try{if(!i||!i.open)return!1;var e="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),t="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!e||t)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}}(),iterate:function(e,t){var n=this,r=new o((function(t,r){n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,s){if(i)return r(i);try{var o=s.objectStore(n._dbInfo.storeName).openCursor(),a=1;o.onsuccess=function(){var n=o.result;if(n){var r=n.value;x(r)&&(r=S(r));var i=e(r,n.key,a++);void 0!==i?t(i):n.continue()}else t()},o.onerror=function(){r(o.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=new o((function(t,r){n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,s){if(i)return r(i);try{var o=s.objectStore(n._dbInfo.storeName).get(e);o.onsuccess=function(){var e=o.result;void 0===e&&(e=null),x(e)&&(e=S(e)),t(e)},o.onerror=function(){r(o.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},setItem:function(e,t,n){var r=this;e=l(e);var i=new o((function(n,i){var s;r.ready().then((function(){return s=r._dbInfo,"[object Blob]"===f.call(t)?p(s.db).then((function(e){return e?t:(n=t,new o((function(e,t){var r=new FileReader;r.onerror=t,r.onloadend=function(t){var r=btoa(t.target.result||"");e({__local_forage_encoded_blob:!0,data:r,type:n.type})},r.readAsBinaryString(n)})));var n})):t})).then((function(t){A(r._dbInfo,"readwrite",(function(s,o){if(s)return i(s);try{var a=o.objectStore(r._dbInfo.storeName);null===t&&(t=void 0);var c=a.put(t,e);o.oncomplete=function(){void 0===t&&(t=null),n(t)},o.onabort=o.onerror=function(){var e=c.error?c.error:c.transaction.error;i(e)}}catch(e){i(e)}}))})).catch(i)}));return a(i,n),i},removeItem:function(e,t){var n=this;e=l(e);var r=new o((function(t,r){n.ready().then((function(){A(n._dbInfo,"readwrite",(function(i,s){if(i)return r(i);try{var o=s.objectStore(n._dbInfo.storeName).delete(e);s.oncomplete=function(){t()},s.onerror=function(){r(o.error)},s.onabort=function(){var e=o.error?o.error:o.transaction.error;r(e)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},clear:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){A(t._dbInfo,"readwrite",(function(r,i){if(r)return n(r);try{var s=i.objectStore(t._dbInfo.storeName).clear();i.oncomplete=function(){e()},i.onabort=i.onerror=function(){var e=s.error?s.error:s.transaction.error;n(e)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},length:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){A(t._dbInfo,"readonly",(function(r,i){if(r)return n(r);try{var s=i.objectStore(t._dbInfo.storeName).count();s.onsuccess=function(){e(s.result)},s.onerror=function(){n(s.error)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},key:function(e,t){var n=this,r=new o((function(t,r){e<0?t(null):n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,s){if(i)return r(i);try{var o=s.objectStore(n._dbInfo.storeName),a=!1,c=o.openKeyCursor();c.onsuccess=function(){var n=c.result;n?0===e||a?t(n.key):(a=!0,n.advance(e)):t(null)},c.onerror=function(){r(c.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},keys:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){A(t._dbInfo,"readonly",(function(r,i){if(r)return n(r);try{var s=i.objectStore(t._dbInfo.storeName).openKeyCursor(),o=[];s.onsuccess=function(){var t=s.result;t?(o.push(t.key),t.continue()):e(o)},s.onerror=function(){n(s.error)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},dropInstance:function(e,t){t=u.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,s=this;if(e.name){var c=e.name===n.name&&s._dbInfo.db,l=c?o.resolve(s._dbInfo.db):b(e).then((function(t){var n=h[e.name],r=n.forages;n.db=t;for(var i=0;i<r.length;i++)r[i]._dbInfo.db=t;return t}));r=e.storeName?l.then((function(t){if(t.objectStoreNames.contains(e.storeName)){var n=t.version+1;g(e);var r=h[e.name],s=r.forages;t.close();for(var a=0;a<s.length;a++){var c=s[a];c._dbInfo.db=null,c._dbInfo.version=n}return new o((function(t,r){var s=i.open(e.name,n);s.onerror=function(e){s.result.close(),r(e)},s.onupgradeneeded=function(){s.result.deleteObjectStore(e.storeName)},s.onsuccess=function(){var e=s.result;e.close(),t(e)}})).then((function(e){r.db=e;for(var t=0;t<s.length;t++){var n=s[t];n._dbInfo.db=e,m(n._dbInfo)}})).catch((function(t){throw(v(e,t)||o.resolve()).catch((function(){})),t}))}})):l.then((function(t){g(e);var n=h[e.name],r=n.forages;t.close();for(var s=0;s<r.length;s++)r[s]._dbInfo.db=null;return new o((function(t,n){var r=i.deleteDatabase(e.name);r.onerror=r.onblocked=function(e){var t=r.result;t&&t.close(),n(e)},r.onsuccess=function(){var e=r.result;e&&e.close(),t(e)}})).then((function(e){n.db=e;for(var t=0;t<r.length;t++)m(r[t]._dbInfo)})).catch((function(t){throw(v(e,t)||o.resolve()).catch((function(){})),t}))}))}else r=o.reject("Invalid arguments");return a(r,t),r}},j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",T=/^~~local_forage_type~([^~]+)~/,O="__lfsc__:".length,k=O+"arbf".length,N=Object.prototype.toString;function I(e){var t,n,r,i,s,o=.75*e.length,a=e.length,c=0;"="===e[e.length-1]&&(o--,"="===e[e.length-2]&&o--);var l=new ArrayBuffer(o),u=new Uint8Array(l);for(t=0;t<a;t+=4)n=j.indexOf(e[t]),r=j.indexOf(e[t+1]),i=j.indexOf(e[t+2]),s=j.indexOf(e[t+3]),u[c++]=n<<2|r>>4,u[c++]=(15&r)<<4|i>>2,u[c++]=(3&i)<<6|63&s;return l}function M(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=j[n[t]>>2],r+=j[(3&n[t])<<4|n[t+1]>>4],r+=j[(15&n[t+1])<<2|n[t+2]>>6],r+=j[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}var R={serialize:function(e,t){var n="";if(e&&(n=N.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===N.call(e.buffer))){var r,i="__lfsc__:";e instanceof ArrayBuffer?(r=e,i+="arbf"):(r=e.buffer,"[object Int8Array]"===n?i+="si08":"[object Uint8Array]"===n?i+="ui08":"[object Uint8ClampedArray]"===n?i+="uic8":"[object Int16Array]"===n?i+="si16":"[object Uint16Array]"===n?i+="ur16":"[object Int32Array]"===n?i+="si32":"[object Uint32Array]"===n?i+="ui32":"[object Float32Array]"===n?i+="fl32":"[object Float64Array]"===n?i+="fl64":t(new Error("Failed to get type for BinaryArray"))),t(i+M(r))}else if("[object Blob]"===n){var s=new FileReader;s.onload=function(){var n="~~local_forage_type~"+e.type+"~"+M(this.result);t("__lfsc__:blob"+n)},s.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}},deserialize:function(e){if("__lfsc__:"!==e.substring(0,O))return JSON.parse(e);var t,n=e.substring(k),r=e.substring(O,k);if("blob"===r&&T.test(n)){var i=n.match(T);t=i[1],n=n.substring(i[0].length)}var o=I(n);switch(r){case"arbf":return o;case"blob":return s([o],{type:t});case"si08":return new Int8Array(o);case"ui08":return new Uint8Array(o);case"uic8":return new Uint8ClampedArray(o);case"si16":return new Int16Array(o);case"ur16":return new Uint16Array(o);case"si32":return new Int32Array(o);case"ui32":return new Uint32Array(o);case"fl32":return new Float32Array(o);case"fl64":return new Float64Array(o);default:throw new Error("Unkown type: "+r)}},stringToBuffer:I,bufferToString:M};function D(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function P(e,t,n,r,i,s){e.executeSql(n,r,i,(function(e,o){o.code===o.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,a){a.rows.length?s(e,o):D(e,t,(function(){e.executeSql(n,r,i,s)}),s)}),s):s(e,o)}),s)}function L(e,t,n,r){var i=this;e=l(e);var s=new o((function(s,o){i.ready().then((function(){void 0===t&&(t=null);var a=t,c=i._dbInfo;c.serializer.serialize(t,(function(t,l){l?o(l):c.db.transaction((function(n){P(n,c,"INSERT OR REPLACE INTO "+c.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){s(a)}),(function(e,t){o(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(r>0)return void s(L.apply(i,[e,a,n,r-1]));o(t)}}))}))})).catch(o)}));return a(s,n),s}function z(e){return new o((function(t,n){e.transaction((function(r){r.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var i=[],s=0;s<r.rows.length;s++)i.push(r.rows.item(s).name);t({db:e,storeNames:i})}),(function(e,t){n(t)}))}),(function(e){n(e)}))}))}var F={_driver:"webSQLStorage",_initStorage:function(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var i=new o((function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction((function(i){D(i,n,(function(){t._dbInfo=n,e()}),(function(e,t){r(t)}))}),r)}));return n.serializer=R,i},_support:"function"==typeof openDatabase,iterate:function(e,t){var n=this,r=new o((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT * FROM "+i.storeName,[],(function(n,r){for(var s=r.rows,o=s.length,a=0;a<o;a++){var c=s.item(a),l=c.value;if(l&&(l=i.serializer.deserialize(l)),void 0!==(l=e(l,c.key,a+1)))return void t(l)}t()}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=new o((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT * FROM "+i.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=i.serializer.deserialize(r)),t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},setItem:function(e,t,n){return L.apply(this,[e,t,n,1])},removeItem:function(e,t){var n=this;e=l(e);var r=new o((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"DELETE FROM "+i.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},clear:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"DELETE FROM "+r.storeName,[],(function(){e()}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},length:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"SELECT COUNT(key) as c FROM "+r.storeName,[],(function(t,n){var r=n.rows.item(0).c;e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},key:function(e,t){var n=this,r=new o((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT key FROM "+i.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},keys:function(e){var t=this,n=new o((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"SELECT key FROM "+r.storeName,[],(function(t,n){for(var r=[],i=0;i<n.rows.length;i++)r.push(n.rows.item(i).key);e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},dropInstance:function(e,t){t=u.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,i=this;return a(r=e.name?new o((function(t){var r;r=e.name===n.name?i._dbInfo.db:openDatabase(e.name,"","",0),e.storeName?t({db:r,storeNames:[e.storeName]}):t(z(r))})).then((function(e){return new o((function(t,n){e.db.transaction((function(r){function i(e){return new o((function(t,n){r.executeSql("DROP TABLE IF EXISTS "+e,[],(function(){t()}),(function(e,t){n(t)}))}))}for(var s=[],a=0,c=e.storeNames.length;a<c;a++)s.push(i(e.storeNames[a]));o.all(s).then((function(){t()})).catch((function(e){n(e)}))}),(function(e){n(e)}))}))})):o.reject("Invalid arguments"),t),r}};function B(e,t){var n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}function q(){return!function(){try{return localStorage.setItem("_localforage_support_test",!0),localStorage.removeItem("_localforage_support_test"),!1}catch(e){return!0}}()||localStorage.length>0}var H={_driver:"localStorageWrapper",_initStorage:function(e){var t={};if(e)for(var n in e)t[n]=e[n];return t.keyPrefix=B(e,this._defaultConfig),q()?(this._dbInfo=t,t.serializer=R,o.resolve()):o.reject()},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,i=r.length,s=localStorage.length,o=1,a=0;a<s;a++){var c=localStorage.key(a);if(0===c.indexOf(r)){var l=localStorage.getItem(c);if(l&&(l=t.serializer.deserialize(l)),void 0!==(l=e(l,c.substring(i),o++)))return l}}}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=n.ready().then((function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r}));return a(r,t),r},setItem:function(e,t,n){var r=this;e=l(e);var i=r.ready().then((function(){void 0===t&&(t=null);var n=t;return new o((function(i,s){var o=r._dbInfo;o.serializer.serialize(t,(function(t,r){if(r)s(r);else try{localStorage.setItem(o.keyPrefix+e,t),i(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||s(e),s(e)}}))}))}));return a(i,n),i},removeItem:function(e,t){var n=this;e=l(e);var r=n.ready().then((function(){var t=n._dbInfo;localStorage.removeItem(t.keyPrefix+e)}));return a(r,t),r},clear:function(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,n=localStorage.length-1;n>=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return a(n,e),n},length:function(e){var t=this.keys().then((function(e){return e.length}));return a(t,e),t},key:function(e,t){var n=this,r=n.ready().then((function(){var t,r=n._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(r.keyPrefix.length)),t}));return a(r,t),r},keys:function(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo,n=localStorage.length,r=[],i=0;i<n;i++){var s=localStorage.key(i);0===s.indexOf(e.keyPrefix)&&r.push(s.substring(e.keyPrefix.length))}return r}));return a(n,e),n},dropInstance:function(e,t){if(t=u.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){var n=this.config();e.name=e.name||n.name,e.storeName=e.storeName||n.storeName}var r,i=this;return a(r=e.name?new o((function(t){e.storeName?t(B(e,i._defaultConfig)):t(e.name+"/")})).then((function(e){for(var t=localStorage.length-1;t>=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):o.reject("Invalid arguments"),t),r}},U=function(e,t){for(var n,r,i=e.length,s=0;s<i;){if((n=e[s])===(r=t)||"number"==typeof n&&"number"==typeof r&&isNaN(n)&&isNaN(r))return!0;s++}return!1},$=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},W={},V={},G={INDEXEDDB:C,WEBSQL:F,LOCALSTORAGE:H},J=[G.INDEXEDDB._driver,G.WEBSQL._driver,G.LOCALSTORAGE._driver],X=["dropInstance"],Q=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(X),Y={description:"",driver:J.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function K(e,t){e[t]=function(){var n=arguments;return e.ready().then((function(){return e[t].apply(e,n)}))}}function Z(){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&($(t[n])?arguments[0][n]=t[n].slice():arguments[0][n]=t[n])}return arguments[0]}var ee=new(function(){function e(t){for(var n in function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),G)if(G.hasOwnProperty(n)){var r=G[n],i=r._driver;this[n]=i,W[i]||this.defineDriver(r)}this._defaultConfig=Z({},Y),this._config=Z({},this._defaultConfig,t),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return e.prototype.config=function(e){if("object"===(void 0===e?"undefined":r(e))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var t in e){if("storeName"===t&&(e[t]=e[t].replace(/\W/g,"_")),"version"===t&&"number"!=typeof e[t])return new Error("Database version must be a number.");this._config[t]=e[t]}return!("driver"in e)||!e.driver||this.setDriver(this._config.driver)}return"string"==typeof e?this._config[e]:this._config},e.prototype.defineDriver=function(e,t,n){var r=new o((function(t,n){try{var r=e._driver,i=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!e._driver)return void n(i);for(var s=Q.concat("_initStorage"),c=0,l=s.length;c<l;c++){var u=s[c];if((!U(X,u)||e[u])&&"function"!=typeof e[u])return void n(i)}!function(){for(var t=function(e){return function(){var t=new Error("Method "+e+" is not implemented by the current driver"),n=o.reject(t);return a(n,arguments[arguments.length-1]),n}},n=0,r=X.length;n<r;n++){var i=X[n];e[i]||(e[i]=t(i))}}();var d=function(n){W[r]&&console.info("Redefining LocalForage driver: "+r),W[r]=e,V[r]=n,t()};"_support"in e?e._support&&"function"==typeof e._support?e._support().then(d,n):d(!!e._support):d(!0)}catch(e){n(e)}}));return c(r,t,n),r},e.prototype.driver=function(){return this._driver||null},e.prototype.getDriver=function(e,t,n){var r=W[e]?o.resolve(W[e]):o.reject(new Error("Driver not found."));return c(r,t,n),r},e.prototype.getSerializer=function(e){var t=o.resolve(R);return c(t,e),t},e.prototype.ready=function(e){var t=this,n=t._driverSet.then((function(){return null===t._ready&&(t._ready=t._initDriver()),t._ready}));return c(n,e,e),n},e.prototype.setDriver=function(e,t,n){var r=this;$(e)||(e=[e]);var i=this._getSupportedDrivers(e);function s(){r._config.driver=r.driver()}function a(e){return r._extend(e),s(),r._ready=r._initStorage(r._config),r._ready}var l=null!==this._driverSet?this._driverSet.catch((function(){return o.resolve()})):o.resolve();return this._driverSet=l.then((function(){var e=i[0];return r._dbInfo=null,r._ready=null,r.getDriver(e).then((function(e){r._driver=e._driver,s(),r._wrapLibraryMethodsWithReady(),r._initDriver=function(e){return function(){var t=0;return function n(){for(;t<e.length;){var i=e[t];return t++,r._dbInfo=null,r._ready=null,r.getDriver(i).then(a).catch(n)}s();var c=new Error("No available storage method found.");return r._driverSet=o.reject(c),r._driverSet}()}}(i)}))})).catch((function(){s();var e=new Error("No available storage method found.");return r._driverSet=o.reject(e),r._driverSet})),c(this._driverSet,t,n),this._driverSet},e.prototype.supports=function(e){return!!V[e]},e.prototype._extend=function(e){Z(this,e)},e.prototype._getSupportedDrivers=function(e){for(var t=[],n=0,r=e.length;n<r;n++){var i=e[n];this.supports(i)&&t.push(i)}return t},e.prototype._wrapLibraryMethodsWithReady=function(){for(var e=0,t=Q.length;e<t;e++)K(this,Q[e])},e.prototype.createInstance=function(t){return new e(t)},e}());t.exports=ee},{3:3}]},{},[4])(4)}).call(this,n(11))},,function(e,t,n){var r=n(48),i=n(57);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},function(e,t,n){var r=n(74),i=n(78),s=n(25);e.exports=function(e){return s(e)?r(e):i(e)}},function(e,t,n){(function(n){var r,i,s;i=[],void 0===(s="function"==typeof(r=function(){"use strict";var e=void 0!==n?n:this||window,t=document,r=t.documentElement,i="body",s=e.BSN={},o=s.supports=[],a="data-toggle",c="delay",l="target",u="animation",d="onmouseleave"in t?["mouseenter","mouseleave"]:["mouseover","mouseout"],h="getAttribute",f="setAttribute",p="parentNode",g="length",m="style",v="push",_="active",b="left",y="top",w=/\b(top|bottom|left|right)+/,S=0,x="WebkitTransition"in r[m]||"Transition".toLowerCase()in r[m],E="WebkitTransition"in r[m]?"Webkit".toLowerCase()+"TransitionEnd":"Transition".toLowerCase()+"end",A="WebkitDuration"in r[m]?"Webkit".toLowerCase()+"TransitionDuration":"Transition".toLowerCase()+"Duration",C=function(e){e.focus?e.focus():e.setActive()},j=function(e,t){e.classList.add(t)},T=function(e,t){e.classList.remove(t)},O=function(e,t){return e.classList.contains(t)},k=function(e,t){return[].slice.call(e.getElementsByClassName(t))},N=function(e,n){return"object"==typeof e?e:(n||t).querySelector(e)},I=function(e,n){var r=n.charAt(0),i=n.substr(1);if("."===r){for(;e&&e!==t;e=e[p])if(null!==N(n,e[p])&&O(e,i))return e}else if("#"===r)for(;e&&e!==t;e=e[p])if(e.id===i)return e;return!1},M=function(e,t,n,r){r=r||!1,e.addEventListener(t,n,r)},R=function(e,t,n,r){r=r||!1,e.removeEventListener(t,n,r)},D=function(e,t,n,r){M(e,t,(function i(s){n(s),R(e,t,i,r)}),r)},P=!!function(){var t=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t=!0}});D(e,"testPassive",null,n)}catch(e){}return t}()&&{passive:!0},L=function(t){var n=x?e.getComputedStyle(t)[A]:0;return n="number"!=typeof(n=parseFloat(n))||isNaN(n)?0:1e3*n},z=function(e,t){var n=0;L(e)?D(e,E,(function(e){!n&&t(e),n=1})):setTimeout((function(){!n&&t(),n=1}),17)},F=function(e,t,n){var r=new CustomEvent(e+".bs."+t);r.relatedTarget=n,this.dispatchEvent(r)},B=function(n,s,o,a){var c,l,u,d,h,f,p=s.offsetWidth,g=s.offsetHeight,v=r.clientWidth||t[i].clientWidth,_=r.clientHeight||t[i].clientHeight,S=n.getBoundingClientRect(),x=a===t[i]?{y:e.pageYOffset||r.scrollTop,x:e.pageXOffset||r.scrollLeft}:{x:a.offsetLeft+a.scrollLeft,y:a.offsetTop+a.scrollTop},E=S.right-S[b],A=S.bottom-S.top,C=O(s,"popover"),j=N(".arrow",s),T=S.top+A/2-g/2<0,k=S[b]+E/2-p/2<0,I=S[b]+p/2+E/2>=v,M=S.top+g/2+A/2>=_,R=S.top-g<0,D=S[b]-p<0,P=S.top+g+A>=_,L=S[b]+p+E>=v;o="right"===(o=(o="bottom"===(o=(o=(o===b||"right"===o)&&D&&L?y:o)===y&&R?"bottom":o)&&P?y:o)===b&&D?"right":o)&&L?b:o,-1===s.className.indexOf(o)&&(s.className=s.className.replace(w,o)),h=j.offsetWidth,f=j.offsetHeight,o===b||"right"===o?(l=o===b?S[b]+x.x-p-(C?h:0):S[b]+x.x+E,T?(c=S.top+x.y,u=A/2-h):M?(c=S.top+x.y-g+A,u=g-A/2-h):(c=S.top+x.y-g/2+A/2,u=g/2-(C?.9*f:f/2))):o!==y&&"bottom"!==o||(c=o===y?S.top+x.y-g-(C?f:0):S.top+x.y+A,k?(l=0,d=S[b]+E/2-h):I?(l=v-1.01*p,d=p-(v-S[b])+E/2-h/2):(l=S[b]+x.x-p/2+E/2,d=p/2-(C?h:h/2))),s[m].top=c+"px",s[m][b]=l+"px",u&&(j[m].top=u+"px"),d&&(j[m][b]=d+"px")};s.version="2.0.27";var q=function(e){e=N(e);var t=this,n=I(e,".alert"),r=function(r){n=I(r[l],".alert"),(e=N('[data-dismiss="alert"]',n))&&n&&(e===r[l]||e.contains(r[l]))&&t.close()},i=function(){F.call(n,"closed","alert"),R(e,"click",r),n[p].removeChild(n)};this.close=function(){n&&e&&O(n,"show")&&(F.call(n,"close","alert"),T(n,"show"),n&&(O(n,"fade")?z(n,i):i()))},"Alert"in e||M(e,"click",r),e.Alert=t};o[v](["Alert",q,'[data-dismiss="alert"]']);var H=function(e){e=N(e);var n=!1,r="checked",i=function(t){var i="LABEL"===t[l].tagName?t[l]:"LABEL"===t[l][p].tagName?t[l][p]:null;if(i){var s=k(i[p],"btn"),o=i.getElementsByTagName("INPUT")[0];if(o){if("checkbox"===o.type&&(o[r]?(T(i,_),o[h](r),o.removeAttribute(r),o[r]=!1):(j(i,_),o[h](r),o[f](r,r),o[r]=!0),n||(n=!0,F.call(o,"change","button"),F.call(e,"change","button"))),"radio"===o.type&&!n&&(!o[r]||0===t.screenX&&0==t.screenY)){j(i,_),j(i,"focus"),o[f](r,r),o[r]=!0,F.call(o,"change","button"),F.call(e,"change","button"),n=!0;for(var a=0,c=s[g];a<c;a++){var u=s[a],d=u.getElementsByTagName("INPUT")[0];u!==i&&O(u,_)&&(T(u,_),d.removeAttribute(r),d[r]=!1,F.call(d,"change","button"))}}setTimeout((function(){n=!1}),50)}}},s=function(e){j(e[l][p],"focus")},o=function(e){T(e[l][p],"focus")};if(!("Button"in e)){M(e,"click",i),M(e,"keyup",(function(e){32===(e.which||e.keyCode)&&e[l]===t.activeElement&&i(e)})),M(e,"keydown",(function(e){32===(e.which||e.keyCode)&&e.preventDefault()}));for(var a=k(e,"btn"),c=0;c<a.length;c++){var u=a[c].getElementsByTagName("INPUT")[0];M(u,"focus",s),M(u,"blur",o)}}var d=k(e,"btn"),m=d[g];for(c=0;c<m;c++)!O(d[c],_)&&N("input:checked",d[c])&&j(d[c],_);e.Button=this};o[v](["Button",H,"["+a+'="buttons"]']);var U=function(e,t){e=N(e),t=t||{};var n,r,i,s,o,a=null,c=null,l=this,u=e[h]("data-parent"),d=function(e,t){F.call(e,"hide","collapse"),e.isAnimating=!0,e[m].height=e.scrollHeight+"px",T(e,"collapse"),T(e,"show"),j(e,"collapsing"),e.offsetWidth,e[m].height="0px",z(e,(function(){e.isAnimating=!1,e[f]("aria-expanded","false"),t[f]("aria-expanded","false"),T(e,"collapsing"),j(e,"collapse"),e[m].height="",F.call(e,"hidden","collapse")}))};this.toggle=function(e){e.preventDefault(),O(c,"show")?l.hide():l.show()},this.hide=function(){c.isAnimating||(d(c,e),j(e,"collapsed"))},this.show=function(){var t,i;a&&(n=N(".collapse.show",a),r=n&&(N('[data-target="#'+n.id+'"]',a)||N('[href="#'+n.id+'"]',a))),(!c.isAnimating||n&&!n.isAnimating)&&(r&&n!==c&&(d(n,r),j(r,"collapsed")),i=e,F.call(t=c,"show","collapse"),t.isAnimating=!0,j(t,"collapsing"),T(t,"collapse"),t[m].height=t.scrollHeight+"px",z(t,(function(){t.isAnimating=!1,t[f]("aria-expanded","true"),i[f]("aria-expanded","true"),T(t,"collapsing"),j(t,"collapse"),j(t,"show"),t[m].height="",F.call(t,"shown","collapse")})),T(e,"collapsed"))},"Collapse"in e||M(e,"click",l.toggle),i=e.href&&e[h]("href"),s=e[h]("data-target"),o=i||s&&"#"===s.charAt(0)&&s,(c=o&&N(o)).isAnimating=!1,a=N(t.parent)||u&&I(e,u),e.Collapse=l};o[v](["Collapse",U,"["+a+'="collapse"]']);var $=function(e,n){e=N(e),this.persist=!0===n||"true"===e[h]("data-persist")||!1;var r=this,i=e[p],s=null,o=N(".dropdown-menu",i),c=function(){for(var e=o.children,t=[],n=0;n<e[g];n++)e[n].children[g]&&"A"===e[n].children[0].tagName&&t[v](e[n].children[0]),"A"===e[n].tagName&&t[v](e[n]);return t}(),u=function(e){(e.href&&"#"===e.href.slice(-1)||e[p]&&e[p].href&&"#"===e[p].href.slice(-1))&&this.preventDefault()},d=function(){var n=e.open?M:R;n(t,"click",m),n(t,"keydown",b),n(t,"keyup",y),n(t,"focus",m,!0)},m=function(t){var n=t[l],i=n&&(n[h](a)||n[p]&&h in n[p]&&n[p][h](a));("focus"!==t.type||n!==e&&n!==o&&!o.contains(n))&&(n!==o&&!o.contains(n)||!r.persist&&!i)&&(s=n===e||e.contains(n)?e:null,S(),u.call(t,n))},_=function(t){s=e,w(),u.call(t,t[l])},b=function(e){var t=e.which||e.keyCode;38!==t&&40!==t||e.preventDefault()},y=function(n){var i=n.which||n.keyCode,a=t.activeElement,l=c.indexOf(a),u=a===e,d=o.contains(a),h=a[p]===o||a[p][p]===o;h&&(l=u?0:38===i?l>1?l-1:0:40===i&&l<c[g]-1?l+1:l,c[l]&&C(c[l])),(c[g]&&h||!c[g]&&(d||u)||!d)&&e.open&&27===i&&(r.toggle(),s=null)},w=function(){F.call(i,"show","dropdown",s),j(o,"show"),j(i,"show"),e[f]("aria-expanded",!0),F.call(i,"shown","dropdown",s),e.open=!0,R(e,"click",_),setTimeout((function(){C(o.getElementsByTagName("INPUT")[0]||e),d()}),1)},S=function(){F.call(i,"hide","dropdown",s),T(o,"show"),T(i,"show"),e[f]("aria-expanded",!1),F.call(i,"hidden","dropdown",s),e.open=!1,d(),C(e),setTimeout((function(){M(e,"click",_)}),1)};e.open=!1,this.toggle=function(){O(i,"show")&&e.open?S():w()},"Dropdown"in e||(!1 in o&&o[f]("tabindex","0"),M(e,"click",_)),e.Dropdown=r};o[v](["Dropdown",$,"["+a+'="dropdown"]']);var W=function(n,s){var o=(n=N(n))[h]("data-target")||n[h]("href"),a=N(o),c=O(n,"modal")?n:a;if(O(n,"modal")&&(n=null),c){s=s||{},this.keyboard=!1!==s.keyboard&&"false"!==c[h]("data-keyboard"),this.backdrop="static"!==s.backdrop&&"static"!==c[h]("data-backdrop")||"static",this.backdrop=!1!==s.backdrop&&"false"!==c[h]("data-backdrop")&&this.backdrop,this[u]=!!O(c,"fade"),this.content=s.content,c.isAnimating=!1;var d,v,_,y,w,E=this,A=null,I=k(r,"fixed-top").concat(k(r,"fixed-bottom")),D=function(){var n,r=e.getComputedStyle(t[i]),s=parseInt(r.paddingRight,10);if(d&&(t[i][m].paddingRight=s+v+"px",c[m].paddingRight=v+"px",I[g]))for(var o=0;o<I[g];o++)n=e.getComputedStyle(I[o]).paddingRight,I[o][m].paddingRight=parseInt(n)+v+"px"},B=function(){var n,s,o;d=t[i].clientWidth<(n=r.getBoundingClientRect(),e.innerWidth||n.right-Math.abs(n[b])),(o=t.createElement("div")).className="modal-scrollbar-measure",t[i].appendChild(o),s=o.offsetWidth-o.clientWidth,t[i].removeChild(o),v=s},q=function(){(_=N(".modal-backdrop"))&&null!==_&&"object"==typeof _&&(S=0,t[i].removeChild(_),_=null)},H=function(){C(c),c.isAnimating=!1,F.call(c,"shown","modal",A),M(e,"resize",E.update,P),M(c,"click",W),M(t,"keydown",$)},U=function(){c[m].display="",n&&C(n),F.call(c,"hidden","modal"),k(t,"modal show")[0]||(function(){if(t[i][m].paddingRight="",c[m].paddingRight="",I[g])for(var e=0;e<I[g];e++)I[e][m].paddingRight=""}(),T(t[i],"modal-open"),_&&O(_,"fade")?(T(_,"show"),z(_,q)):q(),R(e,"resize",E.update,P),R(c,"click",W),R(t,"keydown",$)),c.isAnimating=!1},$=function(e){c.isAnimating||E.keyboard&&27==e.which&&O(c,"show")&&E.hide()},W=function(e){if(!c.isAnimating){var t=e[l];O(c,"show")&&("modal"===t[p][h]("data-dismiss")||"modal"===t[h]("data-dismiss")||t===c&&"static"!==E.backdrop)&&(E.hide(),A=null,e.preventDefault())}};this.toggle=function(){O(c,"show")?this.hide():this.show()},this.show=function(){O(c,"show")||c.isAnimating||(clearTimeout(w),w=setTimeout((function(){c.isAnimating=!0,F.call(c,"show","modal",A);var e,n=k(t,"modal show")[0];n&&n!==c&&("modalTrigger"in n&&n.modalTrigger.Modal.hide(),"Modal"in n&&n.Modal.hide()),E.backdrop&&!S&&!_&&(e=t.createElement("div"),null===(_=N(".modal-backdrop"))&&(e[f]("class","modal-backdrop"+(E[u]?" fade":"")),_=e,t[i].appendChild(_)),S=1),_&&!O(_,"show")&&(_.offsetWidth,y=L(_),j(_,"show")),setTimeout((function(){c[m].display="block",B(),D(),j(t[i],"modal-open"),j(c,"show"),c[f]("aria-hidden",!1),O(c,"fade")?z(c,H):H()}),x&&_&&y?y:1)}),1))},this.hide=function(){!c.isAnimating&&O(c,"show")&&(clearTimeout(w),w=setTimeout((function(){c.isAnimating=!0,F.call(c,"hide","modal"),_=N(".modal-backdrop"),y=_&&L(_),T(c,"show"),c[f]("aria-hidden",!0),setTimeout((function(){O(c,"fade")?z(c,U):U()}),x&&_&&y?y:2)}),2))},this.setContent=function(e){N(".modal-content",c).innerHTML=e},this.update=function(){O(c,"show")&&(B(),D())},n&&!("Modal"in n)&&M(n,"click",(function(e){if(!c.isAnimating){var t=e[l];(t=t.hasAttribute("data-target")||t.hasAttribute("href")?t:t[p])!==n||O(c,"show")||(c.modalTrigger=n,A=n,E.show(),e.preventDefault())}})),E.content&&E.setContent(E.content),n?(n.Modal=E,c.modalTrigger=n):c.Modal=E}};o[v](["Modal",W,"["+a+'="modal"]']);var V=function(n,r){n=N(n),r=r||{};var s=n[h]("data-trigger"),o=n[h]("data-animation"),a=n[h]("data-placement"),p=n[h]("data-dismissible"),g=n[h]("data-delay"),v=n[h]("data-container"),_='<button type="button" class="close">×</button>',b=N(r.container),w=N(v),S=I(n,".modal"),x=I(n,".fixed-top"),E=I(n,".fixed-bottom");this.template=r.template?r.template:null,this.trigger=r.trigger?r.trigger:s||"hover",this[u]=r[u]&&"fade"!==r[u]?r[u]:o||"fade",this.placement=r.placement?r.placement:a||y,this[c]=parseInt(r[c]||g)||200,this.dismissible=!(!r.dismissible&&"true"!==p),this.container=b||w||x||E||S||t[i];var A=this,C=r.title||n[h]("data-title")||null,k=r.content||n[h]("data-content")||null;if(k||this.template){var D=null,L=0,q=this.placement,H=function(e){null!==D&&e[l]===N(".close",D)&&A.hide()},U=function(r){"click"!=A.trigger&&"focus"!=A.trigger||!A.dismissible&&r(n,"blur",A.hide),A.dismissible&&r(t,"click",H),r(e,"resize",A.hide,P)},$=function(){U(M),F.call(n,"shown","popover")},W=function(){U(R),A.container.removeChild(D),L=null,D=null,F.call(n,"hidden","popover")};this.toggle=function(){null===D?A.show():A.hide()},this.show=function(){clearTimeout(L),L=setTimeout((function(){null===D&&(q=A.placement,function(){C=r.title||n[h]("data-title"),k=(k=r.content||n[h]("data-content"))?k.trim():null,D=t.createElement("div");var e=t.createElement("div");if(e[f]("class","arrow"),D.appendChild(e),null!==k&&null===A.template){if(D[f]("role","tooltip"),null!==C){var i=t.createElement("h3");i[f]("class","popover-header"),i.innerHTML=A.dismissible?C+_:C,D.appendChild(i)}var s=t.createElement("div");s[f]("class","popover-body"),s.innerHTML=A.dismissible&&null===C?k+_:k,D.appendChild(s)}else{var o=t.createElement("div");A.template=A.template.trim(),o.innerHTML=A.template,D.innerHTML=o.firstChild.innerHTML}A.container.appendChild(D),D[m].display="block",D[f]("class","popover bs-popover-"+q+" "+A[u])}(),B(n,D,q,A.container),!O(D,"show")&&j(D,"show"),F.call(n,"show","popover"),A[u]?z(D,$):$())}),20)},this.hide=function(){clearTimeout(L),L=setTimeout((function(){D&&null!==D&&O(D,"show")&&(F.call(n,"hide","popover"),T(D,"show"),A[u]?z(D,W):W())}),A[c])},"Popover"in n||("hover"===A.trigger?(M(n,d[0],A.show),A.dismissible||M(n,d[1],A.hide)):"click"!=A.trigger&&"focus"!=A.trigger||M(n,A.trigger,A.toggle)),n.Popover=A}};o[v](["Popover",V,"["+a+'="popover"]']);var G=function(e,t){var n=(e=N(e))[h]("data-height");t=t||{},this.height=!!x&&(t.height||"true"===n);var r,i,s,o,a,c,l,u=this,d=I(e,".nav"),v=!1,y=d&&N(".dropdown-toggle",d),w=function(){v[m].height="",T(v,"collapsing"),d.isAnimating=!1},S=function(){v?c?w():setTimeout((function(){v[m].height=l+"px",v.offsetWidth,z(v,w)}),50):d.isAnimating=!1,F.call(r,"shown","tab",i)},E=function(){v&&(s[m].float=b,o[m].float=b,a=s.scrollHeight),j(o,_),F.call(r,"show","tab",i),T(s,_),F.call(i,"hidden","tab",r),v&&(l=o.scrollHeight,c=l===a,j(v,"collapsing"),v[m].height=a+"px",v.offsetHeight,s[m].float="",o[m].float=""),O(o,"fade")?setTimeout((function(){j(o,"show"),z(o,S)}),20):S()};if(d){d.isAnimating=!1;var A=function(){var e,t=k(d,_);return 1!==t[g]||O(t[0][p],"dropdown")?t[g]>1&&(e=t[t[g]-1]):e=t[0],e},C=function(){return N(A()[h]("href"))};this.show=function(){o=N((r=r||e)[h]("href")),i=A(),s=C(),d.isAnimating=!0,T(i,_),i[f]("aria-selected","false"),j(r,_),r[f]("aria-selected","true"),y&&(O(e[p],"dropdown-menu")?O(y,_)||j(y,_):O(y,_)&&T(y,_)),F.call(i,"hide","tab",r),O(s,"fade")?(T(s,"show"),z(s,E)):E()},"Tab"in e||M(e,"click",(function(e){e.preventDefault(),r=e.currentTarget,!d.isAnimating&&!O(r,_)&&u.show()})),u.height&&(v=C()[p]),e.Tab=u}};o[v](["Tab",G,"["+a+'="tab"]']);var J=function(e,t){t=t||{};var n=(e=N(e))[h]("data-animation"),r=e[h]("data-autohide"),i=e[h]("data-delay");this.animation=!1===t.animation||"false"===n?0:1,this.autohide=!1===t.autohide||"false"===r?0:1,this[c]=parseInt(t[c]||i)||500;var s=this,o=0,a=I(e,".toast"),l=function(){T(a,"showing"),j(a,"show"),F.call(a,"shown","toast"),s.autohide&&s.hide()},u=function(){j(a,"hide"),F.call(a,"hidden","toast")},d=function(){T(a,"show"),s.animation?z(a,u):u()},f=function(){clearTimeout(o),o=null,j(a,"hide"),R(e,"click",s.hide),e.Toast=null,e=null,a=null};this.show=function(){a&&(F.call(a,"show","toast"),s.animation&&j(a,"fade"),T(a,"hide"),j(a,"showing"),s.animation?z(a,l):l())},this.hide=function(e){a&&O(a,"show")&&(F.call(a,"hide","toast"),e?d():o=setTimeout(d,s[c]))},this.dispose=function(){a&&O(a,"show")&&(T(a,"show"),s.animation?z(a,f):f())},"Toast"in e||M(e,"click",s.hide),e.Toast=s};o[v](["Toast",J,'[data-dismiss="toast"]']);var X=function(n,r){r=r||{};var s=(n=N(n))[h]("data-animation"),o=n[h]("data-placement"),a=n[h]("data-delay"),l=n[h]("data-container"),p=N(r.container),g=N(l),v=I(n,".modal"),_=I(n,".fixed-top"),w=I(n,".fixed-bottom");this[u]=r[u]&&"fade"!==r[u]?r[u]:s||"fade",this.placement=r.placement?r.placement:o||y,this[c]=parseInt(r[c]||a)||200,this.container=p||g||_||w||v||t[i];var S=this,x=0,E=this.placement,A=null,C=n[h]("title")||n[h]("data-title")||n[h]("data-original-title");if(C&&""!=C){var k=function(){M(e,"resize",S.hide,P),F.call(n,"shown","tooltip")},D=function(){R(e,"resize",S.hide,P),S.container.removeChild(A),A=null,x=null,F.call(n,"hidden","tooltip")};this.show=function(){clearTimeout(x),x=setTimeout((function(){null===A&&(E=S.placement,!1!==function(){if((C=n[h]("title")||n[h]("data-title")||n[h]("data-original-title"))&&""!==C){(A=t.createElement("div"))[f]("role","tooltip"),A[m][b]="0",A[m].top="0";var e=t.createElement("div");e[f]("class","arrow"),A.appendChild(e);var r=t.createElement("div");r[f]("class","tooltip-inner"),A.appendChild(r),r.innerHTML=C,S.container.appendChild(A),A[f]("class","tooltip bs-tooltip-"+E+" "+S[u])}}()&&(B(n,A,E,S.container),!O(A,"show")&&j(A,"show"),F.call(n,"show","tooltip"),S[u]?z(A,k):k()))}),20)},this.hide=function(){clearTimeout(x),x=setTimeout((function(){A&&O(A,"show")&&(F.call(n,"hide","tooltip"),T(A,"show"),S[u]?z(A,D):D())}),S[c])},this.toggle=function(){A?S.hide():S.show()},"Tooltip"in n||(n[f]("data-original-title",C),n.removeAttribute("title"),M(n,d[0],S.show),M(n,d[1],S.hide)),n.Tooltip=S}};o[v](["Tooltip",X,"["+a+'="tooltip"]']);var Q=function(e,t){for(var n=0,r=t[g];n<r;n++)new e(t[n])},Y=s.initCallback=function(e){e=e||t;for(var n=0,r=o[g];n<r;n++)Q(o[n][1],e.querySelectorAll(o[n][2]))};return t[i]?Y():M(t,"DOMContentLoaded",(function(){Y()})),{Alert:q,Button:H,Collapse:U,Dropdown:$,Modal:W,Popover:V,Tab:G,Toast:J,Tooltip:X}})?r.apply(t,i):r)||(e.exports=s)}).call(this,n(11))},function(e,t,n){var r,i,s;
+ */!function(i){var o,s,a,c,l,u,d,h,f,p,g,m,v,_,b,y,w,S,x,E="sizzle"+1*new Date,A=i.document,C=0,j=0,T=he(),O=he(),k=he(),N=he(),I=function(e,t){return e===t&&(g=!0),0},M={}.hasOwnProperty,R=[],D=R.pop,P=R.push,L=R.push,z=R.slice,F=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",q="[\\x20\\t\\r\\n\\f]",H="(?:\\\\[\\da-fA-F]{1,6}"+q+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",U="\\["+q+"*("+H+")(?:"+q+"*([*^$|!~]?=)"+q+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+H+"))|)"+q+"*\\]",$=":("+H+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+U+")*)|.*)\\)|)",W=new RegExp(q+"+","g"),G=new RegExp("^"+q+"+|((?:^|[^\\\\])(?:\\\\.)*)"+q+"+$","g"),V=new RegExp("^"+q+"*,"+q+"*"),J=new RegExp("^"+q+"*([>+~]|"+q+")"+q+"*"),X=new RegExp(q+"|>"),Q=new RegExp($),Y=new RegExp("^"+H+"$"),K={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H+"|[*])"),ATTR:new RegExp("^"+U),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+q+"*(even|odd|(([+-]|)(\\d*)n|)"+q+"*(?:([+-]|)"+q+"*(\\d+)|))"+q+"*\\)|)","i"),bool:new RegExp("^(?:"+B+")$","i"),needsContext:new RegExp("^"+q+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+q+"*((?:-\\d)?\\d*)"+q+"*\\)|)(?=[^-]|$)","i")},Z=/HTML$/i,ee=/^(?:input|select|textarea|button)$/i,te=/^h\d$/i,ne=/^[^{]+\{\s*\[native \w/,re=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ie=/[+~]/,oe=new RegExp("\\\\[\\da-fA-F]{1,6}"+q+"?|\\\\([^\\r\\n\\f])","g"),se=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ae=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ce=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},le=function(){m()},ue=Ee((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{L.apply(R=z.call(A.childNodes),A.childNodes),R[A.childNodes.length].nodeType}catch(e){L={apply:R.length?function(e,t){P.apply(e,z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function de(e,t,n,r){var i,o,a,c,l,d,f,p=t&&t.ownerDocument,g=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==g&&9!==g&&11!==g)return n;if(!r&&(m(t),t=t||v,b)){if(11!==g&&(l=re.exec(e)))if(i=l[1]){if(9===g){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(p&&(a=p.getElementById(i))&&x(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return L.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&s.getElementsByClassName&&t.getElementsByClassName)return L.apply(n,t.getElementsByClassName(i)),n}if(s.qsa&&!N[e+" "]&&(!y||!y.test(e))&&(1!==g||"object"!==t.nodeName.toLowerCase())){if(f=e,p=t,1===g&&(X.test(e)||J.test(e))){for((p=ie.test(e)&&we(t.parentNode)||t)===t&&s.scope||((c=t.getAttribute("id"))?c=c.replace(ae,ce):t.setAttribute("id",c=E)),o=(d=u(e)).length;o--;)d[o]=(c?"#"+c:":scope")+" "+xe(d[o]);f=d.join(",")}try{return L.apply(n,p.querySelectorAll(f)),n}catch(t){N(e,!0)}finally{c===E&&t.removeAttribute("id")}}}return h(e.replace(G,"$1"),t,n,r)}function he(){var e=[];return function t(n,r){return e.push(n+" ")>a.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function fe(e){return e[E]=!0,e}function pe(e){var t=v.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ge(e,t){for(var n=e.split("|"),r=n.length;r--;)a.attrHandle[n[r]]=t}function me(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ve(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function _e(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function be(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ue(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ye(e){return fe((function(t){return t=+t,fe((function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function we(e){return e&&void 0!==e.getElementsByTagName&&e}for(o in s=de.support={},l=de.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Z.test(t||n&&n.nodeName||"HTML")},m=de.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:A;return r!=v&&9===r.nodeType&&r.documentElement?(_=(v=r).documentElement,b=!l(v),A!=v&&(n=v.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",le,!1):n.attachEvent&&n.attachEvent("onunload",le)),s.scope=pe((function(e){return _.appendChild(e).appendChild(v.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),s.attributes=pe((function(e){return e.className="i",!e.getAttribute("className")})),s.getElementsByTagName=pe((function(e){return e.appendChild(v.createComment("")),!e.getElementsByTagName("*").length})),s.getElementsByClassName=ne.test(v.getElementsByClassName),s.getById=pe((function(e){return _.appendChild(e).id=E,!v.getElementsByName||!v.getElementsByName(E).length})),s.getById?(a.filter.ID=function(e){var t=e.replace(oe,se);return function(e){return e.getAttribute("id")===t}},a.find.ID=function(e,t){if(void 0!==t.getElementById&&b){var n=t.getElementById(e);return n?[n]:[]}}):(a.filter.ID=function(e){var t=e.replace(oe,se);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},a.find.ID=function(e,t){if(void 0!==t.getElementById&&b){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),a.find.TAG=s.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):s.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},a.find.CLASS=s.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&b)return t.getElementsByClassName(e)},w=[],y=[],(s.qsa=ne.test(v.querySelectorAll))&&(pe((function(e){var t;_.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+q+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+q+"*(?:value|"+B+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=v.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+q+"*name"+q+"*="+q+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")})),pe((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=v.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+q+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),_.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")}))),(s.matchesSelector=ne.test(S=_.matches||_.webkitMatchesSelector||_.mozMatchesSelector||_.oMatchesSelector||_.msMatchesSelector))&&pe((function(e){s.disconnectedMatch=S.call(e,"*"),S.call(e,"[s!='']:x"),w.push("!=",$)})),y=y.length&&new RegExp(y.join("|")),w=w.length&&new RegExp(w.join("|")),t=ne.test(_.compareDocumentPosition),x=t||ne.test(_.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},I=t?function(e,t){if(e===t)return g=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!s.sortDetached&&t.compareDocumentPosition(e)===n?e==v||e.ownerDocument==A&&x(A,e)?-1:t==v||t.ownerDocument==A&&x(A,t)?1:p?F(p,e)-F(p,t):0:4&n?-1:1)}:function(e,t){if(e===t)return g=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!i||!o)return e==v?-1:t==v?1:i?-1:o?1:p?F(p,e)-F(p,t):0;if(i===o)return me(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?me(s[r],a[r]):s[r]==A?-1:a[r]==A?1:0},v):v},de.matches=function(e,t){return de(e,null,null,t)},de.matchesSelector=function(e,t){if(m(e),s.matchesSelector&&b&&!N[t+" "]&&(!w||!w.test(t))&&(!y||!y.test(t)))try{var n=S.call(e,t);if(n||s.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return de(t,v,null,[e]).length>0},de.contains=function(e,t){return(e.ownerDocument||e)!=v&&m(e),x(e,t)},de.attr=function(e,t){(e.ownerDocument||e)!=v&&m(e);var n=a.attrHandle[t.toLowerCase()],r=n&&M.call(a.attrHandle,t.toLowerCase())?n(e,t,!b):void 0;return void 0!==r?r:s.attributes||!b?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},de.escape=function(e){return(e+"").replace(ae,ce)},de.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},de.uniqueSort=function(e){var t,n=[],r=0,i=0;if(g=!s.detectDuplicates,p=!s.sortStable&&e.slice(0),e.sort(I),g){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return p=null,e},c=de.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=c(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=c(t);return n},(a=de.selectors={cacheLength:50,createPseudo:fe,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(oe,se),e[3]=(e[3]||e[4]||e[5]||"").replace(oe,se),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||de.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&de.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Q.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(oe,se).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+q+")"+e+"("+q+"|$)"))&&T(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=de.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,c){var l,u,d,h,f,p,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),_=!c&&!a,b=!1;if(m){if(o){for(;g;){for(h=t;h=h[g];)if(a?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&_){for(b=(f=(l=(u=(d=(h=m)[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===C&&l[1])&&l[2],h=f&&m.childNodes[f];h=++f&&h&&h[g]||(b=f=0)||p.pop();)if(1===h.nodeType&&++b&&h===t){u[e]=[C,f,b];break}}else if(_&&(b=f=(l=(u=(d=(h=t)[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===C&&l[1]),!1===b)for(;(h=++f&&h&&h[g]||(b=f=0)||p.pop())&&((a?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++b||(_&&((u=(d=h[E]||(h[E]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]=[C,b]),h!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,r=a.pseudos[e]||a.setFilters[e.toLowerCase()]||de.error("unsupported pseudo: "+e);return r[E]?r(t):r.length>1?(n=[e,e,"",t],a.setFilters.hasOwnProperty(e.toLowerCase())?fe((function(e,n){for(var i,o=r(e,t),s=o.length;s--;)e[i=F(e,o[s])]=!(n[i]=o[s])})):function(e){return r(e,0,n)}):r}},pseudos:{not:fe((function(e){var t=[],n=[],r=d(e.replace(G,"$1"));return r[E]?fe((function(e,t,n,i){for(var o,s=r(e,null,i,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))})):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}})),has:fe((function(e){return function(t){return de(e,t).length>0}})),contains:fe((function(e){return e=e.replace(oe,se),function(t){return(t.textContent||c(t)).indexOf(e)>-1}})),lang:fe((function(e){return Y.test(e||"")||de.error("unsupported lang: "+e),e=e.replace(oe,se).toLowerCase(),function(t){var n;do{if(n=b?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(e){var t=i.location&&i.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===_},focus:function(e){return e===v.activeElement&&(!v.hasFocus||v.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:be(!1),disabled:be(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!a.pseudos.empty(e)},header:function(e){return te.test(e.nodeName)},input:function(e){return ee.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye((function(){return[0]})),last:ye((function(e,t){return[t-1]})),eq:ye((function(e,t,n){return[n<0?n+t:n]})),even:ye((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ye((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ye((function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e})),gt:ye((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}}).pseudos.nth=a.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})a.pseudos[o]=ve(o);for(o in{submit:!0,reset:!0})a.pseudos[o]=_e(o);function Se(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ee(e,t,n){var r=t.dir,i=t.next,o=i||r,s=n&&"parentNode"===o,a=j++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||s)return e(t,n,i);return!1}:function(t,n,c){var l,u,d,h=[C,a];if(c){for(;t=t[r];)if((1===t.nodeType||s)&&e(t,n,c))return!0}else for(;t=t[r];)if(1===t.nodeType||s)if(u=(d=t[E]||(t[E]={}))[t.uniqueID]||(d[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=u[o])&&l[0]===C&&l[1]===a)return h[2]=l[2];if(u[o]=h,h[2]=e(t,n,c))return!0}return!1}}function Ae(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ce(e,t,n,r,i){for(var o,s=[],a=0,c=e.length,l=null!=t;a<c;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),l&&t.push(a)));return s}function je(e,t,n,r,i,o){return r&&!r[E]&&(r=je(r)),i&&!i[E]&&(i=je(i,o)),fe((function(o,s,a,c){var l,u,d,h=[],f=[],p=s.length,g=o||function(e,t,n){for(var r=0,i=t.length;r<i;r++)de(e,t[r],n);return n}(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:Ce(g,h,e,a,c),v=n?i||(o?e:p||r)?[]:s:m;if(n&&n(m,v,a,c),r)for(l=Ce(v,f),r(l,[],a,c),u=l.length;u--;)(d=l[u])&&(v[f[u]]=!(m[f[u]]=d));if(o){if(i||e){if(i){for(l=[],u=v.length;u--;)(d=v[u])&&l.push(m[u]=d);i(null,v=[],l,c)}for(u=v.length;u--;)(d=v[u])&&(l=i?F(o,d):h[u])>-1&&(o[l]=!(s[l]=d))}}else v=Ce(v===s?v.splice(p,v.length):v),i?i(null,s,v,c):L.apply(s,v)}))}function Te(e){for(var t,n,r,i=e.length,o=a.relative[e[0].type],s=o||a.relative[" "],c=o?1:0,l=Ee((function(e){return e===t}),s,!0),u=Ee((function(e){return F(t,e)>-1}),s,!0),d=[function(e,n,r){var i=!o&&(r||n!==f)||((t=n).nodeType?l(e,n,r):u(e,n,r));return t=null,i}];c<i;c++)if(n=a.relative[e[c].type])d=[Ee(Ae(d),n)];else{if((n=a.filter[e[c].type].apply(null,e[c].matches))[E]){for(r=++c;r<i&&!a.relative[e[r].type];r++);return je(c>1&&Ae(d),c>1&&xe(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(G,"$1"),n,c<r&&Te(e.slice(c,r)),r<i&&Te(e=e.slice(r)),r<i&&xe(e))}d.push(n)}return Ae(d)}Se.prototype=a.filters=a.pseudos,a.setFilters=new Se,u=de.tokenize=function(e,t){var n,r,i,o,s,c,l,u=O[e+" "];if(u)return t?0:u.slice(0);for(s=e,c=[],l=a.preFilter;s;){for(o in n&&!(r=V.exec(s))||(r&&(s=s.slice(r[0].length)||s),c.push(i=[])),n=!1,(r=J.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(G," ")}),s=s.slice(n.length)),a.filter)!(r=K[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?de.error(e):O(e,c).slice(0)},d=de.compile=function(e,t){var n,r=[],i=[],o=k[e+" "];if(!o){for(t||(t=u(e)),n=t.length;n--;)(o=Te(t[n]))[E]?r.push(o):i.push(o);(o=k(e,function(e,t){var n=t.length>0,r=e.length>0,i=function(i,o,s,c,l){var u,d,h,p=0,g="0",_=i&&[],y=[],w=f,S=i||r&&a.find.TAG("*",l),x=C+=null==w?1:Math.random()||.1,E=S.length;for(l&&(f=o==v||o||l);g!==E&&null!=(u=S[g]);g++){if(r&&u){for(d=0,o||u.ownerDocument==v||(m(u),s=!b);h=e[d++];)if(h(u,o||v,s)){c.push(u);break}l&&(C=x)}n&&((u=!h&&u)&&p--,i&&_.push(u))}if(p+=g,n&&g!==p){for(d=0;h=t[d++];)h(_,y,o,s);if(i){if(p>0)for(;g--;)_[g]||y[g]||(y[g]=D.call(c));y=Ce(y)}L.apply(c,y),l&&!i&&y.length>0&&p+t.length>1&&de.uniqueSort(c)}return l&&(C=x,f=w),_};return n?fe(i):i}(i,r))).selector=e}return o},h=de.select=function(e,t,n,r){var i,o,s,c,l,h="function"==typeof e&&e,f=!r&&u(e=h.selector||e);if(n=n||[],1===f.length){if((o=f[0]=f[0].slice(0)).length>2&&"ID"===(s=o[0]).type&&9===t.nodeType&&b&&a.relative[o[1].type]){if(!(t=(a.find.ID(s.matches[0].replace(oe,se),t)||[])[0]))return n;h&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=K.needsContext.test(e)?0:o.length;i--&&(s=o[i],!a.relative[c=s.type]);)if((l=a.find[c])&&(r=l(s.matches[0].replace(oe,se),ie.test(o[0].type)&&we(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return L.apply(n,r),n;break}}return(h||d(e,f))(r,t,!b,n,!t||ie.test(e)&&we(t.parentNode)||t),n},s.sortStable=E.split("").sort(I).join("")===E,s.detectDuplicates=!!g,m(),s.sortDetached=pe((function(e){return 1&e.compareDocumentPosition(v.createElement("fieldset"))})),pe((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||ge("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),s.attributes&&pe((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||ge("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),pe((function(e){return null==e.getAttribute("disabled")}))||ge(B,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}));var Oe=i.Sizzle;de.noConflict=function(){return i.Sizzle===de&&(i.Sizzle=Oe),de},void 0===(r=function(){return de}.call(t,n,t,e))||(e.exports=r)}(window)},,function(e,t,n){e.exports=function(){"use strict";var e="millisecond",t="second",n="minute",r="hour",i="day",o="week",s="month",a="quarter",c="year",l=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,u=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,d=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},h={s:d,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?"+":"-")+d(r,2,"0")+":"+d(i,2,"0")},m:function(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,s),i=t-r<0,o=e.clone().add(n+(i?-1:1),s);return Number(-(n+(t-r)/(i?r-o:o-r))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(l){return{M:s,y:c,w:o,d:i,D:"date",h:r,m:n,s:t,ms:e,Q:a}[l]||String(l||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},f={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},p="en",g={};g[p]=f;var m=function(e){return e instanceof y},v=function(e,t,n){var r;if(!e)return p;if("string"==typeof e)g[e]&&(r=e),t&&(g[e]=t,r=e);else{var i=e.name;g[i]=e,r=i}return!n&&r&&(p=r),r||!n&&p},_=function(e,t){if(m(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new y(n)},b=h;b.l=v,b.i=m,b.w=function(e,t){return _(e,{locale:t.$L,utc:t.$u,$offset:t.$offset})};var y=function(){function d(e){this.$L=this.$L||v(e.locale,null,!0),this.parse(e)}var h=d.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(b.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(l);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return b},h.isValid=function(){return!("Invalid Date"===this.$d.toString())},h.isSame=function(e,t){var n=_(e);return this.startOf(t)<=n&&n<=this.endOf(t)},h.isAfter=function(e,t){return _(e)<this.startOf(t)},h.isBefore=function(e,t){return this.endOf(t)<_(e)},h.$g=function(e,t,n){return b.u(e)?this[t]:this.set(n,e)},h.year=function(e){return this.$g(e,"$y",c)},h.month=function(e){return this.$g(e,"$M",s)},h.day=function(e){return this.$g(e,"$W",i)},h.date=function(e){return this.$g(e,"$D","date")},h.hour=function(e){return this.$g(e,"$H",r)},h.minute=function(e){return this.$g(e,"$m",n)},h.second=function(e){return this.$g(e,"$s",t)},h.millisecond=function(t){return this.$g(t,"$ms",e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,a){var l=this,u=!!b.u(a)||a,d=b.p(e),h=function(e,t){var n=b.w(l.$u?Date.UTC(l.$y,t,e):new Date(l.$y,t,e),l);return u?n:n.endOf(i)},f=function(e,t){return b.w(l.toDate()[e].apply(l.toDate("s"),(u?[0,0,0,0]:[23,59,59,999]).slice(t)),l)},p=this.$W,g=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(d){case c:return u?h(1,0):h(31,11);case s:return u?h(1,g):h(0,g+1);case o:var _=this.$locale().weekStart||0,y=(p<_?p+7:p)-_;return h(u?m-y:m+(6-y),g);case i:case"date":return f(v+"Hours",0);case r:return f(v+"Minutes",1);case n:return f(v+"Seconds",2);case t:return f(v+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(o,a){var l,u=b.p(o),d="set"+(this.$u?"UTC":""),h=(l={},l.day=d+"Date",l.date=d+"Date",l[s]=d+"Month",l[c]=d+"FullYear",l[r]=d+"Hours",l[n]=d+"Minutes",l[t]=d+"Seconds",l[e]=d+"Milliseconds",l)[u],f=u===i?this.$D+(a-this.$W):a;if(u===s||u===c){var p=this.clone().set("date",1);p.$d[h](f),p.init(),this.$d=p.set("date",Math.min(this.$D,p.daysInMonth())).$d}else h&&this.$d[h](f);return this.init(),this},h.set=function(e,t){return this.clone().$set(e,t)},h.get=function(e){return this[b.p(e)]()},h.add=function(e,a){var l,u=this;e=Number(e);var d=b.p(a),h=function(t){var n=_(u);return b.w(n.date(n.date()+Math.round(t*e)),u)};if(d===s)return this.set(s,this.$M+e);if(d===c)return this.set(c,this.$y+e);if(d===i)return h(1);if(d===o)return h(7);var f=(l={},l[n]=6e4,l[r]=36e5,l[t]=1e3,l)[d]||1,p=this.$d.getTime()+e*f;return b.w(p,this)},h.subtract=function(e,t){return this.add(-1*e,t)},h.format=function(e){var t=this;if(!this.isValid())return"Invalid Date";var n=e||"YYYY-MM-DDTHH:mm:ssZ",r=b.z(this),i=this.$locale(),o=this.$H,s=this.$m,a=this.$M,c=i.weekdays,l=i.months,d=function(e,r,i,o){return e&&(e[r]||e(t,n))||i[r].substr(0,o)},h=function(e){return b.s(o%12||12,e,"0")},f=i.meridiem||function(e,t,n){var r=e<12?"AM":"PM";return n?r.toLowerCase():r},p={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:b.s(a+1,2,"0"),MMM:d(i.monthsShort,a,l,3),MMMM:d(l,a),D:this.$D,DD:b.s(this.$D,2,"0"),d:String(this.$W),dd:d(i.weekdaysMin,this.$W,c,2),ddd:d(i.weekdaysShort,this.$W,c,3),dddd:c[this.$W],H:String(o),HH:b.s(o,2,"0"),h:h(1),hh:h(2),a:f(o,s,!0),A:f(o,s,!1),m:String(s),mm:b.s(s,2,"0"),s:String(this.$s),ss:b.s(this.$s,2,"0"),SSS:b.s(this.$ms,3,"0"),Z:r};return n.replace(u,(function(e,t){return t||p[e]||r.replace(":","")}))},h.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},h.diff=function(e,i,l){var u,d=b.p(i),h=_(e),f=6e4*(h.utcOffset()-this.utcOffset()),p=this-h,g=b.m(this,h);return g=(u={},u[c]=g/12,u[s]=g,u[a]=g/3,u[o]=(p-f)/6048e5,u.day=(p-f)/864e5,u[r]=p/36e5,u[n]=p/6e4,u[t]=p/1e3,u)[d]||p,l?g:b.a(g)},h.daysInMonth=function(){return this.endOf(s).$D},h.$locale=function(){return g[this.$L]},h.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=v(e,t,!0);return r&&(n.$L=r),n},h.clone=function(){return b.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},d}();return _.prototype=y.prototype,_.extend=function(e,t){return e(t,y,_),_},_.locale=v,_.isDayjs=m,_.unix=function(e){return _(1e3*e)},_.en=g[p],_.Ls=g,_}()},function(e,t,n){"use strict";var r=n(63),i="object"==typeof self&&self&&self.Object===Object&&self,o=r.a||i||Function("return this")();t.a=o},function(e,t,n){"use strict";function r(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var n,r,s,l,u,d,h,f,p=new Array(80),g=1732584193,m=-271733879,v=-1732584194,_=271733878,b=-1009589776;for(n=0;n<e.length;n+=16){for(l=g,u=m,d=v,h=_,f=b,r=0;r<80;r++)p[r]=r<16?e[n+r]:c(p[r-3]^p[r-8]^p[r-14]^p[r-16],1),s=a(a(c(g,5),i(r,m,v,_)),a(a(b,p[r]),o(r))),b=_,_=v,v=c(m,30),m=g,g=s;g=a(g,l),m=a(m,u),v=a(v,d),_=a(_,h),b=a(b,f)}return[g,m,v,_,b]}function i(e,t,n,r){return e<20?t&n|~t&r:e<40?t^n^r:e<60?t&n|t&r|n&r:t^n^r}function o(e){return e<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514}function s(e,t){var n=l(e);n.length>16&&(n=r(n,8*e.length));for(var i=new Array(16),o=new Array(16),s=0;s<16;s++)i[s]=909522486^n[s],o[s]=1549556828^n[s];var a=r(i.concat(l(t)),512+8*t.length);return r(o.concat(a),672)}function a(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function c(e,t){return e<<t|e>>>32-t}function l(e){for(var t=[],n=0;n<8*e.length;n+=8)t[n>>5]|=(255&e.charCodeAt(n/8))<<24-n%32;return t}function u(e){for(var t,n,r="",i=0;i<4*e.length;i+=3)for(t=(e[i>>2]>>8*(3-i%4)&255)<<16|(e[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|e[i+2>>2]>>8*(3-(i+2)%4)&255,n=0;n<4;n++)8*i+6*n>32*e.length?r+="=":r+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-n)&63);return r}function d(e){for(var t="",n=0;n<32*e.length;n+=8)t+=String.fromCharCode(e[n>>5]>>>24-n%32&255);return t}n.d(t,"a",(function(){return h}));const h={b64_hmac_sha1:function(e,t){return u(s(e,t))},b64_sha1:function(e){return u(r(l(e),8*e.length))},binb2str:d,core_hmac_sha1:s,str_hmac_sha1:function(e,t){return d(s(e,t))},str_sha1:function(e){return d(r(l(e),8*e.length))}}},function(e,t,n){var r=n(496),i=n(137),o=/[&<>"']/g,s=RegExp(o.source);e.exports=function(e){return(e=i(e))&&s.test(e)?e.replace(o,r):e}},function(e,t,n){"use strict";(function(e){n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"c",(function(){return o}));const r=function(){let t=e.WebSocket;if(void 0===t)try{t=n(499)}catch(e){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}return t}();const i=function(){let t=e.DOMParser;if(void 0===t)try{t=n(47).DOMParser}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}return t}();function o(){if("undefined"==typeof document)try{return(new(0,n(47).DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}if(void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10){const e=function(){const e=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}();return e.appendChild(e.createElement("strophe")),e}return document.implementation.createDocument("jabber:client","strophe",null)}}).call(this,n(12))},function(e,t,n){"use strict";const r=n(330),i=n(331);e.exports={atob:r,btoa:i}},function(e,t,n){var r=n(96),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();e.exports=o},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){"use strict";(function(e){var r=n(63),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===i&&r.a.process,a=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(e){}}();t.a=a}).call(this,n(69)(e))},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}));!function(){let t=e.WebSocket;if(void 0===t)try{t=n(328)}catch(e){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}}();const r=function(){let t=e.DOMParser;if(void 0===t)try{t=n(47).DOMParser}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}return t}();function i(){if("undefined"==typeof document)try{return(new(0,n(47).DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(e){throw new Error('You must install the "xmldom" package to use Strophe in nodejs.')}if(void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10){const e=function(){const e=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}();return e.appendChild(e.createElement("strophe")),e}return document.implementation.createDocument("jabber:client","strophe",null)}}).call(this,n(12))},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(144)("wks"),i=n(145),o=n(13).Symbol,s="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=s&&o[e]||(s?o:i)("Symbol."+e))}).store=r},function(e,t,n){!function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,(function(e){return i(t[s][1][e]||e)}),l,l.exports,e,t,n,r)}return n[s].exports}for(var o=!1,s=0;s<r.length;s++)i(r[s]);return i}({1:[function(e,t,n){var r=e("cssfilter").FilterCSS,i=e("cssfilter").getDefaultWhiteList,o=e("./util");function s(){return{a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]}}var a=new r;function c(e){return e.replace(l,"&lt;").replace(u,"&gt;")}var l=/</g,u=/>/g,d=/"/g,h=/&quot;/g,f=/&#([a-zA-Z0-9]*);?/gim,p=/&colon;?/gim,g=/&newline;?/gim,m=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi,v=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,_=/u\s*r\s*l\s*\(.*/gi;function b(e){return e.replace(d,"&quot;")}function y(e){return e.replace(h,'"')}function w(e){return e.replace(f,(function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))}))}function S(e){return e.replace(p,":").replace(g," ")}function x(e){for(var t="",n=0,r=e.length;n<r;n++)t+=e.charCodeAt(n)<32?" ":e.charAt(n);return o.trim(t)}function E(e){return e=x(e=S(e=w(e=y(e))))}function A(e){return e=c(e=b(e))}var C=/<!--[\s\S]*?-->/g;n.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]},n.getDefaultWhiteList=s,n.onTag=function(e,t,n){},n.onIgnoreTag=function(e,t,n){},n.onTagAttr=function(e,t,n){},n.onIgnoreTagAttr=function(e,t,n){},n.safeAttrValue=function(e,t,n,r){if(n=E(n),"href"===t||"src"===t){if("#"===(n=o.trim(n)))return"#";if("http://"!==n.substr(0,7)&&"https://"!==n.substr(0,8)&&"mailto:"!==n.substr(0,7)&&"tel:"!==n.substr(0,4)&&"data:image/"!==n.substr(0,11)&&"ftp://"!==n.substr(0,6)&&"./"!==n.substr(0,2)&&"../"!==n.substr(0,3)&&"#"!==n[0]&&"/"!==n[0])return""}else if("background"===t){if(m.lastIndex=0,m.test(n))return""}else if("style"===t){if(v.lastIndex=0,v.test(n))return"";if(_.lastIndex=0,_.test(n)&&(m.lastIndex=0,m.test(n)))return"";!1!==r&&(n=(r=r||a).process(n))}return n=A(n)},n.escapeHtml=c,n.escapeQuote=b,n.unescapeQuote=y,n.escapeHtmlEntities=w,n.escapeDangerHtml5Entities=S,n.clearNonPrintableCharacter=x,n.friendlyAttrValue=E,n.escapeAttrValue=A,n.onIgnoreTagStripAll=function(){return""},n.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var n=!Array.isArray(e),r=[],i=!1;return{onIgnoreTag:function(s,a,c){if(function(t){return!!n||-1!==o.indexOf(e,t)}(s)){if(c.isClosing){var l="[/removed]",u=c.position+l.length;return r.push([!1!==i?i:c.position,u]),i=!1,l}return i||(i=c.position),"[removed]"}return t(s,a,c)},remove:function(e){var t="",n=0;return o.forEach(r,(function(r){t+=e.slice(n,r[0]),n=r[1]})),t+=e.slice(n)}}},n.stripCommentTag=function(e){return e.replace(C,"")},n.stripBlankChar=function(e){var t=e.split("");return(t=t.filter((function(e){var t=e.charCodeAt(0);return 127!==t&&(!(t<=31)||(10===t||13===t))}))).join("")},n.cssFilter=a,n.getDefaultCSSWhiteList=i},{"./util":4,cssfilter:8}],2:[function(e,t,n){var r=e("./default"),i=e("./parser"),o=e("./xss");function s(e,t){return new o(t).process(e)}for(var a in(n=t.exports=s).filterXSS=s,n.FilterXSS=o,r)n[a]=r[a];for(var a in i)n[a]=i[a];"undefined"!=typeof window&&(window.filterXSS=t.exports),"undefined"!=typeof self&&"undefined"!=typeof DedicatedWorkerGlobalScope&&self instanceof DedicatedWorkerGlobalScope&&(self.filterXSS=t.exports)},{"./default":1,"./parser":3,"./xss":5}],3:[function(e,t,n){var r=e("./util");function i(e){var t=r.spaceIndex(e);if(-1===t)var n=e.slice(1,-1);else n=e.slice(1,t+1);return"/"===(n=r.trim(n).toLowerCase()).slice(0,1)&&(n=n.slice(1)),"/"===n.slice(-1)&&(n=n.slice(0,-1)),n}function o(e){return"</"===e.slice(0,2)}var s=/[^a-zA-Z0-9_:\.\-]/gim;function a(e,t){for(;t<e.length;t++){var n=e[t];if(" "!==n)return"="===n?t:-1}}function c(e,t){for(;t>0;t--){var n=e[t];if(" "!==n)return"="===n?t:-1}}function l(e){return function(e){return'"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1]}(e)?e.substr(1,e.length-2):e}n.parseTag=function(e,t,n){"use strict";var r="",s=0,a=!1,c=!1,l=0,u=e.length,d="",h="";for(l=0;l<u;l++){var f=e.charAt(l);if(!1===a){if("<"===f){a=l;continue}}else if(!1===c){if("<"===f){r+=n(e.slice(s,l)),a=l,s=l;continue}if(">"===f){r+=n(e.slice(s,a)),d=i(h=e.slice(a,l+1)),r+=t(a,r.length,d,h,o(h)),s=l+1,a=!1;continue}if(('"'===f||"'"===f)&&"="===e.charAt(l-1)){c=f;continue}}else if(f===c){c=!1;continue}}return s<e.length&&(r+=n(e.substr(s))),r},n.parseAttr=function(e,t){"use strict";var n=0,i=[],o=!1,u=e.length;function d(e,n){if(!((e=(e=r.trim(e)).replace(s,"").toLowerCase()).length<1)){var o=t(e,n||"");o&&i.push(o)}}for(var h=0;h<u;h++){var f,p=e.charAt(h);if(!1!==o||"="!==p)if(!1===o||h!==n||'"'!==p&&"'"!==p||"="!==e.charAt(h-1))if(/\s|\n|\t/.test(p)){if(e=e.replace(/\s|\n|\t/g," "),!1===o){if(-1===(f=a(e,h))){d(r.trim(e.slice(n,h))),o=!1,n=h+1;continue}h=f-1;continue}if(-1===(f=c(e,h-1))){d(o,l(r.trim(e.slice(n,h)))),o=!1,n=h+1;continue}}else;else{if(-1===(f=e.indexOf(p,h+1)))break;d(o,r.trim(e.slice(n+1,f))),o=!1,n=(h=f)+1}else o=e.slice(n,h),n=h+1}return n<e.length&&(!1===o?d(e.slice(n)):d(o,l(r.trim(e.slice(n))))),r.trim(i.join(" "))}},{"./util":4}],4:[function(e,t,n){t.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t,n){var r,i;if(Array.prototype.forEach)return e.forEach(t,n);for(r=0,i=e.length;r<i;r++)t.call(n,e[r],r,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},spaceIndex:function(e){var t=/\s|\n|\t/.exec(e);return t?t.index:-1}}},{}],5:[function(e,t,n){var r=e("cssfilter").FilterCSS,i=e("./default"),o=e("./parser"),s=o.parseTag,a=o.parseAttr,c=e("./util");function l(e){return null==e}function u(e){(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=i.onIgnoreTagStripAll),e.whiteList=e.whiteList||i.whiteList,e.onTag=e.onTag||i.onTag,e.onTagAttr=e.onTagAttr||i.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||i.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||i.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||i.safeAttrValue,e.escapeHtml=e.escapeHtml||i.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new r(e.css))}u.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,n=t.whiteList,r=t.onTag,o=t.onIgnoreTag,u=t.onTagAttr,d=t.onIgnoreTagAttr,h=t.safeAttrValue,f=t.escapeHtml,p=this.cssFilter;t.stripBlankChar&&(e=i.stripBlankChar(e)),t.allowCommentTag||(e=i.stripCommentTag(e));var g=!1;if(t.stripIgnoreTagBody){g=i.StripTagBody(t.stripIgnoreTagBody,o);o=g.onIgnoreTag}var m=s(e,(function(e,t,i,s,g){var m,v={sourcePosition:e,position:t,isClosing:g,isWhite:n.hasOwnProperty(i)};if(!l(m=r(i,s,v)))return m;if(v.isWhite){if(v.isClosing)return"</"+i+">";var _=function(e){var t=c.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var n="/"===(e=c.trim(e.slice(t+1,-1)))[e.length-1];return n&&(e=c.trim(e.slice(0,-1))),{html:e,closing:n}}(s),b=n[i],y=a(_.html,(function(e,t){var n,r=-1!==c.indexOf(b,e);return l(n=u(i,e,t,r))?r?(t=h(i,e,t,p))?e+'="'+t+'"':e:l(n=d(i,e,t,r))?void 0:n:n}));s="<"+i;return y&&(s+=" "+y),_.closing&&(s+=" /"),s+=">"}return l(m=o(i,s,v))?f(s):m}),f);return g&&(m=g.remove(m)),m},t.exports=u},{"./default":1,"./parser":3,"./util":4,cssfilter:8}],6:[function(e,t,n){var r=e("./default"),i=e("./parser");e("./util");function o(e){return null==e}function s(e){(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e||{})).whiteList=e.whiteList||r.whiteList,e.onAttr=e.onAttr||r.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||r.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||r.safeAttrValue,this.options=e}s.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,n=t.whiteList,r=t.onAttr,s=t.onIgnoreAttr,a=t.safeAttrValue;return i(e,(function(e,t,i,c,l){var u=n[i],d=!1;if(!0===u?d=u:"function"==typeof u?d=u(c):u instanceof RegExp&&(d=u.test(c)),!0!==d&&(d=!1),c=a(i,c)){var h,f={position:t,sourcePosition:e,source:l,isWhite:d};return d?o(h=r(i,c,f))?i+":"+c:h:o(h=s(i,c,f))?void 0:h}}))},t.exports=s},{"./default":7,"./parser":9,"./util":10}],7:[function(e,t,n){function r(){var e={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return e}var i=/javascript\s*\:/gim;n.whiteList=r(),n.getDefaultWhiteList=r,n.onAttr=function(e,t,n){},n.onIgnoreAttr=function(e,t,n){},n.safeAttrValue=function(e,t){return i.test(t)?"":t}},{}],8:[function(e,t,n){var r=e("./default"),i=e("./css");for(var o in(n=t.exports=function(e,t){return new i(t).process(e)}).FilterCSS=i,r)n[o]=r[o];"undefined"!=typeof window&&(window.filterCSS=t.exports)},{"./css":6,"./default":7}],9:[function(e,t,n){var r=e("./util");t.exports=function(e,t){";"!==(e=r.trimRight(e))[e.length-1]&&(e+=";");var n=e.length,i=!1,o=0,s=0,a="";function c(){if(!i){var n=r.trim(e.slice(o,s)),c=n.indexOf(":");if(-1!==c){var l=r.trim(n.slice(0,c)),u=r.trim(n.slice(c+1));if(l){var d=t(o,a.length,l,u,n);d&&(a+=d+"; ")}}}o=s+1}for(;s<n;s++){var l=e[s];if("/"===l&&"*"===e[s+1]){var u=e.indexOf("*/",s+2);if(-1===u)break;o=(s=u+1)+1,i=!1}else"("===l?i=!0:")"===l?i=!1:";"===l?i||c():"\n"===l&&c()}return r.trim(a)}},{"./util":10}],10:[function(e,t,n){t.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t,n){var r,i;if(Array.prototype.forEach)return e.forEach(t,n);for(r=0,i=e.length;r<i;r++)t.call(n,e[r],r,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},trimRight:function(e){return String.prototype.trimRight?e.trimRight():e.replace(/(\s*$)/g,"")}}},{}]},{},[2]),t.filterXSS=filterXSS,t.filterCSS=filterCSS},function(e,t){var n=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";(function(e){var r=n(6),i=n(159),o="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=o&&"object"==typeof e&&e&&!e.nodeType&&e,a=s&&s.exports===o?r.a.Buffer:void 0,c=(a?a.isBuffer:void 0)||i.a;t.a=c}).call(this,n(69)(e))},function(e,t,n){(function(t){e.exports=function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,(function(e){var n=t[s][1][e];return i(n||e)}),l,l.exports,e,t,n,r)}return n[s].exports}for(var o=!1,s=0;s<r.length;s++)i(r[s]);return i}({1:[function(e,n,r){(function(e){"use strict";var t,r,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var o=0,s=new i(u),a=e.document.createTextNode("");s.observe(a,{characterData:!0}),t=function(){a.data=o=++o%2}}else if(e.setImmediate||void 0===e.MessageChannel)t="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var c=new e.MessageChannel;c.port1.onmessage=u,t=function(){c.port2.postMessage(0)}}var l=[];function u(){var e,t;r=!0;for(var n=l.length;n;){for(t=l,l=[],e=-1;++e<n;)t[e]();n=l.length}r=!1}n.exports=function(e){1!==l.push(e)||r||t()}}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,n){"use strict";var r=e(1);function i(){}var o={},s=["REJECTED"],a=["FULFILLED"],c=["PENDING"];function l(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,e!==i&&f(this,e)}function u(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function d(e,t,n){r((function(){var r;try{r=t(n)}catch(t){return o.reject(e,t)}r===e?o.reject(e,new TypeError("Cannot resolve promise with itself")):o.resolve(e,r)}))}function h(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function f(e,t){var n=!1;function r(t){n||(n=!0,o.reject(e,t))}function i(t){n||(n=!0,o.resolve(e,t))}var s=p((function(){t(i,r)}));"error"===s.status&&r(s.value)}function p(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}t.exports=l,l.prototype.catch=function(e){return this.then(null,e)},l.prototype.then=function(e,t){if("function"!=typeof e&&this.state===a||"function"!=typeof t&&this.state===s)return this;var n=new this.constructor(i);return this.state!==c?d(n,this.state===a?e:t,this.outcome):this.queue.push(new u(n,e,t)),n},u.prototype.callFulfilled=function(e){o.resolve(this.promise,e)},u.prototype.otherCallFulfilled=function(e){d(this.promise,this.onFulfilled,e)},u.prototype.callRejected=function(e){o.reject(this.promise,e)},u.prototype.otherCallRejected=function(e){d(this.promise,this.onRejected,e)},o.resolve=function(e,t){var n=p(h,t);if("error"===n.status)return o.reject(e,n.value);var r=n.value;if(r)f(e,r);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},o.reject=function(e,t){e.state=s,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},l.resolve=function(e){return e instanceof this?e:o.resolve(new this(i),e)},l.reject=function(e){var t=new this(i);return o.reject(t,e)},l.all=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var s=new Array(n),a=0,c=-1,l=new this(i);++c<n;)u(e[c],c);return l;function u(e,i){t.resolve(e).then((function(e){s[i]=e,++a!==n||r||(r=!0,o.resolve(l,s))}),(function(e){r||(r=!0,o.reject(l,e))}))}},l.race=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var s,a=-1,c=new this(i);++a<n;)s=e[a],t.resolve(s).then((function(e){r||(r=!0,o.resolve(c,e))}),(function(e){r||(r=!0,o.reject(c,e))}));return c}},{1:1}],3:[function(e,n,r){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(2))}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(e){return}}();function o(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(i){if("TypeError"!==i.name)throw i;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}}"undefined"==typeof Promise&&e(3);var s=Promise;function a(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))}function c(e,t,n){"function"==typeof t&&e.then(t),"function"==typeof n&&e.catch(n)}function l(e){return"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e)),e}function u(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var d=void 0,h={},f=Object.prototype.toString;function p(e){return"boolean"==typeof d?s.resolve(d):function(e){return new s((function(t){var n=e.transaction("local-forage-detect-blob-support","readwrite"),r=o([""]);n.objectStore("local-forage-detect-blob-support").put(r,"key"),n.onabort=function(e){e.preventDefault(),e.stopPropagation(),t(!1)},n.oncomplete=function(){var e=navigator.userAgent.match(/Chrome\/(\d+)/),n=navigator.userAgent.match(/Edge\//);t(n||!e||parseInt(e[1],10)>=43)}})).catch((function(){return!1}))}(e).then((function(e){return d=e}))}function g(e){var t=h[e.name],n={};n.promise=new s((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function m(e){var t=h[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function v(e,t){var n=h[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function _(e,t){return new s((function(n,r){if(h[e.name]=h[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return n(e.db);g(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var s=i.open.apply(i,o);t&&(s.onupgradeneeded=function(t){var n=s.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore("local-forage-detect-blob-support")}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),s.onerror=function(e){e.preventDefault(),r(s.error)},s.onsuccess=function(){n(s.result),m(e)}}))}function b(e){return _(e,!1)}function y(e){return _(e,!0)}function w(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.version<e.db.version,i=e.version>e.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),i||n){if(n){var o=e.db.version+1;o>e.version&&(e.version=o)}return!0}return!1}function S(e){return o([function(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n),i=0;i<t;i++)r[i]=e.charCodeAt(i);return n}(atob(e.data))],{type:e.type})}function x(e){return e&&e.__local_forage_encoded_blob}function E(e){var t=this,n=t._initReady().then((function(){var e=h[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return c(n,e,e),n}function A(e,t,n,r){void 0===r&&(r=1);try{var i=e.db.transaction(e.storeName,t);n(null,i)}catch(i){if(r>0&&(!e.db||"InvalidStateError"===i.name||"NotFoundError"===i.name))return s.resolve().then((function(){if(!e.db||"NotFoundError"===i.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),y(e)})).then((function(){return function(e){g(e);for(var t=h[e.name],n=t.forages,r=0;r<n.length;r++){var i=n[r];i._dbInfo.db&&(i._dbInfo.db.close(),i._dbInfo.db=null)}return e.db=null,b(e).then((function(t){return e.db=t,w(e)?y(e):t})).then((function(r){e.db=t.db=r;for(var i=0;i<n.length;i++)n[i]._dbInfo.db=r})).catch((function(t){throw v(e,t),t}))}(e).then((function(){A(e,t,n,r-1)}))})).catch(n);n(i)}}var C={_driver:"asyncStorage",_initStorage:function(e){var t=this,n={db:null};if(e)for(var r in e)n[r]=e[r];var i=h[n.name];i||(i={forages:[],db:null,dbReady:null,deferredOperations:[]},h[n.name]=i),i.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=E);var o=[];function a(){return s.resolve()}for(var c=0;c<i.forages.length;c++){var l=i.forages[c];l!==t&&o.push(l._initReady().catch(a))}var u=i.forages.slice(0);return s.all(o).then((function(){return n.db=i.db,b(n)})).then((function(e){return n.db=e,w(n,t._defaultConfig.version)?y(n):e})).then((function(e){n.db=i.db=e,t._dbInfo=n;for(var r=0;r<u.length;r++){var o=u[r];o!==t&&(o._dbInfo.db=n.db,o._dbInfo.version=n.version)}}))},_support:function(){try{if(!i||!i.open)return!1;var e="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),t="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!e||t)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}}(),iterate:function(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,o){if(i)return r(i);try{var s=o.objectStore(n._dbInfo.storeName).openCursor(),a=1;s.onsuccess=function(){var n=s.result;if(n){var r=n.value;x(r)&&(r=S(r));var i=e(r,n.key,a++);void 0!==i?t(i):n.continue()}else t()},s.onerror=function(){r(s.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=new s((function(t,r){n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,o){if(i)return r(i);try{var s=o.objectStore(n._dbInfo.storeName).get(e);s.onsuccess=function(){var e=s.result;void 0===e&&(e=null),x(e)&&(e=S(e)),t(e)},s.onerror=function(){r(s.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},setItem:function(e,t,n){var r=this;e=l(e);var i=new s((function(n,i){var o;r.ready().then((function(){return o=r._dbInfo,"[object Blob]"===f.call(t)?p(o.db).then((function(e){return e?t:(n=t,new s((function(e,t){var r=new FileReader;r.onerror=t,r.onloadend=function(t){var r=btoa(t.target.result||"");e({__local_forage_encoded_blob:!0,data:r,type:n.type})},r.readAsBinaryString(n)})));var n})):t})).then((function(t){A(r._dbInfo,"readwrite",(function(o,s){if(o)return i(o);try{var a=s.objectStore(r._dbInfo.storeName);null===t&&(t=void 0);var c=a.put(t,e);s.oncomplete=function(){void 0===t&&(t=null),n(t)},s.onabort=s.onerror=function(){var e=c.error?c.error:c.transaction.error;i(e)}}catch(e){i(e)}}))})).catch(i)}));return a(i,n),i},removeItem:function(e,t){var n=this;e=l(e);var r=new s((function(t,r){n.ready().then((function(){A(n._dbInfo,"readwrite",(function(i,o){if(i)return r(i);try{var s=o.objectStore(n._dbInfo.storeName).delete(e);o.oncomplete=function(){t()},o.onerror=function(){r(s.error)},o.onabort=function(){var e=s.error?s.error:s.transaction.error;r(e)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},clear:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){A(t._dbInfo,"readwrite",(function(r,i){if(r)return n(r);try{var o=i.objectStore(t._dbInfo.storeName).clear();i.oncomplete=function(){e()},i.onabort=i.onerror=function(){var e=o.error?o.error:o.transaction.error;n(e)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},length:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){A(t._dbInfo,"readonly",(function(r,i){if(r)return n(r);try{var o=i.objectStore(t._dbInfo.storeName).count();o.onsuccess=function(){e(o.result)},o.onerror=function(){n(o.error)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},key:function(e,t){var n=this,r=new s((function(t,r){e<0?t(null):n.ready().then((function(){A(n._dbInfo,"readonly",(function(i,o){if(i)return r(i);try{var s=o.objectStore(n._dbInfo.storeName),a=!1,c=s.openKeyCursor();c.onsuccess=function(){var n=c.result;n?0===e||a?t(n.key):(a=!0,n.advance(e)):t(null)},c.onerror=function(){r(c.error)}}catch(e){r(e)}}))})).catch(r)}));return a(r,t),r},keys:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){A(t._dbInfo,"readonly",(function(r,i){if(r)return n(r);try{var o=i.objectStore(t._dbInfo.storeName).openKeyCursor(),s=[];o.onsuccess=function(){var t=o.result;t?(s.push(t.key),t.continue()):e(s)},o.onerror=function(){n(o.error)}}catch(e){n(e)}}))})).catch(n)}));return a(n,e),n},dropInstance:function(e,t){t=u.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,o=this;if(e.name){var c=e.name===n.name&&o._dbInfo.db,l=c?s.resolve(o._dbInfo.db):b(e).then((function(t){var n=h[e.name],r=n.forages;n.db=t;for(var i=0;i<r.length;i++)r[i]._dbInfo.db=t;return t}));r=e.storeName?l.then((function(t){if(t.objectStoreNames.contains(e.storeName)){var n=t.version+1;g(e);var r=h[e.name],o=r.forages;t.close();for(var a=0;a<o.length;a++){var c=o[a];c._dbInfo.db=null,c._dbInfo.version=n}return new s((function(t,r){var o=i.open(e.name,n);o.onerror=function(e){o.result.close(),r(e)},o.onupgradeneeded=function(){o.result.deleteObjectStore(e.storeName)},o.onsuccess=function(){var e=o.result;e.close(),t(e)}})).then((function(e){r.db=e;for(var t=0;t<o.length;t++){var n=o[t];n._dbInfo.db=e,m(n._dbInfo)}})).catch((function(t){throw(v(e,t)||s.resolve()).catch((function(){})),t}))}})):l.then((function(t){g(e);var n=h[e.name],r=n.forages;t.close();for(var o=0;o<r.length;o++)r[o]._dbInfo.db=null;return new s((function(t,n){var r=i.deleteDatabase(e.name);r.onerror=r.onblocked=function(e){var t=r.result;t&&t.close(),n(e)},r.onsuccess=function(){var e=r.result;e&&e.close(),t(e)}})).then((function(e){n.db=e;for(var t=0;t<r.length;t++)m(r[t]._dbInfo)})).catch((function(t){throw(v(e,t)||s.resolve()).catch((function(){})),t}))}))}else r=s.reject("Invalid arguments");return a(r,t),r}},j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",T=/^~~local_forage_type~([^~]+)~/,O="__lfsc__:".length,k=O+"arbf".length,N=Object.prototype.toString;function I(e){var t,n,r,i,o,s=.75*e.length,a=e.length,c=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var l=new ArrayBuffer(s),u=new Uint8Array(l);for(t=0;t<a;t+=4)n=j.indexOf(e[t]),r=j.indexOf(e[t+1]),i=j.indexOf(e[t+2]),o=j.indexOf(e[t+3]),u[c++]=n<<2|r>>4,u[c++]=(15&r)<<4|i>>2,u[c++]=(3&i)<<6|63&o;return l}function M(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=j[n[t]>>2],r+=j[(3&n[t])<<4|n[t+1]>>4],r+=j[(15&n[t+1])<<2|n[t+2]>>6],r+=j[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}var R={serialize:function(e,t){var n="";if(e&&(n=N.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===N.call(e.buffer))){var r,i="__lfsc__:";e instanceof ArrayBuffer?(r=e,i+="arbf"):(r=e.buffer,"[object Int8Array]"===n?i+="si08":"[object Uint8Array]"===n?i+="ui08":"[object Uint8ClampedArray]"===n?i+="uic8":"[object Int16Array]"===n?i+="si16":"[object Uint16Array]"===n?i+="ur16":"[object Int32Array]"===n?i+="si32":"[object Uint32Array]"===n?i+="ui32":"[object Float32Array]"===n?i+="fl32":"[object Float64Array]"===n?i+="fl64":t(new Error("Failed to get type for BinaryArray"))),t(i+M(r))}else if("[object Blob]"===n){var o=new FileReader;o.onload=function(){var n="~~local_forage_type~"+e.type+"~"+M(this.result);t("__lfsc__:blob"+n)},o.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}},deserialize:function(e){if("__lfsc__:"!==e.substring(0,O))return JSON.parse(e);var t,n=e.substring(k),r=e.substring(O,k);if("blob"===r&&T.test(n)){var i=n.match(T);t=i[1],n=n.substring(i[0].length)}var s=I(n);switch(r){case"arbf":return s;case"blob":return o([s],{type:t});case"si08":return new Int8Array(s);case"ui08":return new Uint8Array(s);case"uic8":return new Uint8ClampedArray(s);case"si16":return new Int16Array(s);case"ur16":return new Uint16Array(s);case"si32":return new Int32Array(s);case"ui32":return new Uint32Array(s);case"fl32":return new Float32Array(s);case"fl64":return new Float64Array(s);default:throw new Error("Unkown type: "+r)}},stringToBuffer:I,bufferToString:M};function D(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function P(e,t,n,r,i,o){e.executeSql(n,r,i,(function(e,s){s.code===s.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,a){a.rows.length?o(e,s):D(e,t,(function(){e.executeSql(n,r,i,o)}),o)}),o):o(e,s)}),o)}function L(e,t,n,r){var i=this;e=l(e);var o=new s((function(o,s){i.ready().then((function(){void 0===t&&(t=null);var a=t,c=i._dbInfo;c.serializer.serialize(t,(function(t,l){l?s(l):c.db.transaction((function(n){P(n,c,"INSERT OR REPLACE INTO "+c.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){o(a)}),(function(e,t){s(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(r>0)return void o(L.apply(i,[e,a,n,r-1]));s(t)}}))}))})).catch(s)}));return a(o,n),o}function z(e){return new s((function(t,n){e.transaction((function(r){r.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var i=[],o=0;o<r.rows.length;o++)i.push(r.rows.item(o).name);t({db:e,storeNames:i})}),(function(e,t){n(t)}))}),(function(e){n(e)}))}))}var F={_driver:"webSQLStorage",_initStorage:function(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var i=new s((function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction((function(i){D(i,n,(function(){t._dbInfo=n,e()}),(function(e,t){r(t)}))}),r)}));return n.serializer=R,i},_support:"function"==typeof openDatabase,iterate:function(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT * FROM "+i.storeName,[],(function(n,r){for(var o=r.rows,s=o.length,a=0;a<s;a++){var c=o.item(a),l=c.value;if(l&&(l=i.serializer.deserialize(l)),void 0!==(l=e(l,c.key,a+1)))return void t(l)}t()}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=new s((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT * FROM "+i.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=i.serializer.deserialize(r)),t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},setItem:function(e,t,n){return L.apply(this,[e,t,n,1])},removeItem:function(e,t){var n=this;e=l(e);var r=new s((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"DELETE FROM "+i.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},clear:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"DELETE FROM "+r.storeName,[],(function(){e()}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},length:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"SELECT COUNT(key) as c FROM "+r.storeName,[],(function(t,n){var r=n.rows.item(0).c;e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},key:function(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var i=n._dbInfo;i.db.transaction((function(n){P(n,i,"SELECT key FROM "+i.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return a(r,t),r},keys:function(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){P(t,r,"SELECT key FROM "+r.storeName,[],(function(t,n){for(var r=[],i=0;i<n.rows.length;i++)r.push(n.rows.item(i).key);e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return a(n,e),n},dropInstance:function(e,t){t=u.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,i=this;return a(r=e.name?new s((function(t){var r;r=e.name===n.name?i._dbInfo.db:openDatabase(e.name,"","",0),e.storeName?t({db:r,storeNames:[e.storeName]}):t(z(r))})).then((function(e){return new s((function(t,n){e.db.transaction((function(r){function i(e){return new s((function(t,n){r.executeSql("DROP TABLE IF EXISTS "+e,[],(function(){t()}),(function(e,t){n(t)}))}))}for(var o=[],a=0,c=e.storeNames.length;a<c;a++)o.push(i(e.storeNames[a]));s.all(o).then((function(){t()})).catch((function(e){n(e)}))}),(function(e){n(e)}))}))})):s.reject("Invalid arguments"),t),r}};function B(e,t){var n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}function q(){return!function(){try{return localStorage.setItem("_localforage_support_test",!0),localStorage.removeItem("_localforage_support_test"),!1}catch(e){return!0}}()||localStorage.length>0}var H={_driver:"localStorageWrapper",_initStorage:function(e){var t={};if(e)for(var n in e)t[n]=e[n];return t.keyPrefix=B(e,this._defaultConfig),q()?(this._dbInfo=t,t.serializer=R,s.resolve()):s.reject()},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,i=r.length,o=localStorage.length,s=1,a=0;a<o;a++){var c=localStorage.key(a);if(0===c.indexOf(r)){var l=localStorage.getItem(c);if(l&&(l=t.serializer.deserialize(l)),void 0!==(l=e(l,c.substring(i),s++)))return l}}}));return a(r,t),r},getItem:function(e,t){var n=this;e=l(e);var r=n.ready().then((function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r}));return a(r,t),r},setItem:function(e,t,n){var r=this;e=l(e);var i=r.ready().then((function(){void 0===t&&(t=null);var n=t;return new s((function(i,o){var s=r._dbInfo;s.serializer.serialize(t,(function(t,r){if(r)o(r);else try{localStorage.setItem(s.keyPrefix+e,t),i(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||o(e),o(e)}}))}))}));return a(i,n),i},removeItem:function(e,t){var n=this;e=l(e);var r=n.ready().then((function(){var t=n._dbInfo;localStorage.removeItem(t.keyPrefix+e)}));return a(r,t),r},clear:function(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,n=localStorage.length-1;n>=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return a(n,e),n},length:function(e){var t=this.keys().then((function(e){return e.length}));return a(t,e),t},key:function(e,t){var n=this,r=n.ready().then((function(){var t,r=n._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(r.keyPrefix.length)),t}));return a(r,t),r},keys:function(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo,n=localStorage.length,r=[],i=0;i<n;i++){var o=localStorage.key(i);0===o.indexOf(e.keyPrefix)&&r.push(o.substring(e.keyPrefix.length))}return r}));return a(n,e),n},dropInstance:function(e,t){if(t=u.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){var n=this.config();e.name=e.name||n.name,e.storeName=e.storeName||n.storeName}var r,i=this;return a(r=e.name?new s((function(t){e.storeName?t(B(e,i._defaultConfig)):t(e.name+"/")})).then((function(e){for(var t=localStorage.length-1;t>=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):s.reject("Invalid arguments"),t),r}},U=function(e,t){for(var n,r,i=e.length,o=0;o<i;){if((n=e[o])===(r=t)||"number"==typeof n&&"number"==typeof r&&isNaN(n)&&isNaN(r))return!0;o++}return!1},$=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},W={},G={},V={INDEXEDDB:C,WEBSQL:F,LOCALSTORAGE:H},J=[V.INDEXEDDB._driver,V.WEBSQL._driver,V.LOCALSTORAGE._driver],X=["dropInstance"],Q=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(X),Y={description:"",driver:J.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function K(e,t){e[t]=function(){var n=arguments;return e.ready().then((function(){return e[t].apply(e,n)}))}}function Z(){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&($(t[n])?arguments[0][n]=t[n].slice():arguments[0][n]=t[n])}return arguments[0]}var ee=new(function(){function e(t){for(var n in function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),V)if(V.hasOwnProperty(n)){var r=V[n],i=r._driver;this[n]=i,W[i]||this.defineDriver(r)}this._defaultConfig=Z({},Y),this._config=Z({},this._defaultConfig,t),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return e.prototype.config=function(e){if("object"===(void 0===e?"undefined":r(e))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var t in e){if("storeName"===t&&(e[t]=e[t].replace(/\W/g,"_")),"version"===t&&"number"!=typeof e[t])return new Error("Database version must be a number.");this._config[t]=e[t]}return!("driver"in e)||!e.driver||this.setDriver(this._config.driver)}return"string"==typeof e?this._config[e]:this._config},e.prototype.defineDriver=function(e,t,n){var r=new s((function(t,n){try{var r=e._driver,i=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!e._driver)return void n(i);for(var o=Q.concat("_initStorage"),c=0,l=o.length;c<l;c++){var u=o[c];if((!U(X,u)||e[u])&&"function"!=typeof e[u])return void n(i)}!function(){for(var t=function(e){return function(){var t=new Error("Method "+e+" is not implemented by the current driver"),n=s.reject(t);return a(n,arguments[arguments.length-1]),n}},n=0,r=X.length;n<r;n++){var i=X[n];e[i]||(e[i]=t(i))}}();var d=function(n){W[r]&&console.info("Redefining LocalForage driver: "+r),W[r]=e,G[r]=n,t()};"_support"in e?e._support&&"function"==typeof e._support?e._support().then(d,n):d(!!e._support):d(!0)}catch(e){n(e)}}));return c(r,t,n),r},e.prototype.driver=function(){return this._driver||null},e.prototype.getDriver=function(e,t,n){var r=W[e]?s.resolve(W[e]):s.reject(new Error("Driver not found."));return c(r,t,n),r},e.prototype.getSerializer=function(e){var t=s.resolve(R);return c(t,e),t},e.prototype.ready=function(e){var t=this,n=t._driverSet.then((function(){return null===t._ready&&(t._ready=t._initDriver()),t._ready}));return c(n,e,e),n},e.prototype.setDriver=function(e,t,n){var r=this;$(e)||(e=[e]);var i=this._getSupportedDrivers(e);function o(){r._config.driver=r.driver()}function a(e){return r._extend(e),o(),r._ready=r._initStorage(r._config),r._ready}var l=null!==this._driverSet?this._driverSet.catch((function(){return s.resolve()})):s.resolve();return this._driverSet=l.then((function(){var e=i[0];return r._dbInfo=null,r._ready=null,r.getDriver(e).then((function(e){r._driver=e._driver,o(),r._wrapLibraryMethodsWithReady(),r._initDriver=function(e){return function(){var t=0;return function n(){for(;t<e.length;){var i=e[t];return t++,r._dbInfo=null,r._ready=null,r.getDriver(i).then(a).catch(n)}o();var c=new Error("No available storage method found.");return r._driverSet=s.reject(c),r._driverSet}()}}(i)}))})).catch((function(){o();var e=new Error("No available storage method found.");return r._driverSet=s.reject(e),r._driverSet})),c(this._driverSet,t,n),this._driverSet},e.prototype.supports=function(e){return!!G[e]},e.prototype._extend=function(e){Z(this,e)},e.prototype._getSupportedDrivers=function(e){for(var t=[],n=0,r=e.length;n<r;n++){var i=e[n];this.supports(i)&&t.push(i)}return t},e.prototype._wrapLibraryMethodsWithReady=function(){for(var e=0,t=Q.length;e<t;e++)K(this,Q[e])},e.prototype.createInstance=function(t){return new e(t)},e}());t.exports=ee},{3:3}]},{},[4])(4)}).call(this,n(12))},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(e){n(498),n(158),n(500);var r=n(2);n.d(t,"b",(function(){return r.d})),n.d(t,"a",(function(){return r.b})),e.$build=r.e.$build,e.$iq=r.e.$iq,e.$msg=r.e.$msg,e.$pres=r.e.$pres,e.Strophe=r.e.Strophe;const{b64_sha1:i}=r.c}).call(this,n(12))},function(e,t,n){var r=n(49),i=n(335),o=n(336),s=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":s&&s in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(353),i=n(356);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){var r=n(41);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},,function(e,t,n){var r=n(62),i=n(71);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},function(e,t,n){var r=n(13),i=n(19),o=n(58),s=n(31),a=n(60),c=function(e,t,n){var l,u,d,h=e&c.F,f=e&c.G,p=e&c.S,g=e&c.P,m=e&c.B,v=e&c.W,_=f?i:i[t]||(i[t]={}),b=_.prototype,y=f?r:p?r[t]:(r[t]||{}).prototype;for(l in f&&(n=t),n)(u=!h&&y&&void 0!==y[l])&&a(_,l)||(d=u?y[l]:n[l],_[l]=f&&"function"!=typeof y[l]?n[l]:m&&u?o(d,r):v&&y[l]==d?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(d):g&&"function"==typeof d?o(Function.call,d):d,g&&((_.virtual||(_.virtual={}))[l]=d,e&c.R&&b&&!b[l]&&s(b,l,d)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var r=n(40),i=n(140);e.exports=n(32)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(82)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){var r=n(98),i=n(102),o=n(29);e.exports=function(e){return o(e)?r(e):i(e)}},function(e,t,n){(function(n){var r,i,o;i=[],void 0===(o="function"==typeof(r=function(){"use strict";var e=void 0!==n?n:this||window,t=document,r=t.documentElement,i="body",o=e.BSN={},s=o.supports=[],a="data-toggle",c="delay",l="target",u="animation",d="onmouseleave"in t?["mouseenter","mouseleave"]:["mouseover","mouseout"],h="getAttribute",f="setAttribute",p="parentNode",g="length",m="style",v="push",_="active",b="left",y="top",w=/\b(top|bottom|left|right)+/,S=0,x="WebkitTransition"in r[m]||"Transition".toLowerCase()in r[m],E="WebkitTransition"in r[m]?"Webkit".toLowerCase()+"TransitionEnd":"Transition".toLowerCase()+"end",A="WebkitDuration"in r[m]?"Webkit".toLowerCase()+"TransitionDuration":"Transition".toLowerCase()+"Duration",C=function(e){e.focus?e.focus():e.setActive()},j=function(e,t){e.classList.add(t)},T=function(e,t){e.classList.remove(t)},O=function(e,t){return e.classList.contains(t)},k=function(e,t){return[].slice.call(e.getElementsByClassName(t))},N=function(e,n){return"object"==typeof e?e:(n||t).querySelector(e)},I=function(e,n){var r=n.charAt(0),i=n.substr(1);if("."===r){for(;e&&e!==t;e=e[p])if(null!==N(n,e[p])&&O(e,i))return e}else if("#"===r)for(;e&&e!==t;e=e[p])if(e.id===i)return e;return!1},M=function(e,t,n,r){r=r||!1,e.addEventListener(t,n,r)},R=function(e,t,n,r){r=r||!1,e.removeEventListener(t,n,r)},D=function(e,t,n,r){M(e,t,(function i(o){n(o),R(e,t,i,r)}),r)},P=!!function(){var t=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t=!0}});D(e,"testPassive",null,n)}catch(e){}return t}()&&{passive:!0},L=function(t){var n=x?e.getComputedStyle(t)[A]:0;return n="number"!=typeof(n=parseFloat(n))||isNaN(n)?0:1e3*n},z=function(e,t){var n=0;L(e)?D(e,E,(function(e){!n&&t(e),n=1})):setTimeout((function(){!n&&t(),n=1}),17)},F=function(e,t,n){var r=new CustomEvent(e+".bs."+t);r.relatedTarget=n,this.dispatchEvent(r)},B=function(n,o,s,a){var c,l,u,d,h,f,p=o.offsetWidth,g=o.offsetHeight,v=r.clientWidth||t[i].clientWidth,_=r.clientHeight||t[i].clientHeight,S=n.getBoundingClientRect(),x=a===t[i]?{y:e.pageYOffset||r.scrollTop,x:e.pageXOffset||r.scrollLeft}:{x:a.offsetLeft+a.scrollLeft,y:a.offsetTop+a.scrollTop},E=S.right-S[b],A=S.bottom-S.top,C=O(o,"popover"),j=N(".arrow",o),T=S.top+A/2-g/2<0,k=S[b]+E/2-p/2<0,I=S[b]+p/2+E/2>=v,M=S.top+g/2+A/2>=_,R=S.top-g<0,D=S[b]-p<0,P=S.top+g+A>=_,L=S[b]+p+E>=v;s="right"===(s=(s="bottom"===(s=(s=(s===b||"right"===s)&&D&&L?y:s)===y&&R?"bottom":s)&&P?y:s)===b&&D?"right":s)&&L?b:s,-1===o.className.indexOf(s)&&(o.className=o.className.replace(w,s)),h=j.offsetWidth,f=j.offsetHeight,s===b||"right"===s?(l=s===b?S[b]+x.x-p-(C?h:0):S[b]+x.x+E,T?(c=S.top+x.y,u=A/2-h):M?(c=S.top+x.y-g+A,u=g-A/2-h):(c=S.top+x.y-g/2+A/2,u=g/2-(C?.9*f:f/2))):s!==y&&"bottom"!==s||(c=s===y?S.top+x.y-g-(C?f:0):S.top+x.y+A,k?(l=0,d=S[b]+E/2-h):I?(l=v-1.01*p,d=p-(v-S[b])+E/2-h/2):(l=S[b]+x.x-p/2+E/2,d=p/2-(C?h:h/2))),o[m].top=c+"px",o[m][b]=l+"px",u&&(j[m].top=u+"px"),d&&(j[m][b]=d+"px")};o.version="2.0.27";var q=function(e){e=N(e);var t=this,n=I(e,".alert"),r=function(r){n=I(r[l],".alert"),(e=N('[data-dismiss="alert"]',n))&&n&&(e===r[l]||e.contains(r[l]))&&t.close()},i=function(){F.call(n,"closed","alert"),R(e,"click",r),n[p].removeChild(n)};this.close=function(){n&&e&&O(n,"show")&&(F.call(n,"close","alert"),T(n,"show"),n&&(O(n,"fade")?z(n,i):i()))},"Alert"in e||M(e,"click",r),e.Alert=t};s[v](["Alert",q,'[data-dismiss="alert"]']);var H=function(e){e=N(e);var n=!1,r="checked",i=function(t){var i="LABEL"===t[l].tagName?t[l]:"LABEL"===t[l][p].tagName?t[l][p]:null;if(i){var o=k(i[p],"btn"),s=i.getElementsByTagName("INPUT")[0];if(s){if("checkbox"===s.type&&(s[r]?(T(i,_),s[h](r),s.removeAttribute(r),s[r]=!1):(j(i,_),s[h](r),s[f](r,r),s[r]=!0),n||(n=!0,F.call(s,"change","button"),F.call(e,"change","button"))),"radio"===s.type&&!n&&(!s[r]||0===t.screenX&&0==t.screenY)){j(i,_),j(i,"focus"),s[f](r,r),s[r]=!0,F.call(s,"change","button"),F.call(e,"change","button"),n=!0;for(var a=0,c=o[g];a<c;a++){var u=o[a],d=u.getElementsByTagName("INPUT")[0];u!==i&&O(u,_)&&(T(u,_),d.removeAttribute(r),d[r]=!1,F.call(d,"change","button"))}}setTimeout((function(){n=!1}),50)}}},o=function(e){j(e[l][p],"focus")},s=function(e){T(e[l][p],"focus")};if(!("Button"in e)){M(e,"click",i),M(e,"keyup",(function(e){32===(e.which||e.keyCode)&&e[l]===t.activeElement&&i(e)})),M(e,"keydown",(function(e){32===(e.which||e.keyCode)&&e.preventDefault()}));for(var a=k(e,"btn"),c=0;c<a.length;c++){var u=a[c].getElementsByTagName("INPUT")[0];M(u,"focus",o),M(u,"blur",s)}}var d=k(e,"btn"),m=d[g];for(c=0;c<m;c++)!O(d[c],_)&&N("input:checked",d[c])&&j(d[c],_);e.Button=this};s[v](["Button",H,"["+a+'="buttons"]']);var U=function(e,t){e=N(e),t=t||{};var n,r,i,o,s,a=null,c=null,l=this,u=e[h]("data-parent"),d=function(e,t){F.call(e,"hide","collapse"),e.isAnimating=!0,e[m].height=e.scrollHeight+"px",T(e,"collapse"),T(e,"show"),j(e,"collapsing"),e.offsetWidth,e[m].height="0px",z(e,(function(){e.isAnimating=!1,e[f]("aria-expanded","false"),t[f]("aria-expanded","false"),T(e,"collapsing"),j(e,"collapse"),e[m].height="",F.call(e,"hidden","collapse")}))};this.toggle=function(e){e.preventDefault(),O(c,"show")?l.hide():l.show()},this.hide=function(){c.isAnimating||(d(c,e),j(e,"collapsed"))},this.show=function(){var t,i;a&&(n=N(".collapse.show",a),r=n&&(N('[data-target="#'+n.id+'"]',a)||N('[href="#'+n.id+'"]',a))),(!c.isAnimating||n&&!n.isAnimating)&&(r&&n!==c&&(d(n,r),j(r,"collapsed")),i=e,F.call(t=c,"show","collapse"),t.isAnimating=!0,j(t,"collapsing"),T(t,"collapse"),t[m].height=t.scrollHeight+"px",z(t,(function(){t.isAnimating=!1,t[f]("aria-expanded","true"),i[f]("aria-expanded","true"),T(t,"collapsing"),j(t,"collapse"),j(t,"show"),t[m].height="",F.call(t,"shown","collapse")})),T(e,"collapsed"))},"Collapse"in e||M(e,"click",l.toggle),i=e.href&&e[h]("href"),o=e[h]("data-target"),s=i||o&&"#"===o.charAt(0)&&o,(c=s&&N(s)).isAnimating=!1,a=N(t.parent)||u&&I(e,u),e.Collapse=l};s[v](["Collapse",U,"["+a+'="collapse"]']);var $=function(e,n){e=N(e),this.persist=!0===n||"true"===e[h]("data-persist")||!1;var r=this,i=e[p],o=null,s=N(".dropdown-menu",i),c=function(){for(var e=s.children,t=[],n=0;n<e[g];n++)e[n].children[g]&&"A"===e[n].children[0].tagName&&t[v](e[n].children[0]),"A"===e[n].tagName&&t[v](e[n]);return t}(),u=function(e){(e.href&&"#"===e.href.slice(-1)||e[p]&&e[p].href&&"#"===e[p].href.slice(-1))&&this.preventDefault()},d=function(){var n=e.open?M:R;n(t,"click",m),n(t,"keydown",b),n(t,"keyup",y),n(t,"focus",m,!0)},m=function(t){var n=t[l],i=n&&(n[h](a)||n[p]&&h in n[p]&&n[p][h](a));("focus"!==t.type||n!==e&&n!==s&&!s.contains(n))&&(n!==s&&!s.contains(n)||!r.persist&&!i)&&(o=n===e||e.contains(n)?e:null,S(),u.call(t,n))},_=function(t){o=e,w(),u.call(t,t[l])},b=function(e){var t=e.which||e.keyCode;38!==t&&40!==t||e.preventDefault()},y=function(n){var i=n.which||n.keyCode,a=t.activeElement,l=c.indexOf(a),u=a===e,d=s.contains(a),h=a[p]===s||a[p][p]===s;h&&(l=u?0:38===i?l>1?l-1:0:40===i&&l<c[g]-1?l+1:l,c[l]&&C(c[l])),(c[g]&&h||!c[g]&&(d||u)||!d)&&e.open&&27===i&&(r.toggle(),o=null)},w=function(){F.call(i,"show","dropdown",o),j(s,"show"),j(i,"show"),e[f]("aria-expanded",!0),F.call(i,"shown","dropdown",o),e.open=!0,R(e,"click",_),setTimeout((function(){C(s.getElementsByTagName("INPUT")[0]||e),d()}),1)},S=function(){F.call(i,"hide","dropdown",o),T(s,"show"),T(i,"show"),e[f]("aria-expanded",!1),F.call(i,"hidden","dropdown",o),e.open=!1,d(),C(e),setTimeout((function(){M(e,"click",_)}),1)};e.open=!1,this.toggle=function(){O(i,"show")&&e.open?S():w()},"Dropdown"in e||(!1 in s&&s[f]("tabindex","0"),M(e,"click",_)),e.Dropdown=r};s[v](["Dropdown",$,"["+a+'="dropdown"]']);var W=function(n,o){var s=(n=N(n))[h]("data-target")||n[h]("href"),a=N(s),c=O(n,"modal")?n:a;if(O(n,"modal")&&(n=null),c){o=o||{},this.keyboard=!1!==o.keyboard&&"false"!==c[h]("data-keyboard"),this.backdrop="static"!==o.backdrop&&"static"!==c[h]("data-backdrop")||"static",this.backdrop=!1!==o.backdrop&&"false"!==c[h]("data-backdrop")&&this.backdrop,this[u]=!!O(c,"fade"),this.content=o.content,c.isAnimating=!1;var d,v,_,y,w,E=this,A=null,I=k(r,"fixed-top").concat(k(r,"fixed-bottom")),D=function(){var n,r=e.getComputedStyle(t[i]),o=parseInt(r.paddingRight,10);if(d&&(t[i][m].paddingRight=o+v+"px",c[m].paddingRight=v+"px",I[g]))for(var s=0;s<I[g];s++)n=e.getComputedStyle(I[s]).paddingRight,I[s][m].paddingRight=parseInt(n)+v+"px"},B=function(){var n,o,s;d=t[i].clientWidth<(n=r.getBoundingClientRect(),e.innerWidth||n.right-Math.abs(n[b])),(s=t.createElement("div")).className="modal-scrollbar-measure",t[i].appendChild(s),o=s.offsetWidth-s.clientWidth,t[i].removeChild(s),v=o},q=function(){(_=N(".modal-backdrop"))&&null!==_&&"object"==typeof _&&(S=0,t[i].removeChild(_),_=null)},H=function(){C(c),c.isAnimating=!1,F.call(c,"shown","modal",A),M(e,"resize",E.update,P),M(c,"click",W),M(t,"keydown",$)},U=function(){c[m].display="",n&&C(n),F.call(c,"hidden","modal"),k(t,"modal show")[0]||(function(){if(t[i][m].paddingRight="",c[m].paddingRight="",I[g])for(var e=0;e<I[g];e++)I[e][m].paddingRight=""}(),T(t[i],"modal-open"),_&&O(_,"fade")?(T(_,"show"),z(_,q)):q(),R(e,"resize",E.update,P),R(c,"click",W),R(t,"keydown",$)),c.isAnimating=!1},$=function(e){c.isAnimating||E.keyboard&&27==e.which&&O(c,"show")&&E.hide()},W=function(e){if(!c.isAnimating){var t=e[l];O(c,"show")&&("modal"===t[p][h]("data-dismiss")||"modal"===t[h]("data-dismiss")||t===c&&"static"!==E.backdrop)&&(E.hide(),A=null,e.preventDefault())}};this.toggle=function(){O(c,"show")?this.hide():this.show()},this.show=function(){O(c,"show")||c.isAnimating||(clearTimeout(w),w=setTimeout((function(){c.isAnimating=!0,F.call(c,"show","modal",A);var e,n=k(t,"modal show")[0];n&&n!==c&&("modalTrigger"in n&&n.modalTrigger.Modal.hide(),"Modal"in n&&n.Modal.hide()),E.backdrop&&!S&&!_&&(e=t.createElement("div"),null===(_=N(".modal-backdrop"))&&(e[f]("class","modal-backdrop"+(E[u]?" fade":"")),_=e,t[i].appendChild(_)),S=1),_&&!O(_,"show")&&(_.offsetWidth,y=L(_),j(_,"show")),setTimeout((function(){c[m].display="block",B(),D(),j(t[i],"modal-open"),j(c,"show"),c[f]("aria-hidden",!1),O(c,"fade")?z(c,H):H()}),x&&_&&y?y:1)}),1))},this.hide=function(){!c.isAnimating&&O(c,"show")&&(clearTimeout(w),w=setTimeout((function(){c.isAnimating=!0,F.call(c,"hide","modal"),_=N(".modal-backdrop"),y=_&&L(_),T(c,"show"),c[f]("aria-hidden",!0),setTimeout((function(){O(c,"fade")?z(c,U):U()}),x&&_&&y?y:2)}),2))},this.setContent=function(e){N(".modal-content",c).innerHTML=e},this.update=function(){O(c,"show")&&(B(),D())},n&&!("Modal"in n)&&M(n,"click",(function(e){if(!c.isAnimating){var t=e[l];(t=t.hasAttribute("data-target")||t.hasAttribute("href")?t:t[p])!==n||O(c,"show")||(c.modalTrigger=n,A=n,E.show(),e.preventDefault())}})),E.content&&E.setContent(E.content),n?(n.Modal=E,c.modalTrigger=n):c.Modal=E}};s[v](["Modal",W,"["+a+'="modal"]']);var G=function(n,r){n=N(n),r=r||{};var o=n[h]("data-trigger"),s=n[h]("data-animation"),a=n[h]("data-placement"),p=n[h]("data-dismissible"),g=n[h]("data-delay"),v=n[h]("data-container"),_='<button type="button" class="close">×</button>',b=N(r.container),w=N(v),S=I(n,".modal"),x=I(n,".fixed-top"),E=I(n,".fixed-bottom");this.template=r.template?r.template:null,this.trigger=r.trigger?r.trigger:o||"hover",this[u]=r[u]&&"fade"!==r[u]?r[u]:s||"fade",this.placement=r.placement?r.placement:a||y,this[c]=parseInt(r[c]||g)||200,this.dismissible=!(!r.dismissible&&"true"!==p),this.container=b||w||x||E||S||t[i];var A=this,C=r.title||n[h]("data-title")||null,k=r.content||n[h]("data-content")||null;if(k||this.template){var D=null,L=0,q=this.placement,H=function(e){null!==D&&e[l]===N(".close",D)&&A.hide()},U=function(r){"click"!=A.trigger&&"focus"!=A.trigger||!A.dismissible&&r(n,"blur",A.hide),A.dismissible&&r(t,"click",H),r(e,"resize",A.hide,P)},$=function(){U(M),F.call(n,"shown","popover")},W=function(){U(R),A.container.removeChild(D),L=null,D=null,F.call(n,"hidden","popover")};this.toggle=function(){null===D?A.show():A.hide()},this.show=function(){clearTimeout(L),L=setTimeout((function(){null===D&&(q=A.placement,function(){C=r.title||n[h]("data-title"),k=(k=r.content||n[h]("data-content"))?k.trim():null,D=t.createElement("div");var e=t.createElement("div");if(e[f]("class","arrow"),D.appendChild(e),null!==k&&null===A.template){if(D[f]("role","tooltip"),null!==C){var i=t.createElement("h3");i[f]("class","popover-header"),i.innerHTML=A.dismissible?C+_:C,D.appendChild(i)}var o=t.createElement("div");o[f]("class","popover-body"),o.innerHTML=A.dismissible&&null===C?k+_:k,D.appendChild(o)}else{var s=t.createElement("div");A.template=A.template.trim(),s.innerHTML=A.template,D.innerHTML=s.firstChild.innerHTML}A.container.appendChild(D),D[m].display="block",D[f]("class","popover bs-popover-"+q+" "+A[u])}(),B(n,D,q,A.container),!O(D,"show")&&j(D,"show"),F.call(n,"show","popover"),A[u]?z(D,$):$())}),20)},this.hide=function(){clearTimeout(L),L=setTimeout((function(){D&&null!==D&&O(D,"show")&&(F.call(n,"hide","popover"),T(D,"show"),A[u]?z(D,W):W())}),A[c])},"Popover"in n||("hover"===A.trigger?(M(n,d[0],A.show),A.dismissible||M(n,d[1],A.hide)):"click"!=A.trigger&&"focus"!=A.trigger||M(n,A.trigger,A.toggle)),n.Popover=A}};s[v](["Popover",G,"["+a+'="popover"]']);var V=function(e,t){var n=(e=N(e))[h]("data-height");t=t||{},this.height=!!x&&(t.height||"true"===n);var r,i,o,s,a,c,l,u=this,d=I(e,".nav"),v=!1,y=d&&N(".dropdown-toggle",d),w=function(){v[m].height="",T(v,"collapsing"),d.isAnimating=!1},S=function(){v?c?w():setTimeout((function(){v[m].height=l+"px",v.offsetWidth,z(v,w)}),50):d.isAnimating=!1,F.call(r,"shown","tab",i)},E=function(){v&&(o[m].float=b,s[m].float=b,a=o.scrollHeight),j(s,_),F.call(r,"show","tab",i),T(o,_),F.call(i,"hidden","tab",r),v&&(l=s.scrollHeight,c=l===a,j(v,"collapsing"),v[m].height=a+"px",v.offsetHeight,o[m].float="",s[m].float=""),O(s,"fade")?setTimeout((function(){j(s,"show"),z(s,S)}),20):S()};if(d){d.isAnimating=!1;var A=function(){var e,t=k(d,_);return 1!==t[g]||O(t[0][p],"dropdown")?t[g]>1&&(e=t[t[g]-1]):e=t[0],e},C=function(){return N(A()[h]("href"))};this.show=function(){s=N((r=r||e)[h]("href")),i=A(),o=C(),d.isAnimating=!0,T(i,_),i[f]("aria-selected","false"),j(r,_),r[f]("aria-selected","true"),y&&(O(e[p],"dropdown-menu")?O(y,_)||j(y,_):O(y,_)&&T(y,_)),F.call(i,"hide","tab",r),O(o,"fade")?(T(o,"show"),z(o,E)):E()},"Tab"in e||M(e,"click",(function(e){e.preventDefault(),r=e.currentTarget,!d.isAnimating&&!O(r,_)&&u.show()})),u.height&&(v=C()[p]),e.Tab=u}};s[v](["Tab",V,"["+a+'="tab"]']);var J=function(e,t){t=t||{};var n=(e=N(e))[h]("data-animation"),r=e[h]("data-autohide"),i=e[h]("data-delay");this.animation=!1===t.animation||"false"===n?0:1,this.autohide=!1===t.autohide||"false"===r?0:1,this[c]=parseInt(t[c]||i)||500;var o=this,s=0,a=I(e,".toast"),l=function(){T(a,"showing"),j(a,"show"),F.call(a,"shown","toast"),o.autohide&&o.hide()},u=function(){j(a,"hide"),F.call(a,"hidden","toast")},d=function(){T(a,"show"),o.animation?z(a,u):u()},f=function(){clearTimeout(s),s=null,j(a,"hide"),R(e,"click",o.hide),e.Toast=null,e=null,a=null};this.show=function(){a&&(F.call(a,"show","toast"),o.animation&&j(a,"fade"),T(a,"hide"),j(a,"showing"),o.animation?z(a,l):l())},this.hide=function(e){a&&O(a,"show")&&(F.call(a,"hide","toast"),e?d():s=setTimeout(d,o[c]))},this.dispose=function(){a&&O(a,"show")&&(T(a,"show"),o.animation?z(a,f):f())},"Toast"in e||M(e,"click",o.hide),e.Toast=o};s[v](["Toast",J,'[data-dismiss="toast"]']);var X=function(n,r){r=r||{};var o=(n=N(n))[h]("data-animation"),s=n[h]("data-placement"),a=n[h]("data-delay"),l=n[h]("data-container"),p=N(r.container),g=N(l),v=I(n,".modal"),_=I(n,".fixed-top"),w=I(n,".fixed-bottom");this[u]=r[u]&&"fade"!==r[u]?r[u]:o||"fade",this.placement=r.placement?r.placement:s||y,this[c]=parseInt(r[c]||a)||200,this.container=p||g||_||w||v||t[i];var S=this,x=0,E=this.placement,A=null,C=n[h]("title")||n[h]("data-title")||n[h]("data-original-title");if(C&&""!=C){var k=function(){M(e,"resize",S.hide,P),F.call(n,"shown","tooltip")},D=function(){R(e,"resize",S.hide,P),S.container.removeChild(A),A=null,x=null,F.call(n,"hidden","tooltip")};this.show=function(){clearTimeout(x),x=setTimeout((function(){null===A&&(E=S.placement,!1!==function(){if((C=n[h]("title")||n[h]("data-title")||n[h]("data-original-title"))&&""!==C){(A=t.createElement("div"))[f]("role","tooltip"),A[m][b]="0",A[m].top="0";var e=t.createElement("div");e[f]("class","arrow"),A.appendChild(e);var r=t.createElement("div");r[f]("class","tooltip-inner"),A.appendChild(r),r.innerHTML=C,S.container.appendChild(A),A[f]("class","tooltip bs-tooltip-"+E+" "+S[u])}}()&&(B(n,A,E,S.container),!O(A,"show")&&j(A,"show"),F.call(n,"show","tooltip"),S[u]?z(A,k):k()))}),20)},this.hide=function(){clearTimeout(x),x=setTimeout((function(){A&&O(A,"show")&&(F.call(n,"hide","tooltip"),T(A,"show"),S[u]?z(A,D):D())}),S[c])},this.toggle=function(){A?S.hide():S.show()},"Tooltip"in n||(n[f]("data-original-title",C),n.removeAttribute("title"),M(n,d[0],S.show),M(n,d[1],S.hide)),n.Tooltip=S}};s[v](["Tooltip",X,"["+a+'="tooltip"]']);var Q=function(e,t){for(var n=0,r=t[g];n<r;n++)new e(t[n])},Y=o.initCallback=function(e){e=e||t;for(var n=0,r=s[g];n<r;n++)Q(s[n][1],e.querySelectorAll(s[n][2]))};return t[i]?Y():M(t,"DOMContentLoaded",(function(){Y()})),{Alert:q,Button:H,Collapse:U,Dropdown:$,Modal:W,Popover:G,Tab:V,Toast:J,Tooltip:X}})?r.apply(t,i):r)||(e.exports=o)}).call(this,n(12))},function(e,t,n){var r,i,o;
 /*!
  * URI.js - Mutating URLs
  *
@@ -20,7 +20,7 @@
  * Licensed under
  *   MIT License http://www.opensource.org/licenses/mit-license
  *
- */!function(o,a){"use strict";e.exports?e.exports=a(n(116),n(117),n(118)):(i=[n(116),n(117),n(118)],void 0===(s="function"==typeof(r=a)?r.apply(t,i):r)||(e.exports=s))}(0,(function(e,t,n,r){"use strict";var i=r&&r.URI;function s(e,t){var n=arguments.length>=1,r=arguments.length>=2;if(!(this instanceof s))return n?r?new s(e,t):new s(e):new s;if(void 0===e){if(n)throw new TypeError("undefined is not a valid argument for URI");e="undefined"!=typeof location?location.href+"":""}if(null===e&&n)throw new TypeError("null is not a valid argument for URI");return this.href(e),void 0!==t?this.absoluteTo(t):this}s.version="1.19.2";var o=s.prototype,a=Object.prototype.hasOwnProperty;function c(e){return e.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function l(e){return void 0===e?"Undefined":String(Object.prototype.toString.call(e)).slice(8,-1)}function u(e){return"Array"===l(e)}function d(e,t){var n,r,i={};if("RegExp"===l(t))i=null;else if(u(t))for(n=0,r=t.length;n<r;n++)i[t[n]]=!0;else i[t]=!0;for(n=0,r=e.length;n<r;n++){(i&&void 0!==i[e[n]]||!i&&t.test(e[n]))&&(e.splice(n,1),r--,n--)}return e}function h(e,t){var n,r;if(u(t)){for(n=0,r=t.length;n<r;n++)if(!h(e,t[n]))return!1;return!0}var i=l(t);for(n=0,r=e.length;n<r;n++)if("RegExp"===i){if("string"==typeof e[n]&&e[n].match(t))return!0}else if(e[n]===t)return!0;return!1}function f(e,t){if(!u(e)||!u(t))return!1;if(e.length!==t.length)return!1;e.sort(),t.sort();for(var n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}function p(e){return e.replace(/^\/+|\/+$/g,"")}function g(e){return escape(e)}function m(e){return encodeURIComponent(e).replace(/[!'()*]/g,g).replace(/\*/g,"%2A")}s._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:s.preventInvalidHostname,duplicateQueryParameters:s.duplicateQueryParameters,escapeQuerySpace:s.escapeQuerySpace}},s.preventInvalidHostname=!1,s.duplicateQueryParameters=!1,s.escapeQuerySpace=!0,s.protocol_expression=/^[a-z][a-z0-9.+-]*$/i,s.idn_expression=/[^a-z0-9\._-]/i,s.punycode_expression=/(xn--)/i,s.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,s.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,s.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi,s.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},s.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},s.hostProtocols=["http","https"],s.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,s.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},s.getDomAttribute=function(e){if(e&&e.nodeName){var t=e.nodeName.toLowerCase();if("input"!==t||"image"===e.type)return s.domAttributes[t]}},s.encode=m,s.decode=decodeURIComponent,s.iso8859=function(){s.encode=escape,s.decode=unescape},s.unicode=function(){s.encode=m,s.decode=decodeURIComponent},s.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/gi,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/gi,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/gi,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},s.encodeQuery=function(e,t){var n=s.encode(e+"");return void 0===t&&(t=s.escapeQuerySpace),t?n.replace(/%20/g,"+"):n},s.decodeQuery=function(e,t){e+="",void 0===t&&(t=s.escapeQuerySpace);try{return s.decode(t?e.replace(/\+/g,"%20"):e)}catch(t){return e}};var v,_={encode:"encode",decode:"decode"},b=function(e,t){return function(n){try{return s[t](n+"").replace(s.characters[e][t].expression,(function(n){return s.characters[e][t].map[n]}))}catch(e){return n}}};for(v in _)s[v+"PathSegment"]=b("pathname",_[v]),s[v+"UrnPathSegment"]=b("urnpath",_[v]);var y=function(e,t,n){return function(r){var i;i=n?function(e){return s[t](s[n](e))}:s[t];for(var o=(r+"").split(e),a=0,c=o.length;a<c;a++)o[a]=i(o[a]);return o.join(e)}};function w(e){return function(t,n){return void 0===t?this._parts[e]||"":(this._parts[e]=t||null,this.build(!n),this)}}function S(e,t){return function(n,r){return void 0===n?this._parts[e]||"":(null!==n&&(n+="").charAt(0)===t&&(n=n.substring(1)),this._parts[e]=n,this.build(!r),this)}}s.decodePath=y("/","decodePathSegment"),s.decodeUrnPath=y(":","decodeUrnPathSegment"),s.recodePath=y("/","encodePathSegment","decode"),s.recodeUrnPath=y(":","encodeUrnPathSegment","decode"),s.encodeReserved=b("reserved","encode"),s.parse=function(e,t){var n;return t||(t={preventInvalidHostname:s.preventInvalidHostname}),(n=e.indexOf("#"))>-1&&(t.fragment=e.substring(n+1)||null,e=e.substring(0,n)),(n=e.indexOf("?"))>-1&&(t.query=e.substring(n+1)||null,e=e.substring(0,n)),"//"===e.substring(0,2)?(t.protocol=null,e=e.substring(2),e=s.parseAuthority(e,t)):(n=e.indexOf(":"))>-1&&(t.protocol=e.substring(0,n)||null,t.protocol&&!t.protocol.match(s.protocol_expression)?t.protocol=void 0:"//"===e.substring(n+1,n+3)?(e=e.substring(n+3),e=s.parseAuthority(e,t)):(e=e.substring(n+1),t.urn=!0)),t.path=e,t},s.parseHost=function(e,t){e||(e="");var n,r,i=(e=e.replace(/\\/g,"/")).indexOf("/");if(-1===i&&(i=e.length),"["===e.charAt(0))n=e.indexOf("]"),t.hostname=e.substring(1,n)||null,t.port=e.substring(n+2,i)||null,"/"===t.port&&(t.port=null);else{var o=e.indexOf(":"),a=e.indexOf("/"),c=e.indexOf(":",o+1);-1!==c&&(-1===a||c<a)?(t.hostname=e.substring(0,i)||null,t.port=null):(r=e.substring(0,i).split(":"),t.hostname=r[0]||null,t.port=r[1]||null)}return t.hostname&&"/"!==e.substring(i).charAt(0)&&(i++,e="/"+e),t.preventInvalidHostname&&s.ensureValidHostname(t.hostname,t.protocol),t.port&&s.ensureValidPort(t.port),e.substring(i)||"/"},s.parseAuthority=function(e,t){return e=s.parseUserinfo(e,t),s.parseHost(e,t)},s.parseUserinfo=function(e,t){var n,r=e.indexOf("/"),i=e.lastIndexOf("@",r>-1?r:e.length-1);return i>-1&&(-1===r||i<r)?(n=e.substring(0,i).split(":"),t.username=n[0]?s.decode(n[0]):null,n.shift(),t.password=n[0]?s.decode(n.join(":")):null,e=e.substring(i+1)):(t.username=null,t.password=null),e},s.parseQuery=function(e,t){if(!e)return{};if(!(e=e.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,"")))return{};for(var n,r,i,o={},c=e.split("&"),l=c.length,u=0;u<l;u++)n=c[u].split("="),r=s.decodeQuery(n.shift(),t),i=n.length?s.decodeQuery(n.join("="),t):null,a.call(o,r)?("string"!=typeof o[r]&&null!==o[r]||(o[r]=[o[r]]),o[r].push(i)):o[r]=i;return o},s.build=function(e){var t="",n=!1;return e.protocol&&(t+=e.protocol+":"),e.urn||!t&&!e.hostname||(t+="//",n=!0),t+=s.buildAuthority(e)||"","string"==typeof e.path&&("/"!==e.path.charAt(0)&&n&&(t+="/"),t+=e.path),"string"==typeof e.query&&e.query&&(t+="?"+e.query),"string"==typeof e.fragment&&e.fragment&&(t+="#"+e.fragment),t},s.buildHost=function(e){var t="";return e.hostname?(s.ip6_expression.test(e.hostname)?t+="["+e.hostname+"]":t+=e.hostname,e.port&&(t+=":"+e.port),t):""},s.buildAuthority=function(e){return s.buildUserinfo(e)+s.buildHost(e)},s.buildUserinfo=function(e){var t="";return e.username&&(t+=s.encode(e.username)),e.password&&(t+=":"+s.encode(e.password)),t&&(t+="@"),t},s.buildQuery=function(e,t,n){var r,i,o,c,l="";for(i in e)if(a.call(e,i))if(u(e[i]))for(r={},o=0,c=e[i].length;o<c;o++)void 0!==e[i][o]&&void 0===r[e[i][o]+""]&&(l+="&"+s.buildQueryParameter(i,e[i][o],n),!0!==t&&(r[e[i][o]+""]=!0));else void 0!==e[i]&&(l+="&"+s.buildQueryParameter(i,e[i],n));return l.substring(1)},s.buildQueryParameter=function(e,t,n){return s.encodeQuery(e,n)+(null!==t?"="+s.encodeQuery(t,n):"")},s.addQuery=function(e,t,n){if("object"==typeof t)for(var r in t)a.call(t,r)&&s.addQuery(e,r,t[r]);else{if("string"!=typeof t)throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");if(void 0===e[t])return void(e[t]=n);"string"==typeof e[t]&&(e[t]=[e[t]]),u(n)||(n=[n]),e[t]=(e[t]||[]).concat(n)}},s.setQuery=function(e,t,n){if("object"==typeof t)for(var r in t)a.call(t,r)&&s.setQuery(e,r,t[r]);else{if("string"!=typeof t)throw new TypeError("URI.setQuery() accepts an object, string as the name parameter");e[t]=void 0===n?null:n}},s.removeQuery=function(e,t,n){var r,i,o;if(u(t))for(r=0,i=t.length;r<i;r++)e[t[r]]=void 0;else if("RegExp"===l(t))for(o in e)t.test(o)&&(e[o]=void 0);else if("object"==typeof t)for(o in t)a.call(t,o)&&s.removeQuery(e,o,t[o]);else{if("string"!=typeof t)throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter");void 0!==n?"RegExp"===l(n)?!u(e[t])&&n.test(e[t])?e[t]=void 0:e[t]=d(e[t],n):e[t]!==String(n)||u(n)&&1!==n.length?u(e[t])&&(e[t]=d(e[t],n)):e[t]=void 0:e[t]=void 0}},s.hasQuery=function(e,t,n,r){switch(l(t)){case"String":break;case"RegExp":for(var i in e)if(a.call(e,i)&&t.test(i)&&(void 0===n||s.hasQuery(e,i,n)))return!0;return!1;case"Object":for(var o in t)if(a.call(t,o)&&!s.hasQuery(e,o,t[o]))return!1;return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter")}switch(l(n)){case"Undefined":return t in e;case"Boolean":return n===Boolean(u(e[t])?e[t].length:e[t]);case"Function":return!!n(e[t],t,e);case"Array":return!!u(e[t])&&(r?h:f)(e[t],n);case"RegExp":return u(e[t])?!!r&&h(e[t],n):Boolean(e[t]&&e[t].match(n));case"Number":n=String(n);case"String":return u(e[t])?!!r&&h(e[t],n):e[t]===n;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")}},s.joinPaths=function(){for(var e=[],t=[],n=0,r=0;r<arguments.length;r++){var i=new s(arguments[r]);e.push(i);for(var o=i.segment(),a=0;a<o.length;a++)"string"==typeof o[a]&&t.push(o[a]),o[a]&&n++}if(!t.length||!n)return new s("");var c=new s("").segment(t);return""!==e[0].path()&&"/"!==e[0].path().slice(0,1)||c.path("/"+c.path()),c.normalize()},s.commonPath=function(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n++)if(e.charAt(n)!==t.charAt(n)){n--;break}return n<1?e.charAt(0)===t.charAt(0)&&"/"===e.charAt(0)?"/":"":("/"===e.charAt(n)&&"/"===t.charAt(n)||(n=e.substring(0,n).lastIndexOf("/")),e.substring(0,n+1))},s.withinString=function(e,t,n){n||(n={});var r=n.start||s.findUri.start,i=n.end||s.findUri.end,o=n.trim||s.findUri.trim,a=n.parens||s.findUri.parens,c=/[a-z0-9-]=["']?$/i;for(r.lastIndex=0;;){var l=r.exec(e);if(!l)break;var u=l.index;if(n.ignoreHtml){var d=e.slice(Math.max(u-3,0),u);if(d&&c.test(d))continue}for(var h=u+e.slice(u).search(i),f=e.slice(u,h),p=-1;;){var g=a.exec(f);if(!g)break;var m=g.index+g[0].length;p=Math.max(p,m)}if(!((f=p>-1?f.slice(0,p)+f.slice(p).replace(o,""):f.replace(o,"")).length<=l[0].length||n.ignore&&n.ignore.test(f))){var v=t(f,u,h=u+f.length,e);void 0!==v?(v=String(v),e=e.slice(0,u)+v+e.slice(h),r.lastIndex=u+v.length):r.lastIndex=h}}return r.lastIndex=0,e},s.ensureValidHostname=function(t,n){var r=!!t,i=!1;if(!!n&&(i=h(s.hostProtocols,n)),i&&!r)throw new TypeError("Hostname cannot be empty, if protocol is "+n);if(t&&t.match(s.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+t+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(t).match(s.invalid_hostname_characters))throw new TypeError('Hostname "'+t+'" contains characters other than [A-Z0-9.-:_]')}},s.ensureValidPort=function(e){if(e){var t=Number(e);if(!(/^[0-9]+$/.test(t)&&t>0&&t<65536))throw new TypeError('Port "'+e+'" is not a valid port')}},s.noConflict=function(e){if(e){var t={URI:this.noConflict()};return r.URITemplate&&"function"==typeof r.URITemplate.noConflict&&(t.URITemplate=r.URITemplate.noConflict()),r.IPv6&&"function"==typeof r.IPv6.noConflict&&(t.IPv6=r.IPv6.noConflict()),r.SecondLevelDomains&&"function"==typeof r.SecondLevelDomains.noConflict&&(t.SecondLevelDomains=r.SecondLevelDomains.noConflict()),t}return r.URI===this&&(r.URI=i),this},o.build=function(e){return!0===e?this._deferred_build=!0:(void 0===e||this._deferred_build)&&(this._string=s.build(this._parts),this._deferred_build=!1),this},o.clone=function(){return new s(this)},o.valueOf=o.toString=function(){return this.build(!1)._string},o.protocol=w("protocol"),o.username=w("username"),o.password=w("password"),o.hostname=w("hostname"),o.port=w("port"),o.query=S("query","?"),o.fragment=S("fragment","#"),o.search=function(e,t){var n=this.query(e,t);return"string"==typeof n&&n.length?"?"+n:n},o.hash=function(e,t){var n=this.fragment(e,t);return"string"==typeof n&&n.length?"#"+n:n},o.pathname=function(e,t){if(void 0===e||!0===e){var n=this._parts.path||(this._parts.hostname?"/":"");return e?(this._parts.urn?s.decodeUrnPath:s.decodePath)(n):n}return this._parts.urn?this._parts.path=e?s.recodeUrnPath(e):"":this._parts.path=e?s.recodePath(e):"/",this.build(!t),this},o.path=o.pathname,o.href=function(e,t){var n;if(void 0===e)return this.toString();this._string="",this._parts=s._parts();var r=e instanceof s,i="object"==typeof e&&(e.hostname||e.path||e.pathname);e.nodeName&&(e=e[s.getDomAttribute(e)]||"",i=!1);if(!r&&i&&void 0!==e.pathname&&(e=e.toString()),"string"==typeof e||e instanceof String)this._parts=s.parse(String(e),this._parts);else{if(!r&&!i)throw new TypeError("invalid input");var o=r?e._parts:e;for(n in o)"query"!==n&&a.call(this._parts,n)&&(this._parts[n]=o[n]);o.query&&this.query(o.query,!1)}return this.build(!t),this},o.is=function(e){var t=!1,r=!1,i=!1,o=!1,a=!1,c=!1,l=!1,u=!this._parts.urn;switch(this._parts.hostname&&(u=!1,r=s.ip4_expression.test(this._parts.hostname),i=s.ip6_expression.test(this._parts.hostname),a=(o=!(t=r||i))&&n&&n.has(this._parts.hostname),c=o&&s.idn_expression.test(this._parts.hostname),l=o&&s.punycode_expression.test(this._parts.hostname)),e.toLowerCase()){case"relative":return u;case"absolute":return!u;case"domain":case"name":return o;case"sld":return a;case"ip":return t;case"ip4":case"ipv4":case"inet4":return r;case"ip6":case"ipv6":case"inet6":return i;case"idn":return c;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return l}return null};var x=o.protocol,E=o.port,A=o.hostname;o.protocol=function(e,t){if(e&&!(e=e.replace(/:(\/\/)?$/,"")).match(s.protocol_expression))throw new TypeError('Protocol "'+e+"\" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]");return x.call(this,e,t)},o.scheme=o.protocol,o.port=function(e,t){return this._parts.urn?void 0===e?"":this:(void 0!==e&&(0===e&&(e=null),e&&(":"===(e+="").charAt(0)&&(e=e.substring(1)),s.ensureValidPort(e))),E.call(this,e,t))},o.hostname=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0!==e){var n={preventInvalidHostname:this._parts.preventInvalidHostname};if("/"!==s.parseHost(e,n))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');e=n.hostname,this._parts.preventInvalidHostname&&s.ensureValidHostname(e,this._parts.protocol)}return A.call(this,e,t)},o.origin=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){var n=this.protocol();return this.authority()?(n?n+"://":"")+this.authority():""}var r=s(e);return this.protocol(r.protocol()).authority(r.authority()).build(!t),this},o.host=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e)return this._parts.hostname?s.buildHost(this._parts):"";if("/"!==s.parseHost(e,this._parts))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');return this.build(!t),this},o.authority=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e)return this._parts.hostname?s.buildAuthority(this._parts):"";if("/"!==s.parseAuthority(e,this._parts))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');return this.build(!t),this},o.userinfo=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){var n=s.buildUserinfo(this._parts);return n?n.substring(0,n.length-1):n}return"@"!==e[e.length-1]&&(e+="@"),s.parseUserinfo(e,this._parts),this.build(!t),this},o.resource=function(e,t){var n;return void 0===e?this.path()+this.search()+this.hash():(n=s.parse(e),this._parts.path=n.path,this._parts.query=n.query,this._parts.fragment=n.fragment,this.build(!t),this)},o.subdomain=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var n=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,n)||""}var r=this._parts.hostname.length-this.domain().length,i=this._parts.hostname.substring(0,r),o=new RegExp("^"+c(i));if(e&&"."!==e.charAt(e.length-1)&&(e+="."),-1!==e.indexOf(":"))throw new TypeError("Domains cannot contain colons");return e&&s.ensureValidHostname(e,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(o,e),this.build(!t),this},o.domain=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("boolean"==typeof e&&(t=e,e=void 0),void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var n=this._parts.hostname.match(/\./g);if(n&&n.length<2)return this._parts.hostname;var r=this._parts.hostname.length-this.tld(t).length-1;return r=this._parts.hostname.lastIndexOf(".",r-1)+1,this._parts.hostname.substring(r)||""}if(!e)throw new TypeError("cannot set domain empty");if(-1!==e.indexOf(":"))throw new TypeError("Domains cannot contain colons");if(s.ensureValidHostname(e,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=e;else{var i=new RegExp(c(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(i,e)}return this.build(!t),this},o.tld=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("boolean"==typeof e&&(t=e,e=void 0),void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var r=this._parts.hostname.lastIndexOf("."),i=this._parts.hostname.substring(r+1);return!0!==t&&n&&n.list[i.toLowerCase()]&&n.get(this._parts.hostname)||i}var s;if(!e)throw new TypeError("cannot set TLD empty");if(e.match(/[^a-zA-Z0-9-]/)){if(!n||!n.is(e))throw new TypeError('TLD "'+e+'" contains characters other than [A-Z0-9]');s=new RegExp(c(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(s,e)}else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");s=new RegExp(c(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(s,e)}return this.build(!t),this},o.directory=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e||!0===e){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var n=this._parts.path.length-this.filename().length-1,r=this._parts.path.substring(0,n)||(this._parts.hostname?"/":"");return e?s.decodePath(r):r}var i=this._parts.path.length-this.filename().length,o=this._parts.path.substring(0,i),a=new RegExp("^"+c(o));return this.is("relative")||(e||(e="/"),"/"!==e.charAt(0)&&(e="/"+e)),e&&"/"!==e.charAt(e.length-1)&&(e+="/"),e=s.recodePath(e),this._parts.path=this._parts.path.replace(a,e),this.build(!t),this},o.filename=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("string"!=typeof e){if(!this._parts.path||"/"===this._parts.path)return"";var n=this._parts.path.lastIndexOf("/"),r=this._parts.path.substring(n+1);return e?s.decodePathSegment(r):r}var i=!1;"/"===e.charAt(0)&&(e=e.substring(1)),e.match(/\.?\//)&&(i=!0);var o=new RegExp(c(this.filename())+"$");return e=s.recodePath(e),this._parts.path=this._parts.path.replace(o,e),i?this.normalizePath(t):this.build(!t),this},o.suffix=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e||!0===e){if(!this._parts.path||"/"===this._parts.path)return"";var n,r,i=this.filename(),o=i.lastIndexOf(".");return-1===o?"":(n=i.substring(o+1),r=/^[a-z0-9%]+$/i.test(n)?n:"",e?s.decodePathSegment(r):r)}"."===e.charAt(0)&&(e=e.substring(1));var a,l=this.suffix();if(l)a=e?new RegExp(c(l)+"$"):new RegExp(c("."+l)+"$");else{if(!e)return this;this._parts.path+="."+s.recodePath(e)}return a&&(e=s.recodePath(e),this._parts.path=this._parts.path.replace(a,e)),this.build(!t),this},o.segment=function(e,t,n){var r=this._parts.urn?":":"/",i=this.path(),s="/"===i.substring(0,1),o=i.split(r);if(void 0!==e&&"number"!=typeof e&&(n=t,t=e,e=void 0),void 0!==e&&"number"!=typeof e)throw new Error('Bad segment "'+e+'", must be 0-based integer');if(s&&o.shift(),e<0&&(e=Math.max(o.length+e,0)),void 0===t)return void 0===e?o:o[e];if(null===e||void 0===o[e])if(u(t)){o=[];for(var a=0,c=t.length;a<c;a++)(t[a].length||o.length&&o[o.length-1].length)&&(o.length&&!o[o.length-1].length&&o.pop(),o.push(p(t[a])))}else(t||"string"==typeof t)&&(t=p(t),""===o[o.length-1]?o[o.length-1]=t:o.push(t));else t?o[e]=p(t):o.splice(e,1);return s&&o.unshift(""),this.path(o.join(r),n)},o.segmentCoded=function(e,t,n){var r,i,o;if("number"!=typeof e&&(n=t,t=e,e=void 0),void 0===t){if(u(r=this.segment(e,t,n)))for(i=0,o=r.length;i<o;i++)r[i]=s.decode(r[i]);else r=void 0!==r?s.decode(r):void 0;return r}if(u(t))for(i=0,o=t.length;i<o;i++)t[i]=s.encode(t[i]);else t="string"==typeof t||t instanceof String?s.encode(t):t;return this.segment(e,t,n)};var C=o.query;return o.query=function(e,t){if(!0===e)return s.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("function"==typeof e){var n=s.parseQuery(this._parts.query,this._parts.escapeQuerySpace),r=e.call(this,n);return this._parts.query=s.buildQuery(r||n,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!t),this}return void 0!==e&&"string"!=typeof e?(this._parts.query=s.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!t),this):C.call(this,e,t)},o.setQuery=function(e,t,n){var r=s.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("string"==typeof e||e instanceof String)r[e]=void 0!==t?t:null;else{if("object"!=typeof e)throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");for(var i in e)a.call(e,i)&&(r[i]=e[i])}return this._parts.query=s.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},o.addQuery=function(e,t,n){var r=s.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return s.addQuery(r,e,void 0===t?null:t),this._parts.query=s.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},o.removeQuery=function(e,t,n){var r=s.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return s.removeQuery(r,e,t),this._parts.query=s.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},o.hasQuery=function(e,t,n){var r=s.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return s.hasQuery(r,e,t,n)},o.setSearch=o.setQuery,o.addSearch=o.addQuery,o.removeSearch=o.removeQuery,o.hasSearch=o.hasQuery,o.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()},o.normalizeProtocol=function(e){return"string"==typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!e)),this},o.normalizeHostname=function(n){return this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&t&&(this._parts.hostname=t.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!n)),this},o.normalizePort=function(e){return"string"==typeof this._parts.protocol&&this._parts.port===s.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!e)),this},o.normalizePath=function(e){var t,n=this._parts.path;if(!n)return this;if(this._parts.urn)return this._parts.path=s.recodeUrnPath(this._parts.path),this.build(!e),this;if("/"===this._parts.path)return this;var r,i,o="";for("/"!==(n=s.recodePath(n)).charAt(0)&&(t=!0,n="/"+n),"/.."!==n.slice(-3)&&"/."!==n.slice(-2)||(n+="/"),n=n.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/"),t&&(o=n.substring(1).match(/^(\.\.\/)+/)||"")&&(o=o[0]);-1!==(r=n.search(/\/\.\.(\/|$)/));)0!==r?(-1===(i=n.substring(0,r).lastIndexOf("/"))&&(i=r),n=n.substring(0,i)+n.substring(r+3)):n=n.substring(3);return t&&this.is("relative")&&(n=o+n.substring(1)),this._parts.path=n,this.build(!e),this},o.normalizePathname=o.normalizePath,o.normalizeQuery=function(e){return"string"==typeof this._parts.query&&(this._parts.query.length?this.query(s.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!e)),this},o.normalizeFragment=function(e){return this._parts.fragment||(this._parts.fragment=null,this.build(!e)),this},o.normalizeSearch=o.normalizeQuery,o.normalizeHash=o.normalizeFragment,o.iso8859=function(){var e=s.encode,t=s.decode;s.encode=escape,s.decode=decodeURIComponent;try{this.normalize()}finally{s.encode=e,s.decode=t}return this},o.unicode=function(){var e=s.encode,t=s.decode;s.encode=m,s.decode=unescape;try{this.normalize()}finally{s.encode=e,s.decode=t}return this},o.readable=function(){var t=this.clone();t.username("").password("").normalize();var n="";if(t._parts.protocol&&(n+=t._parts.protocol+"://"),t._parts.hostname&&(t.is("punycode")&&e?(n+=e.toUnicode(t._parts.hostname),t._parts.port&&(n+=":"+t._parts.port)):n+=t.host()),t._parts.hostname&&t._parts.path&&"/"!==t._parts.path.charAt(0)&&(n+="/"),n+=t.path(!0),t._parts.query){for(var r="",i=0,o=t._parts.query.split("&"),a=o.length;i<a;i++){var c=(o[i]||"").split("=");r+="&"+s.decodeQuery(c[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"),void 0!==c[1]&&(r+="="+s.decodeQuery(c[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}n+="?"+r.substring(1)}return n+=s.decodeQuery(t.hash(),!0)},o.absoluteTo=function(e){var t,n,r,i=this.clone(),o=["protocol","username","password","hostname","port"];if(this._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(e instanceof s||(e=new s(e)),i._parts.protocol)return i;if(i._parts.protocol=e._parts.protocol,this._parts.hostname)return i;for(n=0;r=o[n];n++)i._parts[r]=e._parts[r];return i._parts.path?(".."===i._parts.path.substring(-2)&&(i._parts.path+="/"),"/"!==i.path().charAt(0)&&(t=(t=e.directory())||(0===e.path().indexOf("/")?"/":""),i._parts.path=(t?t+"/":"")+i._parts.path,i.normalizePath())):(i._parts.path=e._parts.path,i._parts.query||(i._parts.query=e._parts.query)),i.build(),i},o.relativeTo=function(e){var t,n,r,i,o,a=this.clone().normalize();if(a._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(e=new s(e).normalize(),t=a._parts,n=e._parts,i=a.path(),o=e.path(),"/"!==i.charAt(0))throw new Error("URI is already relative");if("/"!==o.charAt(0))throw new Error("Cannot calculate a URI relative to another relative URI");if(t.protocol===n.protocol&&(t.protocol=null),t.username!==n.username||t.password!==n.password)return a.build();if(null!==t.protocol||null!==t.username||null!==t.password)return a.build();if(t.hostname!==n.hostname||t.port!==n.port)return a.build();if(t.hostname=null,t.port=null,i===o)return t.path="",a.build();if(!(r=s.commonPath(i,o)))return a.build();var c=n.path.substring(r.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");return t.path=c+t.path.substring(r.length)||"./",a.build()},o.equals=function(e){var t,n,r,i,o,c=this.clone(),l=new s(e),d={};if(c.normalize(),l.normalize(),c.toString()===l.toString())return!0;if(r=c.query(),i=l.query(),c.query(""),l.query(""),c.toString()!==l.toString())return!1;if(r.length!==i.length)return!1;for(o in t=s.parseQuery(r,this._parts.escapeQuerySpace),n=s.parseQuery(i,this._parts.escapeQuerySpace),t)if(a.call(t,o)){if(u(t[o])){if(!f(t[o],n[o]))return!1}else if(t[o]!==n[o])return!1;d[o]=!0}for(o in n)if(a.call(n,o)&&!d[o])return!1;return!0},o.preventInvalidHostname=function(e){return this._parts.preventInvalidHostname=!!e,this},o.duplicateQueryParameters=function(e){return this._parts.duplicateQueryParameters=!!e,this},o.escapeQuerySpace=function(e){return this._parts.escapeQuerySpace=!!e,this},s}))},function(e,t,n){var r=n(89),i=n(25),s=n(90),o=n(56),a=n(68),c=Math.max;e.exports=function(e,t,n,l){e=i(e)?e:a(e),n=n&&!l?o(n):0;var u=e.length;return n<0&&(n=c(u+n,0)),s(e)?n<=u&&e.indexOf(t,n)>-1:!!u&&r(e,t,n)>-1}},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t){e.exports=function(e){return e}},function(e,t,n){var r=n(38);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){(function(e,r){var i;
+ */!function(s,a){"use strict";e.exports?e.exports=a(n(155),n(156),n(157)):(i=[n(155),n(156),n(157)],void 0===(o="function"==typeof(r=a)?r.apply(t,i):r)||(e.exports=o))}(0,(function(e,t,n,r){"use strict";var i=r&&r.URI;function o(e,t){var n=arguments.length>=1,r=arguments.length>=2;if(!(this instanceof o))return n?r?new o(e,t):new o(e):new o;if(void 0===e){if(n)throw new TypeError("undefined is not a valid argument for URI");e="undefined"!=typeof location?location.href+"":""}if(null===e&&n)throw new TypeError("null is not a valid argument for URI");return this.href(e),void 0!==t?this.absoluteTo(t):this}o.version="1.19.2";var s=o.prototype,a=Object.prototype.hasOwnProperty;function c(e){return e.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function l(e){return void 0===e?"Undefined":String(Object.prototype.toString.call(e)).slice(8,-1)}function u(e){return"Array"===l(e)}function d(e,t){var n,r,i={};if("RegExp"===l(t))i=null;else if(u(t))for(n=0,r=t.length;n<r;n++)i[t[n]]=!0;else i[t]=!0;for(n=0,r=e.length;n<r;n++){(i&&void 0!==i[e[n]]||!i&&t.test(e[n]))&&(e.splice(n,1),r--,n--)}return e}function h(e,t){var n,r;if(u(t)){for(n=0,r=t.length;n<r;n++)if(!h(e,t[n]))return!1;return!0}var i=l(t);for(n=0,r=e.length;n<r;n++)if("RegExp"===i){if("string"==typeof e[n]&&e[n].match(t))return!0}else if(e[n]===t)return!0;return!1}function f(e,t){if(!u(e)||!u(t))return!1;if(e.length!==t.length)return!1;e.sort(),t.sort();for(var n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}function p(e){return e.replace(/^\/+|\/+$/g,"")}function g(e){return escape(e)}function m(e){return encodeURIComponent(e).replace(/[!'()*]/g,g).replace(/\*/g,"%2A")}o._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:o.preventInvalidHostname,duplicateQueryParameters:o.duplicateQueryParameters,escapeQuerySpace:o.escapeQuerySpace}},o.preventInvalidHostname=!1,o.duplicateQueryParameters=!1,o.escapeQuerySpace=!0,o.protocol_expression=/^[a-z][a-z0-9.+-]*$/i,o.idn_expression=/[^a-z0-9\._-]/i,o.punycode_expression=/(xn--)/i,o.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,o.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,o.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi,o.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},o.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},o.hostProtocols=["http","https"],o.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,o.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},o.getDomAttribute=function(e){if(e&&e.nodeName){var t=e.nodeName.toLowerCase();if("input"!==t||"image"===e.type)return o.domAttributes[t]}},o.encode=m,o.decode=decodeURIComponent,o.iso8859=function(){o.encode=escape,o.decode=unescape},o.unicode=function(){o.encode=m,o.decode=decodeURIComponent},o.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/gi,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/gi,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/gi,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},o.encodeQuery=function(e,t){var n=o.encode(e+"");return void 0===t&&(t=o.escapeQuerySpace),t?n.replace(/%20/g,"+"):n},o.decodeQuery=function(e,t){e+="",void 0===t&&(t=o.escapeQuerySpace);try{return o.decode(t?e.replace(/\+/g,"%20"):e)}catch(t){return e}};var v,_={encode:"encode",decode:"decode"},b=function(e,t){return function(n){try{return o[t](n+"").replace(o.characters[e][t].expression,(function(n){return o.characters[e][t].map[n]}))}catch(e){return n}}};for(v in _)o[v+"PathSegment"]=b("pathname",_[v]),o[v+"UrnPathSegment"]=b("urnpath",_[v]);var y=function(e,t,n){return function(r){var i;i=n?function(e){return o[t](o[n](e))}:o[t];for(var s=(r+"").split(e),a=0,c=s.length;a<c;a++)s[a]=i(s[a]);return s.join(e)}};function w(e){return function(t,n){return void 0===t?this._parts[e]||"":(this._parts[e]=t||null,this.build(!n),this)}}function S(e,t){return function(n,r){return void 0===n?this._parts[e]||"":(null!==n&&(n+="").charAt(0)===t&&(n=n.substring(1)),this._parts[e]=n,this.build(!r),this)}}o.decodePath=y("/","decodePathSegment"),o.decodeUrnPath=y(":","decodeUrnPathSegment"),o.recodePath=y("/","encodePathSegment","decode"),o.recodeUrnPath=y(":","encodeUrnPathSegment","decode"),o.encodeReserved=b("reserved","encode"),o.parse=function(e,t){var n;return t||(t={preventInvalidHostname:o.preventInvalidHostname}),(n=e.indexOf("#"))>-1&&(t.fragment=e.substring(n+1)||null,e=e.substring(0,n)),(n=e.indexOf("?"))>-1&&(t.query=e.substring(n+1)||null,e=e.substring(0,n)),"//"===e.substring(0,2)?(t.protocol=null,e=e.substring(2),e=o.parseAuthority(e,t)):(n=e.indexOf(":"))>-1&&(t.protocol=e.substring(0,n)||null,t.protocol&&!t.protocol.match(o.protocol_expression)?t.protocol=void 0:"//"===e.substring(n+1,n+3)?(e=e.substring(n+3),e=o.parseAuthority(e,t)):(e=e.substring(n+1),t.urn=!0)),t.path=e,t},o.parseHost=function(e,t){e||(e="");var n,r,i=(e=e.replace(/\\/g,"/")).indexOf("/");if(-1===i&&(i=e.length),"["===e.charAt(0))n=e.indexOf("]"),t.hostname=e.substring(1,n)||null,t.port=e.substring(n+2,i)||null,"/"===t.port&&(t.port=null);else{var s=e.indexOf(":"),a=e.indexOf("/"),c=e.indexOf(":",s+1);-1!==c&&(-1===a||c<a)?(t.hostname=e.substring(0,i)||null,t.port=null):(r=e.substring(0,i).split(":"),t.hostname=r[0]||null,t.port=r[1]||null)}return t.hostname&&"/"!==e.substring(i).charAt(0)&&(i++,e="/"+e),t.preventInvalidHostname&&o.ensureValidHostname(t.hostname,t.protocol),t.port&&o.ensureValidPort(t.port),e.substring(i)||"/"},o.parseAuthority=function(e,t){return e=o.parseUserinfo(e,t),o.parseHost(e,t)},o.parseUserinfo=function(e,t){var n,r=e.indexOf("/"),i=e.lastIndexOf("@",r>-1?r:e.length-1);return i>-1&&(-1===r||i<r)?(n=e.substring(0,i).split(":"),t.username=n[0]?o.decode(n[0]):null,n.shift(),t.password=n[0]?o.decode(n.join(":")):null,e=e.substring(i+1)):(t.username=null,t.password=null),e},o.parseQuery=function(e,t){if(!e)return{};if(!(e=e.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,"")))return{};for(var n,r,i,s={},c=e.split("&"),l=c.length,u=0;u<l;u++)n=c[u].split("="),r=o.decodeQuery(n.shift(),t),i=n.length?o.decodeQuery(n.join("="),t):null,a.call(s,r)?("string"!=typeof s[r]&&null!==s[r]||(s[r]=[s[r]]),s[r].push(i)):s[r]=i;return s},o.build=function(e){var t="",n=!1;return e.protocol&&(t+=e.protocol+":"),e.urn||!t&&!e.hostname||(t+="//",n=!0),t+=o.buildAuthority(e)||"","string"==typeof e.path&&("/"!==e.path.charAt(0)&&n&&(t+="/"),t+=e.path),"string"==typeof e.query&&e.query&&(t+="?"+e.query),"string"==typeof e.fragment&&e.fragment&&(t+="#"+e.fragment),t},o.buildHost=function(e){var t="";return e.hostname?(o.ip6_expression.test(e.hostname)?t+="["+e.hostname+"]":t+=e.hostname,e.port&&(t+=":"+e.port),t):""},o.buildAuthority=function(e){return o.buildUserinfo(e)+o.buildHost(e)},o.buildUserinfo=function(e){var t="";return e.username&&(t+=o.encode(e.username)),e.password&&(t+=":"+o.encode(e.password)),t&&(t+="@"),t},o.buildQuery=function(e,t,n){var r,i,s,c,l="";for(i in e)if(a.call(e,i))if(u(e[i]))for(r={},s=0,c=e[i].length;s<c;s++)void 0!==e[i][s]&&void 0===r[e[i][s]+""]&&(l+="&"+o.buildQueryParameter(i,e[i][s],n),!0!==t&&(r[e[i][s]+""]=!0));else void 0!==e[i]&&(l+="&"+o.buildQueryParameter(i,e[i],n));return l.substring(1)},o.buildQueryParameter=function(e,t,n){return o.encodeQuery(e,n)+(null!==t?"="+o.encodeQuery(t,n):"")},o.addQuery=function(e,t,n){if("object"==typeof t)for(var r in t)a.call(t,r)&&o.addQuery(e,r,t[r]);else{if("string"!=typeof t)throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");if(void 0===e[t])return void(e[t]=n);"string"==typeof e[t]&&(e[t]=[e[t]]),u(n)||(n=[n]),e[t]=(e[t]||[]).concat(n)}},o.setQuery=function(e,t,n){if("object"==typeof t)for(var r in t)a.call(t,r)&&o.setQuery(e,r,t[r]);else{if("string"!=typeof t)throw new TypeError("URI.setQuery() accepts an object, string as the name parameter");e[t]=void 0===n?null:n}},o.removeQuery=function(e,t,n){var r,i,s;if(u(t))for(r=0,i=t.length;r<i;r++)e[t[r]]=void 0;else if("RegExp"===l(t))for(s in e)t.test(s)&&(e[s]=void 0);else if("object"==typeof t)for(s in t)a.call(t,s)&&o.removeQuery(e,s,t[s]);else{if("string"!=typeof t)throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter");void 0!==n?"RegExp"===l(n)?!u(e[t])&&n.test(e[t])?e[t]=void 0:e[t]=d(e[t],n):e[t]!==String(n)||u(n)&&1!==n.length?u(e[t])&&(e[t]=d(e[t],n)):e[t]=void 0:e[t]=void 0}},o.hasQuery=function(e,t,n,r){switch(l(t)){case"String":break;case"RegExp":for(var i in e)if(a.call(e,i)&&t.test(i)&&(void 0===n||o.hasQuery(e,i,n)))return!0;return!1;case"Object":for(var s in t)if(a.call(t,s)&&!o.hasQuery(e,s,t[s]))return!1;return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter")}switch(l(n)){case"Undefined":return t in e;case"Boolean":return n===Boolean(u(e[t])?e[t].length:e[t]);case"Function":return!!n(e[t],t,e);case"Array":return!!u(e[t])&&(r?h:f)(e[t],n);case"RegExp":return u(e[t])?!!r&&h(e[t],n):Boolean(e[t]&&e[t].match(n));case"Number":n=String(n);case"String":return u(e[t])?!!r&&h(e[t],n):e[t]===n;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")}},o.joinPaths=function(){for(var e=[],t=[],n=0,r=0;r<arguments.length;r++){var i=new o(arguments[r]);e.push(i);for(var s=i.segment(),a=0;a<s.length;a++)"string"==typeof s[a]&&t.push(s[a]),s[a]&&n++}if(!t.length||!n)return new o("");var c=new o("").segment(t);return""!==e[0].path()&&"/"!==e[0].path().slice(0,1)||c.path("/"+c.path()),c.normalize()},o.commonPath=function(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n++)if(e.charAt(n)!==t.charAt(n)){n--;break}return n<1?e.charAt(0)===t.charAt(0)&&"/"===e.charAt(0)?"/":"":("/"===e.charAt(n)&&"/"===t.charAt(n)||(n=e.substring(0,n).lastIndexOf("/")),e.substring(0,n+1))},o.withinString=function(e,t,n){n||(n={});var r=n.start||o.findUri.start,i=n.end||o.findUri.end,s=n.trim||o.findUri.trim,a=n.parens||o.findUri.parens,c=/[a-z0-9-]=["']?$/i;for(r.lastIndex=0;;){var l=r.exec(e);if(!l)break;var u=l.index;if(n.ignoreHtml){var d=e.slice(Math.max(u-3,0),u);if(d&&c.test(d))continue}for(var h=u+e.slice(u).search(i),f=e.slice(u,h),p=-1;;){var g=a.exec(f);if(!g)break;var m=g.index+g[0].length;p=Math.max(p,m)}if(!((f=p>-1?f.slice(0,p)+f.slice(p).replace(s,""):f.replace(s,"")).length<=l[0].length||n.ignore&&n.ignore.test(f))){var v=t(f,u,h=u+f.length,e);void 0!==v?(v=String(v),e=e.slice(0,u)+v+e.slice(h),r.lastIndex=u+v.length):r.lastIndex=h}}return r.lastIndex=0,e},o.ensureValidHostname=function(t,n){var r=!!t,i=!1;if(!!n&&(i=h(o.hostProtocols,n)),i&&!r)throw new TypeError("Hostname cannot be empty, if protocol is "+n);if(t&&t.match(o.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+t+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(t).match(o.invalid_hostname_characters))throw new TypeError('Hostname "'+t+'" contains characters other than [A-Z0-9.-:_]')}},o.ensureValidPort=function(e){if(e){var t=Number(e);if(!(/^[0-9]+$/.test(t)&&t>0&&t<65536))throw new TypeError('Port "'+e+'" is not a valid port')}},o.noConflict=function(e){if(e){var t={URI:this.noConflict()};return r.URITemplate&&"function"==typeof r.URITemplate.noConflict&&(t.URITemplate=r.URITemplate.noConflict()),r.IPv6&&"function"==typeof r.IPv6.noConflict&&(t.IPv6=r.IPv6.noConflict()),r.SecondLevelDomains&&"function"==typeof r.SecondLevelDomains.noConflict&&(t.SecondLevelDomains=r.SecondLevelDomains.noConflict()),t}return r.URI===this&&(r.URI=i),this},s.build=function(e){return!0===e?this._deferred_build=!0:(void 0===e||this._deferred_build)&&(this._string=o.build(this._parts),this._deferred_build=!1),this},s.clone=function(){return new o(this)},s.valueOf=s.toString=function(){return this.build(!1)._string},s.protocol=w("protocol"),s.username=w("username"),s.password=w("password"),s.hostname=w("hostname"),s.port=w("port"),s.query=S("query","?"),s.fragment=S("fragment","#"),s.search=function(e,t){var n=this.query(e,t);return"string"==typeof n&&n.length?"?"+n:n},s.hash=function(e,t){var n=this.fragment(e,t);return"string"==typeof n&&n.length?"#"+n:n},s.pathname=function(e,t){if(void 0===e||!0===e){var n=this._parts.path||(this._parts.hostname?"/":"");return e?(this._parts.urn?o.decodeUrnPath:o.decodePath)(n):n}return this._parts.urn?this._parts.path=e?o.recodeUrnPath(e):"":this._parts.path=e?o.recodePath(e):"/",this.build(!t),this},s.path=s.pathname,s.href=function(e,t){var n;if(void 0===e)return this.toString();this._string="",this._parts=o._parts();var r=e instanceof o,i="object"==typeof e&&(e.hostname||e.path||e.pathname);e.nodeName&&(e=e[o.getDomAttribute(e)]||"",i=!1);if(!r&&i&&void 0!==e.pathname&&(e=e.toString()),"string"==typeof e||e instanceof String)this._parts=o.parse(String(e),this._parts);else{if(!r&&!i)throw new TypeError("invalid input");var s=r?e._parts:e;for(n in s)"query"!==n&&a.call(this._parts,n)&&(this._parts[n]=s[n]);s.query&&this.query(s.query,!1)}return this.build(!t),this},s.is=function(e){var t=!1,r=!1,i=!1,s=!1,a=!1,c=!1,l=!1,u=!this._parts.urn;switch(this._parts.hostname&&(u=!1,r=o.ip4_expression.test(this._parts.hostname),i=o.ip6_expression.test(this._parts.hostname),a=(s=!(t=r||i))&&n&&n.has(this._parts.hostname),c=s&&o.idn_expression.test(this._parts.hostname),l=s&&o.punycode_expression.test(this._parts.hostname)),e.toLowerCase()){case"relative":return u;case"absolute":return!u;case"domain":case"name":return s;case"sld":return a;case"ip":return t;case"ip4":case"ipv4":case"inet4":return r;case"ip6":case"ipv6":case"inet6":return i;case"idn":return c;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return l}return null};var x=s.protocol,E=s.port,A=s.hostname;s.protocol=function(e,t){if(e&&!(e=e.replace(/:(\/\/)?$/,"")).match(o.protocol_expression))throw new TypeError('Protocol "'+e+"\" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]");return x.call(this,e,t)},s.scheme=s.protocol,s.port=function(e,t){return this._parts.urn?void 0===e?"":this:(void 0!==e&&(0===e&&(e=null),e&&(":"===(e+="").charAt(0)&&(e=e.substring(1)),o.ensureValidPort(e))),E.call(this,e,t))},s.hostname=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0!==e){var n={preventInvalidHostname:this._parts.preventInvalidHostname};if("/"!==o.parseHost(e,n))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');e=n.hostname,this._parts.preventInvalidHostname&&o.ensureValidHostname(e,this._parts.protocol)}return A.call(this,e,t)},s.origin=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){var n=this.protocol();return this.authority()?(n?n+"://":"")+this.authority():""}var r=o(e);return this.protocol(r.protocol()).authority(r.authority()).build(!t),this},s.host=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e)return this._parts.hostname?o.buildHost(this._parts):"";if("/"!==o.parseHost(e,this._parts))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');return this.build(!t),this},s.authority=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e)return this._parts.hostname?o.buildAuthority(this._parts):"";if("/"!==o.parseAuthority(e,this._parts))throw new TypeError('Hostname "'+e+'" contains characters other than [A-Z0-9.-]');return this.build(!t),this},s.userinfo=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){var n=o.buildUserinfo(this._parts);return n?n.substring(0,n.length-1):n}return"@"!==e[e.length-1]&&(e+="@"),o.parseUserinfo(e,this._parts),this.build(!t),this},s.resource=function(e,t){var n;return void 0===e?this.path()+this.search()+this.hash():(n=o.parse(e),this._parts.path=n.path,this._parts.query=n.query,this._parts.fragment=n.fragment,this.build(!t),this)},s.subdomain=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var n=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,n)||""}var r=this._parts.hostname.length-this.domain().length,i=this._parts.hostname.substring(0,r),s=new RegExp("^"+c(i));if(e&&"."!==e.charAt(e.length-1)&&(e+="."),-1!==e.indexOf(":"))throw new TypeError("Domains cannot contain colons");return e&&o.ensureValidHostname(e,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(s,e),this.build(!t),this},s.domain=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("boolean"==typeof e&&(t=e,e=void 0),void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var n=this._parts.hostname.match(/\./g);if(n&&n.length<2)return this._parts.hostname;var r=this._parts.hostname.length-this.tld(t).length-1;return r=this._parts.hostname.lastIndexOf(".",r-1)+1,this._parts.hostname.substring(r)||""}if(!e)throw new TypeError("cannot set domain empty");if(-1!==e.indexOf(":"))throw new TypeError("Domains cannot contain colons");if(o.ensureValidHostname(e,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=e;else{var i=new RegExp(c(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(i,e)}return this.build(!t),this},s.tld=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("boolean"==typeof e&&(t=e,e=void 0),void 0===e){if(!this._parts.hostname||this.is("IP"))return"";var r=this._parts.hostname.lastIndexOf("."),i=this._parts.hostname.substring(r+1);return!0!==t&&n&&n.list[i.toLowerCase()]&&n.get(this._parts.hostname)||i}var o;if(!e)throw new TypeError("cannot set TLD empty");if(e.match(/[^a-zA-Z0-9-]/)){if(!n||!n.is(e))throw new TypeError('TLD "'+e+'" contains characters other than [A-Z0-9]');o=new RegExp(c(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(o,e)}else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");o=new RegExp(c(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(o,e)}return this.build(!t),this},s.directory=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e||!0===e){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var n=this._parts.path.length-this.filename().length-1,r=this._parts.path.substring(0,n)||(this._parts.hostname?"/":"");return e?o.decodePath(r):r}var i=this._parts.path.length-this.filename().length,s=this._parts.path.substring(0,i),a=new RegExp("^"+c(s));return this.is("relative")||(e||(e="/"),"/"!==e.charAt(0)&&(e="/"+e)),e&&"/"!==e.charAt(e.length-1)&&(e+="/"),e=o.recodePath(e),this._parts.path=this._parts.path.replace(a,e),this.build(!t),this},s.filename=function(e,t){if(this._parts.urn)return void 0===e?"":this;if("string"!=typeof e){if(!this._parts.path||"/"===this._parts.path)return"";var n=this._parts.path.lastIndexOf("/"),r=this._parts.path.substring(n+1);return e?o.decodePathSegment(r):r}var i=!1;"/"===e.charAt(0)&&(e=e.substring(1)),e.match(/\.?\//)&&(i=!0);var s=new RegExp(c(this.filename())+"$");return e=o.recodePath(e),this._parts.path=this._parts.path.replace(s,e),i?this.normalizePath(t):this.build(!t),this},s.suffix=function(e,t){if(this._parts.urn)return void 0===e?"":this;if(void 0===e||!0===e){if(!this._parts.path||"/"===this._parts.path)return"";var n,r,i=this.filename(),s=i.lastIndexOf(".");return-1===s?"":(n=i.substring(s+1),r=/^[a-z0-9%]+$/i.test(n)?n:"",e?o.decodePathSegment(r):r)}"."===e.charAt(0)&&(e=e.substring(1));var a,l=this.suffix();if(l)a=e?new RegExp(c(l)+"$"):new RegExp(c("."+l)+"$");else{if(!e)return this;this._parts.path+="."+o.recodePath(e)}return a&&(e=o.recodePath(e),this._parts.path=this._parts.path.replace(a,e)),this.build(!t),this},s.segment=function(e,t,n){var r=this._parts.urn?":":"/",i=this.path(),o="/"===i.substring(0,1),s=i.split(r);if(void 0!==e&&"number"!=typeof e&&(n=t,t=e,e=void 0),void 0!==e&&"number"!=typeof e)throw new Error('Bad segment "'+e+'", must be 0-based integer');if(o&&s.shift(),e<0&&(e=Math.max(s.length+e,0)),void 0===t)return void 0===e?s:s[e];if(null===e||void 0===s[e])if(u(t)){s=[];for(var a=0,c=t.length;a<c;a++)(t[a].length||s.length&&s[s.length-1].length)&&(s.length&&!s[s.length-1].length&&s.pop(),s.push(p(t[a])))}else(t||"string"==typeof t)&&(t=p(t),""===s[s.length-1]?s[s.length-1]=t:s.push(t));else t?s[e]=p(t):s.splice(e,1);return o&&s.unshift(""),this.path(s.join(r),n)},s.segmentCoded=function(e,t,n){var r,i,s;if("number"!=typeof e&&(n=t,t=e,e=void 0),void 0===t){if(u(r=this.segment(e,t,n)))for(i=0,s=r.length;i<s;i++)r[i]=o.decode(r[i]);else r=void 0!==r?o.decode(r):void 0;return r}if(u(t))for(i=0,s=t.length;i<s;i++)t[i]=o.encode(t[i]);else t="string"==typeof t||t instanceof String?o.encode(t):t;return this.segment(e,t,n)};var C=s.query;return s.query=function(e,t){if(!0===e)return o.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("function"==typeof e){var n=o.parseQuery(this._parts.query,this._parts.escapeQuerySpace),r=e.call(this,n);return this._parts.query=o.buildQuery(r||n,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!t),this}return void 0!==e&&"string"!=typeof e?(this._parts.query=o.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!t),this):C.call(this,e,t)},s.setQuery=function(e,t,n){var r=o.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("string"==typeof e||e instanceof String)r[e]=void 0!==t?t:null;else{if("object"!=typeof e)throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");for(var i in e)a.call(e,i)&&(r[i]=e[i])}return this._parts.query=o.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},s.addQuery=function(e,t,n){var r=o.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return o.addQuery(r,e,void 0===t?null:t),this._parts.query=o.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},s.removeQuery=function(e,t,n){var r=o.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return o.removeQuery(r,e,t),this._parts.query=o.buildQuery(r,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),"string"!=typeof e&&(n=t),this.build(!n),this},s.hasQuery=function(e,t,n){var r=o.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return o.hasQuery(r,e,t,n)},s.setSearch=s.setQuery,s.addSearch=s.addQuery,s.removeSearch=s.removeQuery,s.hasSearch=s.hasQuery,s.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()},s.normalizeProtocol=function(e){return"string"==typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!e)),this},s.normalizeHostname=function(n){return this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&t&&(this._parts.hostname=t.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!n)),this},s.normalizePort=function(e){return"string"==typeof this._parts.protocol&&this._parts.port===o.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!e)),this},s.normalizePath=function(e){var t,n=this._parts.path;if(!n)return this;if(this._parts.urn)return this._parts.path=o.recodeUrnPath(this._parts.path),this.build(!e),this;if("/"===this._parts.path)return this;var r,i,s="";for("/"!==(n=o.recodePath(n)).charAt(0)&&(t=!0,n="/"+n),"/.."!==n.slice(-3)&&"/."!==n.slice(-2)||(n+="/"),n=n.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/"),t&&(s=n.substring(1).match(/^(\.\.\/)+/)||"")&&(s=s[0]);-1!==(r=n.search(/\/\.\.(\/|$)/));)0!==r?(-1===(i=n.substring(0,r).lastIndexOf("/"))&&(i=r),n=n.substring(0,i)+n.substring(r+3)):n=n.substring(3);return t&&this.is("relative")&&(n=s+n.substring(1)),this._parts.path=n,this.build(!e),this},s.normalizePathname=s.normalizePath,s.normalizeQuery=function(e){return"string"==typeof this._parts.query&&(this._parts.query.length?this.query(o.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!e)),this},s.normalizeFragment=function(e){return this._parts.fragment||(this._parts.fragment=null,this.build(!e)),this},s.normalizeSearch=s.normalizeQuery,s.normalizeHash=s.normalizeFragment,s.iso8859=function(){var e=o.encode,t=o.decode;o.encode=escape,o.decode=decodeURIComponent;try{this.normalize()}finally{o.encode=e,o.decode=t}return this},s.unicode=function(){var e=o.encode,t=o.decode;o.encode=m,o.decode=unescape;try{this.normalize()}finally{o.encode=e,o.decode=t}return this},s.readable=function(){var t=this.clone();t.username("").password("").normalize();var n="";if(t._parts.protocol&&(n+=t._parts.protocol+"://"),t._parts.hostname&&(t.is("punycode")&&e?(n+=e.toUnicode(t._parts.hostname),t._parts.port&&(n+=":"+t._parts.port)):n+=t.host()),t._parts.hostname&&t._parts.path&&"/"!==t._parts.path.charAt(0)&&(n+="/"),n+=t.path(!0),t._parts.query){for(var r="",i=0,s=t._parts.query.split("&"),a=s.length;i<a;i++){var c=(s[i]||"").split("=");r+="&"+o.decodeQuery(c[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"),void 0!==c[1]&&(r+="="+o.decodeQuery(c[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}n+="?"+r.substring(1)}return n+=o.decodeQuery(t.hash(),!0)},s.absoluteTo=function(e){var t,n,r,i=this.clone(),s=["protocol","username","password","hostname","port"];if(this._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(e instanceof o||(e=new o(e)),i._parts.protocol)return i;if(i._parts.protocol=e._parts.protocol,this._parts.hostname)return i;for(n=0;r=s[n];n++)i._parts[r]=e._parts[r];return i._parts.path?(".."===i._parts.path.substring(-2)&&(i._parts.path+="/"),"/"!==i.path().charAt(0)&&(t=(t=e.directory())||(0===e.path().indexOf("/")?"/":""),i._parts.path=(t?t+"/":"")+i._parts.path,i.normalizePath())):(i._parts.path=e._parts.path,i._parts.query||(i._parts.query=e._parts.query)),i.build(),i},s.relativeTo=function(e){var t,n,r,i,s,a=this.clone().normalize();if(a._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(e=new o(e).normalize(),t=a._parts,n=e._parts,i=a.path(),s=e.path(),"/"!==i.charAt(0))throw new Error("URI is already relative");if("/"!==s.charAt(0))throw new Error("Cannot calculate a URI relative to another relative URI");if(t.protocol===n.protocol&&(t.protocol=null),t.username!==n.username||t.password!==n.password)return a.build();if(null!==t.protocol||null!==t.username||null!==t.password)return a.build();if(t.hostname!==n.hostname||t.port!==n.port)return a.build();if(t.hostname=null,t.port=null,i===s)return t.path="",a.build();if(!(r=o.commonPath(i,s)))return a.build();var c=n.path.substring(r.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");return t.path=c+t.path.substring(r.length)||"./",a.build()},s.equals=function(e){var t,n,r,i,s,c=this.clone(),l=new o(e),d={};if(c.normalize(),l.normalize(),c.toString()===l.toString())return!0;if(r=c.query(),i=l.query(),c.query(""),l.query(""),c.toString()!==l.toString())return!1;if(r.length!==i.length)return!1;for(s in t=o.parseQuery(r,this._parts.escapeQuerySpace),n=o.parseQuery(i,this._parts.escapeQuerySpace),t)if(a.call(t,s)){if(u(t[s])){if(!f(t[s],n[s]))return!1}else if(t[s]!==n[s])return!1;d[s]=!0}for(s in n)if(a.call(n,s)&&!d[s])return!1;return!0},s.preventInvalidHostname=function(e){return this._parts.preventInvalidHostname=!!e,this},s.duplicateQueryParameters=function(e){return this._parts.duplicateQueryParameters=!!e,this},s.escapeQuerySpace=function(e){return this._parts.escapeQuerySpace=!!e,this},o}))},function(e,t,n){var r=n(113),i=n(29),o=n(114),s=n(70),a=n(92),c=Math.max;e.exports=function(e,t,n,l){e=i(e)?e:a(e),n=n&&!l?s(n):0;var u=e.length;return n<0&&(n=c(u+n,0)),o(e)?n<=u&&e.indexOf(t,n)>-1:!!u&&r(e,t,n)>-1}},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t){e.exports=function(e){return e}},function(e,t,n){var r=n(48);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){var r=n(27),i=n(451),o=n(452),s=Object.defineProperty;t.f=n(32)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports={}},function(e,t,n){(function(e,r){var i;
 /**
  * @license
  * Lodash <https://lodash.com/>
@@ -28,11 +28,11 @@
  * Released under MIT license <https://lodash.com/license>
  * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */(function(){var s="Expected a function",o="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",u="[object Boolean]",d="[object Date]",h="[object Error]",f="[object Function]",p="[object GeneratorFunction]",g="[object Map]",m="[object Number]",v="[object Object]",_="[object RegExp]",b="[object Set]",y="[object String]",w="[object Symbol]",S="[object WeakMap]",x="[object ArrayBuffer]",E="[object DataView]",A="[object Float32Array]",C="[object Float64Array]",j="[object Int8Array]",T="[object Int16Array]",O="[object Int32Array]",k="[object Uint8Array]",N="[object Uint16Array]",I="[object Uint32Array]",M=/\b__p \+= '';/g,R=/\b(__p \+=) '' \+/g,D=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,L=/[&<>"']/g,z=RegExp(P.source),F=RegExp(L.source),B=/<%-([\s\S]+?)%>/g,q=/<%([\s\S]+?)%>/g,H=/<%=([\s\S]+?)%>/g,U=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$=/^\w*$/,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,V=/[\\^$.*+?()[\]{}|]/g,G=RegExp(V.source),J=/^\s+|\s+$/g,X=/^\s+/,Q=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,K=/\{\n\/\* \[wrapped with (.+)\] \*/,Z=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,re=/\w*$/,ie=/^[-+]0x[0-9a-f]+$/i,se=/^0b[01]+$/i,oe=/^\[object .+?Constructor\]$/,ae=/^0o[0-7]+$/i,ce=/^(?:0|[1-9]\d*)$/,le=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ue=/($^)/,de=/['\n\r\u2028\u2029\\]/g,he="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",fe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pe="[\\ud800-\\udfff]",ge="["+fe+"]",me="["+he+"]",ve="\\d+",_e="[\\u2700-\\u27bf]",be="[a-z\\xdf-\\xf6\\xf8-\\xff]",ye="[^\\ud800-\\udfff"+fe+ve+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",we="\\ud83c[\\udffb-\\udfff]",Se="[^\\ud800-\\udfff]",xe="(?:\\ud83c[\\udde6-\\uddff]){2}",Ee="[\\ud800-\\udbff][\\udc00-\\udfff]",Ae="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ce="(?:"+be+"|"+ye+")",je="(?:"+Ae+"|"+ye+")",Te="(?:"+me+"|"+we+")"+"?",Oe="[\\ufe0e\\ufe0f]?"+Te+("(?:\\u200d(?:"+[Se,xe,Ee].join("|")+")[\\ufe0e\\ufe0f]?"+Te+")*"),ke="(?:"+[_e,xe,Ee].join("|")+")"+Oe,Ne="(?:"+[Se+me+"?",me,xe,Ee,pe].join("|")+")",Ie=RegExp("['’]","g"),Me=RegExp(me,"g"),Re=RegExp(we+"(?="+we+")|"+Ne+Oe,"g"),De=RegExp([Ae+"?"+be+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ge,Ae,"$"].join("|")+")",je+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ge,Ae+Ce,"$"].join("|")+")",Ae+"?"+Ce+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Ae+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ve,ke].join("|"),"g"),Pe=RegExp("[\\u200d\\ud800-\\udfff"+he+"\\ufe0e\\ufe0f]"),Le=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ze=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Fe=-1,Be={};Be[A]=Be[C]=Be[j]=Be[T]=Be[O]=Be[k]=Be["[object Uint8ClampedArray]"]=Be[N]=Be[I]=!0,Be[c]=Be[l]=Be[x]=Be[u]=Be[E]=Be[d]=Be[h]=Be[f]=Be[g]=Be[m]=Be[v]=Be[_]=Be[b]=Be[y]=Be[S]=!1;var qe={};qe[c]=qe[l]=qe[x]=qe[E]=qe[u]=qe[d]=qe[A]=qe[C]=qe[j]=qe[T]=qe[O]=qe[g]=qe[m]=qe[v]=qe[_]=qe[b]=qe[y]=qe[w]=qe[k]=qe["[object Uint8ClampedArray]"]=qe[N]=qe[I]=!0,qe[h]=qe[f]=qe[S]=!1;var He={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ue=parseFloat,$e=parseInt,We="object"==typeof e&&e&&e.Object===Object&&e,Ve="object"==typeof self&&self&&self.Object===Object&&self,Ge=We||Ve||Function("return this")(),Je=t&&!t.nodeType&&t,Xe=Je&&"object"==typeof r&&r&&!r.nodeType&&r,Qe=Xe&&Xe.exports===Je,Ye=Qe&&We.process,Ke=function(){try{var e=Xe&&Xe.require&&Xe.require("util").types;return e||Ye&&Ye.binding&&Ye.binding("util")}catch(e){}}(),Ze=Ke&&Ke.isArrayBuffer,et=Ke&&Ke.isDate,tt=Ke&&Ke.isMap,nt=Ke&&Ke.isRegExp,rt=Ke&&Ke.isSet,it=Ke&&Ke.isTypedArray;function st(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function ot(e,t,n,r){for(var i=-1,s=null==e?0:e.length;++i<s;){var o=e[i];t(r,o,n(o),e)}return r}function at(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function ct(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function lt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function ut(e,t){for(var n=-1,r=null==e?0:e.length,i=0,s=[];++n<r;){var o=e[n];t(o,n,e)&&(s[i++]=o)}return s}function dt(e,t){return!!(null==e?0:e.length)&&wt(e,t,0)>-1}function ht(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function ft(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function pt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function gt(e,t,n,r){var i=-1,s=null==e?0:e.length;for(r&&s&&(n=e[++i]);++i<s;)n=t(n,e[i],i,e);return n}function mt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function vt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var _t=At("length");function bt(e,t,n){var r;return n(e,(function(e,n,i){if(t(e,n,i))return r=n,!1})),r}function yt(e,t,n,r){for(var i=e.length,s=n+(r?1:-1);r?s--:++s<i;)if(t(e[s],s,e))return s;return-1}function wt(e,t,n){return t==t?function(e,t,n){var r=n-1,i=e.length;for(;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):yt(e,xt,n)}function St(e,t,n,r){for(var i=n-1,s=e.length;++i<s;)if(r(e[i],t))return i;return-1}function xt(e){return e!=e}function Et(e,t){var n=null==e?0:e.length;return n?Tt(e,t)/n:NaN}function At(e){return function(t){return null==t?void 0:t[e]}}function Ct(e){return function(t){return null==e?void 0:e[t]}}function jt(e,t,n,r,i){return i(e,(function(e,i,s){n=r?(r=!1,e):t(n,e,i,s)})),n}function Tt(e,t){for(var n,r=-1,i=e.length;++r<i;){var s=t(e[r]);void 0!==s&&(n=void 0===n?s:n+s)}return n}function Ot(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function kt(e){return function(t){return e(t)}}function Nt(e,t){return ft(t,(function(t){return e[t]}))}function It(e,t){return e.has(t)}function Mt(e,t){for(var n=-1,r=e.length;++n<r&&wt(t,e[n],0)>-1;);return n}function Rt(e,t){for(var n=e.length;n--&&wt(t,e[n],0)>-1;);return n}function Dt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var Pt=Ct({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Lt=Ct({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function zt(e){return"\\"+He[e]}function Ft(e){return Pe.test(e)}function Bt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function qt(e,t){return function(n){return e(t(n))}}function Ht(e,t){for(var n=-1,r=e.length,i=0,s=[];++n<r;){var a=e[n];a!==t&&a!==o||(e[n]=o,s[i++]=n)}return s}function Ut(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}function $t(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n}function Wt(e){return Ft(e)?function(e){var t=Re.lastIndex=0;for(;Re.test(e);)++t;return t}(e):_t(e)}function Vt(e){return Ft(e)?function(e){return e.match(Re)||[]}(e):function(e){return e.split("")}(e)}var Gt=Ct({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"});var Jt=function e(t){var n,r=(t=null==t?Ge:Jt.defaults(Ge.Object(),t,Jt.pick(Ge,ze))).Array,i=t.Date,he=t.Error,fe=t.Function,pe=t.Math,ge=t.Object,me=t.RegExp,ve=t.String,_e=t.TypeError,be=r.prototype,ye=fe.prototype,we=ge.prototype,Se=t["__core-js_shared__"],xe=ye.toString,Ee=we.hasOwnProperty,Ae=0,Ce=(n=/[^.]+$/.exec(Se&&Se.keys&&Se.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",je=we.toString,Te=xe.call(ge),Oe=Ge._,ke=me("^"+xe.call(Ee).replace(V,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ne=Qe?t.Buffer:void 0,Re=t.Symbol,Pe=t.Uint8Array,He=Ne?Ne.allocUnsafe:void 0,We=qt(ge.getPrototypeOf,ge),Ve=ge.create,Je=we.propertyIsEnumerable,Xe=be.splice,Ye=Re?Re.isConcatSpreadable:void 0,Ke=Re?Re.iterator:void 0,_t=Re?Re.toStringTag:void 0,Ct=function(){try{var e=Zi(ge,"defineProperty");return e({},"",{}),e}catch(e){}}(),Xt=t.clearTimeout!==Ge.clearTimeout&&t.clearTimeout,Qt=i&&i.now!==Ge.Date.now&&i.now,Yt=t.setTimeout!==Ge.setTimeout&&t.setTimeout,Kt=pe.ceil,Zt=pe.floor,en=ge.getOwnPropertySymbols,tn=Ne?Ne.isBuffer:void 0,nn=t.isFinite,rn=be.join,sn=qt(ge.keys,ge),on=pe.max,an=pe.min,cn=i.now,ln=t.parseInt,un=pe.random,dn=be.reverse,hn=Zi(t,"DataView"),fn=Zi(t,"Map"),pn=Zi(t,"Promise"),gn=Zi(t,"Set"),mn=Zi(t,"WeakMap"),vn=Zi(ge,"create"),_n=mn&&new mn,bn={},yn=Cs(hn),wn=Cs(fn),Sn=Cs(pn),xn=Cs(gn),En=Cs(mn),An=Re?Re.prototype:void 0,Cn=An?An.valueOf:void 0,jn=An?An.toString:void 0;function Tn(e){if($o(e)&&!Mo(e)&&!(e instanceof In)){if(e instanceof Nn)return e;if(Ee.call(e,"__wrapped__"))return js(e)}return new Nn(e)}var On=function(){function e(){}return function(t){if(!Uo(t))return{};if(Ve)return Ve(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function kn(){}function Nn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function In(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Rn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Dn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Pn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Dn;++t<n;)this.add(e[t])}function Ln(e){var t=this.__data__=new Rn(e);this.size=t.size}function zn(e,t){var n=Mo(e),r=!n&&Io(e),i=!n&&!r&&Lo(e),s=!n&&!r&&!i&&Ko(e),o=n||r||i||s,a=o?Ot(e.length,ve):[],c=a.length;for(var l in e)!t&&!Ee.call(e,l)||o&&("length"==l||i&&("offset"==l||"parent"==l)||s&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||os(l,c))||a.push(l);return a}function Fn(e){var t=e.length;return t?e[Pr(0,t-1)]:void 0}function Bn(e,t){return xs(vi(e),Xn(t,0,e.length))}function qn(e){return xs(vi(e))}function Hn(e,t,n){(void 0!==n&&!Oo(e[t],n)||void 0===n&&!(t in e))&&Gn(e,t,n)}function Un(e,t,n){var r=e[t];Ee.call(e,t)&&Oo(r,n)&&(void 0!==n||t in e)||Gn(e,t,n)}function $n(e,t){for(var n=e.length;n--;)if(Oo(e[n][0],t))return n;return-1}function Wn(e,t,n,r){return er(e,(function(e,i,s){t(r,e,n(e),s)})),r}function Vn(e,t){return e&&_i(t,ya(t),e)}function Gn(e,t,n){"__proto__"==t&&Ct?Ct(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function Jn(e,t){for(var n=-1,i=t.length,s=r(i),o=null==e;++n<i;)s[n]=o?void 0:ga(e,t[n]);return s}function Xn(e,t,n){return e==e&&(void 0!==n&&(e=e<=n?e:n),void 0!==t&&(e=e>=t?e:t)),e}function Qn(e,t,n,r,i,s){var o,a=1&t,l=2&t,h=4&t;if(n&&(o=i?n(e,r,i,s):n(e)),void 0!==o)return o;if(!Uo(e))return e;var S=Mo(e);if(S){if(o=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&Ee.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!a)return vi(e,o)}else{var M=ns(e),R=M==f||M==p;if(Lo(e))return di(e,a);if(M==v||M==c||R&&!i){if(o=l||R?{}:is(e),!a)return l?function(e,t){return _i(e,ts(e),t)}(e,function(e,t){return e&&_i(t,wa(t),e)}(o,e)):function(e,t){return _i(e,es(e),t)}(e,Vn(o,e))}else{if(!qe[M])return i?e:{};o=function(e,t,n){var r=e.constructor;switch(t){case x:return hi(e);case u:case d:return new r(+e);case E:return function(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case A:case C:case j:case T:case O:case k:case"[object Uint8ClampedArray]":case N:case I:return fi(e,n);case g:return new r;case m:case y:return new r(e);case _:return function(e){var t=new e.constructor(e.source,re.exec(e));return t.lastIndex=e.lastIndex,t}(e);case b:return new r;case w:return i=e,Cn?ge(Cn.call(i)):{}}var i}(e,M,a)}}s||(s=new Ln);var D=s.get(e);if(D)return D;s.set(e,o),Xo(e)?e.forEach((function(r){o.add(Qn(r,t,n,r,e,s))})):Wo(e)&&e.forEach((function(r,i){o.set(i,Qn(r,t,n,i,e,s))}));var P=S?void 0:(h?l?Vi:Wi:l?wa:ya)(e);return at(P||e,(function(r,i){P&&(r=e[i=r]),Un(o,i,Qn(r,t,n,i,e,s))})),o}function Yn(e,t,n){var r=n.length;if(null==e)return!r;for(e=ge(e);r--;){var i=n[r],s=t[i],o=e[i];if(void 0===o&&!(i in e)||!s(o))return!1}return!0}function Kn(e,t,n){if("function"!=typeof e)throw new _e(s);return bs((function(){e.apply(void 0,n)}),t)}function Zn(e,t,n,r){var i=-1,s=dt,o=!0,a=e.length,c=[],l=t.length;if(!a)return c;n&&(t=ft(t,kt(n))),r?(s=ht,o=!1):t.length>=200&&(s=It,o=!1,t=new Pn(t));e:for(;++i<a;){var u=e[i],d=null==n?u:n(u);if(u=r||0!==u?u:0,o&&d==d){for(var h=l;h--;)if(t[h]===d)continue e;c.push(u)}else s(t,d,r)||c.push(u)}return c}Tn.templateSettings={escape:B,evaluate:q,interpolate:H,variable:"",imports:{_:Tn}},Tn.prototype=kn.prototype,Tn.prototype.constructor=Tn,Nn.prototype=On(kn.prototype),Nn.prototype.constructor=Nn,In.prototype=On(kn.prototype),In.prototype.constructor=In,Mn.prototype.clear=function(){this.__data__=vn?vn(null):{},this.size=0},Mn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Mn.prototype.get=function(e){var t=this.__data__;if(vn){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return Ee.call(t,e)?t[e]:void 0},Mn.prototype.has=function(e){var t=this.__data__;return vn?void 0!==t[e]:Ee.call(t,e)},Mn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=vn&&void 0===t?"__lodash_hash_undefined__":t,this},Rn.prototype.clear=function(){this.__data__=[],this.size=0},Rn.prototype.delete=function(e){var t=this.__data__,n=$n(t,e);return!(n<0)&&(n==t.length-1?t.pop():Xe.call(t,n,1),--this.size,!0)},Rn.prototype.get=function(e){var t=this.__data__,n=$n(t,e);return n<0?void 0:t[n][1]},Rn.prototype.has=function(e){return $n(this.__data__,e)>-1},Rn.prototype.set=function(e,t){var n=this.__data__,r=$n(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Dn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(fn||Rn),string:new Mn}},Dn.prototype.delete=function(e){var t=Yi(this,e).delete(e);return this.size-=t?1:0,t},Dn.prototype.get=function(e){return Yi(this,e).get(e)},Dn.prototype.has=function(e){return Yi(this,e).has(e)},Dn.prototype.set=function(e,t){var n=Yi(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Pn.prototype.add=Pn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Pn.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.clear=function(){this.__data__=new Rn,this.size=0},Ln.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ln.prototype.get=function(e){return this.__data__.get(e)},Ln.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Rn){var r=n.__data__;if(!fn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Dn(r)}return n.set(e,t),this.size=n.size,this};var er=wi(cr),tr=wi(lr,!0);function nr(e,t){var n=!0;return er(e,(function(e,r,i){return n=!!t(e,r,i)})),n}function rr(e,t,n){for(var r=-1,i=e.length;++r<i;){var s=e[r],o=t(s);if(null!=o&&(void 0===a?o==o&&!Yo(o):n(o,a)))var a=o,c=s}return c}function ir(e,t){var n=[];return er(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}function sr(e,t,n,r,i){var s=-1,o=e.length;for(n||(n=ss),i||(i=[]);++s<o;){var a=e[s];t>0&&n(a)?t>1?sr(a,t-1,n,r,i):pt(i,a):r||(i[i.length]=a)}return i}var or=Si(),ar=Si(!0);function cr(e,t){return e&&or(e,t,ya)}function lr(e,t){return e&&ar(e,t,ya)}function ur(e,t){return ut(t,(function(t){return Bo(e[t])}))}function dr(e,t){for(var n=0,r=(t=ai(t,e)).length;null!=e&&n<r;)e=e[As(t[n++])];return n&&n==r?e:void 0}function hr(e,t,n){var r=t(e);return Mo(e)?r:pt(r,n(e))}function fr(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":_t&&_t in ge(e)?function(e){var t=Ee.call(e,_t),n=e[_t];try{e[_t]=void 0;var r=!0}catch(e){}var i=je.call(e);r&&(t?e[_t]=n:delete e[_t]);return i}(e):function(e){return je.call(e)}(e)}function pr(e,t){return e>t}function gr(e,t){return null!=e&&Ee.call(e,t)}function mr(e,t){return null!=e&&t in ge(e)}function vr(e,t,n){for(var i=n?ht:dt,s=e[0].length,o=e.length,a=o,c=r(o),l=1/0,u=[];a--;){var d=e[a];a&&t&&(d=ft(d,kt(t))),l=an(d.length,l),c[a]=!n&&(t||s>=120&&d.length>=120)?new Pn(a&&d):void 0}d=e[0];var h=-1,f=c[0];e:for(;++h<s&&u.length<l;){var p=d[h],g=t?t(p):p;if(p=n||0!==p?p:0,!(f?It(f,g):i(u,g,n))){for(a=o;--a;){var m=c[a];if(!(m?It(m,g):i(e[a],g,n)))continue e}f&&f.push(g),u.push(p)}}return u}function _r(e,t,n){var r=null==(e=gs(e,t=ai(t,e)))?e:e[As(zs(t))];return null==r?void 0:st(r,e,n)}function br(e){return $o(e)&&fr(e)==c}function yr(e,t,n,r,i){return e===t||(null==e||null==t||!$o(e)&&!$o(t)?e!=e&&t!=t:function(e,t,n,r,i,s){var o=Mo(e),a=Mo(t),f=o?l:ns(e),p=a?l:ns(t),S=(f=f==c?v:f)==v,A=(p=p==c?v:p)==v,C=f==p;if(C&&Lo(e)){if(!Lo(t))return!1;o=!0,S=!1}if(C&&!S)return s||(s=new Ln),o||Ko(e)?Ui(e,t,n,r,i,s):function(e,t,n,r,i,s,o){switch(n){case E:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case x:return!(e.byteLength!=t.byteLength||!s(new Pe(e),new Pe(t)));case u:case d:case m:return Oo(+e,+t);case h:return e.name==t.name&&e.message==t.message;case _:case y:return e==t+"";case g:var a=Bt;case b:var c=1&r;if(a||(a=Ut),e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;r|=2,o.set(e,t);var f=Ui(a(e),a(t),r,i,s,o);return o.delete(e),f;case w:if(Cn)return Cn.call(e)==Cn.call(t)}return!1}(e,t,f,n,r,i,s);if(!(1&n)){var j=S&&Ee.call(e,"__wrapped__"),T=A&&Ee.call(t,"__wrapped__");if(j||T){var O=j?e.value():e,k=T?t.value():t;return s||(s=new Ln),i(O,k,n,r,s)}}if(!C)return!1;return s||(s=new Ln),function(e,t,n,r,i,s){var o=1&n,a=Wi(e),c=a.length,l=Wi(t).length;if(c!=l&&!o)return!1;var u=c;for(;u--;){var d=a[u];if(!(o?d in t:Ee.call(t,d)))return!1}var h=s.get(e),f=s.get(t);if(h&&f)return h==t&&f==e;var p=!0;s.set(e,t),s.set(t,e);var g=o;for(;++u<c;){d=a[u];var m=e[d],v=t[d];if(r)var _=o?r(v,m,d,t,e,s):r(m,v,d,e,t,s);if(!(void 0===_?m===v||i(m,v,n,r,s):_)){p=!1;break}g||(g="constructor"==d)}if(p&&!g){var b=e.constructor,y=t.constructor;b==y||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof y&&y instanceof y||(p=!1)}return s.delete(e),s.delete(t),p}(e,t,n,r,i,s)}(e,t,n,r,yr,i))}function wr(e,t,n,r){var i=n.length,s=i,o=!r;if(null==e)return!s;for(e=ge(e);i--;){var a=n[i];if(o&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<s;){var c=(a=n[i])[0],l=e[c],u=a[1];if(o&&a[2]){if(void 0===l&&!(c in e))return!1}else{var d=new Ln;if(r)var h=r(l,u,c,e,t,d);if(!(void 0===h?yr(u,l,3,r,d):h))return!1}}return!0}function Sr(e){return!(!Uo(e)||(t=e,Ce&&Ce in t))&&(Bo(e)?ke:oe).test(Cs(e));var t}function xr(e){return"function"==typeof e?e:null==e?Va:"object"==typeof e?Mo(e)?Or(e[0],e[1]):Tr(e):tc(e)}function Er(e){if(!ds(e))return sn(e);var t=[];for(var n in ge(e))Ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}function Ar(e){if(!Uo(e))return function(e){var t=[];if(null!=e)for(var n in ge(e))t.push(n);return t}(e);var t=ds(e),n=[];for(var r in e)("constructor"!=r||!t&&Ee.call(e,r))&&n.push(r);return n}function Cr(e,t){return e<t}function jr(e,t){var n=-1,i=Do(e)?r(e.length):[];return er(e,(function(e,r,s){i[++n]=t(e,r,s)})),i}function Tr(e){var t=Ki(e);return 1==t.length&&t[0][2]?fs(t[0][0],t[0][1]):function(n){return n===e||wr(n,e,t)}}function Or(e,t){return cs(e)&&hs(t)?fs(As(e),t):function(n){var r=ga(n,e);return void 0===r&&r===t?ma(n,e):yr(t,r,3)}}function kr(e,t,n,r,i){e!==t&&or(t,(function(s,o){if(i||(i=new Ln),Uo(s))!function(e,t,n,r,i,s,o){var a=vs(e,n),c=vs(t,n),l=o.get(c);if(l)return void Hn(e,n,l);var u=s?s(a,c,n+"",e,t,o):void 0,d=void 0===u;if(d){var h=Mo(c),f=!h&&Lo(c),p=!h&&!f&&Ko(c);u=c,h||f||p?Mo(a)?u=a:Po(a)?u=vi(a):f?(d=!1,u=di(c,!0)):p?(d=!1,u=fi(c,!0)):u=[]:Go(c)||Io(c)?(u=a,Io(a)?u=oa(a):Uo(a)&&!Bo(a)||(u=is(c))):d=!1}d&&(o.set(c,u),i(u,c,r,s,o),o.delete(c));Hn(e,n,u)}(e,t,o,n,kr,r,i);else{var a=r?r(vs(e,o),s,o+"",e,t,i):void 0;void 0===a&&(a=s),Hn(e,o,a)}}),wa)}function Nr(e,t){var n=e.length;if(n)return os(t+=t<0?n:0,n)?e[t]:void 0}function Ir(e,t,n){t=t.length?ft(t,(function(e){return Mo(e)?function(t){return dr(t,1===e.length?e[0]:e)}:e})):[Va];var r=-1;return t=ft(t,kt(Qi())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(jr(e,(function(e,n,i){return{criteria:ft(t,(function(t){return t(e)})),index:++r,value:e}})),(function(e,t){return function(e,t,n){var r=-1,i=e.criteria,s=t.criteria,o=i.length,a=n.length;for(;++r<o;){var c=pi(i[r],s[r]);if(c){if(r>=a)return c;var l=n[r];return c*("desc"==l?-1:1)}}return e.index-t.index}(e,t,n)}))}function Mr(e,t,n){for(var r=-1,i=t.length,s={};++r<i;){var o=t[r],a=dr(e,o);n(a,o)&&qr(s,ai(o,e),a)}return s}function Rr(e,t,n,r){var i=r?St:wt,s=-1,o=t.length,a=e;for(e===t&&(t=vi(t)),n&&(a=ft(e,kt(n)));++s<o;)for(var c=0,l=t[s],u=n?n(l):l;(c=i(a,u,c,r))>-1;)a!==e&&Xe.call(a,c,1),Xe.call(e,c,1);return e}function Dr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==s){var s=i;os(i)?Xe.call(e,i,1):Zr(e,i)}}return e}function Pr(e,t){return e+Zt(un()*(t-e+1))}function Lr(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Zt(t/2))&&(e+=e)}while(t);return n}function zr(e,t){return ys(ps(e,t,Va),e+"")}function Fr(e){return Fn(Oa(e))}function Br(e,t){var n=Oa(e);return xs(n,Xn(t,0,n.length))}function qr(e,t,n,r){if(!Uo(e))return e;for(var i=-1,s=(t=ai(t,e)).length,o=s-1,a=e;null!=a&&++i<s;){var c=As(t[i]),l=n;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(i!=o){var u=a[c];void 0===(l=r?r(u,c,a):void 0)&&(l=Uo(u)?u:os(t[i+1])?[]:{})}Un(a,c,l),a=a[c]}return e}var Hr=_n?function(e,t){return _n.set(e,t),e}:Va,Ur=Ct?function(e,t){return Ct(e,"toString",{configurable:!0,enumerable:!1,value:Ua(t),writable:!0})}:Va;function $r(e){return xs(Oa(e))}function Wr(e,t,n){var i=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(n=n>s?s:n)<0&&(n+=s),s=t>n?0:n-t>>>0,t>>>=0;for(var o=r(s);++i<s;)o[i]=e[i+t];return o}function Vr(e,t){var n;return er(e,(function(e,r,i){return!(n=t(e,r,i))})),!!n}function Gr(e,t,n){var r=0,i=null==e?r:e.length;if("number"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var s=r+i>>>1,o=e[s];null!==o&&!Yo(o)&&(n?o<=t:o<t)?r=s+1:i=s}return i}return Jr(e,t,Va,n)}function Jr(e,t,n,r){var i=0,s=null==e?0:e.length;if(0===s)return 0;for(var o=(t=n(t))!=t,a=null===t,c=Yo(t),l=void 0===t;i<s;){var u=Zt((i+s)/2),d=n(e[u]),h=void 0!==d,f=null===d,p=d==d,g=Yo(d);if(o)var m=r||p;else m=l?p&&(r||h):a?p&&h&&(r||!f):c?p&&h&&!f&&(r||!g):!f&&!g&&(r?d<=t:d<t);m?i=u+1:s=u}return an(s,4294967294)}function Xr(e,t){for(var n=-1,r=e.length,i=0,s=[];++n<r;){var o=e[n],a=t?t(o):o;if(!n||!Oo(a,c)){var c=a;s[i++]=0===o?0:o}}return s}function Qr(e){return"number"==typeof e?e:Yo(e)?NaN:+e}function Yr(e){if("string"==typeof e)return e;if(Mo(e))return ft(e,Yr)+"";if(Yo(e))return jn?jn.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Kr(e,t,n){var r=-1,i=dt,s=e.length,o=!0,a=[],c=a;if(n)o=!1,i=ht;else if(s>=200){var l=t?null:Li(e);if(l)return Ut(l);o=!1,i=It,c=new Pn}else c=t?[]:a;e:for(;++r<s;){var u=e[r],d=t?t(u):u;if(u=n||0!==u?u:0,o&&d==d){for(var h=c.length;h--;)if(c[h]===d)continue e;t&&c.push(d),a.push(u)}else i(c,d,n)||(c!==a&&c.push(d),a.push(u))}return a}function Zr(e,t){return null==(e=gs(e,t=ai(t,e)))||delete e[As(zs(t))]}function ei(e,t,n,r){return qr(e,t,n(dr(e,t)),r)}function ti(e,t,n,r){for(var i=e.length,s=r?i:-1;(r?s--:++s<i)&&t(e[s],s,e););return n?Wr(e,r?0:s,r?s+1:i):Wr(e,r?s+1:0,r?i:s)}function ni(e,t){var n=e;return n instanceof In&&(n=n.value()),gt(t,(function(e,t){return t.func.apply(t.thisArg,pt([e],t.args))}),n)}function ri(e,t,n){var i=e.length;if(i<2)return i?Kr(e[0]):[];for(var s=-1,o=r(i);++s<i;)for(var a=e[s],c=-1;++c<i;)c!=s&&(o[s]=Zn(o[s]||a,e[c],t,n));return Kr(sr(o,1),t,n)}function ii(e,t,n){for(var r=-1,i=e.length,s=t.length,o={};++r<i;){var a=r<s?t[r]:void 0;n(o,e[r],a)}return o}function si(e){return Po(e)?e:[]}function oi(e){return"function"==typeof e?e:Va}function ai(e,t){return Mo(e)?e:cs(e,t)?[e]:Es(aa(e))}var ci=zr;function li(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:Wr(e,t,n)}var ui=Xt||function(e){return Ge.clearTimeout(e)};function di(e,t){if(t)return e.slice();var n=e.length,r=He?He(n):new e.constructor(n);return e.copy(r),r}function hi(e){var t=new e.constructor(e.byteLength);return new Pe(t).set(new Pe(e)),t}function fi(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function pi(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,s=Yo(e),o=void 0!==t,a=null===t,c=t==t,l=Yo(t);if(!a&&!l&&!s&&e>t||s&&o&&c&&!a&&!l||r&&o&&c||!n&&c||!i)return 1;if(!r&&!s&&!l&&e<t||l&&n&&i&&!r&&!s||a&&n&&i||!o&&i||!c)return-1}return 0}function gi(e,t,n,i){for(var s=-1,o=e.length,a=n.length,c=-1,l=t.length,u=on(o-a,0),d=r(l+u),h=!i;++c<l;)d[c]=t[c];for(;++s<a;)(h||s<o)&&(d[n[s]]=e[s]);for(;u--;)d[c++]=e[s++];return d}function mi(e,t,n,i){for(var s=-1,o=e.length,a=-1,c=n.length,l=-1,u=t.length,d=on(o-c,0),h=r(d+u),f=!i;++s<d;)h[s]=e[s];for(var p=s;++l<u;)h[p+l]=t[l];for(;++a<c;)(f||s<o)&&(h[p+n[a]]=e[s++]);return h}function vi(e,t){var n=-1,i=e.length;for(t||(t=r(i));++n<i;)t[n]=e[n];return t}function _i(e,t,n,r){var i=!n;n||(n={});for(var s=-1,o=t.length;++s<o;){var a=t[s],c=r?r(n[a],e[a],a,n,e):void 0;void 0===c&&(c=e[a]),i?Gn(n,a,c):Un(n,a,c)}return n}function bi(e,t){return function(n,r){var i=Mo(n)?ot:Wn,s=t?t():{};return i(n,e,Qi(r,2),s)}}function yi(e){return zr((function(t,n){var r=-1,i=n.length,s=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(s=e.length>3&&"function"==typeof s?(i--,s):void 0,o&&as(n[0],n[1],o)&&(s=i<3?void 0:s,i=1),t=ge(t);++r<i;){var a=n[r];a&&e(t,a,r,s)}return t}))}function wi(e,t){return function(n,r){if(null==n)return n;if(!Do(n))return e(n,r);for(var i=n.length,s=t?i:-1,o=ge(n);(t?s--:++s<i)&&!1!==r(o[s],s,o););return n}}function Si(e){return function(t,n,r){for(var i=-1,s=ge(t),o=r(t),a=o.length;a--;){var c=o[e?a:++i];if(!1===n(s[c],c,s))break}return t}}function xi(e){return function(t){var n=Ft(t=aa(t))?Vt(t):void 0,r=n?n[0]:t.charAt(0),i=n?li(n,1).join(""):t.slice(1);return r[e]()+i}}function Ei(e){return function(t){return gt(Ba(Ia(t).replace(Ie,"")),e,"")}}function Ai(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=On(e.prototype),r=e.apply(n,t);return Uo(r)?r:n}}function Ci(e){return function(t,n,r){var i=ge(t);if(!Do(t)){var s=Qi(n,3);t=ya(t),n=function(e){return s(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[s?t[o]:o]:void 0}}function ji(e){return $i((function(t){var n=t.length,r=n,i=Nn.prototype.thru;for(e&&t.reverse();r--;){var o=t[r];if("function"!=typeof o)throw new _e(s);if(i&&!a&&"wrapper"==Ji(o))var a=new Nn([],!0)}for(r=a?r:n;++r<n;){var c=Ji(o=t[r]),l="wrapper"==c?Gi(o):void 0;a=l&&ls(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?a[Ji(l[0])].apply(a,l[3]):1==o.length&&ls(o)?a[c]():a.thru(o)}return function(){var e=arguments,r=e[0];if(a&&1==e.length&&Mo(r))return a.plant(r).value();for(var i=0,s=n?t[i].apply(this,e):r;++i<n;)s=t[i].call(this,s);return s}}))}function Ti(e,t,n,i,s,o,a,c,l,u){var d=128&t,h=1&t,f=2&t,p=24&t,g=512&t,m=f?void 0:Ai(e);return function v(){for(var _=arguments.length,b=r(_),y=_;y--;)b[y]=arguments[y];if(p)var w=Xi(v),S=Dt(b,w);if(i&&(b=gi(b,i,s,p)),o&&(b=mi(b,o,a,p)),_-=S,p&&_<u){var x=Ht(b,w);return Di(e,t,Ti,v.placeholder,n,b,x,c,l,u-_)}var E=h?n:this,A=f?E[e]:e;return _=b.length,c?b=ms(b,c):g&&_>1&&b.reverse(),d&&l<_&&(b.length=l),this&&this!==Ge&&this instanceof v&&(A=m||Ai(A)),A.apply(E,b)}}function Oi(e,t){return function(n,r){return function(e,t,n,r){return cr(e,(function(e,i,s){t(r,n(e),i,s)})),r}(n,e,t(r),{})}}function ki(e,t){return function(n,r){var i;if(void 0===n&&void 0===r)return t;if(void 0!==n&&(i=n),void 0!==r){if(void 0===i)return r;"string"==typeof n||"string"==typeof r?(n=Yr(n),r=Yr(r)):(n=Qr(n),r=Qr(r)),i=e(n,r)}return i}}function Ni(e){return $i((function(t){return t=ft(t,kt(Qi())),zr((function(n){var r=this;return e(t,(function(e){return st(e,r,n)}))}))}))}function Ii(e,t){var n=(t=void 0===t?" ":Yr(t)).length;if(n<2)return n?Lr(t,e):t;var r=Lr(t,Kt(e/Wt(t)));return Ft(t)?li(Vt(r),0,e).join(""):r.slice(0,e)}function Mi(e){return function(t,n,i){return i&&"number"!=typeof i&&as(t,n,i)&&(n=i=void 0),t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n,i){for(var s=-1,o=on(Kt((t-e)/(n||1)),0),a=r(o);o--;)a[i?o:++s]=e,e+=n;return a}(t,n,i=void 0===i?t<n?1:-1:na(i),e)}}function Ri(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=sa(t),n=sa(n)),e(t,n)}}function Di(e,t,n,r,i,s,o,a,c,l){var u=8&t;t|=u?32:64,4&(t&=~(u?64:32))||(t&=-4);var d=[e,t,i,u?s:void 0,u?o:void 0,u?void 0:s,u?void 0:o,a,c,l],h=n.apply(void 0,d);return ls(e)&&_s(h,d),h.placeholder=r,ws(h,e,t)}function Pi(e){var t=pe[e];return function(e,n){if(e=sa(e),(n=null==n?0:an(ra(n),292))&&nn(e)){var r=(aa(e)+"e").split("e");return+((r=(aa(t(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return t(e)}}var Li=gn&&1/Ut(new gn([,-0]))[1]==1/0?function(e){return new gn(e)}:Ya;function zi(e){return function(t){var n=ns(t);return n==g?Bt(t):n==b?$t(t):function(e,t){return ft(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function Fi(e,t,n,i,a,c,l,u){var d=2&t;if(!d&&"function"!=typeof e)throw new _e(s);var h=i?i.length:0;if(h||(t&=-97,i=a=void 0),l=void 0===l?l:on(ra(l),0),u=void 0===u?u:ra(u),h-=a?a.length:0,64&t){var f=i,p=a;i=a=void 0}var g=d?void 0:Gi(e),m=[e,t,n,i,a,f,p,c,l,u];if(g&&function(e,t){var n=e[1],r=t[1],i=n|r,s=i<131,a=128==r&&8==n||128==r&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!s&&!a)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var c=t[3];if(c){var l=e[3];e[3]=l?gi(l,c,t[4]):c,e[4]=l?Ht(e[3],o):t[4]}(c=t[5])&&(l=e[5],e[5]=l?mi(l,c,t[6]):c,e[6]=l?Ht(e[5],o):t[6]);(c=t[7])&&(e[7]=c);128&r&&(e[8]=null==e[8]?t[8]:an(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=i}(m,g),e=m[0],t=m[1],n=m[2],i=m[3],a=m[4],!(u=m[9]=void 0===m[9]?d?0:e.length:on(m[9]-h,0))&&24&t&&(t&=-25),t&&1!=t)v=8==t||16==t?function(e,t,n){var i=Ai(e);return function s(){for(var o=arguments.length,a=r(o),c=o,l=Xi(s);c--;)a[c]=arguments[c];var u=o<3&&a[0]!==l&&a[o-1]!==l?[]:Ht(a,l);if((o-=u.length)<n)return Di(e,t,Ti,s.placeholder,void 0,a,u,void 0,void 0,n-o);var d=this&&this!==Ge&&this instanceof s?i:e;return st(d,this,a)}}(e,t,u):32!=t&&33!=t||a.length?Ti.apply(void 0,m):function(e,t,n,i){var s=1&t,o=Ai(e);return function t(){for(var a=-1,c=arguments.length,l=-1,u=i.length,d=r(u+c),h=this&&this!==Ge&&this instanceof t?o:e;++l<u;)d[l]=i[l];for(;c--;)d[l++]=arguments[++a];return st(h,s?n:this,d)}}(e,t,n,i);else var v=function(e,t,n){var r=1&t,i=Ai(e);return function t(){var s=this&&this!==Ge&&this instanceof t?i:e;return s.apply(r?n:this,arguments)}}(e,t,n);return ws((g?Hr:_s)(v,m),e,t)}function Bi(e,t,n,r){return void 0===e||Oo(e,we[n])&&!Ee.call(r,n)?t:e}function qi(e,t,n,r,i,s){return Uo(e)&&Uo(t)&&(s.set(t,e),kr(e,t,void 0,qi,s),s.delete(t)),e}function Hi(e){return Go(e)?void 0:e}function Ui(e,t,n,r,i,s){var o=1&n,a=e.length,c=t.length;if(a!=c&&!(o&&c>a))return!1;var l=s.get(e),u=s.get(t);if(l&&u)return l==t&&u==e;var d=-1,h=!0,f=2&n?new Pn:void 0;for(s.set(e,t),s.set(t,e);++d<a;){var p=e[d],g=t[d];if(r)var m=o?r(g,p,d,t,e,s):r(p,g,d,e,t,s);if(void 0!==m){if(m)continue;h=!1;break}if(f){if(!vt(t,(function(e,t){if(!It(f,t)&&(p===e||i(p,e,n,r,s)))return f.push(t)}))){h=!1;break}}else if(p!==g&&!i(p,g,n,r,s)){h=!1;break}}return s.delete(e),s.delete(t),h}function $i(e){return ys(ps(e,void 0,Ms),e+"")}function Wi(e){return hr(e,ya,es)}function Vi(e){return hr(e,wa,ts)}var Gi=_n?function(e){return _n.get(e)}:Ya;function Ji(e){for(var t=e.name+"",n=bn[t],r=Ee.call(bn,t)?n.length:0;r--;){var i=n[r],s=i.func;if(null==s||s==e)return i.name}return t}function Xi(e){return(Ee.call(Tn,"placeholder")?Tn:e).placeholder}function Qi(){var e=Tn.iteratee||Ga;return e=e===Ga?xr:e,arguments.length?e(arguments[0],arguments[1]):e}function Yi(e,t){var n,r,i=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function Ki(e){for(var t=ya(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,hs(i)]}return t}function Zi(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return Sr(n)?n:void 0}var es=en?function(e){return null==e?[]:(e=ge(e),ut(en(e),(function(t){return Je.call(e,t)})))}:ic,ts=en?function(e){for(var t=[];e;)pt(t,es(e)),e=We(e);return t}:ic,ns=fr;function rs(e,t,n){for(var r=-1,i=(t=ai(t,e)).length,s=!1;++r<i;){var o=As(t[r]);if(!(s=null!=e&&n(e,o)))break;e=e[o]}return s||++r!=i?s:!!(i=null==e?0:e.length)&&Ho(i)&&os(o,i)&&(Mo(e)||Io(e))}function is(e){return"function"!=typeof e.constructor||ds(e)?{}:On(We(e))}function ss(e){return Mo(e)||Io(e)||!!(Ye&&e&&e[Ye])}function os(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&ce.test(e))&&e>-1&&e%1==0&&e<t}function as(e,t,n){if(!Uo(n))return!1;var r=typeof t;return!!("number"==r?Do(n)&&os(t,n.length):"string"==r&&t in n)&&Oo(n[t],e)}function cs(e,t){if(Mo(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Yo(e))||($.test(e)||!U.test(e)||null!=t&&e in ge(t))}function ls(e){var t=Ji(e),n=Tn[t];if("function"!=typeof n||!(t in In.prototype))return!1;if(e===n)return!0;var r=Gi(n);return!!r&&e===r[0]}(hn&&ns(new hn(new ArrayBuffer(1)))!=E||fn&&ns(new fn)!=g||pn&&"[object Promise]"!=ns(pn.resolve())||gn&&ns(new gn)!=b||mn&&ns(new mn)!=S)&&(ns=function(e){var t=fr(e),n=t==v?e.constructor:void 0,r=n?Cs(n):"";if(r)switch(r){case yn:return E;case wn:return g;case Sn:return"[object Promise]";case xn:return b;case En:return S}return t});var us=Se?Bo:sc;function ds(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||we)}function hs(e){return e==e&&!Uo(e)}function fs(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in ge(n)))}}function ps(e,t,n){return t=on(void 0===t?e.length-1:t,0),function(){for(var i=arguments,s=-1,o=on(i.length-t,0),a=r(o);++s<o;)a[s]=i[t+s];s=-1;for(var c=r(t+1);++s<t;)c[s]=i[s];return c[t]=n(a),st(e,this,c)}}function gs(e,t){return t.length<2?e:dr(e,Wr(t,0,-1))}function ms(e,t){for(var n=e.length,r=an(t.length,n),i=vi(e);r--;){var s=t[r];e[r]=os(s,n)?i[s]:void 0}return e}function vs(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var _s=Ss(Hr),bs=Yt||function(e,t){return Ge.setTimeout(e,t)},ys=Ss(Ur);function ws(e,t,n){var r=t+"";return ys(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Y,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return at(a,(function(n){var r="_."+n[0];t&n[1]&&!dt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(K);return t?t[1].split(Z):[]}(r),n)))}function Ss(e){var t=0,n=0;return function(){var r=cn(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function xs(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n<t;){var s=Pr(n,i),o=e[s];e[s]=e[n],e[n]=o}return e.length=t,e}var Es=function(e){var t=xo(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(W,(function(e,n,r,i){t.push(r?i.replace(te,"$1"):n||e)})),t}));function As(e){if("string"==typeof e||Yo(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Cs(e){if(null!=e){try{return xe.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function js(e){if(e instanceof In)return e.clone();var t=new Nn(e.__wrapped__,e.__chain__);return t.__actions__=vi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Ts=zr((function(e,t){return Po(e)?Zn(e,sr(t,1,Po,!0)):[]})),Os=zr((function(e,t){var n=zs(t);return Po(n)&&(n=void 0),Po(e)?Zn(e,sr(t,1,Po,!0),Qi(n,2)):[]})),ks=zr((function(e,t){var n=zs(t);return Po(n)&&(n=void 0),Po(e)?Zn(e,sr(t,1,Po,!0),void 0,n):[]}));function Ns(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=on(r+i,0)),yt(e,Qi(t,3),i)}function Is(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=ra(n),i=n<0?on(r+i,0):an(i,r-1)),yt(e,Qi(t,3),i,!0)}function Ms(e){return(null==e?0:e.length)?sr(e,1):[]}function Rs(e){return e&&e.length?e[0]:void 0}var Ds=zr((function(e){var t=ft(e,si);return t.length&&t[0]===e[0]?vr(t):[]})),Ps=zr((function(e){var t=zs(e),n=ft(e,si);return t===zs(n)?t=void 0:n.pop(),n.length&&n[0]===e[0]?vr(n,Qi(t,2)):[]})),Ls=zr((function(e){var t=zs(e),n=ft(e,si);return(t="function"==typeof t?t:void 0)&&n.pop(),n.length&&n[0]===e[0]?vr(n,void 0,t):[]}));function zs(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}var Fs=zr(Bs);function Bs(e,t){return e&&e.length&&t&&t.length?Rr(e,t):e}var qs=$i((function(e,t){var n=null==e?0:e.length,r=Jn(e,t);return Dr(e,ft(t,(function(e){return os(e,n)?+e:e})).sort(pi)),r}));function Hs(e){return null==e?e:dn.call(e)}var Us=zr((function(e){return Kr(sr(e,1,Po,!0))})),$s=zr((function(e){var t=zs(e);return Po(t)&&(t=void 0),Kr(sr(e,1,Po,!0),Qi(t,2))})),Ws=zr((function(e){var t=zs(e);return t="function"==typeof t?t:void 0,Kr(sr(e,1,Po,!0),void 0,t)}));function Vs(e){if(!e||!e.length)return[];var t=0;return e=ut(e,(function(e){if(Po(e))return t=on(e.length,t),!0})),Ot(t,(function(t){return ft(e,At(t))}))}function Gs(e,t){if(!e||!e.length)return[];var n=Vs(e);return null==t?n:ft(n,(function(e){return st(t,void 0,e)}))}var Js=zr((function(e,t){return Po(e)?Zn(e,t):[]})),Xs=zr((function(e){return ri(ut(e,Po))})),Qs=zr((function(e){var t=zs(e);return Po(t)&&(t=void 0),ri(ut(e,Po),Qi(t,2))})),Ys=zr((function(e){var t=zs(e);return t="function"==typeof t?t:void 0,ri(ut(e,Po),void 0,t)})),Ks=zr(Vs);var Zs=zr((function(e){var t=e.length,n=t>1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Gs(e,n)}));function eo(e){var t=Tn(e);return t.__chain__=!0,t}function to(e,t){return t(e)}var no=$i((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Jn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof In&&os(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:to,args:[i],thisArg:void 0}),new Nn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var ro=bi((function(e,t,n){Ee.call(e,n)?++e[n]:Gn(e,n,1)}));var io=Ci(Ns),so=Ci(Is);function oo(e,t){return(Mo(e)?at:er)(e,Qi(t,3))}function ao(e,t){return(Mo(e)?ct:tr)(e,Qi(t,3))}var co=bi((function(e,t,n){Ee.call(e,n)?e[n].push(t):Gn(e,n,[t])}));var lo=zr((function(e,t,n){var i=-1,s="function"==typeof t,o=Do(e)?r(e.length):[];return er(e,(function(e){o[++i]=s?st(t,e,n):_r(e,t,n)})),o})),uo=bi((function(e,t,n){Gn(e,n,t)}));function ho(e,t){return(Mo(e)?ft:jr)(e,Qi(t,3))}var fo=bi((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var po=zr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&as(e,t[0],t[1])?t=[]:n>2&&as(t[0],t[1],t[2])&&(t=[t[0]]),Ir(e,sr(t,1),[])})),go=Qt||function(){return Ge.Date.now()};function mo(e,t,n){return t=n?void 0:t,Fi(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function vo(e,t){var n;if("function"!=typeof t)throw new _e(s);return e=ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var _o=zr((function(e,t,n){var r=1;if(n.length){var i=Ht(n,Xi(_o));r|=32}return Fi(e,r,t,n,i)})),bo=zr((function(e,t,n){var r=3;if(n.length){var i=Ht(n,Xi(bo));r|=32}return Fi(t,r,e,n,i)}));function yo(e,t,n){var r,i,o,a,c,l,u=0,d=!1,h=!1,f=!0;if("function"!=typeof e)throw new _e(s);function p(t){var n=r,s=i;return r=i=void 0,u=t,a=e.apply(s,n)}function g(e){return u=e,c=bs(v,t),d?p(e):a}function m(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=o}function v(){var e=go();if(m(e))return _(e);c=bs(v,function(e){var n=t-(e-l);return h?an(n,o-(e-u)):n}(e))}function _(e){return c=void 0,f&&r?p(e):(r=i=void 0,a)}function b(){var e=go(),n=m(e);if(r=arguments,i=this,l=e,n){if(void 0===c)return g(l);if(h)return ui(c),c=bs(v,t),p(l)}return void 0===c&&(c=bs(v,t)),a}return t=sa(t)||0,Uo(n)&&(d=!!n.leading,o=(h="maxWait"in n)?on(sa(n.maxWait)||0,t):o,f="trailing"in n?!!n.trailing:f),b.cancel=function(){void 0!==c&&ui(c),u=0,r=l=i=c=void 0},b.flush=function(){return void 0===c?a:_(go())},b}var wo=zr((function(e,t){return Kn(e,1,t)})),So=zr((function(e,t,n){return Kn(e,sa(t)||0,n)}));function xo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new _e(s);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],s=n.cache;if(s.has(i))return s.get(i);var o=e.apply(this,r);return n.cache=s.set(i,o)||s,o};return n.cache=new(xo.Cache||Dn),n}function Eo(e){if("function"!=typeof e)throw new _e(s);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}xo.Cache=Dn;var Ao=ci((function(e,t){var n=(t=1==t.length&&Mo(t[0])?ft(t[0],kt(Qi())):ft(sr(t,1),kt(Qi()))).length;return zr((function(r){for(var i=-1,s=an(r.length,n);++i<s;)r[i]=t[i].call(this,r[i]);return st(e,this,r)}))})),Co=zr((function(e,t){return Fi(e,32,void 0,t,Ht(t,Xi(Co)))})),jo=zr((function(e,t){return Fi(e,64,void 0,t,Ht(t,Xi(jo)))})),To=$i((function(e,t){return Fi(e,256,void 0,void 0,void 0,t)}));function Oo(e,t){return e===t||e!=e&&t!=t}var ko=Ri(pr),No=Ri((function(e,t){return e>=t})),Io=br(function(){return arguments}())?br:function(e){return $o(e)&&Ee.call(e,"callee")&&!Je.call(e,"callee")},Mo=r.isArray,Ro=Ze?kt(Ze):function(e){return $o(e)&&fr(e)==x};function Do(e){return null!=e&&Ho(e.length)&&!Bo(e)}function Po(e){return $o(e)&&Do(e)}var Lo=tn||sc,zo=et?kt(et):function(e){return $o(e)&&fr(e)==d};function Fo(e){if(!$o(e))return!1;var t=fr(e);return t==h||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Go(e)}function Bo(e){if(!Uo(e))return!1;var t=fr(e);return t==f||t==p||"[object AsyncFunction]"==t||"[object Proxy]"==t}function qo(e){return"number"==typeof e&&e==ra(e)}function Ho(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Uo(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $o(e){return null!=e&&"object"==typeof e}var Wo=tt?kt(tt):function(e){return $o(e)&&ns(e)==g};function Vo(e){return"number"==typeof e||$o(e)&&fr(e)==m}function Go(e){if(!$o(e)||fr(e)!=v)return!1;var t=We(e);if(null===t)return!0;var n=Ee.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&xe.call(n)==Te}var Jo=nt?kt(nt):function(e){return $o(e)&&fr(e)==_};var Xo=rt?kt(rt):function(e){return $o(e)&&ns(e)==b};function Qo(e){return"string"==typeof e||!Mo(e)&&$o(e)&&fr(e)==y}function Yo(e){return"symbol"==typeof e||$o(e)&&fr(e)==w}var Ko=it?kt(it):function(e){return $o(e)&&Ho(e.length)&&!!Be[fr(e)]};var Zo=Ri(Cr),ea=Ri((function(e,t){return e<=t}));function ta(e){if(!e)return[];if(Do(e))return Qo(e)?Vt(e):vi(e);if(Ke&&e[Ke])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ke]());var t=ns(e);return(t==g?Bt:t==b?Ut:Oa)(e)}function na(e){return e?(e=sa(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ra(e){var t=na(e),n=t%1;return t==t?n?t-n:t:0}function ia(e){return e?Xn(ra(e),0,4294967295):0}function sa(e){if("number"==typeof e)return e;if(Yo(e))return NaN;if(Uo(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Uo(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(J,"");var n=se.test(e);return n||ae.test(e)?$e(e.slice(2),n?2:8):ie.test(e)?NaN:+e}function oa(e){return _i(e,wa(e))}function aa(e){return null==e?"":Yr(e)}var ca=yi((function(e,t){if(ds(t)||Do(t))_i(t,ya(t),e);else for(var n in t)Ee.call(t,n)&&Un(e,n,t[n])})),la=yi((function(e,t){_i(t,wa(t),e)})),ua=yi((function(e,t,n,r){_i(t,wa(t),e,r)})),da=yi((function(e,t,n,r){_i(t,ya(t),e,r)})),ha=$i(Jn);var fa=zr((function(e,t){e=ge(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&as(t[0],t[1],i)&&(r=1);++n<r;)for(var s=t[n],o=wa(s),a=-1,c=o.length;++a<c;){var l=o[a],u=e[l];(void 0===u||Oo(u,we[l])&&!Ee.call(e,l))&&(e[l]=s[l])}return e})),pa=zr((function(e){return e.push(void 0,qi),st(xa,void 0,e)}));function ga(e,t,n){var r=null==e?void 0:dr(e,t);return void 0===r?n:r}function ma(e,t){return null!=e&&rs(e,t,mr)}var va=Oi((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=je.call(t)),e[t]=n}),Ua(Va)),_a=Oi((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=je.call(t)),Ee.call(e,t)?e[t].push(n):e[t]=[n]}),Qi),ba=zr(_r);function ya(e){return Do(e)?zn(e):Er(e)}function wa(e){return Do(e)?zn(e,!0):Ar(e)}var Sa=yi((function(e,t,n){kr(e,t,n)})),xa=yi((function(e,t,n,r){kr(e,t,n,r)})),Ea=$i((function(e,t){var n={};if(null==e)return n;var r=!1;t=ft(t,(function(t){return t=ai(t,e),r||(r=t.length>1),t})),_i(e,Vi(e),n),r&&(n=Qn(n,7,Hi));for(var i=t.length;i--;)Zr(n,t[i]);return n}));var Aa=$i((function(e,t){return null==e?{}:function(e,t){return Mr(e,t,(function(t,n){return ma(e,n)}))}(e,t)}));function Ca(e,t){if(null==e)return{};var n=ft(Vi(e),(function(e){return[e]}));return t=Qi(t),Mr(e,n,(function(e,n){return t(e,n[0])}))}var ja=zi(ya),Ta=zi(wa);function Oa(e){return null==e?[]:Nt(e,ya(e))}var ka=Ei((function(e,t,n){return t=t.toLowerCase(),e+(n?Na(t):t)}));function Na(e){return Fa(aa(e).toLowerCase())}function Ia(e){return(e=aa(e))&&e.replace(le,Pt).replace(Me,"")}var Ma=Ei((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Ra=Ei((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Da=xi("toLowerCase");var Pa=Ei((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var La=Ei((function(e,t,n){return e+(n?" ":"")+Fa(t)}));var za=Ei((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Fa=xi("toUpperCase");function Ba(e,t,n){return e=aa(e),void 0===(t=n?void 0:t)?function(e){return Le.test(e)}(e)?function(e){return e.match(De)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var qa=zr((function(e,t){try{return st(e,void 0,t)}catch(e){return Fo(e)?e:new he(e)}})),Ha=$i((function(e,t){return at(t,(function(t){t=As(t),Gn(e,t,_o(e[t],e))})),e}));function Ua(e){return function(){return e}}var $a=ji(),Wa=ji(!0);function Va(e){return e}function Ga(e){return xr("function"==typeof e?e:Qn(e,1))}var Ja=zr((function(e,t){return function(n){return _r(n,e,t)}})),Xa=zr((function(e,t){return function(n){return _r(e,n,t)}}));function Qa(e,t,n){var r=ya(t),i=ur(t,r);null!=n||Uo(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=ur(t,ya(t)));var s=!(Uo(n)&&"chain"in n&&!n.chain),o=Bo(e);return at(i,(function(n){var r=t[n];e[n]=r,o&&(e.prototype[n]=function(){var t=this.__chain__;if(s||t){var n=e(this.__wrapped__),i=n.__actions__=vi(this.__actions__);return i.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,pt([this.value()],arguments))})})),e}function Ya(){}var Ka=Ni(ft),Za=Ni(lt),ec=Ni(vt);function tc(e){return cs(e)?At(As(e)):function(e){return function(t){return dr(t,e)}}(e)}var nc=Mi(),rc=Mi(!0);function ic(){return[]}function sc(){return!1}var oc=ki((function(e,t){return e+t}),0),ac=Pi("ceil"),cc=ki((function(e,t){return e/t}),1),lc=Pi("floor");var uc,dc=ki((function(e,t){return e*t}),1),hc=Pi("round"),fc=ki((function(e,t){return e-t}),0);return Tn.after=function(e,t){if("function"!=typeof t)throw new _e(s);return e=ra(e),function(){if(--e<1)return t.apply(this,arguments)}},Tn.ary=mo,Tn.assign=ca,Tn.assignIn=la,Tn.assignInWith=ua,Tn.assignWith=da,Tn.at=ha,Tn.before=vo,Tn.bind=_o,Tn.bindAll=Ha,Tn.bindKey=bo,Tn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Mo(e)?e:[e]},Tn.chain=eo,Tn.chunk=function(e,t,n){t=(n?as(e,t,n):void 0===t)?1:on(ra(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var s=0,o=0,a=r(Kt(i/t));s<i;)a[o++]=Wr(e,s,s+=t);return a},Tn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var s=e[t];s&&(i[r++]=s)}return i},Tn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=r(e-1),n=arguments[0],i=e;i--;)t[i-1]=arguments[i];return pt(Mo(n)?vi(n):[n],sr(t,1))},Tn.cond=function(e){var t=null==e?0:e.length,n=Qi();return e=t?ft(e,(function(e){if("function"!=typeof e[1])throw new _e(s);return[n(e[0]),e[1]]})):[],zr((function(n){for(var r=-1;++r<t;){var i=e[r];if(st(i[0],this,n))return st(i[1],this,n)}}))},Tn.conforms=function(e){return function(e){var t=ya(e);return function(n){return Yn(n,e,t)}}(Qn(e,1))},Tn.constant=Ua,Tn.countBy=ro,Tn.create=function(e,t){var n=On(e);return null==t?n:Vn(n,t)},Tn.curry=function e(t,n,r){var i=Fi(t,8,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},Tn.curryRight=function e(t,n,r){var i=Fi(t,16,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},Tn.debounce=yo,Tn.defaults=fa,Tn.defaultsDeep=pa,Tn.defer=wo,Tn.delay=So,Tn.difference=Ts,Tn.differenceBy=Os,Tn.differenceWith=ks,Tn.drop=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,(t=n||void 0===t?1:ra(t))<0?0:t,r):[]},Tn.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,0,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t):[]},Tn.dropRightWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!0,!0):[]},Tn.dropWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!0):[]},Tn.fill=function(e,t,n,r){var i=null==e?0:e.length;return i?(n&&"number"!=typeof n&&as(e,t,n)&&(n=0,r=i),function(e,t,n,r){var i=e.length;for((n=ra(n))<0&&(n=-n>i?0:i+n),(r=void 0===r||r>i?i:ra(r))<0&&(r+=i),r=n>r?0:ia(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},Tn.filter=function(e,t){return(Mo(e)?ut:ir)(e,Qi(t,3))},Tn.flatMap=function(e,t){return sr(ho(e,t),1)},Tn.flatMapDeep=function(e,t){return sr(ho(e,t),1/0)},Tn.flatMapDepth=function(e,t,n){return n=void 0===n?1:ra(n),sr(ho(e,t),n)},Tn.flatten=Ms,Tn.flattenDeep=function(e){return(null==e?0:e.length)?sr(e,1/0):[]},Tn.flattenDepth=function(e,t){return(null==e?0:e.length)?sr(e,t=void 0===t?1:ra(t)):[]},Tn.flip=function(e){return Fi(e,512)},Tn.flow=$a,Tn.flowRight=Wa,Tn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];r[i[0]]=i[1]}return r},Tn.functions=function(e){return null==e?[]:ur(e,ya(e))},Tn.functionsIn=function(e){return null==e?[]:ur(e,wa(e))},Tn.groupBy=co,Tn.initial=function(e){return(null==e?0:e.length)?Wr(e,0,-1):[]},Tn.intersection=Ds,Tn.intersectionBy=Ps,Tn.intersectionWith=Ls,Tn.invert=va,Tn.invertBy=_a,Tn.invokeMap=lo,Tn.iteratee=Ga,Tn.keyBy=uo,Tn.keys=ya,Tn.keysIn=wa,Tn.map=ho,Tn.mapKeys=function(e,t){var n={};return t=Qi(t,3),cr(e,(function(e,r,i){Gn(n,t(e,r,i),e)})),n},Tn.mapValues=function(e,t){var n={};return t=Qi(t,3),cr(e,(function(e,r,i){Gn(n,r,t(e,r,i))})),n},Tn.matches=function(e){return Tr(Qn(e,1))},Tn.matchesProperty=function(e,t){return Or(e,Qn(t,1))},Tn.memoize=xo,Tn.merge=Sa,Tn.mergeWith=xa,Tn.method=Ja,Tn.methodOf=Xa,Tn.mixin=Qa,Tn.negate=Eo,Tn.nthArg=function(e){return e=ra(e),zr((function(t){return Nr(t,e)}))},Tn.omit=Ea,Tn.omitBy=function(e,t){return Ca(e,Eo(Qi(t)))},Tn.once=function(e){return vo(2,e)},Tn.orderBy=function(e,t,n,r){return null==e?[]:(Mo(t)||(t=null==t?[]:[t]),Mo(n=r?void 0:n)||(n=null==n?[]:[n]),Ir(e,t,n))},Tn.over=Ka,Tn.overArgs=Ao,Tn.overEvery=Za,Tn.overSome=ec,Tn.partial=Co,Tn.partialRight=jo,Tn.partition=fo,Tn.pick=Aa,Tn.pickBy=Ca,Tn.property=tc,Tn.propertyOf=function(e){return function(t){return null==e?void 0:dr(e,t)}},Tn.pull=Fs,Tn.pullAll=Bs,Tn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Rr(e,t,Qi(n,2)):e},Tn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Rr(e,t,void 0,n):e},Tn.pullAt=qs,Tn.range=nc,Tn.rangeRight=rc,Tn.rearg=To,Tn.reject=function(e,t){return(Mo(e)?ut:ir)(e,Eo(Qi(t,3)))},Tn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],s=e.length;for(t=Qi(t,3);++r<s;){var o=e[r];t(o,r,e)&&(n.push(o),i.push(r))}return Dr(e,i),n},Tn.rest=function(e,t){if("function"!=typeof e)throw new _e(s);return zr(e,t=void 0===t?t:ra(t))},Tn.reverse=Hs,Tn.sampleSize=function(e,t,n){return t=(n?as(e,t,n):void 0===t)?1:ra(t),(Mo(e)?Bn:Br)(e,t)},Tn.set=function(e,t,n){return null==e?e:qr(e,t,n)},Tn.setWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:qr(e,t,n,r)},Tn.shuffle=function(e){return(Mo(e)?qn:$r)(e)},Tn.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&"number"!=typeof n&&as(e,t,n)?(t=0,n=r):(t=null==t?0:ra(t),n=void 0===n?r:ra(n)),Wr(e,t,n)):[]},Tn.sortBy=po,Tn.sortedUniq=function(e){return e&&e.length?Xr(e):[]},Tn.sortedUniqBy=function(e,t){return e&&e.length?Xr(e,Qi(t,2)):[]},Tn.split=function(e,t,n){return n&&"number"!=typeof n&&as(e,t,n)&&(t=n=void 0),(n=void 0===n?4294967295:n>>>0)?(e=aa(e))&&("string"==typeof t||null!=t&&!Jo(t))&&!(t=Yr(t))&&Ft(e)?li(Vt(e),0,n):e.split(t,n):[]},Tn.spread=function(e,t){if("function"!=typeof e)throw new _e(s);return t=null==t?0:on(ra(t),0),zr((function(n){var r=n[t],i=li(n,0,t);return r&&pt(i,r),st(e,this,i)}))},Tn.tail=function(e){var t=null==e?0:e.length;return t?Wr(e,1,t):[]},Tn.take=function(e,t,n){return e&&e.length?Wr(e,0,(t=n||void 0===t?1:ra(t))<0?0:t):[]},Tn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t,r):[]},Tn.takeRightWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!1,!0):[]},Tn.takeWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3)):[]},Tn.tap=function(e,t){return t(e),e},Tn.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new _e(s);return Uo(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),yo(e,t,{leading:r,maxWait:t,trailing:i})},Tn.thru=to,Tn.toArray=ta,Tn.toPairs=ja,Tn.toPairsIn=Ta,Tn.toPath=function(e){return Mo(e)?ft(e,As):Yo(e)?[e]:vi(Es(aa(e)))},Tn.toPlainObject=oa,Tn.transform=function(e,t,n){var r=Mo(e),i=r||Lo(e)||Ko(e);if(t=Qi(t,4),null==n){var s=e&&e.constructor;n=i?r?new s:[]:Uo(e)&&Bo(s)?On(We(e)):{}}return(i?at:cr)(e,(function(e,r,i){return t(n,e,r,i)})),n},Tn.unary=function(e){return mo(e,1)},Tn.union=Us,Tn.unionBy=$s,Tn.unionWith=Ws,Tn.uniq=function(e){return e&&e.length?Kr(e):[]},Tn.uniqBy=function(e,t){return e&&e.length?Kr(e,Qi(t,2)):[]},Tn.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Kr(e,void 0,t):[]},Tn.unset=function(e,t){return null==e||Zr(e,t)},Tn.unzip=Vs,Tn.unzipWith=Gs,Tn.update=function(e,t,n){return null==e?e:ei(e,t,oi(n))},Tn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:ei(e,t,oi(n),r)},Tn.values=Oa,Tn.valuesIn=function(e){return null==e?[]:Nt(e,wa(e))},Tn.without=Js,Tn.words=Ba,Tn.wrap=function(e,t){return Co(oi(t),e)},Tn.xor=Xs,Tn.xorBy=Qs,Tn.xorWith=Ys,Tn.zip=Ks,Tn.zipObject=function(e,t){return ii(e||[],t||[],Un)},Tn.zipObjectDeep=function(e,t){return ii(e||[],t||[],qr)},Tn.zipWith=Zs,Tn.entries=ja,Tn.entriesIn=Ta,Tn.extend=la,Tn.extendWith=ua,Qa(Tn,Tn),Tn.add=oc,Tn.attempt=qa,Tn.camelCase=ka,Tn.capitalize=Na,Tn.ceil=ac,Tn.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=sa(n))==n?n:0),void 0!==t&&(t=(t=sa(t))==t?t:0),Xn(sa(e),t,n)},Tn.clone=function(e){return Qn(e,4)},Tn.cloneDeep=function(e){return Qn(e,5)},Tn.cloneDeepWith=function(e,t){return Qn(e,5,t="function"==typeof t?t:void 0)},Tn.cloneWith=function(e,t){return Qn(e,4,t="function"==typeof t?t:void 0)},Tn.conformsTo=function(e,t){return null==t||Yn(e,t,ya(t))},Tn.deburr=Ia,Tn.defaultTo=function(e,t){return null==e||e!=e?t:e},Tn.divide=cc,Tn.endsWith=function(e,t,n){e=aa(e),t=Yr(t);var r=e.length,i=n=void 0===n?r:Xn(ra(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},Tn.eq=Oo,Tn.escape=function(e){return(e=aa(e))&&F.test(e)?e.replace(L,Lt):e},Tn.escapeRegExp=function(e){return(e=aa(e))&&G.test(e)?e.replace(V,"\\$&"):e},Tn.every=function(e,t,n){var r=Mo(e)?lt:nr;return n&&as(e,t,n)&&(t=void 0),r(e,Qi(t,3))},Tn.find=io,Tn.findIndex=Ns,Tn.findKey=function(e,t){return bt(e,Qi(t,3),cr)},Tn.findLast=so,Tn.findLastIndex=Is,Tn.findLastKey=function(e,t){return bt(e,Qi(t,3),lr)},Tn.floor=lc,Tn.forEach=oo,Tn.forEachRight=ao,Tn.forIn=function(e,t){return null==e?e:or(e,Qi(t,3),wa)},Tn.forInRight=function(e,t){return null==e?e:ar(e,Qi(t,3),wa)},Tn.forOwn=function(e,t){return e&&cr(e,Qi(t,3))},Tn.forOwnRight=function(e,t){return e&&lr(e,Qi(t,3))},Tn.get=ga,Tn.gt=ko,Tn.gte=No,Tn.has=function(e,t){return null!=e&&rs(e,t,gr)},Tn.hasIn=ma,Tn.head=Rs,Tn.identity=Va,Tn.includes=function(e,t,n,r){e=Do(e)?e:Oa(e),n=n&&!r?ra(n):0;var i=e.length;return n<0&&(n=on(i+n,0)),Qo(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&wt(e,t,n)>-1},Tn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=on(r+i,0)),wt(e,t,i)},Tn.inRange=function(e,t,n){return t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n){return e>=an(t,n)&&e<on(t,n)}(e=sa(e),t,n)},Tn.invoke=ba,Tn.isArguments=Io,Tn.isArray=Mo,Tn.isArrayBuffer=Ro,Tn.isArrayLike=Do,Tn.isArrayLikeObject=Po,Tn.isBoolean=function(e){return!0===e||!1===e||$o(e)&&fr(e)==u},Tn.isBuffer=Lo,Tn.isDate=zo,Tn.isElement=function(e){return $o(e)&&1===e.nodeType&&!Go(e)},Tn.isEmpty=function(e){if(null==e)return!0;if(Do(e)&&(Mo(e)||"string"==typeof e||"function"==typeof e.splice||Lo(e)||Ko(e)||Io(e)))return!e.length;var t=ns(e);if(t==g||t==b)return!e.size;if(ds(e))return!Er(e).length;for(var n in e)if(Ee.call(e,n))return!1;return!0},Tn.isEqual=function(e,t){return yr(e,t)},Tn.isEqualWith=function(e,t,n){var r=(n="function"==typeof n?n:void 0)?n(e,t):void 0;return void 0===r?yr(e,t,void 0,n):!!r},Tn.isError=Fo,Tn.isFinite=function(e){return"number"==typeof e&&nn(e)},Tn.isFunction=Bo,Tn.isInteger=qo,Tn.isLength=Ho,Tn.isMap=Wo,Tn.isMatch=function(e,t){return e===t||wr(e,t,Ki(t))},Tn.isMatchWith=function(e,t,n){return n="function"==typeof n?n:void 0,wr(e,t,Ki(t),n)},Tn.isNaN=function(e){return Vo(e)&&e!=+e},Tn.isNative=function(e){if(us(e))throw new he("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Sr(e)},Tn.isNil=function(e){return null==e},Tn.isNull=function(e){return null===e},Tn.isNumber=Vo,Tn.isObject=Uo,Tn.isObjectLike=$o,Tn.isPlainObject=Go,Tn.isRegExp=Jo,Tn.isSafeInteger=function(e){return qo(e)&&e>=-9007199254740991&&e<=9007199254740991},Tn.isSet=Xo,Tn.isString=Qo,Tn.isSymbol=Yo,Tn.isTypedArray=Ko,Tn.isUndefined=function(e){return void 0===e},Tn.isWeakMap=function(e){return $o(e)&&ns(e)==S},Tn.isWeakSet=function(e){return $o(e)&&"[object WeakSet]"==fr(e)},Tn.join=function(e,t){return null==e?"":rn.call(e,t)},Tn.kebabCase=Ma,Tn.last=zs,Tn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ra(n))<0?on(r+i,0):an(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):yt(e,xt,i,!0)},Tn.lowerCase=Ra,Tn.lowerFirst=Da,Tn.lt=Zo,Tn.lte=ea,Tn.max=function(e){return e&&e.length?rr(e,Va,pr):void 0},Tn.maxBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),pr):void 0},Tn.mean=function(e){return Et(e,Va)},Tn.meanBy=function(e,t){return Et(e,Qi(t,2))},Tn.min=function(e){return e&&e.length?rr(e,Va,Cr):void 0},Tn.minBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),Cr):void 0},Tn.stubArray=ic,Tn.stubFalse=sc,Tn.stubObject=function(){return{}},Tn.stubString=function(){return""},Tn.stubTrue=function(){return!0},Tn.multiply=dc,Tn.nth=function(e,t){return e&&e.length?Nr(e,ra(t)):void 0},Tn.noConflict=function(){return Ge._===this&&(Ge._=Oe),this},Tn.noop=Ya,Tn.now=go,Tn.pad=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ii(Zt(i),n)+e+Ii(Kt(i),n)},Tn.padEnd=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;return t&&r<t?e+Ii(t-r,n):e},Tn.padStart=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;return t&&r<t?Ii(t-r,n)+e:e},Tn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),ln(aa(e).replace(X,""),t||0)},Tn.random=function(e,t,n){if(n&&"boolean"!=typeof n&&as(e,t,n)&&(t=n=void 0),void 0===n&&("boolean"==typeof t?(n=t,t=void 0):"boolean"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=na(e),void 0===t?(t=e,e=0):t=na(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=un();return an(e+i*(t-e+Ue("1e-"+((i+"").length-1))),t)}return Pr(e,t)},Tn.reduce=function(e,t,n){var r=Mo(e)?gt:jt,i=arguments.length<3;return r(e,Qi(t,4),n,i,er)},Tn.reduceRight=function(e,t,n){var r=Mo(e)?mt:jt,i=arguments.length<3;return r(e,Qi(t,4),n,i,tr)},Tn.repeat=function(e,t,n){return t=(n?as(e,t,n):void 0===t)?1:ra(t),Lr(aa(e),t)},Tn.replace=function(){var e=arguments,t=aa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Tn.result=function(e,t,n){var r=-1,i=(t=ai(t,e)).length;for(i||(i=1,e=void 0);++r<i;){var s=null==e?void 0:e[As(t[r])];void 0===s&&(r=i,s=n),e=Bo(s)?s.call(e):s}return e},Tn.round=hc,Tn.runInContext=e,Tn.sample=function(e){return(Mo(e)?Fn:Fr)(e)},Tn.size=function(e){if(null==e)return 0;if(Do(e))return Qo(e)?Wt(e):e.length;var t=ns(e);return t==g||t==b?e.size:Er(e).length},Tn.snakeCase=Pa,Tn.some=function(e,t,n){var r=Mo(e)?vt:Vr;return n&&as(e,t,n)&&(t=void 0),r(e,Qi(t,3))},Tn.sortedIndex=function(e,t){return Gr(e,t)},Tn.sortedIndexBy=function(e,t,n){return Jr(e,t,Qi(n,2))},Tn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=Gr(e,t);if(r<n&&Oo(e[r],t))return r}return-1},Tn.sortedLastIndex=function(e,t){return Gr(e,t,!0)},Tn.sortedLastIndexBy=function(e,t,n){return Jr(e,t,Qi(n,2),!0)},Tn.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var n=Gr(e,t,!0)-1;if(Oo(e[n],t))return n}return-1},Tn.startCase=La,Tn.startsWith=function(e,t,n){return e=aa(e),n=null==n?0:Xn(ra(n),0,e.length),t=Yr(t),e.slice(n,n+t.length)==t},Tn.subtract=fc,Tn.sum=function(e){return e&&e.length?Tt(e,Va):0},Tn.sumBy=function(e,t){return e&&e.length?Tt(e,Qi(t,2)):0},Tn.template=function(e,t,n){var r=Tn.templateSettings;n&&as(e,t,n)&&(t=void 0),e=aa(e),t=ua({},t,r,Bi);var i,s,o=ua({},t.imports,r.imports,Bi),a=ya(o),c=Nt(o,a),l=0,u=t.interpolate||ue,d="__p += '",h=me((t.escape||ue).source+"|"+u.source+"|"+(u===H?ne:ue).source+"|"+(t.evaluate||ue).source+"|$","g"),f="//# sourceURL="+(Ee.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Fe+"]")+"\n";e.replace(h,(function(t,n,r,o,a,c){return r||(r=o),d+=e.slice(l,c).replace(de,zt),n&&(i=!0,d+="' +\n__e("+n+") +\n'"),a&&(s=!0,d+="';\n"+a+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=c+t.length,t})),d+="';\n";var p=Ee.call(t,"variable")&&t.variable;p||(d="with (obj) {\n"+d+"\n}\n"),d=(s?d.replace(M,""):d).replace(R,"$1").replace(D,"$1;"),d="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var g=qa((function(){return fe(a,f+"return "+d).apply(void 0,c)}));if(g.source=d,Fo(g))throw g;return g},Tn.times=function(e,t){if((e=ra(e))<1||e>9007199254740991)return[];var n=4294967295,r=an(e,4294967295);e-=4294967295;for(var i=Ot(r,t=Qi(t));++n<e;)t(n);return i},Tn.toFinite=na,Tn.toInteger=ra,Tn.toLength=ia,Tn.toLower=function(e){return aa(e).toLowerCase()},Tn.toNumber=sa,Tn.toSafeInteger=function(e){return e?Xn(ra(e),-9007199254740991,9007199254740991):0===e?e:0},Tn.toString=aa,Tn.toUpper=function(e){return aa(e).toUpperCase()},Tn.trim=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(J,"");if(!e||!(t=Yr(t)))return e;var r=Vt(e),i=Vt(t);return li(r,Mt(r,i),Rt(r,i)+1).join("")},Tn.trimEnd=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(Q,"");if(!e||!(t=Yr(t)))return e;var r=Vt(e);return li(r,0,Rt(r,Vt(t))+1).join("")},Tn.trimStart=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(X,"");if(!e||!(t=Yr(t)))return e;var r=Vt(e);return li(r,Mt(r,Vt(t))).join("")},Tn.truncate=function(e,t){var n=30,r="...";if(Uo(t)){var i="separator"in t?t.separator:i;n="length"in t?ra(t.length):n,r="omission"in t?Yr(t.omission):r}var s=(e=aa(e)).length;if(Ft(e)){var o=Vt(e);s=o.length}if(n>=s)return e;var a=n-Wt(r);if(a<1)return r;var c=o?li(o,0,a).join(""):e.slice(0,a);if(void 0===i)return c+r;if(o&&(a+=c.length-a),Jo(i)){if(e.slice(a).search(i)){var l,u=c;for(i.global||(i=me(i.source,aa(re.exec(i))+"g")),i.lastIndex=0;l=i.exec(u);)var d=l.index;c=c.slice(0,void 0===d?a:d)}}else if(e.indexOf(Yr(i),a)!=a){var h=c.lastIndexOf(i);h>-1&&(c=c.slice(0,h))}return c+r},Tn.unescape=function(e){return(e=aa(e))&&z.test(e)?e.replace(P,Gt):e},Tn.uniqueId=function(e){var t=++Ae;return aa(e)+t},Tn.upperCase=za,Tn.upperFirst=Fa,Tn.each=oo,Tn.eachRight=ao,Tn.first=Rs,Qa(Tn,(uc={},cr(Tn,(function(e,t){Ee.call(Tn.prototype,t)||(uc[t]=e)})),uc),{chain:!1}),Tn.VERSION="4.17.20",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Tn[e].placeholder=Tn})),at(["drop","take"],(function(e,t){In.prototype[e]=function(n){n=void 0===n?1:on(ra(n),0);var r=this.__filtered__&&!t?new In(this):this.clone();return r.__filtered__?r.__takeCount__=an(n,r.__takeCount__):r.__views__.push({size:an(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},In.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),at(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;In.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Qi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),at(["head","last"],(function(e,t){var n="take"+(t?"Right":"");In.prototype[e]=function(){return this[n](1).value()[0]}})),at(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");In.prototype[e]=function(){return this.__filtered__?new In(this):this[n](1)}})),In.prototype.compact=function(){return this.filter(Va)},In.prototype.find=function(e){return this.filter(e).head()},In.prototype.findLast=function(e){return this.reverse().find(e)},In.prototype.invokeMap=zr((function(e,t){return"function"==typeof e?new In(this):this.map((function(n){return _r(n,e,t)}))})),In.prototype.reject=function(e){return this.filter(Eo(Qi(e)))},In.prototype.slice=function(e,t){e=ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new In(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},In.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},In.prototype.toArray=function(){return this.take(4294967295)},cr(In.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=Tn[r?"take"+("last"==t?"Right":""):t],s=r||/^find/.test(t);i&&(Tn.prototype[t]=function(){var t=this.__wrapped__,o=r?[1]:arguments,a=t instanceof In,c=o[0],l=a||Mo(t),u=function(e){var t=i.apply(Tn,pt([e],o));return r&&d?t[0]:t};l&&n&&"function"==typeof c&&1!=c.length&&(a=l=!1);var d=this.__chain__,h=!!this.__actions__.length,f=s&&!d,p=a&&!h;if(!s&&l){t=p?t:new In(this);var g=e.apply(t,o);return g.__actions__.push({func:to,args:[u],thisArg:void 0}),new Nn(g,d)}return f&&p?e.apply(this,o):(g=this.thru(u),f?r?g.value()[0]:g.value():g)})})),at(["pop","push","shift","sort","splice","unshift"],(function(e){var t=be[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Tn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Mo(i)?i:[],e)}return this[n]((function(n){return t.apply(Mo(n)?n:[],e)}))}})),cr(In.prototype,(function(e,t){var n=Tn[t];if(n){var r=n.name+"";Ee.call(bn,r)||(bn[r]=[]),bn[r].push({name:t,func:n})}})),bn[Ti(void 0,2).name]=[{name:"wrapper",func:void 0}],In.prototype.clone=function(){var e=new In(this.__wrapped__);return e.__actions__=vi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=vi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=vi(this.__views__),e},In.prototype.reverse=function(){if(this.__filtered__){var e=new In(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},In.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Mo(e),r=t<0,i=n?e.length:0,s=function(e,t,n){var r=-1,i=n.length;for(;++r<i;){var s=n[r],o=s.size;switch(s.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=an(t,e+o);break;case"takeRight":e=on(e,t-o)}}return{start:e,end:t}}(0,i,this.__views__),o=s.start,a=s.end,c=a-o,l=r?a:o-1,u=this.__iteratees__,d=u.length,h=0,f=an(c,this.__takeCount__);if(!n||!r&&i==c&&f==c)return ni(e,this.__actions__);var p=[];e:for(;c--&&h<f;){for(var g=-1,m=e[l+=t];++g<d;){var v=u[g],_=v.iteratee,b=v.type,y=_(m);if(2==b)m=y;else if(!y){if(1==b)continue e;break e}}p[h++]=m}return p},Tn.prototype.at=no,Tn.prototype.chain=function(){return eo(this)},Tn.prototype.commit=function(){return new Nn(this.value(),this.__chain__)},Tn.prototype.next=function(){void 0===this.__values__&&(this.__values__=ta(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},Tn.prototype.plant=function(e){for(var t,n=this;n instanceof kn;){var r=js(n);r.__index__=0,r.__values__=void 0,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},Tn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof In){var t=e;return this.__actions__.length&&(t=new In(this)),(t=t.reverse()).__actions__.push({func:to,args:[Hs],thisArg:void 0}),new Nn(t,this.__chain__)}return this.thru(Hs)},Tn.prototype.toJSON=Tn.prototype.valueOf=Tn.prototype.value=function(){return ni(this.__wrapped__,this.__actions__)},Tn.prototype.first=Tn.prototype.head,Ke&&(Tn.prototype[Ke]=function(){return this}),Tn}();Ge._=Jt,void 0===(i=function(){return Jt}.call(t,n,t,r))||(r.exports=i)}).call(this)}).call(this,n(11),n(36)(e))},function(e,t,n){e.exports=n(295)},function(e,t,n){e.exports=n(309)},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){function r(e){this.options=e||{locator:{}}}function i(){this.cdata=!1}function s(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function o(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}function a(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}r.prototype.parseFromString=function(e,t){var n=this.options,r=new l,s=n.domBuilder||new i,a=n.errorHandler,c=n.locator,u=n.xmlns||{},d={lt:"<",gt:">",amp:"&",quot:'"',apos:"'"};return c&&s.setDocumentLocator(c),r.errorHandler=function(e,t,n){if(!e){if(t instanceof i)return t;e=t}var r={},s=e instanceof Function;function a(t){var i=e[t];!i&&s&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+o(n))}||function(){}}return n=n||{},a("warning"),a("error"),a("fatalError"),r}(a,s,c),r.domBuilder=n.domBuilder||s,/\/x?html?$/.test(t)&&(d.nbsp=" ",d.copy="©",u[""]="http://www.w3.org/1999/xhtml"),u.xml=u.xml||"http://www.w3.org/XML/1998/namespace",e?r.parse(e,u,d):r.errorHandler.error("invalid doc source"),s.doc},i.prototype={startDocument:function(){this.doc=(new u).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.doc,o=i.createElementNS(e,n||t),a=r.length;c(this,o),this.currentElement=o,this.locator&&s(this.locator,o);for(var l=0;l<a;l++){e=r.getURI(l);var u=r.getValue(l),d=(n=r.getQName(l),i.createAttributeNS(e,n));this.locator&&s(r.getLocator(l),d),d.value=d.nodeValue=u,o.setAttributeNode(d)}},endElement:function(e,t,n){var r=this.currentElement;r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.doc.createProcessingInstruction(e,t);this.locator&&s(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){if(e=a.apply(this,arguments)){if(this.cdata)var r=this.doc.createCDATASection(e);else r=this.doc.createTextNode(e);this.currentElement?this.currentElement.appendChild(r):/^\s*$/.test(e)&&this.doc.appendChild(r),this.locator&&s(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.doc.normalize()},setDocumentLocator:function(e){(this.locator=e)&&(e.lineNumber=0)},comment:function(e,t,n){e=a.apply(this,arguments);var r=this.doc.createComment(e);this.locator&&s(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.doc.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&s(this.locator,i),c(this,i)}},warning:function(e){console.warn("[xmldom warning]\t"+e,o(this.locator))},error:function(e){console.error("[xmldom error]\t"+e,o(this.locator))},fatalError:function(e){throw console.error("[xmldom fatalError]\t"+e,o(this.locator)),e}},"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,(function(e){i.prototype[e]=function(){return null}}));var l=n(287).XMLReader,u=t.DOMImplementation=n(71).DOMImplementation;t.XMLSerializer=n(71).XMLSerializer,t.DOMParser=r},function(e,t,n){var r=n(21),i=n(19);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},function(e,t,n){var r=n(10).Symbol;e.exports=r},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(60),i=n(17);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),s=e.apply(n,t);return i(s)?s:n}}},function(e,t){e.exports=function(e,t){for(var n=-1,r=e.length,i=0,s=[];++n<r;){var o=e[n];o!==t&&"__lodash_placeholder__"!==o||(e[n]="__lodash_placeholder__",s[i++]=n)}return s}},function(e,t,n){var r=n(346),i=n(347),s=n(348),o=n(349),a=n(350);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=s,c.prototype.has=o,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(40);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(22)(Object,"create");e.exports=r},function(e,t,n){var r=n(364);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t,n){var r=n(15),i=n(67),s=n(387),o=n(113);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:s(o(e))}},function(e,t,n){var r=n(21),i=n(17);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(11))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_input.html --\x3e\n<div class="form-group">\n    ',"hidden"!==e.type&&(t+='\n        <label for="'+n(e.id)+'">'+n(e.label)+"</label>\n    "),t+="\n    ","password"===e.type&&e.fixed_username&&(t+='\n        \x3c!-- This is a hack to prevent Chrome from auto-filling the username in\n            any of the other input fields in the MUC configuration form. --\x3e\n        <input class="hidden-username" type="text" autocomplete="username" value="'+n(e.fixed_username)+'"></input>\n    '),t+='\n    <input \n        class="form-control" name="'+n(e.name)+'" type="'+n(e.type)+'" id="'+n(e.id)+'"\n        ',e.autocomplete&&(t+=' autocomplete="'+n(e.autocomplete)+'" '),t+="\n        ",e.placeholder&&(t+=' placeholder="'+n(e.placeholder)+'" '),t+="\n        ",e.value&&(t+=' value="'+n(e.value)+'" '),t+="\n        ",e.required&&(t+=' required="required" '),t+=" />\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_username.html --\x3e\n<div class="form-group">\n    ',e.label&&(t+="\n    <label>\n        "+n(e.label)+"\n    </label>\n    "),t+='\n    <div class="input-group">\n        <div class="input-group-prepend">\n            <input name="'+n(e.name)+'" type="'+n(e.type)+'"\n                ',e.value&&(t+=' value="'+n(e.value)+'" '),t+="\n                ",e.required&&(t+=' required="required" '),t+=' />\n            <div class="input-group-text col" title="'+n(e.domain)+'">'+n(e.domain)+"</div>\n        </div>\n    </div>\n</div>\n"}},function(e,t,n){var r,i;r=[n(33)],void 0===(i=function(e){return e.noConflict()}.apply(t,r))||(e.exports=i)},function(e,t,n){
+ */(function(){var o="Expected a function",s="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",u="[object Boolean]",d="[object Date]",h="[object Error]",f="[object Function]",p="[object GeneratorFunction]",g="[object Map]",m="[object Number]",v="[object Object]",_="[object RegExp]",b="[object Set]",y="[object String]",w="[object Symbol]",S="[object WeakMap]",x="[object ArrayBuffer]",E="[object DataView]",A="[object Float32Array]",C="[object Float64Array]",j="[object Int8Array]",T="[object Int16Array]",O="[object Int32Array]",k="[object Uint8Array]",N="[object Uint16Array]",I="[object Uint32Array]",M=/\b__p \+= '';/g,R=/\b(__p \+=) '' \+/g,D=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,L=/[&<>"']/g,z=RegExp(P.source),F=RegExp(L.source),B=/<%-([\s\S]+?)%>/g,q=/<%([\s\S]+?)%>/g,H=/<%=([\s\S]+?)%>/g,U=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$=/^\w*$/,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/[\\^$.*+?()[\]{}|]/g,V=RegExp(G.source),J=/^\s+|\s+$/g,X=/^\s+/,Q=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,K=/\{\n\/\* \[wrapped with (.+)\] \*/,Z=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,re=/\w*$/,ie=/^[-+]0x[0-9a-f]+$/i,oe=/^0b[01]+$/i,se=/^\[object .+?Constructor\]$/,ae=/^0o[0-7]+$/i,ce=/^(?:0|[1-9]\d*)$/,le=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ue=/($^)/,de=/['\n\r\u2028\u2029\\]/g,he="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",fe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pe="[\\ud800-\\udfff]",ge="["+fe+"]",me="["+he+"]",ve="\\d+",_e="[\\u2700-\\u27bf]",be="[a-z\\xdf-\\xf6\\xf8-\\xff]",ye="[^\\ud800-\\udfff"+fe+ve+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",we="\\ud83c[\\udffb-\\udfff]",Se="[^\\ud800-\\udfff]",xe="(?:\\ud83c[\\udde6-\\uddff]){2}",Ee="[\\ud800-\\udbff][\\udc00-\\udfff]",Ae="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ce="(?:"+be+"|"+ye+")",je="(?:"+Ae+"|"+ye+")",Te="(?:"+me+"|"+we+")"+"?",Oe="[\\ufe0e\\ufe0f]?"+Te+("(?:\\u200d(?:"+[Se,xe,Ee].join("|")+")[\\ufe0e\\ufe0f]?"+Te+")*"),ke="(?:"+[_e,xe,Ee].join("|")+")"+Oe,Ne="(?:"+[Se+me+"?",me,xe,Ee,pe].join("|")+")",Ie=RegExp("['’]","g"),Me=RegExp(me,"g"),Re=RegExp(we+"(?="+we+")|"+Ne+Oe,"g"),De=RegExp([Ae+"?"+be+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ge,Ae,"$"].join("|")+")",je+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ge,Ae+Ce,"$"].join("|")+")",Ae+"?"+Ce+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Ae+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ve,ke].join("|"),"g"),Pe=RegExp("[\\u200d\\ud800-\\udfff"+he+"\\ufe0e\\ufe0f]"),Le=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ze=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Fe=-1,Be={};Be[A]=Be[C]=Be[j]=Be[T]=Be[O]=Be[k]=Be["[object Uint8ClampedArray]"]=Be[N]=Be[I]=!0,Be[c]=Be[l]=Be[x]=Be[u]=Be[E]=Be[d]=Be[h]=Be[f]=Be[g]=Be[m]=Be[v]=Be[_]=Be[b]=Be[y]=Be[S]=!1;var qe={};qe[c]=qe[l]=qe[x]=qe[E]=qe[u]=qe[d]=qe[A]=qe[C]=qe[j]=qe[T]=qe[O]=qe[g]=qe[m]=qe[v]=qe[_]=qe[b]=qe[y]=qe[w]=qe[k]=qe["[object Uint8ClampedArray]"]=qe[N]=qe[I]=!0,qe[h]=qe[f]=qe[S]=!1;var He={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ue=parseFloat,$e=parseInt,We="object"==typeof e&&e&&e.Object===Object&&e,Ge="object"==typeof self&&self&&self.Object===Object&&self,Ve=We||Ge||Function("return this")(),Je=t&&!t.nodeType&&t,Xe=Je&&"object"==typeof r&&r&&!r.nodeType&&r,Qe=Xe&&Xe.exports===Je,Ye=Qe&&We.process,Ke=function(){try{var e=Xe&&Xe.require&&Xe.require("util").types;return e||Ye&&Ye.binding&&Ye.binding("util")}catch(e){}}(),Ze=Ke&&Ke.isArrayBuffer,et=Ke&&Ke.isDate,tt=Ke&&Ke.isMap,nt=Ke&&Ke.isRegExp,rt=Ke&&Ke.isSet,it=Ke&&Ke.isTypedArray;function ot(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function st(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var s=e[i];t(r,s,n(s),e)}return r}function at(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function ct(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function lt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function ut(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var s=e[n];t(s,n,e)&&(o[i++]=s)}return o}function dt(e,t){return!!(null==e?0:e.length)&&wt(e,t,0)>-1}function ht(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function ft(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function pt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function gt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function mt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function vt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var _t=At("length");function bt(e,t,n){var r;return n(e,(function(e,n,i){if(t(e,n,i))return r=n,!1})),r}function yt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function wt(e,t,n){return t==t?function(e,t,n){var r=n-1,i=e.length;for(;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):yt(e,xt,n)}function St(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function xt(e){return e!=e}function Et(e,t){var n=null==e?0:e.length;return n?Tt(e,t)/n:NaN}function At(e){return function(t){return null==t?void 0:t[e]}}function Ct(e){return function(t){return null==e?void 0:e[t]}}function jt(e,t,n,r,i){return i(e,(function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)})),n}function Tt(e,t){for(var n,r=-1,i=e.length;++r<i;){var o=t(e[r]);void 0!==o&&(n=void 0===n?o:n+o)}return n}function Ot(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function kt(e){return function(t){return e(t)}}function Nt(e,t){return ft(t,(function(t){return e[t]}))}function It(e,t){return e.has(t)}function Mt(e,t){for(var n=-1,r=e.length;++n<r&&wt(t,e[n],0)>-1;);return n}function Rt(e,t){for(var n=e.length;n--&&wt(t,e[n],0)>-1;);return n}function Dt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var Pt=Ct({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Lt=Ct({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function zt(e){return"\\"+He[e]}function Ft(e){return Pe.test(e)}function Bt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function qt(e,t){return function(n){return e(t(n))}}function Ht(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n];a!==t&&a!==s||(e[n]=s,o[i++]=n)}return o}function Ut(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}function $t(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n}function Wt(e){return Ft(e)?function(e){var t=Re.lastIndex=0;for(;Re.test(e);)++t;return t}(e):_t(e)}function Gt(e){return Ft(e)?function(e){return e.match(Re)||[]}(e):function(e){return e.split("")}(e)}var Vt=Ct({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"});var Jt=function e(t){var n,r=(t=null==t?Ve:Jt.defaults(Ve.Object(),t,Jt.pick(Ve,ze))).Array,i=t.Date,he=t.Error,fe=t.Function,pe=t.Math,ge=t.Object,me=t.RegExp,ve=t.String,_e=t.TypeError,be=r.prototype,ye=fe.prototype,we=ge.prototype,Se=t["__core-js_shared__"],xe=ye.toString,Ee=we.hasOwnProperty,Ae=0,Ce=(n=/[^.]+$/.exec(Se&&Se.keys&&Se.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",je=we.toString,Te=xe.call(ge),Oe=Ve._,ke=me("^"+xe.call(Ee).replace(G,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ne=Qe?t.Buffer:void 0,Re=t.Symbol,Pe=t.Uint8Array,He=Ne?Ne.allocUnsafe:void 0,We=qt(ge.getPrototypeOf,ge),Ge=ge.create,Je=we.propertyIsEnumerable,Xe=be.splice,Ye=Re?Re.isConcatSpreadable:void 0,Ke=Re?Re.iterator:void 0,_t=Re?Re.toStringTag:void 0,Ct=function(){try{var e=Zi(ge,"defineProperty");return e({},"",{}),e}catch(e){}}(),Xt=t.clearTimeout!==Ve.clearTimeout&&t.clearTimeout,Qt=i&&i.now!==Ve.Date.now&&i.now,Yt=t.setTimeout!==Ve.setTimeout&&t.setTimeout,Kt=pe.ceil,Zt=pe.floor,en=ge.getOwnPropertySymbols,tn=Ne?Ne.isBuffer:void 0,nn=t.isFinite,rn=be.join,on=qt(ge.keys,ge),sn=pe.max,an=pe.min,cn=i.now,ln=t.parseInt,un=pe.random,dn=be.reverse,hn=Zi(t,"DataView"),fn=Zi(t,"Map"),pn=Zi(t,"Promise"),gn=Zi(t,"Set"),mn=Zi(t,"WeakMap"),vn=Zi(ge,"create"),_n=mn&&new mn,bn={},yn=jo(hn),wn=jo(fn),Sn=jo(pn),xn=jo(gn),En=jo(mn),An=Re?Re.prototype:void 0,Cn=An?An.valueOf:void 0,jn=An?An.toString:void 0;function Tn(e){if($s(e)&&!Ms(e)&&!(e instanceof In)){if(e instanceof Nn)return e;if(Ee.call(e,"__wrapped__"))return To(e)}return new Nn(e)}var On=function(){function e(){}return function(t){if(!Us(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function kn(){}function Nn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function In(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Rn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Dn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Pn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Dn;++t<n;)this.add(e[t])}function Ln(e){var t=this.__data__=new Rn(e);this.size=t.size}function zn(e,t){var n=Ms(e),r=!n&&Is(e),i=!n&&!r&&Ls(e),o=!n&&!r&&!i&&Ks(e),s=n||r||i||o,a=s?Ot(e.length,ve):[],c=a.length;for(var l in e)!t&&!Ee.call(e,l)||s&&("length"==l||i&&("offset"==l||"parent"==l)||o&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||so(l,c))||a.push(l);return a}function Fn(e){var t=e.length;return t?e[Pr(0,t-1)]:void 0}function Bn(e,t){return Eo(vi(e),Xn(t,0,e.length))}function qn(e){return Eo(vi(e))}function Hn(e,t,n){(void 0!==n&&!Os(e[t],n)||void 0===n&&!(t in e))&&Vn(e,t,n)}function Un(e,t,n){var r=e[t];Ee.call(e,t)&&Os(r,n)&&(void 0!==n||t in e)||Vn(e,t,n)}function $n(e,t){for(var n=e.length;n--;)if(Os(e[n][0],t))return n;return-1}function Wn(e,t,n,r){return er(e,(function(e,i,o){t(r,e,n(e),o)})),r}function Gn(e,t){return e&&_i(t,ya(t),e)}function Vn(e,t,n){"__proto__"==t&&Ct?Ct(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function Jn(e,t){for(var n=-1,i=t.length,o=r(i),s=null==e;++n<i;)o[n]=s?void 0:ga(e,t[n]);return o}function Xn(e,t,n){return e==e&&(void 0!==n&&(e=e<=n?e:n),void 0!==t&&(e=e>=t?e:t)),e}function Qn(e,t,n,r,i,o){var s,a=1&t,l=2&t,h=4&t;if(n&&(s=i?n(e,r,i,o):n(e)),void 0!==s)return s;if(!Us(e))return e;var S=Ms(e);if(S){if(s=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&Ee.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!a)return vi(e,s)}else{var M=no(e),R=M==f||M==p;if(Ls(e))return di(e,a);if(M==v||M==c||R&&!i){if(s=l||R?{}:io(e),!a)return l?function(e,t){return _i(e,to(e),t)}(e,function(e,t){return e&&_i(t,wa(t),e)}(s,e)):function(e,t){return _i(e,eo(e),t)}(e,Gn(s,e))}else{if(!qe[M])return i?e:{};s=function(e,t,n){var r=e.constructor;switch(t){case x:return hi(e);case u:case d:return new r(+e);case E:return function(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case A:case C:case j:case T:case O:case k:case"[object Uint8ClampedArray]":case N:case I:return fi(e,n);case g:return new r;case m:case y:return new r(e);case _:return function(e){var t=new e.constructor(e.source,re.exec(e));return t.lastIndex=e.lastIndex,t}(e);case b:return new r;case w:return i=e,Cn?ge(Cn.call(i)):{}}var i}(e,M,a)}}o||(o=new Ln);var D=o.get(e);if(D)return D;o.set(e,s),Xs(e)?e.forEach((function(r){s.add(Qn(r,t,n,r,e,o))})):Ws(e)&&e.forEach((function(r,i){s.set(i,Qn(r,t,n,i,e,o))}));var P=S?void 0:(h?l?Gi:Wi:l?wa:ya)(e);return at(P||e,(function(r,i){P&&(r=e[i=r]),Un(s,i,Qn(r,t,n,i,e,o))})),s}function Yn(e,t,n){var r=n.length;if(null==e)return!r;for(e=ge(e);r--;){var i=n[r],o=t[i],s=e[i];if(void 0===s&&!(i in e)||!o(s))return!1}return!0}function Kn(e,t,n){if("function"!=typeof e)throw new _e(o);return yo((function(){e.apply(void 0,n)}),t)}function Zn(e,t,n,r){var i=-1,o=dt,s=!0,a=e.length,c=[],l=t.length;if(!a)return c;n&&(t=ft(t,kt(n))),r?(o=ht,s=!1):t.length>=200&&(o=It,s=!1,t=new Pn(t));e:for(;++i<a;){var u=e[i],d=null==n?u:n(u);if(u=r||0!==u?u:0,s&&d==d){for(var h=l;h--;)if(t[h]===d)continue e;c.push(u)}else o(t,d,r)||c.push(u)}return c}Tn.templateSettings={escape:B,evaluate:q,interpolate:H,variable:"",imports:{_:Tn}},Tn.prototype=kn.prototype,Tn.prototype.constructor=Tn,Nn.prototype=On(kn.prototype),Nn.prototype.constructor=Nn,In.prototype=On(kn.prototype),In.prototype.constructor=In,Mn.prototype.clear=function(){this.__data__=vn?vn(null):{},this.size=0},Mn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Mn.prototype.get=function(e){var t=this.__data__;if(vn){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return Ee.call(t,e)?t[e]:void 0},Mn.prototype.has=function(e){var t=this.__data__;return vn?void 0!==t[e]:Ee.call(t,e)},Mn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=vn&&void 0===t?"__lodash_hash_undefined__":t,this},Rn.prototype.clear=function(){this.__data__=[],this.size=0},Rn.prototype.delete=function(e){var t=this.__data__,n=$n(t,e);return!(n<0)&&(n==t.length-1?t.pop():Xe.call(t,n,1),--this.size,!0)},Rn.prototype.get=function(e){var t=this.__data__,n=$n(t,e);return n<0?void 0:t[n][1]},Rn.prototype.has=function(e){return $n(this.__data__,e)>-1},Rn.prototype.set=function(e,t){var n=this.__data__,r=$n(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Dn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(fn||Rn),string:new Mn}},Dn.prototype.delete=function(e){var t=Yi(this,e).delete(e);return this.size-=t?1:0,t},Dn.prototype.get=function(e){return Yi(this,e).get(e)},Dn.prototype.has=function(e){return Yi(this,e).has(e)},Dn.prototype.set=function(e,t){var n=Yi(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Pn.prototype.add=Pn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Pn.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.clear=function(){this.__data__=new Rn,this.size=0},Ln.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ln.prototype.get=function(e){return this.__data__.get(e)},Ln.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Rn){var r=n.__data__;if(!fn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Dn(r)}return n.set(e,t),this.size=n.size,this};var er=wi(cr),tr=wi(lr,!0);function nr(e,t){var n=!0;return er(e,(function(e,r,i){return n=!!t(e,r,i)})),n}function rr(e,t,n){for(var r=-1,i=e.length;++r<i;){var o=e[r],s=t(o);if(null!=s&&(void 0===a?s==s&&!Ys(s):n(s,a)))var a=s,c=o}return c}function ir(e,t){var n=[];return er(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}function or(e,t,n,r,i){var o=-1,s=e.length;for(n||(n=oo),i||(i=[]);++o<s;){var a=e[o];t>0&&n(a)?t>1?or(a,t-1,n,r,i):pt(i,a):r||(i[i.length]=a)}return i}var sr=Si(),ar=Si(!0);function cr(e,t){return e&&sr(e,t,ya)}function lr(e,t){return e&&ar(e,t,ya)}function ur(e,t){return ut(t,(function(t){return Bs(e[t])}))}function dr(e,t){for(var n=0,r=(t=ai(t,e)).length;null!=e&&n<r;)e=e[Co(t[n++])];return n&&n==r?e:void 0}function hr(e,t,n){var r=t(e);return Ms(e)?r:pt(r,n(e))}function fr(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":_t&&_t in ge(e)?function(e){var t=Ee.call(e,_t),n=e[_t];try{e[_t]=void 0;var r=!0}catch(e){}var i=je.call(e);r&&(t?e[_t]=n:delete e[_t]);return i}(e):function(e){return je.call(e)}(e)}function pr(e,t){return e>t}function gr(e,t){return null!=e&&Ee.call(e,t)}function mr(e,t){return null!=e&&t in ge(e)}function vr(e,t,n){for(var i=n?ht:dt,o=e[0].length,s=e.length,a=s,c=r(s),l=1/0,u=[];a--;){var d=e[a];a&&t&&(d=ft(d,kt(t))),l=an(d.length,l),c[a]=!n&&(t||o>=120&&d.length>=120)?new Pn(a&&d):void 0}d=e[0];var h=-1,f=c[0];e:for(;++h<o&&u.length<l;){var p=d[h],g=t?t(p):p;if(p=n||0!==p?p:0,!(f?It(f,g):i(u,g,n))){for(a=s;--a;){var m=c[a];if(!(m?It(m,g):i(e[a],g,n)))continue e}f&&f.push(g),u.push(p)}}return u}function _r(e,t,n){var r=null==(e=mo(e,t=ai(t,e)))?e:e[Co(Fo(t))];return null==r?void 0:ot(r,e,n)}function br(e){return $s(e)&&fr(e)==c}function yr(e,t,n,r,i){return e===t||(null==e||null==t||!$s(e)&&!$s(t)?e!=e&&t!=t:function(e,t,n,r,i,o){var s=Ms(e),a=Ms(t),f=s?l:no(e),p=a?l:no(t),S=(f=f==c?v:f)==v,A=(p=p==c?v:p)==v,C=f==p;if(C&&Ls(e)){if(!Ls(t))return!1;s=!0,S=!1}if(C&&!S)return o||(o=new Ln),s||Ks(e)?Ui(e,t,n,r,i,o):function(e,t,n,r,i,o,s){switch(n){case E:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case x:return!(e.byteLength!=t.byteLength||!o(new Pe(e),new Pe(t)));case u:case d:case m:return Os(+e,+t);case h:return e.name==t.name&&e.message==t.message;case _:case y:return e==t+"";case g:var a=Bt;case b:var c=1&r;if(a||(a=Ut),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;r|=2,s.set(e,t);var f=Ui(a(e),a(t),r,i,o,s);return s.delete(e),f;case w:if(Cn)return Cn.call(e)==Cn.call(t)}return!1}(e,t,f,n,r,i,o);if(!(1&n)){var j=S&&Ee.call(e,"__wrapped__"),T=A&&Ee.call(t,"__wrapped__");if(j||T){var O=j?e.value():e,k=T?t.value():t;return o||(o=new Ln),i(O,k,n,r,o)}}if(!C)return!1;return o||(o=new Ln),function(e,t,n,r,i,o){var s=1&n,a=Wi(e),c=a.length,l=Wi(t).length;if(c!=l&&!s)return!1;var u=c;for(;u--;){var d=a[u];if(!(s?d in t:Ee.call(t,d)))return!1}var h=o.get(e),f=o.get(t);if(h&&f)return h==t&&f==e;var p=!0;o.set(e,t),o.set(t,e);var g=s;for(;++u<c;){d=a[u];var m=e[d],v=t[d];if(r)var _=s?r(v,m,d,t,e,o):r(m,v,d,e,t,o);if(!(void 0===_?m===v||i(m,v,n,r,o):_)){p=!1;break}g||(g="constructor"==d)}if(p&&!g){var b=e.constructor,y=t.constructor;b==y||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof y&&y instanceof y||(p=!1)}return o.delete(e),o.delete(t),p}(e,t,n,r,i,o)}(e,t,n,r,yr,i))}function wr(e,t,n,r){var i=n.length,o=i,s=!r;if(null==e)return!o;for(e=ge(e);i--;){var a=n[i];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){var c=(a=n[i])[0],l=e[c],u=a[1];if(s&&a[2]){if(void 0===l&&!(c in e))return!1}else{var d=new Ln;if(r)var h=r(l,u,c,e,t,d);if(!(void 0===h?yr(u,l,3,r,d):h))return!1}}return!0}function Sr(e){return!(!Us(e)||(t=e,Ce&&Ce in t))&&(Bs(e)?ke:se).test(jo(e));var t}function xr(e){return"function"==typeof e?e:null==e?Ga:"object"==typeof e?Ms(e)?Or(e[0],e[1]):Tr(e):tc(e)}function Er(e){if(!ho(e))return on(e);var t=[];for(var n in ge(e))Ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}function Ar(e){if(!Us(e))return function(e){var t=[];if(null!=e)for(var n in ge(e))t.push(n);return t}(e);var t=ho(e),n=[];for(var r in e)("constructor"!=r||!t&&Ee.call(e,r))&&n.push(r);return n}function Cr(e,t){return e<t}function jr(e,t){var n=-1,i=Ds(e)?r(e.length):[];return er(e,(function(e,r,o){i[++n]=t(e,r,o)})),i}function Tr(e){var t=Ki(e);return 1==t.length&&t[0][2]?po(t[0][0],t[0][1]):function(n){return n===e||wr(n,e,t)}}function Or(e,t){return co(e)&&fo(t)?po(Co(e),t):function(n){var r=ga(n,e);return void 0===r&&r===t?ma(n,e):yr(t,r,3)}}function kr(e,t,n,r,i){e!==t&&sr(t,(function(o,s){if(i||(i=new Ln),Us(o))!function(e,t,n,r,i,o,s){var a=_o(e,n),c=_o(t,n),l=s.get(c);if(l)return void Hn(e,n,l);var u=o?o(a,c,n+"",e,t,s):void 0,d=void 0===u;if(d){var h=Ms(c),f=!h&&Ls(c),p=!h&&!f&&Ks(c);u=c,h||f||p?Ms(a)?u=a:Ps(a)?u=vi(a):f?(d=!1,u=di(c,!0)):p?(d=!1,u=fi(c,!0)):u=[]:Vs(c)||Is(c)?(u=a,Is(a)?u=sa(a):Us(a)&&!Bs(a)||(u=io(c))):d=!1}d&&(s.set(c,u),i(u,c,r,o,s),s.delete(c));Hn(e,n,u)}(e,t,s,n,kr,r,i);else{var a=r?r(_o(e,s),o,s+"",e,t,i):void 0;void 0===a&&(a=o),Hn(e,s,a)}}),wa)}function Nr(e,t){var n=e.length;if(n)return so(t+=t<0?n:0,n)?e[t]:void 0}function Ir(e,t,n){t=t.length?ft(t,(function(e){return Ms(e)?function(t){return dr(t,1===e.length?e[0]:e)}:e})):[Ga];var r=-1;return t=ft(t,kt(Qi())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(jr(e,(function(e,n,i){return{criteria:ft(t,(function(t){return t(e)})),index:++r,value:e}})),(function(e,t){return function(e,t,n){var r=-1,i=e.criteria,o=t.criteria,s=i.length,a=n.length;for(;++r<s;){var c=pi(i[r],o[r]);if(c){if(r>=a)return c;var l=n[r];return c*("desc"==l?-1:1)}}return e.index-t.index}(e,t,n)}))}function Mr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var s=t[r],a=dr(e,s);n(a,s)&&qr(o,ai(s,e),a)}return o}function Rr(e,t,n,r){var i=r?St:wt,o=-1,s=t.length,a=e;for(e===t&&(t=vi(t)),n&&(a=ft(e,kt(n)));++o<s;)for(var c=0,l=t[o],u=n?n(l):l;(c=i(a,u,c,r))>-1;)a!==e&&Xe.call(a,c,1),Xe.call(e,c,1);return e}function Dr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;so(i)?Xe.call(e,i,1):Zr(e,i)}}return e}function Pr(e,t){return e+Zt(un()*(t-e+1))}function Lr(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Zt(t/2))&&(e+=e)}while(t);return n}function zr(e,t){return wo(go(e,t,Ga),e+"")}function Fr(e){return Fn(Oa(e))}function Br(e,t){var n=Oa(e);return Eo(n,Xn(t,0,n.length))}function qr(e,t,n,r){if(!Us(e))return e;for(var i=-1,o=(t=ai(t,e)).length,s=o-1,a=e;null!=a&&++i<o;){var c=Co(t[i]),l=n;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(i!=s){var u=a[c];void 0===(l=r?r(u,c,a):void 0)&&(l=Us(u)?u:so(t[i+1])?[]:{})}Un(a,c,l),a=a[c]}return e}var Hr=_n?function(e,t){return _n.set(e,t),e}:Ga,Ur=Ct?function(e,t){return Ct(e,"toString",{configurable:!0,enumerable:!1,value:Ua(t),writable:!0})}:Ga;function $r(e){return Eo(Oa(e))}function Wr(e,t,n){var i=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=r(o);++i<o;)s[i]=e[i+t];return s}function Gr(e,t){var n;return er(e,(function(e,r,i){return!(n=t(e,r,i))})),!!n}function Vr(e,t,n){var r=0,i=null==e?r:e.length;if("number"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,s=e[o];null!==s&&!Ys(s)&&(n?s<=t:s<t)?r=o+1:i=o}return i}return Jr(e,t,Ga,n)}function Jr(e,t,n,r){var i=0,o=null==e?0:e.length;if(0===o)return 0;for(var s=(t=n(t))!=t,a=null===t,c=Ys(t),l=void 0===t;i<o;){var u=Zt((i+o)/2),d=n(e[u]),h=void 0!==d,f=null===d,p=d==d,g=Ys(d);if(s)var m=r||p;else m=l?p&&(r||h):a?p&&h&&(r||!f):c?p&&h&&!f&&(r||!g):!f&&!g&&(r?d<=t:d<t);m?i=u+1:o=u}return an(o,4294967294)}function Xr(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n],a=t?t(s):s;if(!n||!Os(a,c)){var c=a;o[i++]=0===s?0:s}}return o}function Qr(e){return"number"==typeof e?e:Ys(e)?NaN:+e}function Yr(e){if("string"==typeof e)return e;if(Ms(e))return ft(e,Yr)+"";if(Ys(e))return jn?jn.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Kr(e,t,n){var r=-1,i=dt,o=e.length,s=!0,a=[],c=a;if(n)s=!1,i=ht;else if(o>=200){var l=t?null:Li(e);if(l)return Ut(l);s=!1,i=It,c=new Pn}else c=t?[]:a;e:for(;++r<o;){var u=e[r],d=t?t(u):u;if(u=n||0!==u?u:0,s&&d==d){for(var h=c.length;h--;)if(c[h]===d)continue e;t&&c.push(d),a.push(u)}else i(c,d,n)||(c!==a&&c.push(d),a.push(u))}return a}function Zr(e,t){return null==(e=mo(e,t=ai(t,e)))||delete e[Co(Fo(t))]}function ei(e,t,n,r){return qr(e,t,n(dr(e,t)),r)}function ti(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?Wr(e,r?0:o,r?o+1:i):Wr(e,r?o+1:0,r?i:o)}function ni(e,t){var n=e;return n instanceof In&&(n=n.value()),gt(t,(function(e,t){return t.func.apply(t.thisArg,pt([e],t.args))}),n)}function ri(e,t,n){var i=e.length;if(i<2)return i?Kr(e[0]):[];for(var o=-1,s=r(i);++o<i;)for(var a=e[o],c=-1;++c<i;)c!=o&&(s[o]=Zn(s[o]||a,e[c],t,n));return Kr(or(s,1),t,n)}function ii(e,t,n){for(var r=-1,i=e.length,o=t.length,s={};++r<i;){var a=r<o?t[r]:void 0;n(s,e[r],a)}return s}function oi(e){return Ps(e)?e:[]}function si(e){return"function"==typeof e?e:Ga}function ai(e,t){return Ms(e)?e:co(e,t)?[e]:Ao(aa(e))}var ci=zr;function li(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:Wr(e,t,n)}var ui=Xt||function(e){return Ve.clearTimeout(e)};function di(e,t){if(t)return e.slice();var n=e.length,r=He?He(n):new e.constructor(n);return e.copy(r),r}function hi(e){var t=new e.constructor(e.byteLength);return new Pe(t).set(new Pe(e)),t}function fi(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function pi(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,o=Ys(e),s=void 0!==t,a=null===t,c=t==t,l=Ys(t);if(!a&&!l&&!o&&e>t||o&&s&&c&&!a&&!l||r&&s&&c||!n&&c||!i)return 1;if(!r&&!o&&!l&&e<t||l&&n&&i&&!r&&!o||a&&n&&i||!s&&i||!c)return-1}return 0}function gi(e,t,n,i){for(var o=-1,s=e.length,a=n.length,c=-1,l=t.length,u=sn(s-a,0),d=r(l+u),h=!i;++c<l;)d[c]=t[c];for(;++o<a;)(h||o<s)&&(d[n[o]]=e[o]);for(;u--;)d[c++]=e[o++];return d}function mi(e,t,n,i){for(var o=-1,s=e.length,a=-1,c=n.length,l=-1,u=t.length,d=sn(s-c,0),h=r(d+u),f=!i;++o<d;)h[o]=e[o];for(var p=o;++l<u;)h[p+l]=t[l];for(;++a<c;)(f||o<s)&&(h[p+n[a]]=e[o++]);return h}function vi(e,t){var n=-1,i=e.length;for(t||(t=r(i));++n<i;)t[n]=e[n];return t}function _i(e,t,n,r){var i=!n;n||(n={});for(var o=-1,s=t.length;++o<s;){var a=t[o],c=r?r(n[a],e[a],a,n,e):void 0;void 0===c&&(c=e[a]),i?Vn(n,a,c):Un(n,a,c)}return n}function bi(e,t){return function(n,r){var i=Ms(n)?st:Wn,o=t?t():{};return i(n,e,Qi(r,2),o)}}function yi(e){return zr((function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(i--,o):void 0,s&&ao(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=ge(t);++r<i;){var a=n[r];a&&e(t,a,r,o)}return t}))}function wi(e,t){return function(n,r){if(null==n)return n;if(!Ds(n))return e(n,r);for(var i=n.length,o=t?i:-1,s=ge(n);(t?o--:++o<i)&&!1!==r(s[o],o,s););return n}}function Si(e){return function(t,n,r){for(var i=-1,o=ge(t),s=r(t),a=s.length;a--;){var c=s[e?a:++i];if(!1===n(o[c],c,o))break}return t}}function xi(e){return function(t){var n=Ft(t=aa(t))?Gt(t):void 0,r=n?n[0]:t.charAt(0),i=n?li(n,1).join(""):t.slice(1);return r[e]()+i}}function Ei(e){return function(t){return gt(Ba(Ia(t).replace(Ie,"")),e,"")}}function Ai(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=On(e.prototype),r=e.apply(n,t);return Us(r)?r:n}}function Ci(e){return function(t,n,r){var i=ge(t);if(!Ds(t)){var o=Qi(n,3);t=ya(t),n=function(e){return o(i[e],e,i)}}var s=e(t,n,r);return s>-1?i[o?t[s]:s]:void 0}}function ji(e){return $i((function(t){var n=t.length,r=n,i=Nn.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new _e(o);if(i&&!a&&"wrapper"==Ji(s))var a=new Nn([],!0)}for(r=a?r:n;++r<n;){var c=Ji(s=t[r]),l="wrapper"==c?Vi(s):void 0;a=l&&lo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?a[Ji(l[0])].apply(a,l[3]):1==s.length&&lo(s)?a[c]():a.thru(s)}return function(){var e=arguments,r=e[0];if(a&&1==e.length&&Ms(r))return a.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}}))}function Ti(e,t,n,i,o,s,a,c,l,u){var d=128&t,h=1&t,f=2&t,p=24&t,g=512&t,m=f?void 0:Ai(e);return function v(){for(var _=arguments.length,b=r(_),y=_;y--;)b[y]=arguments[y];if(p)var w=Xi(v),S=Dt(b,w);if(i&&(b=gi(b,i,o,p)),s&&(b=mi(b,s,a,p)),_-=S,p&&_<u){var x=Ht(b,w);return Di(e,t,Ti,v.placeholder,n,b,x,c,l,u-_)}var E=h?n:this,A=f?E[e]:e;return _=b.length,c?b=vo(b,c):g&&_>1&&b.reverse(),d&&l<_&&(b.length=l),this&&this!==Ve&&this instanceof v&&(A=m||Ai(A)),A.apply(E,b)}}function Oi(e,t){return function(n,r){return function(e,t,n,r){return cr(e,(function(e,i,o){t(r,n(e),i,o)})),r}(n,e,t(r),{})}}function ki(e,t){return function(n,r){var i;if(void 0===n&&void 0===r)return t;if(void 0!==n&&(i=n),void 0!==r){if(void 0===i)return r;"string"==typeof n||"string"==typeof r?(n=Yr(n),r=Yr(r)):(n=Qr(n),r=Qr(r)),i=e(n,r)}return i}}function Ni(e){return $i((function(t){return t=ft(t,kt(Qi())),zr((function(n){var r=this;return e(t,(function(e){return ot(e,r,n)}))}))}))}function Ii(e,t){var n=(t=void 0===t?" ":Yr(t)).length;if(n<2)return n?Lr(t,e):t;var r=Lr(t,Kt(e/Wt(t)));return Ft(t)?li(Gt(r),0,e).join(""):r.slice(0,e)}function Mi(e){return function(t,n,i){return i&&"number"!=typeof i&&ao(t,n,i)&&(n=i=void 0),t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n,i){for(var o=-1,s=sn(Kt((t-e)/(n||1)),0),a=r(s);s--;)a[i?s:++o]=e,e+=n;return a}(t,n,i=void 0===i?t<n?1:-1:na(i),e)}}function Ri(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=oa(t),n=oa(n)),e(t,n)}}function Di(e,t,n,r,i,o,s,a,c,l){var u=8&t;t|=u?32:64,4&(t&=~(u?64:32))||(t&=-4);var d=[e,t,i,u?o:void 0,u?s:void 0,u?void 0:o,u?void 0:s,a,c,l],h=n.apply(void 0,d);return lo(e)&&bo(h,d),h.placeholder=r,So(h,e,t)}function Pi(e){var t=pe[e];return function(e,n){if(e=oa(e),(n=null==n?0:an(ra(n),292))&&nn(e)){var r=(aa(e)+"e").split("e");return+((r=(aa(t(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return t(e)}}var Li=gn&&1/Ut(new gn([,-0]))[1]==1/0?function(e){return new gn(e)}:Ya;function zi(e){return function(t){var n=no(t);return n==g?Bt(t):n==b?$t(t):function(e,t){return ft(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function Fi(e,t,n,i,a,c,l,u){var d=2&t;if(!d&&"function"!=typeof e)throw new _e(o);var h=i?i.length:0;if(h||(t&=-97,i=a=void 0),l=void 0===l?l:sn(ra(l),0),u=void 0===u?u:ra(u),h-=a?a.length:0,64&t){var f=i,p=a;i=a=void 0}var g=d?void 0:Vi(e),m=[e,t,n,i,a,f,p,c,l,u];if(g&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,a=128==r&&8==n||128==r&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!a)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var c=t[3];if(c){var l=e[3];e[3]=l?gi(l,c,t[4]):c,e[4]=l?Ht(e[3],s):t[4]}(c=t[5])&&(l=e[5],e[5]=l?mi(l,c,t[6]):c,e[6]=l?Ht(e[5],s):t[6]);(c=t[7])&&(e[7]=c);128&r&&(e[8]=null==e[8]?t[8]:an(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=i}(m,g),e=m[0],t=m[1],n=m[2],i=m[3],a=m[4],!(u=m[9]=void 0===m[9]?d?0:e.length:sn(m[9]-h,0))&&24&t&&(t&=-25),t&&1!=t)v=8==t||16==t?function(e,t,n){var i=Ai(e);return function o(){for(var s=arguments.length,a=r(s),c=s,l=Xi(o);c--;)a[c]=arguments[c];var u=s<3&&a[0]!==l&&a[s-1]!==l?[]:Ht(a,l);if((s-=u.length)<n)return Di(e,t,Ti,o.placeholder,void 0,a,u,void 0,void 0,n-s);var d=this&&this!==Ve&&this instanceof o?i:e;return ot(d,this,a)}}(e,t,u):32!=t&&33!=t||a.length?Ti.apply(void 0,m):function(e,t,n,i){var o=1&t,s=Ai(e);return function t(){for(var a=-1,c=arguments.length,l=-1,u=i.length,d=r(u+c),h=this&&this!==Ve&&this instanceof t?s:e;++l<u;)d[l]=i[l];for(;c--;)d[l++]=arguments[++a];return ot(h,o?n:this,d)}}(e,t,n,i);else var v=function(e,t,n){var r=1&t,i=Ai(e);return function t(){var o=this&&this!==Ve&&this instanceof t?i:e;return o.apply(r?n:this,arguments)}}(e,t,n);return So((g?Hr:bo)(v,m),e,t)}function Bi(e,t,n,r){return void 0===e||Os(e,we[n])&&!Ee.call(r,n)?t:e}function qi(e,t,n,r,i,o){return Us(e)&&Us(t)&&(o.set(t,e),kr(e,t,void 0,qi,o),o.delete(t)),e}function Hi(e){return Vs(e)?void 0:e}function Ui(e,t,n,r,i,o){var s=1&n,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=o.get(e),u=o.get(t);if(l&&u)return l==t&&u==e;var d=-1,h=!0,f=2&n?new Pn:void 0;for(o.set(e,t),o.set(t,e);++d<a;){var p=e[d],g=t[d];if(r)var m=s?r(g,p,d,t,e,o):r(p,g,d,e,t,o);if(void 0!==m){if(m)continue;h=!1;break}if(f){if(!vt(t,(function(e,t){if(!It(f,t)&&(p===e||i(p,e,n,r,o)))return f.push(t)}))){h=!1;break}}else if(p!==g&&!i(p,g,n,r,o)){h=!1;break}}return o.delete(e),o.delete(t),h}function $i(e){return wo(go(e,void 0,Ro),e+"")}function Wi(e){return hr(e,ya,eo)}function Gi(e){return hr(e,wa,to)}var Vi=_n?function(e){return _n.get(e)}:Ya;function Ji(e){for(var t=e.name+"",n=bn[t],r=Ee.call(bn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function Xi(e){return(Ee.call(Tn,"placeholder")?Tn:e).placeholder}function Qi(){var e=Tn.iteratee||Va;return e=e===Va?xr:e,arguments.length?e(arguments[0],arguments[1]):e}function Yi(e,t){var n,r,i=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function Ki(e){for(var t=ya(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,fo(i)]}return t}function Zi(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return Sr(n)?n:void 0}var eo=en?function(e){return null==e?[]:(e=ge(e),ut(en(e),(function(t){return Je.call(e,t)})))}:ic,to=en?function(e){for(var t=[];e;)pt(t,eo(e)),e=We(e);return t}:ic,no=fr;function ro(e,t,n){for(var r=-1,i=(t=ai(t,e)).length,o=!1;++r<i;){var s=Co(t[r]);if(!(o=null!=e&&n(e,s)))break;e=e[s]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Hs(i)&&so(s,i)&&(Ms(e)||Is(e))}function io(e){return"function"!=typeof e.constructor||ho(e)?{}:On(We(e))}function oo(e){return Ms(e)||Is(e)||!!(Ye&&e&&e[Ye])}function so(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&ce.test(e))&&e>-1&&e%1==0&&e<t}function ao(e,t,n){if(!Us(n))return!1;var r=typeof t;return!!("number"==r?Ds(n)&&so(t,n.length):"string"==r&&t in n)&&Os(n[t],e)}function co(e,t){if(Ms(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ys(e))||($.test(e)||!U.test(e)||null!=t&&e in ge(t))}function lo(e){var t=Ji(e),n=Tn[t];if("function"!=typeof n||!(t in In.prototype))return!1;if(e===n)return!0;var r=Vi(n);return!!r&&e===r[0]}(hn&&no(new hn(new ArrayBuffer(1)))!=E||fn&&no(new fn)!=g||pn&&"[object Promise]"!=no(pn.resolve())||gn&&no(new gn)!=b||mn&&no(new mn)!=S)&&(no=function(e){var t=fr(e),n=t==v?e.constructor:void 0,r=n?jo(n):"";if(r)switch(r){case yn:return E;case wn:return g;case Sn:return"[object Promise]";case xn:return b;case En:return S}return t});var uo=Se?Bs:oc;function ho(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||we)}function fo(e){return e==e&&!Us(e)}function po(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in ge(n)))}}function go(e,t,n){return t=sn(void 0===t?e.length-1:t,0),function(){for(var i=arguments,o=-1,s=sn(i.length-t,0),a=r(s);++o<s;)a[o]=i[t+o];o=-1;for(var c=r(t+1);++o<t;)c[o]=i[o];return c[t]=n(a),ot(e,this,c)}}function mo(e,t){return t.length<2?e:dr(e,Wr(t,0,-1))}function vo(e,t){for(var n=e.length,r=an(t.length,n),i=vi(e);r--;){var o=t[r];e[r]=so(o,n)?i[o]:void 0}return e}function _o(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var bo=xo(Hr),yo=Yt||function(e,t){return Ve.setTimeout(e,t)},wo=xo(Ur);function So(e,t,n){var r=t+"";return wo(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Y,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return at(a,(function(n){var r="_."+n[0];t&n[1]&&!dt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(K);return t?t[1].split(Z):[]}(r),n)))}function xo(e){var t=0,n=0;return function(){var r=cn(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Eo(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n<t;){var o=Pr(n,i),s=e[o];e[o]=e[n],e[n]=s}return e.length=t,e}var Ao=function(e){var t=xs(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(W,(function(e,n,r,i){t.push(r?i.replace(te,"$1"):n||e)})),t}));function Co(e){if("string"==typeof e||Ys(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function jo(e){if(null!=e){try{return xe.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function To(e){if(e instanceof In)return e.clone();var t=new Nn(e.__wrapped__,e.__chain__);return t.__actions__=vi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Oo=zr((function(e,t){return Ps(e)?Zn(e,or(t,1,Ps,!0)):[]})),ko=zr((function(e,t){var n=Fo(t);return Ps(n)&&(n=void 0),Ps(e)?Zn(e,or(t,1,Ps,!0),Qi(n,2)):[]})),No=zr((function(e,t){var n=Fo(t);return Ps(n)&&(n=void 0),Ps(e)?Zn(e,or(t,1,Ps,!0),void 0,n):[]}));function Io(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=sn(r+i,0)),yt(e,Qi(t,3),i)}function Mo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=ra(n),i=n<0?sn(r+i,0):an(i,r-1)),yt(e,Qi(t,3),i,!0)}function Ro(e){return(null==e?0:e.length)?or(e,1):[]}function Do(e){return e&&e.length?e[0]:void 0}var Po=zr((function(e){var t=ft(e,oi);return t.length&&t[0]===e[0]?vr(t):[]})),Lo=zr((function(e){var t=Fo(e),n=ft(e,oi);return t===Fo(n)?t=void 0:n.pop(),n.length&&n[0]===e[0]?vr(n,Qi(t,2)):[]})),zo=zr((function(e){var t=Fo(e),n=ft(e,oi);return(t="function"==typeof t?t:void 0)&&n.pop(),n.length&&n[0]===e[0]?vr(n,void 0,t):[]}));function Fo(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}var Bo=zr(qo);function qo(e,t){return e&&e.length&&t&&t.length?Rr(e,t):e}var Ho=$i((function(e,t){var n=null==e?0:e.length,r=Jn(e,t);return Dr(e,ft(t,(function(e){return so(e,n)?+e:e})).sort(pi)),r}));function Uo(e){return null==e?e:dn.call(e)}var $o=zr((function(e){return Kr(or(e,1,Ps,!0))})),Wo=zr((function(e){var t=Fo(e);return Ps(t)&&(t=void 0),Kr(or(e,1,Ps,!0),Qi(t,2))})),Go=zr((function(e){var t=Fo(e);return t="function"==typeof t?t:void 0,Kr(or(e,1,Ps,!0),void 0,t)}));function Vo(e){if(!e||!e.length)return[];var t=0;return e=ut(e,(function(e){if(Ps(e))return t=sn(e.length,t),!0})),Ot(t,(function(t){return ft(e,At(t))}))}function Jo(e,t){if(!e||!e.length)return[];var n=Vo(e);return null==t?n:ft(n,(function(e){return ot(t,void 0,e)}))}var Xo=zr((function(e,t){return Ps(e)?Zn(e,t):[]})),Qo=zr((function(e){return ri(ut(e,Ps))})),Yo=zr((function(e){var t=Fo(e);return Ps(t)&&(t=void 0),ri(ut(e,Ps),Qi(t,2))})),Ko=zr((function(e){var t=Fo(e);return t="function"==typeof t?t:void 0,ri(ut(e,Ps),void 0,t)})),Zo=zr(Vo);var es=zr((function(e){var t=e.length,n=t>1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Jo(e,n)}));function ts(e){var t=Tn(e);return t.__chain__=!0,t}function ns(e,t){return t(e)}var rs=$i((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Jn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof In&&so(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:ns,args:[i],thisArg:void 0}),new Nn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var is=bi((function(e,t,n){Ee.call(e,n)?++e[n]:Vn(e,n,1)}));var os=Ci(Io),ss=Ci(Mo);function as(e,t){return(Ms(e)?at:er)(e,Qi(t,3))}function cs(e,t){return(Ms(e)?ct:tr)(e,Qi(t,3))}var ls=bi((function(e,t,n){Ee.call(e,n)?e[n].push(t):Vn(e,n,[t])}));var us=zr((function(e,t,n){var i=-1,o="function"==typeof t,s=Ds(e)?r(e.length):[];return er(e,(function(e){s[++i]=o?ot(t,e,n):_r(e,t,n)})),s})),ds=bi((function(e,t,n){Vn(e,n,t)}));function hs(e,t){return(Ms(e)?ft:jr)(e,Qi(t,3))}var fs=bi((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var ps=zr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&ao(e,t[0],t[1])?t=[]:n>2&&ao(t[0],t[1],t[2])&&(t=[t[0]]),Ir(e,or(t,1),[])})),gs=Qt||function(){return Ve.Date.now()};function ms(e,t,n){return t=n?void 0:t,Fi(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function vs(e,t){var n;if("function"!=typeof t)throw new _e(o);return e=ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var _s=zr((function(e,t,n){var r=1;if(n.length){var i=Ht(n,Xi(_s));r|=32}return Fi(e,r,t,n,i)})),bs=zr((function(e,t,n){var r=3;if(n.length){var i=Ht(n,Xi(bs));r|=32}return Fi(t,r,e,n,i)}));function ys(e,t,n){var r,i,s,a,c,l,u=0,d=!1,h=!1,f=!0;if("function"!=typeof e)throw new _e(o);function p(t){var n=r,o=i;return r=i=void 0,u=t,a=e.apply(o,n)}function g(e){return u=e,c=yo(v,t),d?p(e):a}function m(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=s}function v(){var e=gs();if(m(e))return _(e);c=yo(v,function(e){var n=t-(e-l);return h?an(n,s-(e-u)):n}(e))}function _(e){return c=void 0,f&&r?p(e):(r=i=void 0,a)}function b(){var e=gs(),n=m(e);if(r=arguments,i=this,l=e,n){if(void 0===c)return g(l);if(h)return ui(c),c=yo(v,t),p(l)}return void 0===c&&(c=yo(v,t)),a}return t=oa(t)||0,Us(n)&&(d=!!n.leading,s=(h="maxWait"in n)?sn(oa(n.maxWait)||0,t):s,f="trailing"in n?!!n.trailing:f),b.cancel=function(){void 0!==c&&ui(c),u=0,r=l=i=c=void 0},b.flush=function(){return void 0===c?a:_(gs())},b}var ws=zr((function(e,t){return Kn(e,1,t)})),Ss=zr((function(e,t,n){return Kn(e,oa(t)||0,n)}));function xs(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new _e(o);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(xs.Cache||Dn),n}function Es(e){if("function"!=typeof e)throw new _e(o);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}xs.Cache=Dn;var As=ci((function(e,t){var n=(t=1==t.length&&Ms(t[0])?ft(t[0],kt(Qi())):ft(or(t,1),kt(Qi()))).length;return zr((function(r){for(var i=-1,o=an(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return ot(e,this,r)}))})),Cs=zr((function(e,t){return Fi(e,32,void 0,t,Ht(t,Xi(Cs)))})),js=zr((function(e,t){return Fi(e,64,void 0,t,Ht(t,Xi(js)))})),Ts=$i((function(e,t){return Fi(e,256,void 0,void 0,void 0,t)}));function Os(e,t){return e===t||e!=e&&t!=t}var ks=Ri(pr),Ns=Ri((function(e,t){return e>=t})),Is=br(function(){return arguments}())?br:function(e){return $s(e)&&Ee.call(e,"callee")&&!Je.call(e,"callee")},Ms=r.isArray,Rs=Ze?kt(Ze):function(e){return $s(e)&&fr(e)==x};function Ds(e){return null!=e&&Hs(e.length)&&!Bs(e)}function Ps(e){return $s(e)&&Ds(e)}var Ls=tn||oc,zs=et?kt(et):function(e){return $s(e)&&fr(e)==d};function Fs(e){if(!$s(e))return!1;var t=fr(e);return t==h||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Vs(e)}function Bs(e){if(!Us(e))return!1;var t=fr(e);return t==f||t==p||"[object AsyncFunction]"==t||"[object Proxy]"==t}function qs(e){return"number"==typeof e&&e==ra(e)}function Hs(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Us(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $s(e){return null!=e&&"object"==typeof e}var Ws=tt?kt(tt):function(e){return $s(e)&&no(e)==g};function Gs(e){return"number"==typeof e||$s(e)&&fr(e)==m}function Vs(e){if(!$s(e)||fr(e)!=v)return!1;var t=We(e);if(null===t)return!0;var n=Ee.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&xe.call(n)==Te}var Js=nt?kt(nt):function(e){return $s(e)&&fr(e)==_};var Xs=rt?kt(rt):function(e){return $s(e)&&no(e)==b};function Qs(e){return"string"==typeof e||!Ms(e)&&$s(e)&&fr(e)==y}function Ys(e){return"symbol"==typeof e||$s(e)&&fr(e)==w}var Ks=it?kt(it):function(e){return $s(e)&&Hs(e.length)&&!!Be[fr(e)]};var Zs=Ri(Cr),ea=Ri((function(e,t){return e<=t}));function ta(e){if(!e)return[];if(Ds(e))return Qs(e)?Gt(e):vi(e);if(Ke&&e[Ke])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ke]());var t=no(e);return(t==g?Bt:t==b?Ut:Oa)(e)}function na(e){return e?(e=oa(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ra(e){var t=na(e),n=t%1;return t==t?n?t-n:t:0}function ia(e){return e?Xn(ra(e),0,4294967295):0}function oa(e){if("number"==typeof e)return e;if(Ys(e))return NaN;if(Us(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Us(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(J,"");var n=oe.test(e);return n||ae.test(e)?$e(e.slice(2),n?2:8):ie.test(e)?NaN:+e}function sa(e){return _i(e,wa(e))}function aa(e){return null==e?"":Yr(e)}var ca=yi((function(e,t){if(ho(t)||Ds(t))_i(t,ya(t),e);else for(var n in t)Ee.call(t,n)&&Un(e,n,t[n])})),la=yi((function(e,t){_i(t,wa(t),e)})),ua=yi((function(e,t,n,r){_i(t,wa(t),e,r)})),da=yi((function(e,t,n,r){_i(t,ya(t),e,r)})),ha=$i(Jn);var fa=zr((function(e,t){e=ge(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&ao(t[0],t[1],i)&&(r=1);++n<r;)for(var o=t[n],s=wa(o),a=-1,c=s.length;++a<c;){var l=s[a],u=e[l];(void 0===u||Os(u,we[l])&&!Ee.call(e,l))&&(e[l]=o[l])}return e})),pa=zr((function(e){return e.push(void 0,qi),ot(xa,void 0,e)}));function ga(e,t,n){var r=null==e?void 0:dr(e,t);return void 0===r?n:r}function ma(e,t){return null!=e&&ro(e,t,mr)}var va=Oi((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=je.call(t)),e[t]=n}),Ua(Ga)),_a=Oi((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=je.call(t)),Ee.call(e,t)?e[t].push(n):e[t]=[n]}),Qi),ba=zr(_r);function ya(e){return Ds(e)?zn(e):Er(e)}function wa(e){return Ds(e)?zn(e,!0):Ar(e)}var Sa=yi((function(e,t,n){kr(e,t,n)})),xa=yi((function(e,t,n,r){kr(e,t,n,r)})),Ea=$i((function(e,t){var n={};if(null==e)return n;var r=!1;t=ft(t,(function(t){return t=ai(t,e),r||(r=t.length>1),t})),_i(e,Gi(e),n),r&&(n=Qn(n,7,Hi));for(var i=t.length;i--;)Zr(n,t[i]);return n}));var Aa=$i((function(e,t){return null==e?{}:function(e,t){return Mr(e,t,(function(t,n){return ma(e,n)}))}(e,t)}));function Ca(e,t){if(null==e)return{};var n=ft(Gi(e),(function(e){return[e]}));return t=Qi(t),Mr(e,n,(function(e,n){return t(e,n[0])}))}var ja=zi(ya),Ta=zi(wa);function Oa(e){return null==e?[]:Nt(e,ya(e))}var ka=Ei((function(e,t,n){return t=t.toLowerCase(),e+(n?Na(t):t)}));function Na(e){return Fa(aa(e).toLowerCase())}function Ia(e){return(e=aa(e))&&e.replace(le,Pt).replace(Me,"")}var Ma=Ei((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Ra=Ei((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Da=xi("toLowerCase");var Pa=Ei((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var La=Ei((function(e,t,n){return e+(n?" ":"")+Fa(t)}));var za=Ei((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Fa=xi("toUpperCase");function Ba(e,t,n){return e=aa(e),void 0===(t=n?void 0:t)?function(e){return Le.test(e)}(e)?function(e){return e.match(De)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var qa=zr((function(e,t){try{return ot(e,void 0,t)}catch(e){return Fs(e)?e:new he(e)}})),Ha=$i((function(e,t){return at(t,(function(t){t=Co(t),Vn(e,t,_s(e[t],e))})),e}));function Ua(e){return function(){return e}}var $a=ji(),Wa=ji(!0);function Ga(e){return e}function Va(e){return xr("function"==typeof e?e:Qn(e,1))}var Ja=zr((function(e,t){return function(n){return _r(n,e,t)}})),Xa=zr((function(e,t){return function(n){return _r(e,n,t)}}));function Qa(e,t,n){var r=ya(t),i=ur(t,r);null!=n||Us(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=ur(t,ya(t)));var o=!(Us(n)&&"chain"in n&&!n.chain),s=Bs(e);return at(i,(function(n){var r=t[n];e[n]=r,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__),i=n.__actions__=vi(this.__actions__);return i.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,pt([this.value()],arguments))})})),e}function Ya(){}var Ka=Ni(ft),Za=Ni(lt),ec=Ni(vt);function tc(e){return co(e)?At(Co(e)):function(e){return function(t){return dr(t,e)}}(e)}var nc=Mi(),rc=Mi(!0);function ic(){return[]}function oc(){return!1}var sc=ki((function(e,t){return e+t}),0),ac=Pi("ceil"),cc=ki((function(e,t){return e/t}),1),lc=Pi("floor");var uc,dc=ki((function(e,t){return e*t}),1),hc=Pi("round"),fc=ki((function(e,t){return e-t}),0);return Tn.after=function(e,t){if("function"!=typeof t)throw new _e(o);return e=ra(e),function(){if(--e<1)return t.apply(this,arguments)}},Tn.ary=ms,Tn.assign=ca,Tn.assignIn=la,Tn.assignInWith=ua,Tn.assignWith=da,Tn.at=ha,Tn.before=vs,Tn.bind=_s,Tn.bindAll=Ha,Tn.bindKey=bs,Tn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ms(e)?e:[e]},Tn.chain=ts,Tn.chunk=function(e,t,n){t=(n?ao(e,t,n):void 0===t)?1:sn(ra(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,s=0,a=r(Kt(i/t));o<i;)a[s++]=Wr(e,o,o+=t);return a},Tn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},Tn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=r(e-1),n=arguments[0],i=e;i--;)t[i-1]=arguments[i];return pt(Ms(n)?vi(n):[n],or(t,1))},Tn.cond=function(e){var t=null==e?0:e.length,n=Qi();return e=t?ft(e,(function(e){if("function"!=typeof e[1])throw new _e(o);return[n(e[0]),e[1]]})):[],zr((function(n){for(var r=-1;++r<t;){var i=e[r];if(ot(i[0],this,n))return ot(i[1],this,n)}}))},Tn.conforms=function(e){return function(e){var t=ya(e);return function(n){return Yn(n,e,t)}}(Qn(e,1))},Tn.constant=Ua,Tn.countBy=is,Tn.create=function(e,t){var n=On(e);return null==t?n:Gn(n,t)},Tn.curry=function e(t,n,r){var i=Fi(t,8,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},Tn.curryRight=function e(t,n,r){var i=Fi(t,16,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},Tn.debounce=ys,Tn.defaults=fa,Tn.defaultsDeep=pa,Tn.defer=ws,Tn.delay=Ss,Tn.difference=Oo,Tn.differenceBy=ko,Tn.differenceWith=No,Tn.drop=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,(t=n||void 0===t?1:ra(t))<0?0:t,r):[]},Tn.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,0,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t):[]},Tn.dropRightWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!0,!0):[]},Tn.dropWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!0):[]},Tn.fill=function(e,t,n,r){var i=null==e?0:e.length;return i?(n&&"number"!=typeof n&&ao(e,t,n)&&(n=0,r=i),function(e,t,n,r){var i=e.length;for((n=ra(n))<0&&(n=-n>i?0:i+n),(r=void 0===r||r>i?i:ra(r))<0&&(r+=i),r=n>r?0:ia(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},Tn.filter=function(e,t){return(Ms(e)?ut:ir)(e,Qi(t,3))},Tn.flatMap=function(e,t){return or(hs(e,t),1)},Tn.flatMapDeep=function(e,t){return or(hs(e,t),1/0)},Tn.flatMapDepth=function(e,t,n){return n=void 0===n?1:ra(n),or(hs(e,t),n)},Tn.flatten=Ro,Tn.flattenDeep=function(e){return(null==e?0:e.length)?or(e,1/0):[]},Tn.flattenDepth=function(e,t){return(null==e?0:e.length)?or(e,t=void 0===t?1:ra(t)):[]},Tn.flip=function(e){return Fi(e,512)},Tn.flow=$a,Tn.flowRight=Wa,Tn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];r[i[0]]=i[1]}return r},Tn.functions=function(e){return null==e?[]:ur(e,ya(e))},Tn.functionsIn=function(e){return null==e?[]:ur(e,wa(e))},Tn.groupBy=ls,Tn.initial=function(e){return(null==e?0:e.length)?Wr(e,0,-1):[]},Tn.intersection=Po,Tn.intersectionBy=Lo,Tn.intersectionWith=zo,Tn.invert=va,Tn.invertBy=_a,Tn.invokeMap=us,Tn.iteratee=Va,Tn.keyBy=ds,Tn.keys=ya,Tn.keysIn=wa,Tn.map=hs,Tn.mapKeys=function(e,t){var n={};return t=Qi(t,3),cr(e,(function(e,r,i){Vn(n,t(e,r,i),e)})),n},Tn.mapValues=function(e,t){var n={};return t=Qi(t,3),cr(e,(function(e,r,i){Vn(n,r,t(e,r,i))})),n},Tn.matches=function(e){return Tr(Qn(e,1))},Tn.matchesProperty=function(e,t){return Or(e,Qn(t,1))},Tn.memoize=xs,Tn.merge=Sa,Tn.mergeWith=xa,Tn.method=Ja,Tn.methodOf=Xa,Tn.mixin=Qa,Tn.negate=Es,Tn.nthArg=function(e){return e=ra(e),zr((function(t){return Nr(t,e)}))},Tn.omit=Ea,Tn.omitBy=function(e,t){return Ca(e,Es(Qi(t)))},Tn.once=function(e){return vs(2,e)},Tn.orderBy=function(e,t,n,r){return null==e?[]:(Ms(t)||(t=null==t?[]:[t]),Ms(n=r?void 0:n)||(n=null==n?[]:[n]),Ir(e,t,n))},Tn.over=Ka,Tn.overArgs=As,Tn.overEvery=Za,Tn.overSome=ec,Tn.partial=Cs,Tn.partialRight=js,Tn.partition=fs,Tn.pick=Aa,Tn.pickBy=Ca,Tn.property=tc,Tn.propertyOf=function(e){return function(t){return null==e?void 0:dr(e,t)}},Tn.pull=Bo,Tn.pullAll=qo,Tn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Rr(e,t,Qi(n,2)):e},Tn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Rr(e,t,void 0,n):e},Tn.pullAt=Ho,Tn.range=nc,Tn.rangeRight=rc,Tn.rearg=Ts,Tn.reject=function(e,t){return(Ms(e)?ut:ir)(e,Es(Qi(t,3)))},Tn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=Qi(t,3);++r<o;){var s=e[r];t(s,r,e)&&(n.push(s),i.push(r))}return Dr(e,i),n},Tn.rest=function(e,t){if("function"!=typeof e)throw new _e(o);return zr(e,t=void 0===t?t:ra(t))},Tn.reverse=Uo,Tn.sampleSize=function(e,t,n){return t=(n?ao(e,t,n):void 0===t)?1:ra(t),(Ms(e)?Bn:Br)(e,t)},Tn.set=function(e,t,n){return null==e?e:qr(e,t,n)},Tn.setWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:qr(e,t,n,r)},Tn.shuffle=function(e){return(Ms(e)?qn:$r)(e)},Tn.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&"number"!=typeof n&&ao(e,t,n)?(t=0,n=r):(t=null==t?0:ra(t),n=void 0===n?r:ra(n)),Wr(e,t,n)):[]},Tn.sortBy=ps,Tn.sortedUniq=function(e){return e&&e.length?Xr(e):[]},Tn.sortedUniqBy=function(e,t){return e&&e.length?Xr(e,Qi(t,2)):[]},Tn.split=function(e,t,n){return n&&"number"!=typeof n&&ao(e,t,n)&&(t=n=void 0),(n=void 0===n?4294967295:n>>>0)?(e=aa(e))&&("string"==typeof t||null!=t&&!Js(t))&&!(t=Yr(t))&&Ft(e)?li(Gt(e),0,n):e.split(t,n):[]},Tn.spread=function(e,t){if("function"!=typeof e)throw new _e(o);return t=null==t?0:sn(ra(t),0),zr((function(n){var r=n[t],i=li(n,0,t);return r&&pt(i,r),ot(e,this,i)}))},Tn.tail=function(e){var t=null==e?0:e.length;return t?Wr(e,1,t):[]},Tn.take=function(e,t,n){return e&&e.length?Wr(e,0,(t=n||void 0===t?1:ra(t))<0?0:t):[]},Tn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t,r):[]},Tn.takeRightWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!1,!0):[]},Tn.takeWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3)):[]},Tn.tap=function(e,t){return t(e),e},Tn.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new _e(o);return Us(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),ys(e,t,{leading:r,maxWait:t,trailing:i})},Tn.thru=ns,Tn.toArray=ta,Tn.toPairs=ja,Tn.toPairsIn=Ta,Tn.toPath=function(e){return Ms(e)?ft(e,Co):Ys(e)?[e]:vi(Ao(aa(e)))},Tn.toPlainObject=sa,Tn.transform=function(e,t,n){var r=Ms(e),i=r||Ls(e)||Ks(e);if(t=Qi(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Us(e)&&Bs(o)?On(We(e)):{}}return(i?at:cr)(e,(function(e,r,i){return t(n,e,r,i)})),n},Tn.unary=function(e){return ms(e,1)},Tn.union=$o,Tn.unionBy=Wo,Tn.unionWith=Go,Tn.uniq=function(e){return e&&e.length?Kr(e):[]},Tn.uniqBy=function(e,t){return e&&e.length?Kr(e,Qi(t,2)):[]},Tn.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Kr(e,void 0,t):[]},Tn.unset=function(e,t){return null==e||Zr(e,t)},Tn.unzip=Vo,Tn.unzipWith=Jo,Tn.update=function(e,t,n){return null==e?e:ei(e,t,si(n))},Tn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:ei(e,t,si(n),r)},Tn.values=Oa,Tn.valuesIn=function(e){return null==e?[]:Nt(e,wa(e))},Tn.without=Xo,Tn.words=Ba,Tn.wrap=function(e,t){return Cs(si(t),e)},Tn.xor=Qo,Tn.xorBy=Yo,Tn.xorWith=Ko,Tn.zip=Zo,Tn.zipObject=function(e,t){return ii(e||[],t||[],Un)},Tn.zipObjectDeep=function(e,t){return ii(e||[],t||[],qr)},Tn.zipWith=es,Tn.entries=ja,Tn.entriesIn=Ta,Tn.extend=la,Tn.extendWith=ua,Qa(Tn,Tn),Tn.add=sc,Tn.attempt=qa,Tn.camelCase=ka,Tn.capitalize=Na,Tn.ceil=ac,Tn.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=oa(n))==n?n:0),void 0!==t&&(t=(t=oa(t))==t?t:0),Xn(oa(e),t,n)},Tn.clone=function(e){return Qn(e,4)},Tn.cloneDeep=function(e){return Qn(e,5)},Tn.cloneDeepWith=function(e,t){return Qn(e,5,t="function"==typeof t?t:void 0)},Tn.cloneWith=function(e,t){return Qn(e,4,t="function"==typeof t?t:void 0)},Tn.conformsTo=function(e,t){return null==t||Yn(e,t,ya(t))},Tn.deburr=Ia,Tn.defaultTo=function(e,t){return null==e||e!=e?t:e},Tn.divide=cc,Tn.endsWith=function(e,t,n){e=aa(e),t=Yr(t);var r=e.length,i=n=void 0===n?r:Xn(ra(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},Tn.eq=Os,Tn.escape=function(e){return(e=aa(e))&&F.test(e)?e.replace(L,Lt):e},Tn.escapeRegExp=function(e){return(e=aa(e))&&V.test(e)?e.replace(G,"\\$&"):e},Tn.every=function(e,t,n){var r=Ms(e)?lt:nr;return n&&ao(e,t,n)&&(t=void 0),r(e,Qi(t,3))},Tn.find=os,Tn.findIndex=Io,Tn.findKey=function(e,t){return bt(e,Qi(t,3),cr)},Tn.findLast=ss,Tn.findLastIndex=Mo,Tn.findLastKey=function(e,t){return bt(e,Qi(t,3),lr)},Tn.floor=lc,Tn.forEach=as,Tn.forEachRight=cs,Tn.forIn=function(e,t){return null==e?e:sr(e,Qi(t,3),wa)},Tn.forInRight=function(e,t){return null==e?e:ar(e,Qi(t,3),wa)},Tn.forOwn=function(e,t){return e&&cr(e,Qi(t,3))},Tn.forOwnRight=function(e,t){return e&&lr(e,Qi(t,3))},Tn.get=ga,Tn.gt=ks,Tn.gte=Ns,Tn.has=function(e,t){return null!=e&&ro(e,t,gr)},Tn.hasIn=ma,Tn.head=Do,Tn.identity=Ga,Tn.includes=function(e,t,n,r){e=Ds(e)?e:Oa(e),n=n&&!r?ra(n):0;var i=e.length;return n<0&&(n=sn(i+n,0)),Qs(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&wt(e,t,n)>-1},Tn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=sn(r+i,0)),wt(e,t,i)},Tn.inRange=function(e,t,n){return t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n){return e>=an(t,n)&&e<sn(t,n)}(e=oa(e),t,n)},Tn.invoke=ba,Tn.isArguments=Is,Tn.isArray=Ms,Tn.isArrayBuffer=Rs,Tn.isArrayLike=Ds,Tn.isArrayLikeObject=Ps,Tn.isBoolean=function(e){return!0===e||!1===e||$s(e)&&fr(e)==u},Tn.isBuffer=Ls,Tn.isDate=zs,Tn.isElement=function(e){return $s(e)&&1===e.nodeType&&!Vs(e)},Tn.isEmpty=function(e){if(null==e)return!0;if(Ds(e)&&(Ms(e)||"string"==typeof e||"function"==typeof e.splice||Ls(e)||Ks(e)||Is(e)))return!e.length;var t=no(e);if(t==g||t==b)return!e.size;if(ho(e))return!Er(e).length;for(var n in e)if(Ee.call(e,n))return!1;return!0},Tn.isEqual=function(e,t){return yr(e,t)},Tn.isEqualWith=function(e,t,n){var r=(n="function"==typeof n?n:void 0)?n(e,t):void 0;return void 0===r?yr(e,t,void 0,n):!!r},Tn.isError=Fs,Tn.isFinite=function(e){return"number"==typeof e&&nn(e)},Tn.isFunction=Bs,Tn.isInteger=qs,Tn.isLength=Hs,Tn.isMap=Ws,Tn.isMatch=function(e,t){return e===t||wr(e,t,Ki(t))},Tn.isMatchWith=function(e,t,n){return n="function"==typeof n?n:void 0,wr(e,t,Ki(t),n)},Tn.isNaN=function(e){return Gs(e)&&e!=+e},Tn.isNative=function(e){if(uo(e))throw new he("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Sr(e)},Tn.isNil=function(e){return null==e},Tn.isNull=function(e){return null===e},Tn.isNumber=Gs,Tn.isObject=Us,Tn.isObjectLike=$s,Tn.isPlainObject=Vs,Tn.isRegExp=Js,Tn.isSafeInteger=function(e){return qs(e)&&e>=-9007199254740991&&e<=9007199254740991},Tn.isSet=Xs,Tn.isString=Qs,Tn.isSymbol=Ys,Tn.isTypedArray=Ks,Tn.isUndefined=function(e){return void 0===e},Tn.isWeakMap=function(e){return $s(e)&&no(e)==S},Tn.isWeakSet=function(e){return $s(e)&&"[object WeakSet]"==fr(e)},Tn.join=function(e,t){return null==e?"":rn.call(e,t)},Tn.kebabCase=Ma,Tn.last=Fo,Tn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ra(n))<0?sn(r+i,0):an(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):yt(e,xt,i,!0)},Tn.lowerCase=Ra,Tn.lowerFirst=Da,Tn.lt=Zs,Tn.lte=ea,Tn.max=function(e){return e&&e.length?rr(e,Ga,pr):void 0},Tn.maxBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),pr):void 0},Tn.mean=function(e){return Et(e,Ga)},Tn.meanBy=function(e,t){return Et(e,Qi(t,2))},Tn.min=function(e){return e&&e.length?rr(e,Ga,Cr):void 0},Tn.minBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),Cr):void 0},Tn.stubArray=ic,Tn.stubFalse=oc,Tn.stubObject=function(){return{}},Tn.stubString=function(){return""},Tn.stubTrue=function(){return!0},Tn.multiply=dc,Tn.nth=function(e,t){return e&&e.length?Nr(e,ra(t)):void 0},Tn.noConflict=function(){return Ve._===this&&(Ve._=Oe),this},Tn.noop=Ya,Tn.now=gs,Tn.pad=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ii(Zt(i),n)+e+Ii(Kt(i),n)},Tn.padEnd=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;return t&&r<t?e+Ii(t-r,n):e},Tn.padStart=function(e,t,n){e=aa(e);var r=(t=ra(t))?Wt(e):0;return t&&r<t?Ii(t-r,n)+e:e},Tn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),ln(aa(e).replace(X,""),t||0)},Tn.random=function(e,t,n){if(n&&"boolean"!=typeof n&&ao(e,t,n)&&(t=n=void 0),void 0===n&&("boolean"==typeof t?(n=t,t=void 0):"boolean"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=na(e),void 0===t?(t=e,e=0):t=na(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=un();return an(e+i*(t-e+Ue("1e-"+((i+"").length-1))),t)}return Pr(e,t)},Tn.reduce=function(e,t,n){var r=Ms(e)?gt:jt,i=arguments.length<3;return r(e,Qi(t,4),n,i,er)},Tn.reduceRight=function(e,t,n){var r=Ms(e)?mt:jt,i=arguments.length<3;return r(e,Qi(t,4),n,i,tr)},Tn.repeat=function(e,t,n){return t=(n?ao(e,t,n):void 0===t)?1:ra(t),Lr(aa(e),t)},Tn.replace=function(){var e=arguments,t=aa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Tn.result=function(e,t,n){var r=-1,i=(t=ai(t,e)).length;for(i||(i=1,e=void 0);++r<i;){var o=null==e?void 0:e[Co(t[r])];void 0===o&&(r=i,o=n),e=Bs(o)?o.call(e):o}return e},Tn.round=hc,Tn.runInContext=e,Tn.sample=function(e){return(Ms(e)?Fn:Fr)(e)},Tn.size=function(e){if(null==e)return 0;if(Ds(e))return Qs(e)?Wt(e):e.length;var t=no(e);return t==g||t==b?e.size:Er(e).length},Tn.snakeCase=Pa,Tn.some=function(e,t,n){var r=Ms(e)?vt:Gr;return n&&ao(e,t,n)&&(t=void 0),r(e,Qi(t,3))},Tn.sortedIndex=function(e,t){return Vr(e,t)},Tn.sortedIndexBy=function(e,t,n){return Jr(e,t,Qi(n,2))},Tn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=Vr(e,t);if(r<n&&Os(e[r],t))return r}return-1},Tn.sortedLastIndex=function(e,t){return Vr(e,t,!0)},Tn.sortedLastIndexBy=function(e,t,n){return Jr(e,t,Qi(n,2),!0)},Tn.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var n=Vr(e,t,!0)-1;if(Os(e[n],t))return n}return-1},Tn.startCase=La,Tn.startsWith=function(e,t,n){return e=aa(e),n=null==n?0:Xn(ra(n),0,e.length),t=Yr(t),e.slice(n,n+t.length)==t},Tn.subtract=fc,Tn.sum=function(e){return e&&e.length?Tt(e,Ga):0},Tn.sumBy=function(e,t){return e&&e.length?Tt(e,Qi(t,2)):0},Tn.template=function(e,t,n){var r=Tn.templateSettings;n&&ao(e,t,n)&&(t=void 0),e=aa(e),t=ua({},t,r,Bi);var i,o,s=ua({},t.imports,r.imports,Bi),a=ya(s),c=Nt(s,a),l=0,u=t.interpolate||ue,d="__p += '",h=me((t.escape||ue).source+"|"+u.source+"|"+(u===H?ne:ue).source+"|"+(t.evaluate||ue).source+"|$","g"),f="//# sourceURL="+(Ee.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Fe+"]")+"\n";e.replace(h,(function(t,n,r,s,a,c){return r||(r=s),d+=e.slice(l,c).replace(de,zt),n&&(i=!0,d+="' +\n__e("+n+") +\n'"),a&&(o=!0,d+="';\n"+a+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=c+t.length,t})),d+="';\n";var p=Ee.call(t,"variable")&&t.variable;p||(d="with (obj) {\n"+d+"\n}\n"),d=(o?d.replace(M,""):d).replace(R,"$1").replace(D,"$1;"),d="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var g=qa((function(){return fe(a,f+"return "+d).apply(void 0,c)}));if(g.source=d,Fs(g))throw g;return g},Tn.times=function(e,t){if((e=ra(e))<1||e>9007199254740991)return[];var n=4294967295,r=an(e,4294967295);e-=4294967295;for(var i=Ot(r,t=Qi(t));++n<e;)t(n);return i},Tn.toFinite=na,Tn.toInteger=ra,Tn.toLength=ia,Tn.toLower=function(e){return aa(e).toLowerCase()},Tn.toNumber=oa,Tn.toSafeInteger=function(e){return e?Xn(ra(e),-9007199254740991,9007199254740991):0===e?e:0},Tn.toString=aa,Tn.toUpper=function(e){return aa(e).toUpperCase()},Tn.trim=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(J,"");if(!e||!(t=Yr(t)))return e;var r=Gt(e),i=Gt(t);return li(r,Mt(r,i),Rt(r,i)+1).join("")},Tn.trimEnd=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(Q,"");if(!e||!(t=Yr(t)))return e;var r=Gt(e);return li(r,0,Rt(r,Gt(t))+1).join("")},Tn.trimStart=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(X,"");if(!e||!(t=Yr(t)))return e;var r=Gt(e);return li(r,Mt(r,Gt(t))).join("")},Tn.truncate=function(e,t){var n=30,r="...";if(Us(t)){var i="separator"in t?t.separator:i;n="length"in t?ra(t.length):n,r="omission"in t?Yr(t.omission):r}var o=(e=aa(e)).length;if(Ft(e)){var s=Gt(e);o=s.length}if(n>=o)return e;var a=n-Wt(r);if(a<1)return r;var c=s?li(s,0,a).join(""):e.slice(0,a);if(void 0===i)return c+r;if(s&&(a+=c.length-a),Js(i)){if(e.slice(a).search(i)){var l,u=c;for(i.global||(i=me(i.source,aa(re.exec(i))+"g")),i.lastIndex=0;l=i.exec(u);)var d=l.index;c=c.slice(0,void 0===d?a:d)}}else if(e.indexOf(Yr(i),a)!=a){var h=c.lastIndexOf(i);h>-1&&(c=c.slice(0,h))}return c+r},Tn.unescape=function(e){return(e=aa(e))&&z.test(e)?e.replace(P,Vt):e},Tn.uniqueId=function(e){var t=++Ae;return aa(e)+t},Tn.upperCase=za,Tn.upperFirst=Fa,Tn.each=as,Tn.eachRight=cs,Tn.first=Do,Qa(Tn,(uc={},cr(Tn,(function(e,t){Ee.call(Tn.prototype,t)||(uc[t]=e)})),uc),{chain:!1}),Tn.VERSION="4.17.20",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Tn[e].placeholder=Tn})),at(["drop","take"],(function(e,t){In.prototype[e]=function(n){n=void 0===n?1:sn(ra(n),0);var r=this.__filtered__&&!t?new In(this):this.clone();return r.__filtered__?r.__takeCount__=an(n,r.__takeCount__):r.__views__.push({size:an(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},In.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),at(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;In.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Qi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),at(["head","last"],(function(e,t){var n="take"+(t?"Right":"");In.prototype[e]=function(){return this[n](1).value()[0]}})),at(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");In.prototype[e]=function(){return this.__filtered__?new In(this):this[n](1)}})),In.prototype.compact=function(){return this.filter(Ga)},In.prototype.find=function(e){return this.filter(e).head()},In.prototype.findLast=function(e){return this.reverse().find(e)},In.prototype.invokeMap=zr((function(e,t){return"function"==typeof e?new In(this):this.map((function(n){return _r(n,e,t)}))})),In.prototype.reject=function(e){return this.filter(Es(Qi(e)))},In.prototype.slice=function(e,t){e=ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new In(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},In.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},In.prototype.toArray=function(){return this.take(4294967295)},cr(In.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=Tn[r?"take"+("last"==t?"Right":""):t],o=r||/^find/.test(t);i&&(Tn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,a=t instanceof In,c=s[0],l=a||Ms(t),u=function(e){var t=i.apply(Tn,pt([e],s));return r&&d?t[0]:t};l&&n&&"function"==typeof c&&1!=c.length&&(a=l=!1);var d=this.__chain__,h=!!this.__actions__.length,f=o&&!d,p=a&&!h;if(!o&&l){t=p?t:new In(this);var g=e.apply(t,s);return g.__actions__.push({func:ns,args:[u],thisArg:void 0}),new Nn(g,d)}return f&&p?e.apply(this,s):(g=this.thru(u),f?r?g.value()[0]:g.value():g)})})),at(["pop","push","shift","sort","splice","unshift"],(function(e){var t=be[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Tn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Ms(i)?i:[],e)}return this[n]((function(n){return t.apply(Ms(n)?n:[],e)}))}})),cr(In.prototype,(function(e,t){var n=Tn[t];if(n){var r=n.name+"";Ee.call(bn,r)||(bn[r]=[]),bn[r].push({name:t,func:n})}})),bn[Ti(void 0,2).name]=[{name:"wrapper",func:void 0}],In.prototype.clone=function(){var e=new In(this.__wrapped__);return e.__actions__=vi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=vi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=vi(this.__views__),e},In.prototype.reverse=function(){if(this.__filtered__){var e=new In(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},In.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Ms(e),r=t<0,i=n?e.length:0,o=function(e,t,n){var r=-1,i=n.length;for(;++r<i;){var o=n[r],s=o.size;switch(o.type){case"drop":e+=s;break;case"dropRight":t-=s;break;case"take":t=an(t,e+s);break;case"takeRight":e=sn(e,t-s)}}return{start:e,end:t}}(0,i,this.__views__),s=o.start,a=o.end,c=a-s,l=r?a:s-1,u=this.__iteratees__,d=u.length,h=0,f=an(c,this.__takeCount__);if(!n||!r&&i==c&&f==c)return ni(e,this.__actions__);var p=[];e:for(;c--&&h<f;){for(var g=-1,m=e[l+=t];++g<d;){var v=u[g],_=v.iteratee,b=v.type,y=_(m);if(2==b)m=y;else if(!y){if(1==b)continue e;break e}}p[h++]=m}return p},Tn.prototype.at=rs,Tn.prototype.chain=function(){return ts(this)},Tn.prototype.commit=function(){return new Nn(this.value(),this.__chain__)},Tn.prototype.next=function(){void 0===this.__values__&&(this.__values__=ta(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},Tn.prototype.plant=function(e){for(var t,n=this;n instanceof kn;){var r=To(n);r.__index__=0,r.__values__=void 0,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},Tn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof In){var t=e;return this.__actions__.length&&(t=new In(this)),(t=t.reverse()).__actions__.push({func:ns,args:[Uo],thisArg:void 0}),new Nn(t,this.__chain__)}return this.thru(Uo)},Tn.prototype.toJSON=Tn.prototype.valueOf=Tn.prototype.value=function(){return ni(this.__wrapped__,this.__actions__)},Tn.prototype.first=Tn.prototype.head,Ke&&(Tn.prototype[Ke]=function(){return this}),Tn}();Ve._=Jt,void 0===(i=function(){return Jt}.call(t,n,t,r))||(r.exports=i)}).call(this)}).call(this,n(12),n(46)(e))},function(e,t,n){e.exports=n(337)},function(e,t,n){e.exports=n(351)},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){function r(e){this.options=e||{locator:{}}}function i(){this.cdata=!1}function o(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function s(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}function a(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}r.prototype.parseFromString=function(e,t){var n=this.options,r=new l,o=n.domBuilder||new i,a=n.errorHandler,c=n.locator,u=n.xmlns||{},d={lt:"<",gt:">",amp:"&",quot:'"',apos:"'"};return c&&o.setDocumentLocator(c),r.errorHandler=function(e,t,n){if(!e){if(t instanceof i)return t;e=t}var r={},o=e instanceof Function;function a(t){var i=e[t];!i&&o&&(i=2==e.length?function(n){e(t,n)}:e),r[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+s(n))}||function(){}}return n=n||{},a("warning"),a("error"),a("fatalError"),r}(a,o,c),r.domBuilder=n.domBuilder||o,/\/x?html?$/.test(t)&&(d.nbsp=" ",d.copy="©",u[""]="http://www.w3.org/1999/xhtml"),u.xml=u.xml||"http://www.w3.org/XML/1998/namespace",e?r.parse(e,u,d):r.errorHandler.error("invalid doc source"),o.doc},i.prototype={startDocument:function(){this.doc=(new u).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.doc,s=i.createElementNS(e,n||t),a=r.length;c(this,s),this.currentElement=s,this.locator&&o(this.locator,s);for(var l=0;l<a;l++){e=r.getURI(l);var u=r.getValue(l),d=(n=r.getQName(l),i.createAttributeNS(e,n));this.locator&&o(r.getLocator(l),d),d.value=d.nodeValue=u,s.setAttributeNode(d)}},endElement:function(e,t,n){var r=this.currentElement;r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.doc.createProcessingInstruction(e,t);this.locator&&o(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){if(e=a.apply(this,arguments)){if(this.cdata)var r=this.doc.createCDATASection(e);else r=this.doc.createTextNode(e);this.currentElement?this.currentElement.appendChild(r):/^\s*$/.test(e)&&this.doc.appendChild(r),this.locator&&o(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.doc.normalize()},setDocumentLocator:function(e){(this.locator=e)&&(e.lineNumber=0)},comment:function(e,t,n){e=a.apply(this,arguments);var r=this.doc.createComment(e);this.locator&&o(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.doc.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&o(this.locator,i),c(this,i)}},warning:function(e){console.warn("[xmldom warning]\t"+e,s(this.locator))},error:function(e){console.error("[xmldom error]\t"+e,s(this.locator))},fatalError:function(e){throw console.error("[xmldom fatalError]\t"+e,s(this.locator)),e}},"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,(function(e){i.prototype[e]=function(){return null}}));var l=n(329).XMLReader,u=t.DOMImplementation=n(95).DOMImplementation;t.XMLSerializer=n(95).XMLSerializer,t.DOMParser=r},function(e,t,n){var r=n(25),i=n(23);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},function(e,t,n){var r=n(11).Symbol;e.exports=r},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(74),i=n(20);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),o=e.apply(n,t);return i(o)?o:n}}},function(e,t){e.exports=function(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&"__lodash_placeholder__"!==s||(e[n]="__lodash_placeholder__",o[i++]=n)}return o}},function(e,t,n){var r=n(388),i=n(389),o=n(390),s=n(391),a=n(392);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=s,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(50);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(26)(Object,"create");e.exports=r},function(e,t,n){var r=n(406);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t,n){var r=n(16),i=n(81),o=n(429),s=n(137);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:o(s(e))}},function(e,t,n){var r=n(59);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(25),i=n(20);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(12))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_input.html --\x3e\n<div class="form-group">\n    ',"hidden"!==e.type&&(t+='\n        <label for="'+n(e.id)+'">'+n(e.label)+"</label>\n    "),t+="\n    ","password"===e.type&&e.fixed_username&&(t+='\n        \x3c!-- This is a hack to prevent Chrome from auto-filling the username in\n            any of the other input fields in the MUC configuration form. --\x3e\n        <input class="hidden-username" type="text" autocomplete="username" value="'+n(e.fixed_username)+'"></input>\n    '),t+='\n    <input \n        class="form-control" name="'+n(e.name)+'" type="'+n(e.type)+'" id="'+n(e.id)+'"\n        ',e.autocomplete&&(t+=' autocomplete="'+n(e.autocomplete)+'" '),t+="\n        ",e.placeholder&&(t+=' placeholder="'+n(e.placeholder)+'" '),t+="\n        ",e.value&&(t+=' value="'+n(e.value)+'" '),t+="\n        ",e.required&&(t+=' required="required" '),t+=" />\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_username.html --\x3e\n<div class="form-group">\n    ',e.label&&(t+="\n    <label>\n        "+n(e.label)+"\n    </label>\n    "),t+='\n    <div class="input-group">\n        <div class="input-group-prepend">\n            <input name="'+n(e.name)+'" type="'+n(e.type)+'"\n                ',e.value&&(t+=' value="'+n(e.value)+'" '),t+="\n                ",e.required&&(t+=' required="required" '),t+=' />\n            <div class="input-group-text col" title="'+n(e.domain)+'">'+n(e.domain)+"</div>\n        </div>\n    </div>\n</div>\n"}},function(e,t,n){var r,i;r=[n(43)],void 0===(i=function(e){return e.noConflict()}.apply(t,r))||(e.exports=i)},function(e,t,n){
 /**
  * @preserve jed.js https://github.com/SlexAxton/Jed
  */
-!function(n,r){var i=Array.prototype,s=Object.prototype,o=i.slice,a=s.hasOwnProperty,c=i.forEach,l={},u={forEach:function(e,t,n){var r,i,s;if(null!==e)if(c&&e.forEach===c)e.forEach(t,n);else if(e.length===+e.length){for(r=0,i=e.length;r<i;r++)if(r in e&&t.call(n,e[r],r,e)===l)return}else for(s in e)if(a.call(e,s)&&t.call(n,e[s],s,e)===l)return},extend:function(e){return this.forEach(o.call(arguments,1),(function(t){for(var n in t)e[n]=t[n]})),e}},d=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=u.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function h(e){return d.PF.compile(e||"nplurals=2; plural=(n != 1);")}function f(e,t){this._key=e,this._i18n=t}d.context_delimiter=String.fromCharCode(4),u.extend(f.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?d.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),u.extend(d.prototype,{translate:function(e){return new f(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,void 0,void 0,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,void 0,void 0,e,t,n)},dngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},dcngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},pgettext:function(e,t){return this.dcnpgettext.call(this,void 0,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,r){return this.dcnpgettext.call(this,void 0,e,t,n,r)},dnpgettext:function(e,t,n,r,i){return this.dcnpgettext.call(this,e,t,n,r,i)},dcnpgettext:function(e,t,n,r,i){var s;if(r=r||n,e=e||this._textdomain,!this.options)return(s=new d).dcnpgettext.call(s,void 0,void 0,n,r,i);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var o,a,c,l=t?t+d.context_delimiter+n:n,u=this.options.locale_data,f=u[e],p=(u.messages||this.defaults.locale_data.messages)[""],g=f[""].plural_forms||f[""]["Plural-Forms"]||f[""]["plural-forms"]||p.plural_forms||p["Plural-Forms"]||p["plural-forms"];if(void 0===i)c=0;else{if("number"!=typeof i&&(i=parseInt(i,10),isNaN(i)))throw new Error("The number that was passed in is not a number.");c=h(g)(i)}if(!f)throw new Error("No domain named `"+e+"` could be found.");return!(o=f[l])||c>o.length?(this.options.missing_key_callback&&this.options.missing_key_callback(l,e),a=[n,r],!0===this.options.debug&&console.log(a[h(g)(i)]),a[h()(i)]):(a=o[c])||(a=[n,r])[h()(i)]}});var p,g,m=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var i,s,o,a,c,l,u,d=1,h=n.length,f="",p=[];for(s=0;s<h;s++)if("string"===(f=e(n[s])))p.push(n[s]);else if("array"===f){if((a=n[s])[2])for(i=r[d],o=0;o<a[2].length;o++){if(!i.hasOwnProperty(a[2][o]))throw m('[sprintf] property "%s" does not exist',a[2][o]);i=i[a[2][o]]}else i=a[1]?r[a[1]]:r[d++];if(/[^s]/.test(a[8])&&"number"!=e(i))throw m("[sprintf] expecting number but found %s",e(i));switch(null==i&&(i=""),a[8]){case"b":i=i.toString(2);break;case"c":i=String.fromCharCode(i);break;case"d":i=parseInt(i,10);break;case"e":i=a[7]?i.toExponential(a[7]):i.toExponential();break;case"f":i=a[7]?parseFloat(i).toFixed(a[7]):parseFloat(i);break;case"o":i=i.toString(8);break;case"s":i=(i=String(i))&&a[7]?i.substring(0,a[7]):i;break;case"u":i=Math.abs(i);break;case"x":i=i.toString(16);break;case"X":i=i.toString(16).toUpperCase()}i=/[def]/.test(a[8])&&a[3]&&i>=0?"+"+i:i,l=a[4]?"0"==a[4]?"0":a[4].charAt(1):" ",u=a[6]-String(i).length,c=a[6]?t(l,u):"",p.push(a[5]?i+c:c+i)}return p.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],i=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){i|=1;var s=[],o=n[2],a=[];if(null===(a=/^([a-z_][a-z_\d]*)/i.exec(o)))throw"[sprintf] huh?";for(s.push(a[1]);""!==(o=o.substring(a[0].length));)if(null!==(a=/^\.([a-z_][a-z_\d]*)/i.exec(o)))s.push(a[1]);else{if(null===(a=/^\[(\d+)\]/.exec(o)))throw"[sprintf] huh?";s.push(a[1])}n[2]=s}else i|=2;if(3===i)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}(),v=function(e,t){return t.unshift(e),m.apply(null,t)};d.parse_plural=function(e,t){return e=e.replace(/n/g,t),d.parse_expression(e)},d.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?v(e,[].slice.call(t)):m.apply(this,[].slice.call(arguments))},d.prototype.sprintf=function(){return d.sprintf.apply(this,arguments)},(d.PF={}).parse=function(e){var t=d.PF.extractPluralExpr(e);return d.PF.parser.parse.call(d.PF.parser,t)},d.PF.compile=function(e){var t=d.PF.parse(e);return function(e){return!0===(n=d.PF.interpreter(t)(e))?1:n||0;var n}},d.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return d.PF.interpreter(e.expr)(t);case"TERNARY":return d.PF.interpreter(e.expr)(t)?d.PF.interpreter(e.truthy)(t):d.PF.interpreter(e.falsey)(t);case"OR":return d.PF.interpreter(e.left)(t)||d.PF.interpreter(e.right)(t);case"AND":return d.PF.interpreter(e.left)(t)&&d.PF.interpreter(e.right)(t);case"LT":return d.PF.interpreter(e.left)(t)<d.PF.interpreter(e.right)(t);case"GT":return d.PF.interpreter(e.left)(t)>d.PF.interpreter(e.right)(t);case"LTE":return d.PF.interpreter(e.left)(t)<=d.PF.interpreter(e.right)(t);case"GTE":return d.PF.interpreter(e.left)(t)>=d.PF.interpreter(e.right)(t);case"EQ":return d.PF.interpreter(e.left)(t)==d.PF.interpreter(e.right)(t);case"NEQ":return d.PF.interpreter(e.left)(t)!=d.PF.interpreter(e.right)(t);case"MOD":return d.PF.interpreter(e.left)(t)%d.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},d.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=e.match(n);if(!(r.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(r[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},d.PF.parser=(p={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,i,s,o){var a=s.length-1;switch(i){case 1:return{type:"GROUP",expr:s[a-1]};case 2:this.$={type:"TERNARY",expr:s[a-4],truthy:s[a-2],falsey:s[a]};break;case 3:this.$={type:"OR",left:s[a-2],right:s[a]};break;case 4:this.$={type:"AND",left:s[a-2],right:s[a]};break;case 5:this.$={type:"LT",left:s[a-2],right:s[a]};break;case 6:this.$={type:"LTE",left:s[a-2],right:s[a]};break;case 7:this.$={type:"GT",left:s[a-2],right:s[a]};break;case 8:this.$={type:"GTE",left:s[a-2],right:s[a]};break;case 9:this.$={type:"NEQ",left:s[a-2],right:s[a]};break;case 10:this.$={type:"EQ",left:s[a-2],right:s[a]};break;case 11:this.$={type:"MOD",left:s[a-2],right:s[a]};break;case 12:this.$={type:"GROUP",expr:s[a-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],i=[],s=this.table,o="",a=0,c=0,l=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var u=this.lexer.yylloc;function d(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}i.push(u),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var h,f,p,g,m,v,_,b,y,w,S={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==h&&(h=d()),g=s[p]&&s[p][h]),void 0===g||!g.length||!g[0]){if(!l){for(v in y=[],s[p])this.terminals_[v]&&v>2&&y.push("'"+this.terminals_[v]+"'");var x="";x=this.lexer.showPosition?"Parse error on line "+(a+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+y.join(", ")+", got '"+this.terminals_[h]+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==h?"end of input":"'"+(this.terminals_[h]||h)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[h]||h,line:this.lexer.yylineno,loc:u,expected:y})}if(3==l){if(1==h)throw new Error(x||"Parsing halted.");c=this.lexer.yyleng,o=this.lexer.yytext,a=this.lexer.yylineno,u=this.lexer.yylloc,h=d()}for(;!(2..toString()in s[p]);){if(0==p)throw new Error(x||"Parsing halted.");w=1,n.length=n.length-2*w,r.length=r.length-w,i.length=i.length-w,p=n[n.length-1]}f=h,h=2,g=s[p=n[n.length-1]]&&s[p][2],l=3}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+h);switch(g[0]){case 1:n.push(h),r.push(this.lexer.yytext),i.push(this.lexer.yylloc),n.push(g[1]),h=null,f?(h=f,f=null):(c=this.lexer.yyleng,o=this.lexer.yytext,a=this.lexer.yylineno,u=this.lexer.yylloc,l>0&&l--);break;case 2:if(_=this.productions_[g[1]][1],S.$=r[r.length-_],S._$={first_line:i[i.length-(_||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(_||1)].first_column,last_column:i[i.length-1].last_column},void 0!==(m=this.performAction.call(S,o,c,a,this.yy,g[1],r,i)))return m;_&&(n=n.slice(0,-1*_*2),r=r.slice(0,-1*_),i=i.slice(0,-1*_)),n.push(this.productions_[g[1]][0]),r.push(S.$),i.push(S._$),b=s[n[n.length-2]][n[n.length-1]],n.push(b);break;case 3:return!0}}return!0}},g=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};return e}(),p.lexer=g,p),e.exports&&(t=e.exports=d),t.Jed=d}()},function(e,t,n){"use strict";var r=n(13),i=n(0);i.e.Websocket=class{constructor(e){this._conn=e,this.strip="wrapper";const t=e.service;if(0!==t.indexOf("ws:")&&0!==t.indexOf("wss:")){let n="";"ws"===e.options.protocol&&"https:"!==window.location.protocol?n+="ws":n+="wss",n+="://"+window.location.host,0!==t.indexOf("/")?n+=window.location.pathname+t:n+=t,e.service=n}}_buildStream(){return Object(i.a)("open",{xmlns:i.e.NS.FRAMING,to:this._conn.domain,version:"1.0"})}_checkStreamError(e,t){let n;if(n=e.getElementsByTagNameNS?e.getElementsByTagNameNS(i.e.NS.STREAM,"error"):e.getElementsByTagName("stream:error"),0===n.length)return!1;const r=n[0];let s="",o="";for(let e=0;e<r.childNodes.length;e++){const t=r.childNodes[e];if("urn:ietf:params:xml:ns:xmpp-streams"!==t.getAttribute("xmlns"))break;"text"===t.nodeName?o=t.textContent:s=t.nodeName}let a="WebSocket stream error: ";return a+=s||"unknown",o&&(a+=" - "+o),i.e.error(a),this._conn._changeConnectStatus(t,s),this._conn._doDisconnect(),!0}_reset(){}_connect(){this._closeSocket(),this.socket=new WebSocket(this._conn.service,"xmpp"),this.socket.onopen=()=>this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,i.e.Status.CONNFAIL))return i.e.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in <open />":n!==i.e.NS.FRAMING&&(t="Wrong xmlns in <open />: "+n);const r=e.getAttribute("version");return"string"!=typeof r?t="Missing version in <open />":"1.0"!==r&&(t="Wrong version in <open />: "+r),!t||(this._conn._changeConnectStatus(i.e.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("<open ")||0===e.data.indexOf("<?xml")){const t=e.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===t)return;const n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("<close ")){const t=(new r.a).parseFromString(e.data,"text/xml").documentElement;this._conn.xmlInput(t),this._conn.rawInput(e.data);const n=t.getAttribute("see-other-uri");if(n){const e=this._conn.service;(e.indexOf("wss:")>=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(i.e.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==WebSocket.CLOSED){e&&this._conn.send(e);const t=Object(i.a)("close",{xmlns:i.e.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=i.e.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){i.e.warn("Couldn't send <close /> tag.")}}this._conn._doDisconnect()}_doDisconnect(){i.e.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return"<wrapper>"+e+"</wrapper>"}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){i.e.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(i.e.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(i.e.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):i.e.debug("Websocket closed")}_no_auth_received(e){i.e.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,i.e.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){i.e.error("Websocket error "+e),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t<e.length;t++)if(null!==e[t]){let n;n="restart"===e[t]?this._buildStream().tree():e[t];const r=i.e.serialize(n);this._conn.xmlOutput(n),this._conn.rawOutput(r),this.socket.send(r)}this._conn._data=[]}}_onMessage(e){let t;const n='<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("<open ")){if(t=(new r.a).parseFromString(e.data,"text/xml").documentElement,!this._handleStreamStart(t))return}else{const n=this._streamWrap(e.data);t=(new r.a).parseFromString(n,"text/xml").documentElement}return this._checkStreamError(t,i.e.Status.ERROR)?void 0:this._conn.disconnecting&&"presence"===t.firstChild.nodeName&&"unavailable"===t.firstChild.getAttribute("type")?(this._conn.xmlInput(t),void this._conn.rawInput(i.e.serialize(t))):void this._conn._dataRecv(t,e.data)}_onOpen(){i.e.debug("Websocket open");const e=this._buildStream();this._conn.xmlOutput(e.tree());const t=i.e.serialize(e);this._conn.rawOutput(t),this.socket.send(t)}_reqToData(e){return e}_send(){this._conn.flush()}_sendRestart(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}}},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){var r=n(291);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(17),i=Object.create,s=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=s},function(e,t,n){var r=n(60),i=n(62);function s(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}s.prototype=r(i.prototype),s.prototype.constructor=s,e.exports=s},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e){return e.placeholder}},function(e,t,n){var r=n(22)(n(10),"Map");e.exports=r},function(e,t,n){var r=n(356),i=n(363),s=n(365),o=n(366),a=n(367);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=s,c.prototype.has=o,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(47),i=n(32);e.exports=function(e,t){for(var n=0,s=(t=r(t,e)).length;null!=e&&n<s;)e=e[i(t[n++])];return n&&n==s?e:void 0}},function(e,t,n){var r=n(15),i=n(38),s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!s.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var r=n(325),i=n(26);e.exports=function(e){return null==e?[]:r(e,i(e))}},function(e,t,n){var r=n(85),i=n(326),s=n(63),o=n(42),a=r((function(e,t){var n=o(t,s(a));return i(e,32,void 0,t,n)}));a.placeholder={},e.exports=a},function(e,t,n){var r;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function s(e){return a(l(e),arguments)}function o(e,t){return s.apply(null,[e].concat(t||[]))}function a(e,t){var n,r,o,a,c,l,u,d,h,f=1,p=e.length,g="";for(r=0;r<p;r++)if("string"==typeof e[r])g+=e[r];else if("object"==typeof e[r]){if((a=e[r]).keys)for(n=t[f],o=0;o<a.keys.length;o++){if(null==n)throw new Error(s('[sprintf] Cannot access property "%s" of undefined value "%s"',a.keys[o],a.keys[o-1]));n=n[a.keys[o]]}else n=a.param_no?t[a.param_no]:t[f++];if(i.not_type.test(a.type)&&i.not_primitive.test(a.type)&&n instanceof Function&&(n=n()),i.numeric_arg.test(a.type)&&"number"!=typeof n&&isNaN(n))throw new TypeError(s("[sprintf] expecting number but found %T",n));switch(i.number.test(a.type)&&(d=n>=0),a.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,a.width?parseInt(a.width):0);break;case"e":n=a.precision?parseFloat(n).toExponential(a.precision):parseFloat(n).toExponential();break;case"f":n=a.precision?parseFloat(n).toFixed(a.precision):parseFloat(n);break;case"g":n=a.precision?String(Number(n.toPrecision(a.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=a.precision?n.substring(0,a.precision):n;break;case"t":n=String(!!n),n=a.precision?n.substring(0,a.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=a.precision?n.substring(0,a.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=a.precision?n.substring(0,a.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}i.json.test(a.type)?g+=n:(!i.number.test(a.type)||d&&!a.sign?h="":(h=d?"+":"-",n=n.toString().replace(i.sign,"")),l=a.pad_char?"0"===a.pad_char?"0":a.pad_char.charAt(1):" ",u=a.width-(h+n).length,c=a.width&&u>0?l.repeat(u):"",g+=a.align?h+n+c:"0"===l?h+c+n:c+h+n)}return g}var c=Object.create(null);function l(e){if(c[e])return c[e];for(var t,n=e,r=[],s=0;n;){if(null!==(t=i.text.exec(n)))r.push(t[0]);else if(null!==(t=i.modulo.exec(n)))r.push("%");else{if(null===(t=i.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){s|=1;var o=[],a=t[2],l=[];if(null===(l=i.key.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(l[1]);""!==(a=a.substring(l[0].length));)if(null!==(l=i.key_access.exec(a)))o.push(l[1]);else{if(null===(l=i.index_access.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(l[1])}t[2]=o}else s|=2;if(3===s)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return c[e]=r}t.sprintf=s,t.vsprintf=o,"undefined"!=typeof window&&(window.sprintf=s,window.vsprintf=o,void 0===(r=function(){return{sprintf:s,vsprintf:o}}.call(t,n,t,e))||(e.exports=r))}()},function(e,t){function n(e,t){for(var n in e)t[n]=e[n]}function r(e,t){var r=e.prototype;if(Object.create){var i=Object.create(t.prototype);r.__proto__=i}if(!(r instanceof t)){function s(){}s.prototype=t.prototype,n(r,s=new s),e.prototype=r=s}r.constructor!=e&&("function"!=typeof e&&console.error("unknow Class:"+e),r.constructor=e)}var i={},s=i.ELEMENT_NODE=1,o=i.ATTRIBUTE_NODE=2,a=i.TEXT_NODE=3,c=i.CDATA_SECTION_NODE=4,l=i.ENTITY_REFERENCE_NODE=5,u=i.ENTITY_NODE=6,d=i.PROCESSING_INSTRUCTION_NODE=7,h=i.COMMENT_NODE=8,f=i.DOCUMENT_NODE=9,p=i.DOCUMENT_TYPE_NODE=10,g=i.DOCUMENT_FRAGMENT_NODE=11,m=i.NOTATION_NODE=12,v={},_={},b=(v.INDEX_SIZE_ERR=(_[1]="Index size error",1),v.DOMSTRING_SIZE_ERR=(_[2]="DOMString size error",2),v.HIERARCHY_REQUEST_ERR=(_[3]="Hierarchy request error",3)),y=(v.WRONG_DOCUMENT_ERR=(_[4]="Wrong document",4),v.INVALID_CHARACTER_ERR=(_[5]="Invalid character",5),v.NO_DATA_ALLOWED_ERR=(_[6]="No data allowed",6),v.NO_MODIFICATION_ALLOWED_ERR=(_[7]="No modification allowed",7),v.NOT_FOUND_ERR=(_[8]="Not found",8)),w=(v.NOT_SUPPORTED_ERR=(_[9]="Not supported",9),v.INUSE_ATTRIBUTE_ERR=(_[10]="Attribute in use",10));v.INVALID_STATE_ERR=(_[11]="Invalid state",11),v.SYNTAX_ERR=(_[12]="Syntax error",12),v.INVALID_MODIFICATION_ERR=(_[13]="Invalid modification",13),v.NAMESPACE_ERR=(_[14]="Invalid namespace",14),v.INVALID_ACCESS_ERR=(_[15]="Invalid access",15);function S(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,_[e]),this.message=_[e],Error.captureStackTrace&&Error.captureStackTrace(this,S);return n.code=e,t&&(this.message=this.message+": "+t),n}function x(){}function E(e,t){this._node=e,this._refresh=t,A(this)}function A(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var r=e._refresh(e._node);te(e,"length",r.length),n(r,e),e._inc=t}}function C(){}function j(e,t){for(var n=e.length;n--;)if(e[n]===t)return n}function T(e,t,n,r){if(r?t[j(t,r)]=n:t[t.length++]=n,e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&D(i,e,r),function(e,t,n){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&(t._nsMap[n.prefix?n.localName:""]=n.value)}(i,e,n))}}function O(e,t,n){var r=j(t,n);if(!(r>=0))throw S(y,new Error(e.tagName+"@"+n));for(var i=t.length-1;r<i;)t[r]=t[++r];if(t.length=i,e){var s=e.ownerDocument;s&&(D(s,e,n),n.ownerElement=null)}}function k(e){if(this._features={},e)for(var t in e)this._features=e[t]}function N(){}function I(e){return("<"==e?"&lt;":">"==e&&"&gt;")||"&"==e&&"&amp;"||'"'==e&&"&quot;"||"&#"+e.charCodeAt()+";"}function M(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(M(e,t))return!0}while(e=e.nextSibling)}function R(){}function D(e,t,n,r){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&delete t._nsMap[n.prefix?n.localName:""]}function P(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var i=t.firstChild,s=0;i;)r[s++]=i,i=i.nextSibling;r.length=s}}}function L(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,P(e.ownerDocument,e),t}function z(e,t,n){var r=t.parentNode;if(r&&r.removeChild(t),t.nodeType===g){var i=t.firstChild;if(null==i)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,null==n?e.lastChild=s:n.previousSibling=s;do{i.parentNode=e}while(i!==s&&(i=i.nextSibling));return P(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function F(){this._nsMap={}}function B(){}function q(){}function H(){}function U(){}function $(){}function W(){}function V(){}function G(){}function J(){}function X(){}function Q(){}function Y(){}function K(e,t){var n=[],r=9==this.nodeType?this.documentElement:this,i=r.prefix,s=r.namespaceURI;if(s&&null==i&&null==(i=r.lookupPrefix(s)))var o=[{namespace:s,prefix:null}];return ee(this,n,e,t,o),n.join("")}function Z(e,t,n){var r=e.prefix||"",i=e.namespaceURI;if(!r&&!i)return!1;if("xml"===r&&"http://www.w3.org/XML/1998/namespace"===i||"http://www.w3.org/2000/xmlns/"==i)return!1;for(var s=n.length;s--;){var o=n[s];if(o.prefix==r)return o.namespace!=i}return!0}function ee(e,t,n,r,i){if(r){if(!(e=r(e)))return;if("string"==typeof e)return void t.push(e)}switch(e.nodeType){case s:i||(i=[]);i.length;var u=e.attributes,m=u.length,v=e.firstChild,_=e.tagName;n="http://www.w3.org/1999/xhtml"===e.namespaceURI||n,t.push("<",_);for(var b=0;b<m;b++){"xmlns"==(y=u.item(b)).prefix?i.push({prefix:y.localName,namespace:y.value}):"xmlns"==y.nodeName&&i.push({prefix:"",namespace:y.value})}for(b=0;b<m;b++){var y;if(Z(y=u.item(b),0,i)){var w=y.prefix||"",S=y.namespaceURI,x=w?" xmlns:"+w:" xmlns";t.push(x,'="',S,'"'),i.push({prefix:w,namespace:S})}ee(y,t,n,r,i)}if(Z(e,0,i)){w=e.prefix||"",S=e.namespaceURI,x=w?" xmlns:"+w:" xmlns";t.push(x,'="',S,'"'),i.push({prefix:w,namespace:S})}if(v||n&&!/^(?:meta|link|img|br|hr|input)$/i.test(_)){if(t.push(">"),n&&/^script$/i.test(_))for(;v;)v.data?t.push(v.data):ee(v,t,n,r,i),v=v.nextSibling;else for(;v;)ee(v,t,n,r,i),v=v.nextSibling;t.push("</",_,">")}else t.push("/>");return;case f:case g:for(v=e.firstChild;v;)ee(v,t,n,r,i),v=v.nextSibling;return;case o:return t.push(" ",e.name,'="',e.value.replace(/[<&"]/g,I),'"');case a:return t.push(e.data.replace(/[<&]/g,I));case c:return t.push("<![CDATA[",e.data,"]]>");case h:return t.push("\x3c!--",e.data,"--\x3e");case p:var E=e.publicId,A=e.systemId;if(t.push("<!DOCTYPE ",e.name),E)t.push(' PUBLIC "',E),A&&"."!=A&&t.push('" "',A),t.push('">');else if(A&&"."!=A)t.push(' SYSTEM "',A,'">');else{var C=e.internalSubset;C&&t.push(" [",C,"]"),t.push(">")}return;case d:return t.push("<?",e.target," ",e.data,"?>");case l:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function te(e,t,n){e[t]=n}S.prototype=Error.prototype,n(v,S),x.prototype={length:0,item:function(e){return this[e]||null},toString:function(e,t){for(var n=[],r=0;r<this.length;r++)ee(this[r],n,e,t);return n.join("")}},E.prototype.item=function(e){return A(this),this[e]},r(E,x),C.prototype={length:0,item:x.prototype.item,getNamedItem:function(e){for(var t=this.length;t--;){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new S(w);var n=this.getNamedItem(e.nodeName);return T(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t,n=e.ownerElement;if(n&&n!=this._ownerElement)throw new S(w);return t=this.getNamedItemNS(e.namespaceURI,e.localName),T(this._ownerElement,this,e,t),t},removeNamedItem:function(e){var t=this.getNamedItem(e);return O(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return O(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){for(var n=this.length;n--;){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},k.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return!(!n||t&&!(t in n))},createDocument:function(e,t,n){var r=new R;if(r.implementation=this,r.childNodes=new x,r.doctype=n,n&&r.appendChild(n),t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new W;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},N.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return L(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return null!=this.firstChild},cloneNode:function(e){return function e(t,n,r){var i=new n.constructor;for(var a in n){var c=n[a];"object"!=typeof c&&c!=i[a]&&(i[a]=c)}n.childNodes&&(i.childNodes=new x);switch(i.ownerDocument=t,i.nodeType){case s:var l=n.attributes,u=i.attributes=new C,d=l.length;u._ownerElement=i;for(var h=0;h<d;h++)i.setAttributeNode(e(t,l.item(h),!0));break;case o:r=!0}if(r)for(var f=n.firstChild;f;)i.appendChild(e(t,f,r)),f=f.nextSibling;return i}(this.ownerDocument||this,this,e)},normalize:function(){for(var e=this.firstChild;e;){var t=e.nextSibling;t&&t.nodeType==a&&e.nodeType==a?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==o?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==o?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},n(i,N),n(i,N.prototype),R.prototype={nodeName:"#document",nodeType:f,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return null==this.documentElement&&e.nodeType==s&&(this.documentElement=e),z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),L(this,e)},importNode:function(e,t){return function e(t,n,r){var i;switch(n.nodeType){case s:(i=n.cloneNode(!1)).ownerDocument=t;case g:break;case o:r=!0}i||(i=n.cloneNode(!1));if(i.ownerDocument=t,i.parentNode=null,r)for(var a=n.firstChild;a;)i.appendChild(e(t,a,r)),a=a.nextSibling;return i}(this,e,t)},getElementById:function(e){var t=null;return M(this.documentElement,(function(n){if(n.nodeType==s&&n.getAttribute("id")==e)return t=n,!0})),t},createElement:function(e){var t=new F;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new x,(t.attributes=new C)._ownerElement=t,t},createDocumentFragment:function(){var e=new X;return e.ownerDocument=this,e.childNodes=new x,e},createTextNode:function(e){var t=new H;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new U;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new $;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new Q;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new B;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new J;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new F,r=t.split(":"),i=n.attributes=new C;return n.childNodes=new x,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new B,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},r(R,N),F.prototype={nodeType:s,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):function(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);r=e.lastChild}return r=e.lastChild,t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,P(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new E(this,(function(t){var n=[];return M(t,(function(r){r===t||r.nodeType!=s||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new E(this,(function(n){var r=[];return M(n,(function(i){i===n||i.nodeType!==s||"*"!==e&&i.namespaceURI!==e||"*"!==t&&i.localName!=t||r.push(i)})),r}))}},R.prototype.getElementsByTagName=F.prototype.getElementsByTagName,R.prototype.getElementsByTagNameNS=F.prototype.getElementsByTagNameNS,r(F,N),B.prototype.nodeType=o,r(B,N),q.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(_[b])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},r(q,N),H.prototype={nodeName:"#text",nodeType:a,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},r(H,q),U.prototype={nodeName:"#comment",nodeType:h},r(U,q),$.prototype={nodeName:"#cdata-section",nodeType:c},r($,q),W.prototype.nodeType=p,r(W,N),V.prototype.nodeType=m,r(V,N),G.prototype.nodeType=u,r(G,N),J.prototype.nodeType=l,r(J,N),X.prototype.nodeName="#document-fragment",X.prototype.nodeType=g,r(X,N),Q.prototype.nodeType=d,r(Q,N),Y.prototype.serializeToString=function(e,t,n){return K.call(e,t,n)},N.prototype.toString=K;try{if(Object.defineProperty){Object.defineProperty(E.prototype,"length",{get:function(){return A(this),this.$$length}}),Object.defineProperty(N.prototype,"textContent",{get:function(){return function e(t){switch(t.nodeType){case s:case g:var n=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&n.push(e(t)),t=t.nextSibling;return n.join("");default:return t.nodeValue}}(this)},set:function(e){switch(this.nodeType){case s:case g:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),te=function(e,t,n){e["$$"+t]=n}}}catch(e){}t.DOMImplementation=k,t.XMLSerializer=Y},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n(11))},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},function(e,t,n){var r=n(300),i=n(75),s=n(15),o=n(76),a=n(30),c=n(77),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=s(e),u=!n&&i(e),d=!n&&!u&&o(e),h=!n&&!u&&!d&&c(e),f=n||u||d||h,p=f?r(e.length,String):[],g=p.length;for(var m in e)!t&&!l.call(e,m)||f&&("length"==m||d&&("offset"==m||"parent"==m)||h&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||a(m,g))||p.push(m);return p}},function(e,t,n){var r=n(301),i=n(19),s=Object.prototype,o=s.hasOwnProperty,a=s.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&o.call(e,"callee")&&!a.call(e,"callee")};e.exports=c},function(e,t,n){(function(e){var r=n(10),i=n(302),s=t&&!t.nodeType&&t,o=s&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===s?r.Buffer:void 0,c=(a?a.isBuffer:void 0)||i;e.exports=c}).call(this,n(36)(e))},function(e,t,n){var r=n(303),i=n(304),s=n(305),o=s&&s.isTypedArray,a=o?i(o):r;e.exports=a},function(e,t,n){var r=n(79),i=n(306),s=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))s.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){var r=n(82),i=n(40),s=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];s.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t,n){var r=n(83);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(22),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var r=n(31),i=n(316),s=n(86);e.exports=function(e,t){return s(i(e,t,r),e+"")}},function(e,t,n){var r=n(317),i=n(87)(r);e.exports=i},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),s=16-(i-r);if(r=i,s>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(74),i=n(320),s=n(25);e.exports=function(e){return s(e)?r(e,!0):i(e)}},function(e,t,n){var r=n(322),i=n(323),s=n(324);e.exports=function(e,t,n){return t==t?s(e,t,n):r(e,i,n)}},function(e,t,n){var r=n(21),i=n(15),s=n(19);e.exports=function(e){return"string"==typeof e||!i(e)&&s(e)&&"[object String]"==r(e)}},function(e,t,n){var r=n(31),i=n(92),s=i?function(e,t){return i.set(e,t),e}:r;e.exports=s},function(e,t,n){var r=n(93),i=r&&new r;e.exports=i},function(e,t,n){var r=n(22)(n(10),"WeakMap");e.exports=r},function(e,t,n){var r=n(95),i=n(96),s=n(329),o=n(41),a=n(97),c=n(63),l=n(340),u=n(42),d=n(10);e.exports=function e(t,n,h,f,p,g,m,v,_,b){var y=128&n,w=1&n,S=2&n,x=24&n,E=512&n,A=S?void 0:o(t);return function C(){for(var j=arguments.length,T=Array(j),O=j;O--;)T[O]=arguments[O];if(x)var k=c(C),N=s(T,k);if(f&&(T=r(T,f,p,x)),g&&(T=i(T,g,m,x)),j-=N,x&&j<b){var I=u(T,k);return a(t,n,e,C.placeholder,h,T,I,v,_,b-j)}var M=w?h:this,R=S?M[t]:t;return j=T.length,v?T=l(T,v):E&&j>1&&T.reverse(),y&&_<j&&(T.length=_),this&&this!==d&&this instanceof C&&(R=A||o(R)),R.apply(M,T)}}},function(e,t){var n=Math.max;e.exports=function(e,t,r,i){for(var s=-1,o=e.length,a=r.length,c=-1,l=t.length,u=n(o-a,0),d=Array(l+u),h=!i;++c<l;)d[c]=t[c];for(;++s<a;)(h||s<o)&&(d[r[s]]=e[s]);for(;u--;)d[c++]=e[s++];return d}},function(e,t){var n=Math.max;e.exports=function(e,t,r,i){for(var s=-1,o=e.length,a=-1,c=r.length,l=-1,u=t.length,d=n(o-c,0),h=Array(d+u),f=!i;++s<d;)h[s]=e[s];for(var p=s;++l<u;)h[p+l]=t[l];for(;++a<c;)(f||s<o)&&(h[p+r[a]]=e[s++]);return h}},function(e,t,n){var r=n(330),i=n(101),s=n(102);e.exports=function(e,t,n,o,a,c,l,u,d,h){var f=8&t;t|=f?32:64,4&(t&=~(f?64:32))||(t&=-4);var p=[e,t,a,f?c:void 0,f?l:void 0,f?void 0:c,f?void 0:l,u,d,h],g=n.apply(void 0,p);return r(e)&&i(g,p),g.placeholder=o,s(g,e,t)}},function(e,t,n){var r=n(92),i=n(331),s=r?function(e){return r.get(e)}:i;e.exports=s},function(e,t,n){var r=n(60),i=n(62);function s(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}s.prototype=r(i.prototype),s.prototype.constructor=s,e.exports=s},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},function(e,t,n){var r=n(91),i=n(87)(r);e.exports=i},function(e,t,n){var r=n(336),i=n(337),s=n(86),o=n(338);e.exports=function(e,t,n){var a=t+"";return s(e,i(a,o(r(a),n)))}},function(e,t,n){var r=n(43),i=n(351),s=n(352),o=n(353),a=n(354),c=n(355);function l(e){var t=this.__data__=new r(e);this.size=t.size}l.prototype.clear=i,l.prototype.delete=s,l.prototype.get=o,l.prototype.has=a,l.prototype.set=c,e.exports=l},function(e,t,n){var r=n(368),i=n(19);e.exports=function e(t,n,s,o,a){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,s,o,e,a))}},function(e,t,n){var r=n(369),i=n(372),s=n(373);e.exports=function(e,t,n,o,a,c){var l=1&n,u=e.length,d=t.length;if(u!=d&&!(l&&d>u))return!1;var h=c.get(e),f=c.get(t);if(h&&f)return h==t&&f==e;var p=-1,g=!0,m=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++p<u;){var v=e[p],_=t[p];if(o)var b=l?o(_,v,p,t,e,c):o(v,_,p,e,t,c);if(void 0!==b){if(b)continue;g=!1;break}if(m){if(!i(t,(function(e,t){if(!s(m,t)&&(v===e||a(v,e,n,o,c)))return m.push(t)}))){g=!1;break}}else if(v!==_&&!a(v,_,n,o,c)){g=!1;break}}return c.delete(e),c.delete(t),g}},function(e,t,n){var r=n(107),i=n(15);e.exports=function(e,t,n){var s=t(e);return i(e)?s:r(s,n(e))}},function(e,t){e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},function(e,t,n){var r=n(380),i=n(109),s=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,a=o?function(e){return null==e?[]:(e=Object(e),r(o(e),(function(t){return s.call(e,t)})))}:i;e.exports=a},function(e,t){e.exports=function(){return[]}},function(e,t,n){var r=n(381),i=n(64),s=n(382),o=n(383),a=n(93),c=n(21),l=n(84),u=l(r),d=l(i),h=l(s),f=l(o),p=l(a),g=c;(r&&"[object DataView]"!=g(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=g(new i)||s&&"[object Promise]"!=g(s.resolve())||o&&"[object Set]"!=g(new o)||a&&"[object WeakMap]"!=g(new a))&&(g=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,r=n?l(n):"";if(r)switch(r){case u:return"[object DataView]";case d:return"[object Map]";case h:return"[object Promise]";case f:return"[object Set]";case p:return"[object WeakMap]"}return t}),e.exports=g},function(e,t,n){var r=n(17);e.exports=function(e){return e==e&&!r(e)}},function(e,t){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},function(e,t,n){var r=n(390);e.exports=function(e){return null==e?"":r(e)}},function(e,t){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},function(e,t,n){"use strict";var r=n(13),i=n(0);i.e.Request=class{constructor(e,t,n,r){this.id=++i.e._requestId,this.xmlData=e,this.data=i.e.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=r||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;return(new Date-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;return(new Date-this.dead)/1e3},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw i.e.error("invalid response received"),i.e.error("responseText: "+this.xhr.responseText),i.e.error("responseXML: "+i.e.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(i.e.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r.a).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){i.e.error("invalid response received: "+e.querySelector("parsererror").textContent),i.e.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=i.e.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},i.e.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=Object(i.a)("body",{rid:this.rid++,xmlns:i.e.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const r=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":i.e.NS.BOSH});n&&r.attrs({route:n});const s=this._conn._connect_cb;this._requests.push(new i.e.Request(r.tree(),this._onRequestStateChange.bind(this,s.bind(this._conn)),r.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,r,s,o,a){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=r,this._conn.domain=i.e.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=s||this.wait,this.hold=o||this.hold,this.window=a||this.window,this._conn._changeConnectStatus(i.e.Status.ATTACHED,null)}_restore(e,t,n,r,s){const o=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=o&&o.rid&&o.sid&&o.jid&&(null==e||i.e.getBareJidFromJid(o.jid)===i.e.getBareJidFromJid(e)||null===i.e.getNodeFromJid(e)&&i.e.getDomainFromJid(o.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(o.jid,o.sid,o.rid,t,n,r,s)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");i.e.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,t)):this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),i.e.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const r=e.getAttribute("hold");r&&(this.hold=parseInt(r,10));const s=e.getAttribute("wait");s&&(this.wait=parseInt(s,10));const o=e.getAttribute("inactivity");o&&(this.inactivity=parseInt(o,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),r=this._conn.protocolErrorHandlers.HTTP[n];r&&r.call(this,n)}_hitError(e){this.errors++,i.e.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){i.e.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(i.e.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n<e.length;n++)null!==e[n]&&("restart"===e[n]?t.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":i.e.NS.BOSH}):t.cnode(e[n]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}if(this._requests.length>0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(i.e.TIMEOUT*this.wait)&&(i.e.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(i.e.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){i.e.error("Caught an error while retrieving a request's status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(i.e.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const r=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&r>=400)return this._hitError(r),void this._callProtocolErrorHandlers(n);const s=r>0&&r<500,o=n.sends>this._conn.maxRetries;if((s||o)&&(this._removeRequest(n),i.e.debug("request id "+n.id+" should now be removed")),200===r){const e=this._requests[0]===n;(this._requests[1]===n||e&&this._requests.length>0&&this._requests[0].age()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),i.e.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0}else 0===r||r>=400&&r<600||r>=12e3?(i.e.error("request id "+n.id+"."+n.sends+" error "+r+" happened"),this._hitError(r),this._callProtocolErrorHandlers(n),r>=400&&r<500&&(this._conn._changeConnectStatus(i.e.Status.DISCONNECTING,null),this._conn._doDisconnect())):i.e.error("request id "+n.id+"."+n.sends+" error "+r+" happened");s||o?o&&!this._conn.connected&&this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const r=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const s=n.age(),o=!isNaN(s)&&s>Math.floor(i.e.TIMEOUT*this.wait),a=null!==n.dead&&n.timeDead()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait),c=4===n.xhr.readyState&&(r<1||r>=500);if((o||a||c)&&(a&&i.e.error("Request ".concat(this._requests[t].id," timed out (secondary), restarting")),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new i.e.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){i.e.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return i.e.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(i.e.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==i.e.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==i.e.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else i.e.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){i.e.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){i.e.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(()=>this._conn._onIdle(),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?i.e.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):i.e.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},i.e.Bosh.prototype.strip=null},function(e,t,n){(function(e,r){var i;/*! https://mths.be/punycode v1.4.0 by @mathias */!function(s){t&&t.nodeType,e&&e.nodeType;var o="object"==typeof r&&r;o.global!==o&&o.window!==o&&o.self;var a,c=2147483647,l=/^xn--/,u=/[^\x20-\x7E]/,d=/[\x2E\u3002\uFF0E\uFF61]/g,h={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=Math.floor,p=String.fromCharCode;function g(e){throw new RangeError(h[e])}function m(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function v(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+m((e=e.replace(d,".")).split("."),t).join(".")}function _(e){for(var t,n,r=[],i=0,s=e.length;i<s;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<s?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function b(e){return m(e,(function(e){var t="";return e>65535&&(t+=p((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=p(e)})).join("")}function y(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,n){var r=0;for(e=n?f(e/700):e>>1,e+=f(e/t);e>455;r+=36)e=f(e/35);return f(r+36*e/(e+38))}function S(e){var t,n,r,i,s,o,a,l,u,d,h,p=[],m=e.length,v=0,_=128,y=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&g("not-basic"),p.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<m;){for(s=v,o=1,a=36;i>=m&&g("invalid-input"),((l=(h=e.charCodeAt(i++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:36)>=36||l>f((c-v)/o))&&g("overflow"),v+=l*o,!(l<(u=a<=y?1:a>=y+26?26:a-y));a+=36)o>f(c/(d=36-u))&&g("overflow"),o*=d;y=w(v-s,t=p.length+1,0==s),f(v/t)>c-_&&g("overflow"),_+=f(v/t),v%=t,p.splice(v++,0,_)}return b(p)}function x(e){var t,n,r,i,s,o,a,l,u,d,h,m,v,b,S,x=[];for(m=(e=_(e)).length,t=128,n=0,s=72,o=0;o<m;++o)(h=e[o])<128&&x.push(p(h));for(r=i=x.length,i&&x.push("-");r<m;){for(a=c,o=0;o<m;++o)(h=e[o])>=t&&h<a&&(a=h);for(a-t>f((c-n)/(v=r+1))&&g("overflow"),n+=(a-t)*v,t=a,o=0;o<m;++o)if((h=e[o])<t&&++n>c&&g("overflow"),h==t){for(l=n,u=36;!(l<(d=u<=s?1:u>=s+26?26:u-s));u+=36)S=l-d,b=36-d,x.push(p(y(d+S%b,0))),l=f(S/b);x.push(p(y(l,0))),s=w(n,v,r==i),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:_,encode:b},decode:S,encode:x,toASCII:function(e){return v(e,(function(e){return u.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return v(e,(function(e){return l.test(e)?S(e.slice(4).toLowerCase()):e}))}},void 0===(i=function(){return a}.call(t,n,t,e))||(e.exports=i)}()}).call(this,n(36)(e),n(11))},function(e,t,n){var r,i;
+!function(n,r){var i=Array.prototype,o=Object.prototype,s=i.slice,a=o.hasOwnProperty,c=i.forEach,l={},u={forEach:function(e,t,n){var r,i,o;if(null!==e)if(c&&e.forEach===c)e.forEach(t,n);else if(e.length===+e.length){for(r=0,i=e.length;r<i;r++)if(r in e&&t.call(n,e[r],r,e)===l)return}else for(o in e)if(a.call(e,o)&&t.call(n,e[o],o,e)===l)return},extend:function(e){return this.forEach(s.call(arguments,1),(function(t){for(var n in t)e[n]=t[n]})),e}},d=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=u.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function h(e){return d.PF.compile(e||"nplurals=2; plural=(n != 1);")}function f(e,t){this._key=e,this._i18n=t}d.context_delimiter=String.fromCharCode(4),u.extend(f.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?d.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),u.extend(d.prototype,{translate:function(e){return new f(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,void 0,void 0,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,void 0,void 0,e,t,n)},dngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},dcngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},pgettext:function(e,t){return this.dcnpgettext.call(this,void 0,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,r){return this.dcnpgettext.call(this,void 0,e,t,n,r)},dnpgettext:function(e,t,n,r,i){return this.dcnpgettext.call(this,e,t,n,r,i)},dcnpgettext:function(e,t,n,r,i){var o;if(r=r||n,e=e||this._textdomain,!this.options)return(o=new d).dcnpgettext.call(o,void 0,void 0,n,r,i);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var s,a,c,l=t?t+d.context_delimiter+n:n,u=this.options.locale_data,f=u[e],p=(u.messages||this.defaults.locale_data.messages)[""],g=f[""].plural_forms||f[""]["Plural-Forms"]||f[""]["plural-forms"]||p.plural_forms||p["Plural-Forms"]||p["plural-forms"];if(void 0===i)c=0;else{if("number"!=typeof i&&(i=parseInt(i,10),isNaN(i)))throw new Error("The number that was passed in is not a number.");c=h(g)(i)}if(!f)throw new Error("No domain named `"+e+"` could be found.");return!(s=f[l])||c>s.length?(this.options.missing_key_callback&&this.options.missing_key_callback(l,e),a=[n,r],!0===this.options.debug&&console.log(a[h(g)(i)]),a[h()(i)]):(a=s[c])||(a=[n,r])[h()(i)]}});var p,g,m=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var i,o,s,a,c,l,u,d=1,h=n.length,f="",p=[];for(o=0;o<h;o++)if("string"===(f=e(n[o])))p.push(n[o]);else if("array"===f){if((a=n[o])[2])for(i=r[d],s=0;s<a[2].length;s++){if(!i.hasOwnProperty(a[2][s]))throw m('[sprintf] property "%s" does not exist',a[2][s]);i=i[a[2][s]]}else i=a[1]?r[a[1]]:r[d++];if(/[^s]/.test(a[8])&&"number"!=e(i))throw m("[sprintf] expecting number but found %s",e(i));switch(null==i&&(i=""),a[8]){case"b":i=i.toString(2);break;case"c":i=String.fromCharCode(i);break;case"d":i=parseInt(i,10);break;case"e":i=a[7]?i.toExponential(a[7]):i.toExponential();break;case"f":i=a[7]?parseFloat(i).toFixed(a[7]):parseFloat(i);break;case"o":i=i.toString(8);break;case"s":i=(i=String(i))&&a[7]?i.substring(0,a[7]):i;break;case"u":i=Math.abs(i);break;case"x":i=i.toString(16);break;case"X":i=i.toString(16).toUpperCase()}i=/[def]/.test(a[8])&&a[3]&&i>=0?"+"+i:i,l=a[4]?"0"==a[4]?"0":a[4].charAt(1):" ",u=a[6]-String(i).length,c=a[6]?t(l,u):"",p.push(a[5]?i+c:c+i)}return p.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],i=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){i|=1;var o=[],s=n[2],a=[];if(null===(a=/^([a-z_][a-z_\d]*)/i.exec(s)))throw"[sprintf] huh?";for(o.push(a[1]);""!==(s=s.substring(a[0].length));)if(null!==(a=/^\.([a-z_][a-z_\d]*)/i.exec(s)))o.push(a[1]);else{if(null===(a=/^\[(\d+)\]/.exec(s)))throw"[sprintf] huh?";o.push(a[1])}n[2]=o}else i|=2;if(3===i)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}(),v=function(e,t){return t.unshift(e),m.apply(null,t)};d.parse_plural=function(e,t){return e=e.replace(/n/g,t),d.parse_expression(e)},d.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?v(e,[].slice.call(t)):m.apply(this,[].slice.call(arguments))},d.prototype.sprintf=function(){return d.sprintf.apply(this,arguments)},(d.PF={}).parse=function(e){var t=d.PF.extractPluralExpr(e);return d.PF.parser.parse.call(d.PF.parser,t)},d.PF.compile=function(e){var t=d.PF.parse(e);return function(e){return!0===(n=d.PF.interpreter(t)(e))?1:n||0;var n}},d.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return d.PF.interpreter(e.expr)(t);case"TERNARY":return d.PF.interpreter(e.expr)(t)?d.PF.interpreter(e.truthy)(t):d.PF.interpreter(e.falsey)(t);case"OR":return d.PF.interpreter(e.left)(t)||d.PF.interpreter(e.right)(t);case"AND":return d.PF.interpreter(e.left)(t)&&d.PF.interpreter(e.right)(t);case"LT":return d.PF.interpreter(e.left)(t)<d.PF.interpreter(e.right)(t);case"GT":return d.PF.interpreter(e.left)(t)>d.PF.interpreter(e.right)(t);case"LTE":return d.PF.interpreter(e.left)(t)<=d.PF.interpreter(e.right)(t);case"GTE":return d.PF.interpreter(e.left)(t)>=d.PF.interpreter(e.right)(t);case"EQ":return d.PF.interpreter(e.left)(t)==d.PF.interpreter(e.right)(t);case"NEQ":return d.PF.interpreter(e.left)(t)!=d.PF.interpreter(e.right)(t);case"MOD":return d.PF.interpreter(e.left)(t)%d.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},d.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=e.match(n);if(!(r.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(r[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},d.PF.parser=(p={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,i,o,s){var a=o.length-1;switch(i){case 1:return{type:"GROUP",expr:o[a-1]};case 2:this.$={type:"TERNARY",expr:o[a-4],truthy:o[a-2],falsey:o[a]};break;case 3:this.$={type:"OR",left:o[a-2],right:o[a]};break;case 4:this.$={type:"AND",left:o[a-2],right:o[a]};break;case 5:this.$={type:"LT",left:o[a-2],right:o[a]};break;case 6:this.$={type:"LTE",left:o[a-2],right:o[a]};break;case 7:this.$={type:"GT",left:o[a-2],right:o[a]};break;case 8:this.$={type:"GTE",left:o[a-2],right:o[a]};break;case 9:this.$={type:"NEQ",left:o[a-2],right:o[a]};break;case 10:this.$={type:"EQ",left:o[a-2],right:o[a]};break;case 11:this.$={type:"MOD",left:o[a-2],right:o[a]};break;case 12:this.$={type:"GROUP",expr:o[a-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],i=[],o=this.table,s="",a=0,c=0,l=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var u=this.lexer.yylloc;function d(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}i.push(u),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var h,f,p,g,m,v,_,b,y,w,S={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==h&&(h=d()),g=o[p]&&o[p][h]),void 0===g||!g.length||!g[0]){if(!l){for(v in y=[],o[p])this.terminals_[v]&&v>2&&y.push("'"+this.terminals_[v]+"'");var x="";x=this.lexer.showPosition?"Parse error on line "+(a+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+y.join(", ")+", got '"+this.terminals_[h]+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==h?"end of input":"'"+(this.terminals_[h]||h)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[h]||h,line:this.lexer.yylineno,loc:u,expected:y})}if(3==l){if(1==h)throw new Error(x||"Parsing halted.");c=this.lexer.yyleng,s=this.lexer.yytext,a=this.lexer.yylineno,u=this.lexer.yylloc,h=d()}for(;!(2..toString()in o[p]);){if(0==p)throw new Error(x||"Parsing halted.");w=1,n.length=n.length-2*w,r.length=r.length-w,i.length=i.length-w,p=n[n.length-1]}f=h,h=2,g=o[p=n[n.length-1]]&&o[p][2],l=3}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+h);switch(g[0]){case 1:n.push(h),r.push(this.lexer.yytext),i.push(this.lexer.yylloc),n.push(g[1]),h=null,f?(h=f,f=null):(c=this.lexer.yyleng,s=this.lexer.yytext,a=this.lexer.yylineno,u=this.lexer.yylloc,l>0&&l--);break;case 2:if(_=this.productions_[g[1]][1],S.$=r[r.length-_],S._$={first_line:i[i.length-(_||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(_||1)].first_column,last_column:i[i.length-1].last_column},void 0!==(m=this.performAction.call(S,s,c,a,this.yy,g[1],r,i)))return m;_&&(n=n.slice(0,-1*_*2),r=r.slice(0,-1*_),i=i.slice(0,-1*_)),n.push(this.productions_[g[1]][0]),r.push(S.$),i.push(S._$),b=o[n[n.length-2]][n[n.length-1]],n.push(b);break;case 3:return!0}}return!0}},g=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};return e}(),p.lexer=g,p),e.exports&&(t=e.exports=d),t.Jed=d}()},function(e,t,n){"use strict";var r=n(15),i=n(0);i.e.Websocket=class{constructor(e){this._conn=e,this.strip="wrapper";const t=e.service;if(0!==t.indexOf("ws:")&&0!==t.indexOf("wss:")){let n="";"ws"===e.options.protocol&&"https:"!==window.location.protocol?n+="ws":n+="wss",n+="://"+window.location.host,0!==t.indexOf("/")?n+=window.location.pathname+t:n+=t,e.service=n}}_buildStream(){return Object(i.a)("open",{xmlns:i.e.NS.FRAMING,to:this._conn.domain,version:"1.0"})}_checkStreamError(e,t){let n;if(n=e.getElementsByTagNameNS?e.getElementsByTagNameNS(i.e.NS.STREAM,"error"):e.getElementsByTagName("stream:error"),0===n.length)return!1;const r=n[0];let o="",s="";for(let e=0;e<r.childNodes.length;e++){const t=r.childNodes[e];if("urn:ietf:params:xml:ns:xmpp-streams"!==t.getAttribute("xmlns"))break;"text"===t.nodeName?s=t.textContent:o=t.nodeName}let a="WebSocket stream error: ";return a+=o||"unknown",s&&(a+=" - "+s),i.e.error(a),this._conn._changeConnectStatus(t,o),this._conn._doDisconnect(),!0}_reset(){}_connect(){this._closeSocket(),this.socket=new WebSocket(this._conn.service,"xmpp"),this.socket.onopen=()=>this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,i.e.Status.CONNFAIL))return i.e.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in <open />":n!==i.e.NS.FRAMING&&(t="Wrong xmlns in <open />: "+n);const r=e.getAttribute("version");return"string"!=typeof r?t="Missing version in <open />":"1.0"!==r&&(t="Wrong version in <open />: "+r),!t||(this._conn._changeConnectStatus(i.e.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("<open ")||0===e.data.indexOf("<?xml")){const t=e.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===t)return;const n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("<close ")){const t=(new r.a).parseFromString(e.data,"text/xml").documentElement;this._conn.xmlInput(t),this._conn.rawInput(e.data);const n=t.getAttribute("see-other-uri");if(n){const e=this._conn.service;(e.indexOf("wss:")>=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(i.e.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==WebSocket.CLOSED){e&&this._conn.send(e);const t=Object(i.a)("close",{xmlns:i.e.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=i.e.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){i.e.warn("Couldn't send <close /> tag.")}}this._conn._doDisconnect()}_doDisconnect(){i.e.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return"<wrapper>"+e+"</wrapper>"}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){i.e.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(i.e.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(i.e.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):i.e.debug("Websocket closed")}_no_auth_received(e){i.e.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,i.e.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){i.e.error("Websocket error "+e),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t<e.length;t++)if(null!==e[t]){let n;n="restart"===e[t]?this._buildStream().tree():e[t];const r=i.e.serialize(n);this._conn.xmlOutput(n),this._conn.rawOutput(r),this.socket.send(r)}this._conn._data=[]}}_onMessage(e){let t;const n='<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("<open ")){if(t=(new r.a).parseFromString(e.data,"text/xml").documentElement,!this._handleStreamStart(t))return}else{const n=this._streamWrap(e.data);t=(new r.a).parseFromString(n,"text/xml").documentElement}return this._checkStreamError(t,i.e.Status.ERROR)?void 0:this._conn.disconnecting&&"presence"===t.firstChild.nodeName&&"unavailable"===t.firstChild.getAttribute("type")?(this._conn.xmlInput(t),void this._conn.rawInput(i.e.serialize(t))):void this._conn._dataRecv(t,e.data)}_onOpen(){i.e.debug("Websocket open");const e=this._buildStream();this._conn.xmlOutput(e.tree());const t=i.e.serialize(e);this._conn.rawOutput(t),this.socket.send(t)}_reqToData(e){return e}_send(){this._conn.flush()}_sendRestart(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}}},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){var r=n(333);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(20),i=Object.create,o=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=o},function(e,t,n){var r=n(74),i=n(76);function o(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}o.prototype=r(i.prototype),o.prototype.constructor=o,e.exports=o},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e){return e.placeholder}},function(e,t,n){var r=n(26)(n(11),"Map");e.exports=r},function(e,t,n){var r=n(398),i=n(405),o=n(407),s=n(408),a=n(409);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=s,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(57),i=n(39);e.exports=function(e,t){for(var n=0,o=(t=r(t,e)).length;null!=e&&n<o;)e=e[i(t[n++])];return n&&n==o?e:void 0}},function(e,t,n){var r=n(16),i=n(48),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(s.test(e)||!o.test(e)||null!=t&&e in Object(t))}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(41),i=n(13).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on  "+e);return e}},function(e,t,n){var r=n(457),i=n(84);e.exports=function(e){return r(i(e))}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(144)("keys"),i=n(145);e.exports=function(e){return r[e]||(r[e]=i(e))}},function(e,t){e.exports=!0},function(e,t,n){e.exports={default:n(465),__esModule:!0}},function(e,t,n){var r=n(40).f,i=n(60),o=n(17)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){"use strict";var r=n(59);function i(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)}e.exports.f=function(e){return new i(e)}},function(e,t,n){var r=n(367),i=n(33);e.exports=function(e){return null==e?[]:r(e,i(e))}},function(e,t,n){var r=n(109),i=n(368),o=n(77),s=n(52),a=r((function(e,t){var n=s(t,o(a));return i(e,32,void 0,t,n)}));a.placeholder={},e.exports=a},function(e,t,n){var r;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function o(e){return a(l(e),arguments)}function s(e,t){return o.apply(null,[e].concat(t||[]))}function a(e,t){var n,r,s,a,c,l,u,d,h,f=1,p=e.length,g="";for(r=0;r<p;r++)if("string"==typeof e[r])g+=e[r];else if("object"==typeof e[r]){if((a=e[r]).keys)for(n=t[f],s=0;s<a.keys.length;s++){if(null==n)throw new Error(o('[sprintf] Cannot access property "%s" of undefined value "%s"',a.keys[s],a.keys[s-1]));n=n[a.keys[s]]}else n=a.param_no?t[a.param_no]:t[f++];if(i.not_type.test(a.type)&&i.not_primitive.test(a.type)&&n instanceof Function&&(n=n()),i.numeric_arg.test(a.type)&&"number"!=typeof n&&isNaN(n))throw new TypeError(o("[sprintf] expecting number but found %T",n));switch(i.number.test(a.type)&&(d=n>=0),a.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,a.width?parseInt(a.width):0);break;case"e":n=a.precision?parseFloat(n).toExponential(a.precision):parseFloat(n).toExponential();break;case"f":n=a.precision?parseFloat(n).toFixed(a.precision):parseFloat(n);break;case"g":n=a.precision?String(Number(n.toPrecision(a.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=a.precision?n.substring(0,a.precision):n;break;case"t":n=String(!!n),n=a.precision?n.substring(0,a.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=a.precision?n.substring(0,a.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=a.precision?n.substring(0,a.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}i.json.test(a.type)?g+=n:(!i.number.test(a.type)||d&&!a.sign?h="":(h=d?"+":"-",n=n.toString().replace(i.sign,"")),l=a.pad_char?"0"===a.pad_char?"0":a.pad_char.charAt(1):" ",u=a.width-(h+n).length,c=a.width&&u>0?l.repeat(u):"",g+=a.align?h+n+c:"0"===l?h+c+n:c+h+n)}return g}var c=Object.create(null);function l(e){if(c[e])return c[e];for(var t,n=e,r=[],o=0;n;){if(null!==(t=i.text.exec(n)))r.push(t[0]);else if(null!==(t=i.modulo.exec(n)))r.push("%");else{if(null===(t=i.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){o|=1;var s=[],a=t[2],l=[];if(null===(l=i.key.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(l[1]);""!==(a=a.substring(l[0].length));)if(null!==(l=i.key_access.exec(a)))s.push(l[1]);else{if(null===(l=i.index_access.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(l[1])}t[2]=s}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return c[e]=r}t.sprintf=o,t.vsprintf=s,"undefined"!=typeof window&&(window.sprintf=o,window.vsprintf=s,void 0===(r=function(){return{sprintf:o,vsprintf:s}}.call(t,n,t,e))||(e.exports=r))}()},function(e,t){function n(e,t){for(var n in e)t[n]=e[n]}function r(e,t){var r=e.prototype;if(Object.create){var i=Object.create(t.prototype);r.__proto__=i}if(!(r instanceof t)){function o(){}o.prototype=t.prototype,n(r,o=new o),e.prototype=r=o}r.constructor!=e&&("function"!=typeof e&&console.error("unknow Class:"+e),r.constructor=e)}var i={},o=i.ELEMENT_NODE=1,s=i.ATTRIBUTE_NODE=2,a=i.TEXT_NODE=3,c=i.CDATA_SECTION_NODE=4,l=i.ENTITY_REFERENCE_NODE=5,u=i.ENTITY_NODE=6,d=i.PROCESSING_INSTRUCTION_NODE=7,h=i.COMMENT_NODE=8,f=i.DOCUMENT_NODE=9,p=i.DOCUMENT_TYPE_NODE=10,g=i.DOCUMENT_FRAGMENT_NODE=11,m=i.NOTATION_NODE=12,v={},_={},b=(v.INDEX_SIZE_ERR=(_[1]="Index size error",1),v.DOMSTRING_SIZE_ERR=(_[2]="DOMString size error",2),v.HIERARCHY_REQUEST_ERR=(_[3]="Hierarchy request error",3)),y=(v.WRONG_DOCUMENT_ERR=(_[4]="Wrong document",4),v.INVALID_CHARACTER_ERR=(_[5]="Invalid character",5),v.NO_DATA_ALLOWED_ERR=(_[6]="No data allowed",6),v.NO_MODIFICATION_ALLOWED_ERR=(_[7]="No modification allowed",7),v.NOT_FOUND_ERR=(_[8]="Not found",8)),w=(v.NOT_SUPPORTED_ERR=(_[9]="Not supported",9),v.INUSE_ATTRIBUTE_ERR=(_[10]="Attribute in use",10));v.INVALID_STATE_ERR=(_[11]="Invalid state",11),v.SYNTAX_ERR=(_[12]="Syntax error",12),v.INVALID_MODIFICATION_ERR=(_[13]="Invalid modification",13),v.NAMESPACE_ERR=(_[14]="Invalid namespace",14),v.INVALID_ACCESS_ERR=(_[15]="Invalid access",15);function S(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,_[e]),this.message=_[e],Error.captureStackTrace&&Error.captureStackTrace(this,S);return n.code=e,t&&(this.message=this.message+": "+t),n}function x(){}function E(e,t){this._node=e,this._refresh=t,A(this)}function A(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var r=e._refresh(e._node);te(e,"length",r.length),n(r,e),e._inc=t}}function C(){}function j(e,t){for(var n=e.length;n--;)if(e[n]===t)return n}function T(e,t,n,r){if(r?t[j(t,r)]=n:t[t.length++]=n,e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&D(i,e,r),function(e,t,n){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&(t._nsMap[n.prefix?n.localName:""]=n.value)}(i,e,n))}}function O(e,t,n){var r=j(t,n);if(!(r>=0))throw S(y,new Error(e.tagName+"@"+n));for(var i=t.length-1;r<i;)t[r]=t[++r];if(t.length=i,e){var o=e.ownerDocument;o&&(D(o,e,n),n.ownerElement=null)}}function k(e){if(this._features={},e)for(var t in e)this._features=e[t]}function N(){}function I(e){return("<"==e?"&lt;":">"==e&&"&gt;")||"&"==e&&"&amp;"||'"'==e&&"&quot;"||"&#"+e.charCodeAt()+";"}function M(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(M(e,t))return!0}while(e=e.nextSibling)}function R(){}function D(e,t,n,r){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&delete t._nsMap[n.prefix?n.localName:""]}function P(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var i=t.firstChild,o=0;i;)r[o++]=i,i=i.nextSibling;r.length=o}}}function L(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,P(e.ownerDocument,e),t}function z(e,t,n){var r=t.parentNode;if(r&&r.removeChild(t),t.nodeType===g){var i=t.firstChild;if(null==i)return t;var o=t.lastChild}else i=o=t;var s=n?n.previousSibling:e.lastChild;i.previousSibling=s,o.nextSibling=n,s?s.nextSibling=i:e.firstChild=i,null==n?e.lastChild=o:n.previousSibling=o;do{i.parentNode=e}while(i!==o&&(i=i.nextSibling));return P(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function F(){this._nsMap={}}function B(){}function q(){}function H(){}function U(){}function $(){}function W(){}function G(){}function V(){}function J(){}function X(){}function Q(){}function Y(){}function K(e,t){var n=[],r=9==this.nodeType?this.documentElement:this,i=r.prefix,o=r.namespaceURI;if(o&&null==i&&null==(i=r.lookupPrefix(o)))var s=[{namespace:o,prefix:null}];return ee(this,n,e,t,s),n.join("")}function Z(e,t,n){var r=e.prefix||"",i=e.namespaceURI;if(!r&&!i)return!1;if("xml"===r&&"http://www.w3.org/XML/1998/namespace"===i||"http://www.w3.org/2000/xmlns/"==i)return!1;for(var o=n.length;o--;){var s=n[o];if(s.prefix==r)return s.namespace!=i}return!0}function ee(e,t,n,r,i){if(r){if(!(e=r(e)))return;if("string"==typeof e)return void t.push(e)}switch(e.nodeType){case o:i||(i=[]);i.length;var u=e.attributes,m=u.length,v=e.firstChild,_=e.tagName;n="http://www.w3.org/1999/xhtml"===e.namespaceURI||n,t.push("<",_);for(var b=0;b<m;b++){"xmlns"==(y=u.item(b)).prefix?i.push({prefix:y.localName,namespace:y.value}):"xmlns"==y.nodeName&&i.push({prefix:"",namespace:y.value})}for(b=0;b<m;b++){var y;if(Z(y=u.item(b),0,i)){var w=y.prefix||"",S=y.namespaceURI,x=w?" xmlns:"+w:" xmlns";t.push(x,'="',S,'"'),i.push({prefix:w,namespace:S})}ee(y,t,n,r,i)}if(Z(e,0,i)){w=e.prefix||"",S=e.namespaceURI,x=w?" xmlns:"+w:" xmlns";t.push(x,'="',S,'"'),i.push({prefix:w,namespace:S})}if(v||n&&!/^(?:meta|link|img|br|hr|input)$/i.test(_)){if(t.push(">"),n&&/^script$/i.test(_))for(;v;)v.data?t.push(v.data):ee(v,t,n,r,i),v=v.nextSibling;else for(;v;)ee(v,t,n,r,i),v=v.nextSibling;t.push("</",_,">")}else t.push("/>");return;case f:case g:for(v=e.firstChild;v;)ee(v,t,n,r,i),v=v.nextSibling;return;case s:return t.push(" ",e.name,'="',e.value.replace(/[<&"]/g,I),'"');case a:return t.push(e.data.replace(/[<&]/g,I));case c:return t.push("<![CDATA[",e.data,"]]>");case h:return t.push("\x3c!--",e.data,"--\x3e");case p:var E=e.publicId,A=e.systemId;if(t.push("<!DOCTYPE ",e.name),E)t.push(' PUBLIC "',E),A&&"."!=A&&t.push('" "',A),t.push('">');else if(A&&"."!=A)t.push(' SYSTEM "',A,'">');else{var C=e.internalSubset;C&&t.push(" [",C,"]"),t.push(">")}return;case d:return t.push("<?",e.target," ",e.data,"?>");case l:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function te(e,t,n){e[t]=n}S.prototype=Error.prototype,n(v,S),x.prototype={length:0,item:function(e){return this[e]||null},toString:function(e,t){for(var n=[],r=0;r<this.length;r++)ee(this[r],n,e,t);return n.join("")}},E.prototype.item=function(e){return A(this),this[e]},r(E,x),C.prototype={length:0,item:x.prototype.item,getNamedItem:function(e){for(var t=this.length;t--;){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new S(w);var n=this.getNamedItem(e.nodeName);return T(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t,n=e.ownerElement;if(n&&n!=this._ownerElement)throw new S(w);return t=this.getNamedItemNS(e.namespaceURI,e.localName),T(this._ownerElement,this,e,t),t},removeNamedItem:function(e){var t=this.getNamedItem(e);return O(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return O(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){for(var n=this.length;n--;){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},k.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return!(!n||t&&!(t in n))},createDocument:function(e,t,n){var r=new R;if(r.implementation=this,r.childNodes=new x,r.doctype=n,n&&r.appendChild(n),t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new W;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},N.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return L(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return null!=this.firstChild},cloneNode:function(e){return function e(t,n,r){var i=new n.constructor;for(var a in n){var c=n[a];"object"!=typeof c&&c!=i[a]&&(i[a]=c)}n.childNodes&&(i.childNodes=new x);switch(i.ownerDocument=t,i.nodeType){case o:var l=n.attributes,u=i.attributes=new C,d=l.length;u._ownerElement=i;for(var h=0;h<d;h++)i.setAttributeNode(e(t,l.item(h),!0));break;case s:r=!0}if(r)for(var f=n.firstChild;f;)i.appendChild(e(t,f,r)),f=f.nextSibling;return i}(this.ownerDocument||this,this,e)},normalize:function(){for(var e=this.firstChild;e;){var t=e.nextSibling;t&&t.nodeType==a&&e.nodeType==a?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==s?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==s?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},n(i,N),n(i,N.prototype),R.prototype={nodeName:"#document",nodeType:f,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return null==this.documentElement&&e.nodeType==o&&(this.documentElement=e),z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),L(this,e)},importNode:function(e,t){return function e(t,n,r){var i;switch(n.nodeType){case o:(i=n.cloneNode(!1)).ownerDocument=t;case g:break;case s:r=!0}i||(i=n.cloneNode(!1));if(i.ownerDocument=t,i.parentNode=null,r)for(var a=n.firstChild;a;)i.appendChild(e(t,a,r)),a=a.nextSibling;return i}(this,e,t)},getElementById:function(e){var t=null;return M(this.documentElement,(function(n){if(n.nodeType==o&&n.getAttribute("id")==e)return t=n,!0})),t},createElement:function(e){var t=new F;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new x,(t.attributes=new C)._ownerElement=t,t},createDocumentFragment:function(){var e=new X;return e.ownerDocument=this,e.childNodes=new x,e},createTextNode:function(e){var t=new H;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new U;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new $;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new Q;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new B;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new J;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new F,r=t.split(":"),i=n.attributes=new C;return n.childNodes=new x,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new B,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},r(R,N),F.prototype={nodeType:o,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):function(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);r=e.lastChild}return r=e.lastChild,t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,P(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new E(this,(function(t){var n=[];return M(t,(function(r){r===t||r.nodeType!=o||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new E(this,(function(n){var r=[];return M(n,(function(i){i===n||i.nodeType!==o||"*"!==e&&i.namespaceURI!==e||"*"!==t&&i.localName!=t||r.push(i)})),r}))}},R.prototype.getElementsByTagName=F.prototype.getElementsByTagName,R.prototype.getElementsByTagNameNS=F.prototype.getElementsByTagNameNS,r(F,N),B.prototype.nodeType=s,r(B,N),q.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(_[b])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},r(q,N),H.prototype={nodeName:"#text",nodeType:a,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},r(H,q),U.prototype={nodeName:"#comment",nodeType:h},r(U,q),$.prototype={nodeName:"#cdata-section",nodeType:c},r($,q),W.prototype.nodeType=p,r(W,N),G.prototype.nodeType=m,r(G,N),V.prototype.nodeType=u,r(V,N),J.prototype.nodeType=l,r(J,N),X.prototype.nodeName="#document-fragment",X.prototype.nodeType=g,r(X,N),Q.prototype.nodeType=d,r(Q,N),Y.prototype.serializeToString=function(e,t,n){return K.call(e,t,n)},N.prototype.toString=K;try{if(Object.defineProperty){Object.defineProperty(E.prototype,"length",{get:function(){return A(this),this.$$length}}),Object.defineProperty(N.prototype,"textContent",{get:function(){return function e(t){switch(t.nodeType){case o:case g:var n=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&n.push(e(t)),t=t.nextSibling;return n.join("");default:return t.nodeValue}}(this)},set:function(e){switch(this.nodeType){case o:case g:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),te=function(e,t,n){e["$$"+t]=n}}}catch(e){}t.DOMImplementation=k,t.XMLSerializer=Y},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n(12))},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},function(e,t,n){var r=n(342),i=n(99),o=n(16),s=n(100),a=n(37),c=n(101),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=o(e),u=!n&&i(e),d=!n&&!u&&s(e),h=!n&&!u&&!d&&c(e),f=n||u||d||h,p=f?r(e.length,String):[],g=p.length;for(var m in e)!t&&!l.call(e,m)||f&&("length"==m||d&&("offset"==m||"parent"==m)||h&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||a(m,g))||p.push(m);return p}},function(e,t,n){var r=n(343),i=n(23),o=Object.prototype,s=o.hasOwnProperty,a=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&s.call(e,"callee")&&!a.call(e,"callee")};e.exports=c},function(e,t,n){(function(e){var r=n(11),i=n(344),o=t&&!t.nodeType&&t,s=o&&"object"==typeof e&&e&&!e.nodeType&&e,a=s&&s.exports===o?r.Buffer:void 0,c=(a?a.isBuffer:void 0)||i;e.exports=c}).call(this,n(46)(e))},function(e,t,n){var r=n(345),i=n(346),o=n(347),s=o&&o.isTypedArray,a=s?i(s):r;e.exports=a},function(e,t,n){var r=n(103),i=n(348),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))o.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){var r=n(106),i=n(50),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var s=e[t];o.call(e,t)&&i(s,n)&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t,n){var r=n(107);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(26),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var r=n(38),i=n(358),o=n(110);e.exports=function(e,t){return o(i(e,t,r),e+"")}},function(e,t,n){var r=n(359),i=n(111)(r);e.exports=i},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(98),i=n(362),o=n(29);e.exports=function(e){return o(e)?r(e,!0):i(e)}},function(e,t,n){var r=n(364),i=n(365),o=n(366);e.exports=function(e,t,n){return t==t?o(e,t,n):r(e,i,n)}},function(e,t,n){var r=n(25),i=n(16),o=n(23);e.exports=function(e){return"string"==typeof e||!i(e)&&o(e)&&"[object String]"==r(e)}},function(e,t,n){var r=n(38),i=n(116),o=i?function(e,t){return i.set(e,t),e}:r;e.exports=o},function(e,t,n){var r=n(117),i=r&&new r;e.exports=i},function(e,t,n){var r=n(26)(n(11),"WeakMap");e.exports=r},function(e,t,n){var r=n(119),i=n(120),o=n(371),s=n(51),a=n(121),c=n(77),l=n(382),u=n(52),d=n(11);e.exports=function e(t,n,h,f,p,g,m,v,_,b){var y=128&n,w=1&n,S=2&n,x=24&n,E=512&n,A=S?void 0:s(t);return function C(){for(var j=arguments.length,T=Array(j),O=j;O--;)T[O]=arguments[O];if(x)var k=c(C),N=o(T,k);if(f&&(T=r(T,f,p,x)),g&&(T=i(T,g,m,x)),j-=N,x&&j<b){var I=u(T,k);return a(t,n,e,C.placeholder,h,T,I,v,_,b-j)}var M=w?h:this,R=S?M[t]:t;return j=T.length,v?T=l(T,v):E&&j>1&&T.reverse(),y&&_<j&&(T.length=_),this&&this!==d&&this instanceof C&&(R=A||s(R)),R.apply(M,T)}}},function(e,t){var n=Math.max;e.exports=function(e,t,r,i){for(var o=-1,s=e.length,a=r.length,c=-1,l=t.length,u=n(s-a,0),d=Array(l+u),h=!i;++c<l;)d[c]=t[c];for(;++o<a;)(h||o<s)&&(d[r[o]]=e[o]);for(;u--;)d[c++]=e[o++];return d}},function(e,t){var n=Math.max;e.exports=function(e,t,r,i){for(var o=-1,s=e.length,a=-1,c=r.length,l=-1,u=t.length,d=n(s-c,0),h=Array(d+u),f=!i;++o<d;)h[o]=e[o];for(var p=o;++l<u;)h[p+l]=t[l];for(;++a<c;)(f||o<s)&&(h[p+r[a]]=e[o++]);return h}},function(e,t,n){var r=n(372),i=n(125),o=n(126);e.exports=function(e,t,n,s,a,c,l,u,d,h){var f=8&t;t|=f?32:64,4&(t&=~(f?64:32))||(t&=-4);var p=[e,t,a,f?c:void 0,f?l:void 0,f?void 0:c,f?void 0:l,u,d,h],g=n.apply(void 0,p);return r(e)&&i(g,p),g.placeholder=s,o(g,e,t)}},function(e,t,n){var r=n(116),i=n(373),o=r?function(e){return r.get(e)}:i;e.exports=o},function(e,t,n){var r=n(74),i=n(76);function o(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}o.prototype=r(i.prototype),o.prototype.constructor=o,e.exports=o},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},function(e,t,n){var r=n(115),i=n(111)(r);e.exports=i},function(e,t,n){var r=n(378),i=n(379),o=n(110),s=n(380);e.exports=function(e,t,n){var a=t+"";return o(e,i(a,s(r(a),n)))}},function(e,t,n){var r=n(53),i=n(393),o=n(394),s=n(395),a=n(396),c=n(397);function l(e){var t=this.__data__=new r(e);this.size=t.size}l.prototype.clear=i,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=a,l.prototype.set=c,e.exports=l},function(e,t,n){var r=n(410),i=n(23);e.exports=function e(t,n,o,s,a){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,o,s,e,a))}},function(e,t,n){var r=n(411),i=n(414),o=n(415);e.exports=function(e,t,n,s,a,c){var l=1&n,u=e.length,d=t.length;if(u!=d&&!(l&&d>u))return!1;var h=c.get(e),f=c.get(t);if(h&&f)return h==t&&f==e;var p=-1,g=!0,m=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++p<u;){var v=e[p],_=t[p];if(s)var b=l?s(_,v,p,t,e,c):s(v,_,p,e,t,c);if(void 0!==b){if(b)continue;g=!1;break}if(m){if(!i(t,(function(e,t){if(!o(m,t)&&(v===e||a(v,e,n,s,c)))return m.push(t)}))){g=!1;break}}else if(v!==_&&!a(v,_,n,s,c)){g=!1;break}}return c.delete(e),c.delete(t),g}},function(e,t,n){var r=n(131),i=n(16);e.exports=function(e,t,n){var o=t(e);return i(e)?o:r(o,n(e))}},function(e,t){e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},function(e,t,n){var r=n(422),i=n(133),o=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols,a=s?function(e){return null==e?[]:(e=Object(e),r(s(e),(function(t){return o.call(e,t)})))}:i;e.exports=a},function(e,t){e.exports=function(){return[]}},function(e,t,n){var r=n(423),i=n(78),o=n(424),s=n(425),a=n(117),c=n(25),l=n(108),u=l(r),d=l(i),h=l(o),f=l(s),p=l(a),g=c;(r&&"[object DataView]"!=g(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=g(new i)||o&&"[object Promise]"!=g(o.resolve())||s&&"[object Set]"!=g(new s)||a&&"[object WeakMap]"!=g(new a))&&(g=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,r=n?l(n):"";if(r)switch(r){case u:return"[object DataView]";case d:return"[object Map]";case h:return"[object Promise]";case f:return"[object Set]";case p:return"[object WeakMap]"}return t}),e.exports=g},function(e,t,n){var r=n(20);e.exports=function(e){return e==e&&!r(e)}},function(e,t){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},function(e,t,n){var r=n(432);e.exports=function(e){return null==e?"":r(e)}},function(e,t){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=l(n(447)),i=l(n(453)),o=l(n(461)),s=l(n(464)),a=l(n(89));t.default=function(e,t){var n=(0,c.getStorage)(),l=!(!n||!n[t]),u=l?n[t]:{clear:function(){},get:function(){},remove:function(){},set:function(){}},d=u.clear.bind(u),h=u.get.bind(u),f=u.remove.bind(u),p=u.set.bind(u);return{_driver:e,_support:l,_initStorage:function(){return a.default.resolve()},clear:function(e){var t=this;return(0,s.default)(o.default.mark((function n(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:d(),e&&e();case 2:case"end":return t.stop()}}),n,t)})))()},iterate:function(e,t){var n=this;return(0,s.default)(o.default.mark((function r(){var s;return o.default.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,(0,c.usePromise)(h,null);case 2:s=n.sent,(0,i.default)(s).forEach((function(t,n){return e(s[t],t,n)})),t&&t();case 6:case"end":return n.stop()}}),r,n)})))()},getItem:function(e,t){var n=this;return(0,s.default)(o.default.mark((function r(){var i;return o.default.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,(0,c.usePromise)(h,e);case 3:return i=n.sent,i=void 0===(i="string"==typeof e?i[e]:i)?null:i,t&&t(null,i),n.abrupt("return",i);case 10:throw n.prev=10,n.t0=n.catch(0),t&&t(n.t0),n.t0;case 14:case"end":return n.stop()}}),r,n,[[0,10]])})))()},key:function(e,t){var n=this;return(0,s.default)(o.default.mark((function r(){var s,a;return o.default.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,(0,c.usePromise)(h,null);case 2:return s=n.sent,a=(0,i.default)(s)[e],t&&t(a),n.abrupt("return",a);case 6:case"end":return n.stop()}}),r,n)})))()},keys:function(e){var t=this;return(0,s.default)(o.default.mark((function n(){var r,s;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,c.usePromise)(h,null);case 2:return r=t.sent,s=(0,i.default)(r),e&&e(s),t.abrupt("return",s);case 6:case"end":return t.stop()}}),n,t)})))()},length:function(e){var t=this;return(0,s.default)(o.default.mark((function n(){var r,s;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,c.usePromise)(h,null);case 2:return r=t.sent,s=(0,i.default)(r).length,e&&e(s),t.abrupt("return",s);case 6:case"end":return t.stop()}}),n,t)})))()},removeItem:function(e,t){var n=this;return(0,s.default)(o.default.mark((function r(){return o.default.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,(0,c.usePromise)(f,e);case 2:t&&t();case 3:case"end":return n.stop()}}),r,n)})))()},setItem:function(e,t,n){var i=this;return(0,s.default)(o.default.mark((function s(){return o.default.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,(0,c.usePromise)(p,(0,r.default)({},e,t));case 2:n&&n();case 3:case"end":return i.stop()}}),s,i)})))()}}};var c=n(492);function l(e){return e&&e.__esModule?e:{default:e}}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(84);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(456),i=n(146);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t,n){var r=n(86),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){var r=n(19),i=n(13),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(88)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){"use strict";var r=n(88),i=n(30),o=n(469),s=n(31),a=n(42),c=n(470),l=n(90),u=n(473),d=n(17)("iterator"),h=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,p,g,m,v){c(n,t,p);var _,b,y,w=function(e){if(!h&&e in A)return A[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},S=t+" Iterator",x="values"==g,E=!1,A=e.prototype,C=A[d]||A["@@iterator"]||g&&A[g],j=C||w(g),T=g?x?w("entries"):j:void 0,O="Array"==t&&A.entries||C;if(O&&(y=u(O.call(new e)))!==Object.prototype&&y.next&&(l(y,S,!0),r||"function"==typeof y[d]||s(y,d,f)),x&&C&&"values"!==C.name&&(E=!0,j=function(){return C.call(this)}),r&&!v||!h&&!E&&A[d]||s(A,d,j),a[t]=j,a[S]=f,g)if(_={values:x?j:w("values"),keys:m?j:w("keys"),entries:T},v)for(b in _)b in A||o(A,b,_[b]);else i(i.P+i.F*(h||E),t,_);return _}},function(e,t,n){var r=n(13).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(61),i=n(17)("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,n){var r=n(27),i=n(59),o=n(17)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||null==(n=r(s)[o])?t:i(n)}},function(e,t,n){var r,i,o,s=n(58),a=n(484),c=n(148),l=n(83),u=n(13),d=u.process,h=u.setImmediate,f=u.clearImmediate,p=u.MessageChannel,g=u.Dispatch,m=0,v={},_=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},b=function(e){_.call(e.data)};h&&f||(h=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return v[++m]=function(){a("function"==typeof e?e:Function(e),t)},r(m),m},f=function(e){delete v[e]},"process"==n(61)(d)?r=function(e){d.nextTick(s(_,e,1))}:g&&g.now?r=function(e){g.now(s(_,e,1))}:p?(o=(i=new p).port2,i.port1.onmessage=b,r=s(o.postMessage,o,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(e){u.postMessage(e+"","*")},u.addEventListener("message",b,!1)):r="onreadystatechange"in l("script")?function(e){c.appendChild(l("script")).onreadystatechange=function(){c.removeChild(this),_.call(e)}}:function(e){setTimeout(s(_,e,1),0)}),e.exports={set:h,clear:f}},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){var r=n(27),i=n(41),o=n(91);e.exports=function(e,t){if(r(e),i(t)&&t.constructor===e)return t;var n=o.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";var r=n(15),i=n(0);i.e.Request=class{constructor(e,t,n,r){this.id=++i.e._requestId,this.xmlData=e,this.data=i.e.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=r||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;return(new Date-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;return(new Date-this.dead)/1e3},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw i.e.error("invalid response received"),i.e.error("responseText: "+this.xhr.responseText),i.e.error("responseXML: "+i.e.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(i.e.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r.a).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){i.e.error("invalid response received: "+e.querySelector("parsererror").textContent),i.e.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=i.e.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},i.e.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=Object(i.a)("body",{rid:this.rid++,xmlns:i.e.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const r=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":i.e.NS.BOSH});n&&r.attrs({route:n});const o=this._conn._connect_cb;this._requests.push(new i.e.Request(r.tree(),this._onRequestStateChange.bind(this,o.bind(this._conn)),r.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,r,o,s,a){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=r,this._conn.domain=i.e.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=o||this.wait,this.hold=s||this.hold,this.window=a||this.window,this._conn._changeConnectStatus(i.e.Status.ATTACHED,null)}_restore(e,t,n,r,o){const s=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=s&&s.rid&&s.sid&&s.jid&&(null==e||i.e.getBareJidFromJid(s.jid)===i.e.getBareJidFromJid(e)||null===i.e.getNodeFromJid(e)&&i.e.getDomainFromJid(s.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(s.jid,s.sid,s.rid,t,n,r,o)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");i.e.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(i.e.Status.CONNFAIL,t)):this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),i.e.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const r=e.getAttribute("hold");r&&(this.hold=parseInt(r,10));const o=e.getAttribute("wait");o&&(this.wait=parseInt(o,10));const s=e.getAttribute("inactivity");s&&(this.inactivity=parseInt(s,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),r=this._conn.protocolErrorHandlers.HTTP[n];r&&r.call(this,n)}_hitError(e){this.errors++,i.e.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){i.e.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(i.e.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n<e.length;n++)null!==e[n]&&("restart"===e[n]?t.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":i.e.NS.BOSH}):t.cnode(e[n]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}if(this._requests.length>0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(i.e.TIMEOUT*this.wait)&&(i.e.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(i.e.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){i.e.error("Caught an error while retrieving a request's status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(i.e.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const r=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&r>=400)return this._hitError(r),void this._callProtocolErrorHandlers(n);const o=r>0&&r<500,s=n.sends>this._conn.maxRetries;if((o||s)&&(this._removeRequest(n),i.e.debug("request id "+n.id+" should now be removed")),200===r){const e=this._requests[0]===n;(this._requests[1]===n||e&&this._requests.length>0&&this._requests[0].age()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),i.e.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0}else 0===r||r>=400&&r<600||r>=12e3?(i.e.error("request id "+n.id+"."+n.sends+" error "+r+" happened"),this._hitError(r),this._callProtocolErrorHandlers(n),r>=400&&r<500&&(this._conn._changeConnectStatus(i.e.Status.DISCONNECTING,null),this._conn._doDisconnect())):i.e.error("request id "+n.id+"."+n.sends+" error "+r+" happened");o||s?s&&!this._conn.connected&&this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const r=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const o=n.age(),s=!isNaN(o)&&o>Math.floor(i.e.TIMEOUT*this.wait),a=null!==n.dead&&n.timeDead()>Math.floor(i.e.SECONDARY_TIMEOUT*this.wait),c=4===n.xhr.readyState&&(r<1||r>=500);if((s||a||c)&&(a&&i.e.error("Request ".concat(this._requests[t].id," timed out (secondary), restarting")),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new i.e.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){i.e.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return i.e.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(i.e.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(i.e.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==i.e.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==i.e.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else i.e.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){i.e.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){i.e.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new i.e.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(()=>this._conn._onIdle(),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?i.e.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):i.e.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},i.e.Bosh.prototype.strip=null},function(e,t,n){(function(e,r){var i;/*! https://mths.be/punycode v1.4.0 by @mathias */!function(o){t&&t.nodeType,e&&e.nodeType;var s="object"==typeof r&&r;s.global!==s&&s.window!==s&&s.self;var a,c=2147483647,l=/^xn--/,u=/[^\x20-\x7E]/,d=/[\x2E\u3002\uFF0E\uFF61]/g,h={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=Math.floor,p=String.fromCharCode;function g(e){throw new RangeError(h[e])}function m(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function v(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+m((e=e.replace(d,".")).split("."),t).join(".")}function _(e){for(var t,n,r=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function b(e){return m(e,(function(e){var t="";return e>65535&&(t+=p((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=p(e)})).join("")}function y(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,n){var r=0;for(e=n?f(e/700):e>>1,e+=f(e/t);e>455;r+=36)e=f(e/35);return f(r+36*e/(e+38))}function S(e){var t,n,r,i,o,s,a,l,u,d,h,p=[],m=e.length,v=0,_=128,y=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&g("not-basic"),p.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<m;){for(o=v,s=1,a=36;i>=m&&g("invalid-input"),((l=(h=e.charCodeAt(i++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:36)>=36||l>f((c-v)/s))&&g("overflow"),v+=l*s,!(l<(u=a<=y?1:a>=y+26?26:a-y));a+=36)s>f(c/(d=36-u))&&g("overflow"),s*=d;y=w(v-o,t=p.length+1,0==o),f(v/t)>c-_&&g("overflow"),_+=f(v/t),v%=t,p.splice(v++,0,_)}return b(p)}function x(e){var t,n,r,i,o,s,a,l,u,d,h,m,v,b,S,x=[];for(m=(e=_(e)).length,t=128,n=0,o=72,s=0;s<m;++s)(h=e[s])<128&&x.push(p(h));for(r=i=x.length,i&&x.push("-");r<m;){for(a=c,s=0;s<m;++s)(h=e[s])>=t&&h<a&&(a=h);for(a-t>f((c-n)/(v=r+1))&&g("overflow"),n+=(a-t)*v,t=a,s=0;s<m;++s)if((h=e[s])<t&&++n>c&&g("overflow"),h==t){for(l=n,u=36;!(l<(d=u<=o?1:u>=o+26?26:u-o));u+=36)S=l-d,b=36-d,x.push(p(y(d+S%b,0))),l=f(S/b);x.push(p(y(l,0))),o=w(n,v,r==i),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:_,encode:b},decode:S,encode:x,toASCII:function(e){return v(e,(function(e){return u.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return v(e,(function(e){return l.test(e)?S(e.slice(4).toLowerCase()):e}))}},void 0===(i=function(){return a}.call(t,n,t,e))||(e.exports=i)}()}).call(this,n(46)(e),n(12))},function(e,t,n){var r,i;
 /*!
  * URI.js - Mutating URLs
  * IPv6 Support
@@ -45,7 +45,7 @@
  * Licensed under
  *   MIT License http://www.opensource.org/licenses/mit-license
  *
- */!function(s,o){"use strict";e.exports?e.exports=o():void 0===(i="function"==typeof(r=o)?r.call(t,n,t,e):r)||(e.exports=i)}(0,(function(e){"use strict";var t=e&&e.IPv6;return{best:function(e){var t,n,r=e.toLowerCase().split(":"),i=r.length,s=8;for(""===r[0]&&""===r[1]&&""===r[2]?(r.shift(),r.shift()):""===r[0]&&""===r[1]?r.shift():""===r[i-1]&&""===r[i-2]&&r.pop(),-1!==r[(i=r.length)-1].indexOf(".")&&(s=7),t=0;t<i&&""!==r[t];t++);if(t<s)for(r.splice(t,1,"0000");r.length<s;)r.splice(t,0,"0000");for(var o=0;o<s;o++){n=r[o].split("");for(var a=0;a<3&&("0"===n[0]&&n.length>1);a++)n.splice(0,1);r[o]=n.join("")}var c=-1,l=0,u=0,d=-1,h=!1;for(o=0;o<s;o++)h?"0"===r[o]?u+=1:(h=!1,u>l&&(c=d,l=u)):"0"===r[o]&&(h=!0,d=o,u=1);u>l&&(c=d,l=u),l>1&&r.splice(c,l,""),i=r.length;var f="";for(""===r[0]&&(f=":"),o=0;o<i&&(f+=r[o],o!==i-1);o++)f+=":";return""===r[i-1]&&(f+=":"),f},noConflict:function(){return e.IPv6===this&&(e.IPv6=t),this}}}))},function(e,t,n){var r,i;
+ */!function(o,s){"use strict";e.exports?e.exports=s():void 0===(i="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=i)}(0,(function(e){"use strict";var t=e&&e.IPv6;return{best:function(e){var t,n,r=e.toLowerCase().split(":"),i=r.length,o=8;for(""===r[0]&&""===r[1]&&""===r[2]?(r.shift(),r.shift()):""===r[0]&&""===r[1]?r.shift():""===r[i-1]&&""===r[i-2]&&r.pop(),-1!==r[(i=r.length)-1].indexOf(".")&&(o=7),t=0;t<i&&""!==r[t];t++);if(t<o)for(r.splice(t,1,"0000");r.length<o;)r.splice(t,0,"0000");for(var s=0;s<o;s++){n=r[s].split("");for(var a=0;a<3&&("0"===n[0]&&n.length>1);a++)n.splice(0,1);r[s]=n.join("")}var c=-1,l=0,u=0,d=-1,h=!1;for(s=0;s<o;s++)h?"0"===r[s]?u+=1:(h=!1,u>l&&(c=d,l=u)):"0"===r[s]&&(h=!0,d=s,u=1);u>l&&(c=d,l=u),l>1&&r.splice(c,l,""),i=r.length;var f="";for(""===r[0]&&(f=":"),s=0;s<i&&(f+=r[s],s!==i-1);s++)f+=":";return""===r[i-1]&&(f+=":"),f},noConflict:function(){return e.IPv6===this&&(e.IPv6=t),this}}}))},function(e,t,n){var r,i;
 /*!
  * URI.js - Mutating URLs
  * Second Level Domain (SLD) Support
@@ -58,12 +58,19 @@
  * Licensed under
  *   MIT License http://www.opensource.org/licenses/mit-license
  *
- */!function(s,o){"use strict";e.exports?e.exports=o():void 0===(i="function"==typeof(r=o)?r.call(t,n,t,e):r)||(e.exports=i)}(0,(function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return!1;var r=e.lastIndexOf(".",t-1);if(r<=0||r>=t-1)return!1;var i=n.list[e.slice(t+1)];return!!i&&i.indexOf(" "+e.slice(r+1,t)+" ")>=0},is:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return!1;if(e.lastIndexOf(".",t-1)>=0)return!1;var r=n.list[e.slice(t+1)];return!!r&&r.indexOf(" "+e.slice(0,t)+" ")>=0},get:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return null;var r=e.lastIndexOf(".",t-1);if(r<=0||r>=t-1)return null;var i=n.list[e.slice(t+1)];return i?i.indexOf(" "+e.slice(r+1,t)+" ")<0?null:e.slice(r+1):null},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n}))},function(e,t,n){"use strict";var r=n(14),i=n(1);i.c.Websocket=class{constructor(e){this._conn=e,this.strip="wrapper";const t=e.service;if(0!==t.indexOf("ws:")&&0!==t.indexOf("wss:")){let n="";"ws"===e.options.protocol&&"https:"!==window.location.protocol?n+="ws":n+="wss",n+="://"+window.location.host,0!==t.indexOf("/")?n+=window.location.pathname+t:n+=t,e.service=n}}_buildStream(){return Object(i.a)("open",{xmlns:i.c.NS.FRAMING,to:this._conn.domain,version:"1.0"})}_checkStreamError(e,t){let n;if(n=e.getElementsByTagNameNS?e.getElementsByTagNameNS(i.c.NS.STREAM,"error"):e.getElementsByTagName("stream:error"),0===n.length)return!1;const r=n[0];let s="",o="";for(let e=0;e<r.childNodes.length;e++){const t=r.childNodes[e];if("urn:ietf:params:xml:ns:xmpp-streams"!==t.getAttribute("xmlns"))break;"text"===t.nodeName?o=t.textContent:s=t.nodeName}let a="WebSocket stream error: ";return a+=s||"unknown",o&&(a+=" - "+o),i.c.error(a),this._conn._changeConnectStatus(t,s),this._conn._doDisconnect(),!0}_reset(){}_connect(){this._closeSocket(),this.socket=new WebSocket(this._conn.service,"xmpp"),this.socket.onopen=()=>this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,i.c.Status.CONNFAIL))return i.c.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in <open />":n!==i.c.NS.FRAMING&&(t="Wrong xmlns in <open />: "+n);const r=e.getAttribute("version");return"string"!=typeof r?t="Missing version in <open />":"1.0"!==r&&(t="Wrong version in <open />: "+r),!t||(this._conn._changeConnectStatus(i.c.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("<open ")||0===e.data.indexOf("<?xml")){const t=e.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===t)return;const n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("<close ")){const t=(new r.a).parseFromString(e.data,"text/xml").documentElement;this._conn.xmlInput(t),this._conn.rawInput(e.data);const n=t.getAttribute("see-other-uri");if(n){const e=this._conn.service;(e.indexOf("wss:")>=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(i.c.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==WebSocket.CLOSED){e&&this._conn.send(e);const t=Object(i.a)("close",{xmlns:i.c.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=i.c.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){i.c.warn("Couldn't send <close /> tag.")}}setTimeout(()=>this._conn._doDisconnect,0)}_doDisconnect(){i.c.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return"<wrapper>"+e+"</wrapper>"}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){i.c.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(i.c.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(i.c.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):i.c.debug("Websocket closed")}_no_auth_received(e){i.c.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(i.c.Status.CONNFAIL,i.c.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){i.c.error("Websocket error "+e),this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t<e.length;t++)if(null!==e[t]){let n;n="restart"===e[t]?this._buildStream().tree():e[t];const r=i.c.serialize(n);this._conn.xmlOutput(n),this._conn.rawOutput(r),this.socket.send(r)}this._conn._data=[]}}_onMessage(e){let t;const n='<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("<open ")){if(t=(new r.a).parseFromString(e.data,"text/xml").documentElement,!this._handleStreamStart(t))return}else{const n=this._streamWrap(e.data);t=(new r.a).parseFromString(n,"text/xml").documentElement}return this._checkStreamError(t,i.c.Status.ERROR)?void 0:this._conn.disconnecting&&"presence"===t.firstChild.nodeName&&"unavailable"===t.firstChild.getAttribute("type")?(this._conn.xmlInput(t),void this._conn.rawInput(i.c.serialize(t))):void this._conn._dataRecv(t,e.data)}_onOpen(){i.c.debug("Websocket open");const e=this._buildStream();this._conn.xmlOutput(e.tree());const t=i.c.serialize(e);this._conn.rawOutput(t),this.socket.send(t)}_reqToData(e){return e}_send(){this._conn.flush()}_sendRestart(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}}},function(e,t,n){"use strict";t.a=function(){return!1}},function(e,t,n){"use strict";(function(e){var r=n(5),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=s&&s.exports===i?r.a.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var n=e.length,r=a?a(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(55)(e))},function(e,t,n){e.exports=function(){"use strict";return function(e,t,n){var r=t.prototype,i=r.format;n.en.ordinal=function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"},r.format=function(e){var t=this,n=this.$locale(),r=this.$utils(),s=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|gggg|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return n.ordinal(t.$D);case"gggg":return t.weekYear();case"wo":return n.ordinal(t.week(),"W");case"w":case"ww":return r.s(t.week(),"w"===e?1:2,"0");case"k":case"kk":return r.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();default:return e}}));return i.bind(this)(s)}}}()},function(e,t,n){var r=n(290),i=n(56);e.exports=function(e,t,n){var s=null==e?0:e.length;return s?(t=n||void 0===t?1:i(t),r(e,t<0?0:t,s)):[]}},function(e,t,n){var r=n(21),i=n(19);e.exports=function(e){return!0===e||!1===e||i(e)&&"[object Boolean]"==r(e)}},function(e,t){e.exports=function(e){return null==e}},function(e,t,n){var r=n(59),i=n(343),s=n(396),o=n(398);e.exports=function(e,t){if(null==e)return{};var n=r(o(e),(function(e){return[e]}));return t=i(t),s(e,n,(function(e,n){return t(e,n[0])}))}},function(e,t,n){var r=n(78),i=n(110),s=n(25),o=n(90),a=n(401);e.exports=function(e){if(null==e)return 0;if(s(e))return o(e)?a(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},function(e,t,n){"use strict";(function(t){!function(t){var n=/^(b|B)$/,r={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function s(e){var t,s,o,a,c,l,u,d,h,f,p,g,m,v,_,b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},y=[],w=0,S=void 0,x=void 0;if(isNaN(e))throw new TypeError("Invalid number");return s=!0===b.bits,p=!0===b.unix,t=b.base||2,f=void 0!==b.round?b.round:p?1:2,l=void 0!==b.locale?b.locale:"",u=b.localeOptions||{},g=void 0!==b.separator?b.separator:"",m=void 0!==b.spacer?b.spacer:p?"":" ",_=b.symbols||{},v=2===t&&b.standard||"jedec",h=b.output||"string",a=!0===b.fullform,c=b.fullforms instanceof Array?b.fullforms:[],S=void 0!==b.exponent?b.exponent:-1,o=2<t?1e3:1024,(d=(x=Number(e))<0)&&(x=-x),(-1===S||isNaN(S))&&(S=Math.floor(Math.log(x)/Math.log(o)))<0&&(S=0),8<S&&(S=8),"exponent"===h?S:(0===x?(y[0]=0,y[1]=p?"":r[v][s?"bits":"bytes"][S]):(w=x/(2===t?Math.pow(2,10*S):Math.pow(1e3,S)),s&&o<=(w*=8)&&S<8&&(w/=o,S++),y[0]=Number(w.toFixed(0<S?f:0)),y[0]===o&&S<8&&void 0===b.exponent&&(y[0]=1,S++),y[1]=10===t&&1===S?s?"kb":"kB":r[v][s?"bits":"bytes"][S],p&&(y[1]="jedec"===v?y[1].charAt(0):0<S?y[1].replace(/B$/,""):y[1],n.test(y[1])&&(y[0]=Math.floor(y[0]),y[1]=""))),d&&(y[0]=-y[0]),y[1]=_[y[1]]||y[1],!0===l?y[0]=y[0].toLocaleString():0<l.length?y[0]=y[0].toLocaleString(l,u):0<g.length&&(y[0]=y[0].toString().replace(".",g)),"array"===h?y:(a&&(y[1]=c[S]?c[S]:i[v][S]+(s?"bit":"byte")+(1===y[0]?"":"s")),"object"===h?{value:y[0],symbol:y[1],exponent:S}:y.join(m)))}s.partial=function(e){return function(t){return s(t,e)}},e.exports=s}("undefined"!=typeof window&&window)}).call(this,n(11))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/form_captcha.html --\x3e\n",e.label&&(t+="\n<label>\n    "+n(e.label)+"\n</label>\n"),t+='\n<img src="data:'+n(e.type)+";base64,"+n(e.data)+'">\n<input name="'+n(e.name)+'" type="text" ',e.required&&(t+=' required="required" '),t+=" />\n\n\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_checkbox.html --\x3e\n<div class="form-group">\n    <input id="'+n(e.id)+'" name="'+n(e.name)+'" type="checkbox" '+n(e.checked)+" ",e.required&&(t+=" required "),t+=' />\n    <label class="form-check-label" for="'+n(e.id)+'">'+n(e.label)+"</label>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t,n="",i=r.escape;Array.prototype.join;return n+='\x3c!-- src/templates/form_select.html --\x3e\n<div class="form-group">\n    <label for="'+i(e.id)+'">'+i(e.label)+'</label>\n    <select class="form-control" id="'+i(e.id)+'" name="'+i(e.name)+'" ',e.multiple&&(n+=' multiple="multiple" '),n+=">"+(null==(t=e.options)?"":t)+"</select>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;return t+='\x3c!-- src/templates/form_textarea.html --\x3e\n<label class="label-ta">'+n(e.label)+'</label>\n<textarea name="'+n(e.name)+'">'+n(e.value)+"</textarea>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;return t+="\x3c!-- src/templates/form_url.html --\x3e\n<label>\n    "+n(e.label)+'\n    <a class="form-url" target="_blank" rel="noopener" href="'+n(e.value)+'">'+n(e.value)+"</a>\n</label>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/select_option.html --\x3e\n<option value="'+n(e.value)+'" ',e.selected&&(t+=' selected="selected" '),t+=" >"+n(e.label)+"</option>\n"}},function(e,t,n){"use strict";(function(t){!function(t){var n=/^(b|B)$/,r={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function s(e){var t,s,o,a,c,l,u,d,h,f,p,g,m,v,_,b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},y=[],w=0,S=void 0,x=void 0;if(isNaN(e))throw new TypeError("Invalid number");return s=!0===b.bits,p=!0===b.unix,t=b.base||2,f=void 0!==b.round?b.round:p?1:2,l=void 0!==b.locale?b.locale:"",u=b.localeOptions||{},g=void 0!==b.separator?b.separator:"",m=void 0!==b.spacer?b.spacer:p?"":" ",_=b.symbols||{},v=2===t&&b.standard||"jedec",h=b.output||"string",a=!0===b.fullform,c=b.fullforms instanceof Array?b.fullforms:[],S=void 0!==b.exponent?b.exponent:-1,o=2<t?1e3:1024,(d=(x=Number(e))<0)&&(x=-x),(-1===S||isNaN(S))&&(S=Math.floor(Math.log(x)/Math.log(o)))<0&&(S=0),8<S&&(S=8),"exponent"===h?S:(0===x?(y[0]=0,y[1]=p?"":r[v][s?"bits":"bytes"][S]):(w=x/(2===t?Math.pow(2,10*S):Math.pow(1e3,S)),s&&o<=(w*=8)&&S<8&&(w/=o,S++),y[0]=Number(w.toFixed(0<S?f:0)),y[0]===o&&S<8&&void 0===b.exponent&&(y[0]=1,S++),y[1]=10===t&&1===S?s?"kb":"kB":r[v][s?"bits":"bytes"][S],p&&(y[1]="jedec"===v?y[1].charAt(0):0<S?y[1].replace(/B$/,""):y[1],n.test(y[1])&&(y[0]=Math.floor(y[0]),y[1]=""))),d&&(y[0]=-y[0]),y[1]=_[y[1]]||y[1],!0===l?y[0]=y[0].toLocaleString():0<l.length?y[0]=y[0].toLocaleString(l,u):0<g.length&&(y[0]=y[0].toString().replace(".",g)),"array"===h?y:(a&&(y[1]=c[S]?c[S]:i[v][S]+(s?"bit":"byte")+(1===y[0]?"":"s")),"object"===h?{value:y[0],symbol:y[1],exponent:S}:y.join(m)))}s.partial=function(e){return function(t){return s(t,e)}},e.exports=s}("undefined"!=typeof window&&window)}).call(this,n(11))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="";return t+='\x3c!-- src/templates/controlbox_toggle.html --\x3e\n<span class="toggle-feedback">'+(0,r.escape)(e.label_toggle)+"</span>\n"}},function(e,t,n){n(8);e.exports=function(e){return'\x3c!-- src/templates/dragresize.html --\x3e\n<div class="dragresize dragresize-top"></div>\n<div class="dragresize dragresize-topleft"></div>\n<div class="dragresize dragresize-left"></div>\n','\x3c!-- src/templates/dragresize.html --\x3e\n<div class="dragresize dragresize-top"></div>\n<div class="dragresize dragresize-topleft"></div>\n<div class="dragresize dragresize-left"></div>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/room_description.html --\x3e\n\x3c!-- FIXME: check markup in mockup --\x3e\n<div class="room-info">\n<p class="room-info"><strong>'+n(e.label_jid)+"</strong> "+n(e.jid)+'</p>\n<p class="room-info"><strong>'+n(e.label_desc)+"</strong> "+n(e.desc)+'</p>\n<p class="room-info"><strong>'+n(e.label_occ)+"</strong> "+n(e.occ)+'</p>\n<p class="room-info"><strong>'+n(e.label_features)+"</strong>\n    <ul>\n        ",e.passwordprotected&&(t+='\n        <li class="room-info locked">'+n(e.label_requires_auth)+"</li>\n        "),t+="\n        ",e.hidden&&(t+='\n        <li class="room-info">'+n(e.label_hidden)+"</li>\n        "),t+="\n        ",e.membersonly&&(t+='\n        <li class="room-info">'+n(e.label_requires_invite)+"</li>\n        "),t+="\n        ",e.moderated&&(t+='\n        <li class="room-info">'+n(e.label_moderated)+"</li>\n        "),t+="\n        ",e.nonanonymous&&(t+='\n        <li class="room-info">'+n(e.label_non_anon)+"</li>\n        "),t+="\n        ",e.open&&(t+='\n        <li class="room-info">'+n(e.label_open_room)+"</li>\n        "),t+="\n        ",e.persistent&&(t+='\n        <li class="room-info">'+n(e.label_permanent_room)+"</li>\n        "),t+="\n        ",e.publicroom&&(t+='\n        <li class="room-info">'+n(e.label_public)+"</li>\n        "),t+="\n        ",e.semianonymous&&(t+='\n        <li class="room-info">'+n(e.label_semi_anon)+"</li>\n        "),t+="\n        ",e.temporary&&(t+='\n        <li class="room-info">'+n(e.label_temp_room)+"</li>\n        "),t+="\n        ",e.unmoderated&&(t+='\n        <li class="room-info">'+n(e.label_unmoderated)+"</li>\n        "),t+="\n    </ul>\n</p>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/register_panel.html --\x3e\n<div>\n    <form id="converse-register" class="converse-form">\n        <legend class="col-form-label">'+n(e.__("Create your account"))+'</legend>\n\n        <div class="form-group">\n            <label>'+n(e.__("Please enter the XMPP provider to register with:"))+'</label>\n            <div class="form-errors hidden"></div>\n\n            ',e.default_domain?t+="\n                "+n(e.default_domain)+"\n            </div>\n            ":t+='\n                <input class="form-control" required="required" type="text" name="domain" placeholder="'+n(e.domain_placeholder)+'"/>\n                <p class="form-text text-muted">'+n(e.help_providers)+' <a href="'+n(e.href_providers)+'" class="url" target="_blank" rel="noopener">'+n(e.help_providers_link)+'</a>.</p>\n            </div>\n            <fieldset class="buttons">\n                <input class="btn btn-primary" type="submit" value="'+n(e.label_register)+'"/>\n                <div class="switch-form">\n                    <p>'+n(e.__("Already have a chat account?"))+'</p>\n                    <p><a class="login-here toggle-register-login" href="#converse/login">'+n(e.__("Log in here"))+"</a></p>\n                </div>\n            </fieldset>\n            ",t+="\n        \x3c!--</div>--\x3e\n    </form>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/registration_form.html --\x3e\n<legend class="col-form-label">'+n(e.__("Account Registration:"))+" "+n(e.domain)+'</legend>\n<p class="title">'+n(e.title)+'</p>\n<p class="form-help instructions">'+n(e.instructions)+'</p>\n<div class="form-errors hidden"></div>\n\n<fieldset class="buttons">\n    <input type="submit" class="btn btn-primary" value="'+n(e.__("Register"))+'"/>\n    ',e.registration_domain||(t+='\n        <input type="button" class="btn btn-secondary button-cancel" value="'+n(e.__("Choose a different provider"))+'"/>\n    '),t+='\n    <div class="switch-form">\n        <p>'+n(e.__("Already have a chat account?"))+'</p>\n        <p><a class="login-here toggle-register-login" href="#converse/login">'+n(e.__("Log in here"))+"</a></p>\n    </div>\n</fieldset>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/registration_request.html --\x3e\n<span class="spinner login-submit fa fa-spinner"></span>\n<p class="info">'+n(e.__("Hold tight, we're fetching the registration form…"))+"</p>\n",e.cancel&&(t+='\n    <button class="btn btn-secondary button-cancel hor_centered">'+n(e.__("Cancel"))+"</button>\n"),t+="\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/group_header.html --\x3e\n<a href="#" class="list-toggle group-toggle controlbox-padded" title="'+n(e.desc_group_toggle)+'">\n    <span class="fa ',e.toggle_state===e._converse.OPENED?t+=" fa-caret-down ":t+=" fa-caret-right ",t+='">\n    </span> '+n(e.label_group)+'</a>\n<ul class="items-list roster-group-contacts ',e.toggle_state===e._converse.CLOSED&&(t+=" collapsed "),t+='"></ul>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/pending_contact.html --\x3e\n",e.allow_chat_pending_contacts&&(t+='\n<a class="list-item-link open-chat w-100" href="#">\n'),t+='\n<span class="pending-contact-name" title="JID: '+n(e.jid)+'">'+n(e.display_name)+"</span> \n",e.allow_chat_pending_contacts&&(t+="</a>"),t+='\n<a class="list-item-action remove-xmpp-contact far fa-trash-alt" title="'+n(e.desc_remove)+'" href="#"></a>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/requesting_contact.html --\x3e\n",e.allow_chat_pending_contacts&&(t+='\n<a class="open-chat w-100"href="#">\n'),t+='\n<span class="req-contact-name w-100" title="JID: '+n(e.jid)+'">'+n(e.display_name)+"</span>\n",e.allow_chat_pending_contacts&&(t+="\n</a>\n"),t+='\n<a class="accept-xmpp-request list-item-action list-item-action--visible fa fa-check"\n   aria-label="'+n(e.desc_accept)+'" title="'+n(e.desc_accept)+'" href="#"></a>\n<a class="decline-xmpp-request list-item-action list-item-action--visible  fa fa-times"\n   aria-label="'+n(e.desc_decline)+'" title="'+n(e.desc_decline)+'" href="#"></a>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/roster.html --\x3e\n<div class="d-flex controlbox-padded">\n    <span class="w-100 controlbox-heading controlbox-heading--contacts">'+n(e.heading_contacts)+'</span>\n    <a class="controlbox-heading__btn sync-contacts fa fa-sync" title="'+n(e.title_sync_contacts)+'"></a>\n    ',e.allow_contact_requests&&(t+='\n        <a class="controlbox-heading__btn add-contact fa fa-user-plus"\n           title="'+n(e.title_add_contact)+'"\n           data-toggle="modal"\n           data-target="#add-contact-modal"></a>\n    '),t+='\n</div>\n\n<form class="roster-filter-form"></form>\n\n<div class="list-container roster-contacts"></div>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/roster_item.html --\x3e\n<a class="list-item-link cbox-list-item open-chat w-100 ',e.num_unread&&(t+=" unread-msgs "),t+='"\n   title="'+n(e.desc_chat)+'" href="#">\n\n    <canvas class="avatar" height="30" width="30"></canvas>\n    <span class="'+n(e.status_icon)+'" title="'+n(e.desc_status)+'"></span>\n    ',e.num_unread&&(t+=' <span class="msgs-indicator">'+n(e.num_unread)+"</span> "),t+='\n    <span class="contact-name contact-name--'+n(e.show)+" ",e.num_unread&&(t+=" unread-msgs "),t+='">'+n(e.display_name)+"</span>\n</a>\n",e.allow_contact_removal&&(t+='\n<a class="list-item-action remove-xmpp-contact far fa-trash-alt" title="'+n(e.desc_remove)+'" href="#"></a>\n'),t+="\n"}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);const r={},i={plugins:{add(e,t){if(void 0!==r[e])throw new TypeError('Error: plugin with name "'.concat(e,'" has already been ')+"registered!");r[e]=t}},initialize(e={}){i.load(e).initialize(e)},load:(e={})=>(e.assets_path&&(n.p=e.assets_path),n(418),Object.keys(r).forEach(e=>i.plugins.add(e,r[e])),i)};window.converse=i,t.default=i},function(e,t){function n(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}"function"!=typeof window.CustomEvent&&(n.prototype=window.Event.prototype,window.CustomEvent=n),String.prototype.includes||(String.prototype.includes=function(e,t){"use strict";return"number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){const n=this.toString();(void 0===t||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return-1!==r&&r===t}),String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return t=t||0,this.substr(t,e.length)===e}),String.prototype.splitOnce||(String.prototype.splitOnce=function(e){const t=this.split(e);return[t.shift(),t.join(e)]}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")})},function(e,t,n){"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},function(e,t){var n=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,r=new RegExp("[\\-\\.0-9"+n.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),i=new RegExp("^"+n.source+r.source+"*(?::"+n.source+r.source+"*)?$");function s(){}function o(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function a(e,t,n,r,i,s){for(var o,a=++t,c=0;;){var l=e.charAt(a);switch(l){case"=":if(1===c)o=e.slice(t,a),c=3;else{if(2!==c)throw new Error("attribute equal must after attrName");c=3}break;case"'":case'"':if(3===c||1===c){if(1===c&&(s.warning('attribute value must after "="'),o=e.slice(t,a)),t=a+1,!((a=e.indexOf(l,t))>0))throw new Error("attribute value no end '"+l+"' match");u=e.slice(t,a).replace(/&#?\w+;/g,i),n.add(o,u,t-1),c=5}else{if(4!=c)throw new Error('attribute value must after "="');u=e.slice(t,a).replace(/&#?\w+;/g,i),n.add(o,u,t),s.warning('attribute "'+o+'" missed start quot('+l+")!!"),t=a+1,c=5}break;case"/":switch(c){case 0:n.setTagName(e.slice(t,a));case 5:case 6:case 7:c=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return s.error("unexpected end of input"),0==c&&n.setTagName(e.slice(t,a)),a;case">":switch(c){case 0:n.setTagName(e.slice(t,a));case 5:case 6:case 7:break;case 4:case 1:"/"===(u=e.slice(t,a)).slice(-1)&&(n.closed=!0,u=u.slice(0,-1));case 2:2===c&&(u=o),4==c?(s.warning('attribute "'+u+'" missed quot(")!!'),n.add(o,u.replace(/&#?\w+;/g,i),t)):("http://www.w3.org/1999/xhtml"===r[""]&&u.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+u+'" missed value!! "'+u+'" instead!!'),n.add(u,u,t));break;case 3:throw new Error("attribute value missed!!")}return a;case"€":l=" ";default:if(l<=" ")switch(c){case 0:n.setTagName(e.slice(t,a)),c=6;break;case 1:o=e.slice(t,a),c=2;break;case 4:var u=e.slice(t,a).replace(/&#?\w+;/g,i);s.warning('attribute "'+u+'" missed quot(")!!'),n.add(o,u,t);case 5:c=6}else switch(c){case 2:n.tagName;"http://www.w3.org/1999/xhtml"===r[""]&&o.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+o+'" missed value!! "'+o+'" instead2!!'),n.add(o,o,t),t=a,c=1;break;case 5:s.warning('attribute space is required"'+o+'"!!');case 6:c=1,t=a;break;case 3:c=4,t=a;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}a++}}function c(e,t,n){for(var r=e.tagName,i=null,s=e.length;s--;){var o=e[s],a=o.qName,c=o.value;if((f=a.indexOf(":"))>0)var l=o.prefix=a.slice(0,f),u=a.slice(f+1),h="xmlns"===l&&u;else u=a,l=null,h="xmlns"===a&&"";o.localName=u,!1!==h&&(null==i&&(i={},d(n,n={})),n[h]=i[h]=c,o.uri="http://www.w3.org/2000/xmlns/",t.startPrefixMapping(h,c))}for(s=e.length;s--;){(l=(o=e[s]).prefix)&&("xml"===l&&(o.uri="http://www.w3.org/XML/1998/namespace"),"xmlns"!==l&&(o.uri=n[l||""]))}var f;(f=r.indexOf(":"))>0?(l=e.prefix=r.slice(0,f),u=e.localName=r.slice(f+1)):(l=null,u=e.localName=r);var p=e.uri=n[l||""];if(t.startElement(p,u,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(p,u,r),i)for(l in i)t.endPrefixMapping(l)}function l(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf("</"+n+">",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function u(e,t,n,r){var i=r[n];return null==i&&((i=e.lastIndexOf("</"+n+">"))<t&&(i=e.lastIndexOf("</"+n)),r[n]=i),i<t}function d(e,t){for(var n in e)t[n]=e[n]}function h(e,t,n,r){switch(e.charAt(t+2)){case"-":return"-"===e.charAt(t+3)?(i=e.indexOf("--\x3e",t+4))>t?(n.comment(e,t+4,i-t-4),i+3):(r.error("Unclosed comment"),-1):-1;default:if("CDATA["==e.substr(t+3,6)){var i=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,i-t-9),n.endCDATA(),i+3}var s=function(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;i.lastIndex=t,i.exec(e);for(;n=i.exec(e);)if(r.push(n),n[1])return r}(e,t),o=s.length;if(o>1&&/!doctype/i.test(s[0][0])){var a=s[1][0],c=o>3&&/^public$/i.test(s[2][0])&&s[3][0],l=o>4&&s[4][0],u=s[o-1];return n.startDTD(a,c&&c.replace(/^(['"])(.*?)\1$/,"$2"),l&&l.replace(/^(['"])(.*?)\1$/,"$2")),n.endDTD(),u.index+u[0].length}}return-1}function f(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(i){i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function p(e){}function g(e,t){return e.__proto__=t,e}s.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),d(t,t={}),function(e,t,n,r,i){function s(e){var t=e.slice(1,-1);return t in n?n[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function d(t){if(t>S){var n=e.substring(S,t).replace(/&#?\w+;/g,s);b&&g(S),r.characters(n,0,t-S),S=t}}function g(t,n){for(;t>=v&&(n=_.exec(e));)m=n.index,v=m+n[0].length,b.lineNumber++;b.columnNumber=t-m+1}var m=0,v=0,_=/.*(?:\r\n?|\n)|.*$/g,b=r.locator,y=[{currentNSMap:t}],w={},S=0;for(;;){try{var x=e.indexOf("<",S);if(x<0){if(!e.substr(S).match(/^\s*$/)){var E=r.doc,A=E.createTextNode(e.substr(S));E.appendChild(A),r.currentElement=A}return}switch(x>S&&d(x),e.charAt(x+1)){case"/":var C=e.indexOf(">",x+3),j=e.substring(x+2,C),T=y.pop();C<0?(j=e.substring(x+2).replace(/[\s<].*/,""),i.error("end tag name: "+j+" is not complete:"+T.tagName),C=x+1+j.length):j.match(/\s</)&&(j=j.replace(/[\s<].*/,""),i.error("end tag name: "+j+" maybe not complete"),C=x+1+j.length);var O=T.localNSMap,k=T.tagName==j;if(k||T.tagName&&T.tagName.toLowerCase()==j.toLowerCase()){if(r.endElement(T.uri,T.localName,j),O)for(var N in O)r.endPrefixMapping(N);k||i.fatalError("end tag name: "+j+" is not match the current start tagName:"+T.tagName)}else y.push(T);C++;break;case"?":b&&g(x),C=f(e,x,r);break;case"!":b&&g(x),C=h(e,x,r,i);break;default:b&&g(x);var I=new p,M=y[y.length-1].currentNSMap,R=(C=a(e,x,I,M,s,i),I.length);if(!I.closed&&u(e,C,I.tagName,w)&&(I.closed=!0,n.nbsp||i.warning("unclosed xml attribute")),b&&R){for(var D=o(b,{}),P=0;P<R;P++){var L=I[P];g(L.offset),L.locator=o(b,{})}r.locator=D,c(I,r,M)&&y.push(I),r.locator=b}else c(I,r,M)&&y.push(I);"http://www.w3.org/1999/xhtml"!==I.uri||I.closed?C++:C=l(e,C,I.tagName,s,r)}}catch(e){i.error("element parse error: "+e),C=-1}C>S?S=C:d(Math.max(x,S)+1)}}(e,t,n,r,this.errorHandler),r.endDocument()}},p.prototype={setTagName:function(e){if(!i.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},add:function(e,t,n){if(!i.test(e))throw new Error("invalid attribute:"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},g({},g.prototype)instanceof g||(g=function(e,t){function n(){}for(t in n.prototype=t,n=new n,e)n[t]=e[t];return n}),t.XMLReader=s},function(e,t,n){"use strict";function r(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e);return t<0?void 0:t}e.exports=function(e){if((e=(e=""+e).replace(/[ \t\n\f\r]/g,"")).length%4==0&&(e=e.replace(/==?$/,"")),e.length%4==1||/[^+/0-9A-Za-z]/.test(e))return null;let t="",n=0,i=0;for(let s=0;s<e.length;s++)n<<=6,n|=r(e[s]),i+=6,24===i&&(t+=String.fromCharCode((16711680&n)>>16),t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n),n=i=0);return 12===i?(n>>=4,t+=String.fromCharCode(n)):18===i&&(n>>=2,t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n)),t}},function(e,t,n){"use strict";function r(e){if(e>=0&&e<64)return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[e]}e.exports=function(e){let t;for(e=""+e,t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return null;let n="";for(t=0;t<e.length;t+=3){const i=[void 0,void 0,void 0,void 0];i[0]=e.charCodeAt(t)>>2,i[1]=(3&e.charCodeAt(t))<<4,e.length>t+1&&(i[1]|=e.charCodeAt(t+1)>>4,i[2]=(15&e.charCodeAt(t+1))<<2),e.length>t+2&&(i[2]|=e.charCodeAt(t+2)>>6,i[3]=63&e.charCodeAt(t+2));for(let e=0;e<i.length;e++)void 0===i[e]?n+="=":n+=r(i[e])}return n}},function(e,t){e.exports=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(i);++r<i;)s[r]=e[r+t];return s}},function(e,t,n){var r=n(292);e.exports=function(e){return e?(e=r(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},function(e,t,n){var r=n(17),i=n(38),s=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(s,"");var n=a.test(e);return n||c.test(e)?l(e.slice(2),n?2:8):o.test(e)?NaN:+e}},function(e,t,n){var r=n(39),i=Object.prototype,s=i.hasOwnProperty,o=i.toString,a=r?r.toStringTag:void 0;e.exports=function(e){var t=s.call(e,a),n=e[a];try{e[a]=void 0;var r=!0}catch(e){}var i=o.call(e);return r&&(t?e[a]=n:delete e[a]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r=n(73),i=n(296),s=n(308),o=n(15);e.exports=function(e,t){return(o(e)?r:i)(e,s(t))}},function(e,t,n){var r=n(297),i=n(307)(r);e.exports=i},function(e,t,n){var r=n(298),i=n(26);e.exports=function(e,t){return e&&r(e,t,i)}},function(e,t,n){var r=n(299)();e.exports=r},function(e,t){e.exports=function(e){return function(t,n,r){for(var i=-1,s=Object(t),o=r(t),a=o.length;a--;){var c=o[e?a:++i];if(!1===n(s[c],c,s))break}return t}}},function(e,t){e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},function(e,t,n){var r=n(21),i=n(19);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var r=n(21),i=n(57),s=n(19),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return s(e)&&i(e.length)&&!!o[r(e)]}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t,n){(function(e){var r=n(72),i=t&&!t.nodeType&&t,s=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=s&&s.exports===i&&r.process,a=function(){try{var e=s&&s.require&&s.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=a}).call(this,n(36)(e))},function(e,t,n){var r=n(80)(Object.keys,Object);e.exports=r},function(e,t,n){var r=n(25);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var s=n.length,o=t?s:-1,a=Object(n);(t?o--:++o<s)&&!1!==i(a[o],o,a););return n}}},function(e,t,n){var r=n(31);e.exports=function(e){return"function"==typeof e?e:r}},function(e,t,n){var r=n(310),i=n(315),s=n(88),o=i((function(e,t){r(t,s(t),e)}));e.exports=o},function(e,t,n){var r=n(81),i=n(82);e.exports=function(e,t,n,s){var o=!n;n||(n={});for(var a=-1,c=t.length;++a<c;){var l=t[a],u=s?s(n[l],e[l],l,n,e):void 0;void 0===u&&(u=e[l]),o?i(n,l,u):r(n,l,u)}return n}},function(e,t,n){var r=n(48),i=n(312),s=n(17),o=n(84),a=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,d=l.hasOwnProperty,h=RegExp("^"+u.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!s(e)||i(e))&&(r(e)?h:a).test(o(e))}},function(e,t,n){var r,i=n(313),s=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!s&&s in e}},function(e,t,n){var r=n(10)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(85),i=n(319);e.exports=function(e){return r((function(t,n){var r=-1,s=n.length,o=s>1?n[s-1]:void 0,a=s>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(s--,o):void 0,a&&i(n[0],n[1],a)&&(o=s<3?void 0:o,s=1),t=Object(t);++r<s;){var c=n[r];c&&e(t,c,r,o)}return t}))}},function(e,t,n){var r=n(58),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var s=arguments,o=-1,a=i(s.length-t,0),c=Array(a);++o<a;)c[o]=s[t+o];o=-1;for(var l=Array(t+1);++o<t;)l[o]=s[o];return l[t]=n(c),r(e,this,l)}}},function(e,t,n){var r=n(318),i=n(83),s=n(31),o=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:s;e.exports=o},function(e,t){e.exports=function(e){return function(){return e}}},function(e,t,n){var r=n(40),i=n(25),s=n(30),o=n(17);e.exports=function(e,t,n){if(!o(n))return!1;var a=typeof t;return!!("number"==a?i(n)&&s(t,n.length):"string"==a&&t in n)&&r(n[t],e)}},function(e,t,n){var r=n(17),i=n(79),s=n(321),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return s(e);var t=i(e),n=[];for(var a in e)("constructor"!=a||!t&&o.call(e,a))&&n.push(a);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t){e.exports=function(e,t,n,r){for(var i=e.length,s=n+(r?1:-1);r?s--:++s<i;)if(t(e[s],s,e))return s;return-1}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},function(e,t,n){var r=n(59);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},function(e,t,n){var r=n(91),i=n(327),s=n(328),o=n(94),a=n(341),c=n(98),l=n(342),u=n(101),d=n(102),h=n(56),f=Math.max;e.exports=function(e,t,n,p,g,m,v,_){var b=2&t;if(!b&&"function"!=typeof e)throw new TypeError("Expected a function");var y=p?p.length:0;if(y||(t&=-97,p=g=void 0),v=void 0===v?v:f(h(v),0),_=void 0===_?_:h(_),y-=g?g.length:0,64&t){var w=p,S=g;p=g=void 0}var x=b?void 0:c(e),E=[e,t,n,p,g,w,S,m,v,_];if(x&&l(E,x),e=E[0],t=E[1],n=E[2],p=E[3],g=E[4],!(_=E[9]=void 0===E[9]?b?0:e.length:f(E[9]-y,0))&&24&t&&(t&=-25),t&&1!=t)A=8==t||16==t?s(e,t,_):32!=t&&33!=t||g.length?o.apply(void 0,E):a(e,t,n,p);else var A=i(e,t,n);return d((x?r:u)(A,E),e,t)}},function(e,t,n){var r=n(41),i=n(10);e.exports=function(e,t,n){var s=1&t,o=r(e);return function t(){var r=this&&this!==i&&this instanceof t?o:e;return r.apply(s?n:this,arguments)}}},function(e,t,n){var r=n(58),i=n(41),s=n(94),o=n(97),a=n(63),c=n(42),l=n(10);e.exports=function(e,t,n){var u=i(e);return function i(){for(var d=arguments.length,h=Array(d),f=d,p=a(i);f--;)h[f]=arguments[f];var g=d<3&&h[0]!==p&&h[d-1]!==p?[]:c(h,p);if((d-=g.length)<n)return o(e,t,s,i.placeholder,void 0,h,g,void 0,void 0,n-d);var m=this&&this!==l&&this instanceof i?u:e;return r(m,this,h)}}},function(e,t){e.exports=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}},function(e,t,n){var r=n(61),i=n(98),s=n(332),o=n(334);e.exports=function(e){var t=s(e),n=o[t];if("function"!=typeof n||!(t in r.prototype))return!1;if(e===n)return!0;var a=i(n);return!!a&&e===a[0]}},function(e,t){e.exports=function(){}},function(e,t,n){var r=n(333),i=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+"",n=r[t],s=i.call(r,t)?n.length:0;s--;){var o=n[s],a=o.func;if(null==a||a==e)return o.name}return t}},function(e,t){e.exports={}},function(e,t,n){var r=n(61),i=n(99),s=n(62),o=n(15),a=n(19),c=n(335),l=Object.prototype.hasOwnProperty;function u(e){if(a(e)&&!o(e)&&!(e instanceof r)){if(e instanceof i)return e;if(l.call(e,"__wrapped__"))return c(e)}return new i(e)}u.prototype=s.prototype,u.prototype.constructor=u,e.exports=u},function(e,t,n){var r=n(61),i=n(99),s=n(100);e.exports=function(e){if(e instanceof r)return e.clone();var t=new i(e.__wrapped__,e.__chain__);return t.__actions__=s(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},function(e,t){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;e.exports=function(e){var t=e.match(n);return t?t[1].split(r):[]}},function(e,t){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;e.exports=function(e,t){var r=t.length;if(!r)return e;var i=r-1;return t[i]=(r>1?"& ":"")+t[i],t=t.join(r>2?", ":" "),e.replace(n,"{\n/* [wrapped with "+t+"] */\n")}},function(e,t,n){var r=n(73),i=n(339),s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];e.exports=function(e,t){return r(s,(function(n){var r="_."+n[0];t&n[1]&&!i(e,r)&&e.push(r)})),e.sort()}},function(e,t,n){var r=n(89);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(100),i=n(30),s=Math.min;e.exports=function(e,t){for(var n=e.length,o=s(t.length,n),a=r(e);o--;){var c=t[o];e[o]=i(c,n)?a[c]:void 0}return e}},function(e,t,n){var r=n(58),i=n(41),s=n(10);e.exports=function(e,t,n,o){var a=1&t,c=i(e);return function t(){for(var i=-1,l=arguments.length,u=-1,d=o.length,h=Array(d+l),f=this&&this!==s&&this instanceof t?c:e;++u<d;)h[u]=o[u];for(;l--;)h[u++]=arguments[++i];return r(f,a?n:this,h)}}},function(e,t,n){var r=n(95),i=n(96),s=n(42),o=Math.min;e.exports=function(e,t){var n=e[1],a=t[1],c=n|a,l=c<131,u=128==a&&8==n||128==a&&256==n&&e[7].length<=t[8]||384==a&&t[7].length<=t[8]&&8==n;if(!l&&!u)return e;1&a&&(e[2]=t[2],c|=1&n?0:4);var d=t[3];if(d){var h=e[3];e[3]=h?r(h,d,t[4]):d,e[4]=h?s(e[3],"__lodash_placeholder__"):t[4]}return(d=t[5])&&(h=e[5],e[5]=h?i(h,d,t[6]):d,e[6]=h?s(e[5],"__lodash_placeholder__"):t[6]),(d=t[7])&&(e[7]=d),128&a&&(e[8]=null==e[8]?t[8]:o(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=c,e}},function(e,t,n){var r=n(344),i=n(385),s=n(31),o=n(15),a=n(394);e.exports=function(e){return"function"==typeof e?e:null==e?s:"object"==typeof e?o(e)?i(e[0],e[1]):r(e):a(e)}},function(e,t,n){var r=n(345),i=n(384),s=n(112);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?s(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(103),i=n(104);e.exports=function(e,t,n,s){var o=n.length,a=o,c=!s;if(null==e)return!a;for(e=Object(e);o--;){var l=n[o];if(c&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<a;){var u=(l=n[o])[0],d=e[u],h=l[1];if(c&&l[2]){if(void 0===d&&!(u in e))return!1}else{var f=new r;if(s)var p=s(d,h,u,e,t,f);if(!(void 0===p?i(h,d,3,s,f):p))return!1}}return!0}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(44),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},function(e,t,n){var r=n(44);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(44);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(44);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(43);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(43),i=n(64),s=n(65);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new s(o)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(357),i=n(43),s=n(64);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(s||i),string:new r}}},function(e,t,n){var r=n(358),i=n(359),s=n(360),o=n(361),a=n(362);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=s,c.prototype.has=o,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(45);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(45),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(45),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(45);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t,n){var r=n(46);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(46);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(46);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(46);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(103),i=n(105),s=n(374),o=n(378),a=n(110),c=n(15),l=n(76),u=n(77),d="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,f,p,g){var m=c(e),v=c(t),_=m?"[object Array]":a(e),b=v?"[object Array]":a(t),y=(_="[object Arguments]"==_?d:_)==d,w=(b="[object Arguments]"==b?d:b)==d,S=_==b;if(S&&l(e)){if(!l(t))return!1;m=!0,y=!1}if(S&&!y)return g||(g=new r),m||u(e)?i(e,t,n,f,p,g):s(e,t,_,n,f,p,g);if(!(1&n)){var x=y&&h.call(e,"__wrapped__"),E=w&&h.call(t,"__wrapped__");if(x||E){var A=x?e.value():e,C=E?t.value():t;return g||(g=new r),p(A,C,n,f,g)}}return!!S&&(g||(g=new r),o(e,t,n,f,p,g))}},function(e,t,n){var r=n(65),i=n(370),s=n(371);function o(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}o.prototype.add=o.prototype.push=i,o.prototype.has=s,e.exports=o},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t,n){var r=n(39),i=n(375),s=n(40),o=n(105),a=n(376),c=n(377),l=r?r.prototype:void 0,u=l?l.valueOf:void 0;e.exports=function(e,t,n,r,l,d,h){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return s(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var f=a;case"[object Set]":var p=1&r;if(f||(f=c),e.size!=t.size&&!p)return!1;var g=h.get(e);if(g)return g==t;r|=2,h.set(e,t);var m=o(f(e),f(t),r,l,d,h);return h.delete(e),m;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},function(e,t,n){var r=n(10).Uint8Array;e.exports=r},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},function(e,t,n){var r=n(379),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,s,o,a){var c=1&n,l=r(e),u=l.length;if(u!=r(t).length&&!c)return!1;for(var d=u;d--;){var h=l[d];if(!(c?h in t:i.call(t,h)))return!1}var f=a.get(e),p=a.get(t);if(f&&p)return f==t&&p==e;var g=!0;a.set(e,t),a.set(t,e);for(var m=c;++d<u;){var v=e[h=l[d]],_=t[h];if(s)var b=c?s(_,v,h,t,e,a):s(v,_,h,e,t,a);if(!(void 0===b?v===_||o(v,_,n,s,a):b)){g=!1;break}m||(m="constructor"==h)}if(g&&!m){var y=e.constructor,w=t.constructor;y==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof w&&w instanceof w||(g=!1)}return a.delete(e),a.delete(t),g}},function(e,t,n){var r=n(106),i=n(108),s=n(26);e.exports=function(e){return r(e,s,i)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,s=[];++n<r;){var o=e[n];t(o,n,e)&&(s[i++]=o)}return s}},function(e,t,n){var r=n(22)(n(10),"DataView");e.exports=r},function(e,t,n){var r=n(22)(n(10),"Promise");e.exports=r},function(e,t,n){var r=n(22)(n(10),"Set");e.exports=r},function(e,t,n){var r=n(111),i=n(26);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var s=t[n],o=e[s];t[n]=[s,o,r(o)]}return t}},function(e,t,n){var r=n(104),i=n(386),s=n(391),o=n(67),a=n(111),c=n(112),l=n(32);e.exports=function(e,t){return o(e)&&a(t)?c(l(e),t):function(n){var o=i(n,e);return void 0===o&&o===t?s(n,e):r(t,o,3)}}},function(e,t,n){var r=n(66);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(388),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(s,"$1"):n||e)})),t}));e.exports=o},function(e,t,n){var r=n(389);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},function(e,t,n){var r=n(65);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],s=n.cache;if(s.has(i))return s.get(i);var o=e.apply(this,r);return n.cache=s.set(i,o)||s,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){var r=n(39),i=n(59),s=n(15),o=n(38),a=r?r.prototype:void 0,c=a?a.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(s(t))return i(t,e)+"";if(o(t))return c?c.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t,n){var r=n(392),i=n(393);e.exports=function(e,t){return null!=e&&i(e,t,r)}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var r=n(47),i=n(75),s=n(15),o=n(30),a=n(57),c=n(32);e.exports=function(e,t,n){for(var l=-1,u=(t=r(t,e)).length,d=!1;++l<u;){var h=c(t[l]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++l!=u?d:!!(u=null==e?0:e.length)&&a(u)&&o(h,u)&&(s(e)||i(e))}},function(e,t,n){var r=n(114),i=n(395),s=n(67),o=n(32);e.exports=function(e){return s(e)?r(o(e)):i(e)}},function(e,t,n){var r=n(66);e.exports=function(e){return function(t){return r(t,e)}}},function(e,t,n){var r=n(66),i=n(397),s=n(47);e.exports=function(e,t,n){for(var o=-1,a=t.length,c={};++o<a;){var l=t[o],u=r(e,l);n(u,l)&&i(c,s(l,e),u)}return c}},function(e,t,n){var r=n(81),i=n(47),s=n(30),o=n(17),a=n(32);e.exports=function(e,t,n,c){if(!o(e))return e;for(var l=-1,u=(t=i(t,e)).length,d=u-1,h=e;null!=h&&++l<u;){var f=a(t[l]),p=n;if("__proto__"===f||"constructor"===f||"prototype"===f)return e;if(l!=d){var g=h[f];void 0===(p=c?c(g,f,h):void 0)&&(p=o(g)?g:s(t[l+1])?[]:{})}r(h,f,p),h=h[f]}return e}},function(e,t,n){var r=n(106),i=n(399),s=n(88);e.exports=function(e){return r(e,s,i)}},function(e,t,n){var r=n(107),i=n(400),s=n(108),o=n(109),a=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,s(e)),e=i(e);return t}:o;e.exports=a},function(e,t,n){var r=n(80)(Object.getPrototypeOf,Object);e.exports=r},function(e,t,n){var r=n(402),i=n(403),s=n(404);e.exports=function(e){return i(e)?s(e):r(e)}},function(e,t,n){var r=n(114)("length");e.exports=r},function(e,t){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},function(e,t){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",s="[^\\ud800-\\udfff]",o="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",c="(?:"+r+"|"+i+")"+"?",l="[\\ufe0e\\ufe0f]?"+c+("(?:\\u200d(?:"+[s,o,a].join("|")+")[\\ufe0e\\ufe0f]?"+c+")*"),u="(?:"+[s+r+"?",r,o,a,n].join("|")+")",d=RegExp(i+"(?="+i+")|"+u+l,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},function(e,t,n){"use strict";n(54);var r=n(0);const i={};i.debug=r.e.LogLevel.DEBUG,i.info=r.e.LogLevel.INFO,i.warn=r.e.LogLevel.WARN,i.error=r.e.LogLevel.ERROR,i.fatal=r.e.LogLevel.FATAL,r.e.WorkerWebsocket=class extends r.e.Websocket{constructor(e){super(e),this._conn=e,this.worker=new SharedWorker(this._conn.options.worker,"Strophe XMPP Connection"),this.worker.onerror=e=>{var t;null===(t=console)||void 0===t||t.error(e),r.e.log(r.e.LogLevel.ERROR,"Shared Worker Error: ".concat(e))}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===r.e.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(r.e.Status.ATTACHED)):e===r.e.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(r.e.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=Object(r.a)("close",{xmlns:r.e.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=r.e.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(r.e.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(r.e.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(r.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):r.e.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){r.e.log(r.e.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];r.e.log(i[e],n)}else r.e.log(r.e.LogLevel.ERROR,"Found unhandled service worker message: ".concat(t))}}},function(e,t,n){var r={"./af/LC_MESSAGES/converse.po":[419,139],"./ar/LC_MESSAGES/converse.po":[420,140],"./bg/LC_MESSAGES/converse.po":[421,141],"./ca/LC_MESSAGES/converse.po":[422,142],"./cs/LC_MESSAGES/converse.po":[423,143],"./da/LC_MESSAGES/converse.po":[424,144],"./de/LC_MESSAGES/converse.po":[425,147],"./eo/LC_MESSAGES/converse.po":[426,148],"./es/LC_MESSAGES/converse.po":[427,149],"./eu/LC_MESSAGES/converse.po":[428,150],"./fi/LC_MESSAGES/converse.po":[429,151],"./fr/LC_MESSAGES/converse.po":[430,152],"./gl/LC_MESSAGES/converse.po":[431,153],"./he/LC_MESSAGES/converse.po":[432,154],"./hi/LC_MESSAGES/converse.po":[433,155],"./hu/LC_MESSAGES/converse.po":[434,156],"./id/LC_MESSAGES/converse.po":[435,157],"./it/LC_MESSAGES/converse.po":[436,158],"./ja/LC_MESSAGES/converse.po":[437,159],"./lt/LC_MESSAGES/converse.po":[438,160],"./mr/LC_MESSAGES/converse.po":[439,161],"./nb/LC_MESSAGES/converse.po":[440,162],"./nl/LC_MESSAGES/converse.po":[441,163],"./nl_BE/LC_MESSAGES/converse.po":[442,164],"./oc/LC_MESSAGES/converse.po":[443,165],"./pl/LC_MESSAGES/converse.po":[444,166],"./pt/LC_MESSAGES/converse.po":[445,167],"./pt_BR/LC_MESSAGES/converse.po":[446,168],"./ro/LC_MESSAGES/converse.po":[447,169],"./ru/LC_MESSAGES/converse.po":[448,170],"./th/LC_MESSAGES/converse.po":[449,171],"./tr/LC_MESSAGES/converse.po":[450,172],"./uk/LC_MESSAGES/converse.po":[451,173],"./vi/LC_MESSAGES/converse.po":[452,174],"./zh_CN/LC_MESSAGES/converse.po":[453,175],"./zh_TW/LC_MESSAGES/converse.po":[454,176]};function i(e){if(!n.o(r,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],i=t[0];return n.e(t[1]).then((function(){return n.t(i,3)}))}i.keys=function(){return Object.keys(r)},i.id=406,e.exports=i},function(e,t,n){var r={"./af":[147,0],"./af.js":[147,0],"./ar":[154,1],"./ar-dz":[148,2],"./ar-dz.js":[148,2],"./ar-kw":[149,3],"./ar-kw.js":[149,3],"./ar-ly":[150,4],"./ar-ly.js":[150,4],"./ar-ma":[151,5],"./ar-ma.js":[151,5],"./ar-sa":[152,6],"./ar-sa.js":[152,6],"./ar-tn":[153,7],"./ar-tn.js":[153,7],"./ar.js":[154,1],"./az":[155,8],"./az.js":[155,8],"./be":[156,9],"./be.js":[156,9],"./bg":[157,10],"./bg.js":[157,10],"./bi":[158,11],"./bi.js":[158,11],"./bm":[159,12],"./bm.js":[159,12],"./bn":[160,13],"./bn.js":[160,13],"./bo":[161,14],"./bo.js":[161,14],"./br":[162,15],"./br.js":[162,15],"./bs":[163,16],"./bs.js":[163,16],"./ca":[164,17],"./ca.js":[164,17],"./cs":[165,18],"./cs.js":[165,18],"./cv":[166,19],"./cv.js":[166,19],"./cy":[167,20],"./cy.js":[167,20],"./da":[168,21],"./da.js":[168,21],"./de":[171,22],"./de-at":[169,23],"./de-at.js":[169,23],"./de-ch":[170,24],"./de-ch.js":[170,24],"./de.js":[171,22],"./dv":[172,25],"./dv.js":[172,25],"./el":[173,26],"./el.js":[173,26],"./en":[183,27],"./en-SG":[174,28],"./en-SG.js":[174,28],"./en-au":[175,29],"./en-au.js":[175,29],"./en-ca":[176,30],"./en-ca.js":[176,30],"./en-gb":[177,31],"./en-gb.js":[177,31],"./en-ie":[178,32],"./en-ie.js":[178,32],"./en-il":[179,33],"./en-il.js":[179,33],"./en-in":[180,34],"./en-in.js":[180,34],"./en-nz":[181,35],"./en-nz.js":[181,35],"./en-tt":[182,36],"./en-tt.js":[182,36],"./en.js":[183,27],"./eo":[184,37],"./eo.js":[184,37],"./es":[188,38],"./es-do":[185,39],"./es-do.js":[185,39],"./es-pr":[186,40],"./es-pr.js":[186,40],"./es-us":[187,41],"./es-us.js":[187,41],"./es.js":[188,38],"./et":[189,42],"./et.js":[189,42],"./eu":[190,43],"./eu.js":[190,43],"./fa":[191,44],"./fa.js":[191,44],"./fi":[192,45],"./fi.js":[192,45],"./fo":[193,46],"./fo.js":[193,46],"./fr":[196,47],"./fr-ca":[194,48],"./fr-ca.js":[194,48],"./fr-ch":[195,49],"./fr-ch.js":[195,49],"./fr.js":[196,47],"./fy":[197,50],"./fy.js":[197,50],"./ga":[198,51],"./ga.js":[198,51],"./gd":[199,52],"./gd.js":[199,52],"./gl":[200,53],"./gl.js":[200,53],"./gom-latn":[201,54],"./gom-latn.js":[201,54],"./gu":[202,55],"./gu.js":[202,55],"./he":[203,56],"./he.js":[203,56],"./hi":[204,57],"./hi.js":[204,57],"./hr":[205,58],"./hr.js":[205,58],"./ht":[206,59],"./ht.js":[206,59],"./hu":[207,60],"./hu.js":[207,60],"./hy-am":[208,61],"./hy-am.js":[208,61],"./id":[209,62],"./id.js":[209,62],"./index.d.ts":[455,145],"./is":[210,63],"./is.js":[210,63],"./it":[212,64],"./it-ch":[211,65],"./it-ch.js":[211,65],"./it.js":[212,64],"./ja":[213,66],"./ja.js":[213,66],"./jv":[214,67],"./jv.js":[214,67],"./ka":[215,68],"./ka.js":[215,68],"./kk":[216,69],"./kk.js":[216,69],"./km":[217,70],"./km.js":[217,70],"./kn":[218,71],"./kn.js":[218,71],"./ko":[219,72],"./ko.js":[219,72],"./ku":[220,73],"./ku.js":[220,73],"./ky":[221,74],"./ky.js":[221,74],"./lb":[222,75],"./lb.js":[222,75],"./lo":[223,76],"./lo.js":[223,76],"./lt":[224,77],"./lt.js":[224,77],"./lv":[225,78],"./lv.js":[225,78],"./me":[226,79],"./me.js":[226,79],"./mi":[227,80],"./mi.js":[227,80],"./mk":[228,81],"./mk.js":[228,81],"./ml":[229,82],"./ml.js":[229,82],"./mn":[230,83],"./mn.js":[230,83],"./mr":[231,84],"./mr.js":[231,84],"./ms":[233,85],"./ms-my":[232,86],"./ms-my.js":[232,86],"./ms.js":[233,85],"./mt":[234,87],"./mt.js":[234,87],"./my":[235,88],"./my.js":[235,88],"./nb":[236,89],"./nb.js":[236,89],"./ne":[237,90],"./ne.js":[237,90],"./nl":[239,91],"./nl-be":[238,92],"./nl-be.js":[238,92],"./nl.js":[239,91],"./nn":[240,93],"./nn.js":[240,93],"./oc-lnc":[241,94],"./oc-lnc.js":[241,94],"./pa-in":[242,95],"./pa-in.js":[242,95],"./pl":[243,96],"./pl.js":[243,96],"./pt":[245,97],"./pt-br":[244,98],"./pt-br.js":[244,98],"./pt.js":[245,97],"./ro":[246,99],"./ro.js":[246,99],"./ru":[247,100],"./ru.js":[247,100],"./rw":[248,101],"./rw.js":[248,101],"./sd":[249,102],"./sd.js":[249,102],"./se":[250,103],"./se.js":[250,103],"./si":[251,104],"./si.js":[251,104],"./sk":[252,105],"./sk.js":[252,105],"./sl":[253,106],"./sl.js":[253,106],"./sq":[254,107],"./sq.js":[254,107],"./sr":[256,108],"./sr-cyrl":[255,109],"./sr-cyrl.js":[255,109],"./sr.js":[256,108],"./ss":[257,110],"./ss.js":[257,110],"./sv":[258,111],"./sv.js":[258,111],"./sw":[259,112],"./sw.js":[259,112],"./ta":[260,113],"./ta.js":[260,113],"./te":[261,114],"./te.js":[261,114],"./tet":[262,115],"./tet.js":[262,115],"./tg":[263,116],"./tg.js":[263,116],"./th":[264,117],"./th.js":[264,117],"./tk":[265,118],"./tk.js":[265,118],"./tl-ph":[266,119],"./tl-ph.js":[266,119],"./tlh":[267,120],"./tlh.js":[267,120],"./tr":[268,121],"./tr.js":[268,121],"./types.d.ts":[456,146],"./tzl":[269,122],"./tzl.js":[269,122],"./tzm":[271,123],"./tzm-latn":[270,124],"./tzm-latn.js":[270,124],"./tzm.js":[271,123],"./ug-cn":[272,125],"./ug-cn.js":[272,125],"./uk":[273,126],"./uk.js":[273,126],"./ur":[274,127],"./ur.js":[274,127],"./uz":[276,128],"./uz-latn":[275,129],"./uz-latn.js":[275,129],"./uz.js":[276,128],"./vi":[277,130],"./vi.js":[277,130],"./x-pseudo":[278,131],"./x-pseudo.js":[278,131],"./yo":[279,132],"./yo.js":[279,132],"./zh":[283,133],"./zh-cn":[280,134],"./zh-cn.js":[280,134],"./zh-hk":[281,135],"./zh-hk.js":[281,135],"./zh-tw":[282,136],"./zh-tw.js":[282,136],"./zh.js":[283,133]};function i(e){if(!n.o(r,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],i=t[0];return n.e(t[1]).then((function(){return n.t(i,7)}))}i.keys=function(){return Object.keys(r)},i.id=407,e.exports=i},function(e,t,n){var r=n(409)({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});e.exports=r},function(e,t){e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){"use strict";var r=n(14),i=n(1);i.c.Request=class{constructor(e,t,n,r){this.id=++i.c._requestId,this.xmlData=e,this.data=i.c.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=r||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;return(new Date-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;return(new Date-this.dead)/1e3},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw i.c.error("invalid response received"),i.c.error("responseText: "+this.xhr.responseText),i.c.error("responseXML: "+i.c.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(i.c.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r.a).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){i.c.error("invalid response received: "+e.querySelector("parsererror").textContent),i.c.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=i.c.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},i.c.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=Object(i.a)("body",{rid:this.rid++,xmlns:i.c.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const r=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":i.c.NS.BOSH});n&&r.attrs({route:n});const s=this._conn._connect_cb;this._requests.push(new i.c.Request(r.tree(),this._onRequestStateChange.bind(this,s.bind(this._conn)),r.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,r,s,o,a){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=r,this._conn.domain=i.c.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=s||this.wait,this.hold=o||this.hold,this.window=a||this.window,this._conn._changeConnectStatus(i.c.Status.ATTACHED,null)}_restore(e,t,n,r,s){const o=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=o&&o.rid&&o.sid&&o.jid&&(null==e||i.c.getBareJidFromJid(o.jid)===i.c.getBareJidFromJid(e)||null===i.c.getNodeFromJid(e)&&i.c.getDomainFromJid(o.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(o.jid,o.sid,o.rid,t,n,r,s)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");i.c.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(i.c.Status.CONNFAIL,t)):this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),i.c.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const r=e.getAttribute("hold");r&&(this.hold=parseInt(r,10));const s=e.getAttribute("wait");s&&(this.wait=parseInt(s,10));const o=e.getAttribute("inactivity");o&&(this.inactivity=parseInt(o,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),r=this._conn.protocolErrorHandlers.HTTP[n];r&&r.call(this,n)}_hitError(e){this.errors++,i.c.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){i.c.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new i.c.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(i.c.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n<e.length;n++)null!==e[n]&&("restart"===e[n]?t.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":i.c.NS.BOSH}):t.cnode(e[n]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new i.c.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}if(this._requests.length>0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(i.c.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(i.c.TIMEOUT*this.wait)&&(i.c.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(i.c.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){i.c.error("Caught an error while retrieving a request's status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(i.c.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const r=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&r>=400)return this._hitError(r),void this._callProtocolErrorHandlers(n);const s=r>0&&r<500,o=n.sends>this._conn.maxRetries;if((s||o)&&(this._removeRequest(n),i.c.debug("request id "+n.id+" should now be removed")),200===r){const e=this._requests[0]===n;(this._requests[1]===n||e&&this._requests.length>0&&this._requests[0].age()>Math.floor(i.c.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),i.c.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0}else 0===r||r>=400&&r<600||r>=12e3?(i.c.error("request id "+n.id+"."+n.sends+" error "+r+" happened"),this._hitError(r),this._callProtocolErrorHandlers(n),r>=400&&r<500&&(this._conn._changeConnectStatus(i.c.Status.DISCONNECTING,null),this._conn._doDisconnect())):i.c.error("request id "+n.id+"."+n.sends+" error "+r+" happened");s||o?o&&!this._conn.connected&&this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const r=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const s=n.age(),o=!isNaN(s)&&s>Math.floor(i.c.TIMEOUT*this.wait),a=null!==n.dead&&n.timeDead()>Math.floor(i.c.SECONDARY_TIMEOUT*this.wait),c=4===n.xhr.readyState&&(r<1||r>=500);if((o||a||c)&&(a&&i.c.error("Request ".concat(this._requests[t].id," timed out (secondary), restarting")),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new i.c.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){i.c.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return i.c.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(i.c.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(i.c.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==i.c.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==i.c.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else i.c.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){i.c.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){i.c.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new i.c.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(()=>this._conn._onIdle(),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?i.c.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):i.c.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},i.c.Bosh.prototype.strip=null},function(e,t,n){"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},function(e,t,n){"use strict";n(119);var r=n(1);const i={};i.debug=r.c.LogLevel.DEBUG,i.info=r.c.LogLevel.INFO,i.warn=r.c.LogLevel.WARN,i.error=r.c.LogLevel.ERROR,i.fatal=r.c.LogLevel.FATAL,r.c.WorkerWebsocket=class extends r.c.Websocket{constructor(e){super(e),this._conn=e,this.worker=new SharedWorker(this._conn.options.worker,"Strophe XMPP Connection"),this.worker.onerror=e=>{var t;null===(t=console)||void 0===t||t.error(e),r.c.log(r.c.LogLevel.ERROR,"Shared Worker Error: ".concat(e))}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===r.c.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(r.c.Status.ATTACHED)):e===r.c.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(r.c.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=Object(r.a)("close",{xmlns:r.c.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=r.c.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(r.c.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(r.c.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(r.c.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):r.c.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){r.c.log(r.c.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];r.c.log(i[e],n)}else r.c.log(r.c.LogLevel.ERROR,"Found unhandled service worker message: ".concat(t))}}},function(e,t,n){var r=n(414);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(416)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(t=n(415)(!0)).push([e.i,"","",{version:3,sources:[],names:[],mappings:"",file:"converse.scss"}]),e.exports=t},function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",r=e[3];if(!r)return n;if(t&&"function"==typeof btoa){var i=(o=r,a=btoa(unescape(encodeURIComponent(JSON.stringify(o)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a),"/*# ".concat(c," */")),s=r.sources.map((function(e){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(e," */")}));return[n].concat(s).concat([i]).join("\n")}var o,a,c;return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var s=0;s<this.length;s++){var o=this[s][0];null!=o&&(i[o]=!0)}for(var a=0;a<e.length;a++){var c=[].concat(e[a]);r&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},function(e,t,n){var r,i,s={},o=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===i&&(i=r.apply(this,arguments)),i}),a=function(e,t){return t?t.querySelector(e):document.querySelector(e)},c=function(e){var t={};return function(e,n){if("function"==typeof e)return e();if(void 0===t[e]){var r=a.call(this,e,n);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}}(),l=null,u=0,d=[],h=n(417);function f(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=s[r.id];if(i){i.refs++;for(var o=0;o<i.parts.length;o++)i.parts[o](r.parts[o]);for(;o<r.parts.length;o++)i.parts.push(b(r.parts[o],t))}else{var a=[];for(o=0;o<r.parts.length;o++)a.push(b(r.parts[o],t));s[r.id]={id:r.id,refs:1,parts:a}}}}function p(e,t){for(var n=[],r={},i=0;i<e.length;i++){var s=e[i],o=t.base?s[0]+t.base:s[0],a={css:s[1],media:s[2],sourceMap:s[3]};r[o]?r[o].parts.push(a):n.push(r[o]={id:o,parts:[a]})}return n}function g(e,t){var n=c(e.insertInto);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var r=d[d.length-1];if("top"===e.insertAt)r?r.nextSibling?n.insertBefore(t,r.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),d.push(t);else if("bottom"===e.insertAt)n.appendChild(t);else{if("object"!=typeof e.insertAt||!e.insertAt.before)throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");var i=c(e.insertAt.before,n);n.insertBefore(t,i)}}function m(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=d.indexOf(e);t>=0&&d.splice(t,1)}function v(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var r=function(){0;return n.nc}();r&&(e.attrs.nonce=r)}return _(t,e.attrs),g(e,t),t}function _(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function b(e,t){var n,r,i,s;if(t.transform&&e.css){if(!(s="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=s}if(t.singleton){var o=u++;n=l||(l=v(t)),r=S.bind(null,n,o,!1),i=S.bind(null,n,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",_(t,e.attrs),g(e,t),t}(t),r=E.bind(null,n,t),i=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=v(t),r=x.bind(null,n),i=function(){m(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=p(e,t);return f(n,t),function(e){for(var r=[],i=0;i<n.length;i++){var o=n[i];(a=s[o.id]).refs--,r.push(a)}e&&f(p(e,t),t);for(i=0;i<r.length;i++){var a;if(0===(a=r[i]).refs){for(var c=0;c<a.parts.length;c++)a.parts[c]();delete s[a.id]}}}};var y,w=(y=[],function(e,t){return y[e]=t,y.filter(Boolean).join("\n")});function S(e,t,n,r){var i=n?"":r.css;if(e.styleSheet)e.styleSheet.cssText=w(t,i);else{var s=document.createTextNode(i),o=e.childNodes;o[t]&&e.removeChild(o[t]),o.length?e.insertBefore(s,o[t]):e.appendChild(s)}}function x(e,t){var n=t.css,r=t.media;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function E(e,t,n){var r=n.css,i=n.sourceMap,s=void 0===t.convertToAbsoluteUrls&&i;(t.convertToAbsoluteUrls||s)&&(r=h(r)),i&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */");var o=new Blob([r],{type:"text/css"}),a=e.href;e.href=URL.createObjectURL(o),a&&URL.revokeObjectURL(a)}},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var i,s=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(s)?e:(i=0===s.indexOf("//")?s:0===s.indexOf("/")?n+s:r+s.replace(/^\.\//,""),"url("+JSON.stringify(i)+")")}))}},function(e,t,n){"use strict";n.r(t);var r=n(52),i=n.n(r),s=(n(285),n(54),n(23));var o=function(){this.__data__=[],this.size=0};var a=function(e,t){return e===t||e!=e&&t!=t};var c=function(e,t){for(var n=e.length;n--;)if(a(e[n][0],t))return n;return-1},l=Array.prototype.splice;var u=function(e){var t=this.__data__,n=c(t,e);return!(n<0)&&(n==t.length-1?t.pop():l.call(t,n,1),--this.size,!0)};var d=function(e){var t=this.__data__,n=c(t,e);return n<0?void 0:t[n][1]};var h=function(e){return c(this.__data__,e)>-1};var f=function(e,t){var n=this.__data__,r=c(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function p(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}p.prototype.clear=o,p.prototype.delete=u,p.prototype.get=d,p.prototype.has=h,p.prototype.set=f;var g=p;var m=function(){this.__data__=new g,this.size=0};var v=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var _=function(e){return this.__data__.get(e)};var b=function(e){return this.__data__.has(e)},y=n(5),w=y.a.Symbol,S=Object.prototype,x=S.hasOwnProperty,E=S.toString,A=w?w.toStringTag:void 0;var C=function(e){var t=x.call(e,A),n=e[A];try{e[A]=void 0;var r=!0}catch(e){}var i=E.call(e);return r&&(t?e[A]=n:delete e[A]),i},j=Object.prototype.toString;var T=function(e){return j.call(e)},O=w?w.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":O&&O in Object(e)?C(e):T(e)};var N=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var I,M=function(e){if(!N(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},R=y.a["__core-js_shared__"],D=(I=/[^.]+$/.exec(R&&R.keys&&R.keys.IE_PROTO||""))?"Symbol(src)_1."+I:"";var P=function(e){return!!D&&D in e},L=Function.prototype.toString;var z=function(e){if(null!=e){try{return L.call(e)}catch(e){}try{return e+""}catch(e){}}return""},F=/^\[object .+?Constructor\]$/,B=Function.prototype,q=Object.prototype,H=B.toString,U=q.hasOwnProperty,$=RegExp("^"+H.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var W=function(e){return!(!N(e)||P(e))&&(M(e)?$:F).test(z(e))};var V=function(e,t){return null==e?void 0:e[t]};var G=function(e,t){var n=V(e,t);return W(n)?n:void 0},J=G(y.a,"Map"),X=G(Object,"create");var Q=function(){this.__data__=X?X(null):{},this.size=0};var Y=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K=Object.prototype.hasOwnProperty;var Z=function(e){var t=this.__data__;if(X){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return K.call(t,e)?t[e]:void 0},ee=Object.prototype.hasOwnProperty;var te=function(e){var t=this.__data__;return X?void 0!==t[e]:ee.call(t,e)};var ne=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=X&&void 0===t?"__lodash_hash_undefined__":t,this};function re(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}re.prototype.clear=Q,re.prototype.delete=Y,re.prototype.get=Z,re.prototype.has=te,re.prototype.set=ne;var ie=re;var se=function(){this.size=0,this.__data__={hash:new ie,map:new(J||g),string:new ie}};var oe=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ae=function(e,t){var n=e.__data__;return oe(t)?n["string"==typeof t?"string":"hash"]:n.map};var ce=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t};var le=function(e){return ae(this,e).get(e)};var ue=function(e){return ae(this,e).has(e)};var de=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this};function he(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}he.prototype.clear=se,he.prototype.delete=ce,he.prototype.get=le,he.prototype.has=ue,he.prototype.set=de;var fe=he;var pe=function(e,t){var n=this.__data__;if(n instanceof g){var r=n.__data__;if(!J||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new fe(r)}return n.set(e,t),this.size=n.size,this};function ge(e){var t=this.__data__=new g(e);this.size=t.size}ge.prototype.clear=m,ge.prototype.delete=v,ge.prototype.get=_,ge.prototype.has=b,ge.prototype.set=pe;var me=ge;var ve=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e},_e=function(){try{var e=G(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();var be=function(e,t,n){"__proto__"==t&&_e?_e(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n},ye=Object.prototype.hasOwnProperty;var we=function(e,t,n){var r=e[t];ye.call(e,t)&&a(r,n)&&(void 0!==n||t in e)||be(e,t,n)};var Se=function(e,t,n,r){var i=!n;n||(n={});for(var s=-1,o=t.length;++s<o;){var a=t[s],c=r?r(n[a],e[a],a,n,e):void 0;void 0===c&&(c=e[a]),i?be(n,a,c):we(n,a,c)}return n};var xe=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r};var Ee=function(e){return null!=e&&"object"==typeof e};var Ae=function(e){return Ee(e)&&"[object Arguments]"==k(e)},Ce=Object.prototype,je=Ce.hasOwnProperty,Te=Ce.propertyIsEnumerable,Oe=Ae(function(){return arguments}())?Ae:function(e){return Ee(e)&&je.call(e,"callee")&&!Te.call(e,"callee")},ke=Array.isArray,Ne=n(18),Ie=/^(?:0|[1-9]\d*)$/;var Me=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&Ie.test(e))&&e>-1&&e%1==0&&e<t};var Re=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},De={};De["[object Float32Array]"]=De["[object Float64Array]"]=De["[object Int8Array]"]=De["[object Int16Array]"]=De["[object Int32Array]"]=De["[object Uint8Array]"]=De["[object Uint8ClampedArray]"]=De["[object Uint16Array]"]=De["[object Uint32Array]"]=!0,De["[object Arguments]"]=De["[object Array]"]=De["[object ArrayBuffer]"]=De["[object Boolean]"]=De["[object DataView]"]=De["[object Date]"]=De["[object Error]"]=De["[object Function]"]=De["[object Map]"]=De["[object Number]"]=De["[object Object]"]=De["[object RegExp]"]=De["[object Set]"]=De["[object String]"]=De["[object WeakMap]"]=!1;var Pe=function(e){return Ee(e)&&Re(e.length)&&!!De[k(e)]};var Le=function(e){return function(t){return e(t)}},ze=n(12),Fe=ze.a&&ze.a.isTypedArray,Be=Fe?Le(Fe):Pe,qe=Object.prototype.hasOwnProperty;var He=function(e,t){var n=ke(e),r=!n&&Oe(e),i=!n&&!r&&Object(Ne.a)(e),s=!n&&!r&&!i&&Be(e),o=n||r||i||s,a=o?xe(e.length,String):[],c=a.length;for(var l in e)!t&&!qe.call(e,l)||o&&("length"==l||i&&("offset"==l||"parent"==l)||s&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||Me(l,c))||a.push(l);return a},Ue=Object.prototype;var $e=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Ue)};var We=function(e,t){return function(n){return e(t(n))}},Ve=We(Object.keys,Object),Ge=Object.prototype.hasOwnProperty;var Je=function(e){if(!$e(e))return Ve(e);var t=[];for(var n in Object(e))Ge.call(e,n)&&"constructor"!=n&&t.push(n);return t};var Xe=function(e){return null!=e&&Re(e.length)&&!M(e)};var Qe=function(e){return Xe(e)?He(e):Je(e)};var Ye=function(e,t){return e&&Se(t,Qe(t),e)};var Ke=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t},Ze=Object.prototype.hasOwnProperty;var et=function(e){if(!N(e))return Ke(e);var t=$e(e),n=[];for(var r in e)("constructor"!=r||!t&&Ze.call(e,r))&&n.push(r);return n};var tt=function(e){return Xe(e)?He(e,!0):et(e)};var nt=function(e,t){return e&&Se(t,tt(t),e)},rt=n(121);var it=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t};var st=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,s=[];++n<r;){var o=e[n];t(o,n,e)&&(s[i++]=o)}return s};var ot=function(){return[]},at=Object.prototype.propertyIsEnumerable,ct=Object.getOwnPropertySymbols,lt=ct?function(e){return null==e?[]:(e=Object(e),st(ct(e),(function(t){return at.call(e,t)})))}:ot;var ut=function(e,t){return Se(e,lt(e),t)};var dt=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e},ht=We(Object.getPrototypeOf,Object),ft=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)dt(t,lt(e)),e=ht(e);return t}:ot;var pt=function(e,t){return Se(e,ft(e),t)};var gt=function(e,t,n){var r=t(e);return ke(e)?r:dt(r,n(e))};var mt=function(e){return gt(e,Qe,lt)};var vt=function(e){return gt(e,tt,ft)},_t=G(y.a,"DataView"),bt=G(y.a,"Promise"),yt=G(y.a,"Set"),wt=G(y.a,"WeakMap"),St=z(_t),xt=z(J),Et=z(bt),At=z(yt),Ct=z(wt),jt=k;(_t&&"[object DataView]"!=jt(new _t(new ArrayBuffer(1)))||J&&"[object Map]"!=jt(new J)||bt&&"[object Promise]"!=jt(bt.resolve())||yt&&"[object Set]"!=jt(new yt)||wt&&"[object WeakMap]"!=jt(new wt))&&(jt=function(e){var t=k(e),n="[object Object]"==t?e.constructor:void 0,r=n?z(n):"";if(r)switch(r){case St:return"[object DataView]";case xt:return"[object Map]";case Et:return"[object Promise]";case At:return"[object Set]";case Ct:return"[object WeakMap]"}return t});var Tt=jt,Ot=Object.prototype.hasOwnProperty;var kt=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&Ot.call(e,"index")&&(n.index=e.index,n.input=e.input),n},Nt=y.a.Uint8Array;var It=function(e){var t=new e.constructor(e.byteLength);return new Nt(t).set(new Nt(e)),t};var Mt=function(e,t){var n=t?It(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)},Rt=/\w*$/;var Dt=function(e){var t=new e.constructor(e.source,Rt.exec(e));return t.lastIndex=e.lastIndex,t},Pt=w?w.prototype:void 0,Lt=Pt?Pt.valueOf:void 0;var zt=function(e){return Lt?Object(Lt.call(e)):{}};var Ft=function(e,t){var n=t?It(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)};var Bt=function(e,t,n){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return It(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return Mt(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Ft(e,n);case"[object Map]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return Dt(e);case"[object Set]":return new r;case"[object Symbol]":return zt(e)}},qt=Object.create,Ht=function(){function e(){}return function(t){if(!N(t))return{};if(qt)return qt(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();var Ut=function(e){return"function"!=typeof e.constructor||$e(e)?{}:Ht(ht(e))};var $t=function(e){return Ee(e)&&"[object Map]"==Tt(e)},Wt=ze.a&&ze.a.isMap,Vt=Wt?Le(Wt):$t;var Gt=function(e){return Ee(e)&&"[object Set]"==Tt(e)},Jt=ze.a&&ze.a.isSet,Xt=Jt?Le(Jt):Gt,Qt={};Qt["[object Arguments]"]=Qt["[object Array]"]=Qt["[object ArrayBuffer]"]=Qt["[object DataView]"]=Qt["[object Boolean]"]=Qt["[object Date]"]=Qt["[object Float32Array]"]=Qt["[object Float64Array]"]=Qt["[object Int8Array]"]=Qt["[object Int16Array]"]=Qt["[object Int32Array]"]=Qt["[object Map]"]=Qt["[object Number]"]=Qt["[object Object]"]=Qt["[object RegExp]"]=Qt["[object Set]"]=Qt["[object String]"]=Qt["[object Symbol]"]=Qt["[object Uint8Array]"]=Qt["[object Uint8ClampedArray]"]=Qt["[object Uint16Array]"]=Qt["[object Uint32Array]"]=!0,Qt["[object Error]"]=Qt["[object Function]"]=Qt["[object WeakMap]"]=!1;var Yt=function e(t,n,r,i,s,o){var a,c=1&n,l=2&n,u=4&n;if(r&&(a=s?r(t,i,s,o):r(t)),void 0!==a)return a;if(!N(t))return t;var d=ke(t);if(d){if(a=kt(t),!c)return it(t,a)}else{var h=Tt(t),f="[object Function]"==h||"[object GeneratorFunction]"==h;if(Object(Ne.a)(t))return Object(rt.a)(t,c);if("[object Object]"==h||"[object Arguments]"==h||f&&!s){if(a=l||f?{}:Ut(t),!c)return l?pt(t,nt(a,t)):ut(t,Ye(a,t))}else{if(!Qt[h])return s?t:{};a=Bt(t,h,c)}}o||(o=new me);var p=o.get(t);if(p)return p;o.set(t,a),Xt(t)?t.forEach((function(i){a.add(e(i,n,r,i,t,o))})):Vt(t)&&t.forEach((function(i,s){a.set(s,e(i,n,r,s,t,o))}));var g=u?l?vt:mt:l?keysIn:Qe,m=d?void 0:g(t);return ve(m||t,(function(i,s){m&&(i=t[s=i]),we(a,s,e(i,n,r,s,t,o))})),a};var Kt=function(e){return Yt(e,5)};var Zt=function(e){return"string"==typeof e||!ke(e)&&Ee(e)&&"[object String]"==k(e)};var en=function(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))};function tn(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}function nn(e){return"string"!=typeof e&&(console.warn("".concat(e," used as a key, but it is not a string.")),e=String(e)),e}var rn=function(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(i){if("TypeError"!==i.name)throw i;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}},sn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",on=/^~~local_forage_type~([^~]+)~/,an="__lfsc__:".length,cn=an+"arbf".length,ln=Object.prototype.toString;function un(e){var t,n,r,i,s,o=.75*e.length,a=e.length,c=0;"="===e[e.length-1]&&(o--,"="===e[e.length-2]&&o--);var l=new ArrayBuffer(o),u=new Uint8Array(l);for(t=0;t<a;t+=4)n=sn.indexOf(e[t]),r=sn.indexOf(e[t+1]),i=sn.indexOf(e[t+2]),s=sn.indexOf(e[t+3]),u[c++]=n<<2|r>>4,u[c++]=(15&r)<<4|i>>2,u[c++]=(3&i)<<6|63&s;return l}function dn(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=sn[n[t]>>2],r+=sn[(3&n[t])<<4|n[t+1]>>4],r+=sn[(15&n[t+1])<<2|n[t+2]>>6],r+=sn[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}var hn={serialize:function(e,t){var n="";if(e&&(n=ln.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===ln.call(e.buffer))){var r,i="__lfsc__:";e instanceof ArrayBuffer?(r=e,i+="arbf"):(r=e.buffer,"[object Int8Array]"===n?i+="si08":"[object Uint8Array]"===n?i+="ui08":"[object Uint8ClampedArray]"===n?i+="uic8":"[object Int16Array]"===n?i+="si16":"[object Uint16Array]"===n?i+="ur16":"[object Int32Array]"===n?i+="si32":"[object Uint32Array]"===n?i+="ui32":"[object Float32Array]"===n?i+="fl32":"[object Float64Array]"===n?i+="fl64":t(new Error("Failed to get type for BinaryArray"))),t(i+dn(r))}else if("[object Blob]"===n){var s=new FileReader;s.onload=function(){var n="~~local_forage_type~"+e.type+"~"+dn(this.result);t("__lfsc__:blob"+n)},s.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}},deserialize:function(e){if("__lfsc__:"!==e.substring(0,an))return JSON.parse(e);var t,n=e.substring(cn),r=e.substring(an,cn);if("blob"===r&&on.test(n)){var i=n.match(on);t=i[1],n=n.substring(i[0].length)}var s=un(n);switch(r){case"arbf":return s;case"blob":return rn([s],{type:t});case"si08":return new Int8Array(s);case"ui08":return new Uint8Array(s);case"uic8":return new Uint8ClampedArray(s);case"si16":return new Int16Array(s);case"ur16":return new Uint16Array(s);case"si32":return new Int32Array(s);case"ui32":return new Uint32Array(s);case"fl32":return new Float32Array(s);case"fl64":return new Float64Array(s);default:throw new Error("Unkown type: "+r)}},stringToBuffer:un,bufferToString:dn};function fn(e,t){let n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}const pn={serializer:{serialize:hn.serialize,deserialize:hn.deserialize}};var gn={_driver:"sessionStorageWrapper",_initStorage:function(e){if(pn.keyPrefix=fn(e,this._defaultConfig),e)for(const t in e)pn[t]=e[t]},_support:function(){try{if(sessionStorage&&"setItem"in sessionStorage)return!0}catch(e){console.log(e)}return!1}(),iterate:function(e,t){const n=this.ready().then((function(){const t=pn.keyPrefix,n=t.length,r=sessionStorage.length;let i=1;for(let s=0;s<r;s++){const r=sessionStorage.key(s);if(0!==r.indexOf(t))continue;let o=sessionStorage.getItem(r);if(o&&(o=pn.serializer.deserialize(o)),o=e(o,r.substring(n),i++),void 0!==o)return o}}));return en(n,t),n},getItem:function(e,t){e=nn(e);const n=this.ready().then((function(){let t=sessionStorage.getItem(pn.keyPrefix+e);return t&&(t=pn.serializer.deserialize(t)),t}));return en(n,t),n},setItem:function(e,t,n){e=nn(e);const r=this.ready().then((function(){void 0===t&&(t=null);const n=t;return new Promise((function(r,i){pn.serializer.serialize(t,(function(t,s){if(s)i(s);else try{sessionStorage.setItem(pn.keyPrefix+e,t),r(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||i(e),i(e)}}))}))}));return en(r,n),r},removeItem:function(e,t){e=nn(e);const n=this.ready().then((function(){sessionStorage.removeItem(pn.keyPrefix+e)}));return en(n,t),n},clear:function(e){const t=this.ready().then((function(){const e=pn.keyPrefix;for(let t=sessionStorage.length-1;t>=0;t--){const n=sessionStorage.key(t);0===n.indexOf(e)&&sessionStorage.removeItem(n)}}));return en(t,e),t},length:function(e){const t=this.keys().then((function(e){return e.length}));return en(t,e),t},key:function(e,t){const n=this.ready().then((function(){let t;try{t=sessionStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(pn.keyPrefix.length)),t}));return en(n,t),n},keys:function(e){const t=this.ready().then((function(){const e=sessionStorage.length,t=[];for(let n=0;n<e;n++){const e=sessionStorage.key(n);0===e.indexOf(pn.keyPrefix)&&t.push(e.substring(pn.keyPrefix.length))}return t}));return en(t,e),t},dropInstance:function(e,t){if(t=tn.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){const t=this.config();e.name=e.name||t.name,e.storeName=e.storeName||t.storeName}const n=this;let r;return r=e.name?new Promise((function(t){e.storeName?t(fn(e,n._defaultConfig)):t("".concat(e.name,"/"))})).then((function(e){for(let t=sessionStorage.length-1;t>=0;t--){const n=sessionStorage.key(t);0===n.indexOf(e)&&sessionStorage.removeItem(n)}})):Promise.reject(new Error("Invalid arguments")),en(r,t),r}};function mn(){return(65536*(1+Math.random())|0).toString(16).substring(1)}class vn{constructor(e,t){if("local"===t&&!window.localStorage)throw new Error("Skeletor.storage: Environment does not support localStorage.");if("session"===t&&!window.sessionStorage)throw new Error("Skeletor.storage: Environment does not support sessionStorage.");Zt(t)?this.storeInitialized=this.initStore(t):(this.store=t,this.storeInitialized=Promise.resolve()),this.name=e}async initStore(e){if("session"===e)s.setDriver(gn._driver);else if("local"===e)await s.config({driver:s.LOCALSTORAGE});else if("indexed"!==e)throw new Error("Skeletor.storage: No storage type was specified");this.store=s}async clear(){await this.store.removeItem(this.name).catch(e=>console.error(e));const e=new RegExp("^".concat(this.name,"-")),t=(await this.store.keys()).filter(t=>e.test(t));await Promise.all(t.map(e=>this.store.removeItem(e).catch(e=>console.error(e))))}sync(e){const t=this;async function n(e,n,r){let i,s,o,a;const c=n.collection;["patch","update"].includes(e)&&(a=Kt(n.attributes)),await t.storeInitialized;try{const s=n.attributes;switch(e){case"read":i=void 0!==n.id?await t.find(n):await t.findAll();break;case"create":i=await t.create(n,r);break;case"patch":case"update":r.wait&&(n.attributes=a),o=t.update(n,r),r.wait&&(n.attributes=s),i=await o;break;case"delete":i=await t.destroy(n,c)}}catch(e){s=22===e.code&&0===t.getStorageSize()?"Private browsing is unsupported":e.message}if(i){if(r&&r.success){const t="read"===e?i:null;r.success(t,r)}}else s=s||"Record Not Found",r&&r.error&&r.error(s)}return n.__name__="localSync",n}removeCollectionReference(e,t){if(!t)return;const n=t.filter(t=>t.id!==e.id).map(e=>this.getItemName(e.id));return this.store.setItem(this.name,n)}addCollectionReference(e,t){if(!t)return;const n=t.map(e=>this.getItemName(e.id)),r=this.getItemName(e.id);return n.includes(r)||n.push(r),this.store.setItem(this.name,n)}async save(e,t={}){const n=this.getItemName(e.id),r=await this.store.setItem(n,e.toJSON());return await this.addCollectionReference(e,e.collection),r}create(e,t){return e.id||(e.id=mn()+mn()+"-"+mn()+"-"+mn()+"-"+mn()+"-"+mn()+mn()+mn(),e.set(e.idAttribute,e.id,t)),this.save(e)}update(e,t){return this.save(e,t)}find(e){return this.store.getItem(this.getItemName(e.id))}async findAll(){const e=await this.store.getItem(this.name);return e&&e.length?Promise.all(e.map(e=>this.store.getItem(e))):[]}async destroy(e,t){return await this.store.removeItem(this.getItemName(e.id)),await this.removeCollectionReference(e,t),e}getStorageSize(){return this.store.length}getItemName(e){return this.name+"-"+e}}vn.sessionStorageInitialized=s.defineDriver(gn),vn.localForage=s;var _n=vn,bn=n(122),yn=n.n(bn),wn=n(4),Sn=n.n(wn),xn=Function.prototype,En=Object.prototype,An=xn.toString,Cn=En.hasOwnProperty,jn=An.call(Object);var Tn=function(e){if(!Ee(e)||"[object Object]"!=k(e))return!1;var t=ht(e);if(null===t)return!0;var n=Cn.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&An.call(n)==jn};var On,kn,Nn,In,Mn=function(e){return Ee(e)&&1===e.nodeType&&!Tn(e)};const Rn={debug:0,info:1,warn:2,error:3,fatal:4},Dn=Object.assign({debug:(null===(On=console)||void 0===On?void 0:On.log)?console.log.bind(console):function(){},error:(null===(kn=console)||void 0===kn?void 0:kn.log)?console.log.bind(console):function(){},info:(null===(Nn=console)||void 0===Nn?void 0:Nn.log)?console.log.bind(console):function(){},warn:(null===(In=console)||void 0===In?void 0:In.log)?console.log.bind(console):function(){}},console);var Pn={setLogLevel(e){if(!["debug","info","warn","error","fatal"].includes(e))throw new Error("Invalid loglevel: ".concat(e));this.loglevel=e},log(e,t,n=""){if(Rn[t]<Rn[this.loglevel])return;"error"===t||"fatal"===t?n=n||"color: maroon":"debug"===t&&(n=n||"color: green"),e instanceof Error?e=e.stack:Mn(e)&&(e=e.outerHTML);const r=n?"%c":"";"error"===t?Dn.error("".concat(r," ERROR: ").concat(e),n):"warn"===t?Dn.warn("".concat(r," ").concat((new Date).toISOString()," WARNING: ").concat(e),n):"fatal"===t?Dn.error("".concat(r," FATAL: ").concat(e),n):"debug"===t?Dn.debug("".concat(r," ").concat((new Date).toISOString()," DEBUG: ").concat(e),n):Dn.info("".concat(r," ").concat((new Date).toISOString()," INFO: ").concat(e),n)},debug(e,t){this.log(e,"debug",t)},error(e,t){this.log(e,"error",t)},info(e,t){this.log(e,"info",t)},warn(e,t){this.log(e,"warn",t)},fatal(e,t){this.log(e,"fatal",t)}},Ln=n(123),zn=n.n(Ln),Fn=n(34),Bn=n.n(Fn),qn=n(35),Hn=n.n(qn),Un=n(29),$n=n.n(Un),Wn=n(124),Vn=n.n(Wn),Gn=n(48),Jn=n.n(Gn),Xn=n(125),Qn=n.n(Xn),Yn=n(26),Kn=n.n(Yn),Zn=n(69),er=n.n(Zn),tr=n(126),nr=n.n(tr),rr=n(127),ir=n.n(rr),sr=n(68),or=n.n(sr);function ar(e,t){this.name=t,this.plugged=e,void 0===this.plugged.__super__?this.plugged.__super__={}:"string"==typeof this.plugged.__super__&&(this.plugged.__super__={__string__:this.plugged.__super__}),this.plugged.__super__[t]=this.plugged,this.plugins={},this.initialized_plugins=[]}Hn()(ar.prototype,{wrappedOverride:function(e,t,n,r){return"function"==typeof n&&(void 0===this.__super__&&(this.__super__=r),this.__super__[e]=n.bind(this)),t.apply(this,zn()(arguments,4))},_overrideAttribute:function(e,t){let n=t.overrides[e];if("function"==typeof n){let t={};t[this.name]=this.plugged;let r=er()(this.wrappedOverride,e,n,this.plugged[e],t);this.plugged[e]=r}else this.plugged[e]=n},_extendObject:function(e,t){e.prototype.__super__||(e.prototype.__super__={},e.prototype.__super__[this.name]=this.plugged);let n=this;Bn()(t,(function(t,r){if("events"===r)e.prototype[r]=Hn()(t,e.prototype[r]);else if("function"==typeof t){let i={};i[n.name]=n.plugged;let s=er()(n.wrappedOverride,r,t,e.prototype[r],i);e.prototype[r]=s}else e.prototype[r]=t}))},loadPluginDependencies:function(e){Bn()(e.dependencies,t=>{let n=this.plugins[t];if(n){if($n()(n.dependencies,e.__name__))throw'Found a circular dependency between the plugins "'+e.__name__+'" and "'+t+'"';this.initializePlugin(n)}else this.throwUndefinedDependencyError('Could not find dependency "'+t+'" for the plugin "'+e.__name__+"\". If it's needed, make sure it's loaded by require.js")})},throwUndefinedDependencyError:function(e){if(this.plugged.strict_plugin_dependencies)throw e;console.warn?console.warn(e):console.log(e)},applyOverrides:function(e){Bn()(Object.keys(e.overrides||{}),t=>{let n=e.overrides[t];"object"==typeof n?void 0===this.plugged[t]?this.throwUndefinedDependencyError('Plugin "'.concat(e.__name__,'" tried to override "').concat(t,"\" but it's not found.")):this._extendObject(this.plugged[t],n):this._overrideAttribute(t,e)})},initializePlugin:function(e){$n()(Kn()(this.allowed_plugins),e.__name__)&&($n()(this.initialized_plugins,e.__name__)||(Vn()(e.enabled)&&e.enabled||Jn()(e.enabled)&&e.enabled(this.plugged)||Qn()(e.enabled))&&(Hn()(e,this.properties),e.dependencies&&this.loadPluginDependencies(e),this.applyOverrides(e),"function"==typeof e.initialize&&e.initialize.bind(e)(this),this.initialized_plugins.push(e.__name__)))},registerPlugin:function(e,t){if(e in this.plugins)throw new Error("Error: Plugin name "+e+" is already taken");t.__name__=e,this.plugins[e]=t},initializePlugins:function(e={},t=[],n=[]){ir()(this.plugins)&&(this.properties=e,this.allowed_plugins=nr()(this.plugins,(function(e,r){return(!t.length||t.length&&$n()(t,r))&&!$n()(n,r)})),Bn()(or()(this.allowed_plugins),this.initializePlugin.bind(this)))}});var cr={enable:function(e,t,n){void 0===n&&(n="pluginSocket"),void 0===t&&(t="plugged");let r={};return r[n]=new ar(e,t),Hn()(e,r)}},lr=n(2),ur=n.n(lr),dr=n(0);var hr=function(e,t){var n=Ht(e);return null==t?n:Ye(n,t)};var fr=function(e){return e};var pr=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)},gr=Math.max;var mr=function(e,t,n){return t=gr(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,s=gr(r.length-t,0),o=Array(s);++i<s;)o[i]=r[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=r[i];return a[t]=n(o),pr(e,this,a)}};var vr=function(e){return function(){return e}},_r=_e?function(e,t){return _e(e,"toString",{configurable:!0,enumerable:!1,value:vr(t),writable:!0})}:fr,br=Date.now;var yr=function(e){var t=0,n=0;return function(){var r=br(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(_r);var wr=function(e,t){return yr(mr(e,t,fr),e+"")};var Sr=function(e,t,n){if(!N(n))return!1;var r=typeof t;return!!("number"==r?Xe(n)&&Me(t,n.length):"string"==r&&t in n)&&a(n[t],e)};var xr=function(e){return wr((function(t,n){var r=-1,i=n.length,s=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(s=e.length>3&&"function"==typeof s?(i--,s):void 0,o&&Sr(n[0],n[1],o)&&(s=i<3?void 0:s,i=1),t=Object(t);++r<i;){var a=n[r];a&&e(t,a,r,s)}return t}))}((function(e,t){Se(t,tt(t),e)})),Er=Object.prototype.hasOwnProperty;var Ar=function(e,t){return null!=e&&Er.call(e,t)};var Cr=function(e){return"symbol"==typeof e||Ee(e)&&"[object Symbol]"==k(e)},jr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Tr=/^\w*$/;var Or=function(e,t){if(ke(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Cr(e))||(Tr.test(e)||!jr.test(e)||null!=t&&e in Object(t))};function kr(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],s=n.cache;if(s.has(i))return s.get(i);var o=e.apply(this,r);return n.cache=s.set(i,o)||s,o};return n.cache=new(kr.Cache||fe),n}kr.Cache=fe;var Nr=kr;var Ir=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Mr=/\\(\\)?/g,Rr=function(e){var t=Nr(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Ir,(function(e,n,r,i){t.push(r?i.replace(Mr,"$1"):n||e)})),t}));var Dr=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i},Pr=w?w.prototype:void 0,Lr=Pr?Pr.toString:void 0;var zr=function e(t){if("string"==typeof t)return t;if(ke(t))return Dr(t,e)+"";if(Cr(t))return Lr?Lr.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n};var Fr=function(e){return null==e?"":zr(e)};var Br=function(e,t){return ke(e)?e:Or(e,t)?[e]:Rr(Fr(e))};var qr=function(e){if("string"==typeof e||Cr(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t};var Hr=function(e,t,n){for(var r=-1,i=(t=Br(t,e)).length,s=!1;++r<i;){var o=qr(t[r]);if(!(s=null!=e&&n(e,o)))break;e=e[o]}return s||++r!=i?s:!!(i=null==e?0:e.length)&&Re(i)&&Me(o,i)&&(ke(e)||Oe(e))};var Ur=function(e,t){return null!=e&&Hr(e,t,Ar)};var $r=function(e,t,n){var r=-1,i=(t=Br(t,e)).length;for(i||(i=1,e=void 0);++r<i;){var s=null==e?void 0:e[qr(t[r])];void 0===s&&(r=i,s=n),e=M(s)?s.call(e):s}return e};Error;function Wr(e,t){const n=this;let r;return r=e&&Ur(e,"constructor")?e.constructor:function(){return n.apply(this,arguments)},xr(r,n,t),r.prototype=hr(n.prototype,e),r.prototype.constructor=r,r.__super__=n.prototype,r}function Vr(){const e={isResolved:!1,isPending:!0,isRejected:!1},t=new Promise((t,n)=>{e.resolve=t,e.reject=n});return Object.assign(t,e),t.then((function(e){return t.isResolved=!0,t.isPending=!1,t.isRejected=!1,e}),(function(e){throw t.isResolved=!1,t.isPending=!1,t.isRejected=!0,e})),t}function Gr(){throw new Error('A "url" property or function must be specified')}function Jr(e,t){const n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger("error",e,r,t)}}const Xr={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};function Qr(e){const t=$r(e,"browserStorage")||$r(e.collection,"browserStorage");return t?t.sync():Yr}function Yr(e,t,n={}){const r={type:Xr[e],dataType:"json"};n.url||(r.url=$r(t,"url")||Gr()),null!=n.data||!t||"create"!==e&&"update"!==e&&"patch"!==e||(r.contentType="application/json",r.data=JSON.stringify(n.attrs||t.toJSON(n))),"GET"!==r.type&&(r.processData=!1);const i=n.error;n.error=function(e,t,r){n.textStatus=t,n.errorThrown=r,i&&i.call(n.context,e,t,r)};const s=n.xhr=function(){return fetch.apply(this,arguments)}(xr(r,n));return t.trigger("request",t,s,n),s}var Kr=Object.prototype.hasOwnProperty;var Zr=function(e){if(null==e)return!0;if(Xe(e)&&(ke(e)||"string"==typeof e||"function"==typeof e.splice||Object(Ne.a)(e)||Be(e)||Oe(e)))return!e.length;var t=Tt(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if($e(e))return!Je(e).length;for(var n in e)if(Kr.call(e,n))return!1;return!0},ei=/^\s+|\s+$/g,ti=/^[-+]0x[0-9a-f]+$/i,ni=/^0b[01]+$/i,ri=/^0o[0-7]+$/i,ii=parseInt;var si=function(e){if("number"==typeof e)return e;if(Cr(e))return NaN;if(N(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=N(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(ei,"");var n=ni.test(e);return n||ri.test(e)?ii(e.slice(2),n?2:8):ti.test(e)?NaN:+e};var oi=function(e){return e?(e=si(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0};var ai=function(e){var t=oi(e),n=t%1;return t==t?n?t-n:t:0};var ci=function(e,t){var n;if("function"!=typeof t)throw new TypeError("Expected a function");return e=ai(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}};var li=function(e){return ci(2,e)},ui=0;var di=function(e){var t=++ui;return Fr(e)+t};const hi={},fi=/\s+/;let pi;const gi=function e(t,n,r,i,s){let o,a=0;if(r&&"object"==typeof r){void 0!==i&&"context"in s&&void 0===s.context&&(s.context=i);for(o=Qe(r);a<o.length;a++)n=e(t,n,o[a],r[o[a]],s)}else if(r&&fi.test(r))for(o=r.split(fi);a<o.length;a++)n=t(n,o[a],i,s);else n=t(n,r,i,s);return n};hi.on=function(e,t,n){if(this._events=gi(mi,this._events||{},e,t,{context:n,ctx:this,listening:pi}),pi){(this._listeners||(this._listeners={}))[pi.id]=pi,pi.interop=!1}return this},hi.listenTo=function(e,t,n){if(!e)return this;const r=e._listenId||(e._listenId=di("l")),i=this._listeningTo||(this._listeningTo={});let s=pi=i[r];s||(this._listenId||(this._listenId=di("l")),s=pi=i[r]=new Si(this,e));const o=vi(e,t,n,this);if(pi=void 0,o)throw o;return s.interop&&s.on(t,n),this};const mi=function(e,t,n,r){if(n){const i=e[t]||(e[t]=[]),s=r.context,o=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:s,ctx:s||o,listening:a})}return e},vi=function(e,t,n,r){try{e.on(t,n,r)}catch(e){return e}};hi.off=function(e,t,n){return this._events?(this._events=gi(_i,this._events,e,t,{context:n,listeners:this._listeners}),this):this},hi.stopListening=function(e,t,n){const r=this._listeningTo;if(!r)return this;const i=e?[e._listenId]:Qe(r);for(let e=0;e<i.length;e++){const s=r[i[e]];if(!s)break;s.obj.off(t,n,this),s.interop&&s.off(t,n)}return Zr(r)&&(this._listeningTo=void 0),this};const _i=function(e,t,n,r){if(!e)return;const i=r.context,s=r.listeners;let o,a=0;if(t||i||n){for(o=t?[t]:Qe(e);a<o.length;a++){const r=e[t=o[a]];if(!r)break;const s=[];for(let e=0;e<r.length;e++){const o=r[e];if(n&&n!==o.callback&&n!==o.callback._callback||i&&i!==o.context)s.push(o);else{const e=o.listening;e&&e.off(t,n)}}s.length?e[t]=s:delete e[t]}return e}for(o=Qe(s);a<o.length;a++)s[o[a]].cleanup()};hi.once=function(e,t,n){const r=gi(bi,{},e,t,this.off.bind(this));return"string"==typeof e&&null==n&&(t=void 0),this.on(r,t,n)},hi.listenToOnce=function(e,t,n){const r=gi(bi,{},t,n,this.stopListening.bind(this,e));return this.listenTo(e,r)};const bi=function(e,t,n,r){if(n){const i=e[t]=li((function(){r(t,i),n.apply(this,arguments)}));i._callback=n}return e};hi.trigger=function(e){if(!this._events)return this;const t=Math.max(0,arguments.length-1),n=Array(t);for(let e=0;e<t;e++)n[e]=arguments[e+1];return gi(yi,this._events,e,void 0,n),this};const yi=function(e,t,n,r){if(e){const n=e[t];let i=e.all;n&&i&&(i=i.slice()),n&&wi(n,r),i&&wi(i,[t].concat(r))}return e},wi=function(e,t){let n,r=-1;const i=e.length,s=t[0],o=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,s);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,s,o);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,s,o,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t);return}},Si=function(e,t){this.id=e._listenId,this.listener=e,this.obj=t,this.interop=!0,this.count=0,this._events=void 0};Si.prototype.on=hi.on,Si.prototype.off=function(e,t){let n;this.interop?(this._events=gi(_i,this._events,e,t,{context:void 0,listeners:void 0}),n=!this._events):(this.count--,n=0===this.count),n&&this.cleanup()},Si.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},hi.bind=hi.on,hi.unbind=hi.off;var xi=function(e){return Yt(e,4)},Ei=Object.prototype,Ai=Ei.hasOwnProperty,Ci=wr((function(e,t){e=Object(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&Sr(t[0],t[1],i)&&(r=1);++n<r;)for(var s=t[n],o=tt(s),c=-1,l=o.length;++c<l;){var u=o[c],d=e[u];(void 0===d||a(d,Ei[u])&&!Ai.call(e,u))&&(e[u]=s[u])}return e}));var ji=function(e,t,n){if("function"!=typeof e)throw new TypeError("Expected a function");return setTimeout((function(){e.apply(void 0,n)}),t)},Ti=wr((function(e,t){return ji(e,1,t)}));var Oi=function(e){return function(t){return null==e?void 0:e[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),ki=/[&<>"']/g,Ni=RegExp(ki.source);var Ii=function(e){return(e=Fr(e))&&Ni.test(e)?e.replace(ki,Oi):e};var Mi=function(e){return function(t,n,r){for(var i=-1,s=Object(t),o=r(t),a=o.length;a--;){var c=o[e?a:++i];if(!1===n(s[c],c,s))break}return t}},Ri=Mi();var Di=function(e,t){return e&&Ri(e,t,Qe)};var Pi=function(e,t,n,r){return Di(e,(function(e,i,s){t(r,n(e),i,s)})),r};var Li=function(e,t){return function(n,r){return Pi(n,e,t(r),{})}},zi=Object.prototype.toString,Fi=Li((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=zi.call(t)),e[t]=n}),vr(fr));var Bi=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var qi=function(e){return this.__data__.has(e)};function Hi(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new fe;++t<n;)this.add(e[t])}Hi.prototype.add=Hi.prototype.push=Bi,Hi.prototype.has=qi;var Ui=Hi;var $i=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1};var Wi=function(e,t){return e.has(t)};var Vi=function(e,t,n,r,i,s){var o=1&n,a=e.length,c=t.length;if(a!=c&&!(o&&c>a))return!1;var l=s.get(e);if(l&&s.get(t))return l==t;var u=-1,d=!0,h=2&n?new Ui:void 0;for(s.set(e,t),s.set(t,e);++u<a;){var f=e[u],p=t[u];if(r)var g=o?r(p,f,u,t,e,s):r(f,p,u,e,t,s);if(void 0!==g){if(g)continue;d=!1;break}if(h){if(!$i(t,(function(e,t){if(!Wi(h,t)&&(f===e||i(f,e,n,r,s)))return h.push(t)}))){d=!1;break}}else if(f!==p&&!i(f,p,n,r,s)){d=!1;break}}return s.delete(e),s.delete(t),d};var Gi=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n};var Ji=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n},Xi=w?w.prototype:void 0,Qi=Xi?Xi.valueOf:void 0;var Yi=function(e,t,n,r,i,s,o){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!s(new Nt(e),new Nt(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var c=Gi;case"[object Set]":var l=1&r;if(c||(c=Ji),e.size!=t.size&&!l)return!1;var u=o.get(e);if(u)return u==t;r|=2,o.set(e,t);var d=Vi(c(e),c(t),r,i,s,o);return o.delete(e),d;case"[object Symbol]":if(Qi)return Qi.call(e)==Qi.call(t)}return!1},Ki=Object.prototype.hasOwnProperty;var Zi=function(e,t,n,r,i,s){var o=1&n,a=mt(e),c=a.length;if(c!=mt(t).length&&!o)return!1;for(var l=c;l--;){var u=a[l];if(!(o?u in t:Ki.call(t,u)))return!1}var d=s.get(e);if(d&&s.get(t))return d==t;var h=!0;s.set(e,t),s.set(t,e);for(var f=o;++l<c;){var p=e[u=a[l]],g=t[u];if(r)var m=o?r(g,p,u,t,e,s):r(p,g,u,e,t,s);if(!(void 0===m?p===g||i(p,g,n,r,s):m)){h=!1;break}f||(f="constructor"==u)}if(h&&!f){var v=e.constructor,_=t.constructor;v==_||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof _&&_ instanceof _||(h=!1)}return s.delete(e),s.delete(t),h},es=Object.prototype.hasOwnProperty;var ts=function(e,t,n,r,i,s){var o=ke(e),a=ke(t),c=o?"[object Array]":Tt(e),l=a?"[object Array]":Tt(t),u="[object Object]"==(c="[object Arguments]"==c?"[object Object]":c),d="[object Object]"==(l="[object Arguments]"==l?"[object Object]":l),h=c==l;if(h&&Object(Ne.a)(e)){if(!Object(Ne.a)(t))return!1;o=!0,u=!1}if(h&&!u)return s||(s=new me),o||Be(e)?Vi(e,t,n,r,i,s):Yi(e,t,c,n,r,i,s);if(!(1&n)){var f=u&&es.call(e,"__wrapped__"),p=d&&es.call(t,"__wrapped__");if(f||p){var g=f?e.value():e,m=p?t.value():t;return s||(s=new me),i(g,m,n,r,s)}}return!!h&&(s||(s=new me),Zi(e,t,n,r,i,s))};var ns=function e(t,n,r,i,s){return t===n||(null==t||null==n||!Ee(t)&&!Ee(n)?t!=t&&n!=n:ts(t,n,r,i,e,s))};var rs=function(e,t){return ns(e,t)};var is=function(e,t,n,r){var i=n.length,s=i,o=!r;if(null==e)return!s;for(e=Object(e);i--;){var a=n[i];if(o&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<s;){var c=(a=n[i])[0],l=e[c],u=a[1];if(o&&a[2]){if(void 0===l&&!(c in e))return!1}else{var d=new me;if(r)var h=r(l,u,c,e,t,d);if(!(void 0===h?ns(u,l,3,r,d):h))return!1}}return!0};var ss=function(e){return e==e&&!N(e)};var os=function(e){for(var t=Qe(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,ss(i)]}return t};var as=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}};var cs=function(e){var t=os(e);return 1==t.length&&t[0][2]?as(t[0][0],t[0][1]):function(n){return n===e||is(n,e,t)}};var ls=function(e,t){for(var n=0,r=(t=Br(t,e)).length;null!=e&&n<r;)e=e[qr(t[n++])];return n&&n==r?e:void 0};var us=function(e,t,n){var r=null==e?void 0:ls(e,t);return void 0===r?n:r};var ds=function(e,t){return null!=e&&t in Object(e)};var hs=function(e,t){return null!=e&&Hr(e,t,ds)};var fs=function(e,t){return Or(e)&&ss(t)?as(qr(e),t):function(n){var r=us(n,e);return void 0===r&&r===t?hs(n,e):ns(t,r,3)}};var ps=function(e){return function(t){return null==t?void 0:t[e]}};var gs=function(e){return function(t){return ls(t,e)}};var ms=function(e){return Or(e)?ps(qr(e)):gs(e)};var vs=function(e){return"function"==typeof e?e:null==e?fr:"object"==typeof e?ke(e)?fs(e[0],e[1]):cs(e):ms(e)};var _s=function(e){return vs("function"==typeof e?e:Yt(e,1))};var bs=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0};var ys=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(i);++r<i;)s[r]=e[r+t];return s};var ws=function(e,t){return t.length<2?e:ls(e,ys(t,0,-1))};var Ss=function(e,t){return t=Br(t,e),null==(e=ws(e,t))||delete e[qr(bs(t))]};var xs=function(e){return Tn(e)?void 0:e},Es=w?w.isConcatSpreadable:void 0;var As=function(e){return ke(e)||Oe(e)||!!(Es&&e&&e[Es])};var Cs=function e(t,n,r,i,s){var o=-1,a=t.length;for(r||(r=As),s||(s=[]);++o<a;){var c=t[o];n>0&&r(c)?n>1?e(c,n-1,r,i,s):dt(s,c):i||(s[s.length]=c)}return s};var js=function(e){return(null==e?0:e.length)?Cs(e,1):[]};var Ts=function(e){return yr(mr(e,void 0,js),e+"")},Os=Ts((function(e,t){var n={};if(null==e)return n;var r=!1;t=Dr(t,(function(t){return t=Br(t,e),r||(r=t.length>1),t})),Se(e,vt(e),n),r&&(n=Yt(n,7,xs));for(var i=t.length;i--;)Ss(n,t[i]);return n}));var ks=function(e,t,n,r){if(!N(e))return e;for(var i=-1,s=(t=Br(t,e)).length,o=s-1,a=e;null!=a&&++i<s;){var c=qr(t[i]),l=n;if(i!=o){var u=a[c];void 0===(l=r?r(u,c,a):void 0)&&(l=N(u)?u:Me(t[i+1])?[]:{})}we(a,c,l),a=a[c]}return e};var Ns=function(e,t,n){for(var r=-1,i=t.length,s={};++r<i;){var o=t[r],a=ls(e,o);n(a,o)&&ks(s,Br(o,e),a)}return s};var Is=function(e,t){return Ns(e,t,(function(t,n){return hs(e,n)}))},Ms=Ts((function(e,t){return null==e?{}:Is(e,t)}));const Rs=function(e,t){let n=e||{};t||(t={}),this.preinitialize.apply(this,arguments),this.cid=di(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(n=this.parse(n,t)||{});const r=$r(this,"defaults");n=Ci(xr({},r,n),r),this.set(n,t),this.changed={},this.initialize.apply(this,arguments)};Rs.extend=Wr,Object.assign(Rs.prototype,hi,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(e){return xi(this.attributes)},sync:function(e,t,n){return Qr(this)(e,t,n)},get:function(e){return this.attributes[e]},keys:function(){return Object.keys(this.attributes)},values:function(){return Object.values(this.attributes)},pairs:function(){return this.entries()},entries:function(){return Object.entries(this.attributes)},invert:function(){return Fi(this.attributes)},pick:function(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),Ms(this.attributes,e)},omit:function(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),Os(this.attributes,e)},isEmpty:function(){return Zr(this.attributes)},escape:function(e){return Ii(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!_s(e,this)(this.attributes)},set:function(e,t,n){if(null==e)return this;let r;if("object"==typeof e?(r=e,n=t):(r={})[e]=t,n||(n={}),!this._validate(r,n))return!1;const i=n.unset,s=n.silent,o=[],a=this._changing;this._changing=!0,a||(this._previousAttributes=xi(this.attributes),this.changed={});const c=this.attributes,l=this.changed,u=this._previousAttributes;for(const e in r)t=r[e],rs(c[e],t)||o.push(e),rs(u[e],t)?delete l[e]:l[e]=t,i?delete c[e]:c[e]=t;if(this.idAttribute in r&&(this.id=this.get(this.idAttribute)),!s){o.length&&(this._pending=n);for(let e=0;e<o.length;e++)this.trigger("change:"+o[e],this,c[o[e]],n)}if(a)return this;if(!s)for(;this._pending;)n=this._pending,this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,xr({},t,{unset:!0}))},clear:function(e){const t={};for(const e in this.attributes)t[e]=void 0;return this.set(t,xr({},e,{unset:!0}))},hasChanged:function(e){return null==e?!Zr(this.changed):Ur(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&xi(this.changed);const t=this._changing?this._previousAttributes:this.attributes,n={};let r;for(const i in e){const s=e[i];rs(t[i],s)||(n[i]=s,r=!0)}return!!r&&n},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return xi(this._previousAttributes)},fetch:function(e){e=xr({parse:!0},e);const t=this,n=e.success;return e.success=function(r){const i=e.parse?t.parse(r,e):r;if(!t.set(i,e))return!1;n&&n.call(e.context,t,r,e),t.trigger("sync",t,r,e)},Jr(this,e),this.sync("read",this,e)},save:function(e,t,n){let r;null==e||"object"==typeof e?(r=e,n=t):(r={})[e]=t;const i=(n=xr({validate:!0,parse:!0},n)).wait,s=n.promise,o=s&&Vr();if(r&&!i){if(!this.set(r,n))return!1}else if(!this._validate(r,n))return!1;const a=this,c=n.success,l=n.error,u=this.attributes;n.success=function(e){a.attributes=u;let t=n.parse?a.parse(e,n):e;if(i&&(t=xr({},r,t)),t&&!a.set(t,n))return!1;c&&c.call(n.context,a,e,n),a.trigger("sync",a,e,n),s&&o.resolve()},n.error=function(e,t,n){l&&l.call(n.context,e,t,n),s&&o.reject(t)},Jr(this,n),r&&i&&(this.attributes=xr({},u,r));const d=this.isNew()?"create":n.patch?"patch":"update";"patch"!==d||n.attrs||(n.attrs=r);const h=this.sync(d,this,n);return this.attributes=u,s?o:h},destroy:function(e){e=e?xi(e):{};const t=this,n=e.success,r=e.wait,i=function(){t.stopListening(),t.trigger("destroy",t,t.collection,e)};e.success=function(s){r&&i(),n&&n.call(e.context,t,s,e),t.isNew()||t.trigger("sync",t,s,e)};let s=!1;return this.isNew()?Ti(e.success):(Jr(this,e),s=this.sync("delete",this,e)),r||i(),s},url:function(){const e=$r(this,"urlRoot")||$r(this.collection,"url")||Gr();if(this.isNew())return e;const t=this.get(this.idAttribute);return e.replace(/[^\/]$/,"$&/")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},xr({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=xr({},this.attributes,e);const n=this.validationError=this.validate(e,t)||null;return!n||(this.trigger("invalid",this,n,xr(t,{validationError:n})),!1)}});var Ds=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var s=e[t];s&&(i[r++]=s)}return i};
+ */!function(o,s){"use strict";e.exports?e.exports=s():void 0===(i="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=i)}(0,(function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return!1;var r=e.lastIndexOf(".",t-1);if(r<=0||r>=t-1)return!1;var i=n.list[e.slice(t+1)];return!!i&&i.indexOf(" "+e.slice(r+1,t)+" ")>=0},is:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return!1;if(e.lastIndexOf(".",t-1)>=0)return!1;var r=n.list[e.slice(t+1)];return!!r&&r.indexOf(" "+e.slice(0,t)+" ")>=0},get:function(e){var t=e.lastIndexOf(".");if(t<=0||t>=e.length-1)return null;var r=e.lastIndexOf(".",t-1);if(r<=0||r>=t-1)return null;var i=n.list[e.slice(t+1)];return i?i.indexOf(" "+e.slice(r+1,t)+" ")<0?null:e.slice(r+1):null},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n}))},function(e,t,n){"use strict";var r=n(9),i=n(2);i.d.Websocket=class{constructor(e){this._conn=e,this.strip="wrapper";const t=e.service;if(0!==t.indexOf("ws:")&&0!==t.indexOf("wss:")){let n="";"ws"===e.options.protocol&&"https:"!==window.location.protocol?n+="ws":n+="wss",n+="://"+window.location.host,0!==t.indexOf("/")?n+=window.location.pathname+t:n+=t,e.service=n}}_buildStream(){return Object(i.a)("open",{xmlns:i.d.NS.FRAMING,to:this._conn.domain,version:"1.0"})}_checkStreamError(e,t){let n;if(n=e.getElementsByTagNameNS?e.getElementsByTagNameNS(i.d.NS.STREAM,"error"):e.getElementsByTagName("stream:error"),0===n.length)return!1;const r=n[0];let o="",s="";for(let e=0;e<r.childNodes.length;e++){const t=r.childNodes[e];if("urn:ietf:params:xml:ns:xmpp-streams"!==t.getAttribute("xmlns"))break;"text"===t.nodeName?s=t.textContent:o=t.nodeName}let a="WebSocket stream error: ";return a+=o||"unknown",s&&(a+=" - "+s),i.d.error(a),this._conn._changeConnectStatus(t,o),this._conn._doDisconnect(),!0}_reset(){}_connect(){this._closeSocket(),this.socket=new r.b(this._conn.service,"xmpp"),this.socket.onopen=()=>this._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,i.d.Status.CONNFAIL))return i.d.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const n=e.getAttribute("xmlns");"string"!=typeof n?t="Missing xmlns in <open />":n!==i.d.NS.FRAMING&&(t="Wrong xmlns in <open />: "+n);const r=e.getAttribute("version");return"string"!=typeof r?t="Missing version in <open />":"1.0"!==r&&(t="Wrong version in <open />: "+r),!t||(this._conn._changeConnectStatus(i.d.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("<open ")||0===e.data.indexOf("<?xml")){const t=e.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===t)return;const n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(n),this._conn.rawInput(e.data),this._handleStreamStart(n)&&this._connect_cb(n)}else if(0===e.data.indexOf("<close ")){const t=(new r.a).parseFromString(e.data,"text/xml").documentElement;this._conn.xmlInput(t),this._conn.rawInput(e.data);const n=t.getAttribute("see-other-uri");if(n){const e=this._conn.service;(e.indexOf("wss:")>=0&&n.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(i.d.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=n,this._connect())}else this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),n=(new r.a).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(n,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==r.b.CLOSED){e&&this._conn.send(e);const t=Object(i.a)("close",{xmlns:i.d.NS.FRAMING});this._conn.xmlOutput(t.tree());const n=i.d.serialize(t);this._conn.rawOutput(n);try{this.socket.send(n)}catch(e){i.d.warn("Couldn't send <close /> tag.")}}setTimeout(()=>this._conn._doDisconnect,0)}_doDisconnect(){i.d.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return"<wrapper>"+e+"</wrapper>"}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){i.d.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(i.d.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(i.d.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):i.d.debug("Websocket closed")}_no_auth_received(e){i.d.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(i.d.Status.CONNFAIL,i.d.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){i.d.error("Websocket error "+e),this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t<e.length;t++)if(null!==e[t]){let n;n="restart"===e[t]?this._buildStream().tree():e[t];const r=i.d.serialize(n);this._conn.xmlOutput(n),this._conn.rawOutput(r),this.socket.send(r)}this._conn._data=[]}}_onMessage(e){let t;const n='<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />';if(e.data===n)return this._conn.rawInput(n),this._conn.xmlInput(e),void(this._conn.disconnecting||this._conn._doDisconnect());if(0===e.data.search("<open ")){if(t=(new r.a).parseFromString(e.data,"text/xml").documentElement,!this._handleStreamStart(t))return}else{const n=this._streamWrap(e.data);t=(new r.a).parseFromString(n,"text/xml").documentElement}return this._checkStreamError(t,i.d.Status.ERROR)?void 0:this._conn.disconnecting&&"presence"===t.firstChild.nodeName&&"unavailable"===t.firstChild.getAttribute("type")?(this._conn.xmlInput(t),void this._conn.rawInput(i.d.serialize(t))):void this._conn._dataRecv(t,e.data)}_onOpen(){i.d.debug("Websocket open");const e=this._buildStream();this._conn.xmlOutput(e.tree());const t=i.d.serialize(e);this._conn.rawOutput(t),this.socket.send(t)}_reqToData(e){return e}_send(){this._conn.flush()}_sendRestart(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}}},function(e,t,n){"use strict";t.a=function(){return!1}},function(e,t,n){"use strict";(function(e){var r=n(6),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===i?r.a.Buffer:void 0,a=s?s.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var n=e.length,r=a?a(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(69)(e))},function(e,t,n){e.exports=function(){"use strict";return function(e,t,n){var r=t.prototype,i=r.format;n.en.ordinal=function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"},r.format=function(e){var t=this,n=this.$locale(),r=this.$utils(),o=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|gggg|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return n.ordinal(t.$D);case"gggg":return t.weekYear();case"wo":return n.ordinal(t.week(),"W");case"w":case"ww":return r.s(t.week(),"w"===e?1:2,"0");case"k":case"kk":return r.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();default:return e}}));return i.bind(this)(o)}}}()},function(e,t,n){var r=n(332),i=n(70);e.exports=function(e,t,n){var o=null==e?0:e.length;return o?(t=n||void 0===t?1:i(t),r(e,t<0?0:t,o)):[]}},function(e,t,n){var r=n(25),i=n(23);e.exports=function(e){return!0===e||!1===e||i(e)&&"[object Boolean]"==r(e)}},function(e,t){e.exports=function(e){return null==e}},function(e,t,n){var r=n(73),i=n(385),o=n(438),s=n(440);e.exports=function(e,t){if(null==e)return{};var n=r(s(e),(function(e){return[e]}));return t=i(t),o(e,n,(function(e,n){return t(e,n[0])}))}},function(e,t,n){var r=n(102),i=n(134),o=n(29),s=n(114),a=n(443);e.exports=function(e){if(null==e)return 0;if(o(e))return s(e)?a(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(139),o=(r=i)&&r.__esModule?r:{default:r};t.default=(0,o.default)("webExtensionSyncStorage","sync")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(139),o=(r=i)&&r.__esModule?r:{default:r};t.default=(0,o.default)("webExtensionLocalStorage","local")},function(e,t,n){"use strict";(function(t){!function(t){var n=/^(b|B)$/,r={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function o(e){var t,o,s,a,c,l,u,d,h,f,p,g,m,v,_,b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},y=[],w=0,S=void 0,x=void 0;if(isNaN(e))throw new TypeError("Invalid number");return o=!0===b.bits,p=!0===b.unix,t=b.base||2,f=void 0!==b.round?b.round:p?1:2,l=void 0!==b.locale?b.locale:"",u=b.localeOptions||{},g=void 0!==b.separator?b.separator:"",m=void 0!==b.spacer?b.spacer:p?"":" ",_=b.symbols||{},v=2===t&&b.standard||"jedec",h=b.output||"string",a=!0===b.fullform,c=b.fullforms instanceof Array?b.fullforms:[],S=void 0!==b.exponent?b.exponent:-1,s=2<t?1e3:1024,(d=(x=Number(e))<0)&&(x=-x),(-1===S||isNaN(S))&&(S=Math.floor(Math.log(x)/Math.log(s)))<0&&(S=0),8<S&&(S=8),"exponent"===h?S:(0===x?(y[0]=0,y[1]=p?"":r[v][o?"bits":"bytes"][S]):(w=x/(2===t?Math.pow(2,10*S):Math.pow(1e3,S)),o&&s<=(w*=8)&&S<8&&(w/=s,S++),y[0]=Number(w.toFixed(0<S?f:0)),y[0]===s&&S<8&&void 0===b.exponent&&(y[0]=1,S++),y[1]=10===t&&1===S?o?"kb":"kB":r[v][o?"bits":"bytes"][S],p&&(y[1]="jedec"===v?y[1].charAt(0):0<S?y[1].replace(/B$/,""):y[1],n.test(y[1])&&(y[0]=Math.floor(y[0]),y[1]=""))),d&&(y[0]=-y[0]),y[1]=_[y[1]]||y[1],!0===l?y[0]=y[0].toLocaleString():0<l.length?y[0]=y[0].toLocaleString(l,u):0<g.length&&(y[0]=y[0].toString().replace(".",g)),"array"===h?y:(a&&(y[1]=c[S]?c[S]:i[v][S]+(o?"bit":"byte")+(1===y[0]?"":"s")),"object"===h?{value:y[0],symbol:y[1],exponent:S}:y.join(m)))}o.partial=function(e){return function(t){return o(t,e)}},e.exports=o}("undefined"!=typeof window&&window)}).call(this,n(12))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/form_captcha.html --\x3e\n",e.label&&(t+="\n<label>\n    "+n(e.label)+"\n</label>\n"),t+='\n<img src="data:'+n(e.type)+";base64,"+n(e.data)+'">\n<input name="'+n(e.name)+'" type="text" ',e.required&&(t+=' required="required" '),t+=" />\n\n\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/form_checkbox.html --\x3e\n<div class="form-group">\n    <input id="'+n(e.id)+'" name="'+n(e.name)+'" type="checkbox" '+n(e.checked)+" ",e.required&&(t+=" required "),t+=' />\n    <label class="form-check-label" for="'+n(e.id)+'">'+n(e.label)+"</label>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t,n="",i=r.escape;Array.prototype.join;return n+='\x3c!-- src/templates/form_select.html --\x3e\n<div class="form-group">\n    <label for="'+i(e.id)+'">'+i(e.label)+'</label>\n    <select class="form-control" id="'+i(e.id)+'" name="'+i(e.name)+'" ',e.multiple&&(n+=' multiple="multiple" '),n+=">"+(null==(t=e.options)?"":t)+"</select>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;return t+='\x3c!-- src/templates/form_textarea.html --\x3e\n<label class="label-ta">'+n(e.label)+'</label>\n<textarea name="'+n(e.name)+'">'+n(e.value)+"</textarea>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;return t+="\x3c!-- src/templates/form_url.html --\x3e\n<label>\n    "+n(e.label)+'\n    <a class="form-url" target="_blank" rel="noopener" href="'+n(e.value)+'">'+n(e.value)+"</a>\n</label>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/select_option.html --\x3e\n<option value="'+n(e.value)+'" ',e.selected&&(t+=' selected="selected" '),t+=" >"+n(e.label)+"</option>\n"}},function(e,t,n){"use strict";(function(t){!function(t){var n=/^(b|B)$/,r={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},i={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function o(e){var t,o,s,a,c,l,u,d,h,f,p,g,m,v,_,b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},y=[],w=0,S=void 0,x=void 0;if(isNaN(e))throw new TypeError("Invalid number");return o=!0===b.bits,p=!0===b.unix,t=b.base||2,f=void 0!==b.round?b.round:p?1:2,l=void 0!==b.locale?b.locale:"",u=b.localeOptions||{},g=void 0!==b.separator?b.separator:"",m=void 0!==b.spacer?b.spacer:p?"":" ",_=b.symbols||{},v=2===t&&b.standard||"jedec",h=b.output||"string",a=!0===b.fullform,c=b.fullforms instanceof Array?b.fullforms:[],S=void 0!==b.exponent?b.exponent:-1,s=2<t?1e3:1024,(d=(x=Number(e))<0)&&(x=-x),(-1===S||isNaN(S))&&(S=Math.floor(Math.log(x)/Math.log(s)))<0&&(S=0),8<S&&(S=8),"exponent"===h?S:(0===x?(y[0]=0,y[1]=p?"":r[v][o?"bits":"bytes"][S]):(w=x/(2===t?Math.pow(2,10*S):Math.pow(1e3,S)),o&&s<=(w*=8)&&S<8&&(w/=s,S++),y[0]=Number(w.toFixed(0<S?f:0)),y[0]===s&&S<8&&void 0===b.exponent&&(y[0]=1,S++),y[1]=10===t&&1===S?o?"kb":"kB":r[v][o?"bits":"bytes"][S],p&&(y[1]="jedec"===v?y[1].charAt(0):0<S?y[1].replace(/B$/,""):y[1],n.test(y[1])&&(y[0]=Math.floor(y[0]),y[1]=""))),d&&(y[0]=-y[0]),y[1]=_[y[1]]||y[1],!0===l?y[0]=y[0].toLocaleString():0<l.length?y[0]=y[0].toLocaleString(l,u):0<g.length&&(y[0]=y[0].toString().replace(".",g)),"array"===h?y:(a&&(y[1]=c[S]?c[S]:i[v][S]+(o?"bit":"byte")+(1===y[0]?"":"s")),"object"===h?{value:y[0],symbol:y[1],exponent:S}:y.join(m)))}o.partial=function(e){return function(t){return o(t,e)}},e.exports=o}("undefined"!=typeof window&&window)}).call(this,n(12))},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="";return t+='\x3c!-- src/plugins/controlbox/templates/toggle.html --\x3e\n<span class="toggle-feedback">'+(0,r.escape)(e.label_toggle)+"</span>\n"}},function(e,t,n){n(8);e.exports=function(e){return'\x3c!-- src/templates/dragresize.html --\x3e\n<div class="dragresize dragresize-top"></div>\n<div class="dragresize dragresize-topleft"></div>\n<div class="dragresize dragresize-left"></div>\n','\x3c!-- src/templates/dragresize.html --\x3e\n<div class="dragresize dragresize-top"></div>\n<div class="dragresize dragresize-topleft"></div>\n<div class="dragresize dragresize-left"></div>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/room_description.html --\x3e\n\x3c!-- FIXME: check markup in mockup --\x3e\n<div class="room-info">\n<p class="room-info"><strong>'+n(e.label_jid)+"</strong> "+n(e.jid)+'</p>\n<p class="room-info"><strong>'+n(e.label_desc)+"</strong> "+n(e.desc)+'</p>\n<p class="room-info"><strong>'+n(e.label_occ)+"</strong> "+n(e.occ)+'</p>\n<p class="room-info"><strong>'+n(e.label_features)+"</strong>\n    <ul>\n        ",e.passwordprotected&&(t+='\n        <li class="room-info locked">'+n(e.label_requires_auth)+"</li>\n        "),t+="\n        ",e.hidden&&(t+='\n        <li class="room-info">'+n(e.label_hidden)+"</li>\n        "),t+="\n        ",e.membersonly&&(t+='\n        <li class="room-info">'+n(e.label_requires_invite)+"</li>\n        "),t+="\n        ",e.moderated&&(t+='\n        <li class="room-info">'+n(e.label_moderated)+"</li>\n        "),t+="\n        ",e.nonanonymous&&(t+='\n        <li class="room-info">'+n(e.label_non_anon)+"</li>\n        "),t+="\n        ",e.open&&(t+='\n        <li class="room-info">'+n(e.label_open_room)+"</li>\n        "),t+="\n        ",e.persistent&&(t+='\n        <li class="room-info">'+n(e.label_permanent_room)+"</li>\n        "),t+="\n        ",e.publicroom&&(t+='\n        <li class="room-info">'+n(e.label_public)+"</li>\n        "),t+="\n        ",e.semianonymous&&(t+='\n        <li class="room-info">'+n(e.label_semi_anon)+"</li>\n        "),t+="\n        ",e.temporary&&(t+='\n        <li class="room-info">'+n(e.label_temp_room)+"</li>\n        "),t+="\n        ",e.unmoderated&&(t+='\n        <li class="room-info">'+n(e.label_unmoderated)+"</li>\n        "),t+="\n    </ul>\n</p>\n</div>\n"}},function(e,t,n){var r,i;
+/**
+ * @license MIT or GPL-2.0
+ * @fileOverview Favico animations
+ * @author Miroslav Magda, http://blog.ejci.net
+ * @source: https://github.com/ejci/favico.js
+ * @version 0.3.10
+ */i=function(e){"use strict";e=e||{};var t,n,r,i,o,s,a,c,l,u,d,h,f,p,g={bgColor:"#d00",textColor:"#fff",fontFamily:"sans-serif",fontStyle:"bold",type:"circle",position:"down",animation:"slide",elementId:!1,element:null,dataUrl:!1,win:window};(h={}).ff="undefined"!=typeof InstallTrigger,h.chrome=!!window.chrome,h.opera=!!window.opera||navigator.userAgent.indexOf("Opera")>=0,h.ie=/*@cc_on!@*/!1,h.safari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,h.supported=h.chrome||h.ff||h.opera;var m=[];d=function(){},c=!1;var v={ready:function(){c=!0,v.reset(),d()},reset:function(){c&&(m=[],l=!1,u=!1,s.clearRect(0,0,i,r),s.drawImage(a,0,0,i,r),y.setIcon(o),window.clearTimeout(f),window.clearTimeout(void 0))},start:function(){if(c&&!u&&m.length>0){u=!0;var e=function(){["type","animation","bgColor","textColor","fontFamily","fontStyle"].forEach((function(e){e in m[0].options&&(t[e]=m[0].options[e])})),x.run(m[0].options,(function(){l=m[0],u=!1,m.length>0&&(m.shift(),v.start())}),!1)};l?x.run(l.options,(function(){e()}),!0):e()}}},_={},b=function(e){return e.n="number"==typeof e.n?Math.abs(0|e.n):e.n,e.x=i*e.x,e.y=r*e.y,e.w=i*e.w,e.h=r*e.h,e.len=(""+e.n).length,e};_.circle=function(e){var n=!1;2===(e=b(e)).len?(e.x=e.x-.4*e.w,e.w=1.4*e.w,n=!0):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w,n=!0),s.clearRect(0,0,i,r),s.drawImage(a,0,0,i,r),s.beginPath(),s.font=t.fontStyle+" "+Math.floor(e.h*(e.n>99?.85:1))+"px "+t.fontFamily,s.textAlign="center",n?(s.moveTo(e.x+e.w/2,e.y),s.lineTo(e.x+e.w-e.h/2,e.y),s.quadraticCurveTo(e.x+e.w,e.y,e.x+e.w,e.y+e.h/2),s.lineTo(e.x+e.w,e.y+e.h-e.h/2),s.quadraticCurveTo(e.x+e.w,e.y+e.h,e.x+e.w-e.h/2,e.y+e.h),s.lineTo(e.x+e.h/2,e.y+e.h),s.quadraticCurveTo(e.x,e.y+e.h,e.x,e.y+e.h-e.h/2),s.lineTo(e.x,e.y+e.h/2),s.quadraticCurveTo(e.x,e.y,e.x+e.h/2,e.y)):s.arc(e.x+e.w/2,e.y+e.h/2,e.h/2,0,2*Math.PI),s.fillStyle="rgba("+t.bgColor.r+","+t.bgColor.g+","+t.bgColor.b+","+e.o+")",s.fill(),s.closePath(),s.beginPath(),s.stroke(),s.fillStyle="rgba("+t.textColor.r+","+t.textColor.g+","+t.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?s.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):s.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),s.closePath()},_.rectangle=function(e){2===(e=b(e)).len?(e.x=e.x-.4*e.w,e.w=1.4*e.w):e.len>=3&&(e.x=e.x-.65*e.w,e.w=1.65*e.w),s.clearRect(0,0,i,r),s.drawImage(a,0,0,i,r),s.beginPath(),s.font=t.fontStyle+" "+Math.floor(e.h*(e.n>99?.9:1))+"px "+t.fontFamily,s.textAlign="center",s.fillStyle="rgba("+t.bgColor.r+","+t.bgColor.g+","+t.bgColor.b+","+e.o+")",s.fillRect(e.x,e.y,e.w,e.h),s.fillStyle="rgba("+t.textColor.r+","+t.textColor.g+","+t.textColor.b+","+e.o+")","number"==typeof e.n&&e.n>999?s.fillText((e.n>9999?9:Math.floor(e.n/1e3))+"k+",Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.2*e.h)):s.fillText(e.n,Math.floor(e.x+e.w/2),Math.floor(e.y+e.h-.15*e.h)),s.closePath()};var y={};function w(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,n,r){return t+t+n+n+r+r}));var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return!!t&&{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}}function S(e,t){var n,r={};for(n in e)r[n]=e[n];for(n in t)r[n]=t[n];return r}y.getIcons=function(){var e=[];return t.element?e=[t.element]:t.elementId?(e=[p.getElementById(t.elementId)])[0].setAttribute("href",e[0].getAttribute("src")):0===(e=function(){for(var e=[],t=p.getElementsByTagName("head")[0].getElementsByTagName("link"),n=0;n<t.length;n++)/(^|\s)icon(\s|$)/i.test(t[n].getAttribute("rel"))&&e.push(t[n]);return e}()).length&&((e=[p.createElement("link")])[0].setAttribute("rel","icon"),p.getElementsByTagName("head")[0].appendChild(e[0])),e.forEach((function(e){e.setAttribute("type","image/png")})),e},y.setIcon=function(e){var t=e.toDataURL("image/png");y.setIconSrc(t)},y.setIconSrc=function(e){if(t.dataUrl&&t.dataUrl(e),t.element)t.element.setAttribute("href",e),t.element.setAttribute("src",e);else if(t.elementId){var r=p.getElementById(t.elementId);r.setAttribute("href",e),r.setAttribute("src",e)}else if(h.ff||h.opera){var i=n[n.length-1],o=p.createElement("link");n=[o],h.opera&&o.setAttribute("rel","icon"),o.setAttribute("rel","icon"),o.setAttribute("type","image/png"),p.getElementsByTagName("head")[0].appendChild(o),o.setAttribute("href",e),i.parentNode&&i.parentNode.removeChild(i)}else n.forEach((function(t){t.setAttribute("href",e)}))};var x={duration:40,types:{}};return x.types.fade=[{x:.4,y:.4,w:.6,h:.6,o:0},{x:.4,y:.4,w:.6,h:.6,o:.1},{x:.4,y:.4,w:.6,h:.6,o:.2},{x:.4,y:.4,w:.6,h:.6,o:.3},{x:.4,y:.4,w:.6,h:.6,o:.4},{x:.4,y:.4,w:.6,h:.6,o:.5},{x:.4,y:.4,w:.6,h:.6,o:.6},{x:.4,y:.4,w:.6,h:.6,o:.7},{x:.4,y:.4,w:.6,h:.6,o:.8},{x:.4,y:.4,w:.6,h:.6,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],x.types.none=[{x:.4,y:.4,w:.6,h:.6,o:1}],x.types.pop=[{x:1,y:1,w:0,h:0,o:1},{x:.9,y:.9,w:.1,h:.1,o:1},{x:.8,y:.8,w:.2,h:.2,o:1},{x:.7,y:.7,w:.3,h:.3,o:1},{x:.6,y:.6,w:.4,h:.4,o:1},{x:.5,y:.5,w:.5,h:.5,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],x.types.popFade=[{x:.75,y:.75,w:0,h:0,o:0},{x:.65,y:.65,w:.1,h:.1,o:.2},{x:.6,y:.6,w:.2,h:.2,o:.4},{x:.55,y:.55,w:.3,h:.3,o:.6},{x:.5,y:.5,w:.4,h:.4,o:.8},{x:.45,y:.45,w:.5,h:.5,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],x.types.slide=[{x:.4,y:1,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.8,w:.6,h:.6,o:1},{x:.4,y:.7,w:.6,h:.6,o:1},{x:.4,y:.6,w:.6,h:.6,o:1},{x:.4,y:.5,w:.6,h:.6,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],x.run=function(e,n,r,i){var s=x.types[p.hidden||p.msHidden||p.webkitHidden||p.mozHidden?"none":t.animation];i=!0===r?void 0!==i?i:s.length-1:void 0!==i?i:0,n=n||function(){},i<s.length&&i>=0?(_[t.type](S(e,s[i])),f=setTimeout((function(){r?i-=1:i+=1,x.run(e,n,r,i)}),x.duration),y.setIcon(o)):n()},function(){(t=S(g,e)).bgColor=w(t.bgColor),t.textColor=w(t.textColor),t.position=t.position.toLowerCase(),t.animation=x.types[""+t.animation]?t.animation:g.animation,p=t.win.document;var c=t.position.indexOf("up")>-1,l=t.position.indexOf("left")>-1;if(c||l)for(var u in x.types)for(var d=0;d<x.types[u].length;d++){var h=x.types[u][d];c&&(h.y<.6?h.y=h.y-.4:h.y=h.y-2*h.y+(1-h.w)),l&&(h.x<.6?h.x=h.x-.4:h.x=h.x-2*h.x+(1-h.h)),x.types[u][d]=h}t.type=_[""+t.type]?t.type:g.type,n=y.getIcons(),o=document.createElement("canvas"),a=document.createElement("img");var f=n[n.length-1];f.hasAttribute("href")?(a.setAttribute("crossOrigin","anonymous"),a.onload=function(){r=a.height>0?a.height:32,i=a.width>0?a.width:32,o.height=r,o.width=i,s=o.getContext("2d"),v.ready()},a.setAttribute("src",f.getAttribute("href"))):(r=32,i=32,a.height=r,a.width=i,o.height=r,o.width=i,s=o.getContext("2d"),v.ready())}(),{badge:function(e,t){t=("string"==typeof t?{animation:t}:t)||{},d=function(){try{if("number"==typeof e?e>0:""!==e){var n={type:"badge",options:{n:e}};if("animation"in t&&x.types[""+t.animation]&&(n.options.animation=""+t.animation),"type"in t&&_[""+t.type]&&(n.options.type=""+t.type),["bgColor","textColor"].forEach((function(e){e in t&&(n.options[e]=w(t[e]))})),["fontStyle","fontFamily"].forEach((function(e){e in t&&(n.options[e]=t[e])})),m.push(n),m.length>100)throw new Error("Too many badges requests in queue.");v.start()}else v.reset()}catch(e){throw new Error("Error setting badge. Message: "+e.message)}},c&&d()},setOpt:function(e,n){var r=e;null==n&&"[object Object]"==Object.prototype.toString.call(e)||((r={})[e]=n);for(var i=Object.keys(r),o=0;o<i.length;o++)"bgColor"==i[o]||"textColor"==i[o]?t[i[o]]=w(r[i[o]]):t[i[o]]=r[i[o]];m.push(l),v.start()},reset:v.reset,browser:{supported:h.supported}}},void 0===(r=function(){return i}.apply(t,[]))||(e.exports=r)},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/register_panel.html --\x3e\n<div>\n    <form id="converse-register" class="converse-form">\n        <legend class="col-form-label">'+n(e.__("Create your account"))+'</legend>\n\n        <div class="form-group">\n            <label>'+n(e.__("Please enter the XMPP provider to register with:"))+'</label>\n            <div class="form-errors hidden"></div>\n\n            ',e.default_domain?t+="\n                "+n(e.default_domain)+"\n            </div>\n            ":t+='\n                <input class="form-control" required="required" type="text" name="domain" placeholder="'+n(e.domain_placeholder)+'"/>\n                <p class="form-text text-muted">'+n(e.help_providers)+' <a href="'+n(e.href_providers)+'" class="url" target="_blank" rel="noopener">'+n(e.help_providers_link)+'</a>.</p>\n            </div>\n            <fieldset class="buttons">\n                <input class="btn btn-primary" type="submit" value="'+n(e.label_register)+'"/>\n                <div class="switch-form">\n                    <p>'+n(e.__("Already have a chat account?"))+'</p>\n                    <p><a class="login-here toggle-register-login" href="#converse/login">'+n(e.__("Log in here"))+"</a></p>\n                </div>\n            </fieldset>\n            ",t+="\n        \x3c!--</div>--\x3e\n    </form>\n</div>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/registration_form.html --\x3e\n<legend class="col-form-label">'+n(e.__("Account Registration:"))+" "+n(e.domain)+'</legend>\n<p class="title">'+n(e.title)+'</p>\n<p class="form-help instructions">'+n(e.instructions)+'</p>\n<div class="form-errors hidden"></div>\n\n<fieldset class="buttons">\n    <input type="submit" class="btn btn-primary" value="'+n(e.__("Register"))+'"/>\n    ',e.registration_domain||(t+='\n        <input type="button" class="btn btn-secondary button-cancel" value="'+n(e.__("Choose a different provider"))+'"/>\n    '),t+='\n    <div class="switch-form">\n        <p>'+n(e.__("Already have a chat account?"))+'</p>\n        <p><a class="login-here toggle-register-login" href="#converse/login">'+n(e.__("Log in here"))+"</a></p>\n    </div>\n</fieldset>\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/registration_request.html --\x3e\n<span class="spinner login-submit fa fa-spinner"></span>\n<p class="info">'+n(e.__("Hold tight, we're fetching the registration form…"))+"</p>\n",e.cancel&&(t+='\n    <button class="btn btn-secondary button-cancel hor_centered">'+n(e.__("Cancel"))+"</button>\n"),t+="\n"}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/group_header.html --\x3e\n<a href="#" class="list-toggle group-toggle controlbox-padded" title="'+n(e.desc_group_toggle)+'">\n    <span class="fa ',e.toggle_state===e._converse.OPENED?t+=" fa-caret-down ":t+=" fa-caret-right ",t+='">\n    </span> '+n(e.label_group)+'</a>\n<ul class="items-list roster-group-contacts ',e.toggle_state===e._converse.CLOSED&&(t+=" collapsed "),t+='"></ul>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/pending_contact.html --\x3e\n",e.allow_chat_pending_contacts&&(t+='\n<a class="list-item-link open-chat w-100" href="#">\n'),t+='\n<span class="pending-contact-name" title="JID: '+n(e.jid)+'">'+n(e.display_name)+"</span> \n",e.allow_chat_pending_contacts&&(t+="</a>"),t+='\n<a class="list-item-action remove-xmpp-contact far fa-trash-alt" title="'+n(e.desc_remove)+'" href="#"></a>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+="\x3c!-- src/templates/requesting_contact.html --\x3e\n",e.allow_chat_pending_contacts&&(t+='\n<a class="open-chat w-100"href="#">\n'),t+='\n<span class="req-contact-name w-100" title="JID: '+n(e.jid)+'">'+n(e.display_name)+"</span>\n",e.allow_chat_pending_contacts&&(t+="\n</a>\n"),t+='\n<a class="accept-xmpp-request list-item-action list-item-action--visible fa fa-check"\n   aria-label="'+n(e.desc_accept)+'" title="'+n(e.desc_accept)+'" href="#"></a>\n<a class="decline-xmpp-request list-item-action list-item-action--visible  fa fa-times"\n   aria-label="'+n(e.desc_decline)+'" title="'+n(e.desc_decline)+'" href="#"></a>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/roster.html --\x3e\n<div class="d-flex controlbox-padded">\n    <span class="w-100 controlbox-heading controlbox-heading--contacts">'+n(e.heading_contacts)+'</span>\n    <a class="controlbox-heading__btn sync-contacts fa fa-sync" title="'+n(e.title_sync_contacts)+'"></a>\n    ',e.allow_contact_requests&&(t+='\n        <a class="controlbox-heading__btn add-contact fa fa-user-plus"\n           title="'+n(e.title_add_contact)+'"\n           data-toggle="modal"\n           data-target="#add-contact-modal"></a>\n    '),t+='\n</div>\n\n<form class="roster-filter-form"></form>\n\n<div class="list-container roster-contacts"></div>\n'}},function(e,t,n){var r={escape:n(8)};e.exports=function(e){var t="",n=r.escape;Array.prototype.join;return t+='\x3c!-- src/templates/roster_item.html --\x3e\n<a class="list-item-link cbox-list-item open-chat w-100 ',e.num_unread&&(t+=" unread-msgs "),t+='"\n   title="'+n(e.desc_chat)+'" href="#">\n\n    <canvas class="avatar" height="30" width="30"></canvas>\n    <span class="'+n(e.status_icon)+'" title="'+n(e.desc_status)+'"></span>\n    ',e.num_unread&&(t+=' <span class="msgs-indicator">'+n(e.num_unread)+"</span> "),t+='\n    <span class="contact-name contact-name--'+n(e.show)+" ",e.num_unread&&(t+=" unread-msgs "),t+='">'+n(e.display_name)+"</span>\n</a>\n",e.allow_contact_removal&&(t+='\n<a class="list-item-action remove-xmpp-contact far fa-trash-alt" title="'+n(e.desc_remove)+'" href="#"></a>\n'),t+="\n"}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);const r={},i={plugins:{add(e,t){if(void 0!==r[e])throw new TypeError('Error: plugin with name "'.concat(e,'" has already been ')+"registered!");r[e]=t}},initialize(e={}){i.load(e).initialize(e)},load:(e={})=>(e.assets_path&&(n.p=e.assets_path),n(506),Object.keys(r).forEach(e=>i.plugins.add(e,r[e])),i)};window.converse=i,t.default=i},function(e,t){function n(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}"function"!=typeof window.CustomEvent&&(n.prototype=window.Event.prototype,window.CustomEvent=n),String.prototype.includes||(String.prototype.includes=function(e,t){"use strict";return"number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){const n=this.toString();(void 0===t||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return-1!==r&&r===t}),String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return t=t||0,this.substr(t,e.length)===e}),String.prototype.splitOnce||(String.prototype.splitOnce=function(e){const t=this.split(e);return[t.shift(),t.join(e)]}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")})},function(e,t,n){"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},function(e,t){var n=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,r=new RegExp("[\\-\\.0-9"+n.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),i=new RegExp("^"+n.source+r.source+"*(?::"+n.source+r.source+"*)?$");function o(){}function s(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function a(e,t,n,r,i,o){for(var s,a=++t,c=0;;){var l=e.charAt(a);switch(l){case"=":if(1===c)s=e.slice(t,a),c=3;else{if(2!==c)throw new Error("attribute equal must after attrName");c=3}break;case"'":case'"':if(3===c||1===c){if(1===c&&(o.warning('attribute value must after "="'),s=e.slice(t,a)),t=a+1,!((a=e.indexOf(l,t))>0))throw new Error("attribute value no end '"+l+"' match");u=e.slice(t,a).replace(/&#?\w+;/g,i),n.add(s,u,t-1),c=5}else{if(4!=c)throw new Error('attribute value must after "="');u=e.slice(t,a).replace(/&#?\w+;/g,i),n.add(s,u,t),o.warning('attribute "'+s+'" missed start quot('+l+")!!"),t=a+1,c=5}break;case"/":switch(c){case 0:n.setTagName(e.slice(t,a));case 5:case 6:case 7:c=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return o.error("unexpected end of input"),0==c&&n.setTagName(e.slice(t,a)),a;case">":switch(c){case 0:n.setTagName(e.slice(t,a));case 5:case 6:case 7:break;case 4:case 1:"/"===(u=e.slice(t,a)).slice(-1)&&(n.closed=!0,u=u.slice(0,-1));case 2:2===c&&(u=s),4==c?(o.warning('attribute "'+u+'" missed quot(")!!'),n.add(s,u.replace(/&#?\w+;/g,i),t)):("http://www.w3.org/1999/xhtml"===r[""]&&u.match(/^(?:disabled|checked|selected)$/i)||o.warning('attribute "'+u+'" missed value!! "'+u+'" instead!!'),n.add(u,u,t));break;case 3:throw new Error("attribute value missed!!")}return a;case"€":l=" ";default:if(l<=" ")switch(c){case 0:n.setTagName(e.slice(t,a)),c=6;break;case 1:s=e.slice(t,a),c=2;break;case 4:var u=e.slice(t,a).replace(/&#?\w+;/g,i);o.warning('attribute "'+u+'" missed quot(")!!'),n.add(s,u,t);case 5:c=6}else switch(c){case 2:n.tagName;"http://www.w3.org/1999/xhtml"===r[""]&&s.match(/^(?:disabled|checked|selected)$/i)||o.warning('attribute "'+s+'" missed value!! "'+s+'" instead2!!'),n.add(s,s,t),t=a,c=1;break;case 5:o.warning('attribute space is required"'+s+'"!!');case 6:c=1,t=a;break;case 3:c=4,t=a;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}a++}}function c(e,t,n){for(var r=e.tagName,i=null,o=e.length;o--;){var s=e[o],a=s.qName,c=s.value;if((f=a.indexOf(":"))>0)var l=s.prefix=a.slice(0,f),u=a.slice(f+1),h="xmlns"===l&&u;else u=a,l=null,h="xmlns"===a&&"";s.localName=u,!1!==h&&(null==i&&(i={},d(n,n={})),n[h]=i[h]=c,s.uri="http://www.w3.org/2000/xmlns/",t.startPrefixMapping(h,c))}for(o=e.length;o--;){(l=(s=e[o]).prefix)&&("xml"===l&&(s.uri="http://www.w3.org/XML/1998/namespace"),"xmlns"!==l&&(s.uri=n[l||""]))}var f;(f=r.indexOf(":"))>0?(l=e.prefix=r.slice(0,f),u=e.localName=r.slice(f+1)):(l=null,u=e.localName=r);var p=e.uri=n[l||""];if(t.startElement(p,u,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(p,u,r),i)for(l in i)t.endPrefixMapping(l)}function l(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var o=e.indexOf("</"+n+">",t),s=e.substring(t+1,o);if(/[&<]/.test(s))return/^script$/i.test(n)?(i.characters(s,0,s.length),o):(s=s.replace(/&#?\w+;/g,r),i.characters(s,0,s.length),o)}return t+1}function u(e,t,n,r){var i=r[n];return null==i&&((i=e.lastIndexOf("</"+n+">"))<t&&(i=e.lastIndexOf("</"+n)),r[n]=i),i<t}function d(e,t){for(var n in e)t[n]=e[n]}function h(e,t,n,r){switch(e.charAt(t+2)){case"-":return"-"===e.charAt(t+3)?(i=e.indexOf("--\x3e",t+4))>t?(n.comment(e,t+4,i-t-4),i+3):(r.error("Unclosed comment"),-1):-1;default:if("CDATA["==e.substr(t+3,6)){var i=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,i-t-9),n.endCDATA(),i+3}var o=function(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;i.lastIndex=t,i.exec(e);for(;n=i.exec(e);)if(r.push(n),n[1])return r}(e,t),s=o.length;if(s>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],c=s>3&&/^public$/i.test(o[2][0])&&o[3][0],l=s>4&&o[4][0],u=o[s-1];return n.startDTD(a,c&&c.replace(/^(['"])(.*?)\1$/,"$2"),l&&l.replace(/^(['"])(.*?)\1$/,"$2")),n.endDTD(),u.index+u[0].length}}return-1}function f(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(i){i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function p(e){}function g(e,t){return e.__proto__=t,e}o.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),d(t,t={}),function(e,t,n,r,i){function o(e){var t=e.slice(1,-1);return t in n?n[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function d(t){if(t>S){var n=e.substring(S,t).replace(/&#?\w+;/g,o);b&&g(S),r.characters(n,0,t-S),S=t}}function g(t,n){for(;t>=v&&(n=_.exec(e));)m=n.index,v=m+n[0].length,b.lineNumber++;b.columnNumber=t-m+1}var m=0,v=0,_=/.*(?:\r\n?|\n)|.*$/g,b=r.locator,y=[{currentNSMap:t}],w={},S=0;for(;;){try{var x=e.indexOf("<",S);if(x<0){if(!e.substr(S).match(/^\s*$/)){var E=r.doc,A=E.createTextNode(e.substr(S));E.appendChild(A),r.currentElement=A}return}switch(x>S&&d(x),e.charAt(x+1)){case"/":var C=e.indexOf(">",x+3),j=e.substring(x+2,C),T=y.pop();C<0?(j=e.substring(x+2).replace(/[\s<].*/,""),i.error("end tag name: "+j+" is not complete:"+T.tagName),C=x+1+j.length):j.match(/\s</)&&(j=j.replace(/[\s<].*/,""),i.error("end tag name: "+j+" maybe not complete"),C=x+1+j.length);var O=T.localNSMap,k=T.tagName==j;if(k||T.tagName&&T.tagName.toLowerCase()==j.toLowerCase()){if(r.endElement(T.uri,T.localName,j),O)for(var N in O)r.endPrefixMapping(N);k||i.fatalError("end tag name: "+j+" is not match the current start tagName:"+T.tagName)}else y.push(T);C++;break;case"?":b&&g(x),C=f(e,x,r);break;case"!":b&&g(x),C=h(e,x,r,i);break;default:b&&g(x);var I=new p,M=y[y.length-1].currentNSMap,R=(C=a(e,x,I,M,o,i),I.length);if(!I.closed&&u(e,C,I.tagName,w)&&(I.closed=!0,n.nbsp||i.warning("unclosed xml attribute")),b&&R){for(var D=s(b,{}),P=0;P<R;P++){var L=I[P];g(L.offset),L.locator=s(b,{})}r.locator=D,c(I,r,M)&&y.push(I),r.locator=b}else c(I,r,M)&&y.push(I);"http://www.w3.org/1999/xhtml"!==I.uri||I.closed?C++:C=l(e,C,I.tagName,o,r)}}catch(e){i.error("element parse error: "+e),C=-1}C>S?S=C:d(Math.max(x,S)+1)}}(e,t,n,r,this.errorHandler),r.endDocument()}},p.prototype={setTagName:function(e){if(!i.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},add:function(e,t,n){if(!i.test(e))throw new Error("invalid attribute:"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},g({},g.prototype)instanceof g||(g=function(e,t){function n(){}for(t in n.prototype=t,n=new n,e)n[t]=e[t];return n}),t.XMLReader=o},function(e,t,n){"use strict";function r(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e);return t<0?void 0:t}e.exports=function(e){if((e=(e=""+e).replace(/[ \t\n\f\r]/g,"")).length%4==0&&(e=e.replace(/==?$/,"")),e.length%4==1||/[^+/0-9A-Za-z]/.test(e))return null;let t="",n=0,i=0;for(let o=0;o<e.length;o++)n<<=6,n|=r(e[o]),i+=6,24===i&&(t+=String.fromCharCode((16711680&n)>>16),t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n),n=i=0);return 12===i?(n>>=4,t+=String.fromCharCode(n)):18===i&&(n>>=2,t+=String.fromCharCode((65280&n)>>8),t+=String.fromCharCode(255&n)),t}},function(e,t,n){"use strict";function r(e){if(e>=0&&e<64)return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[e]}e.exports=function(e){let t;for(e=""+e,t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return null;let n="";for(t=0;t<e.length;t+=3){const i=[void 0,void 0,void 0,void 0];i[0]=e.charCodeAt(t)>>2,i[1]=(3&e.charCodeAt(t))<<4,e.length>t+1&&(i[1]|=e.charCodeAt(t+1)>>4,i[2]=(15&e.charCodeAt(t+1))<<2),e.length>t+2&&(i[2]|=e.charCodeAt(t+2)>>6,i[3]=63&e.charCodeAt(t+2));for(let e=0;e<i.length;e++)void 0===i[e]?n+="=":n+=r(i[e])}return n}},function(e,t){e.exports=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r<i;)o[r]=e[r+t];return o}},function(e,t,n){var r=n(334);e.exports=function(e){return e?(e=r(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},function(e,t,n){var r=n(20),i=n(48),o=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=a.test(e);return n||c.test(e)?l(e.slice(2),n?2:8):s.test(e)?NaN:+e}},function(e,t,n){var r=n(49),i=Object.prototype,o=i.hasOwnProperty,s=i.toString,a=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,a),n=e[a];try{e[a]=void 0;var r=!0}catch(e){}var i=s.call(e);return r&&(t?e[a]=n:delete e[a]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r=n(97),i=n(338),o=n(350),s=n(16);e.exports=function(e,t){return(s(e)?r:i)(e,o(t))}},function(e,t,n){var r=n(339),i=n(349)(r);e.exports=i},function(e,t,n){var r=n(340),i=n(33);e.exports=function(e,t){return e&&r(e,t,i)}},function(e,t,n){var r=n(341)();e.exports=r},function(e,t){e.exports=function(e){return function(t,n,r){for(var i=-1,o=Object(t),s=r(t),a=s.length;a--;){var c=s[e?a:++i];if(!1===n(o[c],c,o))break}return t}}},function(e,t){e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},function(e,t,n){var r=n(25),i=n(23);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var r=n(25),i=n(71),o=n(23),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&i(e.length)&&!!s[r(e)]}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t,n){(function(e){var r=n(96),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===i&&r.process,a=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=a}).call(this,n(46)(e))},function(e,t,n){var r=n(104)(Object.keys,Object);e.exports=r},function(e,t,n){var r=n(29);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var o=n.length,s=t?o:-1,a=Object(n);(t?s--:++s<o)&&!1!==i(a[s],s,a););return n}}},function(e,t,n){var r=n(38);e.exports=function(e){return"function"==typeof e?e:r}},function(e,t,n){var r=n(352),i=n(357),o=n(112),s=i((function(e,t){r(t,o(t),e)}));e.exports=s},function(e,t,n){var r=n(105),i=n(106);e.exports=function(e,t,n,o){var s=!n;n||(n={});for(var a=-1,c=t.length;++a<c;){var l=t[a],u=o?o(n[l],e[l],l,n,e):void 0;void 0===u&&(u=e[l]),s?i(n,l,u):r(n,l,u)}return n}},function(e,t,n){var r=n(62),i=n(354),o=n(20),s=n(108),a=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,d=l.hasOwnProperty,h=RegExp("^"+u.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||i(e))&&(r(e)?h:a).test(s(e))}},function(e,t,n){var r,i=n(355),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!o&&o in e}},function(e,t,n){var r=n(11)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(109),i=n(361);e.exports=function(e){return r((function(t,n){var r=-1,o=n.length,s=o>1?n[o-1]:void 0,a=o>2?n[2]:void 0;for(s=e.length>3&&"function"==typeof s?(o--,s):void 0,a&&i(n[0],n[1],a)&&(s=o<3?void 0:s,o=1),t=Object(t);++r<o;){var c=n[r];c&&e(t,c,r,s)}return t}))}},function(e,t,n){var r=n(72),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var o=arguments,s=-1,a=i(o.length-t,0),c=Array(a);++s<a;)c[s]=o[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=o[s];return l[t]=n(c),r(e,this,l)}}},function(e,t,n){var r=n(360),i=n(107),o=n(38),s=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:o;e.exports=s},function(e,t){e.exports=function(e){return function(){return e}}},function(e,t,n){var r=n(50),i=n(29),o=n(37),s=n(20);e.exports=function(e,t,n){if(!s(n))return!1;var a=typeof t;return!!("number"==a?i(n)&&o(t,n.length):"string"==a&&t in n)&&r(n[t],e)}},function(e,t,n){var r=n(20),i=n(103),o=n(363),s=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=i(e),n=[];for(var a in e)("constructor"!=a||!t&&s.call(e,a))&&n.push(a);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t){e.exports=function(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},function(e,t,n){var r=n(73);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},function(e,t,n){var r=n(115),i=n(369),o=n(370),s=n(118),a=n(383),c=n(122),l=n(384),u=n(125),d=n(126),h=n(70),f=Math.max;e.exports=function(e,t,n,p,g,m,v,_){var b=2&t;if(!b&&"function"!=typeof e)throw new TypeError("Expected a function");var y=p?p.length:0;if(y||(t&=-97,p=g=void 0),v=void 0===v?v:f(h(v),0),_=void 0===_?_:h(_),y-=g?g.length:0,64&t){var w=p,S=g;p=g=void 0}var x=b?void 0:c(e),E=[e,t,n,p,g,w,S,m,v,_];if(x&&l(E,x),e=E[0],t=E[1],n=E[2],p=E[3],g=E[4],!(_=E[9]=void 0===E[9]?b?0:e.length:f(E[9]-y,0))&&24&t&&(t&=-25),t&&1!=t)A=8==t||16==t?o(e,t,_):32!=t&&33!=t||g.length?s.apply(void 0,E):a(e,t,n,p);else var A=i(e,t,n);return d((x?r:u)(A,E),e,t)}},function(e,t,n){var r=n(51),i=n(11);e.exports=function(e,t,n){var o=1&t,s=r(e);return function t(){var r=this&&this!==i&&this instanceof t?s:e;return r.apply(o?n:this,arguments)}}},function(e,t,n){var r=n(72),i=n(51),o=n(118),s=n(121),a=n(77),c=n(52),l=n(11);e.exports=function(e,t,n){var u=i(e);return function i(){for(var d=arguments.length,h=Array(d),f=d,p=a(i);f--;)h[f]=arguments[f];var g=d<3&&h[0]!==p&&h[d-1]!==p?[]:c(h,p);if((d-=g.length)<n)return s(e,t,o,i.placeholder,void 0,h,g,void 0,void 0,n-d);var m=this&&this!==l&&this instanceof i?u:e;return r(m,this,h)}}},function(e,t){e.exports=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}},function(e,t,n){var r=n(75),i=n(122),o=n(374),s=n(376);e.exports=function(e){var t=o(e),n=s[t];if("function"!=typeof n||!(t in r.prototype))return!1;if(e===n)return!0;var a=i(n);return!!a&&e===a[0]}},function(e,t){e.exports=function(){}},function(e,t,n){var r=n(375),i=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+"",n=r[t],o=i.call(r,t)?n.length:0;o--;){var s=n[o],a=s.func;if(null==a||a==e)return s.name}return t}},function(e,t){e.exports={}},function(e,t,n){var r=n(75),i=n(123),o=n(76),s=n(16),a=n(23),c=n(377),l=Object.prototype.hasOwnProperty;function u(e){if(a(e)&&!s(e)&&!(e instanceof r)){if(e instanceof i)return e;if(l.call(e,"__wrapped__"))return c(e)}return new i(e)}u.prototype=o.prototype,u.prototype.constructor=u,e.exports=u},function(e,t,n){var r=n(75),i=n(123),o=n(124);e.exports=function(e){if(e instanceof r)return e.clone();var t=new i(e.__wrapped__,e.__chain__);return t.__actions__=o(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},function(e,t){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;e.exports=function(e){var t=e.match(n);return t?t[1].split(r):[]}},function(e,t){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;e.exports=function(e,t){var r=t.length;if(!r)return e;var i=r-1;return t[i]=(r>1?"& ":"")+t[i],t=t.join(r>2?", ":" "),e.replace(n,"{\n/* [wrapped with "+t+"] */\n")}},function(e,t,n){var r=n(97),i=n(381),o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];e.exports=function(e,t){return r(o,(function(n){var r="_."+n[0];t&n[1]&&!i(e,r)&&e.push(r)})),e.sort()}},function(e,t,n){var r=n(113);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(124),i=n(37),o=Math.min;e.exports=function(e,t){for(var n=e.length,s=o(t.length,n),a=r(e);s--;){var c=t[s];e[s]=i(c,n)?a[c]:void 0}return e}},function(e,t,n){var r=n(72),i=n(51),o=n(11);e.exports=function(e,t,n,s){var a=1&t,c=i(e);return function t(){for(var i=-1,l=arguments.length,u=-1,d=s.length,h=Array(d+l),f=this&&this!==o&&this instanceof t?c:e;++u<d;)h[u]=s[u];for(;l--;)h[u++]=arguments[++i];return r(f,a?n:this,h)}}},function(e,t,n){var r=n(119),i=n(120),o=n(52),s=Math.min;e.exports=function(e,t){var n=e[1],a=t[1],c=n|a,l=c<131,u=128==a&&8==n||128==a&&256==n&&e[7].length<=t[8]||384==a&&t[7].length<=t[8]&&8==n;if(!l&&!u)return e;1&a&&(e[2]=t[2],c|=1&n?0:4);var d=t[3];if(d){var h=e[3];e[3]=h?r(h,d,t[4]):d,e[4]=h?o(e[3],"__lodash_placeholder__"):t[4]}return(d=t[5])&&(h=e[5],e[5]=h?i(h,d,t[6]):d,e[6]=h?o(e[5],"__lodash_placeholder__"):t[6]),(d=t[7])&&(e[7]=d),128&a&&(e[8]=null==e[8]?t[8]:s(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=c,e}},function(e,t,n){var r=n(386),i=n(427),o=n(38),s=n(16),a=n(436);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?s(e)?i(e[0],e[1]):r(e):a(e)}},function(e,t,n){var r=n(387),i=n(426),o=n(136);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(127),i=n(128);e.exports=function(e,t,n,o){var s=n.length,a=s,c=!o;if(null==e)return!a;for(e=Object(e);s--;){var l=n[s];if(c&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++s<a;){var u=(l=n[s])[0],d=e[u],h=l[1];if(c&&l[2]){if(void 0===d&&!(u in e))return!1}else{var f=new r;if(o)var p=o(d,h,u,e,t,f);if(!(void 0===p?i(h,d,3,o,f):p))return!1}}return!0}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(54),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},function(e,t,n){var r=n(54);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(54);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(54);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(53);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(53),i=n(78),o=n(79);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length<199)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new o(s)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(399),i=n(53),o=n(78);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(e,t,n){var r=n(400),i=n(401),o=n(402),s=n(403),a=n(404);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=s,c.prototype.set=a,e.exports=c},function(e,t,n){var r=n(55);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(55),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(55),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(55);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t,n){var r=n(56);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(56);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(56);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(56);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(127),i=n(129),o=n(416),s=n(420),a=n(134),c=n(16),l=n(100),u=n(101),d="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,f,p,g){var m=c(e),v=c(t),_=m?"[object Array]":a(e),b=v?"[object Array]":a(t),y=(_="[object Arguments]"==_?d:_)==d,w=(b="[object Arguments]"==b?d:b)==d,S=_==b;if(S&&l(e)){if(!l(t))return!1;m=!0,y=!1}if(S&&!y)return g||(g=new r),m||u(e)?i(e,t,n,f,p,g):o(e,t,_,n,f,p,g);if(!(1&n)){var x=y&&h.call(e,"__wrapped__"),E=w&&h.call(t,"__wrapped__");if(x||E){var A=x?e.value():e,C=E?t.value():t;return g||(g=new r),p(A,C,n,f,g)}}return!!S&&(g||(g=new r),s(e,t,n,f,p,g))}},function(e,t,n){var r=n(79),i=n(412),o=n(413);function s(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}s.prototype.add=s.prototype.push=i,s.prototype.has=o,e.exports=s},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t,n){var r=n(49),i=n(417),o=n(50),s=n(129),a=n(418),c=n(419),l=r?r.prototype:void 0,u=l?l.valueOf:void 0;e.exports=function(e,t,n,r,l,d,h){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var f=a;case"[object Set]":var p=1&r;if(f||(f=c),e.size!=t.size&&!p)return!1;var g=h.get(e);if(g)return g==t;r|=2,h.set(e,t);var m=s(f(e),f(t),r,l,d,h);return h.delete(e),m;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},function(e,t,n){var r=n(11).Uint8Array;e.exports=r},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},function(e,t,n){var r=n(421),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,o,s,a){var c=1&n,l=r(e),u=l.length;if(u!=r(t).length&&!c)return!1;for(var d=u;d--;){var h=l[d];if(!(c?h in t:i.call(t,h)))return!1}var f=a.get(e),p=a.get(t);if(f&&p)return f==t&&p==e;var g=!0;a.set(e,t),a.set(t,e);for(var m=c;++d<u;){var v=e[h=l[d]],_=t[h];if(o)var b=c?o(_,v,h,t,e,a):o(v,_,h,e,t,a);if(!(void 0===b?v===_||s(v,_,n,o,a):b)){g=!1;break}m||(m="constructor"==h)}if(g&&!m){var y=e.constructor,w=t.constructor;y==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof w&&w instanceof w||(g=!1)}return a.delete(e),a.delete(t),g}},function(e,t,n){var r=n(130),i=n(132),o=n(33);e.exports=function(e){return r(e,o,i)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var s=e[n];t(s,n,e)&&(o[i++]=s)}return o}},function(e,t,n){var r=n(26)(n(11),"DataView");e.exports=r},function(e,t,n){var r=n(26)(n(11),"Promise");e.exports=r},function(e,t,n){var r=n(26)(n(11),"Set");e.exports=r},function(e,t,n){var r=n(135),i=n(33);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var o=t[n],s=e[o];t[n]=[o,s,r(s)]}return t}},function(e,t,n){var r=n(128),i=n(428),o=n(433),s=n(81),a=n(135),c=n(136),l=n(39);e.exports=function(e,t){return s(e)&&a(t)?c(l(e),t):function(n){var s=i(n,e);return void 0===s&&s===t?o(n,e):r(t,s,3)}}},function(e,t,n){var r=n(80);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(430),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,s=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(o,"$1"):n||e)})),t}));e.exports=s},function(e,t,n){var r=n(431);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},function(e,t,n){var r=n(79);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){var r=n(49),i=n(73),o=n(16),s=n(48),a=r?r.prototype:void 0,c=a?a.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return i(t,e)+"";if(s(t))return c?c.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t,n){var r=n(434),i=n(435);e.exports=function(e,t){return null!=e&&i(e,t,r)}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var r=n(57),i=n(99),o=n(16),s=n(37),a=n(71),c=n(39);e.exports=function(e,t,n){for(var l=-1,u=(t=r(t,e)).length,d=!1;++l<u;){var h=c(t[l]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++l!=u?d:!!(u=null==e?0:e.length)&&a(u)&&s(h,u)&&(o(e)||i(e))}},function(e,t,n){var r=n(138),i=n(437),o=n(81),s=n(39);e.exports=function(e){return o(e)?r(s(e)):i(e)}},function(e,t,n){var r=n(80);e.exports=function(e){return function(t){return r(t,e)}}},function(e,t,n){var r=n(80),i=n(439),o=n(57);e.exports=function(e,t,n){for(var s=-1,a=t.length,c={};++s<a;){var l=t[s],u=r(e,l);n(u,l)&&i(c,o(l,e),u)}return c}},function(e,t,n){var r=n(105),i=n(57),o=n(37),s=n(20),a=n(39);e.exports=function(e,t,n,c){if(!s(e))return e;for(var l=-1,u=(t=i(t,e)).length,d=u-1,h=e;null!=h&&++l<u;){var f=a(t[l]),p=n;if("__proto__"===f||"constructor"===f||"prototype"===f)return e;if(l!=d){var g=h[f];void 0===(p=c?c(g,f,h):void 0)&&(p=s(g)?g:o(t[l+1])?[]:{})}r(h,f,p),h=h[f]}return e}},function(e,t,n){var r=n(130),i=n(441),o=n(112);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(131),i=n(442),o=n(132),s=n(133),a=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,o(e)),e=i(e);return t}:s;e.exports=a},function(e,t,n){var r=n(104)(Object.getPrototypeOf,Object);e.exports=r},function(e,t,n){var r=n(444),i=n(445),o=n(446);e.exports=function(e){return i(e)?o(e):r(e)}},function(e,t,n){var r=n(138)("length");e.exports=r},function(e,t){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},function(e,t){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^\\ud800-\\udfff]",s="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",c="(?:"+r+"|"+i+")"+"?",l="[\\ufe0e\\ufe0f]?"+c+("(?:\\u200d(?:"+[o,s,a].join("|")+")[\\ufe0e\\ufe0f]?"+c+")*"),u="(?:"+[o+r+"?",r,s,a,n].join("|")+")",d=RegExp(i+"(?="+i+")|"+u+l,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},function(e,t,n){"use strict";t.__esModule=!0;var r,i=n(448),o=(r=i)&&r.__esModule?r:{default:r};t.default=function(e,t,n){return t in e?(0,o.default)(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){e.exports={default:n(449),__esModule:!0}},function(e,t,n){n(450);var r=n(19).Object;e.exports=function(e,t,n){return r.defineProperty(e,t,n)}},function(e,t,n){var r=n(30);r(r.S+r.F*!n(32),"Object",{defineProperty:n(40).f})},function(e,t,n){e.exports=!n(32)&&!n(82)((function(){return 7!=Object.defineProperty(n(83)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var r=n(41);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){e.exports={default:n(454),__esModule:!0}},function(e,t,n){n(455),e.exports=n(19).Object.keys},function(e,t,n){var r=n(141),i=n(142);n(460)("keys",(function(){return function(e){return i(r(e))}}))},function(e,t,n){var r=n(60),i=n(85),o=n(458)(!1),s=n(87)("IE_PROTO");e.exports=function(e,t){var n,a=i(e),c=0,l=[];for(n in a)n!=s&&r(a,n)&&l.push(n);for(;t.length>c;)r(a,n=t[c++])&&(~o(l,n)||l.push(n));return l}},function(e,t,n){var r=n(61);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(85),i=n(143),o=n(459);e.exports=function(e){return function(t,n,s){var a,c=r(t),l=i(c.length),u=o(s,l);if(e&&n!=n){for(;l>u;)if((a=c[u++])!=a)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},function(e,t,n){var r=n(86),i=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?i(e+t,0):o(e,t)}},function(e,t,n){var r=n(30),i=n(19),o=n(82);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],s={};s[e]=t(n),r(r.S+r.F*o((function(){n(1)})),"Object",s)}},function(e,t,n){e.exports=n(462)},function(e,t,n){var r=function(){return this}()||Function("return this")(),i=r.regeneratorRuntime&&Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime")>=0,o=i&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n(463),i)r.regeneratorRuntime=o;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}},function(e,t){!function(t){"use strict";var n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag",c="object"==typeof e,l=t.regeneratorRuntime;if(l)c&&(e.exports=l);else{(l=t.regeneratorRuntime=c?e.exports:{}).wrap=g;var u={},d={};d[o]=function(){return this};var h=Object.getPrototypeOf,f=h&&h(h(C([])));f&&f!==n&&r.call(f,o)&&(d=f);var p=b.prototype=v.prototype=Object.create(d);_.prototype=p.constructor=b,b.constructor=_,b[a]=_.displayName="GeneratorFunction",l.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},l.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,a in e||(e[a]="GeneratorFunction")),e.prototype=Object.create(p),e},l.awrap=function(e){return{__await:e}},y(w.prototype),w.prototype[s]=function(){return this},l.AsyncIterator=w,l.async=function(e,t,n,r){var i=new w(g(e,t,n,r));return l.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},y(p),p[a]="Generator",p[o]=function(){return this},p.toString=function(){return"[object Generator]"},l.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},l.values=C,A.prototype={constructor:A,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,r){return s.type="throw",s.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],s=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var a=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(a&&c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(a){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,u):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;E(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}}}function g(e,t,n,r){var i=t&&t.prototype instanceof v?t:v,o=Object.create(i.prototype),s=new A(r||[]);return o._invoke=function(e,t,n){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return j()}for(n.method=i,n.arg=o;;){var s=n.delegate;if(s){var a=S(s,n);if(a){if(a===u)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=m(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===u)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,s),o}function m(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function v(){}function _(){}function b(){}function y(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function w(e){var t;this._invoke=function(n,i){function o(){return new Promise((function(t,o){!function t(n,i,o,s){var a=m(e[n],e,i);if("throw"!==a.type){var c=a.arg,l=c.value;return l&&"object"==typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then((function(e){t("next",e,o,s)}),(function(e){t("throw",e,o,s)})):Promise.resolve(l).then((function(e){c.value=e,o(c)}),s)}s(a.arg)}(n,i,t,o)}))}return t=t?t.then(o,o):o()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var r=m(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,u;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function C(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:j}}function j(){return{value:void 0,done:!0}}}(function(){return this}()||Function("return this")())},function(e,t,n){"use strict";t.__esModule=!0;var r,i=n(89),o=(r=i)&&r.__esModule?r:{default:r};t.default=function(e){return function(){var t=e.apply(this,arguments);return new o.default((function(e,n){return function r(i,s){try{var a=t[i](s),c=a.value}catch(e){return void n(e)}if(!a.done)return o.default.resolve(c).then((function(e){r("next",e)}),(function(e){r("throw",e)}));e(c)}("next")}))}}},function(e,t,n){n(466),n(467),n(474),n(478),n(490),n(491),e.exports=n(19).Promise},function(e,t){},function(e,t,n){"use strict";var r=n(468)(!0);n(147)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t,n){var r=n(86),i=n(84);e.exports=function(e){return function(t,n){var o,s,a=String(i(t)),c=r(n),l=a.length;return c<0||c>=l?e?"":void 0:(o=a.charCodeAt(c))<55296||o>56319||c+1===l||(s=a.charCodeAt(c+1))<56320||s>57343?e?a.charAt(c):o:e?a.slice(c,c+2):s-56320+(o-55296<<10)+65536}}},function(e,t,n){e.exports=n(31)},function(e,t,n){"use strict";var r=n(471),i=n(140),o=n(90),s={};n(31)(s,n(17)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(s,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(27),i=n(472),o=n(146),s=n(87)("IE_PROTO"),a=function(){},c=function(){var e,t=n(83)("iframe"),r=o.length;for(t.style.display="none",n(148).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;r--;)delete c.prototype[o[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(a.prototype=r(e),n=new a,a.prototype=null,n[s]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var r=n(40),i=n(27),o=n(142);e.exports=n(32)?Object.defineProperties:function(e,t){i(e);for(var n,s=o(t),a=s.length,c=0;a>c;)r.f(e,n=s[c++],t[n]);return e}},function(e,t,n){var r=n(60),i=n(141),o=n(87)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t,n){n(475);for(var r=n(13),i=n(31),o=n(42),s=n(17)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c<a.length;c++){var l=a[c],u=r[l],d=u&&u.prototype;d&&!d[s]&&i(d,s,l),o[l]=o.Array}},function(e,t,n){"use strict";var r=n(476),i=n(477),o=n(42),s=n(85);e.exports=n(147)(Array,"Array",(function(e,t){this._t=s(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):i(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){"use strict";var r,i,o,s,a=n(88),c=n(13),l=n(58),u=n(149),d=n(30),h=n(41),f=n(59),p=n(479),g=n(480),m=n(150),v=n(151).set,_=n(485)(),b=n(91),y=n(152),w=n(486),S=n(153),x=c.TypeError,E=c.process,A=E&&E.versions,C=A&&A.v8||"",j=c.Promise,T="process"==u(E),O=function(){},k=i=b.f,N=!!function(){try{var e=j.resolve(1),t=(e.constructor={})[n(17)("species")]=function(e){e(O,O)};return(T||"function"==typeof PromiseRejectionEvent)&&e.then(O)instanceof t&&0!==C.indexOf("6.6")&&-1===w.indexOf("Chrome/66")}catch(e){}}(),I=function(e){var t;return!(!h(e)||"function"!=typeof(t=e.then))&&t},M=function(e,t){if(!e._n){e._n=!0;var n=e._c;_((function(){for(var r=e._v,i=1==e._s,o=0,s=function(t){var n,o,s,a=i?t.ok:t.fail,c=t.resolve,l=t.reject,u=t.domain;try{a?(i||(2==e._h&&P(e),e._h=1),!0===a?n=r:(u&&u.enter(),n=a(r),u&&(u.exit(),s=!0)),n===t.promise?l(x("Promise-chain cycle")):(o=I(n))?o.call(n,c,l):c(n)):l(r)}catch(e){u&&!s&&u.exit(),l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&R(e)}))}},R=function(e){v.call(c,(function(){var t,n,r,i=e._v,o=D(e);if(o&&(t=y((function(){T?E.emit("unhandledRejection",i,e):(n=c.onunhandledrejection)?n({promise:e,reason:i}):(r=c.console)&&r.error&&r.error("Unhandled promise rejection",i)})),e._h=T||D(e)?2:1),e._a=void 0,o&&t.e)throw t.v}))},D=function(e){return 1!==e._h&&0===(e._a||e._c).length},P=function(e){v.call(c,(function(){var t;T?E.emit("rejectionHandled",e):(t=c.onrejectionhandled)&&t({promise:e,reason:e._v})}))},L=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),M(t,!0))},z=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw x("Promise can't be resolved itself");(t=I(e))?_((function(){var r={_w:n,_d:!1};try{t.call(e,l(z,r,1),l(L,r,1))}catch(e){L.call(r,e)}})):(n._v=e,n._s=1,M(n,!1))}catch(e){L.call({_w:n,_d:!1},e)}}};N||(j=function(e){p(this,j,"Promise","_h"),f(e),r.call(this);try{e(l(z,this,1),l(L,this,1))}catch(e){L.call(this,e)}},(r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(487)(j.prototype,{then:function(e,t){var n=k(m(this,j));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=T?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&M(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new r;this.promise=e,this.resolve=l(z,e,1),this.reject=l(L,e,1)},b.f=k=function(e){return e===j||e===s?new o(e):i(e)}),d(d.G+d.W+d.F*!N,{Promise:j}),n(90)(j,"Promise"),n(488)("Promise"),s=n(19).Promise,d(d.S+d.F*!N,"Promise",{reject:function(e){var t=k(this);return(0,t.reject)(e),t.promise}}),d(d.S+d.F*(a||!N),"Promise",{resolve:function(e){return S(a&&this===s?j:this,e)}}),d(d.S+d.F*!(N&&n(489)((function(e){j.all(e).catch(O)}))),"Promise",{all:function(e){var t=this,n=k(t),r=n.resolve,i=n.reject,o=y((function(){var n=[],o=0,s=1;g(e,!1,(function(e){var a=o++,c=!1;n.push(void 0),s++,t.resolve(e).then((function(e){c||(c=!0,n[a]=e,--s||r(n))}),i)})),--s||r(n)}));return o.e&&i(o.v),n.promise},race:function(e){var t=this,n=k(t),r=n.reject,i=y((function(){g(e,!1,(function(e){t.resolve(e).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(58),i=n(481),o=n(482),s=n(27),a=n(143),c=n(483),l={},u={};(t=e.exports=function(e,t,n,d,h){var f,p,g,m,v=h?function(){return e}:c(e),_=r(n,d,t?2:1),b=0;if("function"!=typeof v)throw TypeError(e+" is not iterable!");if(o(v)){for(f=a(e.length);f>b;b++)if((m=t?_(s(p=e[b])[0],p[1]):_(e[b]))===l||m===u)return m}else for(g=v.call(e);!(p=g.next()).done;)if((m=i(g,_,p.value,t))===l||m===u)return m}).BREAK=l,t.RETURN=u},function(e,t,n){var r=n(27);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){var r=n(42),i=n(17)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){var r=n(149),i=n(17)("iterator"),o=n(42);e.exports=n(19).getIteratorMethod=function(e){if(null!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(13),i=n(151).set,o=r.MutationObserver||r.WebKitMutationObserver,s=r.process,a=r.Promise,c="process"==n(61)(s);e.exports=function(){var e,t,n,l=function(){var r,i;for(c&&(r=s.domain)&&r.exit();e;){i=e.fn,e=e.next;try{i()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(c)n=function(){s.nextTick(l)};else if(!o||r.navigator&&r.navigator.standalone)if(a&&a.resolve){var u=a.resolve(void 0);n=function(){u.then(l)}}else n=function(){i.call(r,l)};else{var d=!0,h=document.createTextNode("");new o(l).observe(h,{characterData:!0}),n=function(){h.data=d=!d}}return function(r){var i={fn:r,next:void 0};t&&(t.next=i),e||(e=i,n()),t=i}}},function(e,t,n){var r=n(13).navigator;e.exports=r&&r.userAgent||""},function(e,t,n){var r=n(31);e.exports=function(e,t,n){for(var i in t)n&&e[i]?e[i]=t[i]:r(e,i,t[i]);return e}},function(e,t,n){"use strict";var r=n(13),i=n(19),o=n(40),s=n(32),a=n(17)("species");e.exports=function(e){var t="function"==typeof i[e]?i[e]:r[e];s&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(17)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(e){}return n}},function(e,t,n){"use strict";var r=n(30),i=n(19),o=n(13),s=n(150),a=n(153);r(r.P+r.R,"Promise",{finally:function(e){var t=s(this,i.Promise||o.Promise),n="function"==typeof e;return this.then(n?function(n){return a(t,e()).then((function(){return n}))}:e,n?function(n){return a(t,e()).then((function(){throw n}))}:e)}})},function(e,t,n){"use strict";var r=n(30),i=n(91),o=n(152);r(r.S,"Promise",{try:function(e){var t=i.f(this),n=o(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(89),o=(r=i)&&r.__esModule?r:{default:r};function s(){return window.browser&&browser.storage||window.chrome&&chrome.storage}t.getStorage=s,t.usePromise=function(e,t){if(function(){var e=s();try{return e&&e.local.get&&e.local.get()&&"function"==typeof e.local.get().then}catch(e){return!1}}())return e(t);return new o.default((function(n){e(t,(function(){n.apply(void 0,arguments)}))}))}},function(e,t,n){"use strict";n(68);var r=n(0);const i={};i.debug=r.e.LogLevel.DEBUG,i.info=r.e.LogLevel.INFO,i.warn=r.e.LogLevel.WARN,i.error=r.e.LogLevel.ERROR,i.fatal=r.e.LogLevel.FATAL,r.e.WorkerWebsocket=class extends r.e.Websocket{constructor(e){super(e),this._conn=e,this.worker=new SharedWorker(this._conn.options.worker,"Strophe XMPP Connection"),this.worker.onerror=e=>{var t;null===(t=console)||void 0===t||t.error(e),r.e.log(r.e.LogLevel.ERROR,"Shared Worker Error: ".concat(e))}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===r.e.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(r.e.Status.ATTACHED)):e===r.e.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(r.e.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=Object(r.a)("close",{xmlns:r.e.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=r.e.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(r.e.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(r.e.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(r.e.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):r.e.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){r.e.log(r.e.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];r.e.log(i[e],n)}else r.e.log(r.e.LogLevel.ERROR,"Found unhandled service worker message: ".concat(t))}}},function(e,t,n){var r={"./af/LC_MESSAGES/converse.po":[507,139],"./ar/LC_MESSAGES/converse.po":[508,140],"./bg/LC_MESSAGES/converse.po":[509,141],"./ca/LC_MESSAGES/converse.po":[510,142],"./cs/LC_MESSAGES/converse.po":[511,143],"./da/LC_MESSAGES/converse.po":[512,144],"./de/LC_MESSAGES/converse.po":[513,147],"./eo/LC_MESSAGES/converse.po":[514,148],"./es/LC_MESSAGES/converse.po":[515,149],"./eu/LC_MESSAGES/converse.po":[516,150],"./fi/LC_MESSAGES/converse.po":[517,151],"./fr/LC_MESSAGES/converse.po":[518,152],"./gl/LC_MESSAGES/converse.po":[519,153],"./he/LC_MESSAGES/converse.po":[520,154],"./hi/LC_MESSAGES/converse.po":[521,155],"./hu/LC_MESSAGES/converse.po":[522,156],"./id/LC_MESSAGES/converse.po":[523,157],"./it/LC_MESSAGES/converse.po":[524,158],"./ja/LC_MESSAGES/converse.po":[525,159],"./lt/LC_MESSAGES/converse.po":[526,160],"./mr/LC_MESSAGES/converse.po":[527,161],"./nb/LC_MESSAGES/converse.po":[528,162],"./nl/LC_MESSAGES/converse.po":[529,163],"./nl_BE/LC_MESSAGES/converse.po":[530,164],"./oc/LC_MESSAGES/converse.po":[531,165],"./pl/LC_MESSAGES/converse.po":[532,166],"./pt/LC_MESSAGES/converse.po":[533,167],"./pt_BR/LC_MESSAGES/converse.po":[534,168],"./ro/LC_MESSAGES/converse.po":[535,169],"./ru/LC_MESSAGES/converse.po":[536,170],"./sv/LC_MESSAGES/converse.po":[537,171],"./th/LC_MESSAGES/converse.po":[538,172],"./tr/LC_MESSAGES/converse.po":[539,173],"./uk/LC_MESSAGES/converse.po":[540,174],"./vi/LC_MESSAGES/converse.po":[541,175],"./zh_CN/LC_MESSAGES/converse.po":[542,176],"./zh_TW/LC_MESSAGES/converse.po":[543,177]};function i(e){if(!n.o(r,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],i=t[0];return n.e(t[1]).then((function(){return n.t(i,3)}))}i.keys=function(){return Object.keys(r)},i.id=494,e.exports=i},function(e,t,n){var r={"./af":[189,0],"./af.js":[189,0],"./ar":[196,1],"./ar-dz":[190,2],"./ar-dz.js":[190,2],"./ar-kw":[191,3],"./ar-kw.js":[191,3],"./ar-ly":[192,4],"./ar-ly.js":[192,4],"./ar-ma":[193,5],"./ar-ma.js":[193,5],"./ar-sa":[194,6],"./ar-sa.js":[194,6],"./ar-tn":[195,7],"./ar-tn.js":[195,7],"./ar.js":[196,1],"./az":[197,8],"./az.js":[197,8],"./be":[198,9],"./be.js":[198,9],"./bg":[199,10],"./bg.js":[199,10],"./bi":[200,11],"./bi.js":[200,11],"./bm":[201,12],"./bm.js":[201,12],"./bn":[202,13],"./bn.js":[202,13],"./bo":[203,14],"./bo.js":[203,14],"./br":[204,15],"./br.js":[204,15],"./bs":[205,16],"./bs.js":[205,16],"./ca":[206,17],"./ca.js":[206,17],"./cs":[207,18],"./cs.js":[207,18],"./cv":[208,19],"./cv.js":[208,19],"./cy":[209,20],"./cy.js":[209,20],"./da":[210,21],"./da.js":[210,21],"./de":[213,22],"./de-at":[211,23],"./de-at.js":[211,23],"./de-ch":[212,24],"./de-ch.js":[212,24],"./de.js":[213,22],"./dv":[214,25],"./dv.js":[214,25],"./el":[215,26],"./el.js":[215,26],"./en":[225,27],"./en-SG":[216,28],"./en-SG.js":[216,28],"./en-au":[217,29],"./en-au.js":[217,29],"./en-ca":[218,30],"./en-ca.js":[218,30],"./en-gb":[219,31],"./en-gb.js":[219,31],"./en-ie":[220,32],"./en-ie.js":[220,32],"./en-il":[221,33],"./en-il.js":[221,33],"./en-in":[222,34],"./en-in.js":[222,34],"./en-nz":[223,35],"./en-nz.js":[223,35],"./en-tt":[224,36],"./en-tt.js":[224,36],"./en.js":[225,27],"./eo":[226,37],"./eo.js":[226,37],"./es":[230,38],"./es-do":[227,39],"./es-do.js":[227,39],"./es-pr":[228,40],"./es-pr.js":[228,40],"./es-us":[229,41],"./es-us.js":[229,41],"./es.js":[230,38],"./et":[231,42],"./et.js":[231,42],"./eu":[232,43],"./eu.js":[232,43],"./fa":[233,44],"./fa.js":[233,44],"./fi":[234,45],"./fi.js":[234,45],"./fo":[235,46],"./fo.js":[235,46],"./fr":[238,47],"./fr-ca":[236,48],"./fr-ca.js":[236,48],"./fr-ch":[237,49],"./fr-ch.js":[237,49],"./fr.js":[238,47],"./fy":[239,50],"./fy.js":[239,50],"./ga":[240,51],"./ga.js":[240,51],"./gd":[241,52],"./gd.js":[241,52],"./gl":[242,53],"./gl.js":[242,53],"./gom-latn":[243,54],"./gom-latn.js":[243,54],"./gu":[244,55],"./gu.js":[244,55],"./he":[245,56],"./he.js":[245,56],"./hi":[246,57],"./hi.js":[246,57],"./hr":[247,58],"./hr.js":[247,58],"./ht":[248,59],"./ht.js":[248,59],"./hu":[249,60],"./hu.js":[249,60],"./hy-am":[250,61],"./hy-am.js":[250,61],"./id":[251,62],"./id.js":[251,62],"./index.d.ts":[544,145],"./is":[252,63],"./is.js":[252,63],"./it":[254,64],"./it-ch":[253,65],"./it-ch.js":[253,65],"./it.js":[254,64],"./ja":[255,66],"./ja.js":[255,66],"./jv":[256,67],"./jv.js":[256,67],"./ka":[257,68],"./ka.js":[257,68],"./kk":[258,69],"./kk.js":[258,69],"./km":[259,70],"./km.js":[259,70],"./kn":[260,71],"./kn.js":[260,71],"./ko":[261,72],"./ko.js":[261,72],"./ku":[262,73],"./ku.js":[262,73],"./ky":[263,74],"./ky.js":[263,74],"./lb":[264,75],"./lb.js":[264,75],"./lo":[265,76],"./lo.js":[265,76],"./lt":[266,77],"./lt.js":[266,77],"./lv":[267,78],"./lv.js":[267,78],"./me":[268,79],"./me.js":[268,79],"./mi":[269,80],"./mi.js":[269,80],"./mk":[270,81],"./mk.js":[270,81],"./ml":[271,82],"./ml.js":[271,82],"./mn":[272,83],"./mn.js":[272,83],"./mr":[273,84],"./mr.js":[273,84],"./ms":[275,85],"./ms-my":[274,86],"./ms-my.js":[274,86],"./ms.js":[275,85],"./mt":[276,87],"./mt.js":[276,87],"./my":[277,88],"./my.js":[277,88],"./nb":[278,89],"./nb.js":[278,89],"./ne":[279,90],"./ne.js":[279,90],"./nl":[281,91],"./nl-be":[280,92],"./nl-be.js":[280,92],"./nl.js":[281,91],"./nn":[282,93],"./nn.js":[282,93],"./oc-lnc":[283,94],"./oc-lnc.js":[283,94],"./pa-in":[284,95],"./pa-in.js":[284,95],"./pl":[285,96],"./pl.js":[285,96],"./pt":[287,97],"./pt-br":[286,98],"./pt-br.js":[286,98],"./pt.js":[287,97],"./ro":[288,99],"./ro.js":[288,99],"./ru":[289,100],"./ru.js":[289,100],"./rw":[290,101],"./rw.js":[290,101],"./sd":[291,102],"./sd.js":[291,102],"./se":[292,103],"./se.js":[292,103],"./si":[293,104],"./si.js":[293,104],"./sk":[294,105],"./sk.js":[294,105],"./sl":[295,106],"./sl.js":[295,106],"./sq":[296,107],"./sq.js":[296,107],"./sr":[298,108],"./sr-cyrl":[297,109],"./sr-cyrl.js":[297,109],"./sr.js":[298,108],"./ss":[299,110],"./ss.js":[299,110],"./sv":[300,111],"./sv.js":[300,111],"./sw":[301,112],"./sw.js":[301,112],"./ta":[302,113],"./ta.js":[302,113],"./te":[303,114],"./te.js":[303,114],"./tet":[304,115],"./tet.js":[304,115],"./tg":[305,116],"./tg.js":[305,116],"./th":[306,117],"./th.js":[306,117],"./tk":[307,118],"./tk.js":[307,118],"./tl-ph":[308,119],"./tl-ph.js":[308,119],"./tlh":[309,120],"./tlh.js":[309,120],"./tr":[310,121],"./tr.js":[310,121],"./types.d.ts":[545,146],"./tzl":[311,122],"./tzl.js":[311,122],"./tzm":[313,123],"./tzm-latn":[312,124],"./tzm-latn.js":[312,124],"./tzm.js":[313,123],"./ug-cn":[314,125],"./ug-cn.js":[314,125],"./uk":[315,126],"./uk.js":[315,126],"./ur":[316,127],"./ur.js":[316,127],"./uz":[318,128],"./uz-latn":[317,129],"./uz-latn.js":[317,129],"./uz.js":[318,128],"./vi":[319,130],"./vi.js":[319,130],"./x-pseudo":[320,131],"./x-pseudo.js":[320,131],"./yo":[321,132],"./yo.js":[321,132],"./zh":[325,133],"./zh-cn":[322,134],"./zh-cn.js":[322,134],"./zh-hk":[323,135],"./zh-hk.js":[323,135],"./zh-tw":[324,136],"./zh-tw.js":[324,136],"./zh.js":[325,133]};function i(e){if(!n.o(r,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],i=t[0];return n.e(t[1]).then((function(){return n.t(i,7)}))}i.keys=function(){return Object.keys(r)},i.id=495,e.exports=i},function(e,t,n){var r=n(497)({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});e.exports=r},function(e,t){e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){"use strict";var r=n(9),i=n(2);i.d.Request=class{constructor(e,t,n,r){this.id=++i.d._requestId,this.xmlData=e,this.data=i.d.serialize(e),this.origFunc=t,this.func=t,this.rid=n,this.date=NaN,this.sends=r||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;return(new Date-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;return(new Date-this.dead)/1e3},this.xhr=this._newXHR()}getResponse(){let e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw i.d.error("invalid response received"),i.d.error("responseText: "+this.xhr.responseText),i.d.error("responseXML: "+i.d.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(i.d.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new r.a).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){i.d.error("invalid response received: "+e.querySelector("parsererror").textContent),i.d.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=i.d.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},i.d.Bosh=class e{constructor(e){this._conn=e,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const e=Object(i.a)("body",{rid:this.rid++,xmlns:i.d.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(e,t,n){this.wait=e||this.wait,this.hold=t||this.hold,this.errors=0;const r=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":i.d.NS.BOSH});n&&r.attrs({route:n});const o=this._conn._connect_cb;this._requests.push(new i.d.Request(r.tree(),this._onRequestStateChange.bind(this,o.bind(this._conn)),r.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,n,r,o,s,a){this._conn.jid=e,this.sid=t,this.rid=n,this._conn.connect_callback=r,this._conn.domain=i.d.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=o||this.wait,this.hold=s||this.hold,this.window=a||this.window,this._conn._changeConnectStatus(i.d.Status.ATTACHED,null)}_restore(e,t,n,r,o){const s=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=s&&s.rid&&s.sid&&s.jid&&(null==e||i.d.getBareJidFromJid(s.jid)===i.d.getBareJidFromJid(e)||null===i.d.getNodeFromJid(e)&&i.d.getDomainFromJid(s.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(s.jid,s.sid,s.rid,t,n,r,o)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");i.d.error("BOSH-Connection failed: "+t);const n=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&n.length>0&&(t="conflict"),this._conn._changeConnectStatus(i.d.Status.CONNFAIL,t)):this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),i.d.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const n=e.getAttribute("requests");n&&(this.window=parseInt(n,10));const r=e.getAttribute("hold");r&&(this.hold=parseInt(r,10));const o=e.getAttribute("wait");o&&(this.wait=parseInt(o,10));const s=e.getAttribute("inactivity");s&&(this.inactivity=parseInt(s,10))}_disconnect(e){this._sendTerminate(e)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(t){const n=e._getRequestStatus(t),r=this._conn.protocolErrorHandlers.HTTP[n];r&&r.call(this,n)}_hitError(e){this.errors++,i.d.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){i.d.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new i.d.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(i.d.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let n=0;n<e.length;n++)null!==e[n]&&("restart"===e[n]?t.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":i.d.NS.BOSH}):t.cnode(e[n]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new i.d.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}if(this._requests.length>0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(i.d.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(i.d.TIMEOUT*this.wait)&&(i.d.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(i.d.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let n;if(4===e.xhr.readyState)try{n=e.xhr.status}catch(e){i.d.error("Caught an error while retrieving a request's status, reqStatus: "+n)}return void 0===n&&(n="number"==typeof t?t:0),n}_onRequestStateChange(t,n){if(i.d.debug("request id "+n.id+"."+n.sends+" state changed to "+n.xhr.readyState),n.abort)return void(n.abort=!1);if(4!==n.xhr.readyState)return;const r=e._getRequestStatus(n);if(this.lastResponseHeaders=n.xhr.getAllResponseHeaders(),this._conn.disconnecting&&r>=400)return this._hitError(r),void this._callProtocolErrorHandlers(n);const o=r>0&&r<500,s=n.sends>this._conn.maxRetries;if((o||s)&&(this._removeRequest(n),i.d.debug("request id "+n.id+" should now be removed")),200===r){const e=this._requests[0]===n;(this._requests[1]===n||e&&this._requests.length>0&&this._requests[0].age()>Math.floor(i.d.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(n.rid)+1),i.d.debug("request id "+n.id+"."+n.sends+" got 200"),t(n),this.errors=0}else 0===r||r>=400&&r<600||r>=12e3?(i.d.error("request id "+n.id+"."+n.sends+" error "+r+" happened"),this._hitError(r),this._callProtocolErrorHandlers(n),r>=400&&r<500&&(this._conn._changeConnectStatus(i.d.Status.DISCONNECTING,null),this._conn._doDisconnect())):i.d.error("request id "+n.id+"."+n.sends+" error "+r+" happened");o||s?s&&!this._conn.connected&&this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let n=this._requests[t];const r=e._getRequestStatus(n,-1);if(n.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const o=n.age(),s=!isNaN(o)&&o>Math.floor(i.d.TIMEOUT*this.wait),a=null!==n.dead&&n.timeDead()>Math.floor(i.d.SECONDARY_TIMEOUT*this.wait),c=4===n.xhr.readyState&&(r<1||r>=500);if((s||a||c)&&(a&&i.d.error("Request ".concat(this._requests[t].id," timed out (secondary), restarting")),n.abort=!0,n.xhr.abort(),n.xhr.onreadystatechange=function(){},this._requests[t]=new i.d.Request(n.xmlData,n.origFunc,n.rid,n.sends),n=this._requests[t]),0===n.xhr.readyState){i.d.debug("request id "+n.id+"."+n.sends+" posting");try{const e=this._conn.options.contentType||"text/xml; charset=utf-8";n.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==n.xhr.setRequestHeader&&n.xhr.setRequestHeader("Content-Type",e),this._conn.options.withCredentials&&(n.xhr.withCredentials=!0)}catch(e){return i.d.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(i.d.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(n.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.xhr.setRequestHeader(t,e[t])}n.xhr.send(n.data)};if(n.sends>1){const t=1e3*Math.min(Math.floor(i.d.TIMEOUT*this.wait),Math.pow(n.sends,3));setTimeout((function(){e()}),t)}else e();n.sends++,this._conn.xmlOutput!==i.d.Connection.prototype.xmlOutput&&(n.xmlData.nodeName===this.strip&&n.xmlData.childNodes.length?this._conn.xmlOutput(n.xmlData.childNodes[0]):this._conn.xmlOutput(n.xmlData)),this._conn.rawOutput!==i.d.Connection.prototype.rawOutput&&this._conn.rawOutput(n.data)}else i.d.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+n.xhr.readyState)}_removeRequest(e){i.d.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){i.d.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const n=new i.d.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.tree().getAttribute("rid"));this._requests.push(n),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(()=>this._conn._onIdle(),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?i.d.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):i.d.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},i.d.Bosh.prototype.strip=null},function(e,t,n){"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},function(e,t,n){"use strict";n(158);var r=n(2);const i={};i.debug=r.d.LogLevel.DEBUG,i.info=r.d.LogLevel.INFO,i.warn=r.d.LogLevel.WARN,i.error=r.d.LogLevel.ERROR,i.fatal=r.d.LogLevel.FATAL,r.d.WorkerWebsocket=class extends r.d.Websocket{constructor(e){super(e),this._conn=e,this.worker=new SharedWorker(this._conn.options.worker,"Strophe XMPP Connection"),this.worker.onerror=e=>{var t;null===(t=console)||void 0===t||t.error(e),r.d.log(r.d.LogLevel.ERROR,"Shared Worker Error: ".concat(e))}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===r.d.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(r.d.Status.ATTACHED)):e===r.d.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(r.d.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const n=Object(r.a)("close",{xmlns:r.d.NS.FRAMING});this._conn.xmlOutput(n.tree());const i=r.d.serialize(n);this._conn.rawOutput(i),this.worker.port.postMessage(["send",i]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(r.d.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(r.d.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(r.d.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):r.d.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,n=t[0];if("_onMessage"===n)this._messageHandler(t[1]);else if(n in this)try{this[n].apply(this,e.data.slice(1))}catch(e){r.d.log(r.d.LogLevel.ERROR,e)}else if("log"===n){const e=t[1],n=t[2];r.d.log(i[e],n)}else r.d.log(r.d.LogLevel.ERROR,"Found unhandled service worker message: ".concat(t))}}},function(e,t,n){var r=n(502);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(504)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(t=n(503)(!0)).push([e.i,"","",{version:3,sources:[],names:[],mappings:"",file:"converse.scss"}]),e.exports=t},function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",r=e[3];if(!r)return n;if(t&&"function"==typeof btoa){var i=(s=r,a=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a),"/*# ".concat(c," */")),o=r.sources.map((function(e){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(e," */")}));return[n].concat(o).concat([i]).join("\n")}var s,a,c;return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(i[s]=!0)}for(var a=0;a<e.length;a++){var c=[].concat(e[a]);r&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},function(e,t,n){var r,i,o={},s=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===i&&(i=r.apply(this,arguments)),i}),a=function(e,t){return t?t.querySelector(e):document.querySelector(e)},c=function(e){var t={};return function(e,n){if("function"==typeof e)return e();if(void 0===t[e]){var r=a.call(this,e,n);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}}(),l=null,u=0,d=[],h=n(505);function f(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=o[r.id];if(i){i.refs++;for(var s=0;s<i.parts.length;s++)i.parts[s](r.parts[s]);for(;s<r.parts.length;s++)i.parts.push(b(r.parts[s],t))}else{var a=[];for(s=0;s<r.parts.length;s++)a.push(b(r.parts[s],t));o[r.id]={id:r.id,refs:1,parts:a}}}}function p(e,t){for(var n=[],r={},i=0;i<e.length;i++){var o=e[i],s=t.base?o[0]+t.base:o[0],a={css:o[1],media:o[2],sourceMap:o[3]};r[s]?r[s].parts.push(a):n.push(r[s]={id:s,parts:[a]})}return n}function g(e,t){var n=c(e.insertInto);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var r=d[d.length-1];if("top"===e.insertAt)r?r.nextSibling?n.insertBefore(t,r.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),d.push(t);else if("bottom"===e.insertAt)n.appendChild(t);else{if("object"!=typeof e.insertAt||!e.insertAt.before)throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");var i=c(e.insertAt.before,n);n.insertBefore(t,i)}}function m(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=d.indexOf(e);t>=0&&d.splice(t,1)}function v(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var r=function(){0;return n.nc}();r&&(e.attrs.nonce=r)}return _(t,e.attrs),g(e,t),t}function _(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function b(e,t){var n,r,i,o;if(t.transform&&e.css){if(!(o="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=o}if(t.singleton){var s=u++;n=l||(l=v(t)),r=S.bind(null,n,s,!1),i=S.bind(null,n,s,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",_(t,e.attrs),g(e,t),t}(t),r=E.bind(null,n,t),i=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=v(t),r=x.bind(null,n),i=function(){m(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=s()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=p(e,t);return f(n,t),function(e){for(var r=[],i=0;i<n.length;i++){var s=n[i];(a=o[s.id]).refs--,r.push(a)}e&&f(p(e,t),t);for(i=0;i<r.length;i++){var a;if(0===(a=r[i]).refs){for(var c=0;c<a.parts.length;c++)a.parts[c]();delete o[a.id]}}}};var y,w=(y=[],function(e,t){return y[e]=t,y.filter(Boolean).join("\n")});function S(e,t,n,r){var i=n?"":r.css;if(e.styleSheet)e.styleSheet.cssText=w(t,i);else{var o=document.createTextNode(i),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function x(e,t){var n=t.css,r=t.media;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function E(e,t,n){var r=n.css,i=n.sourceMap,o=void 0===t.convertToAbsoluteUrls&&i;(t.convertToAbsoluteUrls||o)&&(r=h(r)),i&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */");var s=new Blob([r],{type:"text/css"}),a=e.href;e.href=URL.createObjectURL(s),a&&URL.revokeObjectURL(a)}},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var i,o=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(o)?e:(i=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:r+o.replace(/^\.\//,""),"url("+JSON.stringify(i)+")")}))}},function(e,t,n){"use strict";n.r(t);var r=n(66),i=n.n(r),o=(n(327),n(68),n(22));var s=function(){this.__data__=[],this.size=0};var a=function(e,t){return e===t||e!=e&&t!=t};var c=function(e,t){for(var n=e.length;n--;)if(a(e[n][0],t))return n;return-1},l=Array.prototype.splice;var u=function(e){var t=this.__data__,n=c(t,e);return!(n<0)&&(n==t.length-1?t.pop():l.call(t,n,1),--this.size,!0)};var d=function(e){var t=this.__data__,n=c(t,e);return n<0?void 0:t[n][1]};var h=function(e){return c(this.__data__,e)>-1};var f=function(e,t){var n=this.__data__,r=c(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function p(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}p.prototype.clear=s,p.prototype.delete=u,p.prototype.get=d,p.prototype.has=h,p.prototype.set=f;var g=p;var m=function(){this.__data__=new g,this.size=0};var v=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var _=function(e){return this.__data__.get(e)};var b=function(e){return this.__data__.has(e)},y=n(6),w=y.a.Symbol,S=Object.prototype,x=S.hasOwnProperty,E=S.toString,A=w?w.toStringTag:void 0;var C=function(e){var t=x.call(e,A),n=e[A];try{e[A]=void 0;var r=!0}catch(e){}var i=E.call(e);return r&&(t?e[A]=n:delete e[A]),i},j=Object.prototype.toString;var T=function(e){return j.call(e)},O=w?w.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":O&&O in Object(e)?C(e):T(e)};var N=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var I,M=function(e){if(!N(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},R=y.a["__core-js_shared__"],D=(I=/[^.]+$/.exec(R&&R.keys&&R.keys.IE_PROTO||""))?"Symbol(src)_1."+I:"";var P=function(e){return!!D&&D in e},L=Function.prototype.toString;var z=function(e){if(null!=e){try{return L.call(e)}catch(e){}try{return e+""}catch(e){}}return""},F=/^\[object .+?Constructor\]$/,B=Function.prototype,q=Object.prototype,H=B.toString,U=q.hasOwnProperty,$=RegExp("^"+H.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var W=function(e){return!(!N(e)||P(e))&&(M(e)?$:F).test(z(e))};var G=function(e,t){return null==e?void 0:e[t]};var V=function(e,t){var n=G(e,t);return W(n)?n:void 0},J=V(y.a,"Map"),X=V(Object,"create");var Q=function(){this.__data__=X?X(null):{},this.size=0};var Y=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K=Object.prototype.hasOwnProperty;var Z=function(e){var t=this.__data__;if(X){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return K.call(t,e)?t[e]:void 0},ee=Object.prototype.hasOwnProperty;var te=function(e){var t=this.__data__;return X?void 0!==t[e]:ee.call(t,e)};var ne=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=X&&void 0===t?"__lodash_hash_undefined__":t,this};function re(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}re.prototype.clear=Q,re.prototype.delete=Y,re.prototype.get=Z,re.prototype.has=te,re.prototype.set=ne;var ie=re;var oe=function(){this.size=0,this.__data__={hash:new ie,map:new(J||g),string:new ie}};var se=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ae=function(e,t){var n=e.__data__;return se(t)?n["string"==typeof t?"string":"hash"]:n.map};var ce=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t};var le=function(e){return ae(this,e).get(e)};var ue=function(e){return ae(this,e).has(e)};var de=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this};function he(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}he.prototype.clear=oe,he.prototype.delete=ce,he.prototype.get=le,he.prototype.has=ue,he.prototype.set=de;var fe=he;var pe=function(e,t){var n=this.__data__;if(n instanceof g){var r=n.__data__;if(!J||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new fe(r)}return n.set(e,t),this.size=n.size,this};function ge(e){var t=this.__data__=new g(e);this.size=t.size}ge.prototype.clear=m,ge.prototype.delete=v,ge.prototype.get=_,ge.prototype.has=b,ge.prototype.set=pe;var me=ge;var ve=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e},_e=function(){try{var e=V(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();var be=function(e,t,n){"__proto__"==t&&_e?_e(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n},ye=Object.prototype.hasOwnProperty;var we=function(e,t,n){var r=e[t];ye.call(e,t)&&a(r,n)&&(void 0!==n||t in e)||be(e,t,n)};var Se=function(e,t,n,r){var i=!n;n||(n={});for(var o=-1,s=t.length;++o<s;){var a=t[o],c=r?r(n[a],e[a],a,n,e):void 0;void 0===c&&(c=e[a]),i?be(n,a,c):we(n,a,c)}return n};var xe=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r};var Ee=function(e){return null!=e&&"object"==typeof e};var Ae=function(e){return Ee(e)&&"[object Arguments]"==k(e)},Ce=Object.prototype,je=Ce.hasOwnProperty,Te=Ce.propertyIsEnumerable,Oe=Ae(function(){return arguments}())?Ae:function(e){return Ee(e)&&je.call(e,"callee")&&!Te.call(e,"callee")},ke=Array.isArray,Ne=n(21),Ie=/^(?:0|[1-9]\d*)$/;var Me=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&Ie.test(e))&&e>-1&&e%1==0&&e<t};var Re=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},De={};De["[object Float32Array]"]=De["[object Float64Array]"]=De["[object Int8Array]"]=De["[object Int16Array]"]=De["[object Int32Array]"]=De["[object Uint8Array]"]=De["[object Uint8ClampedArray]"]=De["[object Uint16Array]"]=De["[object Uint32Array]"]=!0,De["[object Arguments]"]=De["[object Array]"]=De["[object ArrayBuffer]"]=De["[object Boolean]"]=De["[object DataView]"]=De["[object Date]"]=De["[object Error]"]=De["[object Function]"]=De["[object Map]"]=De["[object Number]"]=De["[object Object]"]=De["[object RegExp]"]=De["[object Set]"]=De["[object String]"]=De["[object WeakMap]"]=!1;var Pe=function(e){return Ee(e)&&Re(e.length)&&!!De[k(e)]};var Le=function(e){return function(t){return e(t)}},ze=n(14),Fe=ze.a&&ze.a.isTypedArray,Be=Fe?Le(Fe):Pe,qe=Object.prototype.hasOwnProperty;var He=function(e,t){var n=ke(e),r=!n&&Oe(e),i=!n&&!r&&Object(Ne.a)(e),o=!n&&!r&&!i&&Be(e),s=n||r||i||o,a=s?xe(e.length,String):[],c=a.length;for(var l in e)!t&&!qe.call(e,l)||s&&("length"==l||i&&("offset"==l||"parent"==l)||o&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||Me(l,c))||a.push(l);return a},Ue=Object.prototype;var $e=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Ue)};var We=function(e,t){return function(n){return e(t(n))}},Ge=We(Object.keys,Object),Ve=Object.prototype.hasOwnProperty;var Je=function(e){if(!$e(e))return Ge(e);var t=[];for(var n in Object(e))Ve.call(e,n)&&"constructor"!=n&&t.push(n);return t};var Xe=function(e){return null!=e&&Re(e.length)&&!M(e)};var Qe=function(e){return Xe(e)?He(e):Je(e)};var Ye=function(e,t){return e&&Se(t,Qe(t),e)};var Ke=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t},Ze=Object.prototype.hasOwnProperty;var et=function(e){if(!N(e))return Ke(e);var t=$e(e),n=[];for(var r in e)("constructor"!=r||!t&&Ze.call(e,r))&&n.push(r);return n};var tt=function(e){return Xe(e)?He(e,!0):et(e)};var nt=function(e,t){return e&&Se(t,tt(t),e)},rt=n(160);var it=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t};var ot=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var s=e[n];t(s,n,e)&&(o[i++]=s)}return o};var st=function(){return[]},at=Object.prototype.propertyIsEnumerable,ct=Object.getOwnPropertySymbols,lt=ct?function(e){return null==e?[]:(e=Object(e),ot(ct(e),(function(t){return at.call(e,t)})))}:st;var ut=function(e,t){return Se(e,lt(e),t)};var dt=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e},ht=We(Object.getPrototypeOf,Object),ft=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)dt(t,lt(e)),e=ht(e);return t}:st;var pt=function(e,t){return Se(e,ft(e),t)};var gt=function(e,t,n){var r=t(e);return ke(e)?r:dt(r,n(e))};var mt=function(e){return gt(e,Qe,lt)};var vt=function(e){return gt(e,tt,ft)},_t=V(y.a,"DataView"),bt=V(y.a,"Promise"),yt=V(y.a,"Set"),wt=V(y.a,"WeakMap"),St=z(_t),xt=z(J),Et=z(bt),At=z(yt),Ct=z(wt),jt=k;(_t&&"[object DataView]"!=jt(new _t(new ArrayBuffer(1)))||J&&"[object Map]"!=jt(new J)||bt&&"[object Promise]"!=jt(bt.resolve())||yt&&"[object Set]"!=jt(new yt)||wt&&"[object WeakMap]"!=jt(new wt))&&(jt=function(e){var t=k(e),n="[object Object]"==t?e.constructor:void 0,r=n?z(n):"";if(r)switch(r){case St:return"[object DataView]";case xt:return"[object Map]";case Et:return"[object Promise]";case At:return"[object Set]";case Ct:return"[object WeakMap]"}return t});var Tt=jt,Ot=Object.prototype.hasOwnProperty;var kt=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&Ot.call(e,"index")&&(n.index=e.index,n.input=e.input),n},Nt=y.a.Uint8Array;var It=function(e){var t=new e.constructor(e.byteLength);return new Nt(t).set(new Nt(e)),t};var Mt=function(e,t){var n=t?It(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)},Rt=/\w*$/;var Dt=function(e){var t=new e.constructor(e.source,Rt.exec(e));return t.lastIndex=e.lastIndex,t},Pt=w?w.prototype:void 0,Lt=Pt?Pt.valueOf:void 0;var zt=function(e){return Lt?Object(Lt.call(e)):{}};var Ft=function(e,t){var n=t?It(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)};var Bt=function(e,t,n){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return It(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return Mt(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Ft(e,n);case"[object Map]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return Dt(e);case"[object Set]":return new r;case"[object Symbol]":return zt(e)}},qt=Object.create,Ht=function(){function e(){}return function(t){if(!N(t))return{};if(qt)return qt(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();var Ut=function(e){return"function"!=typeof e.constructor||$e(e)?{}:Ht(ht(e))};var $t=function(e){return Ee(e)&&"[object Map]"==Tt(e)},Wt=ze.a&&ze.a.isMap,Gt=Wt?Le(Wt):$t;var Vt=function(e){return Ee(e)&&"[object Set]"==Tt(e)},Jt=ze.a&&ze.a.isSet,Xt=Jt?Le(Jt):Vt,Qt={};Qt["[object Arguments]"]=Qt["[object Array]"]=Qt["[object ArrayBuffer]"]=Qt["[object DataView]"]=Qt["[object Boolean]"]=Qt["[object Date]"]=Qt["[object Float32Array]"]=Qt["[object Float64Array]"]=Qt["[object Int8Array]"]=Qt["[object Int16Array]"]=Qt["[object Int32Array]"]=Qt["[object Map]"]=Qt["[object Number]"]=Qt["[object Object]"]=Qt["[object RegExp]"]=Qt["[object Set]"]=Qt["[object String]"]=Qt["[object Symbol]"]=Qt["[object Uint8Array]"]=Qt["[object Uint8ClampedArray]"]=Qt["[object Uint16Array]"]=Qt["[object Uint32Array]"]=!0,Qt["[object Error]"]=Qt["[object Function]"]=Qt["[object WeakMap]"]=!1;var Yt=function e(t,n,r,i,o,s){var a,c=1&n,l=2&n,u=4&n;if(r&&(a=o?r(t,i,o,s):r(t)),void 0!==a)return a;if(!N(t))return t;var d=ke(t);if(d){if(a=kt(t),!c)return it(t,a)}else{var h=Tt(t),f="[object Function]"==h||"[object GeneratorFunction]"==h;if(Object(Ne.a)(t))return Object(rt.a)(t,c);if("[object Object]"==h||"[object Arguments]"==h||f&&!o){if(a=l||f?{}:Ut(t),!c)return l?pt(t,nt(a,t)):ut(t,Ye(a,t))}else{if(!Qt[h])return o?t:{};a=Bt(t,h,c)}}s||(s=new me);var p=s.get(t);if(p)return p;s.set(t,a),Xt(t)?t.forEach((function(i){a.add(e(i,n,r,i,t,s))})):Gt(t)&&t.forEach((function(i,o){a.set(o,e(i,n,r,o,t,s))}));var g=u?l?vt:mt:l?keysIn:Qe,m=d?void 0:g(t);return ve(m||t,(function(i,o){m&&(i=t[o=i]),we(a,o,e(i,n,r,o,t,s))})),a};var Kt=function(e){return Yt(e,5)};var Zt=function(e){return"string"==typeof e||!ke(e)&&Ee(e)&&"[object String]"==k(e)};var en=function(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))};function tn(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}function nn(e){return"string"!=typeof e&&(console.warn("".concat(e," used as a key, but it is not a string.")),e=String(e)),e}var rn=function(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(i){if("TypeError"!==i.name)throw i;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}},on="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",sn=/^~~local_forage_type~([^~]+)~/,an="__lfsc__:".length,cn=an+"arbf".length,ln=Object.prototype.toString;function un(e){var t,n,r,i,o,s=.75*e.length,a=e.length,c=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var l=new ArrayBuffer(s),u=new Uint8Array(l);for(t=0;t<a;t+=4)n=on.indexOf(e[t]),r=on.indexOf(e[t+1]),i=on.indexOf(e[t+2]),o=on.indexOf(e[t+3]),u[c++]=n<<2|r>>4,u[c++]=(15&r)<<4|i>>2,u[c++]=(3&i)<<6|63&o;return l}function dn(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=on[n[t]>>2],r+=on[(3&n[t])<<4|n[t+1]>>4],r+=on[(15&n[t+1])<<2|n[t+2]>>6],r+=on[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}var hn={serialize:function(e,t){var n="";if(e&&(n=ln.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===ln.call(e.buffer))){var r,i="__lfsc__:";e instanceof ArrayBuffer?(r=e,i+="arbf"):(r=e.buffer,"[object Int8Array]"===n?i+="si08":"[object Uint8Array]"===n?i+="ui08":"[object Uint8ClampedArray]"===n?i+="uic8":"[object Int16Array]"===n?i+="si16":"[object Uint16Array]"===n?i+="ur16":"[object Int32Array]"===n?i+="si32":"[object Uint32Array]"===n?i+="ui32":"[object Float32Array]"===n?i+="fl32":"[object Float64Array]"===n?i+="fl64":t(new Error("Failed to get type for BinaryArray"))),t(i+dn(r))}else if("[object Blob]"===n){var o=new FileReader;o.onload=function(){var n="~~local_forage_type~"+e.type+"~"+dn(this.result);t("__lfsc__:blob"+n)},o.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}},deserialize:function(e){if("__lfsc__:"!==e.substring(0,an))return JSON.parse(e);var t,n=e.substring(cn),r=e.substring(an,cn);if("blob"===r&&sn.test(n)){var i=n.match(sn);t=i[1],n=n.substring(i[0].length)}var o=un(n);switch(r){case"arbf":return o;case"blob":return rn([o],{type:t});case"si08":return new Int8Array(o);case"ui08":return new Uint8Array(o);case"uic8":return new Uint8ClampedArray(o);case"si16":return new Int16Array(o);case"ur16":return new Uint16Array(o);case"si32":return new Int32Array(o);case"ui32":return new Uint32Array(o);case"fl32":return new Float32Array(o);case"fl64":return new Float64Array(o);default:throw new Error("Unkown type: "+r)}},stringToBuffer:un,bufferToString:dn};function fn(e,t){let n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}const pn={serializer:{serialize:hn.serialize,deserialize:hn.deserialize}};var gn={_driver:"sessionStorageWrapper",_initStorage:function(e){if(pn.keyPrefix=fn(e,this._defaultConfig),e)for(const t in e)pn[t]=e[t]},_support:function(){try{if(sessionStorage&&"setItem"in sessionStorage)return!0}catch(e){console.log(e)}return!1}(),iterate:function(e,t){const n=this.ready().then((function(){const t=pn.keyPrefix,n=t.length,r=sessionStorage.length;let i=1;for(let o=0;o<r;o++){const r=sessionStorage.key(o);if(0!==r.indexOf(t))continue;let s=sessionStorage.getItem(r);if(s&&(s=pn.serializer.deserialize(s)),s=e(s,r.substring(n),i++),void 0!==s)return s}}));return en(n,t),n},getItem:function(e,t){e=nn(e);const n=this.ready().then((function(){let t=sessionStorage.getItem(pn.keyPrefix+e);return t&&(t=pn.serializer.deserialize(t)),t}));return en(n,t),n},setItem:function(e,t,n){e=nn(e);const r=this.ready().then((function(){void 0===t&&(t=null);const n=t;return new Promise((function(r,i){pn.serializer.serialize(t,(function(t,o){if(o)i(o);else try{sessionStorage.setItem(pn.keyPrefix+e,t),r(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||i(e),i(e)}}))}))}));return en(r,n),r},removeItem:function(e,t){e=nn(e);const n=this.ready().then((function(){sessionStorage.removeItem(pn.keyPrefix+e)}));return en(n,t),n},clear:function(e){const t=this.ready().then((function(){const e=pn.keyPrefix;for(let t=sessionStorage.length-1;t>=0;t--){const n=sessionStorage.key(t);0===n.indexOf(e)&&sessionStorage.removeItem(n)}}));return en(t,e),t},length:function(e){const t=this.keys().then((function(e){return e.length}));return en(t,e),t},key:function(e,t){const n=this.ready().then((function(){let t;try{t=sessionStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(pn.keyPrefix.length)),t}));return en(n,t),n},keys:function(e){const t=this.ready().then((function(){const e=sessionStorage.length,t=[];for(let n=0;n<e;n++){const e=sessionStorage.key(n);0===e.indexOf(pn.keyPrefix)&&t.push(e.substring(pn.keyPrefix.length))}return t}));return en(t,e),t},dropInstance:function(e,t){if(t=tn.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){const t=this.config();e.name=e.name||t.name,e.storeName=e.storeName||t.storeName}const n=this;let r;return r=e.name?new Promise((function(t){e.storeName?t(fn(e,n._defaultConfig)):t("".concat(e.name,"/"))})).then((function(e){for(let t=sessionStorage.length-1;t>=0;t--){const n=sessionStorage.key(t);0===n.indexOf(e)&&sessionStorage.removeItem(n)}})):Promise.reject(new Error("Invalid arguments")),en(r,t),r}};const mn={};var vn={_driver:"noStorageWrapper",_initStorage:function(e){if(mn.keyPrefix=function(e,t){let n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}(e,this._defaultConfig),e)for(const t in e)mn[t]=e[t]},_support:!0,iterate:function(e,t){const n=Promise.resolve();return en(n,t),n},getItem:function(e,t){const n=this.ready().then((function(){}));return en(n,t),n},setItem:function(e,t,n){const r=Promise.resolve(t);return en(r,n),r},removeItem:function(e,t){const n=Promise.resolve();return en(n,t),n},clear:function(e){const t=Promise.resolve();return en(t,e),t},length:function(e){const t=this.keys().then((function(e){return e.length}));return en(t,e),t},key:function(e,t){const n=this.ready().then((function(){return null}));return en(n,t),n},keys:function(e){const t=this.ready().then((function(){return[]}));return en(t,e),t},dropInstance:function(e,t){if(t=tn.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){const t=this.config();e.name=e.name||t.name,e.storeName=e.storeName||t.storeName}let n;return n=e.name?Promise.resolve():Promise.reject(new Error("Invalid arguments")),en(n,t),n}};function _n(){return(65536*(1+Math.random())|0).toString(16).substring(1)}class bn{constructor(e,t){if("local"===t&&!window.localStorage)throw new Error("Skeletor.storage: Environment does not support localStorage.");if("session"===t&&!window.sessionStorage)throw new Error("Skeletor.storage: Environment does not support sessionStorage.");Zt(t)?this.storeInitialized=this.initStore(t):(this.store=t,this.storeInitialized=Promise.resolve()),this.name=e}async initStore(e){if("session"===e)o.setDriver(gn._driver);else if("local"===e)await o.config({driver:o.LOCALSTORAGE});else if("in_memory"===e)o.setDriver(vn._driver);else if("indexed"!==e)throw new Error("Skeletor.storage: No storage type was specified");this.store=o}async clear(){await this.store.removeItem(this.name).catch(e=>console.error(e));const e=new RegExp("^".concat(this.name,"-")),t=(await this.store.keys()).filter(t=>e.test(t));await Promise.all(t.map(e=>this.store.removeItem(e).catch(e=>console.error(e))))}sync(e){const t=this;async function n(e,n,r){let i,o,s,a;const c=n.collection;["patch","update"].includes(e)&&(a=Kt(n.attributes)),await t.storeInitialized;try{const o=n.attributes;switch(e){case"read":i=void 0!==n.id?await t.find(n):await t.findAll();break;case"create":i=await t.create(n,r);break;case"patch":case"update":r.wait&&(n.attributes=a),s=t.update(n,r),r.wait&&(n.attributes=o),i=await s;break;case"delete":i=await t.destroy(n,c)}}catch(e){o=22===e.code&&0===t.getStorageSize()?"Private browsing is unsupported":e.message}if(i){if(r&&r.success){const t="read"===e?i:null;r.success(t,r)}}else o=o||"Record Not Found",r&&r.error&&r.error(o)}return n.__name__="localSync",n}removeCollectionReference(e,t){if(!t)return;const n=t.filter(t=>t.id!==e.id).map(e=>this.getItemName(e.id));return this.store.setItem(this.name,n)}addCollectionReference(e,t){if(!t)return;const n=t.map(e=>this.getItemName(e.id)),r=this.getItemName(e.id);return n.includes(r)||n.push(r),this.store.setItem(this.name,n)}async save(e,t={}){const n=this.getItemName(e.id),r=await this.store.setItem(n,e.toJSON());return await this.addCollectionReference(e,e.collection),r}create(e,t){return e.id||(e.id=_n()+_n()+"-"+_n()+"-"+_n()+"-"+_n()+"-"+_n()+_n()+_n(),e.set(e.idAttribute,e.id,t)),this.save(e)}update(e,t){return this.save(e,t)}find(e){return this.store.getItem(this.getItemName(e.id))}async findAll(){const e=await this.store.getItem(this.name);return e&&e.length?Promise.all(e.map(e=>this.store.getItem(e))):[]}async destroy(e,t){return await this.store.removeItem(this.getItemName(e.id)),await this.removeCollectionReference(e,t),e}getStorageSize(){return this.store.length}getItemName(e){return this.name+"-"+e}}bn.IN_MEMORY=vn._driver,bn.memoryStorageInitialized=o.defineDriver(vn),bn.sessionStorageInitialized=o.defineDriver(gn),bn.localForage=o;var yn=bn,wn=n(161),Sn=n.n(wn),xn=n(5),En=n.n(xn),An=Function.prototype,Cn=Object.prototype,jn=An.toString,Tn=Cn.hasOwnProperty,On=jn.call(Object);var kn=function(e){if(!Ee(e)||"[object Object]"!=k(e))return!1;var t=ht(e);if(null===t)return!0;var n=Tn.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&jn.call(n)==On};var Nn,In,Mn,Rn,Dn=function(e){return Ee(e)&&1===e.nodeType&&!kn(e)};const Pn={debug:0,info:1,warn:2,error:3,fatal:4},Ln=Object.assign({debug:(null===(Nn=console)||void 0===Nn?void 0:Nn.log)?console.log.bind(console):function(){},error:(null===(In=console)||void 0===In?void 0:In.log)?console.log.bind(console):function(){},info:(null===(Mn=console)||void 0===Mn?void 0:Mn.log)?console.log.bind(console):function(){},warn:(null===(Rn=console)||void 0===Rn?void 0:Rn.log)?console.log.bind(console):function(){}},console);var zn={setLogLevel(e){if(!["debug","info","warn","error","fatal"].includes(e))throw new Error("Invalid loglevel: ".concat(e));this.loglevel=e},log(e,t,n=""){if(Pn[t]<Pn[this.loglevel])return;"error"===t||"fatal"===t?n=n||"color: maroon":"debug"===t&&(n=n||"color: green"),e instanceof Error?e=e.stack:Dn(e)&&(e=e.outerHTML);const r=n?"%c":"";"error"===t?Ln.error("".concat(r," ERROR: ").concat(e),n):"warn"===t?Ln.warn("".concat(r," ").concat((new Date).toISOString()," WARNING: ").concat(e),n):"fatal"===t?Ln.error("".concat(r," FATAL: ").concat(e),n):"debug"===t?Ln.debug("".concat(r," ").concat((new Date).toISOString()," DEBUG: ").concat(e),n):Ln.info("".concat(r," ").concat((new Date).toISOString()," INFO: ").concat(e),n)},debug(e,t){this.log(e,"debug",t)},error(e,t){this.log(e,"error",t)},info(e,t){this.log(e,"info",t)},warn(e,t){this.log(e,"warn",t)},fatal(e,t){this.log(e,"fatal",t)}},Fn=n(162),Bn=n.n(Fn),qn=n(44),Hn=n.n(qn),Un=n(45),$n=n.n(Un),Wn=n(36),Gn=n.n(Wn),Vn=n(163),Jn=n.n(Vn),Xn=n(62),Qn=n.n(Xn),Yn=n(164),Kn=n.n(Yn),Zn=n(33),er=n.n(Zn),tr=n(93),nr=n.n(tr),rr=n(165),ir=n.n(rr),or=n(166),sr=n.n(or),ar=n(92),cr=n.n(ar);function lr(e,t){this.name=t,this.plugged=e,void 0===this.plugged.__super__?this.plugged.__super__={}:"string"==typeof this.plugged.__super__&&(this.plugged.__super__={__string__:this.plugged.__super__}),this.plugged.__super__[t]=this.plugged,this.plugins={},this.initialized_plugins=[]}$n()(lr.prototype,{wrappedOverride:function(e,t,n,r){return"function"==typeof n&&(void 0===this.__super__&&(this.__super__=r),this.__super__[e]=n.bind(this)),t.apply(this,Bn()(arguments,4))},_overrideAttribute:function(e,t){let n=t.overrides[e];if("function"==typeof n){let t={};t[this.name]=this.plugged;let r=nr()(this.wrappedOverride,e,n,this.plugged[e],t);this.plugged[e]=r}else this.plugged[e]=n},_extendObject:function(e,t){e.prototype.__super__||(e.prototype.__super__={},e.prototype.__super__[this.name]=this.plugged);let n=this;Hn()(t,(function(t,r){if("events"===r)e.prototype[r]=$n()(t,e.prototype[r]);else if("function"==typeof t){let i={};i[n.name]=n.plugged;let o=nr()(n.wrappedOverride,r,t,e.prototype[r],i);e.prototype[r]=o}else e.prototype[r]=t}))},loadPluginDependencies:function(e){Hn()(e.dependencies,t=>{let n=this.plugins[t];if(n){if(Gn()(n.dependencies,e.__name__))throw'Found a circular dependency between the plugins "'+e.__name__+'" and "'+t+'"';this.initializePlugin(n)}else this.throwUndefinedDependencyError('Could not find dependency "'+t+'" for the plugin "'+e.__name__+"\". If it's needed, make sure it's loaded by require.js")})},throwUndefinedDependencyError:function(e){if(this.plugged.strict_plugin_dependencies)throw e;console.warn?console.warn(e):console.log(e)},applyOverrides:function(e){Hn()(Object.keys(e.overrides||{}),t=>{let n=e.overrides[t];"object"==typeof n?void 0===this.plugged[t]?this.throwUndefinedDependencyError('Plugin "'.concat(e.__name__,'" tried to override "').concat(t,"\" but it's not found.")):this._extendObject(this.plugged[t],n):this._overrideAttribute(t,e)})},initializePlugin:function(e){Gn()(er()(this.allowed_plugins),e.__name__)&&(Gn()(this.initialized_plugins,e.__name__)||(Jn()(e.enabled)&&e.enabled||Qn()(e.enabled)&&e.enabled(this.plugged)||Kn()(e.enabled))&&($n()(e,this.properties),e.dependencies&&this.loadPluginDependencies(e),this.applyOverrides(e),"function"==typeof e.initialize&&e.initialize.bind(e)(this),this.initialized_plugins.push(e.__name__)))},registerPlugin:function(e,t){if(e in this.plugins)throw new Error("Error: Plugin name "+e+" is already taken");t.__name__=e,this.plugins[e]=t},initializePlugins:function(e={},t=[],n=[]){sr()(this.plugins)&&(this.properties=e,this.allowed_plugins=ir()(this.plugins,(function(e,r){return(!t.length||t.length&&Gn()(t,r))&&!Gn()(n,r)})),Hn()(cr()(this.allowed_plugins),this.initializePlugin.bind(this)))}});var ur={enable:function(e,t,n){void 0===n&&(n="pluginSocket"),void 0===t&&(t="plugged");let r={};return r[n]=new lr(e,t),$n()(e,r)}},dr=n(167),hr=n.n(dr),fr=n(168),pr=n.n(fr),gr=n(3),mr=n.n(gr),vr=n(0);var _r=function(e,t){var n=Ht(e);return null==t?n:Ye(n,t)};var br=function(e){return e};var yr=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)},wr=Math.max;var Sr=function(e,t,n){return t=wr(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=wr(r.length-t,0),s=Array(o);++i<o;)s[i]=r[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=r[i];return a[t]=n(s),yr(e,this,a)}};var xr=function(e){return function(){return e}},Er=_e?function(e,t){return _e(e,"toString",{configurable:!0,enumerable:!1,value:xr(t),writable:!0})}:br,Ar=Date.now;var Cr=function(e){var t=0,n=0;return function(){var r=Ar(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Er);var jr=function(e,t){return Cr(Sr(e,t,br),e+"")};var Tr=function(e,t,n){if(!N(n))return!1;var r=typeof t;return!!("number"==r?Xe(n)&&Me(t,n.length):"string"==r&&t in n)&&a(n[t],e)};var Or=function(e){return jr((function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(i--,o):void 0,s&&Tr(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r<i;){var a=n[r];a&&e(t,a,r,o)}return t}))}((function(e,t){Se(t,tt(t),e)})),kr=Object.prototype.hasOwnProperty;var Nr=function(e,t){return null!=e&&kr.call(e,t)};var Ir=function(e){return"symbol"==typeof e||Ee(e)&&"[object Symbol]"==k(e)},Mr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Rr=/^\w*$/;var Dr=function(e,t){if(ke(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ir(e))||(Rr.test(e)||!Mr.test(e)||null!=t&&e in Object(t))};function Pr(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Pr.Cache||fe),n}Pr.Cache=fe;var Lr=Pr;var zr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fr=/\\(\\)?/g,Br=function(e){var t=Lr(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(zr,(function(e,n,r,i){t.push(r?i.replace(Fr,"$1"):n||e)})),t}));var qr=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i},Hr=w?w.prototype:void 0,Ur=Hr?Hr.toString:void 0;var $r=function e(t){if("string"==typeof t)return t;if(ke(t))return qr(t,e)+"";if(Ir(t))return Ur?Ur.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n};var Wr=function(e){return null==e?"":$r(e)};var Gr=function(e,t){return ke(e)?e:Dr(e,t)?[e]:Br(Wr(e))};var Vr=function(e){if("string"==typeof e||Ir(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t};var Jr=function(e,t,n){for(var r=-1,i=(t=Gr(t,e)).length,o=!1;++r<i;){var s=Vr(t[r]);if(!(o=null!=e&&n(e,s)))break;e=e[s]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Re(i)&&Me(s,i)&&(ke(e)||Oe(e))};var Xr=function(e,t){return null!=e&&Jr(e,t,Nr)};var Qr=function(e,t,n){var r=-1,i=(t=Gr(t,e)).length;for(i||(i=1,e=void 0);++r<i;){var o=null==e?void 0:e[Vr(t[r])];void 0===o&&(r=i,o=n),e=M(o)?o.call(e):o}return e};Error;function Yr(e,t){const n=this;let r;return r=e&&Xr(e,"constructor")?e.constructor:function(){return n.apply(this,arguments)},Or(r,n,t),r.prototype=_r(n.prototype,e),r.prototype.constructor=r,r.__super__=n.prototype,r}function Kr(){const e={isResolved:!1,isPending:!0,isRejected:!1},t=new Promise((t,n)=>{e.resolve=t,e.reject=n});return Object.assign(t,e),t.then((function(e){return t.isResolved=!0,t.isPending=!1,t.isRejected=!1,e}),(function(e){throw t.isResolved=!1,t.isPending=!1,t.isRejected=!0,e})),t}function Zr(){throw new Error('A "url" property or function must be specified')}function ei(e,t){const n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger("error",e,r,t)}}const ti={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};function ni(e){const t=Qr(e,"browserStorage")||Qr(e.collection,"browserStorage");return t?t.sync():ri}function ri(e,t,n={}){const r={type:ti[e],dataType:"json"};n.url||(r.url=Qr(t,"url")||Zr()),null!=n.data||!t||"create"!==e&&"update"!==e&&"patch"!==e||(r.contentType="application/json",r.data=JSON.stringify(n.attrs||t.toJSON(n))),"GET"!==r.type&&(r.processData=!1);const i=n.error;n.error=function(e,t,r){n.textStatus=t,n.errorThrown=r,i&&i.call(n.context,e,t,r)};const o=n.xhr=function(){return fetch.apply(this,arguments)}(Or(r,n));return t.trigger("request",t,o,n),o}var ii=Object.prototype.hasOwnProperty;var oi=function(e){if(null==e)return!0;if(Xe(e)&&(ke(e)||"string"==typeof e||"function"==typeof e.splice||Object(Ne.a)(e)||Be(e)||Oe(e)))return!e.length;var t=Tt(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if($e(e))return!Je(e).length;for(var n in e)if(ii.call(e,n))return!1;return!0},si=/^\s+|\s+$/g,ai=/^[-+]0x[0-9a-f]+$/i,ci=/^0b[01]+$/i,li=/^0o[0-7]+$/i,ui=parseInt;var di=function(e){if("number"==typeof e)return e;if(Ir(e))return NaN;if(N(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=N(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(si,"");var n=ci.test(e);return n||li.test(e)?ui(e.slice(2),n?2:8):ai.test(e)?NaN:+e};var hi=function(e){return e?(e=di(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0};var fi=function(e){var t=hi(e),n=t%1;return t==t?n?t-n:t:0};var pi=function(e,t){var n;if("function"!=typeof t)throw new TypeError("Expected a function");return e=fi(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}};var gi=function(e){return pi(2,e)},mi=0;var vi=function(e){var t=++mi;return Wr(e)+t};const _i={},bi=/\s+/;let yi;const wi=function(e,t,n,r,i){let o,s=0;if(n&&"object"==typeof n){void 0!==r&&"context"in i&&void 0===i.context&&(i.context=r);for(o=Qe(n);s<o.length;s++)t=wi(e,t,o[s],n[o[s]],i)}else if(n&&bi.test(n))for(o=n.split(bi);s<o.length;s++)t=e(t,o[s],r,i);else t=e(t,n,r,i);return t};_i.on=function(e,t,n){if(this._events=wi(Si,this._events||{},e,t,{context:n,ctx:this,listening:yi}),yi){(this._listeners||(this._listeners={}))[yi.id]=yi,yi.interop=!1}return this},_i.listenTo=function(e,t,n){if(!e)return this;const r=e._listenId||(e._listenId=vi("l")),i=this._listeningTo||(this._listeningTo={});let o=yi=i[r];o||(this._listenId||(this._listenId=vi("l")),o=yi=i[r]=new Ti(this,e));const s=xi(e,t,n,this);if(yi=void 0,s)throw s;return o.interop&&o.on(t,n),this};const Si=function(e,t,n,r){if(n){const i=e[t]||(e[t]=[]),o=r.context,s=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:o,ctx:o||s,listening:a})}return e},xi=function(e,t,n,r){try{e.on(t,n,r)}catch(e){return e}};_i.off=function(e,t,n){return this._events?(this._events=wi(Ei,this._events,e,t,{context:n,listeners:this._listeners}),this):this},_i.stopListening=function(e,t,n){const r=this._listeningTo;if(!r)return this;const i=e?[e._listenId]:Qe(r);for(let e=0;e<i.length;e++){const o=r[i[e]];if(!o)break;o.obj.off(t,n,this),o.interop&&o.off(t,n)}return oi(r)&&(this._listeningTo=void 0),this};const Ei=function(e,t,n,r){if(!e)return;const i=r.context,o=r.listeners;let s,a=0;if(t||i||n){for(s=t?[t]:Qe(e);a<s.length;a++){const r=e[t=s[a]];if(!r)break;const o=[];for(let e=0;e<r.length;e++){const s=r[e];if(n&&n!==s.callback&&n!==s.callback._callback||i&&i!==s.context)o.push(s);else{const e=s.listening;e&&e.off(t,n)}}o.length?e[t]=o:delete e[t]}return e}for(s=Qe(o);a<s.length;a++)o[s[a]].cleanup()};_i.once=function(e,t,n){const r=wi(Ai,{},e,t,this.off.bind(this));return"string"==typeof e&&null==n&&(t=void 0),this.on(r,t,n)},_i.listenToOnce=function(e,t,n){const r=wi(Ai,{},t,n,this.stopListening.bind(this,e));return this.listenTo(e,r)};const Ai=function(e,t,n,r){if(n){const i=e[t]=gi((function(){r(t,i),n.apply(this,arguments)}));i._callback=n}return e};_i.trigger=function(e){if(!this._events)return this;const t=Math.max(0,arguments.length-1),n=Array(t);for(let e=0;e<t;e++)n[e]=arguments[e+1];return wi(Ci,this._events,e,void 0,n),this};const Ci=function(e,t,n,r){if(e){const n=e[t];let i=e.all;n&&i&&(i=i.slice()),n&&ji(n,r),i&&ji(i,[t].concat(r))}return e},ji=function(e,t){let n,r=-1;const i=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t);return}},Ti=function(e,t){this.id=e._listenId,this.listener=e,this.obj=t,this.interop=!0,this.count=0,this._events=void 0};Ti.prototype.on=_i.on,Ti.prototype.off=function(e,t){let n;this.interop?(this._events=wi(Ei,this._events,e,t,{context:void 0,listeners:void 0}),n=!this._events):(this.count--,n=0===this.count),n&&this.cleanup()},Ti.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},_i.bind=_i.on,_i.unbind=_i.off;var Oi=function(e){return Yt(e,4)},ki=Object.prototype,Ni=ki.hasOwnProperty,Ii=jr((function(e,t){e=Object(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&Tr(t[0],t[1],i)&&(r=1);++n<r;)for(var o=t[n],s=tt(o),c=-1,l=s.length;++c<l;){var u=s[c],d=e[u];(void 0===d||a(d,ki[u])&&!Ni.call(e,u))&&(e[u]=o[u])}return e}));var Mi=function(e,t,n){if("function"!=typeof e)throw new TypeError("Expected a function");return setTimeout((function(){e.apply(void 0,n)}),t)},Ri=jr((function(e,t){return Mi(e,1,t)}));var Di=function(e){return function(t){return null==e?void 0:e[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),Pi=/[&<>"']/g,Li=RegExp(Pi.source);var zi=function(e){return(e=Wr(e))&&Li.test(e)?e.replace(Pi,Di):e};var Fi=function(e){return function(t,n,r){for(var i=-1,o=Object(t),s=r(t),a=s.length;a--;){var c=s[e?a:++i];if(!1===n(o[c],c,o))break}return t}},Bi=Fi();var qi=function(e,t){return e&&Bi(e,t,Qe)};var Hi=function(e,t,n,r){return qi(e,(function(e,i,o){t(r,n(e),i,o)})),r};var Ui=function(e,t){return function(n,r){return Hi(n,e,t(r),{})}},$i=Object.prototype.toString,Wi=Ui((function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=$i.call(t)),e[t]=n}),xr(br));var Gi=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var Vi=function(e){return this.__data__.has(e)};function Ji(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new fe;++t<n;)this.add(e[t])}Ji.prototype.add=Ji.prototype.push=Gi,Ji.prototype.has=Vi;var Xi=Ji;var Qi=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1};var Yi=function(e,t){return e.has(t)};var Ki=function(e,t,n,r,i,o){var s=1&n,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=o.get(e);if(l&&o.get(t))return l==t;var u=-1,d=!0,h=2&n?new Xi:void 0;for(o.set(e,t),o.set(t,e);++u<a;){var f=e[u],p=t[u];if(r)var g=s?r(p,f,u,t,e,o):r(f,p,u,e,t,o);if(void 0!==g){if(g)continue;d=!1;break}if(h){if(!Qi(t,(function(e,t){if(!Yi(h,t)&&(f===e||i(f,e,n,r,o)))return h.push(t)}))){d=!1;break}}else if(f!==p&&!i(f,p,n,r,o)){d=!1;break}}return o.delete(e),o.delete(t),d};var Zi=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n};var eo=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n},to=w?w.prototype:void 0,no=to?to.valueOf:void 0;var ro=function(e,t,n,r,i,o,s){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!o(new Nt(e),new Nt(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var c=Zi;case"[object Set]":var l=1&r;if(c||(c=eo),e.size!=t.size&&!l)return!1;var u=s.get(e);if(u)return u==t;r|=2,s.set(e,t);var d=Ki(c(e),c(t),r,i,o,s);return s.delete(e),d;case"[object Symbol]":if(no)return no.call(e)==no.call(t)}return!1},io=Object.prototype.hasOwnProperty;var oo=function(e,t,n,r,i,o){var s=1&n,a=mt(e),c=a.length;if(c!=mt(t).length&&!s)return!1;for(var l=c;l--;){var u=a[l];if(!(s?u in t:io.call(t,u)))return!1}var d=o.get(e);if(d&&o.get(t))return d==t;var h=!0;o.set(e,t),o.set(t,e);for(var f=s;++l<c;){var p=e[u=a[l]],g=t[u];if(r)var m=s?r(g,p,u,t,e,o):r(p,g,u,e,t,o);if(!(void 0===m?p===g||i(p,g,n,r,o):m)){h=!1;break}f||(f="constructor"==u)}if(h&&!f){var v=e.constructor,_=t.constructor;v==_||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof _&&_ instanceof _||(h=!1)}return o.delete(e),o.delete(t),h},so=Object.prototype.hasOwnProperty;var ao=function(e,t,n,r,i,o){var s=ke(e),a=ke(t),c=s?"[object Array]":Tt(e),l=a?"[object Array]":Tt(t),u="[object Object]"==(c="[object Arguments]"==c?"[object Object]":c),d="[object Object]"==(l="[object Arguments]"==l?"[object Object]":l),h=c==l;if(h&&Object(Ne.a)(e)){if(!Object(Ne.a)(t))return!1;s=!0,u=!1}if(h&&!u)return o||(o=new me),s||Be(e)?Ki(e,t,n,r,i,o):ro(e,t,c,n,r,i,o);if(!(1&n)){var f=u&&so.call(e,"__wrapped__"),p=d&&so.call(t,"__wrapped__");if(f||p){var g=f?e.value():e,m=p?t.value():t;return o||(o=new me),i(g,m,n,r,o)}}return!!h&&(o||(o=new me),oo(e,t,n,r,i,o))};var co=function e(t,n,r,i,o){return t===n||(null==t||null==n||!Ee(t)&&!Ee(n)?t!=t&&n!=n:ao(t,n,r,i,e,o))};var lo=function(e,t){return co(e,t)};var uo=function(e,t,n,r){var i=n.length,o=i,s=!r;if(null==e)return!o;for(e=Object(e);i--;){var a=n[i];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){var c=(a=n[i])[0],l=e[c],u=a[1];if(s&&a[2]){if(void 0===l&&!(c in e))return!1}else{var d=new me;if(r)var h=r(l,u,c,e,t,d);if(!(void 0===h?co(u,l,3,r,d):h))return!1}}return!0};var ho=function(e){return e==e&&!N(e)};var fo=function(e){for(var t=Qe(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,ho(i)]}return t};var po=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}};var go=function(e){var t=fo(e);return 1==t.length&&t[0][2]?po(t[0][0],t[0][1]):function(n){return n===e||uo(n,e,t)}};var mo=function(e,t){for(var n=0,r=(t=Gr(t,e)).length;null!=e&&n<r;)e=e[Vr(t[n++])];return n&&n==r?e:void 0};var vo=function(e,t,n){var r=null==e?void 0:mo(e,t);return void 0===r?n:r};var _o=function(e,t){return null!=e&&t in Object(e)};var bo=function(e,t){return null!=e&&Jr(e,t,_o)};var yo=function(e,t){return Dr(e)&&ho(t)?po(Vr(e),t):function(n){var r=vo(n,e);return void 0===r&&r===t?bo(n,e):co(t,r,3)}};var wo=function(e){return function(t){return null==t?void 0:t[e]}};var So=function(e){return function(t){return mo(t,e)}};var xo=function(e){return Dr(e)?wo(Vr(e)):So(e)};var Eo=function(e){return"function"==typeof e?e:null==e?br:"object"==typeof e?ke(e)?yo(e[0],e[1]):go(e):xo(e)};var Ao=function(e){return Eo("function"==typeof e?e:Yt(e,1))};var Co=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0};var jo=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r<i;)o[r]=e[r+t];return o};var To=function(e,t){return t.length<2?e:mo(e,jo(t,0,-1))};var Oo=function(e,t){return t=Gr(t,e),null==(e=To(e,t))||delete e[Vr(Co(t))]};var ko=function(e){return kn(e)?void 0:e},No=w?w.isConcatSpreadable:void 0;var Io=function(e){return ke(e)||Oe(e)||!!(No&&e&&e[No])};var Mo=function e(t,n,r,i,o){var s=-1,a=t.length;for(r||(r=Io),o||(o=[]);++s<a;){var c=t[s];n>0&&r(c)?n>1?e(c,n-1,r,i,o):dt(o,c):i||(o[o.length]=c)}return o};var Ro=function(e){return(null==e?0:e.length)?Mo(e,1):[]};var Do=function(e){return Cr(Sr(e,void 0,Ro),e+"")},Po=Do((function(e,t){var n={};if(null==e)return n;var r=!1;t=qr(t,(function(t){return t=Gr(t,e),r||(r=t.length>1),t})),Se(e,vt(e),n),r&&(n=Yt(n,7,ko));for(var i=t.length;i--;)Oo(n,t[i]);return n}));var Lo=function(e,t,n,r){if(!N(e))return e;for(var i=-1,o=(t=Gr(t,e)).length,s=o-1,a=e;null!=a&&++i<o;){var c=Vr(t[i]),l=n;if(i!=s){var u=a[c];void 0===(l=r?r(u,c,a):void 0)&&(l=N(u)?u:Me(t[i+1])?[]:{})}we(a,c,l),a=a[c]}return e};var zo=function(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var s=t[r],a=mo(e,s);n(a,s)&&Lo(o,Gr(s,e),a)}return o};var Fo=function(e,t){return zo(e,t,(function(t,n){return bo(e,n)}))},Bo=Do((function(e,t){return null==e?{}:Fo(e,t)}));const qo=function(e,t){let n=e||{};t||(t={}),this.preinitialize.apply(this,arguments),this.cid=vi(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(n=this.parse(n,t)||{});const r=Qr(this,"defaults");n=Ii(Or({},r,n),r),this.set(n,t),this.changed={},this.initialize.apply(this,arguments)};qo.extend=Yr,Object.assign(qo.prototype,_i,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(e){return Oi(this.attributes)},sync:function(e,t,n){return ni(this)(e,t,n)},get:function(e){return this.attributes[e]},keys:function(){return Object.keys(this.attributes)},values:function(){return Object.values(this.attributes)},pairs:function(){return this.entries()},entries:function(){return Object.entries(this.attributes)},invert:function(){return Wi(this.attributes)},pick:function(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),Bo(this.attributes,e)},omit:function(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),Po(this.attributes,e)},isEmpty:function(){return oi(this.attributes)},escape:function(e){return zi(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!Ao(e,this)(this.attributes)},set:function(e,t,n){if(null==e)return this;let r;if("object"==typeof e?(r=e,n=t):(r={})[e]=t,n||(n={}),!this._validate(r,n))return!1;const i=n.unset,o=n.silent,s=[],a=this._changing;this._changing=!0,a||(this._previousAttributes=Oi(this.attributes),this.changed={});const c=this.attributes,l=this.changed,u=this._previousAttributes;for(const e in r)t=r[e],lo(c[e],t)||s.push(e),lo(u[e],t)?delete l[e]:l[e]=t,i?delete c[e]:c[e]=t;if(this.idAttribute in r&&(this.id=this.get(this.idAttribute)),!o){s.length&&(this._pending=n);for(let e=0;e<s.length;e++)this.trigger("change:"+s[e],this,c[s[e]],n)}if(a)return this;if(!o)for(;this._pending;)n=this._pending,this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,Or({},t,{unset:!0}))},clear:function(e){const t={};for(const e in this.attributes)t[e]=void 0;return this.set(t,Or({},e,{unset:!0}))},hasChanged:function(e){return null==e?!oi(this.changed):Xr(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&Oi(this.changed);const t=this._changing?this._previousAttributes:this.attributes,n={};let r;for(const i in e){const o=e[i];lo(t[i],o)||(n[i]=o,r=!0)}return!!r&&n},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return Oi(this._previousAttributes)},fetch:function(e){e=Or({parse:!0},e);const t=this,n=e.success;return e.success=function(r){const i=e.parse?t.parse(r,e):r;if(!t.set(i,e))return!1;n&&n.call(e.context,t,r,e),t.trigger("sync",t,r,e)},ei(this,e),this.sync("read",this,e)},save:function(e,t,n){let r;null==e||"object"==typeof e?(r=e,n=t):(r={})[e]=t;const i=(n=Or({validate:!0,parse:!0},n)).wait,o=n.promise,s=o&&Kr();if(r&&!i){if(!this.set(r,n))return!1}else if(!this._validate(r,n))return!1;const a=this,c=n.success,l=n.error,u=this.attributes;n.success=function(e){a.attributes=u;let t=n.parse?a.parse(e,n):e;if(i&&(t=Or({},r,t)),t&&!a.set(t,n))return!1;c&&c.call(n.context,a,e,n),a.trigger("sync",a,e,n),o&&s.resolve()},n.error=function(e,t,n){l&&l.call(n.context,e,t,n),o&&s.reject(t)},ei(this,n),r&&i&&(this.attributes=Or({},u,r));const d=this.isNew()?"create":n.patch?"patch":"update";"patch"!==d||n.attrs||(n.attrs=r);const h=this.sync(d,this,n);return this.attributes=u,o?s:h},destroy:function(e){e=e?Oi(e):{};const t=this,n=e.success,r=e.wait,i=function(){t.stopListening(),t.trigger("destroy",t,t.collection,e)};e.success=function(o){r&&i(),n&&n.call(e.context,t,o,e),t.isNew()||t.trigger("sync",t,o,e)};let o=!1;return this.isNew()?Ri(e.success):(ei(this,e),o=this.sync("delete",this,e)),r||i(),o},url:function(){const e=Qr(this,"urlRoot")||Qr(this.collection,"url")||Zr();if(this.isNew())return e;const t=this.get(this.idAttribute);return e.replace(/[^\/]$/,"$&/")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},Or({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=Or({},this.attributes,e);const n=this.validationError=this.validate(e,t)||null;return!n||(this.trigger("invalid",this,n,Or(t,{validationError:n})),!1)}});var Ho=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i};
 /**
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description This is the core utilities module.
- */const Ps=dr.f.Strophe,Ls={isTagEqual:function(e,t){if(e.nodeTree)return Ls.isTagEqual(e.nodeTree,t);if(e instanceof Element)return Ps.isTagEqual(e,t);throw Error("isTagEqual called with value which isn't an element or Strophe.Builder instance")}},zs=new DOMParser,Fs=zs.parseFromString("invalid","text/xml").getElementsByTagName("parsererror")[0].namespaceURI;
+ */const Uo=vr.f.Strophe,$o={isTagEqual:function(e,t){if(e.nodeTree)return $o.isTagEqual(e.nodeTree,t);if(e instanceof Element)return Uo.isTagEqual(e,t);throw Error("isTagEqual called with value which isn't an element or Strophe.Builder instance")}},Wo=new DOMParser,Go=Wo.parseFromString("invalid","text/xml").getElementsByTagName("parsererror")[0].namespaceURI;
 /**
  * Clears the specified timeout and interval.
  * @method u#clearTimers
@@ -73,7 +80,7 @@
  * @copyright Simen Bekkhus 2016
  * @license MIT
  */
-function Bs(e,t){clearTimeout(e),clearInterval(t)}
+function Vo(e,t){clearTimeout(e),clearInterval(t)}
 /**
  * Creates a {@link Promise} that resolves if the passed in function returns a truthy value.
  * Rejects if it throws or does not return truthy within the given max_wait.
@@ -86,7 +93,7 @@ function Bs(e,t){clearTimeout(e),clearInterval(t)}
  *  or rejected with the exception thrown by it or it times out.
  * @copyright Simen Bekkhus 2016
  * @license MIT
- */Ls.getJIDFromURI=function(e){return e.startsWith("xmpp:")&&e.endsWith("?join")?e.replace(/^xmpp:/,"").replace(/\?join$/,""):e},Ls.toStanza=function(e){const t=zs.parseFromString(e,"text/xml");if(t.getElementsByTagNameNS(Fs,"parsererror").length)throw new Error("Parser Error: ".concat(e));return t.firstElementChild},Ls.getLongestSubstring=function(e,t){return t.reduce((function(t,n){return e.startsWith(n)&&n.length>t.length?n:t}),"")},Ls.prefixMentions=function(e){let t=e.get("message");return(e.get("references")||[]).sort((e,t)=>t.begin-e.begin).forEach(e=>{t="".concat(t.slice(0,e.begin),"@").concat(t.slice(e.begin))}),t},Ls.isValidJID=function(e){return"string"==typeof e&&(2===Ds(e.split("@")).length&&!e.startsWith("@")&&!e.endsWith("@"))},Ls.isValidMUCJID=function(e){return!e.startsWith("@")&&!e.endsWith("@")},Ls.isSameBareJID=function(e,t){return"string"==typeof e&&"string"==typeof t&&Ps.getBareJidFromJid(e).toLowerCase()===Ps.getBareJidFromJid(t).toLowerCase()},Ls.isSameDomain=function(e,t){return"string"==typeof e&&"string"==typeof t&&Ps.getDomainFromJid(e).toLowerCase()===Ps.getDomainFromJid(t).toLowerCase()},Ls.isNewMessage=function(e){return e instanceof Element?!(ur()('result[xmlns="'.concat(Ps.NS.MAM,'"]'),e).length&&ur()('delay[xmlns="'.concat(Ps.NS.DELAY,'"]'),e).length):(e instanceof Rs&&(e=e.attributes),!(e.is_delayed&&e.is_archived))},Ls.shouldCreateMessage=function(e){return e.retracted||!Ls.isEmptyMessage(e)},Ls.shouldCreateGroupchatMessage=function(e){return e.nick&&(Ls.shouldCreateMessage(e)||e.is_tombstone)},Ls.isEmptyMessage=function(e){return e instanceof Rs&&(e=e.attributes),!(e.oob_url||e.file||e.is_encrypted&&e.plaintext||e.message)},Ls.isOnlyChatStateNotification=function(e){return e instanceof Element?null===e.querySelector("body")&&(null!==e.querySelector("active")||null!==e.querySelector("composing")||null!==e.querySelector("inactive")||null!==e.querySelector("paused")||null!==e.querySelector("gone")):(e instanceof Rs&&(e=e.attributes),e.chat_state&&Ls.isEmptyMessage(e))},Ls.isOnlyMessageDeliveryReceipt=function(e){return e instanceof Element?null===e.querySelector("body")&&null!==e.querySelector("received"):(e instanceof Rs&&(e=e.attributes),e.received&&Ls.isEmptyMessage(e))},Ls.isChatRoom=function(e){return e&&"chatroom"===e.get("type")},Ls.isErrorObject=function(e){return e instanceof Error},Ls.isErrorStanza=function(e){return!!Mn(e)&&"error"===e.getAttribute("type")},Ls.isForbiddenError=function(e){return!!Mn(e)&&ur()('error[type="auth"] forbidden[xmlns="'.concat(Ps.NS.STANZAS,'"]'),e).length>0},Ls.isServiceUnavailableError=function(e){return!!Mn(e)&&ur()('error[type="cancel"] service-unavailable[xmlns="'.concat(Ps.NS.STANZAS,'"]'),e).length>0},Ls.merge=function e(t,n){for(const r in n)N(t[r])?e(t[r],n[r]):t[r]=n[r]},Ls.getOuterWidth=function(e,t=!1){let n=e.offsetWidth;if(!t)return n;const r=window.getComputedStyle(e);return n+=parseInt(r.marginLeft?r.marginLeft:0,10)+parseInt(r.marginRight?r.marginRight:0,10),n},Ls.stringToElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild},Ls.matchesSelector=function(e,t){const n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return!!n&&n.call(e,t)},Ls.queryChildren=function(e,t){return Array.from(e.childNodes).filter(e=>Ls.matchesSelector(e,t))},Ls.contains=function(e,t){const n=(e,n)=>e.get(n).toLowerCase().includes(t.toLowerCase());return function(t){if("object"==typeof e)return Object.keys(e).reduce((e,r)=>e||n(t,r),!1);if("string"==typeof e)return n(t,e);throw new TypeError("contains: wrong attribute type. Must be string or array.")}},Ls.isOfType=function(e,t){return t.get("type")==e},Ls.isInstance=function(e,t){return t instanceof e},Ls.getAttribute=function(e,t){return t.get(e)},Ls.contains.not=function(e,t){return function(n){return!Ls.contains(e,t)(n)}},Ls.rootContains=function(e,t){return e!==document||e.contains?e.contains?e.contains(t):window.HTMLElement.prototype.contains.call(e,t):document.head.contains(t)||document.body.contains(t)},Ls.createFragmentFromText=function(e){var t,n=document.createDocumentFragment(),r=document.createElement("body");for(r.innerHTML=e;t=r.firstChild;)n.appendChild(t);return n},Ls.isPersistableModel=function(e){return e.collection&&e.collection.browserStorage},Ls.getResolveablePromise=function(){const e={isResolved:!1,isPending:!0,isRejected:!1},t=new Promise((t,n)=>{e.resolve=t,e.reject=n});return Object.assign(t,e),t.then((function(e){return t.isResolved=!0,t.isPending=!1,t.isRejected=!1,e}),(function(e){throw t.isResolved=!1,t.isPending=!1,t.isRejected=!0,e})),t},Ls.interpolate=function(e,t){return e.replace(/{{{([^{}]*)}}}/g,(e,n)=>{var r=t[n];return"string"==typeof r||"number"==typeof r?r:e})},Ls.onMultipleEvents=function(e=[],t){let n=[];function r(r){n.push(r),e.length===n.length&&(t(n),n=[])}e.forEach(e=>e.object.on(e.event,r))},Ls.safeSave=function(e,t,n){Ls.isPersistableModel(e)?e.save(t,n):e.set(t,n)},Ls.siblingIndex=function(e){for(var t=0;e=e.previousElementSibling;t++);return t},Ls.getCurrentWord=function(e,t,n){t||(t=e.selectionEnd||void 0);let[r]=e.value.slice(0,t).split(/\s/).slice(-1);return n&&([r]=r.split(n).slice(-1)),r},Ls.replaceCurrentWord=function(e,t,n=[]){const r=e.selectionEnd||void 0,i=bs(e.value.slice(0,r).split(/\s/)),s=e.value,o=n.includes(i[0])?i[0]:"";e.value=s.slice(0,r-i.length)+o+"".concat(t," ")+s.slice(r);const a=r-i.length+t.length+1;e.selectionEnd=o?a+1:a},Ls.triggerEvent=function(e,t,n="Event",r=!0,i=!0){const s=document.createEvent(n);s.initEvent(t,r,i),e.dispatchEvent(s)},Ls.getSelectValues=function(e){const t=[],n=e&&e.options;for(var r=0,i=n.length;r<i;r++){const e=n[r];e.selected&&t.push(e.value||e.text)}return t},Ls.formatFingerprint=function(e){e=e.replace(/^05/,"");for(let t=1;t<8;t++){const n=8*t+t-1;e=e.slice(0,n)+" "+e.slice(n)}return e},Ls.appendArrayBuffer=function(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer},Ls.arrayBufferToHex=function(e){return Array.prototype.map.call(new Uint8Array(e),e=>("00"+e.toString(16)).slice(-2)).join("")},Ls.arrayBufferToString=function(e){return new TextDecoder("utf-8").decode(e)},Ls.stringToArrayBuffer=function(e){return new TextEncoder("utf-8").encode(e).buffer},Ls.arrayBufferToBase64=function(e){return btoa(new Uint8Array(e).reduce((e,t)=>e+String.fromCharCode(t),""))},Ls.base64ToArrayBuffer=function(e){const t=window.atob(e),n=t.length,r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=t.charCodeAt(e);return r.buffer},Ls.getRandomInt=function(e){return Math.floor(Math.random()*Math.floor(e))},Ls.placeCaretAtEnd=function(e){e!==document.activeElement&&e.focus();const t=2*e.value.length;setTimeout(()=>e.setSelectionRange(t,t),1),this.scrollTop=999999},Ls.getUniqueId=function(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t},Ls.waitUntil=function(e,t=300,n=3){try{const t=e();if(t)return Promise.resolve(t)}catch(e){return Promise.reject(e)}const r=Ls.getResolveablePromise(),i=new Error;const s=setInterval((function(){try{const t=e();t&&(Bs(o,s),r.resolve(t))}catch(e){Bs(o,s),r.reject(e)}}),n);const o=setTimeout((function(){Bs(o,s);const e="Wait until promise timed out: \n\n".concat(i.stack);console.trace(),Pn.error(e),r.reject(new Error(e))}),t);return r};var qs=Ls;const Hs=dr.f.Strophe,Us=dr.f.$msg,{NS:$s}=Hs;function Ws(e){const t=ur()('spoiler[xmlns="'.concat(Hs.NS.SPOILER,'"]'),e).pop();return{is_spoiler:!!t,spoiler_hint:null==t?void 0:t.textContent}}function Vs(e){const t=ur()('x[xmlns="'.concat(Hs.NS.OUTOFBAND,'"]'),e).pop();var n,r;return t?{oob_url:null===(n=t.querySelector("url"))||void 0===n?void 0:n.textContent,oob_desc:null===(r=t.querySelector("desc"))||void 0===r?void 0:r.textContent}:{}}function Gs(e,t){const n=ur()('replace[xmlns="'.concat(Hs.NS.MESSAGE_CORRECT,'"]'),e).pop();if(n){const e=n.getAttribute("id"),r=e;if(e){const n=ur()('delay[xmlns="'.concat(Hs.NS.DELAY,'"]'),t).pop();return{msgid:r,replace_id:e,edited:n?Sn()(n.getAttribute("stamp")).toISOString():(new Date).toISOString()}}}return{}}function Js(e,t){var n;const r=ur()('encrypted[xmlns="'.concat(Hs.NS.OMEMO,'"]'),e).pop(),i={is_encrypted:!!r};if(!r||!t.config.get("trusted"))return i;const s=r.querySelector("header");i.encrypted={device_id:s.getAttribute("sid")};const o=null===(n=t.omemo_store)||void 0===n?void 0:n.get("device_id"),a=o&&ur()('key[rid="'.concat(o,'"]'),r).pop();var c;a&&Object.assign(i.encrypted,{iv:s.querySelector("iv").textContent,key:a.textContent,payload:(null===(c=r.querySelector("payload"))||void 0===c?void 0:c.textContent)||null,prekey:["true","1"].includes(a.getAttribute("prekey"))});return i}function Xs(e,t){return"me"!==t.sender&&!t.is_carbon&&!t.is_archived&&ur()('request[xmlns="'.concat(Hs.NS.RECEIPTS,'"]'),e).length}function Qs(e){const t=ur()('received[xmlns="'.concat(Hs.NS.RECEIPTS,'"]'),e).pop();return null==t?void 0:t.getAttribute("id")}function Ys(e){var t;return null===(t=ur()('\n        composing[xmlns="'.concat($s.CHATSTATES,'"],\n        paused[xmlns="').concat($s.CHATSTATES,'"],\n        inactive[xmlns="').concat($s.CHATSTATES,'"],\n        active[xmlns="').concat($s.CHATSTATES,'"],\n        gone[xmlns="').concat($s.CHATSTATES,'"]'),e).pop())||void 0===t?void 0:t.nodeName}function Ks(e){const t=Hs.NS.CARBONS;return ur()('message > received[xmlns="'.concat(t,'"]'),e).length>0||ur()('message > sent[xmlns="'.concat(t,'"]'),e).length>0}function Zs(e,t){const n={},r=ur()('stanza-id[xmlns="'.concat(Hs.NS.SID,'"]'),e).reduce((e,t)=>(e["stanza_id ".concat(t.getAttribute("by"))]=t.getAttribute("id"),e),{});Object.assign(n,r);const i=ur()('message > result[xmlns="'.concat(Hs.NS.MAM,'"]'),t).pop();if(i){const e=t.getAttribute("from");e?n["stanza_id ".concat(e)]=i.getAttribute("id"):n.stanza_id=i.getAttribute("id")}const s=ur()('origin-id[xmlns="'.concat(Hs.NS.SID,'"]'),e).pop();return s&&(n.origin_id=s.getAttribute("id")),n}function eo(e,t){const n=ur()('> apply-to[xmlns="'.concat(Hs.NS.FASTEN,'"]'),e).pop();if(n){const e=n.getAttribute("id");if(ur()('> retract[xmlns="'.concat(Hs.NS.RETRACT,'"]'),n).pop()){const n=ur()('delay[xmlns="'.concat(Hs.NS.DELAY,'"]'),t).pop();return{editable:!1,retracted:n?Sn()(n.getAttribute("stamp")).toISOString():(new Date).toISOString(),retracted_id:e}}}else{const t=ur()('> retracted[xmlns="'.concat(Hs.NS.RETRACT,'"]'),e).pop();if(t)return{editable:!1,is_tombstone:!0,retracted:t.getAttribute("stamp")}}return{}}function to(e){var t;const n=null===(t=e.querySelector("body"))||void 0===t?void 0:t.textContent;return ur()('reference[xmlns="'.concat(Hs.NS.REFERENCE,'"]'),e).map(e=>{const t=e.getAttribute("begin"),r=e.getAttribute("end");return{begin:t,end:r,type:e.getAttribute("type"),value:n.slice(t,r),uri:e.getAttribute("uri")}})}function no(e,t){qc.send(Us({to:e.getAttribute("from"),type:"error",id:e.getAttribute("id")}).c("error",{type:"cancel"}).c("not-allowed",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("text",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).t(t)),Pn.warn("Rejecting message stanza with the following reason: ".concat(t)),Pn.warn(e)}function ro(e){if("error"===e.getAttribute("type")){const t=e.querySelector("error"),n=ur()('text[xmlns="'.concat(Hs.NS.STANZAS,'"]'),t).pop();return{is_error:!0,error_text:null==n?void 0:n.textContent,error_type:t.getAttribute("type"),error_condition:t.firstElementChild.nodeName}}return{}}class io extends Error{constructor(e,t){super(e,t),this.name="StanzaParseError",this.stanza=t}}function so(e){if(ur()('message > forwarded[xmlns="'.concat(Hs.NS.FORWARD,'"]'),e).length){no(e,"Forwarded messages not part of an encapsulating protocol are not supported");const t=e.getAttribute("from");return new io("Ignoring unencapsulated forwarded message from ".concat(t),e)}}const oo={isHeadline:e=>"headline"===e.getAttribute("type"),isServerMessage(e){const t=e.getAttribute("from");return!("error"===e.getAttribute("type")||!t||t.includes("@"))},getChatMarker:e=>ur()('\n            acknowledged[xmlns="'.concat(Hs.NS.MARKERS,'"],\n            displayed[xmlns="').concat(Hs.NS.MARKERS,'"],\n            received[xmlns="').concat(Hs.NS.MARKERS,'"]'),e).pop(),isArchived:e=>!!ur()('message > result[xmlns="'.concat(Hs.NS.MAM,'"]'),e).pop(),getAttributes:e=>e.getAttributeNames().reduce((t,n)=>(t[n]=Hs.xmlunescape(e.getAttribute(n)),t),{}),async parseMessage(e,t){var n,r,i,s,o,a;const c=so(e);if(c)return c;let l=e.getAttribute("to");const u=Hs.getResourceFromJid(l);if(qc.settings.get("filter_by_resource")&&u&&u!==t.resource)return new io("Ignoring incoming message intended for a different resource: ".concat(l),e);const d=e;let h=e.getAttribute("from")||t.bare_jid;if(Ks(e)){if(h!==t.bare_jid)return no(e,"Rejecting carbon from invalid JID"),new io("Rejecting carbon from invalid JID ".concat(l),e);{const t='[xmlns="'.concat(Hs.NS.CARBONS,'"] > forwarded[xmlns="').concat(Hs.NS.FORWARD,'"] > message');l=(e=ur()(t,e).pop()).getAttribute("to"),h=e.getAttribute("from")}}const f=oo.isArchived(e);if(f){if(h!==t.bare_jid)return new io("Invalid Stanza: alleged MAM message from ".concat(e.getAttribute("from")),e);{const t='[xmlns="'.concat(Hs.NS.MAM,'"] > forwarded[xmlns="').concat(Hs.NS.FORWARD,'"] > message');l=(e=ur()(t,e).pop()).getAttribute("to"),h=e.getAttribute("from")}}const p=Hs.getBareJidFromJid(h),g=p===t.bare_jid;if(g&&null===l)return new io("Don't know how to handle message stanza without 'to' attribute. ".concat(e.outerHTML),e);const m=oo.isHeadline(e),v=oo.isServerMessage(e);let _,b;if(!m&&!v&&(b=g?Hs.getBareJidFromJid(l):p,_=await qc.contacts.get(b),void 0===_&&!qc.settings.get("allow_non_roster_messaging")))return Pn.error(e),new io("Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.",e);const y=ur()('delay[xmlns="'.concat(Hs.NS.DELAY,'"]'),d).pop(),w=oo.getChatMarker(e),S=(new Date).toISOString();let x=Object.assign({contact_jid:b,is_archived:f,is_headline:m,is_server_message:v,body:null===(n=e.querySelector("body"))||void 0===n||null===(r=n.textContent)||void 0===r?void 0:r.trim(),chat_state:Ys(e),from:Hs.getBareJidFromJid(e.getAttribute("from")),is_carbon:Ks(d),is_delayed:!!y,is_markable:!!ur()('markable[xmlns="'.concat(Hs.NS.MARKERS,'"]'),e).length,is_marker:!!w,marker_id:w&&w.getAttribute("id"),msgid:e.getAttribute("id")||d.getAttribute("id"),nick:null===(i=_)||void 0===i||null===(s=i.attributes)||void 0===s?void 0:s.nickname,receipt_id:Qs(e),received:(new Date).toISOString(),references:to(e),sender:g?"me":"them",subject:null===(o=e.querySelector("subject"))||void 0===o?void 0:o.textContent,thread:null===(a=e.querySelector("thread"))||void 0===a?void 0:a.textContent,time:y?Sn()(y.getAttribute("stamp")).toISOString():S,to:e.getAttribute("to"),type:e.getAttribute("type")},ro(e),Vs(e),Ws(e),Gs(e,d),Zs(e,d),eo(e,d),Js(e,t));if(x.is_archived){const n=d.getAttribute("from");if(n&&n!==t.bare_jid)return new io("Invalid Stanza: Forged MAM message from ".concat(n),e)}return await qc.emojis.initialize(),x=Object.assign({message:x.body||x.error,is_only_emojis:!!x.body&&qs.isOnlyEmojis(x.body),is_valid_receipt_request:Xs(e,x)},x),x.id=x.origin_id||x["stanza_id ".concat(x.from)]||qs.getUniqueId(),qc.hook("parseMessage",e,x)},async parseMUCMessage(e,t,n){var r,i,s,o,a;const c=so(e);if(c)return c;const l='[xmlns="'.concat($s.MAM,'"] > forwarded[xmlns="').concat($s.FORWARD,'"] > message'),u=e;if(e=ur()(l,e).pop()||e,ur()('message > forwarded[xmlns="'.concat(Hs.NS.FORWARD,'"]'),e).length)return new io("Invalid Stanza: Forged MAM groupchat message from ".concat(e.getAttribute("from")),e);const d=ur()('delay[xmlns="'.concat(Hs.NS.DELAY,'"]'),u).pop(),h=e.getAttribute("from"),f=Hs.unescapeNode(Hs.getResourceFromJid(h)),p=oo.getChatMarker(e),g=(new Date).toISOString();let m=Object.assign({from:h,nick:f,body:null===(r=e.querySelector("body"))||void 0===r||null===(i=r.textContent)||void 0===i?void 0:i.trim(),chat_state:Ys(e),from_muc:Hs.getBareJidFromJid(h),from_real_jid:null===(s=t.occupants.findOccupant({nick:f}))||void 0===s?void 0:s.get("jid"),is_archived:oo.isArchived(u),is_carbon:Ks(u),is_delayed:!!d,is_headline:oo.isHeadline(e),is_markable:!!ur()('markable[xmlns="'.concat(Hs.NS.MARKERS,'"]'),e).length,is_marker:!!p,marker_id:p&&p.getAttribute("id"),msgid:e.getAttribute("id")||u.getAttribute("id"),receipt_id:Qs(e),received:(new Date).toISOString(),references:to(e),subject:null===(o=e.querySelector("subject"))||void 0===o?void 0:o.textContent,thread:null===(a=e.querySelector("thread"))||void 0===a?void 0:a.textContent,time:d?Sn()(d.getAttribute("stamp")).toISOString():g,to:e.getAttribute("to"),type:e.getAttribute("type")},ro(e),Vs(e),Ws(e),Gs(e,u),Zs(e,u),eo(e,u),function(e){const t=ur()('apply-to[xmlns="'.concat(Hs.NS.FASTEN,'"]'),e).pop();if(t){const e=t.getAttribute("id"),r=ur()('moderated[xmlns="'.concat(Hs.NS.MODERATE,'"]'),t).pop();if(r){var n;if(ur()('retract[xmlns="'.concat(Hs.NS.RETRACT,'"]'),r).pop())return{editable:!1,moderated:"retracted",moderated_by:r.getAttribute("by"),moderated_id:e,moderation_reason:null===(n=r.querySelector("reason"))||void 0===n?void 0:n.textContent}}}else{const t=ur()('> moderated[xmlns="'.concat(Hs.NS.MODERATE,'"]'),e).pop();if(t){var r;if(ur()('retracted[xmlns="'.concat(Hs.NS.RETRACT,'"]'),t).pop())return{editable:!1,is_tombstone:!0,moderated_by:t.getAttribute("by"),retracted:t.getAttribute("stamp"),moderation_reason:null===(r=t.querySelector("reason"))||void 0===r?void 0:r.textContent}}}return{}}(e),Js(e,n));return await qc.emojis.initialize(),m=Object.assign({is_only_emojis:!!m.body&&qs.isOnlyEmojis(m.body),is_valid_receipt_request:Xs(e,m),message:m.body||m.error,sender:m.nick===t.get("nick")?"me":"them"},m),m.is_archived&&u.getAttribute("from")!==m.from_muc?new io("Invalid Stanza: Forged MAM message from ".concat(u.getAttribute("from")),e):m.is_archived&&u.getAttribute("from")!==t.get("jid")?new io("Invalid Stanza: Forged MAM groupchat message from ".concat(e.getAttribute("from")),e):m.is_carbon?new io("Invalid Stanza: MUC messages SHOULD NOT be XEP-0280 carbon copied",e):(m.id=m.origin_id||m["stanza_id ".concat(m.from_muc||m.from)]||qs.getUniqueId(),qc.hook("parseMUCMessage",e,m))},parseMUCPresence(e){const t=e.getAttribute("from"),n=e.getAttribute("type"),r={from:t,nick:Hs.getResourceFromJid(t),type:n,states:[],hats:[],show:"unavailable"!==n?"online":"offline"};return Array.from(e.children).forEach(e=>{if(e.matches("status"))r.status=e.textContent||null;else if(e.matches("show"))r.show=e.textContent||"online";else if(e.matches("x")&&e.getAttribute("xmlns")===Hs.NS.MUC_USER)Array.from(e.children).forEach(e=>{"item"===e.nodeName?(r.affiliation=e.getAttribute("affiliation"),r.role=e.getAttribute("role"),r.jid=e.getAttribute("jid"),r.nick=e.getAttribute("nick")||r.nick):"status"==e.nodeName&&e.getAttribute("code")&&r.states.push(e.getAttribute("code"))});else if(e.matches("x")&&e.getAttribute("xmlns")===Hs.NS.VCARDUPDATE){var t;r.image_hash=null===(t=e.querySelector("photo"))||void 0===t?void 0:t.textContent}else e.matches("hats")&&e.getAttribute("xmlns")===Hs.NS.MUC_HATS&&(r.hats=Array.from(e.children).map(e=>e.matches("hat")&&{title:e.getAttribute("title"),uri:e.getAttribute("uri")}))}),r}};var ao=oo;var co=function(e,t,n,r){for(var i=-1,s=null==e?0:e.length;++i<s;){var o=e[i];t(r,o,n(o),e)}return r};var lo=function(e,t){return function(n,r){if(null==n)return n;if(!Xe(n))return e(n,r);for(var i=n.length,s=t?i:-1,o=Object(n);(t?s--:++s<i)&&!1!==r(o[s],s,o););return n}},uo=lo(Di);var ho=function(e,t,n,r){return uo(e,(function(e,i,s){t(r,e,n(e),s)})),r};var fo=function(e,t){return function(n,r){var i=ke(n)?co:ho,s=t?t():{};return i(n,e,vs(r,2),s)}},po=Object.prototype.hasOwnProperty,go=fo((function(e,t,n){po.call(e,n)?++e[n]:be(e,n,1)}));var mo=function(e,t,n,r){for(var i=e.length,s=n+(r?1:-1);r?s--:++s<i;)if(t(e[s],s,e))return s;return-1};var vo=function(e){return e!=e};var _o=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1};var bo=function(e,t,n){return t==t?_o(e,t,n):mo(e,vo,n)};var yo=function(e,t){return!!(null==e?0:e.length)&&bo(e,t,0)>-1};var wo=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1};var So=function(e,t,n,r){var i=-1,s=yo,o=!0,a=e.length,c=[],l=t.length;if(!a)return c;n&&(t=Dr(t,Le(n))),r?(s=wo,o=!1):t.length>=200&&(s=Wi,o=!1,t=new Ui(t));e:for(;++i<a;){var u=e[i],d=null==n?u:n(u);if(u=r||0!==u?u:0,o&&d==d){for(var h=l;h--;)if(t[h]===d)continue e;c.push(u)}else s(t,d,r)||c.push(u)}return c};var xo=function(e){return Ee(e)&&Xe(e)},Eo=wr((function(e,t){return xo(e)?So(e,Cs(t,1,xo,!0)):[]}));var Ao=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0};var Co=function(e,t){var n=!0;return uo(e,(function(e,r,i){return n=!!t(e,r,i)})),n};var jo=function(e,t,n){var r=ke(e)?Ao:Co;return n&&Sr(e,t,n)&&(t=void 0),r(e,vs(t,3))},To=Math.max;var Oo=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ai(n);return i<0&&(i=To(r+i,0)),mo(e,vs(t,3),i)},ko=Math.max,No=Math.min;var Io=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=ai(n),i=n<0?ko(r+i,0):No(i,r-1)),mo(e,vs(t,3),i,!0)},Mo=Object.prototype.hasOwnProperty,Ro=fo((function(e,t,n){Mo.call(e,n)?e[n].push(t):be(e,n,[t])})),Do=Math.max;var Po=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ai(n);return i<0&&(i=Do(r+i,0)),bo(e,t,i)},Lo=fo((function(e,t,n){be(e,n,t)}));var zo=function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r},Fo=Math.max,Bo=Math.min;var qo=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ai(n))<0?Fo(r+i,0):Bo(i,r-1)),t==t?zo(e,t,i):mo(e,vo,i,!0)};var Ho=function(e,t){var n;return uo(e,(function(e,r,i){return!(n=t(e,r,i))})),!!n};var Uo=function(e,t,n){var r=ke(e)?$i:Ho;return n&&Sr(e,t,n)&&(t=void 0),r(e,vs(t,3))};var $o=function(e,t){var n=-1,r=Xe(e)?Array(e.length):[];return uo(e,(function(e,i,s){r[++n]=t(e,i,s)})),r};var Wo=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e};var Vo=function(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,s=Cr(e),o=void 0!==t,a=null===t,c=t==t,l=Cr(t);if(!a&&!l&&!s&&e>t||s&&o&&c&&!a&&!l||r&&o&&c||!n&&c||!i)return 1;if(!r&&!s&&!l&&e<t||l&&n&&i&&!r&&!s||a&&n&&i||!o&&i||!c)return-1}return 0};var Go=function(e,t,n){for(var r=-1,i=e.criteria,s=t.criteria,o=i.length,a=n.length;++r<o;){var c=Vo(i[r],s[r]);if(c)return r>=a?c:c*("desc"==n[r]?-1:1)}return e.index-t.index};var Jo=function(e,t,n){var r=-1;t=Dr(t.length?t:[fr],Le(vs));var i=$o(e,(function(e,n,i){return{criteria:Dr(t,(function(t){return t(e)})),index:++r,value:e}}));return Wo(i,(function(e,t){return Go(e,t,n)}))},Xo=wr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&Sr(e,t[0],t[1])?t=[]:n>2&&Sr(t[0],t[1],t[2])&&(t=[t[0]]),Jo(e,Cs(t,1),[])}));const Qo=Array.prototype.slice,Yo=function(e,t){t||(t={}),this.preinitialize.apply(this,arguments),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,xr({silent:!0},t))};Yo.extend=Wr;const Ko={add:!0,remove:!0,merge:!0},Zo={add:!0,remove:!1},ea=function(e,t,n){n=Math.min(Math.max(n,0),e.length);const r=Array(e.length-n),i=t.length;let s;for(s=0;s<r.length;s++)r[s]=e[s+n];for(s=0;s<i;s++)e[s+n]=t[s];for(s=0;s<r.length;s++)e[s+i+n]=r[s]};Object.assign(Yo.prototype,hi,{model:Rs,preinitialize:function(){},initialize:function(){},toJSON:function(e){return this.map((function(t){return t.toJSON(e)}))},sync:function(e,t,n){return Qr(this)(e,t,n)},add:function(e,t){return this.set(e,xr({merge:!1},t,Zo))},remove:function(e,t){t=xr({},t);const n=!Array.isArray(e);e=n?[e]:e.slice();const r=this._removeModels(e,t);return!t.silent&&r.length&&(t.changes={added:[],merged:[],removed:r},this.trigger("update",this,t)),n?r[0]:r},set:function(e,t){if(null==e)return;(t=xr({},Ko,t)).parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);const n=!Array.isArray(e);e=n?[e]:e.slice();let r=t.at;null!=r&&(r=+r),r>this.length&&(r=this.length),r<0&&(r+=this.length+1);const i=[],s=[],o=[],a=[],c={},l=t.add,u=t.merge,d=t.remove;let h=!1;const f=this.comparator&&null==r&&!1!==t.sort,p=Zt(this.comparator)?this.comparator:null;let g,m;for(m=0;m<e.length;m++){g=e[m];const n=this.get(g);if(n){if(u&&g!==n){let e=this._isModel(g)?g.attributes:g;t.parse&&(e=n.parse(e,t)),n.set(e,t),o.push(n),f&&!h&&(h=n.hasChanged(p))}c[n.cid]||(c[n.cid]=!0,i.push(n)),e[m]=n}else l&&(g=e[m]=this._prepareModel(g,t),g&&(s.push(g),this._addReference(g,t),c[g.cid]=!0,i.push(g)))}if(d){for(m=0;m<this.length;m++)g=this.models[m],c[g.cid]||a.push(g);a.length&&this._removeModels(a,t)}let v=!1;const _=!f&&l&&d;if(i.length&&_?(v=this.length!==i.length||Uo(this.models,(e,t)=>e!==i[t]),this.models.length=0,ea(this.models,i,0),this.length=this.models.length):s.length&&(f&&(h=!0),ea(this.models,s,null==r?this.length:r),this.length=this.models.length),h&&this.sort({silent:!0}),!t.silent){for(m=0;m<s.length;m++)null!=r&&(t.index=r+m),g=s[m],g.trigger("add",g,this,t);(h||v)&&this.trigger("sort",this,t),(s.length||a.length||o.length)&&(t.changes={added:s,removed:a,merged:o},this.trigger("update",this,t))}return n?e[0]:e},clearStore:async function(e={}){await Promise.all(Array.from(this.models).map(t=>new Promise(n=>{t.destroy(Object.assign(e,{success:n,error:(e,t)=>{console.error(t),n()}}))}))),await this.browserStorage.clear(),this.reset()},reset:function(e,t){t=t?xi(t):{};for(let e=0;e<this.models.length;e++)this._removeReference(this.models[e],t);return t.previousModels=this.models,this._reset(),e=this.add(e,xr({silent:!0},t)),t.silent||this.trigger("reset",this,t),e},push:function(e,t){return this.add(e,xr({at:this.length},t))},pop:function(e){const t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,xr({at:0},t))},shift:function(e){const t=this.at(0);return this.remove(t,e)},slice:function(){return Qo.apply(this.models,arguments)},filter:function(e,t){return this.models.filter(M(e)?e:t=>t.matches(e),t)},every:function(e){return jo(this.models.map(e=>e.attributes),e)},difference:function(e){return Eo(this.models,e)},max:function(){return Math.max.apply(Math,this.models)},min:function(){return Math.min.apply(Math,this.models)},drop:function(e=1){return this.models.slice(e)},some:function(e){return Uo(this.models.map(e=>e.attributes),e)},sortBy:function(e){return Xo(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},isEmpty:function(){return Zr(this.models)},keyBy:function(e){return Lo(this.models,e)},each:function(e,t){return this.forEach(e,t)},forEach:function(e,t){return this.models.forEach(e,t)},includes:function(e){return this.models.includes(e)},size:function(){return this.models.length},countBy:function(e){return go(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},groupBy:function(e){return Ro(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},indexOf:function(e){return Po(this.models,e)},findLastIndex:function(e,t){return Io(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e),t)},lastIndexOf:function(e){return qo(this.models,e)},findIndex:function(e){return Oo(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},last:function(){const e=null==this.models?0:this.models.length;return e?this.models[e-1]:void 0},head:function(){return this.models[0]},first:function(){return this.head()},map:function(e,t){return this.models.map(M(e)?e:t=>Zt(e)?t.get(e):t.matches(e),t)},reduce:function(e,t){return this.models.reduce(e,t||this.models[0])},reduceRight:function(e,t){return this.models.reduceRight(e,t||this.models[0])},toArray:function(){return Array.from(this.models)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(this._isModel(e)?e.attributes:e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?"find":"filter"](e)},findWhere:function(e){return this.where(e,!0)},find:function(e,t){const n=M(e)?e:t=>t.matches(e);return this.models.find(n,t)},sort:function(e){let t=this.comparator;if(!t)throw new Error("Cannot sort a set without a comparator");e||(e={});const n=t.length;return M(t)&&(t=t.bind(this)),1===n||Zt(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger("sort",this,e),this},pluck:function(e){return this.map(e+"")},fetch:function(e){const t=(e=xr({parse:!0},e)).success,n=this,r=e.promise&&Vr();return e.success=function(i){const s=e.reset?"reset":"set";n[s](i,e),t&&t.call(e.context,n,i,e),r&&r.resolve(),n.trigger("sync",n,i,e)},Jr(this,e),r||this.sync("read",this,e)},create:function(e,t){const n=(t=t?xi(t):{}).wait,r=t.promise,i=r&&Vr();if(!(e=this._prepareModel(e,t)))return!1;n||this.add(e,t);const s=this,o=t.success,a=t.error;return t.success=function(e,t,a){n&&s.add(e,a),o&&o.call(a.context,e,t,a),r&&i.resolve(e)},t.error=function(e,t,n){a&&a.call(n.context,e,t,n),r&&i.reject(t)},e.save(null,Object.assign(t,{promise:!1})),r?i:e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||"id"]},values:function(){return new na(this,ra)},keys:function(){return new na(this,ia)},entries:function(){return new na(this,sa)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;(t=t?xi(t):{}).collection=this;const n=new this.model(e,t);return n.validationError?(this.trigger("invalid",this,n.validationError,t),!1):n},_removeModels:function(e,t){const n=[];for(let r=0;r<e.length;r++){const i=this.get(e[r]);if(!i)continue;const s=this.indexOf(i);this.models.splice(s,1),this.length--,delete this._byId[i.cid];const o=this.modelId(i.attributes);null!=o&&delete this._byId[o],t.silent||(t.index=s,i.trigger("remove",i,this,t)),n.push(i),this._removeReference(i,t)}return n},_isModel:function(e){return e instanceof Rs},_addReference:function(e,t){this._byId[e.cid]=e;const n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on("all",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];const n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off("all",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if(("add"===e||"remove"===e)&&n!==this)return;if("destroy"===e&&this.remove(t,r),"change"===e){const e=this.modelId(t.previousAttributes()),n=this.modelId(t.attributes);e!==n&&(null!=e&&delete this._byId[e],null!=n&&(this._byId[n]=t))}}this.trigger.apply(this,arguments)}});const ta="function"==typeof Symbol&&Symbol.iterator;ta&&(Yo.prototype[ta]=Yo.prototype.values);const na=function(e,t){this._collection=e,this._kind=t,this._index=0},ra=1,ia=2,sa=3;ta&&(na.prototype[ta]=function(){return this}),na.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){const e=this._collection.at(this._index);let t;if(this._index++,this._kind===ra)t=e;else{const n=this._collection.modelId(e.attributes);t=this._kind===ia?n:[n,e]}return{value:t,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var oa=n(33);class aa extends dr.e.Connection{constructor(e,t){super(e,t),this.debouncedReconnect=Object(oa.debounce)(this.reconnect,2e3)}static generateResource(){return"/converse.js-".concat(Math.floor(139749528*Math.random()).toString())}async bind(){await qc.trigger("beforeResourceBinding",{synchronous:!0}),super.bind()}async onDomainDiscovered(e){const t=await e.text(),n=(new window.DOMParser).parseFromString(t,"text/xml").firstElementChild;if("XRD"!=n.nodeName||"http://docs.oasis-open.org/ns/xri/xrd-1.0"!=n.namespaceURI)return Pn.warn("Could not discover XEP-0156 connection methods");const r=ur()('Link[rel="urn:xmpp:alt-connections:xbosh"]',n),i=ur()('Link[rel="urn:xmpp:alt-connections:websocket"]',n),s=r.map(e=>e.getAttribute("href")),o=i.map(e=>e.getAttribute("href"));0===s.length&&0===o.length?Pn.warn("Neither BOSH nor WebSocket connection methods have been specified with XEP-0156."):(qc.settings.set("websocket_url",o.pop()),qc.settings.set("bosh_service_url",s.pop()),this.service=qc.settings.get("websocket_url")||qc.settings.get("bosh_service_url"))}async discoverConnectionMethods(e){const t={mode:"cors",headers:{Accept:"application/xrd+xml, text/xml"}},n="https://".concat(e,"/.well-known/host-meta");let r;try{r=await fetch(n,t)}catch(e){return Pn.error("Failed to discover alternative connection methods at ".concat(n)),void Pn.error(e)}r.status>=200&&r.status<400?await this.onDomainDiscovered(r):Pn.warn("Could not discover XEP-0156 connection methods")}async connect(e,t,n){if(qc.settings.get("discover_connection_methods")){const t=dr.e.getDomainFromJid(e);await this.discoverConnectionMethods(t)}super.connect(e,t,n||this.onConnectStatusChanged,59)}async reconnect(){const{__:e}=Lc;return Pn.debug("RECONNECTING: the connection has dropped, attempting to reconnect."),this.setConnectionStatus(dr.e.Status.RECONNECTING,e("The connection has dropped, attempting to reconnect.")),qc.trigger("will-reconnect"),this.reconnecting=!0,await $c(),qc.user.login()}async onConnected(e){delete this.reconnecting,this.flush(),await Lc.setUserJID(this.jid),await qc.trigger("afterResourceBinding",e,{synchronous:!0}),e?qc.trigger("reconnected"):qc.trigger("connected")}setDisconnectionCause(e,t,n){void 0===e?(delete this.disconnection_cause,delete this.disconnection_reason):(void 0===this.disconnection_cause||n)&&(this.disconnection_cause=e,this.disconnection_reason=t)}setConnectionStatus(e,t){this.status=e,Lc.connfeedback.set({connection_status:e,message:t})}async finishDisconnection(){Pn.debug("DISCONNECTED"),delete this.reconnecting,this.reset(),$c(),await Vc(),delete Lc.connection,qc.trigger("disconnected")}onDisconnected(){if(!qc.settings.get("auto_reconnect"))return this.finishDisconnection();{const e=this.disconnection_reason;if(this.disconnection_cause===dr.e.Status.AUTHFAIL)return qc.settings.get("credentials_url")||qc.settings.get("authentication")===Lc.ANONYMOUS?qc.connection.reconnect():this.finishDisconnection();if(this.disconnection_cause===Lc.LOGOUT||e===dr.e.ErrorCondition.NO_AUTH_MECH||"host-unknown"===e||"remote-connection-failed"===e)return this.finishDisconnection();qc.connection.reconnect()}}onConnectStatusChanged(e,t){const{__:n}=Lc;var r;if(Pn.debug("Status changed to: ".concat(Lc.CONNECTION_STATUS[e])),e===dr.e.Status.ATTACHFAIL)this.setConnectionStatus(e),null===(r=this.worker_attach_promise)||void 0===r||r.resolve(!1);else if(e===dr.e.Status.CONNECTED||e===dr.e.Status.ATTACHED){var i,s;if((null===(i=this.worker_attach_promise)||void 0===i?void 0:i.isResolved)&&this.status===dr.e.Status.ATTACHED)return;this.setConnectionStatus(e),null===(s=this.worker_attach_promise)||void 0===s||s.resolve(!0),Lc.send_initial_presence=!0,this.setDisconnectionCause(),this.reconnecting?(Pn.debug(e===dr.e.Status.CONNECTED?"Reconnected":"Reattached"),this.onConnected(!0)):(Pn.debug(e===dr.e.Status.CONNECTED?"Connected":"Attached"),this.restored&&(Lc.send_initial_presence=!1),this.onConnected())}else if(e===dr.e.Status.DISCONNECTED)this.setDisconnectionCause(e,t),this.onDisconnected();else if(e===dr.e.Status.BINDREQUIRED)this.bind();else if(e===dr.e.Status.ERROR)this.setConnectionStatus(e,n("An error occurred while connecting to the chat server."));else if(e===dr.e.Status.CONNECTING)this.setConnectionStatus(e);else if(e===dr.e.Status.AUTHENTICATING)this.setConnectionStatus(e);else if(e===dr.e.Status.AUTHFAIL)t||(t=n("Your XMPP address and/or password is incorrect. Please try again.")),this.setConnectionStatus(e,t),this.setDisconnectionCause(e,t,!0),this.onDisconnected();else if(e===dr.e.Status.CONNFAIL){var o;let r=t;"host-unknown"===t||"remote-connection-failed"==t?r=n("Sorry, we could not connect to the XMPP host with domain: %1$s",'"'.concat(dr.e.getDomainFromJid(this.jid),'"')):void 0!==t&&t===(null===dr.e||void 0===dr.e||null===(o=dr.e.ErrorCondition)||void 0===o?void 0:o.NO_AUTH_MECH)&&(r=n("The XMPP server did not offer a supported authentication mechanism")),this.setConnectionStatus(e,r),this.setDisconnectionCause(e,t)}else e===dr.e.Status.DISCONNECTING&&this.setDisconnectionCause(e,t)}isType(e){return"websocket"===e.toLowerCase()?this._proto instanceof dr.e.Websocket:"bosh"===e.toLowerCase()?dr.e.Bosh&&this._proto instanceof dr.e.Bosh:void 0}hasResumed(){var e;return(null===(e=qc.settings.get("connection_options"))||void 0===e?void 0:e.worker)||this.isType("bosh")?Lc.connfeedback.get("connection_status")===dr.e.Status.ATTACHED:!this.do_bind}restoreWorkerSession(){return this.attach(this.onConnectStatusChanged),this.worker_attach_promise=qs.getResolveablePromise(),this.worker_attach_promise}}class ca extends aa{constructor(e,t){super(e,t),this.sent_stanzas=[],this.IQ_stanzas=[],this.IQ_ids=[],this.features=dr.e.xmlHtmlNode('<stream:features xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><ver xmlns="urn:xmpp:features:rosterver"/><csi xmlns="urn:xmpp:csi:0"/><this xmlns="http://jabber.org/protocol/caps" ver="UwBpfJpEt3IoLYfWma/o/p3FFRo=" hash="sha-1" node="http://prosody.im"/><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><required/></bind><sm xmlns=\'urn:xmpp:sm:3\'/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"><optional/></session></stream:features>').firstChild,this._proto._processRequest=()=>{},this._proto._disconnect=()=>this._onDisconnectTimeout(),this._proto._onDisconnectTimeout=()=>{},this._proto._connect=()=>{this.connected=!0,this.mock=!0,this.jid="romeo@montague.lit/orchard",this._changeConnectStatus(dr.e.Status.BINDREQUIRED)}}_processRequest(){}sendIQ(e,t,n){Object(oa.isElement)(e)||(e=e.nodeTree),this.IQ_stanzas.push(e);const r=super.sendIQ(e,t,n);return this.IQ_ids.push(r),r}send(e){return Object(oa.isElement)(e)?this.sent_stanzas.push(e):this.sent_stanzas.push(e.nodeTree),super.send(e)}async bind(){await qc.trigger("beforeResourceBinding",{synchronous:!0}),this.authenticated=!0,Lc.no_connection_on_bind||this._changeConnectStatus(dr.e.Status.CONNECTED)}}
+ */$o.getJIDFromURI=function(e){return e.startsWith("xmpp:")&&e.endsWith("?join")?e.replace(/^xmpp:/,"").replace(/\?join$/,""):e},$o.toStanza=function(e){const t=Wo.parseFromString(e,"text/xml");if(t.getElementsByTagNameNS(Go,"parsererror").length)throw new Error("Parser Error: ".concat(e));return t.firstElementChild},$o.getLongestSubstring=function(e,t){return t.reduce((function(t,n){return e.startsWith(n)&&n.length>t.length?n:t}),"")},$o.prefixMentions=function(e){let t=e.get("message");return(e.get("references")||[]).sort((e,t)=>t.begin-e.begin).forEach(e=>{t="".concat(t.slice(0,e.begin),"@").concat(t.slice(e.begin))}),t},$o.isValidJID=function(e){return"string"==typeof e&&(2===Ho(e.split("@")).length&&!e.startsWith("@")&&!e.endsWith("@"))},$o.isValidMUCJID=function(e){return!e.startsWith("@")&&!e.endsWith("@")},$o.isSameBareJID=function(e,t){return"string"==typeof e&&"string"==typeof t&&Uo.getBareJidFromJid(e).toLowerCase()===Uo.getBareJidFromJid(t).toLowerCase()},$o.isSameDomain=function(e,t){return"string"==typeof e&&"string"==typeof t&&Uo.getDomainFromJid(e).toLowerCase()===Uo.getDomainFromJid(t).toLowerCase()},$o.isNewMessage=function(e){return e instanceof Element?!(mr()('result[xmlns="'.concat(Uo.NS.MAM,'"]'),e).length&&mr()('delay[xmlns="'.concat(Uo.NS.DELAY,'"]'),e).length):(e instanceof qo&&(e=e.attributes),!(e.is_delayed&&e.is_archived))},$o.shouldCreateMessage=function(e){return e.retracted||!$o.isEmptyMessage(e)},$o.shouldCreateGroupchatMessage=function(e){return e.nick&&($o.shouldCreateMessage(e)||e.is_tombstone)},$o.isEmptyMessage=function(e){return e instanceof qo&&(e=e.attributes),!(e.oob_url||e.file||e.is_encrypted&&e.plaintext||e.message)},$o.isOnlyChatStateNotification=function(e){return e instanceof Element?null===e.querySelector("body")&&(null!==e.querySelector("active")||null!==e.querySelector("composing")||null!==e.querySelector("inactive")||null!==e.querySelector("paused")||null!==e.querySelector("gone")):(e instanceof qo&&(e=e.attributes),e.chat_state&&$o.isEmptyMessage(e))},$o.isOnlyMessageDeliveryReceipt=function(e){return e instanceof Element?null===e.querySelector("body")&&null!==e.querySelector("received"):(e instanceof qo&&(e=e.attributes),e.received&&$o.isEmptyMessage(e))},$o.isChatRoom=function(e){return e&&"chatroom"===e.get("type")},$o.isErrorObject=function(e){return e instanceof Error},$o.isErrorStanza=function(e){return!!Dn(e)&&"error"===e.getAttribute("type")},$o.isForbiddenError=function(e){return!!Dn(e)&&mr()('error[type="auth"] forbidden[xmlns="'.concat(Uo.NS.STANZAS,'"]'),e).length>0},$o.isServiceUnavailableError=function(e){return!!Dn(e)&&mr()('error[type="cancel"] service-unavailable[xmlns="'.concat(Uo.NS.STANZAS,'"]'),e).length>0},$o.merge=function e(t,n){for(const r in n)N(t[r])?e(t[r],n[r]):t[r]=n[r]},$o.getOuterWidth=function(e,t=!1){let n=e.offsetWidth;if(!t)return n;const r=window.getComputedStyle(e);return n+=parseInt(r.marginLeft?r.marginLeft:0,10)+parseInt(r.marginRight?r.marginRight:0,10),n},$o.stringToElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild},$o.matchesSelector=function(e,t){const n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return!!n&&n.call(e,t)},$o.queryChildren=function(e,t){return Array.from(e.childNodes).filter(e=>$o.matchesSelector(e,t))},$o.contains=function(e,t){const n=(e,n)=>e.get(n).toLowerCase().includes(t.toLowerCase());return function(t){if("object"==typeof e)return Object.keys(e).reduce((e,r)=>e||n(t,r),!1);if("string"==typeof e)return n(t,e);throw new TypeError("contains: wrong attribute type. Must be string or array.")}},$o.isOfType=function(e,t){return t.get("type")==e},$o.isInstance=function(e,t){return t instanceof e},$o.getAttribute=function(e,t){return t.get(e)},$o.contains.not=function(e,t){return function(n){return!$o.contains(e,t)(n)}},$o.rootContains=function(e,t){return e!==document||e.contains?e.contains?e.contains(t):window.HTMLElement.prototype.contains.call(e,t):document.head.contains(t)||document.body.contains(t)},$o.createFragmentFromText=function(e){var t,n=document.createDocumentFragment(),r=document.createElement("body");for(r.innerHTML=e;t=r.firstChild;)n.appendChild(t);return n},$o.isPersistableModel=function(e){return e.collection&&e.collection.browserStorage},$o.getResolveablePromise=function(){const e={isResolved:!1,isPending:!0,isRejected:!1},t=new Promise((t,n)=>{e.resolve=t,e.reject=n});return Object.assign(t,e),t.then((function(e){return t.isResolved=!0,t.isPending=!1,t.isRejected=!1,e}),(function(e){throw t.isResolved=!1,t.isPending=!1,t.isRejected=!0,e})),t},$o.interpolate=function(e,t){return e.replace(/{{{([^{}]*)}}}/g,(e,n)=>{var r=t[n];return"string"==typeof r||"number"==typeof r?r:e})},$o.onMultipleEvents=function(e=[],t){let n=[];function r(r){n.push(r),e.length===n.length&&(t(n),n=[])}e.forEach(e=>e.object.on(e.event,r))},$o.safeSave=function(e,t,n){$o.isPersistableModel(e)?e.save(t,n):e.set(t,n)},$o.siblingIndex=function(e){for(var t=0;e=e.previousElementSibling;t++);return t},$o.getCurrentWord=function(e,t,n){t||(t=e.selectionEnd||void 0);let[r]=e.value.slice(0,t).split(/\s/).slice(-1);return n&&([r]=r.split(n).slice(-1)),r},$o.isMentionBoundary=e=>"@"!==e&&RegExp("(\\p{Z}|\\p{P})","u").test(e),$o.replaceCurrentWord=function(e,t){const n=e.selectionEnd||void 0,r=Co(e.value.slice(0,n).split(/\s/)),i=e.value,o=$o.isMentionBoundary(r[0])?r[0]:"";e.value=i.slice(0,n-r.length)+o+"".concat(t," ")+i.slice(n);const s=n-r.length+t.length+1;e.selectionEnd=o?s+1:s},$o.triggerEvent=function(e,t,n="Event",r=!0,i=!0){const o=document.createEvent(n);o.initEvent(t,r,i),e.dispatchEvent(o)},$o.getSelectValues=function(e){const t=[],n=e&&e.options;for(var r=0,i=n.length;r<i;r++){const e=n[r];e.selected&&t.push(e.value||e.text)}return t},$o.formatFingerprint=function(e){e=e.replace(/^05/,"");for(let t=1;t<8;t++){const n=8*t+t-1;e=e.slice(0,n)+" "+e.slice(n)}return e},$o.appendArrayBuffer=function(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer},$o.arrayBufferToHex=function(e){return Array.prototype.map.call(new Uint8Array(e),e=>("00"+e.toString(16)).slice(-2)).join("")},$o.arrayBufferToString=function(e){return new TextDecoder("utf-8").decode(e)},$o.stringToArrayBuffer=function(e){return new TextEncoder("utf-8").encode(e).buffer},$o.arrayBufferToBase64=function(e){return btoa(new Uint8Array(e).reduce((e,t)=>e+String.fromCharCode(t),""))},$o.base64ToArrayBuffer=function(e){const t=window.atob(e),n=t.length,r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=t.charCodeAt(e);return r.buffer},$o.getRandomInt=function(e){return Math.floor(Math.random()*Math.floor(e))},$o.placeCaretAtEnd=function(e){e!==document.activeElement&&e.focus();const t=2*e.value.length;setTimeout(()=>e.setSelectionRange(t,t),1),this.scrollTop=999999},$o.getUniqueId=function(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t},$o.waitUntil=function(e,t=300,n=3){try{const t=e();if(t)return Promise.resolve(t)}catch(e){return Promise.reject(e)}const r=$o.getResolveablePromise(),i=new Error;const o=setInterval((function(){try{const t=e();t&&(Vo(s,o),r.resolve(t))}catch(e){Vo(s,o),r.reject(e)}}),n);const s=setTimeout((function(){Vo(s,o);const e="Wait until promise timed out: \n\n".concat(i.stack);console.trace(),zn.error(e),r.reject(new Error(e))}),t);return r};var Jo=$o;const Xo=vr.f.Strophe,Qo=vr.f.$msg,{NS:Yo}=Xo;function Ko(e){const t=mr()('spoiler[xmlns="'.concat(Xo.NS.SPOILER,'"]'),e).pop();return{is_spoiler:!!t,spoiler_hint:null==t?void 0:t.textContent}}function Zo(e){const t=mr()('x[xmlns="'.concat(Xo.NS.OUTOFBAND,'"]'),e).pop();var n,r;return t?{oob_url:null===(n=t.querySelector("url"))||void 0===n?void 0:n.textContent,oob_desc:null===(r=t.querySelector("desc"))||void 0===r?void 0:r.textContent}:{}}function es(e,t){const n=mr()('replace[xmlns="'.concat(Xo.NS.MESSAGE_CORRECT,'"]'),e).pop();if(n){const e=n.getAttribute("id"),r=e;if(e){const n=mr()('delay[xmlns="'.concat(Xo.NS.DELAY,'"]'),t).pop();return{msgid:r,replace_id:e,edited:n?En()(n.getAttribute("stamp")).toISOString():(new Date).toISOString()}}}return{}}function ts(e,t){var n;const r=mr()('encrypted[xmlns="'.concat(Xo.NS.OMEMO,'"]'),e).pop(),i={is_encrypted:!!r};if(!r||Vc.settings.get("clear_cache_on_logout"))return i;const o=r.querySelector("header");i.encrypted={device_id:o.getAttribute("sid")};const s=null===(n=t.omemo_store)||void 0===n?void 0:n.get("device_id"),a=s&&mr()('key[rid="'.concat(s,'"]'),r).pop();var c;a&&Object.assign(i.encrypted,{iv:o.querySelector("iv").textContent,key:a.textContent,payload:(null===(c=r.querySelector("payload"))||void 0===c?void 0:c.textContent)||null,prekey:["true","1"].includes(a.getAttribute("prekey"))});return i}function ns(e,t){return"me"!==t.sender&&!t.is_carbon&&!t.is_archived&&mr()('request[xmlns="'.concat(Xo.NS.RECEIPTS,'"]'),e).length}function rs(e){const t=mr()('received[xmlns="'.concat(Xo.NS.RECEIPTS,'"]'),e).pop();return null==t?void 0:t.getAttribute("id")}function is(e){var t;return null===(t=mr()('\n        composing[xmlns="'.concat(Yo.CHATSTATES,'"],\n        paused[xmlns="').concat(Yo.CHATSTATES,'"],\n        inactive[xmlns="').concat(Yo.CHATSTATES,'"],\n        active[xmlns="').concat(Yo.CHATSTATES,'"],\n        gone[xmlns="').concat(Yo.CHATSTATES,'"]'),e).pop())||void 0===t?void 0:t.nodeName}function os(e){const t=Xo.NS.CARBONS;return mr()('message > received[xmlns="'.concat(t,'"]'),e).length>0||mr()('message > sent[xmlns="'.concat(t,'"]'),e).length>0}function ss(e,t){const n={},r=mr()('stanza-id[xmlns="'.concat(Xo.NS.SID,'"]'),e).reduce((e,t)=>(e["stanza_id ".concat(t.getAttribute("by"))]=t.getAttribute("id"),e),{});Object.assign(n,r);const i=mr()('message > result[xmlns="'.concat(Xo.NS.MAM,'"]'),t).pop();if(i){const e=t.getAttribute("from")||Uc.bare_jid;n["stanza_id ".concat(e)]=i.getAttribute("id")}const o=mr()('origin-id[xmlns="'.concat(Xo.NS.SID,'"]'),e).pop();return o&&(n.origin_id=o.getAttribute("id")),n}function as(e,t){const n=mr()('> apply-to[xmlns="'.concat(Xo.NS.FASTEN,'"]'),e).pop();if(n){const e=n.getAttribute("id");if(mr()('> retract[xmlns="'.concat(Xo.NS.RETRACT,'"]'),n).pop()){const n=mr()('delay[xmlns="'.concat(Xo.NS.DELAY,'"]'),t).pop();return{editable:!1,retracted:n?En()(n.getAttribute("stamp")).toISOString():(new Date).toISOString(),retracted_id:e}}}else{const t=mr()('> retracted[xmlns="'.concat(Xo.NS.RETRACT,'"]'),e).pop();if(t)return{editable:!1,is_tombstone:!0,retracted:t.getAttribute("stamp")}}return{}}function cs(e){var t;const n=null===(t=e.querySelector("body"))||void 0===t?void 0:t.textContent;return mr()('reference[xmlns="'.concat(Xo.NS.REFERENCE,'"]'),e).map(e=>{const t=e.getAttribute("begin"),r=e.getAttribute("end");return{begin:t,end:r,type:e.getAttribute("type"),value:n.slice(t,r),uri:e.getAttribute("uri")}})}function ls(e,t){Vc.send(Qo({to:e.getAttribute("from"),type:"error",id:e.getAttribute("id")}).c("error",{type:"cancel"}).c("not-allowed",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("text",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).t(t)),zn.warn("Rejecting message stanza with the following reason: ".concat(t)),zn.warn(e)}function us(e){if("error"===e.getAttribute("type")){const t=e.querySelector("error"),n=mr()('text[xmlns="'.concat(Xo.NS.STANZAS,'"]'),t).pop();return{is_error:!0,error_text:null==n?void 0:n.textContent,error_type:t.getAttribute("type"),error_condition:t.firstElementChild.nodeName}}return{}}class ds extends Error{constructor(e,t){super(e,t),this.name="StanzaParseError",this.stanza=t}}function hs(e){if(mr()('message > forwarded[xmlns="'.concat(Xo.NS.FORWARD,'"]'),e).length){ls(e,"Forwarded messages not part of an encapsulating protocol are not supported");const t=e.getAttribute("from");return new ds("Ignoring unencapsulated forwarded message from ".concat(t),e)}}const fs={isHeadline:e=>"headline"===e.getAttribute("type"),isServerMessage(e){const t=e.getAttribute("from");return!("error"===e.getAttribute("type")||!t||t.includes("@"))},getChatMarker:e=>mr()('\n            acknowledged[xmlns="'.concat(Xo.NS.MARKERS,'"],\n            displayed[xmlns="').concat(Xo.NS.MARKERS,'"],\n            received[xmlns="').concat(Xo.NS.MARKERS,'"]'),e).pop(),isArchived:e=>!!mr()('message > result[xmlns="'.concat(Xo.NS.MAM,'"]'),e).pop(),getAttributes:e=>e.getAttributeNames().reduce((t,n)=>(t[n]=Xo.xmlunescape(e.getAttribute(n)),t),{}),async parseMessage(e,t){var n,r,i,o,s,a;const c=hs(e);if(c)return c;let l=e.getAttribute("to");const u=Xo.getResourceFromJid(l);if(Vc.settings.get("filter_by_resource")&&u&&u!==t.resource)return new ds("Ignoring incoming message intended for a different resource: ".concat(l),e);const d=e;let h=e.getAttribute("from")||t.bare_jid;if(os(e)){if(h!==t.bare_jid)return ls(e,"Rejecting carbon from invalid JID"),new ds("Rejecting carbon from invalid JID ".concat(l),e);{const t='[xmlns="'.concat(Xo.NS.CARBONS,'"] > forwarded[xmlns="').concat(Xo.NS.FORWARD,'"] > message');l=(e=mr()(t,e).pop()).getAttribute("to"),h=e.getAttribute("from")}}const f=fs.isArchived(e);if(f){if(h!==t.bare_jid)return new ds("Invalid Stanza: alleged MAM message from ".concat(e.getAttribute("from")),e);{const t='[xmlns="'.concat(Xo.NS.MAM,'"] > forwarded[xmlns="').concat(Xo.NS.FORWARD,'"] > message');l=(e=mr()(t,e).pop()).getAttribute("to"),h=e.getAttribute("from")}}const p=Xo.getBareJidFromJid(h),g=p===t.bare_jid;if(g&&null===l)return new ds("Don't know how to handle message stanza without 'to' attribute. ".concat(e.outerHTML),e);const m=fs.isHeadline(e),v=fs.isServerMessage(e);let _,b;if(!m&&!v&&(b=g?Xo.getBareJidFromJid(l):p,_=await Vc.contacts.get(b),void 0===_&&!Vc.settings.get("allow_non_roster_messaging")))return zn.error(e),new ds("Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.",e);const y=mr()('delay[xmlns="'.concat(Xo.NS.DELAY,'"]'),d).pop(),w=fs.getChatMarker(e),S=(new Date).toISOString();let x=Object.assign({contact_jid:b,is_archived:f,is_headline:m,is_server_message:v,body:null===(n=e.querySelector("body"))||void 0===n||null===(r=n.textContent)||void 0===r?void 0:r.trim(),chat_state:is(e),from:Xo.getBareJidFromJid(e.getAttribute("from")),is_carbon:os(d),is_delayed:!!y,is_markable:!!mr()('markable[xmlns="'.concat(Xo.NS.MARKERS,'"]'),e).length,is_marker:!!w,is_unstyled:!!mr()('unstyled[xmlns="'.concat(Xo.NS.STYLING,'"]'),e).length,marker_id:w&&w.getAttribute("id"),msgid:e.getAttribute("id")||d.getAttribute("id"),nick:null===(i=_)||void 0===i||null===(o=i.attributes)||void 0===o?void 0:o.nickname,receipt_id:rs(e),received:(new Date).toISOString(),references:cs(e),sender:g?"me":"them",subject:null===(s=e.querySelector("subject"))||void 0===s?void 0:s.textContent,thread:null===(a=e.querySelector("thread"))||void 0===a?void 0:a.textContent,time:y?En()(y.getAttribute("stamp")).toISOString():S,to:e.getAttribute("to"),type:e.getAttribute("type")},us(e),Zo(e),Ko(e),es(e,d),ss(e,d),as(e,d),ts(e,t));if(x.is_archived){const n=d.getAttribute("from");if(n&&n!==t.bare_jid)return new ds("Invalid Stanza: Forged MAM message from ".concat(n),e)}return await Vc.emojis.initialize(),x=Object.assign({message:x.body||x.error,is_only_emojis:!!x.body&&Jo.isOnlyEmojis(x.body),is_valid_receipt_request:ns(e,x)},x),x.id=x.origin_id||x["stanza_id ".concat(x.from)]||Jo.getUniqueId(),Vc.hook("parseMessage",e,x)},async parseMUCMessage(e,t,n){var r,i,o,s,a;const c=hs(e);if(c)return c;const l='[xmlns="'.concat(Yo.MAM,'"] > forwarded[xmlns="').concat(Yo.FORWARD,'"] > message'),u=e;if(e=mr()(l,e).pop()||e,mr()('message > forwarded[xmlns="'.concat(Xo.NS.FORWARD,'"]'),e).length)return new ds("Invalid Stanza: Forged MAM groupchat message from ".concat(e.getAttribute("from")),e);const d=mr()('delay[xmlns="'.concat(Xo.NS.DELAY,'"]'),u).pop(),h=e.getAttribute("from"),f=Xo.unescapeNode(Xo.getResourceFromJid(h)),p=fs.getChatMarker(e),g=(new Date).toISOString();let m=Object.assign({from:h,nick:f,body:null===(r=e.querySelector("body"))||void 0===r||null===(i=r.textContent)||void 0===i?void 0:i.trim(),chat_state:is(e),from_muc:Xo.getBareJidFromJid(h),from_real_jid:null===(o=t.occupants.findOccupant({nick:f}))||void 0===o?void 0:o.get("jid"),is_archived:fs.isArchived(u),is_carbon:os(u),is_delayed:!!d,is_headline:fs.isHeadline(e),is_markable:!!mr()('markable[xmlns="'.concat(Xo.NS.MARKERS,'"]'),e).length,is_marker:!!p,is_unstyled:!!mr()('unstyled[xmlns="'.concat(Xo.NS.STYLING,'"]'),e).length,marker_id:p&&p.getAttribute("id"),msgid:e.getAttribute("id")||u.getAttribute("id"),receipt_id:rs(e),received:(new Date).toISOString(),references:cs(e),subject:null===(s=e.querySelector("subject"))||void 0===s?void 0:s.textContent,thread:null===(a=e.querySelector("thread"))||void 0===a?void 0:a.textContent,time:d?En()(d.getAttribute("stamp")).toISOString():g,to:e.getAttribute("to"),type:e.getAttribute("type")},us(e),Zo(e),Ko(e),es(e,u),ss(e,u),as(e,u),function(e){const t=mr()('apply-to[xmlns="'.concat(Xo.NS.FASTEN,'"]'),e).pop();if(t){const e=t.getAttribute("id"),r=mr()('moderated[xmlns="'.concat(Xo.NS.MODERATE,'"]'),t).pop();if(r){var n;if(mr()('retract[xmlns="'.concat(Xo.NS.RETRACT,'"]'),r).pop())return{editable:!1,moderated:"retracted",moderated_by:r.getAttribute("by"),moderated_id:e,moderation_reason:null===(n=r.querySelector("reason"))||void 0===n?void 0:n.textContent}}}else{const t=mr()('> moderated[xmlns="'.concat(Xo.NS.MODERATE,'"]'),e).pop();if(t){var r;if(mr()('retracted[xmlns="'.concat(Xo.NS.RETRACT,'"]'),t).pop())return{editable:!1,is_tombstone:!0,moderated_by:t.getAttribute("by"),retracted:t.getAttribute("stamp"),moderation_reason:null===(r=t.querySelector("reason"))||void 0===r?void 0:r.textContent}}}return{}}(e),ts(e,n));return await Vc.emojis.initialize(),m=Object.assign({is_only_emojis:!!m.body&&Jo.isOnlyEmojis(m.body),is_valid_receipt_request:ns(e,m),message:m.body||m.error,sender:m.nick===t.get("nick")?"me":"them"},m),m.is_archived&&u.getAttribute("from")!==m.from_muc?new ds("Invalid Stanza: Forged MAM message from ".concat(u.getAttribute("from")),e):m.is_archived&&u.getAttribute("from")!==t.get("jid")?new ds("Invalid Stanza: Forged MAM groupchat message from ".concat(e.getAttribute("from")),e):m.is_carbon?new ds("Invalid Stanza: MUC messages SHOULD NOT be XEP-0280 carbon copied",e):(m.id=m.origin_id||m["stanza_id ".concat(m.from_muc||m.from)]||Jo.getUniqueId(),Vc.hook("parseMUCMessage",e,m))},parseMUCPresence(e){const t=e.getAttribute("from"),n=e.getAttribute("type"),r={from:t,nick:Xo.getResourceFromJid(t),type:n,states:[],hats:[],show:"unavailable"!==n?"online":"offline"};return Array.from(e.children).forEach(e=>{if(e.matches("status"))r.status=e.textContent||null;else if(e.matches("show"))r.show=e.textContent||"online";else if(e.matches("x")&&e.getAttribute("xmlns")===Xo.NS.MUC_USER)Array.from(e.children).forEach(e=>{"item"===e.nodeName?(r.affiliation=e.getAttribute("affiliation"),r.role=e.getAttribute("role"),r.jid=e.getAttribute("jid"),r.nick=e.getAttribute("nick")||r.nick):"status"==e.nodeName&&e.getAttribute("code")&&r.states.push(e.getAttribute("code"))});else if(e.matches("x")&&e.getAttribute("xmlns")===Xo.NS.VCARDUPDATE){var t;r.image_hash=null===(t=e.querySelector("photo"))||void 0===t?void 0:t.textContent}else e.matches("hats")&&e.getAttribute("xmlns")===Xo.NS.MUC_HATS&&(r.hats=Array.from(e.children).map(e=>e.matches("hat")&&{title:e.getAttribute("title"),uri:e.getAttribute("uri")}))}),r}};var ps=fs;var gs=function(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var s=e[i];t(r,s,n(s),e)}return r};var ms=function(e,t){return function(n,r){if(null==n)return n;if(!Xe(n))return e(n,r);for(var i=n.length,o=t?i:-1,s=Object(n);(t?o--:++o<i)&&!1!==r(s[o],o,s););return n}},vs=ms(qi);var _s=function(e,t,n,r){return vs(e,(function(e,i,o){t(r,e,n(e),o)})),r};var bs=function(e,t){return function(n,r){var i=ke(n)?gs:_s,o=t?t():{};return i(n,e,Eo(r,2),o)}},ys=Object.prototype.hasOwnProperty,ws=bs((function(e,t,n){ys.call(e,n)?++e[n]:be(e,n,1)}));var Ss=function(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1};var xs=function(e){return e!=e};var Es=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1};var As=function(e,t,n){return t==t?Es(e,t,n):Ss(e,xs,n)};var Cs=function(e,t){return!!(null==e?0:e.length)&&As(e,t,0)>-1};var js=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1};var Ts=function(e,t,n,r){var i=-1,o=Cs,s=!0,a=e.length,c=[],l=t.length;if(!a)return c;n&&(t=qr(t,Le(n))),r?(o=js,s=!1):t.length>=200&&(o=Yi,s=!1,t=new Xi(t));e:for(;++i<a;){var u=e[i],d=null==n?u:n(u);if(u=r||0!==u?u:0,s&&d==d){for(var h=l;h--;)if(t[h]===d)continue e;c.push(u)}else o(t,d,r)||c.push(u)}return c};var Os=function(e){return Ee(e)&&Xe(e)},ks=jr((function(e,t){return Os(e)?Ts(e,Mo(t,1,Os,!0)):[]}));var Ns=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0};var Is=function(e,t){var n=!0;return vs(e,(function(e,r,i){return n=!!t(e,r,i)})),n};var Ms=function(e,t,n){var r=ke(e)?Ns:Is;return n&&Tr(e,t,n)&&(t=void 0),r(e,Eo(t,3))},Rs=Math.max;var Ds=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:fi(n);return i<0&&(i=Rs(r+i,0)),Ss(e,Eo(t,3),i)},Ps=Math.max,Ls=Math.min;var zs=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=fi(n),i=n<0?Ps(r+i,0):Ls(i,r-1)),Ss(e,Eo(t,3),i,!0)},Fs=Object.prototype.hasOwnProperty,Bs=bs((function(e,t,n){Fs.call(e,n)?e[n].push(t):be(e,n,[t])})),qs=Math.max;var Hs=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:fi(n);return i<0&&(i=qs(r+i,0)),As(e,t,i)},Us=bs((function(e,t,n){be(e,n,t)}));var $s=function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r},Ws=Math.max,Gs=Math.min;var Vs=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=fi(n))<0?Ws(r+i,0):Gs(i,r-1)),t==t?$s(e,t,i):Ss(e,xs,i,!0)};var Js=function(e,t){var n;return vs(e,(function(e,r,i){return!(n=t(e,r,i))})),!!n};var Xs=function(e,t,n){var r=ke(e)?Qi:Js;return n&&Tr(e,t,n)&&(t=void 0),r(e,Eo(t,3))};var Qs=function(e,t){var n=-1,r=Xe(e)?Array(e.length):[];return vs(e,(function(e,i,o){r[++n]=t(e,i,o)})),r};var Ys=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e};var Ks=function(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,o=Ir(e),s=void 0!==t,a=null===t,c=t==t,l=Ir(t);if(!a&&!l&&!o&&e>t||o&&s&&c&&!a&&!l||r&&s&&c||!n&&c||!i)return 1;if(!r&&!o&&!l&&e<t||l&&n&&i&&!r&&!o||a&&n&&i||!s&&i||!c)return-1}return 0};var Zs=function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,s=i.length,a=n.length;++r<s;){var c=Ks(i[r],o[r]);if(c)return r>=a?c:c*("desc"==n[r]?-1:1)}return e.index-t.index};var ea=function(e,t,n){var r=-1;t=qr(t.length?t:[br],Le(Eo));var i=Qs(e,(function(e,n,i){return{criteria:qr(t,(function(t){return t(e)})),index:++r,value:e}}));return Ys(i,(function(e,t){return Zs(e,t,n)}))},ta=jr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&Tr(e,t[0],t[1])?t=[]:n>2&&Tr(t[0],t[1],t[2])&&(t=[t[0]]),ea(e,Mo(t,1),[])}));const na=Array.prototype.slice,ra=function(e,t){t||(t={}),this.preinitialize.apply(this,arguments),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,Or({silent:!0},t))};ra.extend=Yr;const ia={add:!0,remove:!0,merge:!0},oa={add:!0,remove:!1},sa=function(e,t,n){n=Math.min(Math.max(n,0),e.length);const r=Array(e.length-n),i=t.length;let o;for(o=0;o<r.length;o++)r[o]=e[o+n];for(o=0;o<i;o++)e[o+n]=t[o];for(o=0;o<r.length;o++)e[o+i+n]=r[o]};Object.assign(ra.prototype,_i,{model:qo,preinitialize:function(){},initialize:function(){},toJSON:function(e){return this.map((function(t){return t.toJSON(e)}))},sync:function(e,t,n){return ni(this)(e,t,n)},add:function(e,t){return this.set(e,Or({merge:!1},t,oa))},remove:function(e,t){t=Or({},t);const n=!Array.isArray(e);e=n?[e]:e.slice();const r=this._removeModels(e,t);return!t.silent&&r.length&&(t.changes={added:[],merged:[],removed:r},this.trigger("update",this,t)),n?r[0]:r},set:function(e,t){if(null==e)return;(t=Or({},ia,t)).parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);const n=!Array.isArray(e);e=n?[e]:e.slice();let r=t.at;null!=r&&(r=+r),r>this.length&&(r=this.length),r<0&&(r+=this.length+1);const i=[],o=[],s=[],a=[],c={},l=t.add,u=t.merge,d=t.remove;let h=!1;const f=this.comparator&&null==r&&!1!==t.sort,p=Zt(this.comparator)?this.comparator:null;let g,m;for(m=0;m<e.length;m++){g=e[m];const n=this.get(g);if(n){if(u&&g!==n){let e=this._isModel(g)?g.attributes:g;t.parse&&(e=n.parse(e,t)),n.set(e,t),s.push(n),f&&!h&&(h=n.hasChanged(p))}c[n.cid]||(c[n.cid]=!0,i.push(n)),e[m]=n}else l&&(g=e[m]=this._prepareModel(g,t),g&&(o.push(g),this._addReference(g,t),c[g.cid]=!0,i.push(g)))}if(d){for(m=0;m<this.length;m++)g=this.models[m],c[g.cid]||a.push(g);a.length&&this._removeModels(a,t)}let v=!1;const _=!f&&l&&d;if(i.length&&_?(v=this.length!==i.length||Xs(this.models,(e,t)=>e!==i[t]),this.models.length=0,sa(this.models,i,0),this.length=this.models.length):o.length&&(f&&(h=!0),sa(this.models,o,null==r?this.length:r),this.length=this.models.length),h&&this.sort({silent:!0}),!t.silent){for(m=0;m<o.length;m++)null!=r&&(t.index=r+m),g=o[m],g.trigger("add",g,this,t);(h||v)&&this.trigger("sort",this,t),(o.length||a.length||s.length)&&(t.changes={added:o,removed:a,merged:s},this.trigger("update",this,t))}return n?e[0]:e},clearStore:async function(e={},t=(e=>e)){await Promise.all(this.models.filter(t).map(t=>new Promise(n=>{t.destroy(Object.assign(e,{success:n,error:(e,t)=>{console.error(t),n()}}))}))),await this.browserStorage.clear(),this.reset()},reset:function(e,t){t=t?Oi(t):{};for(let e=0;e<this.models.length;e++)this._removeReference(this.models[e],t);return t.previousModels=this.models,this._reset(),e=this.add(e,Or({silent:!0},t)),t.silent||this.trigger("reset",this,t),e},push:function(e,t){return this.add(e,Or({at:this.length},t))},pop:function(e){const t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,Or({at:0},t))},shift:function(e){const t=this.at(0);return this.remove(t,e)},slice:function(){return na.apply(this.models,arguments)},filter:function(e,t){return this.models.filter(M(e)?e:t=>t.matches(e),t)},every:function(e){return Ms(this.models.map(e=>e.attributes),e)},difference:function(e){return ks(this.models,e)},max:function(){return Math.max.apply(Math,this.models)},min:function(){return Math.min.apply(Math,this.models)},drop:function(e=1){return this.models.slice(e)},some:function(e){return Xs(this.models.map(e=>e.attributes),e)},sortBy:function(e){return ta(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},isEmpty:function(){return oi(this.models)},keyBy:function(e){return Us(this.models,e)},each:function(e,t){return this.forEach(e,t)},forEach:function(e,t){return this.models.forEach(e,t)},includes:function(e){return this.models.includes(e)},size:function(){return this.models.length},countBy:function(e){return ws(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},groupBy:function(e){return Bs(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},indexOf:function(e){return Hs(this.models,e)},findLastIndex:function(e,t){return zs(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e),t)},lastIndexOf:function(e){return Vs(this.models,e)},findIndex:function(e){return Ds(this.models,M(e)?e:t=>Zt(e)?t.get(e):t.matches(e))},last:function(){const e=null==this.models?0:this.models.length;return e?this.models[e-1]:void 0},head:function(){return this.models[0]},first:function(){return this.head()},map:function(e,t){return this.models.map(M(e)?e:t=>Zt(e)?t.get(e):t.matches(e),t)},reduce:function(e,t){return this.models.reduce(e,t||this.models[0])},reduceRight:function(e,t){return this.models.reduceRight(e,t||this.models[0])},toArray:function(){return Array.from(this.models)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(this._isModel(e)?e.attributes:e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?"find":"filter"](e)},findWhere:function(e){return this.where(e,!0)},find:function(e,t){const n=M(e)?e:t=>t.matches(e);return this.models.find(n,t)},sort:function(e){let t=this.comparator;if(!t)throw new Error("Cannot sort a set without a comparator");e||(e={});const n=t.length;return M(t)&&(t=t.bind(this)),1===n||Zt(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger("sort",this,e),this},pluck:function(e){return this.map(e+"")},fetch:function(e){const t=(e=Or({parse:!0},e)).success,n=this,r=e.promise&&Kr();return e.success=function(i){const o=e.reset?"reset":"set";n[o](i,e),t&&t.call(e.context,n,i,e),r&&r.resolve(),n.trigger("sync",n,i,e)},ei(this,e),r||this.sync("read",this,e)},create:function(e,t){const n=(t=t?Oi(t):{}).wait,r=t.promise,i=r&&Kr();if(!(e=this._prepareModel(e,t)))return!1;n||this.add(e,t);const o=this,s=t.success,a=t.error;return t.success=function(e,t,a){n&&o.add(e,a),s&&s.call(a.context,e,t,a),r&&i.resolve(e)},t.error=function(e,t,n){a&&a.call(n.context,e,t,n),r&&i.reject(t)},e.save(null,Object.assign(t,{promise:!1})),r?i:e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||"id"]},values:function(){return new ca(this,la)},keys:function(){return new ca(this,ua)},entries:function(){return new ca(this,da)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;(t=t?Oi(t):{}).collection=this;const n=new this.model(e,t);return n.validationError?(this.trigger("invalid",this,n.validationError,t),!1):n},_removeModels:function(e,t){const n=[];for(let r=0;r<e.length;r++){const i=this.get(e[r]);if(!i)continue;const o=this.indexOf(i);this.models.splice(o,1),this.length--,delete this._byId[i.cid];const s=this.modelId(i.attributes);null!=s&&delete this._byId[s],t.silent||(t.index=o,i.trigger("remove",i,this,t)),n.push(i),this._removeReference(i,t)}return n},_isModel:function(e){return e instanceof qo},_addReference:function(e,t){this._byId[e.cid]=e;const n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on("all",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];const n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off("all",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if(("add"===e||"remove"===e)&&n!==this)return;if("destroy"===e&&this.remove(t,r),"change"===e){const e=this.modelId(t.previousAttributes()),n=this.modelId(t.attributes);e!==n&&(null!=e&&delete this._byId[e],null!=n&&(this._byId[n]=t))}}this.trigger.apply(this,arguments)}});const aa="function"==typeof Symbol&&Symbol.iterator;aa&&(ra.prototype[aa]=ra.prototype.values);const ca=function(e,t){this._collection=e,this._kind=t,this._index=0},la=1,ua=2,da=3;aa&&(ca.prototype[aa]=function(){return this}),ca.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){const e=this._collection.at(this._index);let t;if(this._index++,this._kind===la)t=e;else{const n=this._collection.modelId(e.attributes);t=this._kind===ua?n:[n,e]}return{value:t,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var ha=n(43);class fa extends vr.e.Connection{constructor(e,t){super(e,t),this.debouncedReconnect=Object(ha.debounce)(this.reconnect,2e3)}static generateResource(){return"/converse.js-".concat(Math.floor(139749528*Math.random()).toString())}async bind(){await Vc.trigger("beforeResourceBinding",{synchronous:!0}),super.bind()}async onDomainDiscovered(e){const t=await e.text(),n=(new window.DOMParser).parseFromString(t,"text/xml").firstElementChild;if("XRD"!=n.nodeName||"http://docs.oasis-open.org/ns/xri/xrd-1.0"!=n.namespaceURI)return zn.warn("Could not discover XEP-0156 connection methods");const r=mr()('Link[rel="urn:xmpp:alt-connections:xbosh"]',n),i=mr()('Link[rel="urn:xmpp:alt-connections:websocket"]',n),o=r.map(e=>e.getAttribute("href")),s=i.map(e=>e.getAttribute("href"));0===o.length&&0===s.length?zn.warn("Neither BOSH nor WebSocket connection methods have been specified with XEP-0156."):(Vc.settings.set("websocket_url",s.pop()),Vc.settings.set("bosh_service_url",o.pop()),this.service=Vc.settings.get("websocket_url")||Vc.settings.get("bosh_service_url"),this.setProtocol())}async discoverConnectionMethods(e){const t={mode:"cors",headers:{Accept:"application/xrd+xml, text/xml"}},n="https://".concat(e,"/.well-known/host-meta");let r;try{r=await fetch(n,t)}catch(e){return zn.error("Failed to discover alternative connection methods at ".concat(n)),void zn.error(e)}r.status>=200&&r.status<400?await this.onDomainDiscovered(r):zn.warn("Could not discover XEP-0156 connection methods")}async connect(e,t,n){if(Vc.settings.get("discover_connection_methods")){const t=vr.e.getDomainFromJid(e);await this.discoverConnectionMethods(t)}super.connect(e,t,n||this.onConnectStatusChanged,59)}async reconnect(){const{__:e}=Uc;return zn.debug("RECONNECTING: the connection has dropped, attempting to reconnect."),this.setConnectionStatus(vr.e.Status.RECONNECTING,e("The connection has dropped, attempting to reconnect.")),Vc.trigger("will-reconnect"),this.reconnecting=!0,await Qc(),Vc.user.login()}async onConnected(e){delete this.reconnecting,this.flush(),await Uc.setUserJID(this.jid),await Vc.trigger("afterResourceBinding",e,{synchronous:!0}),e?Vc.trigger("reconnected"):Vc.trigger("connected")}setDisconnectionCause(e,t,n){void 0===e?(delete this.disconnection_cause,delete this.disconnection_reason):(void 0===this.disconnection_cause||n)&&(this.disconnection_cause=e,this.disconnection_reason=t)}setConnectionStatus(e,t){this.status=e,Uc.connfeedback.set({connection_status:e,message:t})}async finishDisconnection(){zn.debug("DISCONNECTED"),delete this.reconnecting,this.reset(),Qc(),await Kc(),delete Uc.connection,Vc.trigger("disconnected")}onDisconnected(){if(!Vc.settings.get("auto_reconnect"))return this.finishDisconnection();{const e=this.disconnection_reason;if(this.disconnection_cause===vr.e.Status.AUTHFAIL)return Vc.settings.get("credentials_url")||Vc.settings.get("authentication")===Uc.ANONYMOUS?Vc.connection.reconnect():this.finishDisconnection();if(this.disconnection_cause===Uc.LOGOUT||e===vr.e.ErrorCondition.NO_AUTH_MECH||"host-unknown"===e||"remote-connection-failed"===e)return this.finishDisconnection();Vc.connection.reconnect()}}onConnectStatusChanged(e,t){const{__:n}=Uc;var r;if(zn.debug("Status changed to: ".concat(Uc.CONNECTION_STATUS[e])),e===vr.e.Status.ATTACHFAIL)this.setConnectionStatus(e),null===(r=this.worker_attach_promise)||void 0===r||r.resolve(!1);else if(e===vr.e.Status.CONNECTED||e===vr.e.Status.ATTACHED){var i,o;if((null===(i=this.worker_attach_promise)||void 0===i?void 0:i.isResolved)&&this.status===vr.e.Status.ATTACHED)return;this.setConnectionStatus(e),null===(o=this.worker_attach_promise)||void 0===o||o.resolve(!0),Uc.send_initial_presence=!0,this.setDisconnectionCause(),this.reconnecting?(zn.debug(e===vr.e.Status.CONNECTED?"Reconnected":"Reattached"),this.onConnected(!0)):(zn.debug(e===vr.e.Status.CONNECTED?"Connected":"Attached"),this.restored&&(Uc.send_initial_presence=!1),this.onConnected())}else if(e===vr.e.Status.DISCONNECTED)this.setDisconnectionCause(e,t),this.onDisconnected();else if(e===vr.e.Status.BINDREQUIRED)this.bind();else if(e===vr.e.Status.ERROR)this.setConnectionStatus(e,n("An error occurred while connecting to the chat server."));else if(e===vr.e.Status.CONNECTING)this.setConnectionStatus(e);else if(e===vr.e.Status.AUTHENTICATING)this.setConnectionStatus(e);else if(e===vr.e.Status.AUTHFAIL)t||(t=n("Your XMPP address and/or password is incorrect. Please try again.")),this.setConnectionStatus(e,t),this.setDisconnectionCause(e,t,!0),this.onDisconnected();else if(e===vr.e.Status.CONNFAIL){var s;let r=t;"host-unknown"===t||"remote-connection-failed"==t?r=n("Sorry, we could not connect to the XMPP host with domain: %1$s",'"'.concat(vr.e.getDomainFromJid(this.jid),'"')):void 0!==t&&t===(null===vr.e||void 0===vr.e||null===(s=vr.e.ErrorCondition)||void 0===s?void 0:s.NO_AUTH_MECH)&&(r=n("The XMPP server did not offer a supported authentication mechanism")),this.setConnectionStatus(e,r),this.setDisconnectionCause(e,t)}else e===vr.e.Status.DISCONNECTING&&this.setDisconnectionCause(e,t)}isType(e){return"websocket"===e.toLowerCase()?this._proto instanceof vr.e.Websocket:"bosh"===e.toLowerCase()?vr.e.Bosh&&this._proto instanceof vr.e.Bosh:void 0}hasResumed(){var e;return(null===(e=Vc.settings.get("connection_options"))||void 0===e?void 0:e.worker)||this.isType("bosh")?Uc.connfeedback.get("connection_status")===vr.e.Status.ATTACHED:!this.do_bind}restoreWorkerSession(){return this.attach(this.onConnectStatusChanged),this.worker_attach_promise=Jo.getResolveablePromise(),this.worker_attach_promise}}class pa extends fa{constructor(e,t){super(e,t),this.sent_stanzas=[],this.IQ_stanzas=[],this.IQ_ids=[],this.features=vr.e.xmlHtmlNode('<stream:features xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><ver xmlns="urn:xmpp:features:rosterver"/><csi xmlns="urn:xmpp:csi:0"/><this xmlns="http://jabber.org/protocol/caps" ver="UwBpfJpEt3IoLYfWma/o/p3FFRo=" hash="sha-1" node="http://prosody.im"/><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><required/></bind><sm xmlns=\'urn:xmpp:sm:3\'/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"><optional/></session></stream:features>').firstChild,this._proto._processRequest=()=>{},this._proto._disconnect=()=>this._onDisconnectTimeout(),this._proto._onDisconnectTimeout=()=>{},this._proto._connect=()=>{this.connected=!0,this.mock=!0,this.jid="romeo@montague.lit/orchard",this._changeConnectStatus(vr.e.Status.BINDREQUIRED)}}_processRequest(){}sendIQ(e,t,n){Object(ha.isElement)(e)||(e=e.nodeTree),this.IQ_stanzas.push(e);const r=super.sendIQ(e,t,n);return this.IQ_ids.push(r),r}send(e){return Object(ha.isElement)(e)?this.sent_stanzas.push(e):this.sent_stanzas.push(e.nodeTree),super.send(e)}async bind(){await Vc.trigger("beforeResourceBinding",{synchronous:!0}),this.authenticated=!0,Uc.no_connection_on_bind||this._changeConnectStatus(vr.e.Status.CONNECTED)}}
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -99,7 +106,7 @@ function Bs(e,t){clearTimeout(e),clearInterval(t)}
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */const la="undefined"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,ua=(e,t,n=null,r=null)=>{for(;t!==n;){const n=t.nextSibling;e.insertBefore(t,r),t=n}},da=(e,t,n=null)=>{for(;t!==n;){const n=t.nextSibling;e.removeChild(t),t=n}},ha=`{{lit-${String(Math.random()).slice(2)}}}`,fa=`\x3c!--${ha}--\x3e`,pa=new RegExp(`${ha}|${fa}`);class ga{constructor(e,t){this.parts=[],this.element=t;const n=[],r=[],i=document.createTreeWalker(t.content,133,null,!1);let s=0,o=-1,a=0;const{strings:c,values:{length:l}}=e;for(;a<l;){const e=i.nextNode();if(null!==e){if(o++,1===e.nodeType){if(e.hasAttributes()){const t=e.attributes,{length:n}=t;let r=0;for(let e=0;e<n;e++)ma(t[e].name,"$lit$")&&r++;for(;r-- >0;){const t=c[a],n=ba.exec(t)[2],r=n.toLowerCase()+"$lit$",i=e.getAttribute(r);e.removeAttribute(r);const s=i.split(pa);this.parts.push({type:"attribute",index:o,name:n,strings:s}),a+=s.length-1}}"TEMPLATE"===e.tagName&&(r.push(e),i.currentNode=e.content)}else if(3===e.nodeType){const t=e.data;if(t.indexOf(ha)>=0){const r=e.parentNode,i=t.split(pa),s=i.length-1;for(let t=0;t<s;t++){let n,s=i[t];if(""===s)n=_a();else{const e=ba.exec(s);null!==e&&ma(e[2],"$lit$")&&(s=s.slice(0,e.index)+e[1]+e[2].slice(0,-"$lit$".length)+e[3]),n=document.createTextNode(s)}r.insertBefore(n,e),this.parts.push({type:"node",index:++o})}""===i[s]?(r.insertBefore(_a(),e),n.push(e)):e.data=i[s],a+=s}}else if(8===e.nodeType)if(e.data===ha){const t=e.parentNode;null!==e.previousSibling&&o!==s||(o++,t.insertBefore(_a(),e)),s=o,this.parts.push({type:"node",index:o}),null===e.nextSibling?e.data="":(n.push(e),o--),a++}else{let t=-1;for(;-1!==(t=e.data.indexOf(ha,t+1));)this.parts.push({type:"node",index:-1}),a++}}else i.currentNode=r.pop()}for(const e of n)e.parentNode.removeChild(e)}}const ma=(e,t)=>{const n=e.length-t.length;return n>=0&&e.slice(n)===t},va=e=>-1!==e.index,_a=()=>document.createComment(""),ba=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;function ya(e,t){const{element:{content:n},parts:r}=e,i=document.createTreeWalker(n,133,null,!1);let s=Sa(r),o=r[s],a=-1,c=0;const l=[];let u=null;for(;i.nextNode();){a++;const e=i.currentNode;for(e.previousSibling===u&&(u=null),t.has(e)&&(l.push(e),null===u&&(u=e)),null!==u&&c++;void 0!==o&&o.index===a;)o.index=null!==u?-1:o.index-c,s=Sa(r,s),o=r[s]}l.forEach(e=>e.parentNode.removeChild(e))}const wa=e=>{let t=11===e.nodeType?0:1;const n=document.createTreeWalker(e,133,null,!1);for(;n.nextNode();)t++;return t},Sa=(e,t=-1)=>{for(let n=t+1;n<e.length;n++){const t=e[n];if(va(t))return n}return-1};
+ */const ga="undefined"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,ma=(e,t,n=null,r=null)=>{for(;t!==n;){const n=t.nextSibling;e.insertBefore(t,r),t=n}},va=(e,t,n=null)=>{for(;t!==n;){const n=t.nextSibling;e.removeChild(t),t=n}},_a=`{{lit-${String(Math.random()).slice(2)}}}`,ba=`\x3c!--${_a}--\x3e`,ya=new RegExp(`${_a}|${ba}`);class wa{constructor(e,t){this.parts=[],this.element=t;const n=[],r=[],i=document.createTreeWalker(t.content,133,null,!1);let o=0,s=-1,a=0;const{strings:c,values:{length:l}}=e;for(;a<l;){const e=i.nextNode();if(null!==e){if(s++,1===e.nodeType){if(e.hasAttributes()){const t=e.attributes,{length:n}=t;let r=0;for(let e=0;e<n;e++)Sa(t[e].name,"$lit$")&&r++;for(;r-- >0;){const t=c[a],n=Aa.exec(t)[2],r=n.toLowerCase()+"$lit$",i=e.getAttribute(r);e.removeAttribute(r);const o=i.split(ya);this.parts.push({type:"attribute",index:s,name:n,strings:o}),a+=o.length-1}}"TEMPLATE"===e.tagName&&(r.push(e),i.currentNode=e.content)}else if(3===e.nodeType){const t=e.data;if(t.indexOf(_a)>=0){const r=e.parentNode,i=t.split(ya),o=i.length-1;for(let t=0;t<o;t++){let n,o=i[t];if(""===o)n=Ea();else{const e=Aa.exec(o);null!==e&&Sa(e[2],"$lit$")&&(o=o.slice(0,e.index)+e[1]+e[2].slice(0,-"$lit$".length)+e[3]),n=document.createTextNode(o)}r.insertBefore(n,e),this.parts.push({type:"node",index:++s})}""===i[o]?(r.insertBefore(Ea(),e),n.push(e)):e.data=i[o],a+=o}}else if(8===e.nodeType)if(e.data===_a){const t=e.parentNode;null!==e.previousSibling&&s!==o||(s++,t.insertBefore(Ea(),e)),o=s,this.parts.push({type:"node",index:s}),null===e.nextSibling?e.data="":(n.push(e),s--),a++}else{let t=-1;for(;-1!==(t=e.data.indexOf(_a,t+1));)this.parts.push({type:"node",index:-1}),a++}}else i.currentNode=r.pop()}for(const e of n)e.parentNode.removeChild(e)}}const Sa=(e,t)=>{const n=e.length-t.length;return n>=0&&e.slice(n)===t},xa=e=>-1!==e.index,Ea=()=>document.createComment(""),Aa=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;function Ca(e,t){const{element:{content:n},parts:r}=e,i=document.createTreeWalker(n,133,null,!1);let o=Ta(r),s=r[o],a=-1,c=0;const l=[];let u=null;for(;i.nextNode();){a++;const e=i.currentNode;for(e.previousSibling===u&&(u=null),t.has(e)&&(l.push(e),null===u&&(u=e)),null!==u&&c++;void 0!==s&&s.index===a;)s.index=null!==u?-1:s.index-c,o=Ta(r,o),s=r[o]}l.forEach(e=>e.parentNode.removeChild(e))}const ja=e=>{let t=11===e.nodeType?0:1;const n=document.createTreeWalker(e,133,null,!1);for(;n.nextNode();)t++;return t},Ta=(e,t=-1)=>{for(let n=t+1;n<e.length;n++){const t=e[n];if(xa(t))return n}return-1};
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -113,7 +120,7 @@ function Bs(e,t){clearTimeout(e),clearInterval(t)}
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-const xa=new WeakMap,Ea=e=>(...t)=>{const n=e(...t);return xa.set(n,!0),n},Aa=e=>"function"==typeof e&&xa.has(e),Ca={},ja={};
+const Oa=new WeakMap,ka=e=>(...t)=>{const n=e(...t);return Oa.set(n,!0),n},Na=e=>"function"==typeof e&&Oa.has(e),Ia={},Ma={};
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -127,7 +134,7 @@ const xa=new WeakMap,Ea=e=>(...t)=>{const n=e(...t);return xa.set(n,!0),n},Aa=e=
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-class Ta{constructor(e,t,n){this.__parts=[],this.template=e,this.processor=t,this.options=n}update(e){let t=0;for(const n of this.__parts)void 0!==n&&n.setValue(e[t]),t++;for(const e of this.__parts)void 0!==e&&e.commit()}_clone(){const e=la?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),t=[],n=this.template.parts,r=document.createTreeWalker(e,133,null,!1);let i,s=0,o=0,a=r.nextNode();for(;s<n.length;)if(i=n[s],va(i)){for(;o<i.index;)o++,"TEMPLATE"===a.nodeName&&(t.push(a),r.currentNode=a.content),null===(a=r.nextNode())&&(r.currentNode=t.pop(),a=r.nextNode());if("node"===i.type){const e=this.processor.handleTextExpression(this.options);e.insertAfterNode(a.previousSibling),this.__parts.push(e)}else this.__parts.push(...this.processor.handleAttributeExpressions(a,i.name,i.strings,this.options));s++}else this.__parts.push(void 0),s++;return la&&(document.adoptNode(e),customElements.upgrade(e)),e}}
+class Ra{constructor(e,t,n){this.__parts=[],this.template=e,this.processor=t,this.options=n}update(e){let t=0;for(const n of this.__parts)void 0!==n&&n.setValue(e[t]),t++;for(const e of this.__parts)void 0!==e&&e.commit()}_clone(){const e=ga?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),t=[],n=this.template.parts,r=document.createTreeWalker(e,133,null,!1);let i,o=0,s=0,a=r.nextNode();for(;o<n.length;)if(i=n[o],xa(i)){for(;s<i.index;)s++,"TEMPLATE"===a.nodeName&&(t.push(a),r.currentNode=a.content),null===(a=r.nextNode())&&(r.currentNode=t.pop(),a=r.nextNode());if("node"===i.type){const e=this.processor.handleTextExpression(this.options);e.insertAfterNode(a.previousSibling),this.__parts.push(e)}else this.__parts.push(...this.processor.handleAttributeExpressions(a,i.name,i.strings,this.options));o++}else this.__parts.push(void 0),o++;return ga&&(document.adoptNode(e),customElements.upgrade(e)),e}}
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -140,7 +147,7 @@ class Ta{constructor(e,t,n){this.__parts=[],this.template=e,this.processor=t,thi
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */const Oa=` ${ha} `;class ka{constructor(e,t,n,r){this.strings=e,this.values=t,this.type=n,this.processor=r}getHTML(){const e=this.strings.length-1;let t="",n=!1;for(let r=0;r<e;r++){const e=this.strings[r],i=e.lastIndexOf("\x3c!--");n=(i>-1||n)&&-1===e.indexOf("--\x3e",i+1);const s=ba.exec(e);t+=null===s?e+(n?Oa:fa):e.substr(0,s.index)+s[1]+s[2]+"$lit$"+s[3]+ha}return t+=this.strings[e],t}getTemplateElement(){const e=document.createElement("template");return e.innerHTML=this.getHTML(),e}}
+ */const Da=` ${_a} `;class Pa{constructor(e,t,n,r){this.strings=e,this.values=t,this.type=n,this.processor=r}getHTML(){const e=this.strings.length-1;let t="",n=!1;for(let r=0;r<e;r++){const e=this.strings[r],i=e.lastIndexOf("\x3c!--");n=(i>-1||n)&&-1===e.indexOf("--\x3e",i+1);const o=Aa.exec(e);t+=null===o?e+(n?Da:ba):e.substr(0,o.index)+o[1]+o[2]+"$lit$"+o[3]+_a}return t+=this.strings[e],t}getTemplateElement(){const e=document.createElement("template");return e.innerHTML=this.getHTML(),e}}
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -154,7 +161,7 @@ class Ta{constructor(e,t,n){this.__parts=[],this.template=e,this.processor=t,thi
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-const Na=e=>null===e||!("object"==typeof e||"function"==typeof e),Ia=e=>Array.isArray(e)||!(!e||!e[Symbol.iterator]);class Ma{constructor(e,t,n){this.dirty=!0,this.element=e,this.name=t,this.strings=n,this.parts=[];for(let e=0;e<n.length-1;e++)this.parts[e]=this._createPart()}_createPart(){return new Ra(this)}_getValue(){const e=this.strings,t=e.length-1;let n="";for(let r=0;r<t;r++){n+=e[r];const t=this.parts[r];if(void 0!==t){const e=t.value;if(Na(e)||!Ia(e))n+="string"==typeof e?e:String(e);else for(const t of e)n+="string"==typeof t?t:String(t)}}return n+=e[t],n}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class Ra{constructor(e){this.value=void 0,this.committer=e}setValue(e){e===Ca||Na(e)&&e===this.value||(this.value=e,Aa(e)||(this.committer.dirty=!0))}commit(){for(;Aa(this.value);){const e=this.value;this.value=Ca,e(this)}this.value!==Ca&&this.committer.commit()}}class Da{constructor(e){this.value=void 0,this.__pendingValue=void 0,this.options=e}appendInto(e){this.startNode=e.appendChild(_a()),this.endNode=e.appendChild(_a())}insertAfterNode(e){this.startNode=e,this.endNode=e.nextSibling}appendIntoPart(e){e.__insert(this.startNode=_a()),e.__insert(this.endNode=_a())}insertAfterPart(e){e.__insert(this.startNode=_a()),this.endNode=e.endNode,e.endNode=this.startNode}setValue(e){this.__pendingValue=e}commit(){if(null===this.startNode.parentNode)return;for(;Aa(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ca,e(this)}const e=this.__pendingValue;e!==Ca&&(Na(e)?e!==this.value&&this.__commitText(e):e instanceof ka?this.__commitTemplateResult(e):e instanceof Node?this.__commitNode(e):Ia(e)?this.__commitIterable(e):e===ja?(this.value=ja,this.clear()):this.__commitText(e))}__insert(e){this.endNode.parentNode.insertBefore(e,this.endNode)}__commitNode(e){this.value!==e&&(this.clear(),this.__insert(e),this.value=e)}__commitText(e){const t=this.startNode.nextSibling,n="string"==typeof(e=null==e?"":e)?e:String(e);t===this.endNode.previousSibling&&3===t.nodeType?t.data=n:this.__commitNode(document.createTextNode(n)),this.value=e}__commitTemplateResult(e){const t=this.options.templateFactory(e);if(this.value instanceof Ta&&this.value.template===t)this.value.update(e.values);else{const n=new Ta(t,e.processor,this.options),r=n._clone();n.update(e.values),this.__commitNode(r),this.value=n}}__commitIterable(e){Array.isArray(this.value)||(this.value=[],this.clear());const t=this.value;let n,r=0;for(const i of e)n=t[r],void 0===n&&(n=new Da(this.options),t.push(n),0===r?n.appendIntoPart(this):n.insertAfterPart(t[r-1])),n.setValue(i),n.commit(),r++;r<t.length&&(t.length=r,this.clear(n&&n.endNode))}clear(e=this.startNode){da(this.startNode.parentNode,e.nextSibling,this.endNode)}}class Pa{constructor(e,t,n){if(this.value=void 0,this.__pendingValue=void 0,2!==n.length||""!==n[0]||""!==n[1])throw new Error("Boolean attributes can only contain a single expression");this.element=e,this.name=t,this.strings=n}setValue(e){this.__pendingValue=e}commit(){for(;Aa(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ca,e(this)}if(this.__pendingValue===Ca)return;const e=!!this.__pendingValue;this.value!==e&&(e?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=e),this.__pendingValue=Ca}}class La extends Ma{constructor(e,t,n){super(e,t,n),this.single=2===n.length&&""===n[0]&&""===n[1]}_createPart(){return new za(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class za extends Ra{}let Fa=!1;(()=>{try{const e={get capture(){return Fa=!0,!1}};window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){}})();class Ba{constructor(e,t,n){this.value=void 0,this.__pendingValue=void 0,this.element=e,this.eventName=t,this.eventContext=n,this.__boundHandleEvent=e=>this.handleEvent(e)}setValue(e){this.__pendingValue=e}commit(){for(;Aa(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ca,e(this)}if(this.__pendingValue===Ca)return;const e=this.__pendingValue,t=this.value,n=null==e||null!=t&&(e.capture!==t.capture||e.once!==t.once||e.passive!==t.passive),r=null!=e&&(null==t||n);n&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),r&&(this.__options=qa(e),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=e,this.__pendingValue=Ca}handleEvent(e){"function"==typeof this.value?this.value.call(this.eventContext||this.element,e):this.value.handleEvent(e)}}const qa=e=>e&&(Fa?{capture:e.capture,passive:e.passive,once:e.once}:e.capture)
+const La=e=>null===e||!("object"==typeof e||"function"==typeof e),za=e=>Array.isArray(e)||!(!e||!e[Symbol.iterator]);class Fa{constructor(e,t,n){this.dirty=!0,this.element=e,this.name=t,this.strings=n,this.parts=[];for(let e=0;e<n.length-1;e++)this.parts[e]=this._createPart()}_createPart(){return new Ba(this)}_getValue(){const e=this.strings,t=e.length-1;let n="";for(let r=0;r<t;r++){n+=e[r];const t=this.parts[r];if(void 0!==t){const e=t.value;if(La(e)||!za(e))n+="string"==typeof e?e:String(e);else for(const t of e)n+="string"==typeof t?t:String(t)}}return n+=e[t],n}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class Ba{constructor(e){this.value=void 0,this.committer=e}setValue(e){e===Ia||La(e)&&e===this.value||(this.value=e,Na(e)||(this.committer.dirty=!0))}commit(){for(;Na(this.value);){const e=this.value;this.value=Ia,e(this)}this.value!==Ia&&this.committer.commit()}}class qa{constructor(e){this.value=void 0,this.__pendingValue=void 0,this.options=e}appendInto(e){this.startNode=e.appendChild(Ea()),this.endNode=e.appendChild(Ea())}insertAfterNode(e){this.startNode=e,this.endNode=e.nextSibling}appendIntoPart(e){e.__insert(this.startNode=Ea()),e.__insert(this.endNode=Ea())}insertAfterPart(e){e.__insert(this.startNode=Ea()),this.endNode=e.endNode,e.endNode=this.startNode}setValue(e){this.__pendingValue=e}commit(){if(null===this.startNode.parentNode)return;for(;Na(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ia,e(this)}const e=this.__pendingValue;e!==Ia&&(La(e)?e!==this.value&&this.__commitText(e):e instanceof Pa?this.__commitTemplateResult(e):e instanceof Node?this.__commitNode(e):za(e)?this.__commitIterable(e):e===Ma?(this.value=Ma,this.clear()):this.__commitText(e))}__insert(e){this.endNode.parentNode.insertBefore(e,this.endNode)}__commitNode(e){this.value!==e&&(this.clear(),this.__insert(e),this.value=e)}__commitText(e){const t=this.startNode.nextSibling,n="string"==typeof(e=null==e?"":e)?e:String(e);t===this.endNode.previousSibling&&3===t.nodeType?t.data=n:this.__commitNode(document.createTextNode(n)),this.value=e}__commitTemplateResult(e){const t=this.options.templateFactory(e);if(this.value instanceof Ra&&this.value.template===t)this.value.update(e.values);else{const n=new Ra(t,e.processor,this.options),r=n._clone();n.update(e.values),this.__commitNode(r),this.value=n}}__commitIterable(e){Array.isArray(this.value)||(this.value=[],this.clear());const t=this.value;let n,r=0;for(const i of e)n=t[r],void 0===n&&(n=new qa(this.options),t.push(n),0===r?n.appendIntoPart(this):n.insertAfterPart(t[r-1])),n.setValue(i),n.commit(),r++;r<t.length&&(t.length=r,this.clear(n&&n.endNode))}clear(e=this.startNode){va(this.startNode.parentNode,e.nextSibling,this.endNode)}}class Ha{constructor(e,t,n){if(this.value=void 0,this.__pendingValue=void 0,2!==n.length||""!==n[0]||""!==n[1])throw new Error("Boolean attributes can only contain a single expression");this.element=e,this.name=t,this.strings=n}setValue(e){this.__pendingValue=e}commit(){for(;Na(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ia,e(this)}if(this.__pendingValue===Ia)return;const e=!!this.__pendingValue;this.value!==e&&(e?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=e),this.__pendingValue=Ia}}class Ua extends Fa{constructor(e,t,n){super(e,t,n),this.single=2===n.length&&""===n[0]&&""===n[1]}_createPart(){return new $a(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class $a extends Ba{}let Wa=!1;(()=>{try{const e={get capture(){return Wa=!0,!1}};window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(e){}})();class Ga{constructor(e,t,n){this.value=void 0,this.__pendingValue=void 0,this.element=e,this.eventName=t,this.eventContext=n,this.__boundHandleEvent=e=>this.handleEvent(e)}setValue(e){this.__pendingValue=e}commit(){for(;Na(this.__pendingValue);){const e=this.__pendingValue;this.__pendingValue=Ia,e(this)}if(this.__pendingValue===Ia)return;const e=this.__pendingValue,t=this.value,n=null==e||null!=t&&(e.capture!==t.capture||e.once!==t.once||e.passive!==t.passive),r=null!=e&&(null==t||n);n&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),r&&(this.__options=Va(e),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=e,this.__pendingValue=Ia}handleEvent(e){"function"==typeof this.value?this.value.call(this.eventContext||this.element,e):this.value.handleEvent(e)}}const Va=e=>e&&(Wa?{capture:e.capture,passive:e.passive,once:e.once}:e.capture)
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -167,7 +174,7 @@ const Na=e=>null===e||!("object"==typeof e||"function"==typeof e),Ia=e=>Array.is
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */;function Ha(e){let t=Ua.get(e.type);void 0===t&&(t={stringsArray:new WeakMap,keyString:new Map},Ua.set(e.type,t));let n=t.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(ha);return n=t.keyString.get(r),void 0===n&&(n=new ga(e,e.getTemplateElement()),t.keyString.set(r,n)),t.stringsArray.set(e.strings,n),n}const Ua=new Map,$a=new WeakMap,Wa=(e,t,n)=>{let r=$a.get(t);void 0===r&&(da(t,t.firstChild),$a.set(t,r=new Da(Object.assign({templateFactory:Ha},n))),r.appendInto(t)),r.setValue(e),r.commit()};
+ */;function Ja(e){let t=Xa.get(e.type);void 0===t&&(t={stringsArray:new WeakMap,keyString:new Map},Xa.set(e.type,t));let n=t.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(_a);return n=t.keyString.get(r),void 0===n&&(n=new wa(e,e.getTemplateElement()),t.keyString.set(r,n)),t.stringsArray.set(e.strings,n),n}const Xa=new Map,Qa=new WeakMap,Ya=(e,t,n)=>{let r=Qa.get(t);void 0===r&&(va(t,t.firstChild),Qa.set(t,r=new qa(Object.assign({templateFactory:Ja},n))),r.appendInto(t)),r.setValue(e),r.commit()};
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -180,7 +187,7 @@ const Na=e=>null===e||!("object"==typeof e||"function"==typeof e),Ia=e=>Array.is
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */const Va=new
+ */const Ka=new
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -194,7 +201,7 @@ const Na=e=>null===e||!("object"==typeof e||"function"==typeof e),Ia=e=>Array.is
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-class{handleAttributeExpressions(e,t,n,r){const i=t[0];if("."===i){return new La(e,t.slice(1),n).parts}return"@"===i?[new Ba(e,t.slice(1),r.eventContext)]:"?"===i?[new Pa(e,t.slice(1),n)]:new Ma(e,t,n).parts}handleTextExpression(e){return new Da(e)}};
+class{handleAttributeExpressions(e,t,n,r){const i=t[0];if("."===i){return new Ua(e,t.slice(1),n).parts}return"@"===i?[new Ga(e,t.slice(1),r.eventContext)]:"?"===i?[new Ha(e,t.slice(1),n)]:new Fa(e,t,n).parts}handleTextExpression(e){return new qa(e)}};
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -207,7 +214,7 @@ class{handleAttributeExpressions(e,t,n,r){const i=t[0];if("."===i){return new La
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.2.1");const Ga=(e,...t)=>new ka(e,t,"html",Va),Ja=(e,t)=>`${e}--${t}`;let Xa=!0;void 0===window.ShadyCSS?Xa=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),Xa=!1);const Qa=e=>t=>{const n=Ja(t.type,e);let r=Ua.get(n);void 0===r&&(r={stringsArray:new WeakMap,keyString:new Map},Ua.set(n,r));let i=r.stringsArray.get(t.strings);if(void 0!==i)return i;const s=t.strings.join(ha);if(i=r.keyString.get(s),void 0===i){const n=t.getTemplateElement();Xa&&window.ShadyCSS.prepareTemplateDom(n,e),i=new ga(t,n),r.keyString.set(s,i)}return r.stringsArray.set(t.strings,i),i},Ya=["html","svg"],Ka=new Set,Za=(e,t,n)=>{Ka.add(e);const r=n?n.element:document.createElement("template"),i=t.querySelectorAll("style"),{length:s}=i;if(0===s)return void window.ShadyCSS.prepareTemplateStyles(r,e);const o=document.createElement("style");for(let e=0;e<s;e++){const t=i[e];t.parentNode.removeChild(t),o.textContent+=t.textContent}(e=>{Ya.forEach(t=>{const n=Ua.get(Ja(t,e));void 0!==n&&n.keyString.forEach(e=>{const{element:{content:t}}=e,n=new Set;Array.from(t.querySelectorAll("style")).forEach(e=>{n.add(e)}),ya(e,n)})})})(e);const a=r.content;n?function(e,t,n=null){const{element:{content:r},parts:i}=e;if(null==n)return void r.appendChild(t);const s=document.createTreeWalker(r,133,null,!1);let o=Sa(i),a=0,c=-1;for(;s.nextNode();){for(c++,s.currentNode===n&&(a=wa(t),n.parentNode.insertBefore(t,n));-1!==o&&i[o].index===c;){if(a>0){for(;-1!==o;)i[o].index+=a,o=Sa(i,o);return}o=Sa(i,o)}}}(n,o,a.firstChild):a.insertBefore(o,a.firstChild),window.ShadyCSS.prepareTemplateStyles(r,e);const c=a.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==c)t.insertBefore(c.cloneNode(!0),t.firstChild);else if(n){a.insertBefore(o,a.firstChild);const e=new Set;e.add(o),ya(n,e)}};window.JSCompiler_renameProperty=(e,t)=>e;const ec={toAttribute(e,t){switch(t){case Boolean:return e?"":null;case Object:case Array:return null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){switch(t){case Boolean:return null!==e;case Number:return null===e?null:Number(e);case Object:case Array:return JSON.parse(e)}return e}},tc=(e,t)=>t!==e&&(t==t||e==e),nc={attribute:!0,type:String,converter:ec,reflect:!1,hasChanged:tc};class rc extends HTMLElement{constructor(){super(),this._updateState=0,this._instanceProperties=void 0,this._updatePromise=new Promise(e=>this._enableUpdatingResolver=e),this._changedProperties=new Map,this._reflectingProperties=void 0,this.initialize()}static get observedAttributes(){this.finalize();const e=[];return this._classProperties.forEach((t,n)=>{const r=this._attributeNameForProperty(n,t);void 0!==r&&(this._attributeToPropertyMap.set(r,n),e.push(r))}),e}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty("_classProperties",this))){this._classProperties=new Map;const e=Object.getPrototypeOf(this)._classProperties;void 0!==e&&e.forEach((e,t)=>this._classProperties.set(t,e))}}static createProperty(e,t=nc){if(this._ensureClassProperties(),this._classProperties.set(e,t),t.noAccessor||this.prototype.hasOwnProperty(e))return;const n="symbol"==typeof e?Symbol():"__"+e,r=this.getPropertyDescriptor(e,n,t);void 0!==r&&Object.defineProperty(this.prototype,e,r)}static getPropertyDescriptor(e,t,n){return{get(){return this[t]},set(n){const r=this[e];this[t]=n,this._requestUpdate(e,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this._classProperties&&this._classProperties.get(e)||nc}static finalize(){const e=Object.getPrototypeOf(this);if(e.hasOwnProperty("finalized")||e.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty("properties",this))){const e=this.properties,t=[...Object.getOwnPropertyNames(e),..."function"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e):[]];for(const n of t)this.createProperty(n,e[n])}}static _attributeNameForProperty(e,t){const n=t.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof e?e.toLowerCase():void 0}static _valueHasChanged(e,t,n=tc){return n(e,t)}static _propertyValueFromAttribute(e,t){const n=t.type,r=t.converter||ec,i="function"==typeof r?r:r.fromAttribute;return i?i(e,n):e}static _propertyValueToAttribute(e,t){if(void 0===t.reflect)return;const n=t.type,r=t.converter;return(r&&r.toAttribute||ec.toAttribute)(e,n)}initialize(){this._saveInstanceProperties(),this._requestUpdate()}_saveInstanceProperties(){this.constructor._classProperties.forEach((e,t)=>{if(this.hasOwnProperty(t)){const e=this[t];delete this[t],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(t,e)}})}_applyInstanceProperties(){this._instanceProperties.forEach((e,t)=>this[t]=e),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(e,t,n){t!==n&&this._attributeToProperty(e,n)}_propertyToAttribute(e,t,n=nc){const r=this.constructor,i=r._attributeNameForProperty(e,n);if(void 0!==i){const e=r._propertyValueToAttribute(t,n);if(void 0===e)return;this._updateState=8|this._updateState,null==e?this.removeAttribute(i):this.setAttribute(i,e),this._updateState=-9&this._updateState}}_attributeToProperty(e,t){if(8&this._updateState)return;const n=this.constructor,r=n._attributeToPropertyMap.get(e);if(void 0!==r){const e=n.getPropertyOptions(r);this._updateState=16|this._updateState,this[r]=n._propertyValueFromAttribute(t,e),this._updateState=-17&this._updateState}}_requestUpdate(e,t){let n=!0;if(void 0!==e){const r=this.constructor,i=r.getPropertyOptions(e);r._valueHasChanged(this[e],t,i.hasChanged)?(this._changedProperties.has(e)||this._changedProperties.set(e,t),!0!==i.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(e,i))):n=!1}!this._hasRequestedUpdate&&n&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(e,t){return this._requestUpdate(e,t),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(e){}const e=this.performUpdate();return null!=e&&await e,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){this._instanceProperties&&this._applyInstanceProperties();let e=!1;const t=this._changedProperties;try{e=this.shouldUpdate(t),e?this.update(t):this._markUpdated()}catch(t){throw e=!1,this._markUpdated(),t}e&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(t)),this.updated(t))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(e){return!0}update(e){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach((e,t)=>this._propertyToAttribute(t,this[t],e)),this._reflectingProperties=void 0),this._markUpdated()}updated(e){}firstUpdated(e){}}rc.finalized=!0;
+ */"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.2.1");const Za=(e,...t)=>new Pa(e,t,"html",Ka),ec=(e,t)=>`${e}--${t}`;let tc=!0;void 0===window.ShadyCSS?tc=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),tc=!1);const nc=e=>t=>{const n=ec(t.type,e);let r=Xa.get(n);void 0===r&&(r={stringsArray:new WeakMap,keyString:new Map},Xa.set(n,r));let i=r.stringsArray.get(t.strings);if(void 0!==i)return i;const o=t.strings.join(_a);if(i=r.keyString.get(o),void 0===i){const n=t.getTemplateElement();tc&&window.ShadyCSS.prepareTemplateDom(n,e),i=new wa(t,n),r.keyString.set(o,i)}return r.stringsArray.set(t.strings,i),i},rc=["html","svg"],ic=new Set,oc=(e,t,n)=>{ic.add(e);const r=n?n.element:document.createElement("template"),i=t.querySelectorAll("style"),{length:o}=i;if(0===o)return void window.ShadyCSS.prepareTemplateStyles(r,e);const s=document.createElement("style");for(let e=0;e<o;e++){const t=i[e];t.parentNode.removeChild(t),s.textContent+=t.textContent}(e=>{rc.forEach(t=>{const n=Xa.get(ec(t,e));void 0!==n&&n.keyString.forEach(e=>{const{element:{content:t}}=e,n=new Set;Array.from(t.querySelectorAll("style")).forEach(e=>{n.add(e)}),Ca(e,n)})})})(e);const a=r.content;n?function(e,t,n=null){const{element:{content:r},parts:i}=e;if(null==n)return void r.appendChild(t);const o=document.createTreeWalker(r,133,null,!1);let s=Ta(i),a=0,c=-1;for(;o.nextNode();){for(c++,o.currentNode===n&&(a=ja(t),n.parentNode.insertBefore(t,n));-1!==s&&i[s].index===c;){if(a>0){for(;-1!==s;)i[s].index+=a,s=Ta(i,s);return}s=Ta(i,s)}}}(n,s,a.firstChild):a.insertBefore(s,a.firstChild),window.ShadyCSS.prepareTemplateStyles(r,e);const c=a.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==c)t.insertBefore(c.cloneNode(!0),t.firstChild);else if(n){a.insertBefore(s,a.firstChild);const e=new Set;e.add(s),Ca(n,e)}};window.JSCompiler_renameProperty=(e,t)=>e;const sc={toAttribute(e,t){switch(t){case Boolean:return e?"":null;case Object:case Array:return null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){switch(t){case Boolean:return null!==e;case Number:return null===e?null:Number(e);case Object:case Array:return JSON.parse(e)}return e}},ac=(e,t)=>t!==e&&(t==t||e==e),cc={attribute:!0,type:String,converter:sc,reflect:!1,hasChanged:ac};class lc extends HTMLElement{constructor(){super(),this._updateState=0,this._instanceProperties=void 0,this._updatePromise=new Promise(e=>this._enableUpdatingResolver=e),this._changedProperties=new Map,this._reflectingProperties=void 0,this.initialize()}static get observedAttributes(){this.finalize();const e=[];return this._classProperties.forEach((t,n)=>{const r=this._attributeNameForProperty(n,t);void 0!==r&&(this._attributeToPropertyMap.set(r,n),e.push(r))}),e}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty("_classProperties",this))){this._classProperties=new Map;const e=Object.getPrototypeOf(this)._classProperties;void 0!==e&&e.forEach((e,t)=>this._classProperties.set(t,e))}}static createProperty(e,t=cc){if(this._ensureClassProperties(),this._classProperties.set(e,t),t.noAccessor||this.prototype.hasOwnProperty(e))return;const n="symbol"==typeof e?Symbol():"__"+e,r=this.getPropertyDescriptor(e,n,t);void 0!==r&&Object.defineProperty(this.prototype,e,r)}static getPropertyDescriptor(e,t,n){return{get(){return this[t]},set(n){const r=this[e];this[t]=n,this._requestUpdate(e,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this._classProperties&&this._classProperties.get(e)||cc}static finalize(){const e=Object.getPrototypeOf(this);if(e.hasOwnProperty("finalized")||e.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty("properties",this))){const e=this.properties,t=[...Object.getOwnPropertyNames(e),..."function"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e):[]];for(const n of t)this.createProperty(n,e[n])}}static _attributeNameForProperty(e,t){const n=t.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof e?e.toLowerCase():void 0}static _valueHasChanged(e,t,n=ac){return n(e,t)}static _propertyValueFromAttribute(e,t){const n=t.type,r=t.converter||sc,i="function"==typeof r?r:r.fromAttribute;return i?i(e,n):e}static _propertyValueToAttribute(e,t){if(void 0===t.reflect)return;const n=t.type,r=t.converter;return(r&&r.toAttribute||sc.toAttribute)(e,n)}initialize(){this._saveInstanceProperties(),this._requestUpdate()}_saveInstanceProperties(){this.constructor._classProperties.forEach((e,t)=>{if(this.hasOwnProperty(t)){const e=this[t];delete this[t],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(t,e)}})}_applyInstanceProperties(){this._instanceProperties.forEach((e,t)=>this[t]=e),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(e,t,n){t!==n&&this._attributeToProperty(e,n)}_propertyToAttribute(e,t,n=cc){const r=this.constructor,i=r._attributeNameForProperty(e,n);if(void 0!==i){const e=r._propertyValueToAttribute(t,n);if(void 0===e)return;this._updateState=8|this._updateState,null==e?this.removeAttribute(i):this.setAttribute(i,e),this._updateState=-9&this._updateState}}_attributeToProperty(e,t){if(8&this._updateState)return;const n=this.constructor,r=n._attributeToPropertyMap.get(e);if(void 0!==r){const e=n.getPropertyOptions(r);this._updateState=16|this._updateState,this[r]=n._propertyValueFromAttribute(t,e),this._updateState=-17&this._updateState}}_requestUpdate(e,t){let n=!0;if(void 0!==e){const r=this.constructor,i=r.getPropertyOptions(e);r._valueHasChanged(this[e],t,i.hasChanged)?(this._changedProperties.has(e)||this._changedProperties.set(e,t),!0!==i.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(e,i))):n=!1}!this._hasRequestedUpdate&&n&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(e,t){return this._requestUpdate(e,t),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(e){}const e=this.performUpdate();return null!=e&&await e,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){this._instanceProperties&&this._applyInstanceProperties();let e=!1;const t=this._changedProperties;try{e=this.shouldUpdate(t),e?this.update(t):this._markUpdated()}catch(t){throw e=!1,this._markUpdated(),t}e&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(t)),this.updated(t))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(e){return!0}update(e){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach((e,t)=>this._propertyToAttribute(t,this[t],e)),this._reflectingProperties=void 0),this._markUpdated()}updated(e){}firstUpdated(e){}}lc.finalized=!0;
 /**
 @license
 Copyright (c) 2019 The Polymer Project Authors. All rights reserved.
@@ -218,7 +225,7 @@ found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as
 part of the polymer project is also subject to an additional IP rights grant
 found at http://polymer.github.io/PATENTS.txt
 */
-const ic="adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,sc=Symbol();class oc{constructor(e,t){if(t!==sc)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e}get styleSheet(){return void 0===this._styleSheet&&(ic?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const ac=(e,...t)=>{const n=t.reduce((t,n,r)=>t+(e=>{if(e instanceof oc)return e.cssText;if("number"==typeof e)return e;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${e}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`)})(n)+e[r+1],e[0]);return new oc(n,sc)};
+const uc="adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,dc=Symbol();class hc{constructor(e,t){if(t!==dc)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e}get styleSheet(){return void 0===this._styleSheet&&(uc?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const fc=(e,...t)=>{const n=t.reduce((t,n,r)=>t+(e=>{if(e instanceof hc)return e.cssText;if("number"==typeof e)return e;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${e}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`)})(n)+e[r+1],e[0]);return new hc(n,dc)};
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -232,53 +239,54 @@ const ic="adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.pr
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-(window.litElementVersions||(window.litElementVersions=[])).push("2.3.1");const cc={};class lc extends rc{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty("_styles",this)))return;const e=this.getStyles();if(void 0===e)this._styles=[];else if(Array.isArray(e)){const t=(e,n)=>e.reduceRight((e,n)=>Array.isArray(n)?t(n,e):(e.add(n),e),n),n=t(e,new Set),r=[];n.forEach(e=>r.unshift(e)),this._styles=r}else this._styles=[e]}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const e=this.constructor._styles;0!==e.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?ic?this.renderRoot.adoptedStyleSheets=e.map(e=>e.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(e.map(e=>e.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(e){const t=this.render();super.update(e),t!==cc&&this.constructor.render(t,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(e=>{const t=document.createElement("style");t.textContent=e.cssText,this.renderRoot.appendChild(t)}))}render(){return cc}}lc.finalized=!0,lc.render=(e,t,n)=>{if(!n||"object"!=typeof n||!n.scopeName)throw new Error("The `scopeName` option is required.");const r=n.scopeName,i=$a.has(t),s=Xa&&11===t.nodeType&&!!t.host,o=s&&!Ka.has(r),a=o?document.createDocumentFragment():t;if(Wa(e,a,Object.assign({templateFactory:Qa(r)},n)),o){const e=$a.get(a);$a.delete(a);const n=e.value instanceof Ta?e.value.template:void 0;Za(r,a,n),da(t,t.firstChild),t.appendChild(a),$a.set(t,e)}!i&&s&&window.ShadyCSS.styleElement(t.host)};class uc extends lc{constructor(){super(),Object.assign(this,hi)}createRenderRoot(){return this}disconnectedCallback(){super.disconnectedCallback(),this.stopListening()}}const dc=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)};dc.extend=Wr;const hc=/^[#\/]|\s+$/g,fc=/^\/+|\/+$/g,pc=/#.*$/;dc.started=!1,Object.assign(dc.prototype,hi,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,"%2525"))},getSearch:function(){const e=this.location.href.replace(/#.*/,"").match(/\?.+/);return e?e[0]:""},getHash:function(e){const t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:""},getPath:function(){const e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(hc,"")},start:function(e){if(dc.started)throw new Error("history has already been started");if(dc.started=!0,this.options=xr({root:"/"},this.options,e),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(fc,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){const e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;const e=document.body,t=e.insertBefore(this.iframe,e.firstChild).contentWindow;t.document.open(),t.document.close(),t.location.hash="#"+this.fragment}if(this._usePushState?addEventListener("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?addEventListener("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){this._usePushState?removeEventListener("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&removeEventListener("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),dc.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){let t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),Uo(this.handlers,(function(t){if(t.route.test(e))return t.callback(e),!0})))},navigate:function(e,t){if(!dc.started)return!1;t&&!0!==t||(t={trigger:!!t}),e=this.getFragment(e||"");let n=this.root;""!==e&&"?"!==e.charAt(0)||(n=n.slice(0,-1)||"/");const r=n+e;e=e.replace(pc,"");const i=this.decodeFragment(e);if(this.fragment!==i){if(this.fragment=i,this._usePushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){const n=this.iframe.contentWindow;t.replace||(n.document.open(),n.document.close()),this._updateHash(n.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){const n=e.href.replace(/(javascript:|#).*$/,"");e.replace(n+"#"+t)}else e.hash="#"+t}});var gc=dc;var mc=function(e){return Ee(e)&&"[object RegExp]"==k(e)},vc=ze.a&&ze.a.isRegExp,_c=vc?Le(vc):mc;const bc=function(e={}){this.history=e.history||new gc,this.preinitialize.apply(this,arguments),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)};bc.extend=Wr;const yc=/\((.*?)\)/g,wc=/(\(\?)?:\w+/g,Sc=/\*\w+/g,xc=/[\-{}\[\]+?.,\\\^$|#\s]/g;Object.assign(bc.prototype,hi,{preinitialize:function(){},initialize:function(){},route:function(e,t,n){return _c(e)||(e=this._routeToRegExp(e)),M(t)&&(n=t,t=""),n||(n=this[t]),this.history.route(e,r=>{const i=this._extractParameters(e,r);!1!==this.execute(n,i,t)&&(this.trigger.apply(this,["route:"+t].concat(i)),this.trigger("route",t,i),this.history.trigger("route",this,t,i))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,t){return this.history.navigate(e,t),this},_bindRoutes:function(){if(!this.routes)return;let e;this.routes=$r(this,"routes");const t=Qe(this.routes);for(;null!=(e=t.pop());)this.route(e,this.routes[e])},_routeToRegExp:function(e){return e=e.replace(xc,"\\$&").replace(yc,"(?:$1)?").replace(wc,(function(e,t){return t?e:"([^/?]+)"})).replace(Sc,"([^?]*?)"),new RegExp("^"+e+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(e,t){const n=e.exec(t).slice(1);return n.map((function(e,t){return t===n.length-1?e||null:e?decodeURIComponent(e):null}))}});var Ec=n(3),Ac=function(){return y.a.Date.now()},Cc=Math.max,jc=Math.min;var Tc=function(e,t,n){var r,i,s,o,a,c,l=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function f(t){var n=r,s=i;return r=i=void 0,l=t,o=e.apply(s,n)}function p(e){return l=e,a=setTimeout(m,t),u?f(e):o}function g(e){var n=e-c;return void 0===c||n>=t||n<0||d&&e-l>=s}function m(){var e=Ac();if(g(e))return v(e);a=setTimeout(m,function(e){var n=t-(e-c);return d?jc(n,s-(e-l)):n}(e))}function v(e){return a=void 0,h&&r?f(e):(r=i=void 0,o)}function _(){var e=Ac(),n=g(e);if(r=arguments,i=this,c=e,n){if(void 0===a)return p(c);if(d)return clearTimeout(a),a=setTimeout(m,t),f(c)}return void 0===a&&(a=setTimeout(m,t)),o}return t=si(t)||0,N(n)&&(u=!!n.leading,s=(d="maxWait"in n)?Cc(si(n.maxWait)||0,t):s,h="trailing"in n?!!n.trailing:h),_.cancel=function(){void 0!==a&&clearTimeout(a),l=0,r=c=i=a=void 0},_.flush=function(){return void 0===a?o:v(Ac())},_};var Oc=function(e,t,n){t=Br(t,e);var r=null==(e=ws(e,t))?e:e[qr(bs(t))];return null==r?void 0:pr(r,e,n)},kc=wr(Oc),Nc=n(70);
+(window.litElementVersions||(window.litElementVersions=[])).push("2.3.1");const pc={};class gc extends lc{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty("_styles",this)))return;const e=this.getStyles();if(void 0===e)this._styles=[];else if(Array.isArray(e)){const t=(e,n)=>e.reduceRight((e,n)=>Array.isArray(n)?t(n,e):(e.add(n),e),n),n=t(e,new Set),r=[];n.forEach(e=>r.unshift(e)),this._styles=r}else this._styles=[e]}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const e=this.constructor._styles;0!==e.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?uc?this.renderRoot.adoptedStyleSheets=e.map(e=>e.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(e.map(e=>e.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(e){const t=this.render();super.update(e),t!==pc&&this.constructor.render(t,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(e=>{const t=document.createElement("style");t.textContent=e.cssText,this.renderRoot.appendChild(t)}))}render(){return pc}}gc.finalized=!0,gc.render=(e,t,n)=>{if(!n||"object"!=typeof n||!n.scopeName)throw new Error("The `scopeName` option is required.");const r=n.scopeName,i=Qa.has(t),o=tc&&11===t.nodeType&&!!t.host,s=o&&!ic.has(r),a=s?document.createDocumentFragment():t;if(Ya(e,a,Object.assign({templateFactory:nc(r)},n)),s){const e=Qa.get(a);Qa.delete(a);const n=e.value instanceof Ra?e.value.template:void 0;oc(r,a,n),va(t,t.firstChild),t.appendChild(a),Qa.set(t,e)}!i&&o&&window.ShadyCSS.styleElement(t.host)};class mc extends gc{constructor(){super(),Object.assign(this,_i)}createRenderRoot(){return this}disconnectedCallback(){super.disconnectedCallback(),this.stopListening()}}const vc=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)};vc.extend=Yr;const _c=/^[#\/]|\s+$/g,bc=/^\/+|\/+$/g,yc=/#.*$/;vc.started=!1,Object.assign(vc.prototype,_i,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,"%2525"))},getSearch:function(){const e=this.location.href.replace(/#.*/,"").match(/\?.+/);return e?e[0]:""},getHash:function(e){const t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:""},getPath:function(){const e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(_c,"")},start:function(e){if(vc.started)throw new Error("history has already been started");if(vc.started=!0,this.options=Or({root:"/"},this.options,e),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(bc,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){const e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;const e=document.body,t=e.insertBefore(this.iframe,e.firstChild).contentWindow;t.document.open(),t.document.close(),t.location.hash="#"+this.fragment}if(this._usePushState?addEventListener("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?addEventListener("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){this._usePushState?removeEventListener("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&removeEventListener("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),vc.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){let t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),Xs(this.handlers,(function(t){if(t.route.test(e))return t.callback(e),!0})))},navigate:function(e,t){if(!vc.started)return!1;t&&!0!==t||(t={trigger:!!t}),e=this.getFragment(e||"");let n=this.root;""!==e&&"?"!==e.charAt(0)||(n=n.slice(0,-1)||"/");const r=n+e;e=e.replace(yc,"");const i=this.decodeFragment(e);if(this.fragment!==i){if(this.fragment=i,this._usePushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){const n=this.iframe.contentWindow;t.replace||(n.document.open(),n.document.close()),this._updateHash(n.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){const n=e.href.replace(/(javascript:|#).*$/,"");e.replace(n+"#"+t)}else e.hash="#"+t}});var wc=vc;var Sc=function(e){return Ee(e)&&"[object RegExp]"==k(e)},xc=ze.a&&ze.a.isRegExp,Ec=xc?Le(xc):Sc;const Ac=function(e={}){this.history=e.history||new wc,this.preinitialize.apply(this,arguments),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)};Ac.extend=Yr;const Cc=/\((.*?)\)/g,jc=/(\(\?)?:\w+/g,Tc=/\*\w+/g,Oc=/[\-{}\[\]+?.,\\\^$|#\s]/g;Object.assign(Ac.prototype,_i,{preinitialize:function(){},initialize:function(){},route:function(e,t,n){return Ec(e)||(e=this._routeToRegExp(e)),M(t)&&(n=t,t=""),n||(n=this[t]),this.history.route(e,r=>{const i=this._extractParameters(e,r);!1!==this.execute(n,i,t)&&(this.trigger.apply(this,["route:"+t].concat(i)),this.trigger("route",t,i),this.history.trigger("route",this,t,i))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,t){return this.history.navigate(e,t),this},_bindRoutes:function(){if(!this.routes)return;let e;this.routes=Qr(this,"routes");const t=Qe(this.routes);for(;null!=(e=t.pop());)this.route(e,this.routes[e])},_routeToRegExp:function(e){return e=e.replace(Oc,"\\$&").replace(Cc,"(?:$1)?").replace(jc,(function(e,t){return t?e:"([^/?]+)"})).replace(Tc,"([^?]*?)"),new RegExp("^"+e+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(e,t){const n=e.exec(t).slice(1);return n.map((function(e,t){return t===n.length-1?e||null:e?decodeURIComponent(e):null}))}});var kc=n(1),Nc=function(){return y.a.Date.now()},Ic=Math.max,Mc=Math.min;var Rc=function(e,t,n){var r,i,o,s,a,c,l=0,u=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function f(t){var n=r,o=i;return r=i=void 0,l=t,s=e.apply(o,n)}function p(e){return l=e,a=setTimeout(m,t),u?f(e):s}function g(e){var n=e-c;return void 0===c||n>=t||n<0||d&&e-l>=o}function m(){var e=Nc();if(g(e))return v(e);a=setTimeout(m,function(e){var n=t-(e-c);return d?Mc(n,o-(e-l)):n}(e))}function v(e){return a=void 0,h&&r?f(e):(r=i=void 0,s)}function _(){var e=Nc(),n=g(e);if(r=arguments,i=this,c=e,n){if(void 0===a)return p(c);if(d)return clearTimeout(a),a=setTimeout(m,t),f(c)}return void 0===a&&(a=setTimeout(m,t)),s}return t=di(t)||0,N(n)&&(u=!!n.leading,o=(d="maxWait"in n)?Ic(di(n.maxWait)||0,t):o,h="trailing"in n?!!n.trailing:h),_.cancel=function(){void 0!==a&&clearTimeout(a),l=0,r=c=i=a=void 0},_.flush=function(){return void 0===a?s:v(Nc())},_};var Dc=function(e,t,n){t=Gr(t,e);var r=null==(e=To(e,t))?e:e[Vr(Co(t))];return null==r?void 0:yr(r,e,n)},Pc=jr(Dc),Lc=n(94);
 /**
  * @module converse-core
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-Sn.a.extend(yn.a),Ec.e.addNamespace("CARBONS","urn:xmpp:carbons:2"),Ec.e.addNamespace("CHATSTATES","http://jabber.org/protocol/chatstates"),Ec.e.addNamespace("CSI","urn:xmpp:csi:0"),Ec.e.addNamespace("DELAY","urn:xmpp:delay"),Ec.e.addNamespace("FASTEN","urn:xmpp:fasten:0"),Ec.e.addNamespace("FORWARD","urn:xmpp:forward:0"),Ec.e.addNamespace("HINTS","urn:xmpp:hints"),Ec.e.addNamespace("HTTPUPLOAD","urn:xmpp:http:upload:0"),Ec.e.addNamespace("IDLE","urn:xmpp:idle:1"),Ec.e.addNamespace("MAM","urn:xmpp:mam:2"),Ec.e.addNamespace("MODERATE","urn:xmpp:message-moderate:0"),Ec.e.addNamespace("NICK","http://jabber.org/protocol/nick"),Ec.e.addNamespace("OMEMO","eu.siacs.conversations.axolotl"),Ec.e.addNamespace("OUTOFBAND","jabber:x:oob"),Ec.e.addNamespace("PUBSUB","http://jabber.org/protocol/pubsub"),Ec.e.addNamespace("REGISTER","jabber:iq:register"),Ec.e.addNamespace("RETRACT","urn:xmpp:message-retract:0"),Ec.e.addNamespace("ROSTERX","http://jabber.org/protocol/rosterx"),Ec.e.addNamespace("RSM","http://jabber.org/protocol/rsm"),Ec.e.addNamespace("SID","urn:xmpp:sid:0"),Ec.e.addNamespace("SPOILER","urn:xmpp:spoiler:0"),Ec.e.addNamespace("STANZAS","urn:ietf:params:xml:ns:xmpp-stanzas"),Ec.e.addNamespace("VCARD","vcard-temp"),Ec.e.addNamespace("VCARDUPDATE","vcard-temp:x:update"),Ec.e.addNamespace("XFORM","jabber:x:data");class Ic extends Error{}const Mc=["converse-adhoc","converse-bookmarks","converse-bosh","converse-caps","converse-carbons","converse-chat","converse-chatboxes","converse-disco","converse-emoji","converse-headlines","converse-mam","converse-muc","converse-ping","converse-pubsub","converse-roster","converse-smacks","converse-status","converse-vcard"],Rc={allow_non_roster_messaging:!1,assets_path:"/dist",authentication:"login",auto_login:!1,auto_reconnect:!0,blacklisted_plugins:[],connection_options:{},credentials_url:null,discover_connection_methods:!0,geouri_regex:/https\:\/\/www.openstreetmap.org\/.*#map=[0-9]+\/([\-0-9.]+)\/([\-0-9.]+)\S*/g,geouri_replacement:"https://www.openstreetmap.org/?mlat=$1&mlon=$2#map=18/$1/$2",idle_presence_timeout:300,i18n:"en",jid:void 0,keepalive:!0,loglevel:"info",locales:["af","ar","bg","ca","cs","de","eo","es","eu","en","fi","fr","gl","he","hi","hu","id","it","ja","nb","nl","mr","oc","pl","pt","pt_BR","ro","ru","tr","uk","vi","zh_CN","zh_TW"],nickname:void 0,password:void 0,persistent_store:"localStorage",rid:void 0,root:window.document,sid:void 0,singleton:!1,strict_plugin_dependencies:!1,trusted:!0,view_mode:"overlayed",websocket_url:void 0,whitelisted_plugins:[]},Dc={};Dc[Ec.e.Status.ATTACHED]="ATTACHED",Dc[Ec.e.Status.AUTHENTICATING]="AUTHENTICATING",Dc[Ec.e.Status.AUTHFAIL]="AUTHFAIL",Dc[Ec.e.Status.CONNECTED]="CONNECTED",Dc[Ec.e.Status.CONNECTING]="CONNECTING",Dc[Ec.e.Status.CONNFAIL]="CONNFAIL",Dc[Ec.e.Status.DISCONNECTED]="DISCONNECTED",Dc[Ec.e.Status.DISCONNECTING]="DISCONNECTING",Dc[Ec.e.Status.ERROR]="ERROR",Dc[Ec.e.Status.RECONNECTING]="RECONNECTING",Dc[Ec.e.Status.REDIRECT]="REDIRECT";const Pc={initialize(){},__:(...e)=>Object(Nc.sprintf)(...e)},Lc={log:Pn,CONNECTION_STATUS:Dc,templates:{},promises:{initialized:qs.getResolveablePromise()},STATUS_WEIGHTS:{offline:6,unavailable:5,xa:4,away:3,dnd:2,chat:1,online:1},ANONYMOUS:"anonymous",CLOSED:"closed",EXTERNAL:"external",LOGIN:"login",LOGOUT:"logout",OPENED:"opened",PREBIND:"prebind",STANZA_TIMEOUT:1e4,SUCCESS:"success",FAILURE:"failure",DEFAULT_IMAGE_TYPE:"image/svg+xml",DEFAULT_IMAGE:"PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+CiA8cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgZmlsbD0iIzU1NSIvPgogPGNpcmNsZSBjeD0iNjQiIGN5PSI0MSIgcj0iMjQiIGZpbGw9IiNmZmYiLz4KIDxwYXRoIGQ9Im0yOC41IDExMiB2LTEyIGMwLTEyIDEwLTI0IDI0LTI0IGgyMyBjMTQgMCAyNCAxMiAyNCAyNCB2MTIiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==",TIMEOUTS:{PAUSED:1e4,INACTIVE:9e4},INACTIVE:"inactive",ACTIVE:"active",COMPOSING:"composing",PAUSED:"paused",GONE:"gone",PRIVATE_CHAT_TYPE:"chatbox",CHATROOMS_TYPE:"chatroom",HEADLINES_TYPE:"headline",CONTROLBOX_TYPE:"controlbox",default_connection_options:{explicitResourceBinding:!0},router:new bc,TimeoutError:Ic,isTestEnv:()=>"montague.lit/http-bind"===Fc.bosh_service_url,__:(...e)=>Pc.__(...e),___:e=>e};let zc;Lc.VERSION_NAME="v6.0.1dev",Object.assign(Lc,hi),cr.enable(Lc,"_converse","pluggable");let Fc={};function Bc(){var e;if(!Lc.bare_jid){const e="No JID to fetch user settings for";throw Pn.error(e),Error(e)}if(!(null===(e=zc)||void 0===e?void 0:e.fetched)){const e="converse.user-settings.".concat(Lc.bare_jid);zc=new Rs({id:e}),zc.browserStorage=Uc(e),zc.fetched=zc.fetch({promise:!0})}return zc.fetched}const qc=Lc.api={connection:{connected(){var e;return(null==Lc||null===(e=Lc.connection)||void 0===e?void 0:e.connected)&&!0},disconnect(){Lc.connection&&Lc.connection.disconnect()},async reconnect(){const e=Lc.connfeedback.get("connection_status");if(qc.settings.get("authentication")===Lc.ANONYMOUS&&(await $c(),await Vc()),e===Ec.e.Status.CONNFAIL?qc.connection.isType("websocket")&&qc.settings.get("bosh_service_url")?(await Lc.setUserJID(Lc.bare_jid),Lc.connection._proto._doDisconnect(),Lc.connection._proto=new Ec.e.Bosh(Lc.connection),Lc.connection.service=qc.settings.get("bosh_service_url")):qc.connection.isType("bosh")&&qc.settings.get("websocket_url")&&(qc.settings.get("authentication")===Lc.ANONYMOUS?await Lc.setUserJID(qc.settings.get("jid")):await Lc.setUserJID(Lc.bare_jid),Lc.connection._proto._doDisconnect(),Lc.connection._proto=new Ec.e.Websocket(Lc.connection),Lc.connection.service=qc.settings.get("websocket_url")):e===Ec.e.Status.AUTHFAIL&&qc.settings.get("authentication")===Lc.ANONYMOUS&&await Lc.setUserJID(qc.settings.get("jid")),!Lc.connection.reconnecting)return Lc.connection.reconnect();Lc.connection.debouncedReconnect()},isType:e=>Lc.connection.isType(e)},async trigger(e){if(!Lc._events)return;const t=Array.from(arguments),n=t.pop();if(n&&n.synchronous){const n=Lc._events[e]||[];await Promise.all(n.map(e=>e.callback.apply(e.ctx,t.splice(1))))}else Lc.trigger.apply(Lc,arguments);const r=Lc.promises[e];void 0!==r&&r.resolve()},hook(e,t,n){const r=Lc._events[e]||[];if(r.length){const e=r.reduce((e,n)=>e.then(e=>n.callback(t,e)),Promise.resolve(n));return e.catch(e=>{throw Pn.error(e),e}),e}return n},user:{jid:()=>Lc.connection.jid,async login(e,t,n=!1){var r,i;if(e=e||Lc.jid,(!(null===(r=Lc.connection)||void 0===r?void 0:r.jid)||e&&!qs.isSameDomain(Lc.connection.jid,e))&&await Lc.initConnection(),(null===(i=qc.settings.get("connection_options"))||void 0===i?void 0:i.worker)&&await Lc.connection.restoreWorkerSession())return;e&&(e=await Lc.setUserJID(e));const s=Lc.pluggable.plugins["converse-bosh"];if(s&&s.enabled()){if(await Lc.restoreBOSHSession())return;if(qc.settings.get("authentication")===Lc.PREBIND&&(!n||qc.settings.get("auto_login")))return Lc.startNewPreboundBOSHSession()}t=t||qc.settings.get("password"),async function(e,t){const{api:n}=Lc;n.settings.get("authentication")===Lc.LOGIN?e?Wc(e):Lc.api.settings.get("credentials_url")?Wc(await async function(){let e,t=0;for(;!e;){try{e=await Qc(t)}catch(e){Pn.error("Could not fetch login credentials"),Pn.error(e)}t=2e3}return e}()):Lc.jid&&(Lc.api.settings.get("password")||Lc.connection.pass)?Wc():!Lc.isTestEnv()&&"credentials"in navigator?Wc(await async function(){try{const e=await navigator.credentials.get({password:!0});if(e&&"password"==e.type&&qs.isValidJID(e.id))return await Lc.setUserJID(e.id),{jid:e.id,password:e.password}}catch(e){Pn.error(e)}}()):!Lc.isTestEnv()&&Pn.warn("attemptNonPreboundSession: Couldn't find credentials to log in with"):![Lc.ANONYMOUS,Lc.EXTERNAL].includes(Lc.api.settings.get("authentication"))||t&&!Lc.api.settings.get("auto_login")||Wc()}(e&&t?{jid:e,password:t}:null,n)},logout(){const e=qs.getResolveablePromise(),t=()=>{Object.keys(Lc.promises).forEach(Hc),delete Lc.jid,qc.trigger("logout"),e.resolve()};return Lc.connection.setDisconnectionCause(Lc.LOGOUT,void 0,!0),void 0!==Lc.connection?(qc.listen.once("disconnected",()=>t()),Lc.connection.disconnect()):t(),e},settings:{getModel:async()=>(await Bc(),zc),get:async(e,t)=>(await Bc(),void 0===zc.get(e)?t:zc.get(e)),async set(e,t){if(await Bc(),N(e))return zc.save(e,{promise:!0});{const n={};return n[e]=t,zc.save(n,{promise:!0})}},async clear(){await Bc(),zc.clear()}}},settings:{extend(e){qs.merge(Rc,e);const t=Object.keys(Ms(e,Object.keys(Rc))),n=Ms(Fc,t),r=xr(Ms(e,t),n);qs.merge(Lc.settings,r),qs.merge(Lc,r)},update(e){return Pn.warn("The api.settings.update method has been deprecated and will be removed. Please use api.settings.extend instead."),this.extend(e)},get(e){if(Object.keys(Rc).includes(e))return Lc[e]},set(e,t){const n={};N(e)?(xr(Lc,Ms(e,Object.keys(Rc))),xr(Lc.settings,Ms(e,Object.keys(Rc)))):"string"==typeof e&&(n[e]=t,xr(Lc,Ms(n,Object.keys(Rc))),xr(Lc.settings,Ms(n,Object.keys(Rc))))}},promises:{add(e,t=!0){(e=Array.isArray(e)?e:[e]).forEach(e=>{const n=qs.getResolveablePromise();n.replace=t,Lc.promises[e]=n})}},listen:{once:Lc.once.bind(Lc),on:Lc.on.bind(Lc),not:Lc.off.bind(Lc),stanza(e,t,n){M(t)?(n=t,t={}):t=t||{},Lc.connection.addHandler(n,t.ns,e,t.type,t.id,t.from,t)}},waitUntil(e){if(M(e))return qs.waitUntil(e);{const t=Lc.promises[e];return void 0===t?null:t}},send:e=>qc.connection.connected()?("string"==typeof e&&(e=qs.toStanza(e)),"iq"===e.tagName?qc.sendIQ(e):(Lc.connection.send(e),void qc.trigger("send",e))):(Pn.warn("Not sending stanza because we're not connected!"),void Pn.warn(Ec.e.serialize(e))),sendIQ(e,t=Lc.STANZA_TIMEOUT,n=!0){var r,i;let s;return e=null!==(r=null===(i=e)||void 0===i?void 0:i.nodeTree)&&void 0!==r?r:e,["get","set"].includes(e.getAttribute("type"))?(t=t||Lc.STANZA_TIMEOUT,n?(s=new Promise((n,r)=>Lc.connection.sendIQ(e,n,r,t)),s.catch(n=>{if(null===n)throw new Ic("Timeout error after ".concat(t,"ms for the following IQ stanza: ").concat(Ec.e.serialize(e)))})):s=new Promise(n=>Lc.connection.sendIQ(e,n,n,t))):(Lc.connection.sendIQ(e),s=Promise.resolve()),qc.trigger("send",e),s}};function Hc(e){const t=Lc.promises[e];if(!t)throw new Error("Tried to replace non-existing promise: ".concat(e));if(t.replace){const n=qs.getResolveablePromise();n.replace=t.replace,Lc.promises[e]=n}else Pn.debug('Not replacing promise "'.concat(e,'"'))}function Uc(e,t){const n=Lc.storage[t||Lc.config.get("storage")];return new _n(e,n)}async function $c(){return await Lc.api.trigger("beforeTearDown",{synchronous:!0}),window.removeEventListener("click",Lc.onUserActivity),window.removeEventListener("focus",Lc.onUserActivity),window.removeEventListener("keypress",Lc.onUserActivity),window.removeEventListener("mousemove",Lc.onUserActivity),window.removeEventListener(Lc.unloadevent,Lc.onUserActivity),window.clearInterval(Lc.everySecondTrigger),Lc.api.trigger("afterTearDown"),Lc}function Wc(e){if([Lc.ANONYMOUS,Lc.EXTERNAL].includes(Lc.api.settings.get("authentication"))){if(!Lc.jid)throw new Error("Config Error: when using anonymous login you need to provide the server's domain via the 'jid' option. Either when calling converse.initialize, or when calling _converse.api.user.login.");Lc.connection.reconnecting||Lc.connection.reset(),Lc.connection.connect(Lc.jid.toLowerCase())}else if(Lc.api.settings.get("authentication")===Lc.LOGIN){var t;const n=e?e.password:(null===(t=Lc.connection)||void 0===t?void 0:t.pass)||Lc.api.settings.get("password");if(!n){if(Lc.api.settings.get("auto_login"))throw new Error("autoLogin: If you use auto_login and authentication='login' then you also need to provide a password.");return Lc.connection.setDisconnectionCause(Ec.e.Status.AUTHFAIL,void 0,!0),void Lc.api.connection.disconnect()}Lc.connection.reconnecting||Lc.connection.reset(),Lc.connection.connect(Lc.jid,n)}}function Vc(){var e;return null===(e=Lc.session)||void 0===e||e.destroy(),delete Lc.session,Lc.shouldClearCache()&&Lc.api.user.settings.clear(),Lc.api.trigger("clearSession",{synchronous:!0})}async function Gc(e){var t;const n=qc.settings.get("connection_options").worker,r=Ec.e.getBareJidFromJid(e).toLowerCase(),i="converse.session-".concat(r);(null===(t=Lc.session)||void 0===t?void 0:t.get("id"))!==i?(Lc.session=new Rs({id:i}),Lc.session.browserStorage=Uc(i,n?"persistent":"session"),await new Promise(e=>Lc.session.fetch({success:e,error:e})),!n&&Lc.session.get("active")&&(Lc.session.clear(),Lc.session.save({id:i})),Jc(e),function(){if("persistent"!==Lc.config.get("storage"))return;const e={name:Lc.isTestEnv()?"converse-test-persistent":"converse-persistent",storeName:Lc.bare_jid};"localStorage"===Lc.api.settings.get("persistent_store")?(e.description="localStorage instance",e.driver=[_n.localForage.LOCALSTORAGE]):"IndexedDB"===Lc.api.settings.get("persistent_store")&&(e.description="indexedDB instance",e.driver=[_n.localForage.INDEXEDDB]),Lc.storage.persistent=_n.localForage.createInstance(e)}(),Lc.api.trigger("userSessionInitialized")):Jc(e)}function Jc(e){e=Lc.session.get("jid")||e,Lc.api.settings.get("authentication")===Lc.ANONYMOUS||Ec.e.getResourceFromJid(e)||(e=e.toLowerCase()+aa.generateResource()),Lc.jid=e,Lc.bare_jid=Ec.e.getBareJidFromJid(e),Lc.resource=Ec.e.getResourceFromJid(e),Lc.domain=Ec.e.getDomainFromJid(e),Lc.session.save({jid:e,bare_jid:Lc.bare_jid,resource:Lc.resource,domain:Lc.domain,active:!0}),Lc.connection.jid=e}async function Xc(){var e;await qc.trigger("cleanup",{synchronous:!0}),Lc.router.history.stop(),document.removeEventListener("visibilitychange",Lc.saveWindowState),qc.trigger("unregisteredGlobalEventHandlers"),null===(e=Lc.connection)||void 0===e||e.reset(),Lc.stopListening(),Lc.off(),Lc.promises.initialized.isResolved&&qc.promises.add("initialized")}function Qc(e=0){return new Promise(Tc((e,t)=>{const n=new XMLHttpRequest;n.open("GET",qc.settings.get("credentials_url"),!0),n.setRequestHeader("Accept","application/json, text/javascript"),n.onload=()=>{if(n.status>=200&&n.status<400){const t=JSON.parse(n.responseText);Lc.setUserJID(t.jid).then(()=>{e({jid:t.jid,password:t.password})})}else t(new Error("".concat(n.status,": ").concat(n.responseText)))},n.onerror=t,n.send()},e))}Lc.isUniView=function(){return["mobile","fullscreen","embedded"].includes(qc.settings.get("view_mode"))},Lc.createStore=Uc,Lc.shouldClearCache=()=>!Lc.config.get("trusted")||Lc.isTestEnv(),Lc.initConnection=function(){const e=Lc.api;if(!e.settings.get("bosh_service_url")){if(e.settings.get("authentication")===Lc.PREBIND)throw new Error("authentication is set to 'prebind' but we don't have a BOSH connection");if(!e.settings.get("websocket_url"))throw new Error("initConnection: you must supply a value for either the bosh_service_url or websocket_url or both.")}const t=Lc.isTestEnv()?ca:aa;if(("WebSocket"in window||"MozWebSocket"in window)&&e.settings.get("websocket_url"))Lc.connection=new t(e.settings.get("websocket_url"),Object.assign(Lc.default_connection_options,e.settings.get("connection_options")));else{if(!e.settings.get("bosh_service_url"))throw new Error("initConnection: this browser does not support websockets and bosh_service_url wasn't specified.");Lc.connection=new t(e.settings.get("bosh_service_url"),Object.assign(Lc.default_connection_options,e.settings.get("connection_options"),{keepalive:e.settings.get("keepalive")}))}!function(){const e={};e[Ec.e.LogLevel.DEBUG]="debug",e[Ec.e.LogLevel.INFO]="info",e[Ec.e.LogLevel.WARN]="warn",e[Ec.e.LogLevel.ERROR]="error",e[Ec.e.LogLevel.FATAL]="fatal",Ec.e.log=(t,n)=>Pn.log(n,e[t]),Ec.e.error=e=>Pn.error(e),Lc.connection.xmlInput=e=>Pn.debug(e.outerHTML,"color: darkgoldenrod"),Lc.connection.xmlOutput=e=>Pn.debug(e.outerHTML,"color: darkcyan")}(),e.trigger("connectionInitialized")},Lc.setUserJID=async function(e){return await Gc(e),Lc.api.trigger("setUserJID"),e},Lc.saveWindowState=function(e){let t;const n={focus:"visible",focusin:"visible",pageshow:"visible",blur:"hidden",focusout:"hidden",pagehide:"hidden"};t=(e=e||document.createEvent("Events")).type in n?n[e.type]:document.hidden?"hidden":"visible",Lc.windowState=t,qc.trigger("windowStateChanged",{state:t})},Lc.ConnectionFeedback=Rs.extend({defaults:{connection_status:Ec.e.Status.DISCONNECTED,message:""},initialize(){this.on("change",()=>qc.trigger("connfeedback",Lc.connfeedback))}});const Yc=window.converse||{};Object.assign(Yc,{CHAT_STATES:["active","composing","gone","inactive","paused"],keycodes:{TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESCAPE:27,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,FORWARD_SLASH:47,AT:50,META:91,META_RIGHT:93},async initialize(e){if(await Xc(),"onpagehide"in window?Lc.unloadevent="pagehide":"onbeforeunload"in window?Lc.unloadevent="beforeunload":"onunload"in window&&(Lc.unloadevent="unload"),function(e){Lc.settings={},Fc=e;const t=Ms(e,Object.keys(Rc));xr(Lc.settings,Rc,t),xr(Lc,Rc,t)}(e),Lc.strict_plugin_dependencies=e.strict_plugin_dependencies,Pn.setLogLevel(qc.settings.get("loglevel")),qc.settings.get("authentication")===Lc.ANONYMOUS&&qc.settings.get("auto_login")&&!qc.settings.get("jid"))throw new Error("Config Error: you need to provide the server's domain via the 'jid' option when using anonymous authentication with auto_login.");Lc.router.route(/^converse\?loglevel=(debug|info|warn|error|fatal)$/,"loglevel",e=>Pn.setLogLevel(e)),Lc.connfeedback=new Lc.ConnectionFeedback,Lc.send_initial_presence=!0,await async function(){await _n.sessionStorageInitialized,Lc.storage={session:_n.localForage.createInstance({name:Lc.isTestEnv()?"converse-test-session":"converse-session",description:"sessionStorage instance",driver:["sessionStorageWrapper"]})}}(),function(){const e="converse.client-config";Lc.config=new Rs({id:e,trusted:!!Lc.api.settings.get("trusted"),storage:Lc.api.settings.get("trusted")?"persistent":"session"}),Lc.config.browserStorage=Uc(e,"session"),Lc.config.fetch(),Lc.api.trigger("clientConfigInitialized")}(),await Pc.initialize(),function(){Lc.pluggable.initialized_plugins=[];const e=Mc.concat(Lc.api.settings.get("whitelisted_plugins"));Lc.api.settings.get("singleton")&&["converse-bookmarks","converse-controlbox","converse-headline","converse-register"].forEach(e=>Lc.api.settings.get("blacklisted_plugins").push(e)),Lc.pluggable.initializePlugins({_converse:Lc},e,Lc.api.settings.get("blacklisted_plugins")),Lc.api.trigger("pluginsInitialized")}(),document.addEventListener("visibilitychange",Lc.saveWindowState),Lc.saveWindowState({type:document.hidden?"blur":"focus"}),qc.trigger("registeredGlobalEventHandlers"),!History.started&&Lc.router.history.start(),qc.settings.get("idle_presence_timeout")>0&&qc.listen.on("addClientFeatures",()=>qc.disco.own.features.add(Ec.e.NS.IDLE));const t=Lc.pluggable.plugins;if((qc.settings.get("auto_login")||qc.settings.get("keepalive")&&kc(t["converse-bosh"],"enabled"))&&await qc.user.login(null,null,!0),qc.trigger("initialized"),Lc.isTestEnv())return Lc},plugins:{add(e,t){if(t.__name__=e,void 0!==Lc.pluggable.plugins[e])throw new TypeError('Error: plugin with name "'.concat(e,'" has already been ')+"registered!");Lc.pluggable.plugins[e]=t}},env:{$build:Ec.a,$iq:Ec.b,$msg:Ec.c,$pres:Ec.d,utils:qs,Collection:Yo,CustomElement:uc,Model:Rs,Promise:Promise,Strophe:Ec.e,dayjs:Sn.a,html:Ga,log:Pn,sizzle:ur.a,sprintf:Nc.sprintf,stanza_utils:ao,u:qs}});const Kc=new CustomEvent("converse-loaded");Kc.converse=Yc,window.dispatchEvent(Kc);const{Strophe:Zc}=Yc.env;let el,tl;Zc.addNamespace("ADHOC","http://jabber.org/protocol/commands");const nl={adhoc:{async getCommands(e){let t=[];try{n=await tl.disco.items(e,Zc.NS.ADHOC),t=ur()('query[xmlns="'.concat(Zc.NS.DISCO_ITEMS,'"][node="').concat(Zc.NS.ADHOC,'"] item'),n).map(ao.getAttributes)}catch(t){null===t?Pn.error("Error: timeout while fetching ad-hoc commands for ".concat(e)):(Pn.error("Error while fetching ad-hoc commands for ".concat(e)),Pn.error(t))}var n;return t}}};Yc.plugins.add("converse-adhoc",{dependencies:["converse-disco"],initialize(){el=this._converse,tl=el.api,Object.assign(tl,nl)}});var rl=n(128),il=n.n(rl);var sl=function(e){return function(t,n,r){var i=Object(t);if(!Xe(t)){var s=vs(n,3);t=Qe(t),n=function(e){return s(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[s?t[o]:o]:void 0}}(Oo);var ol=function(e,t){return e===t||is(e,t,os(t))};
+En.a.extend(Sn.a),kc.e.addNamespace("CARBONS","urn:xmpp:carbons:2"),kc.e.addNamespace("CHATSTATES","http://jabber.org/protocol/chatstates"),kc.e.addNamespace("CSI","urn:xmpp:csi:0"),kc.e.addNamespace("DELAY","urn:xmpp:delay"),kc.e.addNamespace("FASTEN","urn:xmpp:fasten:0"),kc.e.addNamespace("FORWARD","urn:xmpp:forward:0"),kc.e.addNamespace("HINTS","urn:xmpp:hints"),kc.e.addNamespace("HTTPUPLOAD","urn:xmpp:http:upload:0"),kc.e.addNamespace("IDLE","urn:xmpp:idle:1"),kc.e.addNamespace("MAM","urn:xmpp:mam:2"),kc.e.addNamespace("MODERATE","urn:xmpp:message-moderate:0"),kc.e.addNamespace("NICK","http://jabber.org/protocol/nick"),kc.e.addNamespace("OMEMO","eu.siacs.conversations.axolotl"),kc.e.addNamespace("OUTOFBAND","jabber:x:oob"),kc.e.addNamespace("PUBSUB","http://jabber.org/protocol/pubsub"),kc.e.addNamespace("REGISTER","jabber:iq:register"),kc.e.addNamespace("RETRACT","urn:xmpp:message-retract:0"),kc.e.addNamespace("ROSTERX","http://jabber.org/protocol/rosterx"),kc.e.addNamespace("RSM","http://jabber.org/protocol/rsm"),kc.e.addNamespace("SID","urn:xmpp:sid:0"),kc.e.addNamespace("SPOILER","urn:xmpp:spoiler:0"),kc.e.addNamespace("STANZAS","urn:ietf:params:xml:ns:xmpp-stanzas"),kc.e.addNamespace("STYLING","urn:xmpp:styling:0"),kc.e.addNamespace("VCARD","vcard-temp"),kc.e.addNamespace("VCARDUPDATE","vcard-temp:x:update"),kc.e.addNamespace("XFORM","jabber:x:data");class zc extends Error{}const Fc=["converse-adhoc","converse-bookmarks","converse-bosh","converse-caps","converse-carbons","converse-chat","converse-chatboxes","converse-disco","converse-emoji","converse-headlines","converse-mam","converse-muc","converse-ping","converse-pubsub","converse-roster","converse-smacks","converse-status","converse-vcard"],Bc={allow_non_roster_messaging:!1,assets_path:"/dist",authentication:"login",auto_login:!1,auto_reconnect:!0,blacklisted_plugins:[],clear_cache_on_logout:!1,connection_options:{},credentials_url:null,discover_connection_methods:!0,geouri_regex:/https\:\/\/www.openstreetmap.org\/.*#map=[0-9]+\/([\-0-9.]+)\/([\-0-9.]+)\S*/g,geouri_replacement:"https://www.openstreetmap.org/?mlat=$1&mlon=$2#map=18/$1/$2",i18n:"en",idle_presence_timeout:300,jid:void 0,keepalive:!0,loglevel:"info",locales:["af","ar","bg","ca","cs","de","eo","es","eu","en","fi","fr","gl","he","hi","hu","id","it","ja","nb","nl","mr","oc","pl","pt","pt_BR","ro","ru","tr","uk","vi","zh_CN","zh_TW"],nickname:void 0,password:void 0,persistent_store:"localStorage",rid:void 0,root:window.document,sid:void 0,singleton:!1,strict_plugin_dependencies:!1,view_mode:"overlayed",websocket_url:void 0,whitelisted_plugins:[]},qc={};qc[kc.e.Status.ATTACHED]="ATTACHED",qc[kc.e.Status.AUTHENTICATING]="AUTHENTICATING",qc[kc.e.Status.AUTHFAIL]="AUTHFAIL",qc[kc.e.Status.CONNECTED]="CONNECTED",qc[kc.e.Status.CONNECTING]="CONNECTING",qc[kc.e.Status.CONNFAIL]="CONNFAIL",qc[kc.e.Status.DISCONNECTED]="DISCONNECTED",qc[kc.e.Status.DISCONNECTING]="DISCONNECTING",qc[kc.e.Status.ERROR]="ERROR",qc[kc.e.Status.RECONNECTING]="RECONNECTING",qc[kc.e.Status.REDIRECT]="REDIRECT";const Hc={initialize(){},__:(...e)=>Object(Lc.sprintf)(...e)},Uc={log:zn,CONNECTION_STATUS:qc,templates:{},promises:{initialized:Jo.getResolveablePromise()},STATUS_WEIGHTS:{offline:6,unavailable:5,xa:4,away:3,dnd:2,chat:1,online:1},ANONYMOUS:"anonymous",CLOSED:"closed",EXTERNAL:"external",LOGIN:"login",LOGOUT:"logout",OPENED:"opened",PREBIND:"prebind",STANZA_TIMEOUT:1e4,SUCCESS:"success",FAILURE:"failure",DEFAULT_IMAGE_TYPE:"image/svg+xml",DEFAULT_IMAGE:"PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+CiA8cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgZmlsbD0iIzU1NSIvPgogPGNpcmNsZSBjeD0iNjQiIGN5PSI0MSIgcj0iMjQiIGZpbGw9IiNmZmYiLz4KIDxwYXRoIGQ9Im0yOC41IDExMiB2LTEyIGMwLTEyIDEwLTI0IDI0LTI0IGgyMyBjMTQgMCAyNCAxMiAyNCAyNCB2MTIiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==",TIMEOUTS:{PAUSED:1e4,INACTIVE:9e4},INACTIVE:"inactive",ACTIVE:"active",COMPOSING:"composing",PAUSED:"paused",GONE:"gone",PRIVATE_CHAT_TYPE:"chatbox",CHATROOMS_TYPE:"chatroom",HEADLINES_TYPE:"headline",CONTROLBOX_TYPE:"controlbox",default_connection_options:{explicitResourceBinding:!0},router:new Ac,TimeoutError:zc,isTestEnv:()=>"montague.lit/http-bind"===Wc.bosh_service_url,__:(...e)=>Hc.__(...e),___:e=>e};let $c;Uc.VERSION_NAME="v7.0.3dev",Object.assign(Uc,_i),ur.enable(Uc,"_converse","pluggable");let Wc={};function Gc(){var e;if(!Uc.bare_jid){const e="No JID to fetch user settings for";throw zn.error(e),Error(e)}if(!(null===(e=$c)||void 0===e?void 0:e.fetched)){const e="converse.user-settings.".concat(Uc.bare_jid);$c=new qo({id:e}),$c.browserStorage=Xc(e),$c.fetched=$c.fetch({promise:!0})}return $c.fetched}const Vc=Uc.api={connection:{connected(){var e;return(null==Uc||null===(e=Uc.connection)||void 0===e?void 0:e.connected)&&!0},disconnect(){Uc.connection&&Uc.connection.disconnect()},async reconnect(){const e=Uc.connfeedback.get("connection_status");if(Vc.settings.get("authentication")===Uc.ANONYMOUS&&(await Qc(),await Kc()),e===kc.e.Status.CONNFAIL?Vc.connection.isType("websocket")&&Vc.settings.get("bosh_service_url")?(await Uc.setUserJID(Uc.bare_jid),Uc.connection._proto._doDisconnect(),Uc.connection._proto=new kc.e.Bosh(Uc.connection),Uc.connection.service=Vc.settings.get("bosh_service_url")):Vc.connection.isType("bosh")&&Vc.settings.get("websocket_url")&&(Vc.settings.get("authentication")===Uc.ANONYMOUS?await Uc.setUserJID(Vc.settings.get("jid")):await Uc.setUserJID(Uc.bare_jid),Uc.connection._proto._doDisconnect(),Uc.connection._proto=new kc.e.Websocket(Uc.connection),Uc.connection.service=Vc.settings.get("websocket_url")):e===kc.e.Status.AUTHFAIL&&Vc.settings.get("authentication")===Uc.ANONYMOUS&&await Uc.setUserJID(Vc.settings.get("jid")),!Uc.connection.reconnecting)return Uc.connection.reconnect();Uc.connection.debouncedReconnect()},isType:e=>Uc.connection.isType(e)},async trigger(e){if(!Uc._events)return;const t=Array.from(arguments),n=t.pop();if(n&&n.synchronous){const n=Uc._events[e]||[];await Promise.all(n.map(e=>e.callback.apply(e.ctx,t.splice(1))))}else Uc.trigger.apply(Uc,arguments);const r=Uc.promises[e];void 0!==r&&r.resolve()},hook(e,t,n){const r=Uc._events[e]||[];if(r.length){const e=r.reduce((e,n)=>e.then(e=>n.callback(t,e)),Promise.resolve(n));return e.catch(e=>{throw zn.error(e),e}),e}return n},user:{jid:()=>Uc.connection.jid,async login(e,t,n=!1){var r,i;if(e=e||Uc.jid,(!(null===(r=Uc.connection)||void 0===r?void 0:r.jid)||e&&!Jo.isSameDomain(Uc.connection.jid,e))&&await Uc.initConnection(),(null===(i=Vc.settings.get("connection_options"))||void 0===i?void 0:i.worker)&&await Uc.connection.restoreWorkerSession())return;e&&(e=await Uc.setUserJID(e));const o=Uc.pluggable.plugins["converse-bosh"];if(o&&o.enabled()){if(await Uc.restoreBOSHSession())return;if(Vc.settings.get("authentication")===Uc.PREBIND&&(!n||Vc.settings.get("auto_login")))return Uc.startNewPreboundBOSHSession()}t=t||Vc.settings.get("password"),async function(e,t){const{api:n}=Uc;n.settings.get("authentication")===Uc.LOGIN?e?Yc(e):Uc.api.settings.get("credentials_url")?Yc(await async function(){let e,t=0;for(;!e;){try{e=await nl(t)}catch(e){zn.error("Could not fetch login credentials"),zn.error(e)}t=2e3}return e}()):Uc.jid&&(Uc.api.settings.get("password")||Uc.connection.pass)?Yc():!Uc.isTestEnv()&&"credentials"in navigator?Yc(await async function(){try{const e=await navigator.credentials.get({password:!0});if(e&&"password"==e.type&&Jo.isValidJID(e.id))return await Uc.setUserJID(e.id),{jid:e.id,password:e.password}}catch(e){zn.error(e)}}()):!Uc.isTestEnv()&&zn.warn("attemptNonPreboundSession: Couldn't find credentials to log in with"):![Uc.ANONYMOUS,Uc.EXTERNAL].includes(Uc.api.settings.get("authentication"))||t&&!Uc.api.settings.get("auto_login")||Yc()}(e&&t?{jid:e,password:t}:null,n)},logout(){const e=Jo.getResolveablePromise(),t=()=>{Object.keys(Uc.promises).forEach(Jc),delete Uc.jid,Vc.trigger("logout"),e.resolve()};return Uc.connection.setDisconnectionCause(Uc.LOGOUT,void 0,!0),void 0!==Uc.connection?(Vc.listen.once("disconnected",()=>t()),Uc.connection.disconnect()):t(),e},settings:{getModel:async()=>(await Gc(),$c),get:async(e,t)=>(await Gc(),void 0===$c.get(e)?t:$c.get(e)),async set(e,t){if(await Gc(),N(e))return $c.save(e,{promise:!0});{const n={};return n[e]=t,$c.save(n,{promise:!0})}},async clear(){await Gc(),$c.clear()}}},settings:{extend(e){Jo.merge(Bc,e);const t=Object.keys(Bo(e,Object.keys(Bc))),n=Bo(Wc,t),r=Or(Bo(e,t),n);Jo.merge(Uc.settings,r),Jo.merge(Uc,r)},update(e){return zn.warn("The api.settings.update method has been deprecated and will be removed. Please use api.settings.extend instead."),this.extend(e)},get(e){if(Object.keys(Bc).includes(e))return Uc[e]},set(e,t){const n={};N(e)?(Or(Uc,Bo(e,Object.keys(Bc))),Or(Uc.settings,Bo(e,Object.keys(Bc)))):"string"==typeof e&&(n[e]=t,Or(Uc,Bo(n,Object.keys(Bc))),Or(Uc.settings,Bo(n,Object.keys(Bc))))}},promises:{add(e,t=!0){(e=Array.isArray(e)?e:[e]).forEach(e=>{const n=Jo.getResolveablePromise();n.replace=t,Uc.promises[e]=n})}},listen:{once:Uc.once.bind(Uc),on:Uc.on.bind(Uc),not:Uc.off.bind(Uc),stanza(e,t,n){M(t)?(n=t,t={}):t=t||{},Uc.connection.addHandler(n,t.ns,e,t.type,t.id,t.from,t)}},waitUntil(e){if(M(e))return Jo.waitUntil(e);{const t=Uc.promises[e];return void 0===t?null:t}},send:e=>Vc.connection.connected()?("string"==typeof e&&(e=Jo.toStanza(e)),"iq"===e.tagName?Vc.sendIQ(e):(Uc.connection.send(e),void Vc.trigger("send",e))):(zn.warn("Not sending stanza because we're not connected!"),void zn.warn(kc.e.serialize(e))),sendIQ(e,t=Uc.STANZA_TIMEOUT,n=!0){var r,i;let o;return e=null!==(r=null===(i=e)||void 0===i?void 0:i.nodeTree)&&void 0!==r?r:e,["get","set"].includes(e.getAttribute("type"))?(t=t||Uc.STANZA_TIMEOUT,n?(o=new Promise((n,r)=>Uc.connection.sendIQ(e,n,r,t)),o.catch(n=>{if(null===n)throw new zc("Timeout error after ".concat(t,"ms for the following IQ stanza: ").concat(kc.e.serialize(e)))})):o=new Promise(n=>Uc.connection.sendIQ(e,n,n,t))):(Uc.connection.sendIQ(e),o=Promise.resolve()),Vc.trigger("send",e),o}};function Jc(e){const t=Uc.promises[e];if(!t)throw new Error("Tried to replace non-existing promise: ".concat(e));if(t.replace){const n=Jo.getResolveablePromise();n.replace=t.replace,Uc.promises[e]=n}else zn.debug('Not replacing promise "'.concat(e,'"'))}function Xc(e,t){const n=Uc.storage[t||Uc.getDefaultStore()];return new yn(e,n)}async function Qc(){return await Uc.api.trigger("beforeTearDown",{synchronous:!0}),window.removeEventListener("click",Uc.onUserActivity),window.removeEventListener("focus",Uc.onUserActivity),window.removeEventListener("keypress",Uc.onUserActivity),window.removeEventListener("mousemove",Uc.onUserActivity),window.removeEventListener(Uc.unloadevent,Uc.onUserActivity),window.clearInterval(Uc.everySecondTrigger),Uc.api.trigger("afterTearDown"),Uc}function Yc(e){if([Uc.ANONYMOUS,Uc.EXTERNAL].includes(Uc.api.settings.get("authentication"))){if(!Uc.jid)throw new Error("Config Error: when using anonymous login you need to provide the server's domain via the 'jid' option. Either when calling converse.initialize, or when calling _converse.api.user.login.");Uc.connection.reconnecting||Uc.connection.reset(),Uc.connection.connect(Uc.jid.toLowerCase())}else if(Uc.api.settings.get("authentication")===Uc.LOGIN){var t;const n=e?e.password:(null===(t=Uc.connection)||void 0===t?void 0:t.pass)||Uc.api.settings.get("password");if(!n){if(Uc.api.settings.get("auto_login"))throw new Error("autoLogin: If you use auto_login and authentication='login' then you also need to provide a password.");return Uc.connection.setDisconnectionCause(kc.e.Status.AUTHFAIL,void 0,!0),void Uc.api.connection.disconnect()}Uc.connection.reconnecting||Uc.connection.reset(),Uc.connection.connect(Uc.jid,n)}}function Kc(){var e;return null===(e=Uc.session)||void 0===e||e.destroy(),delete Uc.session,Uc.shouldClearCache()&&Uc.api.user.settings.clear(),Uc.api.trigger("clearSession",{synchronous:!0})}async function Zc(e){var t;const n=Vc.settings.get("connection_options").worker,r=kc.e.getBareJidFromJid(e).toLowerCase(),i="converse.session-".concat(r);(null===(t=Uc.session)||void 0===t?void 0:t.get("id"))!==i?(Uc.session=new qo({id:i}),Uc.session.browserStorage=Xc(i,n?"persistent":"session"),await new Promise(e=>Uc.session.fetch({success:e,error:e})),!n&&Uc.session.get("active")&&(Uc.session.clear(),Uc.session.save({id:i})),el(e),function(){if("sessionStorage"===Vc.settings.get("persistent_store"))return;if("BrowserExtLocal"===Uc.api.settings.get("persistent_store"))return yn.localForage.defineDriver(pr.a).then(()=>yn.localForage.setDriver("webExtensionLocalStorage")),void(Uc.storage.persistent=yn.localForage);if("BrowserExtSync"===Uc.api.settings.get("persistent_store"))return yn.localForage.defineDriver(hr.a).then(()=>yn.localForage.setDriver("webExtensionSyncStorage")),void(Uc.storage.persistent=yn.localForage);const e={name:Uc.isTestEnv()?"converse-test-persistent":"converse-persistent",storeName:Uc.bare_jid};"localStorage"===Uc.api.settings.get("persistent_store")?(e.description="localStorage instance",e.driver=[yn.localForage.LOCALSTORAGE]):"IndexedDB"===Uc.api.settings.get("persistent_store")?(e.description="indexedDB instance",e.driver=[yn.localForage.INDEXEDDB]):"none"===Uc.api.settings.get("persistent_store")&&(e.description="in-memory instance",e.driver=[yn.IN_MEMORY]),Uc.storage.persistent=yn.localForage.createInstance(e)}(),Uc.api.trigger("userSessionInitialized")):el(e)}function el(e){e=Uc.session.get("jid")||e,Uc.api.settings.get("authentication")===Uc.ANONYMOUS||kc.e.getResourceFromJid(e)||(e=e.toLowerCase()+fa.generateResource()),Uc.jid=e,Uc.bare_jid=kc.e.getBareJidFromJid(e),Uc.resource=kc.e.getResourceFromJid(e),Uc.domain=kc.e.getDomainFromJid(e),Uc.session.save({jid:e,bare_jid:Uc.bare_jid,resource:Uc.resource,domain:Uc.domain,active:!0}),Uc.connection.jid=e}async function tl(){var e;await Vc.trigger("cleanup",{synchronous:!0}),Uc.router.history.stop(),document.removeEventListener("visibilitychange",Uc.saveWindowState),Vc.trigger("unregisteredGlobalEventHandlers"),null===(e=Uc.connection)||void 0===e||e.reset(),Uc.stopListening(),Uc.off(),Uc.promises.initialized.isResolved&&Vc.promises.add("initialized")}function nl(e=0){return new Promise(Rc((e,t)=>{const n=new XMLHttpRequest;n.open("GET",Vc.settings.get("credentials_url"),!0),n.setRequestHeader("Accept","application/json, text/javascript"),n.onload=()=>{if(n.status>=200&&n.status<400){const t=JSON.parse(n.responseText);Uc.setUserJID(t.jid).then(()=>{e({jid:t.jid,password:t.password})})}else t(new Error("".concat(n.status,": ").concat(n.responseText)))},n.onerror=t,n.send()},e))}Uc.isUniView=function(){return["mobile","fullscreen","embedded"].includes(Vc.settings.get("view_mode"))},Uc.getDefaultStore=function(){if(Uc.config.get("trusted")){return"sessionStorage"===Vc.settings.get("persistent_store")?"session":"persistent"}return"session"},Uc.createStore=Xc,Uc.shouldClearCache=()=>!Uc.config.get("trusted")||Vc.settings.get("clear_cache_on_logout")||Uc.isTestEnv(),Uc.initConnection=function(){const e=Uc.api;if(!e.settings.get("bosh_service_url")){if(e.settings.get("authentication")===Uc.PREBIND)throw new Error("authentication is set to 'prebind' but we don't have a BOSH connection");if(!e.settings.get("websocket_url"))throw new Error("initConnection: you must supply a value for either the bosh_service_url or websocket_url or both.")}const t=Uc.isTestEnv()?pa:fa;if(("WebSocket"in window||"MozWebSocket"in window)&&e.settings.get("websocket_url"))Uc.connection=new t(e.settings.get("websocket_url"),Object.assign(Uc.default_connection_options,e.settings.get("connection_options")));else{if(!e.settings.get("bosh_service_url"))throw new Error("initConnection: this browser does not support websockets and bosh_service_url wasn't specified.");Uc.connection=new t(e.settings.get("bosh_service_url"),Object.assign(Uc.default_connection_options,e.settings.get("connection_options"),{keepalive:e.settings.get("keepalive")}))}!function(){const e={};e[kc.e.LogLevel.DEBUG]="debug",e[kc.e.LogLevel.INFO]="info",e[kc.e.LogLevel.WARN]="warn",e[kc.e.LogLevel.ERROR]="error",e[kc.e.LogLevel.FATAL]="fatal",kc.e.log=(t,n)=>zn.log(n,e[t]),kc.e.error=e=>zn.error(e),Uc.connection.xmlInput=e=>zn.debug(e.outerHTML,"color: darkgoldenrod"),Uc.connection.xmlOutput=e=>zn.debug(e.outerHTML,"color: darkcyan")}(),e.trigger("connectionInitialized")},Uc.setUserJID=async function(e){return await Zc(e),Uc.api.trigger("setUserJID"),e},Uc.saveWindowState=function(e){let t;const n={focus:"visible",focusin:"visible",pageshow:"visible",blur:"hidden",focusout:"hidden",pagehide:"hidden"};t=(e=e||document.createEvent("Events")).type in n?n[e.type]:document.hidden?"hidden":"visible",Uc.windowState=t,Vc.trigger("windowStateChanged",{state:t})},Uc.ConnectionFeedback=qo.extend({defaults:{connection_status:kc.e.Status.DISCONNECTED,message:""},initialize(){this.on("change",()=>Vc.trigger("connfeedback",Uc.connfeedback))}});const rl=window.converse||{};Object.assign(rl,{CHAT_STATES:["active","composing","gone","inactive","paused"],keycodes:{TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESCAPE:27,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,FORWARD_SLASH:47,AT:50,META:91,META_RIGHT:93},async initialize(e){if(await tl(),"onpagehide"in window?Uc.unloadevent="pagehide":"onbeforeunload"in window?Uc.unloadevent="beforeunload":"onunload"in window&&(Uc.unloadevent="unload"),function(e){Uc.settings={},Wc=e;const t=Bo(e,Object.keys(Bc));Or(Uc.settings,Bc,t),Or(Uc,Bc,t)}(e),Uc.strict_plugin_dependencies=e.strict_plugin_dependencies,zn.setLogLevel(Vc.settings.get("loglevel")),Vc.settings.get("authentication")===Uc.ANONYMOUS&&Vc.settings.get("auto_login")&&!Vc.settings.get("jid"))throw new Error("Config Error: you need to provide the server's domain via the 'jid' option when using anonymous authentication with auto_login.");Uc.router.route(/^converse\?loglevel=(debug|info|warn|error|fatal)$/,"loglevel",e=>zn.setLogLevel(e)),Uc.connfeedback=new Uc.ConnectionFeedback,Uc.send_initial_presence=!0,await async function(){await yn.sessionStorageInitialized,Uc.storage={session:yn.localForage.createInstance({name:Uc.isTestEnv()?"converse-test-session":"converse-session",description:"sessionStorage instance",driver:["sessionStorageWrapper"]})}}(),await async function(){const e="converse.client-config";Uc.config=new qo({id:e,trusted:!0}),Uc.config.browserStorage=Xc(e,"session"),await new Promise(e=>Uc.config.fetch({success:e,error:e})),Uc.api.trigger("clientConfigInitialized")}(),await Hc.initialize(),function(){Uc.pluggable.initialized_plugins=[];const e=Fc.concat(Uc.api.settings.get("whitelisted_plugins"));Uc.api.settings.get("singleton")&&["converse-bookmarks","converse-controlbox","converse-headline","converse-register"].forEach(e=>Uc.api.settings.get("blacklisted_plugins").push(e)),Uc.pluggable.initializePlugins({_converse:Uc},e,Uc.api.settings.get("blacklisted_plugins")),Uc.api.trigger("pluginsInitialized")}(),document.addEventListener("visibilitychange",Uc.saveWindowState),Uc.saveWindowState({type:document.hidden?"blur":"focus"}),Vc.trigger("registeredGlobalEventHandlers"),!History.started&&Uc.router.history.start(),Vc.settings.get("idle_presence_timeout")>0&&Vc.listen.on("addClientFeatures",()=>Vc.disco.own.features.add(kc.e.NS.IDLE));const t=Uc.pluggable.plugins;if((Vc.settings.get("auto_login")||Vc.settings.get("keepalive")&&Pc(t["converse-bosh"],"enabled"))&&await Vc.user.login(null,null,!0),Vc.trigger("initialized"),Uc.isTestEnv())return Uc},plugins:{add(e,t){if(t.__name__=e,void 0!==Uc.pluggable.plugins[e])throw new TypeError('Error: plugin with name "'.concat(e,'" has already been ')+"registered!");Uc.pluggable.plugins[e]=t}},env:{$build:kc.a,$iq:kc.b,$msg:kc.c,$pres:kc.d,utils:Jo,Collection:ra,CustomElement:mc,Model:qo,Promise:Promise,Strophe:kc.e,dayjs:En.a,html:Za,log:zn,sizzle:mr.a,sprintf:Lc.sprintf,stanza_utils:ps,u:Jo}});const il=new CustomEvent("converse-loaded",{detail:{converse:rl}});window.dispatchEvent(il);const{Strophe:ol}=rl.env;let sl,al;ol.addNamespace("ADHOC","http://jabber.org/protocol/commands");const cl={adhoc:{async getCommands(e){let t=[];try{n=await al.disco.items(e,ol.NS.ADHOC),t=mr()('query[xmlns="'.concat(ol.NS.DISCO_ITEMS,'"][node="').concat(ol.NS.ADHOC,'"] item'),n).map(ps.getAttributes)}catch(t){null===t?zn.error("Error: timeout while fetching ad-hoc commands for ".concat(e)):(zn.error("Error while fetching ad-hoc commands for ".concat(e)),zn.error(t))}var n;return t}}};rl.plugins.add("converse-adhoc",{dependencies:["converse-disco"],initialize(){sl=this._converse,al=sl.api,Object.assign(al,cl)}});const ll=rl.env.utils;var ul=qo.extend({initialize(){this.rosterContactAdded=ll.getResolveablePromise()},async setRosterContact(e){const t=await Vc.contacts.get(e);t&&(this.contact=t,this.set("nickname",t.get("nickname")),this.rosterContactAdded.resolve())}}),dl=n(169),hl=n.n(dl);var fl=function(e){return function(t,n,r){var i=Object(t);if(!Xe(t)){var o=Eo(n,3);t=Qe(t),n=function(e){return o(i[e],e,i)}}var s=e(t,n,r);return s>-1?i[o?t[s]:s]:void 0}}(Ds);var pl=function(e,t){return e===t||uo(e,t,fo(t))};const{Strophe:gl,$msg:ml}=rl.env,vl=rl.env.utils;var _l=ul.extend({defaults(){return{bookmarked:!1,chat_state:void 0,hidden:Uc.isUniView()&&!Vc.settings.get("singleton"),message_type:"chat",nickname:void 0,num_unread:0,time_sent:new Date(0).toISOString(),time_opened:this.get("time_opened")||(new Date).getTime(),type:Uc.PRIVATE_CHAT_TYPE,url:""}},async initialize(){this.initialized=vl.getResolveablePromise(),ul.prototype.initialize.apply(this,arguments);const e=this.get("jid");e&&(this.set({box_id:"box-".concat(e)}),this.initNotifications(),this.initMessages(),this.get("type")===Uc.PRIVATE_CHAT_TYPE&&(this.presence=Uc.presences.findWhere({jid:e})||Uc.presences.create({jid:e}),await this.setRosterContact(e)),this.on("change:chat_state",this.sendChatState,this),await this.fetchMessages(),await Vc.trigger("chatBoxInitialized",this,{Synchronous:!0}),this.initialized.resolve())},getMessagesCollection:()=>new Uc.Messages,getMessagesCacheKey(){return"converse.messages-".concat(this.get("jid"),"-").concat(Uc.bare_jid)},initMessages(){this.messages=this.getMessagesCollection(),this.messages.fetched=vl.getResolveablePromise(),this.messages.fetched.then(()=>{Vc.trigger("afterMessagesFetched",this)}),this.messages.chatbox=this,this.messages.browserStorage=Uc.createStore(this.getMessagesCacheKey()),this.listenTo(this.messages,"change:upload",e=>{e.get("upload")===Uc.SUCCESS&&Vc.send(this.createMessageStanza(e))})},initNotifications(){this.notifications=new qo},afterMessagesFetched(){Vc.trigger("afterMessagesFetched",this)},fetchMessages(){if(this.messages.fetched_flag)return void zn.info("Not re-fetching messages for ".concat(this.get("jid")));this.messages.fetched_flag=!0;const e=this.messages.fetched.resolve;return this.messages.fetch({add:!0,success:()=>{this.afterMessagesFetched(),e()},error:()=>{this.afterMessagesFetched(),e()}}),this.messages.fetched},async handleErrorMessageStanza(e){const{__:t}=Uc,n=await ps.parseMessage(e,Uc);if(!await this.shouldShowErrorMessage(n))return;const r=this.getMessageReferencedByError(n);if(r){const e={error:n.error,error_condition:n.error_condition,error_text:n.error_text,error_type:n.error_type,editable:!1};n.msgid===r.get("retraction_id")?(e.retraction_id=void 0,n.error||("forbidden"===n.error_condition?e.error=t("You're not allowed to retract your message."):e.error=t("Sorry, an error occurred while trying to retract your message."))):n.error||("forbidden"===n.error_condition?e.error=t("You're not allowed to send a message."):e.error=t("Sorry, an error occurred while trying to send your message.")),r.save(e)}else this.createMessage(n)},queueMessage(e){return this.msg_chain=(this.msg_chain||this.messages.fetched).then(()=>this.onMessage(e)).catch(e=>zn.error(e)),this.msg_chain},async onMessage(e){if(e=await e,vl.isErrorObject(e))return e.stanza&&zn.error(e.stanza),zn.error(e.message);const t=this.getDuplicateMessage(e);if(t)this.updateMessage(t,e);else if(!this.handleReceipt(e)&&!this.handleChatMarker(e)&&!await this.handleRetraction(e)&&(this.setEditable(e,e.time),e.chat_state&&"them"===e.sender&&this.notifications.set("chat_state",e.chat_state),vl.shouldCreateMessage(e))){const t=this.handleCorrection(e)||await this.createMessage(e);this.notifications.set({chat_state:null}),this.handleUnreadMessage(t)}},async clearMessages(){try{await this.messages.clearStore()}catch(e){this.messages.trigger("reset"),zn.error(e)}finally{delete this.msg_chain,delete this.messages.fetched_flag,this.messages.fetched=vl.getResolveablePromise()}},async close(){try{await new Promise((e,t)=>this.destroy({success:e,error:(e,n)=>t(n)}))}catch(e){zn.error(e)}finally{Vc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages()}},announceReconnection(){Vc.trigger("chatReconnected",this)},async onReconnection(){Vc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages(),this.announceReconnection()},validate(e){if(!e.jid)return"Ignored ChatBox without JID";const t=Uc.auto_join_rooms.map(e=>N(e)?e.jid:e),n=Vc.settings.get("auto_join_private_chats").concat(t);if(Vc.settings.get("singleton")&&!n.includes(e.jid)&&!Vc.settings.get("auto_join_on_invite")){const t="".concat(e.jid," is not allowed because singleton is true and it's not being auto_joined");return zn.warn(t),t}},getDisplayName(){return this.contact?this.contact.getDisplayName():this.vcard?this.vcard.getDisplayName():this.get("jid")},async createMessageFromError(e){if(e instanceof Uc.TimeoutError){(await this.createMessage({type:"error",message:e.message,retry_event_id:e.retry_event_id})).error=e}},getOldestMessage(){for(let e=0;e<this.messages.length;e++){const t=this.messages.at(e);if(t.get("type")===this.get("message_type"))return t}},getMostRecentMessage(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages.at(e);if(t.get("type")===this.get("message_type"))return t}},getUpdatedMessageAttributes:(e,t)=>(({is_archived:e})=>({is_archived:e}))(t),updateMessage(e,t){const n=this.getUpdatedMessageAttributes(e,t);n&&e.save(n)},setChatState(e,t){return void 0!==this.chat_state_timeout&&(window.clearTimeout(this.chat_state_timeout),delete this.chat_state_timeout),e===Uc.COMPOSING?this.chat_state_timeout=window.setTimeout(this.setChatState.bind(this),Uc.TIMEOUTS.PAUSED,Uc.PAUSED):e===Uc.PAUSED&&(this.chat_state_timeout=window.setTimeout(this.setChatState.bind(this),Uc.TIMEOUTS.INACTIVE,Uc.INACTIVE)),this.set("chat_state",e,t),this},getMessageReferencedByError(e){const t=e.msgid;return t&&this.messages.models.find(e=>[e.get("msgid"),e.get("retraction_id")].includes(t))},shouldShowErrorMessage(e){if(this.getMessageReferencedByError(e)||e.body)return!0},isSameUser:(e,t)=>vl.isSameBareJID(e,t),findDanglingRetraction(e){if(!e.origin_id||!this.messages.length)return null;if(this.messages.last().get("time")>e.time){const t=Array.from(this.messages.models);return t.reverse(),t.find(({attributes:t})=>t.retracted_id===e.origin_id&&t.from===e.from&&!t.moderated_by)}},async handleRetraction(e){const t=["retracted","retracted_id","editable"];if(e.retracted){if(e.is_tombstone)return!1;const n=this.messages.findWhere({origin_id:e.retracted_id,from:e.from});return n?(n.save(Bo(e,t)),!0):(e.dangling_retraction=!0,await this.createMessage(e),!0)}{const n=this.findDanglingRetraction(e);if(n){const r=Bo(n.attributes,t),i=Object.assign({dangling_retraction:!1},e,r);return delete i.id,n.save(i),!0}}return!1},handleCorrection(e){if(!e.replace_id||!e.from)return;const t=this.messages.findWhere({msgid:e.replace_id,from:e.from});if(!t)return;const n=t.get("older_versions")||{};return e.time<t.get("time")&&t.get("edited")?(n[e.time]=e.message,t.save({older_versions:n})):(Object.keys(n).length?n[t.get("edited")]=t.get("message"):n[t.get("time")]=t.get("message"),delete(e=Object.assign(e,{older_versions:n})).id,e.time=t.get("time"),t.save(e)),t},getDuplicateMessage(e){const t=[...this.getStanzaIdQueryAttrs(e),this.getOriginIdQueryAttrs(e),this.getMessageBodyQueryAttrs(e)].filter(e=>e),n=this.messages.models;return fl(n,e=>t.reduce((t,n)=>t||pl(e.attributes,n),!1))},getOriginIdQueryAttrs:e=>e.origin_id&&{origin_id:e.origin_id,from:e.from},getStanzaIdQueryAttrs:e=>Object.keys(e).filter(e=>e.startsWith("stanza_id ")).map(t=>{const n=t.replace(/^stanza_id /,""),r={};return r["stanza_id ".concat(n)]=e[t],r}),getMessageBodyQueryAttrs(e){if(e.message&&e.msgid){const t={from:e.from,msgid:e.msgid};return e.is_encrypted||(t.message=e.message),t}},retractOwnMessage(e){this.sendRetractionMessage(e),e.save({retracted:(new Date).toISOString(),retracted_id:e.get("origin_id"),retraction_id:e.get("id"),is_ephemeral:!0,editable:!1})},sendRetractionMessage(e){const t=e.get("origin_id");if(!t)throw new Error("Can't retract message without a XEP-0359 Origin ID");const n=ml({id:vl.getUniqueId(),to:this.get("jid"),type:"chat"}).c("store",{xmlns:gl.NS.HINTS}).up().c("apply-to",{id:t,xmlns:gl.NS.FASTEN}).c("retract",{xmlns:gl.NS.RETRACT});return Uc.connection.send(n)},sendMarkerForMessage(e){if(null==e?void 0:e.get("is_markable")){const t=gl.getBareJidFromJid(e.get("from"));this.sendMarker(t,e.get("msgid"),"displayed",e.get("type"))}},sendMarker(e,t,n,r){const i=ml({from:Uc.connection.jid,id:vl.getUniqueId(),to:e,type:r||"chat"}).c(n,{xmlns:gl.NS.MARKERS,id:t});Vc.send(i)},handleChatMarker(e){if(gl.getBareJidFromJid(e.to)!==Uc.bare_jid)return!1;if(e.is_markable)return!this.contact||e.is_archived||e.is_carbon||this.sendMarker(e.from,e.msgid,"received"),!1;if(e.marker_id){const t=this.messages.findWhere({msgid:e.marker_id}),n="marker_".concat(e.marker);return t&&!t.get(n)&&t.save({field_name:(new Date).toISOString()}),!0}},sendReceiptStanza(e,t){const n=ml({from:Uc.connection.jid,id:vl.getUniqueId(),to:e,type:"chat"}).c("received",{xmlns:gl.NS.RECEIPTS,id:t}).up().c("store",{xmlns:gl.NS.HINTS}).up();Vc.send(n)},handleReceipt(e){if("them"===e.sender)if(e.is_valid_receipt_request)this.sendReceiptStanza(e.from,e.msgid);else if(e.receipt_id){const t=this.messages.findWhere({msgid:e.receipt_id});return t&&!t.get("received")&&t.save({received:(new Date).toISOString()}),!0}return!1},createMessageStanza(e){const t=ml({from:Uc.connection.jid,to:this.get("jid"),type:this.get("message_type"),id:e.get("edited")&&vl.getUniqueId()||e.get("msgid")}).c("body").t(e.get("message")).up().c(Uc.ACTIVE,{xmlns:gl.NS.CHATSTATES}).root();return"chat"===e.get("type")&&t.c("request",{xmlns:gl.NS.RECEIPTS}).root(),e.get("is_spoiler")&&(e.get("spoiler_hint")?t.c("spoiler",{xmlns:gl.NS.SPOILER},e.get("spoiler_hint")).root():t.c("spoiler",{xmlns:gl.NS.SPOILER}).root()),(e.get("references")||[]).forEach(e=>{const n={xmlns:gl.NS.REFERENCE,begin:e.begin,end:e.end,type:e.type};e.uri&&(n.uri=e.uri),t.c("reference",n).root()}),e.get("oob_url")&&t.c("x",{xmlns:gl.NS.OUTOFBAND}).c("url").t(e.get("oob_url")).root(),e.get("edited")&&t.c("replace",{xmlns:gl.NS.MESSAGE_CORRECT,id:e.get("msgid")}).root(),e.get("origin_id")&&t.c("origin-id",{xmlns:gl.NS.SID,id:e.get("origin_id")}).root(),t},getOutgoingMessageAttributes(e,t){const n=this.get("composing_spoiler"),r=vl.getUniqueId(),i=e?vl.httpToGeoUri(vl.shortnamesToUnicode(e),Uc):void 0;return{from:Uc.bare_jid,fullname:Uc.xmppstatus.get("fullname"),id:r,is_only_emojis:!!e&&vl.isOnlyEmojis(e),jid:this.get("jid"),message:i,msgid:r,nickname:this.get("nickname"),sender:"me",spoiler_hint:n?t:void 0,time:(new Date).toISOString(),type:this.get("message_type"),body:i,is_spoiler:n,origin_id:r}},setEditable(e,t){if(!e.is_headline&&!vl.isEmptyMessage(e)&&"me"===e.sender)if("all"===Vc.settings.get("allow_message_corrections"))e.editable=!(e.file||e.retracted||"oob_url"in e);else if("last"===Vc.settings.get("allow_message_corrections")&&t>this.get("time_sent")){this.set({time_sent:t});const n=this.messages.findWhere({editable:!0});n&&n.save({editable:!1}),e.editable=!(e.file||e.retracted||"oob_url"in e)}},async createMessage(e,t){return e.time=e.time||(new Date).toISOString(),await this.messages.fetched,this.messages.create(e,Object.assign({wait:!0,promise:!0},t))},async sendMessage(e,t){const n=this.getOutgoingMessageAttributes(e,t);let r=this.messages.findWhere("correcting");if(r){const e=r.get("older_versions")||{};e[r.get("time")]=r.get("message"),r.save({correcting:!1,edited:(new Date).toISOString(),message:n.message,older_versions:e,references:n.references,is_only_emojis:n.is_only_emojis,origin_id:vl.getUniqueId(),received:void 0})}else this.setEditable(n,(new Date).toISOString()),r=await this.createMessage(n);return Vc.send(this.createMessageStanza(r)),Vc.trigger("sendMessage",{chatbox:this,message:r}),r},sendChatState(){if(Vc.settings.get("send_chat_state_notifications")&&this.get("chat_state")){const e=Vc.settings.get("send_chat_state_notifications");if(Array.isArray(e)&&!e.includes(this.get("chat_state")))return;Vc.send(ml({id:vl.getUniqueId(),to:this.get("jid"),type:"chat"}).c(this.get("chat_state"),{xmlns:gl.NS.CHATSTATES}).up().c("no-store",{xmlns:gl.NS.HINTS}).up().c("no-permanent-store",{xmlns:gl.NS.HINTS}))}},async sendFiles(e){var t;const{__:n}=Uc,r=(await Vc.disco.features.get(gl.NS.HTTPUPLOAD,Uc.domain)).pop();if(!r)return void this.createMessage({message:n("Sorry, looks like file upload is not supported by your server."),type:"error",is_ephemeral:!0});const i=r.dataforms.where({FORM_TYPE:{value:gl.NS.HTTPUPLOAD,type:"hidden"}}).pop(),o=window.parseInt(null===(t=((null==i?void 0:i.attributes)||{})["max-file-size"])||void 0===t?void 0:t.value),s=null==r?void 0:r.id;s?Array.from(e).forEach(async e=>{if(!window.isNaN(o)&&window.parseInt(e.size)>o)return this.createMessage({message:n("The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.",e.name,hl()(o)),type:"error",is_ephemeral:!0});{const t=Object.assign(this.getOutgoingMessageAttributes(),{file:!0,progress:0,slot_request_url:s});this.setEditable(t,(new Date).toISOString());const n=await this.createMessage(t,{silent:!0});n.file=e,this.messages.trigger("add",n),n.getRequestSlotURL()}}):this.createMessage({message:n("Sorry, looks like file upload is not supported by your server."),type:"error",is_ephemeral:!0})},maybeShow(e){if(e){if(Uc.isUniView()){const e=e=>!e.get("hidden")&&e.get("jid")!==this.get("jid")&&"controlbox"!==e.get("id");Uc.chatboxes.filter(e).forEach(e=>vl.safeSave(e,{hidden:!0}))}vl.safeSave(this,{hidden:!1})}return Uc.isUniView()&&this.get("hidden")?void 0:this.trigger("show")},isHidden(){return Uc.isUniView()&&this.get("hidden")||this.isScrolledUp()||"hidden"===Uc.windowState},handleUnreadMessage(e){if((null==e?void 0:e.get("body"))&&vl.isNewMessage(e))if(this.isHidden()){const t={num_unread:this.get("num_unread")+1};0===this.get("num_unread")&&(t.first_unread_id=e.get("id")),this.save(t)}else this.sendMarkerForMessage(e)},clearUnreadMsgCounter(){this.get("num_unread")>0&&this.sendMarkerForMessage(this.messages.last()),vl.safeSave(this,{num_unread:0})},isScrolledUp(){return this.get("scrolled",!0)}});const bl=rl.env.utils,{Strophe:yl}=rl.env;var wl={defaults:()=>({msgid:bl.getUniqueId(),time:(new Date).toISOString(),is_ephemeral:!1}),async initialize(){this.checkValidity()&&(this.initialized=bl.getResolveablePromise(),"chat"===this.get("type")&&(ul.prototype.initialize.apply(this,arguments),this.setRosterContact(yl.getBareJidFromJid(this.get("from")))),this.get("file")&&this.on("change:put",this.uploadFile,this),this.setTimerForEphemeralMessage(),await Vc.trigger("messageInitialized",this,{Synchronous:!0}),this.initialized.resolve())},setTimerForEphemeralMessage(){const e=()=>{this.ephemeral_timer=window.setTimeout(this.safeDestroy.bind(this),1e4)};return this.isEphemeral()?(e(),!0):(this.on("change:is_ephemeral",()=>this.isEphemeral()?e():clearTimeout(this.ephemeral_timer)),!1)},checkValidity(){return 3!==Object.keys(this.attributes).length||(this.validationError="Empty message",this.safeDestroy(),!1)},mayBeRetracted(){return"me"===this.get("sender")&&["all","own"].includes(Vc.settings.get("allow_message_retraction"))},safeDestroy(){try{this.destroy()}catch(e){zn.error(e)}},isEphemeral(){return this.get("is_ephemeral")},getDisplayName(){return"groupchat"===this.get("type")?this.get("nick"):this.contact?this.contact.getDisplayName():this.vcard?this.vcard.getDisplayName():this.get("from")},getMessageText(){const{__:e}=Uc;return this.get("is_encrypted")?this.get("plaintext")||this.get("body")||e("Undecryptable OMEMO message"):this.get("message")},isMeCommand(){const e=this.getMessageText();return!!e&&e.startsWith("/me ")},sendSlotRequestStanza(){if(!this.file)return Promise.reject(new Error("file is undefined"));const e=rl.env.$iq({from:Uc.jid,to:this.get("slot_request_url"),type:"get"}).c("request",{xmlns:yl.NS.HTTPUPLOAD,filename:this.file.name,size:this.file.size,"content-type":this.file.type});return Vc.sendIQ(e)},async getRequestSlotURL(){const{__:e}=Uc;let t;try{t=await this.sendSlotRequestStanza()}catch(t){return zn.error(t),this.save({type:"error",message:e("Sorry, could not determine upload URL."),is_ephemeral:!0})}const n=t.querySelector("slot");if(!n)return this.save({type:"error",message:e("Sorry, could not determine file upload URL."),is_ephemeral:!0});this.save({get:n.querySelector("get").getAttribute("url"),put:n.querySelector("put").getAttribute("url")})},uploadFile(){const e=new XMLHttpRequest;e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&(zn.info("Status: "+e.status),200===e.status||201===e.status?this.save({upload:Uc.SUCCESS,oob_url:this.get("get"),message:this.get("get")}):e.onerror())},e.upload.addEventListener("progress",e=>{e.lengthComputable&&this.set("progress",e.loaded/e.total)},!1),e.onerror=()=>{const{__:t}=Uc;let n;n=e.responseText?t('Sorry, could not succesfully upload your file. Your server’s response: "%1$s"',e.responseText):t("Sorry, could not succesfully upload your file."),this.save({type:"error",upload:Uc.FAILURE,message:n,is_ephemeral:!0})},e.open("PUT",this.get("put"),!0),e.setRequestHeader("Content-type",this.file.type),e.send(this.file)}},Sl={chats:{async create(e,t){if("string"==typeof e){if(t&&!(null==t?void 0:t.fullname)){var n;const r=await Vc.contacts.get(e);t.fullname=null==r||null===(n=r.attributes)||void 0===n?void 0:n.fullname}const r=Vc.chats.get(e,t,!0);return r||void zn.error("Could not open chatbox for JID: "+e)}return Array.isArray(e)?Promise.all(e.forEach(async n=>{var r;const i=await Vc.contacts.get(e);return t.fullname=null==i||null===(r=i.attributes)||void 0===r?void 0:r.fullname,Vc.chats.get(n,t,!0).maybeShow()})):(zn.error("chats.create: You need to provide at least one JID"),null)},async open(e,t,n){if("string"==typeof e){const r=await Vc.chats.get(e,t,!0);return r?r.maybeShow(n):r}if(Array.isArray(e))return Promise.all(e.map(e=>Vc.chats.get(e,t,!0).then(e=>e&&e.maybeShow(n))).filter(e=>e));const r="chats.open: You need to provide at least one JID";throw zn.error(r),new Error(r)},async get(e,t={},n=!1){async function r(e){let r=await Vc.chatboxes.get(e);return!r&&n?r=await Vc.chatboxes.create(e,t,Uc.ChatBox):(r=r&&r.get("type")===Uc.PRIVATE_CHAT_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await Vc.chatboxes.get()).filter(e=>e.get("type")===Uc.PRIVATE_CHAT_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}};
 /**
  * @module converse-chat
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{$msg:al,Strophe:cl,sizzle:ll,utils:ul}=Yc.env,dl=Yc.env.utils;Yc.plugins.add("converse-chat",{dependencies:["converse-chatboxes","converse-disco"],initialize(){const{__:e}=Lc;qc.settings.extend({allow_message_corrections:"all",allow_message_retraction:"all",auto_join_private_chats:[],clear_messages_on_reconnection:!1,filter_by_resource:!1,send_chat_state_notifications:!0});const t=Rs.extend({initialize(){this.rosterContactAdded=dl.getResolveablePromise()},async setRosterContact(e){const t=await qc.contacts.get(e);t&&(this.contact=t,this.set("nickname",t.get("nickname")),this.rosterContactAdded.resolve())}});Lc.Message=t.extend({defaults:()=>({msgid:dl.getUniqueId(),time:(new Date).toISOString(),is_ephemeral:!1}),async initialize(){this.checkValidity()&&(this.initialized=dl.getResolveablePromise(),"chat"===this.get("type")&&(t.prototype.initialize.apply(this,arguments),this.setRosterContact(cl.getBareJidFromJid(this.get("from")))),this.get("file")&&this.on("change:put",this.uploadFile,this),this.setTimerForEphemeralMessage(),await qc.trigger("messageInitialized",this,{Synchronous:!0}),this.initialized.resolve())},setTimerForEphemeralMessage(){const e=()=>{this.ephemeral_timer=window.setTimeout(this.safeDestroy.bind(this),1e4)};return this.isEphemeral()?(e(),!0):(this.on("change:is_ephemeral",()=>this.isEphemeral()?e():clearTimeout(this.ephemeral_timer)),!1)},checkValidity(){return 3!==Object.keys(this.attributes).length||(this.validationError="Empty message",this.safeDestroy(),!1)},mayBeRetracted(){return"me"===this.get("sender")&&["all","own"].includes(qc.settings.get("allow_message_retraction"))},safeDestroy(){try{this.destroy()}catch(e){Pn.error(e)}},isEphemeral(){return this.get("is_ephemeral")},getDisplayName(){return"groupchat"===this.get("type")?this.get("nick"):this.contact?this.contact.getDisplayName():this.vcard?this.vcard.getDisplayName():this.get("from")},getMessageText(){return this.get("is_encrypted")?this.get("plaintext")||this.get("body")||e("Undecryptable OMEMO message"):this.get("message")},isMeCommand(){const e=this.getMessageText();return!!e&&e.startsWith("/me ")},sendSlotRequestStanza(){if(!this.file)return Promise.reject(new Error("file is undefined"));const e=Yc.env.$iq({from:Lc.jid,to:this.get("slot_request_url"),type:"get"}).c("request",{xmlns:cl.NS.HTTPUPLOAD,filename:this.file.name,size:this.file.size,"content-type":this.file.type});return qc.sendIQ(e)},async getRequestSlotURL(){let t;try{t=await this.sendSlotRequestStanza()}catch(t){return Pn.error(t),this.save({type:"error",message:e("Sorry, could not determine upload URL."),is_ephemeral:!0})}const n=t.querySelector("slot");if(!n)return this.save({type:"error",message:e("Sorry, could not determine file upload URL."),is_ephemeral:!0});this.save({get:n.querySelector("get").getAttribute("url"),put:n.querySelector("put").getAttribute("url")})},uploadFile(){const t=new XMLHttpRequest;t.onreadystatechange=()=>{t.readyState===XMLHttpRequest.DONE&&(Pn.info("Status: "+t.status),200===t.status||201===t.status?this.save({upload:Lc.SUCCESS,oob_url:this.get("get"),message:this.get("get")}):t.onerror())},t.upload.addEventListener("progress",e=>{e.lengthComputable&&this.set("progress",e.loaded/e.total)},!1),t.onerror=()=>{let n;n=t.responseText?e('Sorry, could not succesfully upload your file. Your server’s response: "%1$s"',t.responseText):e("Sorry, could not succesfully upload your file."),this.save({type:"error",upload:Lc.FAILURE,message:n,is_ephemeral:!0})},t.open("PUT",this.get("put"),!0),t.setRequestHeader("Content-type",this.file.type),t.send(this.file)}}),Lc.Messages=Yo.extend({model:Lc.Message,comparator:"time"}),Lc.ChatBox=t.extend({messagesCollection:Lc.Messages,defaults(){return{bookmarked:!1,chat_state:void 0,hidden:Lc.isUniView()&&!qc.settings.get("singleton"),message_type:"chat",nickname:void 0,num_unread:0,time_sent:new Date(0).toISOString(),time_opened:this.get("time_opened")||(new Date).getTime(),type:Lc.PRIVATE_CHAT_TYPE,url:""}},async initialize(){this.initialized=dl.getResolveablePromise(),t.prototype.initialize.apply(this,arguments);const e=this.get("jid");e&&(this.set({box_id:"box-".concat(e)}),this.initNotifications(),this.initMessages(),this.get("type")===Lc.PRIVATE_CHAT_TYPE&&(this.presence=Lc.presences.findWhere({jid:e})||Lc.presences.create({jid:e}),await this.setRosterContact(e)),this.on("change:chat_state",this.sendChatState,this),await this.fetchMessages(),await qc.trigger("chatBoxInitialized",this,{Synchronous:!0}),this.initialized.resolve())},getMessagesCacheKey(){return"converse.messages-".concat(this.get("jid"),"-").concat(Lc.bare_jid)},initMessages(){this.messages=new this.messagesCollection,this.messages.chatbox=this,this.messages.browserStorage=Lc.createStore(this.getMessagesCacheKey()),this.listenTo(this.messages,"change:upload",e=>{e.get("upload")===Lc.SUCCESS&&qc.send(this.createMessageStanza(e))})},initNotifications(){this.notifications=new Rs},afterMessagesFetched(){qc.trigger("afterMessagesFetched",this)},fetchMessages(){if(this.messages.fetched)return void Pn.info("Not re-fetching messages for ".concat(this.get("jid")));this.messages.fetched=dl.getResolveablePromise();const e=this.messages.fetched.resolve;return this.messages.fetch({add:!0,success:()=>{this.afterMessagesFetched(),e()},error:()=>{this.afterMessagesFetched(),e()}}),this.messages.fetched},async handleErrorMessageStanza(t){const n=await ao.parseMessage(t,Lc);if(!await this.shouldShowErrorMessage(n))return;const r=this.getMessageReferencedByError(n);if(r){const t={error:n.error,error_condition:n.error_condition,error_text:n.error_text,error_type:n.error_type,editable:!1};n.msgid===r.get("retraction_id")?(t.retraction_id=void 0,n.error||("forbidden"===n.error_condition?t.error=e("You're not allowed to retract your message."):t.error=e("Sorry, an error occurred while trying to retract your message."))):n.error||("forbidden"===n.error_condition?t.error=e("You're not allowed to send a message."):t.error=e("Sorry, an error occurred while trying to send your message.")),r.save(t)}else this.createMessage(n)},queueMessage(e){return this.msg_chain=this.msg_chain||this.messages.fetched,this.msg_chain=this.msg_chain.then(()=>this.onMessage(e)),this.msg_chain},async onMessage(e){if(e=await e,dl.isErrorObject(e))return e.stanza&&Pn.error(e.stanza),Pn.error(e.message);const t=this.getDuplicateMessage(e);if(t)this.updateMessage(t,e);else if(!this.handleReceipt(e)&&!this.handleChatMarker(e)&&!await this.handleRetraction(e)&&(this.setEditable(e,e.time),e.chat_state&&"them"===e.sender&&this.notifications.set("chat_state",e.chat_state),dl.shouldCreateMessage(e))){const t=this.handleCorrection(e)||await this.createMessage(e);this.notifications.set({chat_state:null}),this.handleUnreadMessage(t)}},async clearMessages(){try{await this.messages.clearStore()}catch(e){this.messages.trigger("reset"),Pn.error(e)}finally{delete this.msg_chain,delete this.messages.fetched}},async close(){try{await new Promise((e,t)=>this.destroy({success:e,error:(e,n)=>t(n)}))}catch(e){Pn.error(e)}finally{qc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages()}},announceReconnection(){qc.trigger("chatReconnected",this)},async onReconnection(){qc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages(),this.announceReconnection()},validate(e){if(!e.jid)return"Ignored ChatBox without JID";const t=Lc.auto_join_rooms.map(e=>N(e)?e.jid:e),n=qc.settings.get("auto_join_private_chats").concat(t);if(qc.settings.get("singleton")&&!n.includes(e.jid)&&!qc.settings.get("auto_join_on_invite")){const t="".concat(e.jid," is not allowed because singleton is true and it's not being auto_joined");return Pn.warn(t),t}},getDisplayName(){return this.contact?this.contact.getDisplayName():this.vcard?this.vcard.getDisplayName():this.get("jid")},async createMessageFromError(e){if(e instanceof Lc.TimeoutError){(await this.createMessage({type:"error",message:e.message,retry_event_id:e.retry_event_id})).error=e}},getOldestMessage(){for(let e=0;e<this.messages.length;e++){const t=this.messages.at(e);if(t.get("type")===this.get("message_type"))return t}},getMostRecentMessage(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages.at(e);if(t.get("type")===this.get("message_type"))return t}},getUpdatedMessageAttributes:(e,t)=>(({is_archived:e})=>({is_archived:e}))(t),updateMessage(e,t){const n=this.getUpdatedMessageAttributes(e,t);t&&e.save(n)},setChatState(e,t){return void 0!==this.chat_state_timeout&&(window.clearTimeout(this.chat_state_timeout),delete this.chat_state_timeout),e===Lc.COMPOSING?this.chat_state_timeout=window.setTimeout(this.setChatState.bind(this),Lc.TIMEOUTS.PAUSED,Lc.PAUSED):e===Lc.PAUSED&&(this.chat_state_timeout=window.setTimeout(this.setChatState.bind(this),Lc.TIMEOUTS.INACTIVE,Lc.INACTIVE)),this.set("chat_state",e,t),this},getMessageReferencedByError(e){const t=e.msgid;return t&&this.messages.models.find(e=>[e.get("msgid"),e.get("retraction_id")].includes(t))},shouldShowErrorMessage(e){if(this.getMessageReferencedByError(e)||null!==e.body)return!0},isSameUser:(e,t)=>dl.isSameBareJID(e,t),findDanglingRetraction(e){if(!e.origin_id||!this.messages.length)return null;if(this.messages.last().get("time")>e.time){const t=Array.from(this.messages.models);return t.reverse(),t.find(({attributes:t})=>t.retracted_id===e.origin_id&&t.from===e.from&&!t.moderated_by)}},async handleRetraction(e){const t=["retracted","retracted_id","editable"];if(e.retracted){if(e.is_tombstone)return!1;const n=this.messages.findWhere({origin_id:e.retracted_id,from:e.from});return n?(n.save(Ms(e,t)),!0):(e.dangling_retraction=!0,await this.createMessage(e),!0)}{const n=this.findDanglingRetraction(e);if(n){const r=Ms(n.attributes,t),i=Object.assign({dangling_retraction:!1},e,r);return delete i.id,n.save(i),!0}}return!1},handleCorrection(e){if(!e.replace_id||!e.from)return;const t=this.messages.findWhere({msgid:e.replace_id,from:e.from});if(!t)return;const n=t.get("older_versions")||{};return e.time<t.get("time")&&t.get("edited")?(n[e.time]=e.message,t.save({older_versions:n})):(n[t.get("time")]=t.get("message"),delete(e=Object.assign(e,{older_versions:n})).id,t.save(e)),t},getDuplicateMessage(e){const t=[...this.getStanzaIdQueryAttrs(e),this.getOriginIdQueryAttrs(e),this.getMessageBodyQueryAttrs(e)].filter(e=>e),n=this.messages.models;return sl(n,e=>t.reduce((t,n)=>t||ol(e.attributes,n),!1))},getOriginIdQueryAttrs:e=>e.origin_id&&{origin_id:e.origin_id,from:e.from},getStanzaIdQueryAttrs:e=>Object.keys(e).filter(e=>e.startsWith("stanza_id ")).map(t=>{const n=t.replace(/^stanza_id /,""),r={};return r["stanza_id ".concat(n)]=e[t],r}),getMessageBodyQueryAttrs(e){if(e.message&&e.msgid){const t={from:e.from,msgid:e.msgid};return e.is_encrypted||(t.message=e.message),t}},retractOwnMessage(e){this.sendRetractionMessage(e),e.save({retracted:(new Date).toISOString(),retracted_id:e.get("origin_id"),retraction_id:e.get("id"),is_ephemeral:!0,editable:!1})},sendRetractionMessage(e){const t=e.get("origin_id");if(!t)throw new Error("Can't retract message without a XEP-0359 Origin ID");const n=al({id:dl.getUniqueId(),to:this.get("jid"),type:"chat"}).c("store",{xmlns:cl.NS.HINTS}).up().c("apply-to",{id:t,xmlns:cl.NS.FASTEN}).c("retract",{xmlns:cl.NS.RETRACT});return Lc.connection.send(n)},sendMarkerForMessage(e){if(null==e?void 0:e.get("is_markable")){const t=cl.getBareJidFromJid(e.get("from"));this.sendMarker(t,e.get("msgid"),"displayed",e.get("type"))}},sendMarker(e,t,n,r){const i=al({from:Lc.connection.jid,id:dl.getUniqueId(),to:e,type:r||"chat"}).c(n,{xmlns:cl.NS.MARKERS,id:t});qc.send(i)},handleChatMarker(e){if(cl.getBareJidFromJid(e.to)!==Lc.bare_jid)return!1;if(e.is_markable)return!this.contact||e.is_archived||e.is_carbon||this.sendMarker(e.from,e.msgid,"received"),!1;if(e.marker_id){const t=this.messages.findWhere({msgid:e.marker_id}),n="marker_".concat(e.marker);return t&&!t.get(n)&&t.save({field_name:(new Date).toISOString()}),!0}},sendReceiptStanza(e,t){const n=al({from:Lc.connection.jid,id:dl.getUniqueId(),to:e,type:"chat"}).c("received",{xmlns:cl.NS.RECEIPTS,id:t}).up().c("store",{xmlns:cl.NS.HINTS}).up();qc.send(n)},handleReceipt(e){if("them"===e.sender)if(e.is_valid_receipt_request)this.sendReceiptStanza(e.from,e.msgid);else if(e.receipt_id){const t=this.messages.findWhere({msgid:e.receipt_id});return t&&!t.get("received")&&t.save({received:(new Date).toISOString()}),!0}return!1},createMessageStanza(e){const t=al({from:Lc.connection.jid,to:this.get("jid"),type:this.get("message_type"),id:e.get("edited")&&dl.getUniqueId()||e.get("msgid")}).c("body").t(e.get("message")).up().c(Lc.ACTIVE,{xmlns:cl.NS.CHATSTATES}).root();return"chat"===e.get("type")&&t.c("request",{xmlns:cl.NS.RECEIPTS}).root(),e.get("is_spoiler")&&(e.get("spoiler_hint")?t.c("spoiler",{xmlns:cl.NS.SPOILER},e.get("spoiler_hint")).root():t.c("spoiler",{xmlns:cl.NS.SPOILER}).root()),(e.get("references")||[]).forEach(e=>{const n={xmlns:cl.NS.REFERENCE,begin:e.begin,end:e.end,type:e.type};e.uri&&(n.uri=e.uri),t.c("reference",n).root()}),e.get("oob_url")&&t.c("x",{xmlns:cl.NS.OUTOFBAND}).c("url").t(e.get("oob_url")).root(),e.get("edited")&&t.c("replace",{xmlns:cl.NS.MESSAGE_CORRECT,id:e.get("msgid")}).root(),e.get("origin_id")&&t.c("origin-id",{xmlns:cl.NS.SID,id:e.get("origin_id")}).root(),t},getOutgoingMessageAttributes(e,t){const n=this.get("composing_spoiler"),r=dl.getUniqueId(),i=e?dl.httpToGeoUri(dl.shortnamesToUnicode(e),Lc):void 0;return{from:Lc.bare_jid,fullname:Lc.xmppstatus.get("fullname"),id:r,is_only_emojis:!!e&&dl.isOnlyEmojis(e),jid:this.get("jid"),message:i,msgid:r,nickname:this.get("nickname"),sender:"me",spoiler_hint:n?t:void 0,time:(new Date).toISOString(),type:this.get("message_type"),body:i,is_spoiler:n,origin_id:r}},setEditable(e,t){if(!e.is_headline&&!dl.isEmptyMessage(e)&&"me"===e.sender)if("all"===qc.settings.get("allow_message_corrections"))e.editable=!(e.file||e.retracted||"oob_url"in e);else if("last"===qc.settings.get("allow_message_corrections")&&t>this.get("time_sent")){this.set({time_sent:t});const n=this.messages.findWhere({editable:!0});n&&n.save({editable:!1}),e.editable=!(e.file||e.retracted||"oob_url"in e)}},createMessage(e,t){return this.messages.create(e,Object.assign({wait:!0,promise:!0},t)).catch(e=>Pn.error(e))},async sendMessage(e,t){const n=this.getOutgoingMessageAttributes(e,t);let r=this.messages.findWhere("correcting");if(r){const e=r.get("older_versions")||{};e[r.get("time")]=r.get("message"),r.save({correcting:!1,edited:(new Date).toISOString(),message:n.message,older_versions:e,references:n.references,is_only_emojis:n.is_only_emojis,origin_id:dl.getUniqueId(),received:void 0})}else this.setEditable(n,(new Date).toISOString()),r=await this.createMessage(n);return qc.send(this.createMessageStanza(r)),qc.trigger("sendMessage",{chatbox:this,message:r}),r},sendChatState(){if(qc.settings.get("send_chat_state_notifications")&&this.get("chat_state")){const e=qc.settings.get("send_chat_state_notifications");if(Array.isArray(e)&&!e.includes(this.get("chat_state")))return;qc.send(al({id:dl.getUniqueId(),to:this.get("jid"),type:"chat"}).c(this.get("chat_state"),{xmlns:cl.NS.CHATSTATES}).up().c("no-store",{xmlns:cl.NS.HINTS}).up().c("no-permanent-store",{xmlns:cl.NS.HINTS}))}},async sendFiles(t){var n;const r=(await qc.disco.features.get(cl.NS.HTTPUPLOAD,Lc.domain)).pop();if(!r)return void this.createMessage({message:e("Sorry, looks like file upload is not supported by your server."),type:"error",is_ephemeral:!0});const i=r.dataforms.where({FORM_TYPE:{value:cl.NS.HTTPUPLOAD,type:"hidden"}}).pop(),s=window.parseInt(null===(n=((null==i?void 0:i.attributes)||{})["max-file-size"])||void 0===n?void 0:n.value),o=null==r?void 0:r.id;o?Array.from(t).forEach(async t=>{if(!window.isNaN(s)&&window.parseInt(t.size)>s)return this.createMessage({message:e("The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.",t.name,il()(s)),type:"error",is_ephemeral:!0});{const e=Object.assign(this.getOutgoingMessageAttributes(),{file:!0,progress:0,slot_request_url:o});this.setEditable(e,(new Date).toISOString());const n=await this.createMessage(e,{silent:!0});n.file=t,this.messages.trigger("add",n),n.getRequestSlotURL()}}):this.createMessage({message:e("Sorry, looks like file upload is not supported by your server."),type:"error",is_ephemeral:!0})},maybeShow(e){return e&&dl.safeSave(this,{hidden:!1}),Lc.isUniView()&&this.get("hidden")?void 0:this.trigger("show")},isHidden(){return Lc.isUniView()&&this.get("hidden")||this.isScrolledUp()||"hidden"===Lc.windowState},handleUnreadMessage(e){if((null==e?void 0:e.get("body"))&&ul.isNewMessage(e))if(this.isHidden()){const t={num_unread:this.get("num_unread")+1};0===this.get("num_unread")&&(t.first_unread_id=e.get("id")),this.save(t),Lc.incrementMsgCounter()}else this.sendMarkerForMessage(e)},clearUnreadMsgCounter(){this.get("num_unread")>0&&this.sendMarkerForMessage(this.messages.last()),dl.safeSave(this,{num_unread:0})},isScrolledUp(){return this.get("scrolled",!0)}}),Lc.handleMessageStanza=async function(e){if(ao.isServerMessage(e)){const t=e.getAttribute("from");return Pn.info("handleMessageStanza: Ignoring incoming server message from JID: ".concat(t))}const t=await ao.parseMessage(e,Lc);if(dl.isErrorObject(t))return t.stanza&&Pn.error(t.stanza),Pn.error(t.message);const n=!!ll('body, encrypted[xmlns="'.concat(cl.NS.OMEMO,'"]'),e).length,r=await qc.chats.get(t.contact_jid,{nickname:t.nick},n);await(null==r?void 0:r.queueMessage(t));const i={stanza:e,attrs:t,chatbox:r};qc.trigger("message",i)},Lc.router.route("converse/chat?jid=:jid",(function(e){if(!ul.isValidJID(e))return Pn.warn('Invalid JID "'.concat(e,'" provided in URL fragment'));qc.chats.open(e)})),qc.listen.on("chatBoxesFetched",(function(){qc.settings.get("auto_join_private_chats").forEach(e=>{Lc.chatboxes.where({jid:e}).length||("string"==typeof e?qc.chats.open(e):Pn.error('Invalid jid criteria specified for "auto_join_private_chats"'))}),qc.trigger("privateChatsAutoJoined")})),qc.listen.on("presencesInitialized",(function(){Lc.connection.addHandler(e=>ll('message > result[xmlns="'.concat(cl.NS.MAM,'"]'),e).pop()?(Pn.warn('Received a MAM message with type "chat".'),!0):(Lc.handleMessageStanza(e),!0),null,"message","chat"),Lc.connection.addHandler(e=>(null!==e.getAttribute("type")||Lc.handleMessageStanza(e),!0),cl.NS.RECEIPTS,"message"),Lc.connection.addHandler(e=>(async function(e){const t=cl.getBareJidFromJid(e.getAttribute("from"));if(ul.isSameBareJID(t,Lc.bare_jid))return;const n=await qc.chatboxes.get(t);null==n||n.handleErrorMessageStanza(e)}(e),!0),null,"message","error")})),qc.listen.on("clearSession",()=>{if(Lc.shouldClearCache())return Promise.all(Lc.chatboxes.map(e=>e.messages&&e.messages.clearStore({silent:!0})))}),Object.assign(qc,{chats:{async create(e,t){if("string"==typeof e){if(t&&!(null==t?void 0:t.fullname)){var n;const r=await qc.contacts.get(e);t.fullname=null==r||null===(n=r.attributes)||void 0===n?void 0:n.fullname}const r=qc.chats.get(e,t,!0);return r||void Pn.error("Could not open chatbox for JID: "+e)}return Array.isArray(e)?Promise.all(e.forEach(async n=>{var r;const i=await qc.contacts.get(e);return t.fullname=null==i||null===(r=i.attributes)||void 0===r?void 0:r.fullname,qc.chats.get(n,t,!0).maybeShow()})):(Pn.error("chats.create: You need to provide at least one JID"),null)},async open(e,t,n){if("string"==typeof e){const r=await qc.chats.get(e,t,!0);return r?r.maybeShow(n):r}if(Array.isArray(e))return Promise.all(e.map(e=>qc.chats.get(e,t,!0).then(e=>e&&e.maybeShow(n))).filter(e=>e));const r="chats.open: You need to provide at least one JID";throw Pn.error(r),new Error(r)},async get(e,t={},n=!1){async function r(e){let r=await qc.chatboxes.get(e);return!r&&n?r=await qc.chatboxes.create(e,t,Lc.ChatBox):(r=r&&r.get("type")===Lc.PRIVATE_CHAT_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await qc.chatboxes.get()).filter(e=>e.get("type")===Lc.PRIVATE_CHAT_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}})}});
+ */
+const{Strophe:xl,sizzle:El,utils:Al}=rl.env,Cl=rl.env.utils;rl.plugins.add("converse-chat",{dependencies:["converse-chatboxes","converse-disco"],initialize(){Object.assign(Vc,Sl),Vc.settings.extend({allow_message_corrections:"all",allow_message_retraction:"all",allow_message_styling:!0,auto_join_private_chats:[],clear_messages_on_reconnection:!1,filter_by_resource:!1,send_chat_state_notifications:!0}),Uc.Message=ul.extend(wl),Uc.Messages=ra.extend({model:Uc.Message,comparator:"time"}),Uc.ChatBox=_l,Uc.handleMessageStanza=async function(e){if(ps.isServerMessage(e)){const t=e.getAttribute("from");return zn.info("handleMessageStanza: Ignoring incoming server message from JID: ".concat(t))}const t=await ps.parseMessage(e,Uc);if(Cl.isErrorObject(t))return t.stanza&&zn.error(t.stanza),zn.error(t.message);const n=!!El('body, encrypted[xmlns="'.concat(xl.NS.OMEMO,'"]'),e).length,r=await Vc.chats.get(t.contact_jid,{nickname:t.nick},n);await(null==r?void 0:r.queueMessage(t));const i={stanza:e,attrs:t,chatbox:r};Vc.trigger("message",i)},Uc.router.route("converse/chat?jid=:jid",(function(e){if(!Al.isValidJID(e))return zn.warn('Invalid JID "'.concat(e,'" provided in URL fragment'));Vc.chats.open(e)})),Vc.listen.on("chatBoxesFetched",(function(){Vc.settings.get("auto_join_private_chats").forEach(e=>{Uc.chatboxes.where({jid:e}).length||("string"==typeof e?Vc.chats.open(e):zn.error('Invalid jid criteria specified for "auto_join_private_chats"'))}),Vc.trigger("privateChatsAutoJoined")})),Vc.listen.on("presencesInitialized",(function(){Uc.connection.addHandler(e=>El('message > result[xmlns="'.concat(xl.NS.MAM,'"]'),e).pop()?(zn.warn('Received a MAM message with type "chat".'),!0):(Uc.handleMessageStanza(e),!0),null,"message","chat"),Uc.connection.addHandler(e=>(null!==e.getAttribute("type")||Uc.handleMessageStanza(e),!0),xl.NS.RECEIPTS,"message"),Uc.connection.addHandler(e=>(async function(e){const t=xl.getBareJidFromJid(e.getAttribute("from"));if(Al.isSameBareJID(t,Uc.bare_jid))return;const n=await Vc.chatboxes.get(t);null==n||n.handleErrorMessageStanza(e)}(e),!0),null,"message","error")})),Vc.listen.on("clearSession",async()=>{if(Uc.shouldClearCache()){await Promise.all(Uc.chatboxes.map(e=>e.messages&&e.messages.clearStore({silent:!0})));const e=e=>e.get("type")!==Uc.CONTROLBOX_TYPE;Uc.chatboxes.clearStore({silent:!0},e)}})}});
 /**
  * @module converse-disco
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description Converse plugin which add support for XEP-0030: Service Discovery
  */
-const{Strophe:hl,$iq:fl,utils:pl}=Yc.env;Yc.plugins.add("converse-disco",{initialize(){function e(){if(!Lc.stream_features){const e=hl.getBareJidFromJid(Lc.jid),t="converse.stream-features-".concat(e);qc.promises.add("streamFeaturesAdded"),Lc.stream_features=new Yo,Lc.stream_features.browserStorage=Lc.createStore(t,"session")}}function t(){qc.trigger("streamFeaturesAdded")}qc.promises.add("discoInitialized"),qc.promises.add("streamFeaturesAdded"),Lc.DiscoEntity=Rs.extend({idAttribute:"jid",initialize(e,t){this.waitUntilFeaturesDiscovered=pl.getResolveablePromise(),this.dataforms=new Yo;let n="converse.dataforms-".concat(this.get("jid"));this.dataforms.browserStorage=Lc.createStore(n,"session"),this.features=new Yo,n="converse.features-".concat(this.get("jid")),this.features.browserStorage=Lc.createStore(n,"session"),this.listenTo(this.features,"add",this.onFeatureAdded),this.fields=new Yo,n="converse.fields-".concat(this.get("jid")),this.fields.browserStorage=Lc.createStore(n,"session"),this.listenTo(this.fields,"add",this.onFieldAdded),this.identities=new Yo,n="converse.identities-".concat(this.get("jid")),this.identities.browserStorage=Lc.createStore(n,"session"),this.fetchFeatures(t),this.items=new Lc.DiscoEntities,n="converse.disco-items-".concat(this.get("jid")),this.items.browserStorage=Lc.createStore(n,"session"),this.items.fetch()},async getIdentity(e,t){return await this.waitUntilFeaturesDiscovered,this.identities.findWhere({category:e,type:t})},async hasFeature(e){if(await this.waitUntilFeaturesDiscovered,this.features.findWhere({var:e}))return this},onFeatureAdded(e){e.entity=this,qc.trigger("serviceDiscovered",e)},onFieldAdded(e){e.entity=this,qc.trigger("discoExtensionFieldDiscovered",e)},async fetchFeatures(e){if(e.ignore_cache)this.queryInfo();else{const e=this.features.browserStorage.name,t=await this.features.browserStorage.store.getItem(e);t&&0===t.length||null===t?this.queryInfo():(this.features.fetch({add:!0,success:()=>{this.waitUntilFeaturesDiscovered.resolve(this),this.trigger("featuresDiscovered")}}),this.identities.fetch({add:!0}))}},async queryInfo(){let e;try{e=await qc.disco.info(this.get("jid"),null)}catch(e){return null===e?Pn.error("Timeout for disco#info query for ".concat(this.get("jid"))):Pn.error(e),void this.waitUntilFeaturesDiscovered.resolve(this)}this.onInfo(e)},onDiscoItems(e){ur()('query[xmlns="'.concat(hl.NS.DISCO_ITEMS,'"] item'),e).forEach(e=>{if(e.getAttribute("node"))return;const t=e.getAttribute("jid");if(void 0===this.items.get(t)){const e=Lc.disco_entities.get(t);e?this.items.add(e):this.items.create({jid:t})}})},async queryForItems(){if(0===this.identities.where({category:"server"}).length)return;const e=await qc.disco.items(this.get("jid"));this.onDiscoItems(e)},onInfo(e){Array.from(e.querySelectorAll("identity")).forEach(e=>{this.identities.create({category:e.getAttribute("category"),type:e.getAttribute("type"),name:e.getAttribute("name")})}),ur()('x[type="result"][xmlns="'.concat(hl.NS.XFORM,'"]'),e).forEach(e=>{const t={};ur()("field",e).forEach(e=>{var n;t[e.getAttribute("var")]={value:null===(n=e.querySelector("value"))||void 0===n?void 0:n.textContent,type:e.getAttribute("type")}}),this.dataforms.create(t)}),e.querySelector('feature[var="'.concat(hl.NS.DISCO_ITEMS,'"]'))&&this.queryForItems(),Array.from(e.querySelectorAll("feature")).forEach(t=>{this.features.create({var:t.getAttribute("var"),from:e.getAttribute("from")})}),ur()('x[type="result"][xmlns="jabber:x:data"] field',e).forEach(t=>{var n;this.fields.create({var:t.getAttribute("var"),value:null===(n=t.querySelector("value"))||void 0===n?void 0:n.textContent,from:e.getAttribute("from")})}),this.waitUntilFeaturesDiscovered.resolve(this),this.trigger("featuresDiscovered")}}),Lc.DiscoEntities=Yo.extend({model:Lc.DiscoEntity,fetchEntities(){return new Promise((e,t)=>{this.fetch({add:!0,success:e,error(e,n){Pn.error(n),t(new Error("Could not fetch disco entities"))}})})}});const n=this;function r(e){const t=e.getElementsByTagName("query")[0].getAttribute("node"),r={xmlns:hl.NS.DISCO_INFO};t&&(r.node=t);const i=fl({type:"result",id:e.getAttribute("id")}),s=e.getAttribute("from");return null!==s&&i.attrs({to:s}),i.c("query",r),n._identities.forEach(e=>{const t={category:e.category,type:e.type};e.name&&(t.name=e.name),e.lang&&(t["xml:lang"]=e.lang),i.c("identity",t).up()}),n._features.forEach(e=>i.c("feature",{var:e}).up()),qc.send(i.tree()),!0}async function i(){qc.disco.own.identities.add("client","web","Converse"),qc.disco.own.features.add(hl.NS.CHATSTATES),qc.disco.own.features.add(hl.NS.DISCO_INFO),qc.disco.own.features.add(hl.NS.ROSTERX),qc.settings.get("message_carbons")&&qc.disco.own.features.add(hl.NS.CARBONS),qc.trigger("addClientFeatures"),Lc.connection.addHandler(r,hl.NS.DISCO_INFO,"iq","get",null,null),Lc.disco_entities=new Lc.DiscoEntities;const e="converse.disco-entities-".concat(Lc.bare_jid);Lc.disco_entities.browserStorage=Lc.createStore(e,"session");const t=await Lc.disco_entities.fetchEntities();0!==t.length&&t.get(Lc.domain)||Lc.disco_entities.create({jid:Lc.domain}),qc.trigger("discoInitialized")}n._identities=[],n._features=[],qc.listen.on("userSessionInitialized",async()=>{e(),Lc.connfeedback.get("connection_status")===hl.Status.ATTACHED&&(await new Promise((e,t)=>Lc.stream_features.fetch({success:e,error:t})),t())}),qc.listen.on("beforeResourceBinding",(function(){e(),Array.from(Lc.connection.features.childNodes).forEach(e=>{Lc.stream_features.create({name:e.nodeName,xmlns:e.getAttribute("xmlns")})}),t()})),qc.listen.on("reconnected",i),qc.listen.on("connected",i),qc.listen.on("beforeTearDown",async()=>{qc.promises.add("streamFeaturesAdded"),Lc.stream_features&&(await Lc.stream_features.clearStore(),delete Lc.stream_features)}),qc.listen.on("clearSession",()=>{Lc.shouldClearCache()&&Lc.disco_entities&&(Array.from(Lc.disco_entities.models).forEach(e=>e.features.clearStore()),Array.from(Lc.disco_entities.models).forEach(e=>e.identities.clearStore()),Array.from(Lc.disco_entities.models).forEach(e=>e.dataforms.clearStore()),Array.from(Lc.disco_entities.models).forEach(e=>e.fields.clearStore()),Lc.disco_entities.clearStore(),delete Lc.disco_entities)}),Object.assign(qc,{disco:{stream:{async getFeature(e,t){if(await qc.waitUntil("streamFeaturesAdded"),!e||!t)throw new Error("name and xmlns need to be provided when calling disco.stream.getFeature");if(void 0!==Lc.stream_features||qc.connection.connected())return Lc.stream_features.findWhere({name:e,xmlns:t});{const n="Tried to get feature ".concat(e," ").concat(t," but _converse.stream_features has been torn down");Pn.warn(n)}}},own:{identities:{add(e,t,r,i){for(var s=0;s<n._identities.length;s++)if(n._identities[s].category==e&&n._identities[s].type==t&&n._identities[s].name==r&&n._identities[s].lang==i)return!1;n._identities.push({category:e,type:t,name:r,lang:i})},clear(){n._identities=[]},get:()=>n._identities},features:{add(e){for(var t=0;t<n._features.length;t++)if(n._features[t]==e)return!1;n._features.push(e)},clear(){n._features=[]},get:()=>n._features}},info(e,t){const n={xmlns:hl.NS.DISCO_INFO};t&&(n.node=t);const r=fl({from:Lc.connection.jid,to:e,type:"get"}).c("query",n);return qc.sendIQ(r)},items(e,t){const n={xmlns:hl.NS.DISCO_ITEMS};return t&&(n.node=t),qc.sendIQ(fl({from:Lc.connection.jid,to:e,type:"get"}).c("query",n))},entities:{async get(e,t=!1){if(await qc.waitUntil("discoInitialized"),!e)return Lc.disco_entities;if(void 0===Lc.disco_entities&&!qc.connection.connected()){const t="Tried to look up entity ".concat(e," but _converse.disco_entities has been torn down");return void Pn.warn(t)}const n=Lc.disco_entities.get(e);return n||!t?n:qc.disco.entities.create(e)},create:(e,t)=>Lc.disco_entities.create({jid:e},t)},features:{async get(e,t){if(!t)throw new TypeError("You need to provide an entity JID");await qc.waitUntil("discoInitialized");let n=await qc.disco.entities.get(t,!0);if(void 0===Lc.disco_entities&&!qc.connection.connected()){const n="Tried to get feature ".concat(e," for ").concat(t," but _converse.disco_entities has been torn down");return void Pn.warn(n)}n=await n.waitUntilFeaturesDiscovered;const r=[...n.items.map(t=>t.hasFeature(e)),n.hasFeature(e)];return(await Promise.all(r)).filter(N)}},supports:async(e,t)=>(await qc.disco.features.get(e,t)).length>0,async refresh(e){if(!e)throw new TypeError("api.disco.refresh: You need to provide an entity JID");await qc.waitUntil("discoInitialized");let t=await qc.disco.entities.get(e);return t?(t.features.reset(),t.fields.reset(),t.identities.reset(),t.waitUntilFeaturesDiscovered.isPending||(t.waitUntilFeaturesDiscovered=pl.getResolveablePromise()),t.queryInfo()):t=await qc.disco.entities.create(e,{ignore_cache:!0}),t.waitUntilFeaturesDiscovered},refreshFeatures:e=>qc.refresh(e),async getFeatures(e){if(!e)throw new TypeError("api.disco.getFeatures: You need to provide an entity JID");await qc.waitUntil("discoInitialized");let t=await qc.disco.entities.get(e,!0);return t=await t.waitUntilFeaturesDiscovered,t.features},async getFields(e){if(!e)throw new TypeError("api.disco.getFields: You need to provide an entity JID");await qc.waitUntil("discoInitialized");let t=await qc.disco.entities.get(e,!0);return t=await t.waitUntilFeaturesDiscovered,t.fields},async getIdentity(e,t,n){const r=await qc.disco.entities.get(n,!0);if(void 0!==r||qc.connection.connected())return r.getIdentity(e,t);{const t="Tried to look up category ".concat(e," for ").concat(n," but _converse.disco_entities has been torn down");Pn.warn(t)}}}})}});const gl=new RegExp("<object[^>]*>.*?</object>|<span[^>]*>.*?</span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|((\\s|^)(\\*\\\\0\\/\\*|\\*\\\\O\\/\\*|\\-___\\-|\\:'\\-\\)|'\\:\\-\\)|'\\:\\-D|\\>\\:\\-\\)|>\\:\\-\\)|'\\:\\-\\(|\\>\\:\\-\\(|>\\:\\-\\(|\\:'\\-\\(|O\\:\\-\\)|0\\:\\-3|0\\:\\-\\)|0;\\^\\)|O;\\-\\)|0;\\-\\)|O\\:\\-3|\\-__\\-|\\:\\-Þ|\\:\\-Þ|\\<\\/3|<\\/3|\\:'\\)|\\:\\-D|'\\:\\)|'\\=\\)|'\\:D|'\\=D|\\>\\:\\)|>\\:\\)|\\>;\\)|>;\\)|\\>\\=\\)|>\\=\\)|;\\-\\)|\\*\\-\\)|;\\-\\]|;\\^\\)|'\\:\\(|'\\=\\(|\\:\\-\\*|\\:\\^\\*|\\>\\:P|>\\:P|X\\-P|\\>\\:\\[|>\\:\\[|\\:\\-\\(|\\:\\-\\[|\\>\\:\\(|>\\:\\(|\\:'\\(|;\\-\\(|\\>\\.\\<|>\\.<|#\\-\\)|%\\-\\)|X\\-\\)|\\\\0\\/|\\\\O\\/|0\\:3|0\\:\\)|O\\:\\)|O\\=\\)|O\\:3|B\\-\\)|8\\-\\)|B\\-D|8\\-D|\\-_\\-|\\>\\:\\\\|>\\:\\\\|\\>\\:\\/|>\\:\\/|\\:\\-\\/|\\:\\-\\.|\\:\\-P|\\:Þ|\\:Þ|\\:\\-b|\\:\\-O|O_O|\\>\\:O|>\\:O|\\:\\-X|\\:\\-#|\\:\\-\\)|\\(y\\)|\\<3|<3|\\:D|\\=D|;\\)|\\*\\)|;\\]|;D|\\:\\*|\\=\\*|\\:\\(|\\:\\[|\\=\\(|\\:@|;\\(|D\\:|\\:\\$|\\=\\$|#\\)|%\\)|X\\)|B\\)|8\\)|\\:\\/|\\:\\\\|\\=\\/|\\=\\\\|\\:L|\\=L|\\:P|\\=P|\\:b|\\:O|\\:X|\\:#|\\=X|\\=#|\\:\\)|\\=\\]|\\=\\)|\\:\\])(?=\\s|$|[!,.?]))","gi"),ml=/(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;function vl(){const e=yl(['<img class="emoji"\n            draggable="false"\n            title="','"\n            alt="','"\n            src="','">']);return vl=function(){return e},e}function _l(){const e=yl(['<img class="emoji"\n                    draggable="false"\n                    alt="','"\n                    src="',"/72x72/",'.png"/>']);return _l=function(){return e},e}function bl(){const e=yl(['<span title="','">',"</span>"]);return bl=function(){return e},e}function yl(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
+const{Strophe:jl,$iq:Tl,utils:Ol}=rl.env;rl.plugins.add("converse-disco",{initialize(){function e(){if(!Uc.stream_features){const e=jl.getBareJidFromJid(Uc.jid),t="converse.stream-features-".concat(e);Vc.promises.add("streamFeaturesAdded"),Uc.stream_features=new ra,Uc.stream_features.browserStorage=Uc.createStore(t,"session")}}function t(){Vc.trigger("streamFeaturesAdded")}Vc.promises.add("discoInitialized"),Vc.promises.add("streamFeaturesAdded"),Uc.DiscoEntity=qo.extend({idAttribute:"jid",initialize(e,t){this.waitUntilFeaturesDiscovered=Ol.getResolveablePromise(),this.dataforms=new ra;let n="converse.dataforms-".concat(this.get("jid"));this.dataforms.browserStorage=Uc.createStore(n,"session"),this.features=new ra,n="converse.features-".concat(this.get("jid")),this.features.browserStorage=Uc.createStore(n,"session"),this.listenTo(this.features,"add",this.onFeatureAdded),this.fields=new ra,n="converse.fields-".concat(this.get("jid")),this.fields.browserStorage=Uc.createStore(n,"session"),this.listenTo(this.fields,"add",this.onFieldAdded),this.identities=new ra,n="converse.identities-".concat(this.get("jid")),this.identities.browserStorage=Uc.createStore(n,"session"),this.fetchFeatures(t),this.items=new Uc.DiscoEntities,n="converse.disco-items-".concat(this.get("jid")),this.items.browserStorage=Uc.createStore(n,"session"),this.items.fetch()},async getIdentity(e,t){return await this.waitUntilFeaturesDiscovered,this.identities.findWhere({category:e,type:t})},async hasFeature(e){if(await this.waitUntilFeaturesDiscovered,this.features.findWhere({var:e}))return this},onFeatureAdded(e){e.entity=this,Vc.trigger("serviceDiscovered",e)},onFieldAdded(e){e.entity=this,Vc.trigger("discoExtensionFieldDiscovered",e)},async fetchFeatures(e){if(e.ignore_cache)this.queryInfo();else{const e=this.features.browserStorage.name,t=await this.features.browserStorage.store.getItem(e);t&&0===t.length||null===t?this.queryInfo():(this.features.fetch({add:!0,success:()=>{this.waitUntilFeaturesDiscovered.resolve(this),this.trigger("featuresDiscovered")}}),this.identities.fetch({add:!0}))}},async queryInfo(){let e;try{e=await Vc.disco.info(this.get("jid"),null)}catch(e){return null===e?zn.error("Timeout for disco#info query for ".concat(this.get("jid"))):zn.error(e),void this.waitUntilFeaturesDiscovered.resolve(this)}this.onInfo(e)},onDiscoItems(e){mr()('query[xmlns="'.concat(jl.NS.DISCO_ITEMS,'"] item'),e).forEach(e=>{if(e.getAttribute("node"))return;const t=e.getAttribute("jid");if(void 0===this.items.get(t)){const e=Uc.disco_entities.get(t);e?this.items.add(e):this.items.create({jid:t})}})},async queryForItems(){if(0===this.identities.where({category:"server"}).length)return;const e=await Vc.disco.items(this.get("jid"));this.onDiscoItems(e)},onInfo(e){Array.from(e.querySelectorAll("identity")).forEach(e=>{this.identities.create({category:e.getAttribute("category"),type:e.getAttribute("type"),name:e.getAttribute("name")})}),mr()('x[type="result"][xmlns="'.concat(jl.NS.XFORM,'"]'),e).forEach(e=>{const t={};mr()("field",e).forEach(e=>{var n;t[e.getAttribute("var")]={value:null===(n=e.querySelector("value"))||void 0===n?void 0:n.textContent,type:e.getAttribute("type")}}),this.dataforms.create(t)}),e.querySelector('feature[var="'.concat(jl.NS.DISCO_ITEMS,'"]'))&&this.queryForItems(),Array.from(e.querySelectorAll("feature")).forEach(t=>{this.features.create({var:t.getAttribute("var"),from:e.getAttribute("from")})}),mr()('x[type="result"][xmlns="jabber:x:data"] field',e).forEach(t=>{var n;this.fields.create({var:t.getAttribute("var"),value:null===(n=t.querySelector("value"))||void 0===n?void 0:n.textContent,from:e.getAttribute("from")})}),this.waitUntilFeaturesDiscovered.resolve(this),this.trigger("featuresDiscovered")}}),Uc.DiscoEntities=ra.extend({model:Uc.DiscoEntity,fetchEntities(){return new Promise((e,t)=>{this.fetch({add:!0,success:e,error(e,n){zn.error(n),t(new Error("Could not fetch disco entities"))}})})}});const n=this;function r(e){const t=e.getElementsByTagName("query")[0].getAttribute("node"),r={xmlns:jl.NS.DISCO_INFO};t&&(r.node=t);const i=Tl({type:"result",id:e.getAttribute("id")}),o=e.getAttribute("from");return null!==o&&i.attrs({to:o}),i.c("query",r),n._identities.forEach(e=>{const t={category:e.category,type:e.type};e.name&&(t.name=e.name),e.lang&&(t["xml:lang"]=e.lang),i.c("identity",t).up()}),n._features.forEach(e=>i.c("feature",{var:e}).up()),Vc.send(i.tree()),!0}async function i(){Vc.disco.own.identities.add("client","web","Converse"),Vc.disco.own.features.add(jl.NS.CHATSTATES),Vc.disco.own.features.add(jl.NS.DISCO_INFO),Vc.disco.own.features.add(jl.NS.ROSTERX),Vc.settings.get("message_carbons")&&Vc.disco.own.features.add(jl.NS.CARBONS),Vc.trigger("addClientFeatures"),Uc.connection.addHandler(r,jl.NS.DISCO_INFO,"iq","get",null,null),Uc.disco_entities=new Uc.DiscoEntities;const e="converse.disco-entities-".concat(Uc.bare_jid);Uc.disco_entities.browserStorage=Uc.createStore(e,"session");const t=await Uc.disco_entities.fetchEntities();0!==t.length&&t.get(Uc.domain)||Uc.disco_entities.create({jid:Uc.domain}),Vc.trigger("discoInitialized")}n._identities=[],n._features=[],Vc.listen.on("userSessionInitialized",async()=>{e(),Uc.connfeedback.get("connection_status")===jl.Status.ATTACHED&&(await new Promise((e,t)=>Uc.stream_features.fetch({success:e,error:t})),t())}),Vc.listen.on("beforeResourceBinding",(function(){e(),Array.from(Uc.connection.features.childNodes).forEach(e=>{Uc.stream_features.create({name:e.nodeName,xmlns:e.getAttribute("xmlns")})}),t()})),Vc.listen.on("reconnected",i),Vc.listen.on("connected",i),Vc.listen.on("beforeTearDown",async()=>{Vc.promises.add("streamFeaturesAdded"),Uc.stream_features&&(await Uc.stream_features.clearStore(),delete Uc.stream_features)}),Vc.listen.on("clearSession",()=>{Uc.shouldClearCache()&&Uc.disco_entities&&(Array.from(Uc.disco_entities.models).forEach(e=>e.features.clearStore()),Array.from(Uc.disco_entities.models).forEach(e=>e.identities.clearStore()),Array.from(Uc.disco_entities.models).forEach(e=>e.dataforms.clearStore()),Array.from(Uc.disco_entities.models).forEach(e=>e.fields.clearStore()),Uc.disco_entities.clearStore(),delete Uc.disco_entities)}),Object.assign(Vc,{disco:{stream:{async getFeature(e,t){if(await Vc.waitUntil("streamFeaturesAdded"),!e||!t)throw new Error("name and xmlns need to be provided when calling disco.stream.getFeature");if(void 0!==Uc.stream_features||Vc.connection.connected())return Uc.stream_features.findWhere({name:e,xmlns:t});{const n="Tried to get feature ".concat(e," ").concat(t," but _converse.stream_features has been torn down");zn.warn(n)}}},own:{identities:{add(e,t,r,i){for(var o=0;o<n._identities.length;o++)if(n._identities[o].category==e&&n._identities[o].type==t&&n._identities[o].name==r&&n._identities[o].lang==i)return!1;n._identities.push({category:e,type:t,name:r,lang:i})},clear(){n._identities=[]},get:()=>n._identities},features:{add(e){for(var t=0;t<n._features.length;t++)if(n._features[t]==e)return!1;n._features.push(e)},clear(){n._features=[]},get:()=>n._features}},info(e,t){const n={xmlns:jl.NS.DISCO_INFO};t&&(n.node=t);const r=Tl({from:Uc.connection.jid,to:e,type:"get"}).c("query",n);return Vc.sendIQ(r)},items(e,t){const n={xmlns:jl.NS.DISCO_ITEMS};return t&&(n.node=t),Vc.sendIQ(Tl({from:Uc.connection.jid,to:e,type:"get"}).c("query",n))},entities:{async get(e,t=!1){if(await Vc.waitUntil("discoInitialized"),!e)return Uc.disco_entities;if(void 0===Uc.disco_entities&&!Vc.connection.connected()){const t="Tried to look up entity ".concat(e," but _converse.disco_entities has been torn down");return void zn.warn(t)}const n=Uc.disco_entities.get(e);return n||!t?n:Vc.disco.entities.create(e)},create:(e,t)=>Uc.disco_entities.create({jid:e},t)},features:{async get(e,t){if(!t)throw new TypeError("You need to provide an entity JID");await Vc.waitUntil("discoInitialized");let n=await Vc.disco.entities.get(t,!0);if(void 0===Uc.disco_entities&&!Vc.connection.connected()){const n="Tried to get feature ".concat(e," for ").concat(t," but _converse.disco_entities has been torn down");return void zn.warn(n)}n=await n.waitUntilFeaturesDiscovered;const r=[...n.items.map(t=>t.hasFeature(e)),n.hasFeature(e)];return(await Promise.all(r)).filter(N)}},supports:async(e,t)=>(await Vc.disco.features.get(e,t)).length>0,async refresh(e){if(!e)throw new TypeError("api.disco.refresh: You need to provide an entity JID");await Vc.waitUntil("discoInitialized");let t=await Vc.disco.entities.get(e);return t?(t.features.reset(),t.fields.reset(),t.identities.reset(),t.waitUntilFeaturesDiscovered.isPending||(t.waitUntilFeaturesDiscovered=Ol.getResolveablePromise()),t.queryInfo()):t=await Vc.disco.entities.create(e,{ignore_cache:!0}),t.waitUntilFeaturesDiscovered},refreshFeatures:e=>Vc.refresh(e),async getFeatures(e){if(!e)throw new TypeError("api.disco.getFeatures: You need to provide an entity JID");await Vc.waitUntil("discoInitialized");let t=await Vc.disco.entities.get(e,!0);return t=await t.waitUntilFeaturesDiscovered,t.features},async getFields(e){if(!e)throw new TypeError("api.disco.getFields: You need to provide an entity JID");await Vc.waitUntil("discoInitialized");let t=await Vc.disco.entities.get(e,!0);return t=await t.waitUntilFeaturesDiscovered,t.fields},async getIdentity(e,t,n){const r=await Vc.disco.entities.get(n,!0);if(void 0!==r||Vc.connection.connected())return r.getIdentity(e,t);{const t="Tried to look up category ".concat(e," for ").concat(n," but _converse.disco_entities has been torn down");zn.warn(t)}}}})}});const kl=new RegExp("<object[^>]*>.*?</object>|<span[^>]*>.*?</span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|((\\s|^)(\\*\\\\0\\/\\*|\\*\\\\O\\/\\*|\\-___\\-|\\:'\\-\\)|'\\:\\-\\)|'\\:\\-D|\\>\\:\\-\\)|>\\:\\-\\)|'\\:\\-\\(|\\>\\:\\-\\(|>\\:\\-\\(|\\:'\\-\\(|O\\:\\-\\)|0\\:\\-3|0\\:\\-\\)|0;\\^\\)|O;\\-\\)|0;\\-\\)|O\\:\\-3|\\-__\\-|\\:\\-Þ|\\:\\-Þ|\\<\\/3|<\\/3|\\:'\\)|\\:\\-D|'\\:\\)|'\\=\\)|'\\:D|'\\=D|\\>\\:\\)|>\\:\\)|\\>;\\)|>;\\)|\\>\\=\\)|>\\=\\)|;\\-\\)|\\*\\-\\)|;\\-\\]|;\\^\\)|'\\:\\(|'\\=\\(|\\:\\-\\*|\\:\\^\\*|\\>\\:P|>\\:P|X\\-P|\\>\\:\\[|>\\:\\[|\\:\\-\\(|\\:\\-\\[|\\>\\:\\(|>\\:\\(|\\:'\\(|;\\-\\(|\\>\\.\\<|>\\.<|#\\-\\)|%\\-\\)|X\\-\\)|\\\\0\\/|\\\\O\\/|0\\:3|0\\:\\)|O\\:\\)|O\\=\\)|O\\:3|B\\-\\)|8\\-\\)|B\\-D|8\\-D|\\-_\\-|\\>\\:\\\\|>\\:\\\\|\\>\\:\\/|>\\:\\/|\\:\\-\\/|\\:\\-\\.|\\:\\-P|\\:Þ|\\:Þ|\\:\\-b|\\:\\-O|O_O|\\>\\:O|>\\:O|\\:\\-X|\\:\\-#|\\:\\-\\)|\\(y\\)|\\<3|<3|\\:D|\\=D|;\\)|\\*\\)|;\\]|;D|\\:\\*|\\=\\*|\\:\\(|\\:\\[|\\=\\(|\\:@|;\\(|D\\:|\\:\\$|\\=\\$|#\\)|%\\)|X\\)|B\\)|8\\)|\\:\\/|\\:\\\\|\\=\\/|\\=\\\\|\\:L|\\=L|\\:P|\\=P|\\:b|\\:O|\\:X|\\:#|\\=X|\\=#|\\:\\)|\\=\\]|\\=\\)|\\:\\])(?=\\s|$|[!,.?]))","gi"),Nl=/(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;function Il(){const e=Dl(['<img class="emoji"\n            draggable="false"\n            title="','"\n            alt="','"\n            src="','">']);return Il=function(){return e},e}function Ml(){const e=Dl(['<img class="emoji"\n                draggable="false"\n                title="','"\n                alt="','"\n                src="',"/72x72/",'.png"/>']);return Ml=function(){return e},e}function Rl(){const e=Dl(['<span title="','">',"</span>"]);return Rl=function(){return e},e}function Dl(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
  * @module converse-emoji
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const wl=Yc.env.utils;Yc.emojis={initialized:!1,initialized_promise:wl.getResolveablePromise()};const Sl={"*\\0/*":"1f646","*\\O/*":"1f646","-___-":"1f611",":'-)":"1f602","':-)":"1f605","':-D":"1f605",">:-)":"1f606","':-(":"1f613",">:-(":"1f620",":'-(":"1f622","O:-)":"1f607","0:-3":"1f607","0:-)":"1f607","0;^)":"1f607","O;-)":"1f607","0;-)":"1f607","O:-3":"1f607","-__-":"1f611",":-Þ":"1f61b","</3":"1f494",":')":"1f602",":-D":"1f603","':)":"1f605","'=)":"1f605","':D":"1f605","'=D":"1f605",">:)":"1f606",">;)":"1f606",">=)":"1f606",";-)":"1f609","*-)":"1f609",";-]":"1f609",";^)":"1f609","':(":"1f613","'=(":"1f613",":-*":"1f618",":^*":"1f618",">:P":"1f61c","X-P":"1f61c",">:[":"1f61e",":-(":"1f61e",":-[":"1f61e",">:(":"1f620",":'(":"1f622",";-(":"1f622",">.<":"1f623","#-)":"1f635","%-)":"1f635","X-)":"1f635","\\0/":"1f646","\\O/":"1f646","0:3":"1f607","0:)":"1f607","O:)":"1f607","O=)":"1f607","O:3":"1f607","B-)":"1f60e","8-)":"1f60e","B-D":"1f60e","8-D":"1f60e","-_-":"1f611",">:\\":"1f615",">:/":"1f615",":-/":"1f615",":-.":"1f615",":-P":"1f61b",":Þ":"1f61b",":-b":"1f61b",":-O":"1f62e",O_O:"1f62e",">:O":"1f62e",":-X":"1f636",":-#":"1f636",":-)":"1f642","(y)":"1f44d","<3":"2764",":D":"1f603","=D":"1f603",";)":"1f609","*)":"1f609",";]":"1f609",";D":"1f609",":*":"1f618","=*":"1f618",":(":"1f61e",":[":"1f61e","=(":"1f61e",":@":"1f620",";(":"1f622","D:":"1f628",":$":"1f633","=$":"1f633","#)":"1f635","%)":"1f635","X)":"1f635","B)":"1f60e","8)":"1f60e",":/":"1f615",":\\":"1f615","=/":"1f615","=\\":"1f615",":L":"1f615","=L":"1f615",":P":"1f61b","=P":"1f61b",":b":"1f61b",":O":"1f62e",":X":"1f636",":#":"1f636","=X":"1f636","=#":"1f636",":)":"1f642","=]":"1f642","=)":"1f642",":]":"1f642"};let xl;function El(e){if(e.indexOf("-")>-1){const t=[],n=e.split("-");for(let e=0;e<n.length;e++){let r=parseInt(n[e],16);if(r>=65536&&r<=1114111){const e=Math.floor((r-65536)/1024)+55296,t=(r-65536)%1024+56320;r=String.fromCharCode(e)+String.fromCharCode(t)}else r=String.fromCharCode(r);t.push(r)}return t.join("")}return function(e){let t="string"==typeof e?parseInt(e,16):e;return t<65536?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t)))}(e)}function Al(){var e;return Yc.emojis.toned||(Yc.emojis.toned=(e=Object.values(Yc.emojis.json.people).filter(e=>e.sn.includes("_tone")).map(e=>e.sn.replace(/_tone[1-5]/,"")),[...new Set(e)])),Yc.emojis.toned}function Cl(e){return e.replace(gl,(e,t,n,r)=>{if(void 0===r||""===r||!(wl.unescapeHTML(r)in Sl))return e;return r=wl.unescapeHTML(r),n+El(Sl[r].toUpperCase())})}function jl(e,t={unicode_only:!1,add_title_wrapper:!1}){const n=e.emoji,r=e.shortname;if(n){if(t.add_title_wrapper){if(qc.settings.get("use_system_emojis"))return r?Ga(bl(),r,n):n;{const t=qc.settings.get("emoji_image_path");return Ga(_l(),n,t,e.cp)}}return n}return t.unicode_only?r:Ga(vl(),r,r,Yc.emojis.by_sn[r].url)}function Tl(e){if(!Yc.emojis.initialized)throw new Error("getShortnameReferences called before emojis are initialized. To avoid this problem, first await the converse.emojis.initilaized_promise.");return[...e.matchAll(xl)].map(e=>{const t=Yc.emojis.by_sn[e[0]].cp;return{cp:t,begin:e.index,end:e.index+e[0].length,shortname:e[0],emoji:t?El(t):null}})}function Ol(e){const t=[];return function(e,t){const n=/\uFE0F/g,r=String.fromCharCode(8205);String(e).replace(ml,(e,i,s)=>{const o=function(e){const t=[];let n=0,r=0;for(;r<e.length;){const i=e.charCodeAt(r++);n?(t.push((65536+(n-55296<<10)+(i-56320)).toString(16)),n=0):55296<=i&&i<=56319?n=i:t.push(i.toString(16))}return t.join("-")}(e.indexOf(r)<0?e.replace(n,""):e);o&&t(o,e,s)})}(e,(e,n,r)=>{var i;t.push({begin:r,cp:e,emoji:n,end:r+n.length,shortname:(null===(i=wl.getEmojisByAtrribute("cp")[e])||void 0===i?void 0:i.sn)||""})}),t}Yc.plugins.add("converse-emoji",{initialize(){const{___:e}=Lc;qc.settings.extend({emoji_image_path:"https://twemoji.maxcdn.com/v/12.1.6/",emoji_categories:{smileys:":grinning:",people:":thumbsup:",activity:":soccer:",travel:":motorcycle:",objects:":bomb:",nature:":rainbow:",food:":hotdog:",symbols:":musical_note:",flags:":flag_ac:",custom:null},emoji_category_labels:{smileys:e("Smileys and emotions"),people:e("People"),activity:e("Activities"),travel:e("Travel"),objects:e("Objects"),nature:e("Animals and nature"),food:e("Food and drink"),symbols:e("Symbols"),flags:e("Flags"),custom:e("Stickers")}}),Lc.EmojiPicker=Rs.extend({defaults:{current_category:"smileys",current_skintone:"",scroll_position:0}});const t={};Object.assign(wl,{shortnamesToEmojis:(e,t={unicode_only:!1,add_title_wrapper:!1})=>function(e,t){let n=[e];return[...Tl(e),...Ol(e)].sort((e,t)=>t.begin-e.begin).forEach(e=>{const r=n.shift(),i=jl(e,t);n="string"==typeof i?[r.slice(0,e.begin)+i+r.slice(e.end),...n]:[r.slice(0,e.begin),i,r.slice(e.end),...n]}),n}(e=Cl(e),t),shortnamesToUnicode:e=>wl.shortnamesToEmojis(e,{unicode_only:!0})[0],isOnlyEmojis(e){const t=e.trim().split(/\s+/);return!(0===t.length||t.length>3)&&t.filter(e=>{const t=Ol(wl.shortnamesToUnicode(e));return 1===t.length&&(e===t[0].shortname||e===t[0].emoji)}).length===t.length},getEmojisByAtrribute(e){if(t[e])return t[e];if("category"===e)return Yc.emojis.json;const n=Yc.emojis.list.map(t=>t[e]).filter((e,t,n)=>n.indexOf(e)==t);return t[e]={},n.forEach(n=>t[e][n]=Yc.emojis.list.find(t=>t[e]===n)),t[e]}}),Object.assign(qc,{emojis:{async initialize(){if(!Yc.emojis.initialized){Yc.emojis.initialized=!0;const{default:e}=await n.e(137).then(n.t.bind(null,458,3));Yc.emojis.json=e,Yc.emojis.by_sn=Object.keys(e).reduce((t,n)=>Object.assign(t,e[n]),{}),Yc.emojis.list=Object.values(Yc.emojis.by_sn),Yc.emojis.list.sort((e,t)=>e.sn<t.sn?-1:e.sn>t.sn?1:0),Yc.emojis.shortnames=Yc.emojis.list.map(e=>e.sn),xl=new RegExp((()=>Yc.emojis.shortnames.map(e=>e.replace(/[+]/g,"\\$&")).join("|"))(),"gi"),Yc.emojis.toned=Al(),Yc.emojis.initialized_promise.resolve()}return Yc.emojis.initialized_promise}}})}});var kl=function(e,t,n){for(var r=-1,i=e.length,s=t.length,o={};++r<i;){var a=r<s?t[r]:void 0;n(o,e[r],a)}return o};var Nl=function(e,t){return kl(e||[],t||[],we)},Il=Math.min;var Ml=function(e,t,n){for(var r=n?wo:yo,i=e[0].length,s=e.length,o=s,a=Array(s),c=1/0,l=[];o--;){var u=e[o];o&&t&&(u=Dr(u,Le(t))),c=Il(u.length,c),a[o]=!n&&(t||i>=120&&u.length>=120)?new Ui(o&&u):void 0}u=e[0];var d=-1,h=a[0];e:for(;++d<i&&l.length<c;){var f=u[d],p=t?t(f):f;if(f=n||0!==f?f:0,!(h?Wi(h,p):r(l,p,n))){for(o=s;--o;){var g=a[o];if(!(g?Wi(g,p):r(e[o],p,n)))continue e}h&&h.push(p),l.push(f)}}return l};var Rl=function(e){return xo(e)?e:[]},Dl=wr((function(e){var t=Dr(e,Rl);return t.length&&t[0]===e[0]?Ml(t):[]}));
+ */const Pl=rl.env.utils;rl.emojis={initialized:!1,initialized_promise:Pl.getResolveablePromise()};const Ll={"*\\0/*":"1f646","*\\O/*":"1f646","-___-":"1f611",":'-)":"1f602","':-)":"1f605","':-D":"1f605",">:-)":"1f606","':-(":"1f613",">:-(":"1f620",":'-(":"1f622","O:-)":"1f607","0:-3":"1f607","0:-)":"1f607","0;^)":"1f607","O;-)":"1f607","0;-)":"1f607","O:-3":"1f607","-__-":"1f611",":-Þ":"1f61b","</3":"1f494",":')":"1f602",":-D":"1f603","':)":"1f605","'=)":"1f605","':D":"1f605","'=D":"1f605",">:)":"1f606",">;)":"1f606",">=)":"1f606",";-)":"1f609","*-)":"1f609",";-]":"1f609",";^)":"1f609","':(":"1f613","'=(":"1f613",":-*":"1f618",":^*":"1f618",">:P":"1f61c","X-P":"1f61c",">:[":"1f61e",":-(":"1f61e",":-[":"1f61e",">:(":"1f620",":'(":"1f622",";-(":"1f622",">.<":"1f623","#-)":"1f635","%-)":"1f635","X-)":"1f635","\\0/":"1f646","\\O/":"1f646","0:3":"1f607","0:)":"1f607","O:)":"1f607","O=)":"1f607","O:3":"1f607","B-)":"1f60e","8-)":"1f60e","B-D":"1f60e","8-D":"1f60e","-_-":"1f611",">:\\":"1f615",">:/":"1f615",":-/":"1f615",":-.":"1f615",":-P":"1f61b",":Þ":"1f61b",":-b":"1f61b",":-O":"1f62e",O_O:"1f62e",">:O":"1f62e",":-X":"1f636",":-#":"1f636",":-)":"1f642","(y)":"1f44d","<3":"2764",":D":"1f603","=D":"1f603",";)":"1f609","*)":"1f609",";]":"1f609",";D":"1f609",":*":"1f618","=*":"1f618",":(":"1f61e",":[":"1f61e","=(":"1f61e",":@":"1f620",";(":"1f622","D:":"1f628",":$":"1f633","=$":"1f633","#)":"1f635","%)":"1f635","X)":"1f635","B)":"1f60e","8)":"1f60e",":/":"1f615",":\\":"1f615","=/":"1f615","=\\":"1f615",":L":"1f615","=L":"1f615",":P":"1f61b","=P":"1f61b",":b":"1f61b",":O":"1f62e",":X":"1f636",":#":"1f636","=X":"1f636","=#":"1f636",":)":"1f642","=]":"1f642","=)":"1f642",":]":"1f642"};function zl(e){if(e.indexOf("-")>-1){const t=[],n=e.split("-");for(let e=0;e<n.length;e++){let r=parseInt(n[e],16);if(r>=65536&&r<=1114111){const e=Math.floor((r-65536)/1024)+55296,t=(r-65536)%1024+56320;r=String.fromCharCode(e)+String.fromCharCode(t)}else r=String.fromCharCode(r);t.push(r)}return t.join("")}return function(e){let t="string"==typeof e?parseInt(e,16):e;return t<65536?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t)))}(e)}function Fl(){var e;return rl.emojis.toned||(rl.emojis.toned=(e=Object.values(rl.emojis.json.people).filter(e=>e.sn.includes("_tone")).map(e=>e.sn.replace(/_tone[1-5]/,"")),[...new Set(e)])),rl.emojis.toned}function Bl(e){return e.replace(kl,(e,t,n,r)=>{if(void 0===r||""===r||!(Pl.unescapeHTML(r)in Ll))return e;return r=Pl.unescapeHTML(r),n+zl(Ll[r].toUpperCase())})}function ql(e,t={unicode_only:!1,add_title_wrapper:!1}){const n=e.emoji,r=e.shortname;if(n){if(t.unicode_only)return n;if(Vc.settings.get("use_system_emojis"))return t.add_title_wrapper&&r?Za(Rl(),r,n):n;{const t=Vc.settings.get("emoji_image_path");return Za(Ml(),r,n,t,e.cp)}}return t.unicode_only?r:Za(Il(),r,r,rl.emojis.by_sn[r].url)}function Hl(e){if(!rl.emojis.initialized)throw new Error("getShortnameReferences called before emojis are initialized. To avoid this problem, first await the converse.emojis.initilaized_promise.");return[...e.matchAll(rl.emojis.shortnames_regex)].filter(e=>e[0].length>0).map(e=>{const t=rl.emojis.by_sn[e[0]].cp;return{cp:t,begin:e.index,end:e.index+e[0].length,shortname:e[0],emoji:t?zl(t):null}})}function Ul(e){const t=[];return function(e,t){const n=/\uFE0F/g,r=String.fromCharCode(8205);String(e).replace(Nl,(e,i,o)=>{const s=function(e){const t=[];let n=0,r=0;for(;r<e.length;){const i=e.charCodeAt(r++);n?(t.push((65536+(n-55296<<10)+(i-56320)).toString(16)),n=0):55296<=i&&i<=56319?n=i:t.push(i.toString(16))}return t.join("-")}(e.indexOf(r)<0?e.replace(n,""):e);s&&t(s,e,o)})}(e,(e,n,r)=>{var i;t.push({begin:r,cp:e,emoji:n,end:r+n.length,shortname:(null===(i=Pl.getEmojisByAtrribute("cp")[e])||void 0===i?void 0:i.sn)||""})}),t}rl.plugins.add("converse-emoji",{initialize(){const{___:e}=Uc;Vc.settings.extend({emoji_image_path:"https://twemoji.maxcdn.com/v/12.1.6/",emoji_categories:{smileys:":grinning:",people:":thumbsup:",activity:":soccer:",travel:":motorcycle:",objects:":bomb:",nature:":rainbow:",food:":hotdog:",symbols:":musical_note:",flags:":flag_ac:",custom:null},emoji_category_labels:{smileys:e("Smileys and emotions"),people:e("People"),activity:e("Activities"),travel:e("Travel"),objects:e("Objects"),nature:e("Animals and nature"),food:e("Food and drink"),symbols:e("Symbols"),flags:e("Flags"),custom:e("Stickers")}}),Uc.EmojiPicker=qo.extend({defaults:{current_category:"smileys",current_skintone:"",scroll_position:0}});const t={};Object.assign(Pl,{shortnamesToEmojis:(e,t={unicode_only:!1,add_title_wrapper:!1})=>function(e,t){let n=[e];return[...Hl(e),...Ul(e)].sort((e,t)=>t.begin-e.begin).forEach(e=>{const r=n.shift(),i=ql(e,t);n="string"==typeof i?[r.slice(0,e.begin)+i+r.slice(e.end),...n]:[r.slice(0,e.begin),i,r.slice(e.end),...n]}),n}(e=Bl(e),t),shortnamesToUnicode:e=>Pl.shortnamesToEmojis(e,{unicode_only:!0})[0],isOnlyEmojis(e){const t=e.trim().split(/\s+/);return!(0===t.length||t.length>3)&&t.filter(e=>{const t=Ul(Pl.shortnamesToUnicode(e));return 1===t.length&&(e===t[0].shortname||e===t[0].emoji)}).length===t.length},getEmojisByAtrribute(e){if(t[e])return t[e];if("category"===e)return rl.emojis.json;const n=rl.emojis.list.map(t=>t[e]).filter((e,t,n)=>n.indexOf(e)==t);return t[e]={},n.forEach(n=>t[e][n]=rl.emojis.list.find(t=>t[e]===n)),t[e]}}),Object.assign(Vc,{emojis:{async initialize(){if(!rl.emojis.initialized){rl.emojis.initialized=!0;const{default:e}=await n.e(137).then(n.t.bind(null,547,3));rl.emojis.json=e,rl.emojis.by_sn=Object.keys(e).reduce((t,n)=>Object.assign(t,e[n]),{}),rl.emojis.list=Object.values(rl.emojis.by_sn),rl.emojis.list.sort((e,t)=>e.sn<t.sn?-1:e.sn>t.sn?1:0),rl.emojis.shortnames=rl.emojis.list.map(e=>e.sn);const t=()=>rl.emojis.shortnames.map(e=>e.replace(/[+]/g,"\\$&")).join("|");rl.emojis.shortnames_regex=new RegExp(t(),"gi"),rl.emojis.toned=Fl(),rl.emojis.initialized_promise.resolve()}return rl.emojis.initialized_promise}}})}});var $l={initialize(){this.checkValidity()&&(this.get("file")&&this.on("change:put",this.uploadFile,this),this.setTimerForEphemeralMessage()||this.setOccupant(),Vc.trigger("chatRoomMessageInitialized",this))},mayBeModerated(){return["all","moderator"].includes(Vc.settings.get("allow_message_retraction"))&&this.collection.chatbox.canModerateMessages()},checkValidity(){const e=Uc.Message.prototype.checkValidity.call(this);return!e&&this.collection.chatbox.debouncedRejoin(),e},onOccupantRemoved(){var e;this.stopListening(this.occupant),delete this.occupant;const t=null==this||null===(e=this.collection)||void 0===e?void 0:e.chatbox;if(!t)return zn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));this.listenTo(t.occupants,"add",this.onOccupantAdded)},onOccupantAdded(e){if(e.get("nick")===kc.e.getResourceFromJid(this.get("from"))){var t;this.occupant=e,this.trigger("occupantAdded"),this.listenTo(this.occupant,"destroy",this.onOccupantRemoved);const n=null==this||null===(t=this.collection)||void 0===t?void 0:t.chatbox;if(!n)return zn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));this.stopListening(n.occupants,"add",this.onOccupantAdded)}},setOccupant(){var e;if("groupchat"!==this.get("type"))return;const t=null==this||null===(e=this.collection)||void 0===e?void 0:e.chatbox;if(!t)return zn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));const n=kc.e.getResourceFromJid(this.get("from"));if(this.occupant=t.occupants.findWhere({nick:n}),!this.occupant&&Vc.settings.get("muc_send_probes")){this.occupant=t.occupants.create({nick:n,type:"unavailable"});const e="".concat(t.get("jid"),"/").concat(n);Vc.user.presence.send("probe",e)}this.occupant?this.listenTo(this.occupant,"destroy",this.onOccupantRemoved):this.listenTo(t.occupants,"add",this.onOccupantAdded)}};
 /**
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description This is the MUC utilities module.
- */
-const{Strophe:Pl,sizzle:Ll}=Yc.env;var zl={computeAffiliationsDelta(e,t,n,r){const i=n.map(e=>e.jid),s=r.map(e=>e.jid);let o=Eo(i,s).map(e=>n[Po(i,e)]);return e||(o=o.concat(n.filter(e=>{const t=Po(s,e.jid);return t>=0&&e.affiliation!==r[t].affiliation}))),t&&(o=o.concat(Eo(s,i).map(e=>({jid:e,affiliation:"none"})))),o},parseMemberListIQ:e=>Ll('query[xmlns="'.concat(Pl.NS.MUC_ADMIN,'"] item'),e).map(e=>{const t={affiliation:e.getAttribute("affiliation")},n=e.getAttribute("jid");qs.isValidJID(n)?t.jid=n:t.nick=n;const r=e.getAttribute("nick");return r&&(t.nick=r),e.getAttribute("role")&&(t.role=r),t})};
+ */const{Strophe:Wl,sizzle:Gl}=rl.env;var Vl={computeAffiliationsDelta(e,t,n,r){const i=n.map(e=>e.jid),o=r.map(e=>e.jid);let s=ks(i,o).map(e=>n[Hs(i,e)]);return e||(s=s.concat(n.filter(e=>{const t=Hs(o,e.jid);return t>=0&&e.affiliation!==r[t].affiliation}))),t&&(s=s.concat(ks(o,i).map(e=>({jid:e,affiliation:"none"})))),s},parseMemberListIQ:e=>Gl('query[xmlns="'.concat(Wl.NS.MUC_ADMIN,'"] item'),e).map(e=>{const t={affiliation:e.getAttribute("affiliation")},n=e.getAttribute("jid");Jo.isValidJID(n)?t.jid=n:t.nick=n;const r=e.getAttribute("nick");return r&&(t.nick=r),e.getAttribute("role")&&(t.role=r),t})};
 /**
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- * @description This is the form utilities module.
- */qs.webForm2xForm=function(e){const t=e.getAttribute("name");if(!t)return null;let n;return n="checkbox"===e.getAttribute("type")?e.checked?1:0:"TEXTAREA"==e.tagName?e.value.split("\n").filter(e=>e.trim()):"SELECT"==e.tagName?qs.getSelectValues(e):e.value,qs.toStanza('\n        <field var="'.concat(t,'">\n            ').concat(n.constructor===Array?n.map(e=>"<value>".concat(e,"</value>")):"<value>".concat(n,"</value>"),"\n        </field>"))};var Fl=qs;function Bl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ql(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Bl(Object(n),!0).forEach((function(t){Hl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Hl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ * @description Pure functions to help functionally parse messages.
+ * @todo Other parsing helpers can be made more abstract and placed here.
+ */const Jl={},Xl=(e,t)=>e.replace(RegExp("\\"+t,"ig"),"\\"+t);Jl.escapeCharacters=e=>t=>e.split("").reduce(Xl,t),Jl.escapeRegexString=Jl.escapeCharacters("[\\^$.?*+(){}"),Jl.findFirstMatchInArray=e=>t=>{for(let n=0;n<e.length;n++)if(0===t.localeCompare(e[n],void 0,{sensitivity:"base"}))return e[n];return null};const Ql=([e,t],n,r)=>{let i=e,{begin:o,end:s}=n;const{value:a}=n;return o-=r,s=s-r-1,i="".concat(i.slice(0,o)).concat(a).concat(i.slice(s+1)),[i,[...t,{...n,begin:o,end:s}]]};Jl.reduceTextFromReferences=(e,t)=>t.reduce(Ql,[e,[]]);var Yl=Jl;
 /**
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- * @description Pure functions to help funcitonally parse messages.
- * @todo Other parsing helpers can be made more abstract and placed here.
- */const Ul={mention_regex:/(?:\s|^)([@][\w_-]+(?:\.\w+)*)/gi,matchRegexInText:e=>t=>e.matchAll(t)},$l=(e,t)=>e.replace(RegExp("\\"+t,"ig"),"\\"+t);Ul.escapeCharacters=e=>t=>e.split("").reduce($l,t),Ul.escapeRegexString=Ul.escapeCharacters("[\\^$.?*+(){}"),Ul.findFirstMatchInArray=e=>t=>{for(let n=0;n<e.length;n++)if(0===t.localeCompare(e[n],void 0,{sensitivity:"base"}))return e[n];return null};const Wl=([e,t],n,r)=>{let i=e,{begin:s,end:o}=n;const{value:a}=n;return s-=r,o=o-r-1,i="".concat(i.slice(0,s)).concat(a).concat(i.slice(o+1)),[i,[...t,ql(ql({},n),{},{begin:s,end:o})]]};Ul.reduceTextFromReferences=(e,t)=>t.reduce(Wl,[e,[]]);var Vl=Ul;function Gl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ * @description This is the form utilities module.
+ */Jo.webForm2xForm=function(e){const t=e.getAttribute("name");if(!t)return null;let n;return n="checkbox"===e.getAttribute("type")?e.checked?1:0:"TEXTAREA"==e.tagName?e.value.split("\n").filter(e=>e.trim()):"SELECT"==e.tagName?Jo.getSelectValues(e):e.value,Jo.toStanza('\n        <field var="'.concat(t,'">\n            ').concat(n.constructor===Array?n.map(e=>"<value>".concat(e,"</value>")):"<value>".concat(n,"</value>"),"\n        </field>"))};var Kl=Jo;var Zl=function(e,t,n){for(var r=-1,i=e.length,o=t.length,s={};++r<i;){var a=r<o?t[r]:void 0;n(s,e[r],a)}return s};var eu=function(e,t){return Zl(e||[],t||[],we)},tu=Math.min;var nu=function(e,t,n){for(var r=n?js:Cs,i=e[0].length,o=e.length,s=o,a=Array(o),c=1/0,l=[];s--;){var u=e[s];s&&t&&(u=qr(u,Le(t))),c=tu(u.length,c),a[s]=!n&&(t||i>=120&&u.length>=120)?new Xi(s&&u):void 0}u=e[0];var d=-1,h=a[0];e:for(;++d<i&&l.length<c;){var f=u[d],p=t?t(f):f;if(f=n||0!==f?f:0,!(h?Yi(h,p):r(l,p,n))){for(s=o;--s;){var g=a[s];if(!(g?Yi(g,p):r(e[s],p,n)))continue e}h&&h.push(p),l.push(f)}}return l};var ru=function(e){return Os(e)?e:[]},iu=jr((function(e){var t=qr(e,ru);return t.length&&t[0]===e[0]?nu(t):[]}));const ou=["301","303","333","307","321","322"],su=qo.extend({defaults:()=>({connection_status:rl.ROOMSTATUS.DISCONNECTED})});var au={defaults(){return{num_unread_general:0,bookmarked:!1,chat_state:void 0,hidden:Uc.isUniView()&&!Vc.settings.get("singleton"),hidden_occupants:!!Vc.settings.get("hide_muc_participants"),message_type:"groupchat",name:"",num_unread:0,roomconfig:{},time_opened:this.get("time_opened")||(new Date).getTime(),time_sent:new Date(0).toISOString(),type:Uc.CHATROOMS_TYPE}},async initialize(){this.initialized=Kl.getResolveablePromise(),this.debouncedRejoin=Rc(this.rejoin,250),this.set("box_id","box-".concat(this.get("jid"))),this.initNotifications(),this.initMessages(),this.initOccupants(),this.initDiscoModels(),this.registerHandlers(),this.on("change:chat_state",this.sendChatState,this),await this.restoreSession(),this.session.on("change:connection_status",this.onConnectionStatusChanged,this),this.listenTo(this.occupants,"add",this.onOccupantAdded),this.listenTo(this.occupants,"remove",this.onOccupantRemoved),this.listenTo(this.occupants,"change:show",this.onOccupantShowChanged),this.listenTo(this.occupants,"change:affiliation",this.createAffiliationChangeMessage),this.listenTo(this.occupants,"change:role",this.createRoleChangeMessage),await this.restoreFromCache()||this.join(),await Vc.trigger("chatRoomInitialized",this,{Synchronous:!0}),this.initialized.resolve()},async restoreFromCache(){return this.session.get("connection_status")===rl.ROOMSTATUS.ENTERED&&await this.isJoined()?(await new Promise(e=>this.features.fetch({success:e,error:e})),await this.fetchOccupants().catch(e=>zn.error(e)),await this.fetchMessages().catch(e=>zn.error(e)),!0):(await this.clearCache(),!1)},async join(e,t){if(this.session.get("connection_status")===rl.ROOMSTATUS.ENTERED)return this;if(await this.refreshDiscoInfo(),!(e=await this.getAndPersistNickname(e)))return Kl.safeSave(this.session,{connection_status:rl.ROOMSTATUS.NICKNAME_REQUIRED}),Vc.settings.get("muc_show_logs_before_join")&&await this.fetchMessages(),this;const n=Object(kc.d)({from:Uc.connection.jid,to:this.getRoomJIDAndNick()}).c("x",{xmlns:kc.e.NS.MUC}).c("history",{maxstanzas:this.features.get("mam_enabled")?0:Vc.settings.get("muc_history_max_stanzas")}).up();return(t=t||this.get("password"))&&n.cnode(kc.e.xmlElement("password",[],t)),this.session.save("connection_status",rl.ROOMSTATUS.CONNECTING),Vc.send(n),this},async clearCache(){this.session.save("connection_status",rl.ROOMSTATUS.DISCONNECTED),this.occupants.length?this.occupants.filter(e=>!e.isMember()).forEach(e=>e.destroy()):this.occupants.clearStore(),Vc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages()},onOccupantAdded(e){Uc.isInfoVisible(rl.MUC_TRAFFIC_STATES.ENTERED)&&this.session.get("connection_status")===rl.ROOMSTATUS.ENTERED&&"online"===e.get("show")&&this.updateNotifications(e.get("nick"),rl.MUC_TRAFFIC_STATES.ENTERED)},onOccupantRemoved(e){Uc.isInfoVisible(rl.MUC_TRAFFIC_STATES.EXITED)&&this.session.get("connection_status")===rl.ROOMSTATUS.ENTERED&&"online"===e.get("show")&&this.updateNotifications(e.get("nick"),rl.MUC_TRAFFIC_STATES.EXITED)},onOccupantShowChanged(e){e.get("states").includes("303")||("offline"===e.get("show")&&Uc.isInfoVisible(rl.MUC_TRAFFIC_STATES.EXITED)?this.updateNotifications(e.get("nick"),rl.MUC_TRAFFIC_STATES.EXITED):"online"===e.get("show")&&Uc.isInfoVisible(rl.MUC_TRAFFIC_STATES.ENTERED)&&this.updateNotifications(e.get("nick"),rl.MUC_TRAFFIC_STATES.ENTERED))},rejoin(){return this.clearCache(),this.join()},async onConnectionStatusChanged(){this.session.get("connection_status")===rl.ROOMSTATUS.ENTERED&&(await this.occupants.fetchMembers(),await this.fetchMessages(),Vc.trigger("enteredNewRoom",this),Vc.settings.get("auto_register_muc_nickname")&&await Vc.disco.supports(kc.e.NS.MUC_REGISTER,this.get("jid"))&&this.registerNickname())},async onReconnection(){this.registerHandlers(),await this.rejoin(),this.announceReconnection()},getMessagesCollection:()=>new Uc.ChatRoomMessages,restoreSession(){const e="muc.session-".concat(Uc.bare_jid,"-").concat(this.get("jid"));return this.session=new su({id:e}),this.session.browserStorage=Uc.createStore(e,"session"),new Promise(e=>this.session.fetch({success:e,error:e}))},initDiscoModels(){let e="converse.muc-features-".concat(Uc.bare_jid,"-").concat(this.get("jid"));this.features=new qo(Object.assign({id:e},eu(rl.ROOM_FEATURES,rl.ROOM_FEATURES.map(()=>!1)))),this.features.browserStorage=Uc.createStore(e,"session"),e="converse.muc-config-{_converse.bare_jid}-".concat(this.get("jid")),this.config=new qo,this.config.browserStorage=Uc.createStore(e,"session")},initOccupants(){this.occupants=new Uc.ChatRoomOccupants;const e="converse.occupants-".concat(Uc.bare_jid).concat(this.get("jid"));this.occupants.browserStorage=Uc.createStore(e,"session"),this.occupants.chatroom=this},fetchOccupants(){return this.occupants.fetched=new Promise(e=>{this.occupants.fetch({add:!0,silent:!0,success:e,error:e})}),this.occupants.fetched},handleAffiliationChangedMessage(e){const t=mr()('x[xmlns="'.concat(kc.e.NS.MUC_USER,'"] item'),e).pop();if(t){const n=e.getAttribute("from"),r=e.getAttribute("type"),i=t.getAttribute("affiliation"),o=t.getAttribute("jid"),s={from:n,type:r,affiliation:i,nick:kc.e.getNodeFromJid(o),states:[],show:"unavailable"==r?"offline":"online",role:t.getAttribute("role"),jid:kc.e.getBareJidFromJid(o),resource:kc.e.getResourceFromJid(o)},a=this.occupants.findOccupant({jid:s.jid});a?a.save(s):this.occupants.create(s)}},async handleErrorMessageStanza(e){const{__:t}=Uc,n=await ps.parseMUCMessage(e,this,Uc);if(!await this.shouldShowErrorMessage(n))return;const r=this.getMessageReferencedByError(n);if(r){const e={error:n.error,error_condition:n.error_condition,error_text:n.error_text,error_type:n.error_type,editable:!1};n.msgid===r.get("retraction_id")?(e.retraction_id=void 0,n.error||("forbidden"===n.error_condition?e.error=t("You're not allowed to retract your message."):"not-acceptable"===n.error_condition?e.error=t("Your retraction was not delivered because you're not present in the groupchat."):e.error=t("Sorry, an error occurred while trying to retract your message."))):n.error||("forbidden"===n.error_condition?e.error=t("Your message was not delivered because you weren't allowed to send it."):"not-acceptable"===n.error_condition?e.error=t("Your message was not delivered because you're not present in the groupchat."):e.error=t("Sorry, an error occurred while trying to send your message.")),r.save(e)}else this.createMessage(n)},async handleMessageStanza(e){if(ps.isArchived(e))return zn.warn('Received a MAM message with type "groupchat"');this.createInfoMessages(e),this.fetchFeaturesIfConfigurationChanged(e);const t=await ps.parseMUCMessage(e,this,Uc),n={stanza:e,attrs:t,chatbox:this};return Vc.trigger("message",n),t&&this.queueMessage(t)},registerHandlers(){const e=this.get("jid");this.removeHandlers(),this.presence_handler=Uc.connection.addHandler(e=>this.onPresence(e)||!0,null,"presence",null,null,e,{ignoreNamespaceFragment:!0,matchBareFromJid:!0}),this.message_handler=Uc.connection.addHandler(e=>!!this.handleMessageStanza(e)||!0,null,"message","groupchat",null,e,{matchBareFromJid:!0}),this.affiliation_message_handler=Uc.connection.addHandler(e=>this.handleAffiliationChangedMessage(e)||!0,kc.e.NS.MUC_USER,"message",null,null,e)},removeHandlers(){return this.message_handler&&(Uc.connection&&Uc.connection.deleteHandler(this.message_handler),delete this.message_handler),this.presence_handler&&(Uc.connection&&Uc.connection.deleteHandler(this.presence_handler),delete this.presence_handler),this.affiliation_message_handler&&(Uc.connection&&Uc.connection.deleteHandler(this.affiliation_message_handler),delete this.affiliation_message_handler),this},invitesAllowed(){return Vc.settings.get("allow_muc_invitations")&&(this.features.get("open")||"owner"===this.getOwnAffiliation())},getDisplayName(){const e=this.get("name");return e||("hidden"===Vc.settings.get("locked_muc_domain")?kc.e.getNodeFromJid(this.get("jid")):this.get("jid"))},sendTimedMessage(e){"function"==typeof e.tree&&(e=e.tree());let t=e.getAttribute("id");t||(t=this.getUniqueId("sendIQ"),e.setAttribute("id",t));const n=Kl.getResolveablePromise(),r=Uc.connection.addTimedHandler(Uc.STANZA_TIMEOUT,()=>(Uc.connection.deleteHandler(i),n.reject(new Uc.TimeoutError("Timeout Error: No response from server")),!1)),i=Uc.connection.addHandler(e=>{r&&Uc.connection.deleteTimedHandler(r),"groupchat"===e.getAttribute("type")?n.resolve(e):n.reject(e)},null,"message",["error","groupchat"],t);return Vc.send(e),n},async retractOwnMessage(e){const t=Uc.__,n=e.get("origin_id");if(!n)throw new Error("Can't retract message without a XEP-0359 Origin ID");const r=e.get("editable"),i=Object(kc.c)({id:Kl.getUniqueId(),to:this.get("jid"),type:"groupchat"}).c("store",{xmlns:kc.e.NS.HINTS}).up().c("apply-to",{id:n,xmlns:kc.e.NS.FASTEN}).c("retract",{xmlns:kc.e.NS.RETRACT});e.set({retracted:(new Date).toISOString(),retracted_id:n,retraction_id:i.nodeTree.getAttribute("id"),editable:!1});try{await this.sendTimedMessage(i)}catch(n){throw e.save({editable:r,error_type:"timeout",error:t("A timeout happened while while trying to retract your message."),retracted:void 0,retracted_id:void 0}),n}},async retractOtherMessage(e,t){const n=e.get("editable");e.save({moderated:"retracted",moderated_by:Uc.bare_jid,moderated_id:e.get("msgid"),moderation_reason:t,editable:!1});const r=await this.sendRetractionIQ(e,t);return(null===r||Kl.isErrorStanza(r))&&e.save({editable:n,moderated:void 0,moderated_by:void 0,moderated_id:void 0,moderation_reason:void 0}),r},sendRetractionIQ(e,t){const n=Object(kc.b)({to:this.get("jid"),type:"set"}).c("apply-to",{id:e.get("stanza_id ".concat(this.get("jid"))),xmlns:kc.e.NS.FASTEN}).c("moderate",{xmlns:kc.e.NS.MODERATE}).c("retract",{xmlns:kc.e.NS.RETRACT}).up().c("reason").t(t||"");return Vc.sendIQ(n,null,!1)},sendDestroyIQ(e,t){const n=Object(kc.a)("destroy");t&&n.attrs({jid:t});const r=Object(kc.b)({to:this.get("jid"),type:"set"}).c("query",{xmlns:kc.e.NS.MUC_OWNER}).cnode(n.node);return e&&e.length>0&&r.c("reason",e),Vc.sendIQ(r)},async leave(e){if(this.features.destroy(),this.occupants.clearStore(),Uc.disco_entities){const e=Uc.disco_entities.get(this.get("jid"));e&&await new Promise((t,n)=>e.destroy({success:t,error:n}))}Vc.connection.connected()&&Vc.user.presence.send("unavailable",this.getRoomJIDAndNick(),e),Kl.safeSave(this.session,{connection_status:rl.ROOMSTATUS.DISCONNECTED}),this.removeHandlers()},async close(){return await new Promise(e=>this.session.destroy({success:e,error:(t,n)=>{zn.error(n),e()}})),await new Promise(e=>this.features.destroy({success:e,error:(t,n)=>{zn.error(n),e()}})),Uc.ChatBox.prototype.close.call(this)},canModerateMessages(){const e=this.getOwnOccupant();return e&&e.isModerator()&&Vc.disco.supports(kc.e.NS.MODERATE,this.get("jid"))},getAllKnownNicknames(){return[...new Set([...this.occupants.map(e=>e.get("nick")),...this.messages.map(e=>e.get("nick"))])].filter(e=>e)},getAllKnownNicknamesRegex(){const e=this.getAllKnownNicknames().join("|"),t=Yl.escapeRegexString(e);return RegExp("(?:\\p{P}|\\p{Z}|^)@(".concat(t,")(?![\\w@-])"),"uig")},getOccupantByJID(e){return this.occupants.findOccupant({jid:e})},getOccupantByNickname(e){return this.occupants.findOccupant({nick:e})},parseTextForReferences(e){if(!e||!/(\p{P}|\p{Z}|^)([@][\w_-]+(?:\.\w+)*)/giu.test(e))return[e,[]];const t=Yl.findFirstMatchInArray(this.getAllKnownNicknames()),n=e=>{const t=this.get("jid"),n=this.getOccupant(e)||this.getOccupant(t),r=n&&n.get("jid")||"".concat(t,"/").concat(e);return encodeURI("xmpp:".concat(r))},r=this.getAllKnownNicknamesRegex(),i=[...e.matchAll(r)].filter(e=>!e[0].startsWith("/")).map(e=>{let r=e[0].indexOf("@");"@"===e[0][r+1]&&(r+=1);const i=e.index+r,o=i+e[0].length-r,s=t(e[1]);return{begin:i,end:o,value:s,type:"mention",uri:n(s)}}),[o,s]=Yl.reduceTextFromReferences(e,i);return[o,s]},getOutgoingMessageAttributes(e,t){const n=this.get("composing_spoiler"),[r,i]=this.parseTextForReferences(e),o=Kl.getUniqueId(),s=r?Kl.httpToGeoUri(Kl.shortnamesToUnicode(r),Uc):void 0;return{body:s,is_spoiler:n,origin_id:o,references:i,id:o,msgid:o,from:"".concat(this.get("jid"),"/").concat(this.get("nick")),fullname:this.get("nick"),is_only_emojis:!!r&&Kl.isOnlyEmojis(r),message:s,nick:this.get("nick"),sender:"me",spoiler_hint:n?t:void 0,type:"groupchat"}},getRoomJIDAndNick(){const e=this.get("nick");return kc.e.getBareJidFromJid(this.get("jid"))+(null!==e?"/".concat(e):"")},sendChatState(){if(!Vc.settings.get("send_chat_state_notifications")||!this.get("chat_state")||this.session.get("connection_status")!==rl.ROOMSTATUS.ENTERED||this.features.get("moderated")&&"visitor"===this.getOwnRole())return;const e=Vc.settings.get("send_chat_state_notifications");if(Array.isArray(e)&&!e.includes(this.get("chat_state")))return;const t=this.get("chat_state");t!==Uc.GONE&&Vc.send(Object(kc.c)({to:this.get("jid"),type:"groupchat"}).c(t,{xmlns:kc.e.NS.CHATSTATES}).up().c("no-store",{xmlns:kc.e.NS.HINTS}).up().c("no-permanent-store",{xmlns:kc.e.NS.HINTS}))},directInvite(e,t){this.features.get("membersonly")&&this.updateMemberLists([{jid:e,affiliation:"member",reason:t}]);const n={xmlns:"jabber:x:conference",jid:this.get("jid")};null!==t&&(n.reason=t),this.get("password")&&(n.password=this.get("password"));const r=Object(kc.c)({from:Uc.connection.jid,to:e,id:Kl.getUniqueId()}).c("x",n);Vc.send(r),Vc.trigger("roomInviteSent",{room:this,recipient:e,reason:t})},refreshDiscoInfo(){return Vc.disco.refresh(this.get("jid")).then(()=>this.getDiscoInfo()).catch(e=>zn.error(e))},getDiscoInfo(){return Vc.disco.getIdentity("conference","text",this.get("jid")).then(e=>this.save({name:null==e?void 0:e.get("name")})).then(()=>this.getDiscoInfoFields()).then(()=>this.getDiscoInfoFeatures()).catch(e=>zn.error(e))},async getDiscoInfoFields(){const e=(await Vc.disco.getFields(this.get("jid"))).reduce((e,t)=>{const n=t.get("var");return n&&n.startsWith("muc#roominfo_")&&(e[n.replace("muc#roominfo_","")]=t.get("value")),e},{});this.config.save(e)},async getDiscoInfoFeatures(){const e=await Vc.disco.getFeatures(this.get("jid")),t=Object.assign(eu(rl.ROOM_FEATURES,rl.ROOM_FEATURES.map(()=>!1)),{fetched:(new Date).toISOString()});e.each(e=>{const n=e.get("var");n.startsWith("muc_")?t[n.replace("muc_","")]=!0:n===kc.e.NS.MAM&&(t.mam_enabled=!0)}),this.features.save(t)},setAffiliation(e,t){return t=t.filter(t=>void 0===t.affiliation||t.affiliation===e),Promise.all(t.map(t=>this.sendAffiliationIQ(e,t)))},addFieldValue(e){const t=e.getAttribute("type");if("fixed"===t)return e;const n=e.getAttribute("var").replace("muc#roomconfig_",""),r=this.get("roomconfig");if(n in r){let i;switch(t){case"boolean":i=[r[n]?1:0];break;case"list-multi":i=r[n];break;default:i=[r[n]]}e.innerHTML=i.map(e=>Object(kc.a)("value").t(e)).join("")}return e},async autoConfigureChatRoom(){const e=await this.fetchRoomConfiguration(),t=mr()("field",e).map(e=>this.addFieldValue(e));if(t.length)return this.sendConfiguration(t)},fetchRoomConfiguration(){return Vc.sendIQ(Object(kc.b)({to:this.get("jid"),type:"get"}).c("query",{xmlns:kc.e.NS.MUC_OWNER}))},sendConfiguration(e=[]){const t=Object(kc.b)({to:this.get("jid"),type:"set"}).c("query",{xmlns:kc.e.NS.MUC_OWNER}).c("x",{xmlns:kc.e.NS.XFORM,type:"submit"});return e.forEach(e=>t.cnode(e).up()),Vc.sendIQ(t)},getOwnRole(){var e,t;return null===(e=this.getOwnOccupant())||void 0===e||null===(t=e.attributes)||void 0===t?void 0:t.role},getOwnAffiliation(){var e,t;return null===(e=this.getOwnOccupant())||void 0===e||null===(t=e.attributes)||void 0===t?void 0:t.affiliation},getOwnOccupant(){return this.occupants.findWhere({jid:Uc.bare_jid})},sendAffiliationIQ(e,t){const n=Object(kc.b)({to:this.get("jid"),type:"set"}).c("query",{xmlns:kc.e.NS.MUC_ADMIN}).c("item",{affiliation:t.affiliation||e,nick:t.nick,jid:t.jid});return void 0!==t.reason&&n.c("reason",t.reason),Vc.sendIQ(n)},setAffiliations(e){const t=[...new Set(e.map(e=>e.affiliation))];return Promise.all(t.map(t=>this.setAffiliation(t,e)))},setRole(e,t,n,r,i){const o=Object(kc.a)("item",{nick:e.get("nick"),role:t}),s=Object(kc.b)({to:this.get("jid"),type:"set"}).c("query",{xmlns:kc.e.NS.MUC_ADMIN}).cnode(o.node);return null!==n&&s.c("reason",n),Vc.sendIQ(s).then(r).catch(i)},getOccupant(e){return Kl.isValidJID(e)?this.getOccupantByJID(e):this.getOccupantByNickname(e)},getOccupantsWithRole(e){return this.getOccupantsSortedBy("nick").filter(t=>t.get("role")===e).map(e=>({jid:e.get("jid"),nick:e.get("nick"),role:e.get("role")}))},getOccupantsWithAffiliation(e){return this.getOccupantsSortedBy("nick").filter(t=>t.get("affiliation")===e).map(e=>({jid:e.get("jid"),nick:e.get("nick"),affiliation:e.get("affiliation")}))},getOccupantsSortedBy(e){return Array.from(this.occupants.models).sort((t,n)=>t.get(e)<n.get(e)?-1:t.get(e)>n.get(e)?1:0)},async getAffiliationList(e){const t=Object(kc.b)({to:this.get("jid"),type:"get"}).c("query",{xmlns:kc.e.NS.MUC_ADMIN}).c("item",{affiliation:e}),n=await Vc.sendIQ(t,null,!1);if(null===n){const t="Error: timeout while fetching ".concat(e," list for MUC ").concat(this.get("jid")),r=new Error(t);return zn.warn(t),zn.warn(n),r}if(Kl.isErrorStanza(n)){const t="Error: not allowed to fetch ".concat(e," list for MUC ").concat(this.get("jid")),r=new Error(t);return zn.warn(t),zn.warn(n),r}return Vl.parseMemberListIQ(n).filter(e=>e).sort((e,t)=>e.nick<t.nick?-1:e.nick>t.nick?1:0)},async updateMemberLists(e){const t=(await Promise.all(["member","admin","owner"].map(e=>this.getAffiliationList(e)))).reduce((e,t)=>Kl.isErrorObject(t)?e:[...t,...e],[]);await this.setAffiliations(Vl.computeAffiliationsDelta(!0,!1,e,t)),await this.occupants.fetchMembers()},async getAndPersistNickname(e){return(e=e||this.get("nick")||await this.getReservedNick()||Uc.getDefaultMUCNickname())&&this.save({nick:e},{silent:!0}),e},async getReservedNick(){const e=Object(kc.b)({to:this.get("jid"),from:Uc.connection.jid,type:"get"}).c("query",{xmlns:kc.e.NS.DISCO_INFO,node:"x-roomuser-item"}),t=await Vc.sendIQ(e,null,!1);if(Kl.isErrorObject(t))throw t;const n=t.querySelector('query[node="x-roomuser-item"] identity');return n?n.getAttribute("name"):null},async registerNickname(){const e=Uc.__,t=this.get("nick"),n=this.get("jid");let r,i;try{r=await Vc.sendIQ(Object(kc.b)({to:n,from:Uc.connection.jid,type:"get"}).c("query",{xmlns:kc.e.NS.MUC_REGISTER}))}catch(t){return mr()('not-allowed[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),t).length?i=e("You're not allowed to register yourself in this groupchat."):mr()('registration-required[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),t).length&&(i=e("You're not allowed to register in this groupchat because it's members-only.")),zn.error(t),i}const o=mr()("field required",r).map(e=>e.parentElement);if(o.length>1&&"muc#register_roomnick"!==o[0].getAttribute("var"))return zn.error("Can't register the user register in the groupchat ".concat(n," due to the required fields"));try{await Vc.sendIQ(Object(kc.b)({to:n,from:Uc.connection.jid,type:"set"}).c("query",{xmlns:kc.e.NS.MUC_REGISTER}).c("x",{xmlns:kc.e.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#register").up().up().c("field",{var:"muc#register_roomnick"}).c("value").t(t))}catch(t){return mr()('service-unavailable[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),t).length?i=e("Can't register your nickname in this groupchat, it doesn't support registration."):mr()('bad-request[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),t).length&&(i=e("Can't register your nickname in this groupchat, invalid data form supplied.")),zn.error(i),zn.error(t),i}},updateOccupantsOnPresence(e){var t,n;const r=ps.parseMUCPresence(e);if("error"===r.type||!r.jid&&!r.nick)return!0;const i=this.occupants.findOccupant(r);if("unavailable"===r.type&&i&&!r.states.includes(rl.MUC_NICK_CHANGED_CODE)&&!["admin","owner","member"].includes(r.affiliation))return i.set(r),void i.destroy();const o=r.jid||"",s=Object.assign(r,{jid:kc.e.getBareJidFromJid(o)||(null==i||null===(t=i.attributes)||void 0===t?void 0:t.jid),resource:kc.e.getResourceFromJid(o)||(null==i||null===(n=i.attributes)||void 0===n?void 0:n.resource)});i?i.save(s):this.occupants.create(s)},fetchFeaturesIfConfigurationChanged(e){const t=["104","170","171","172","173","174"];mr()("status",e).filter(e=>t.includes(e.getAttribute("status"))).length&&this.refreshDiscoInfo()},isSameUser(e,t){const n=kc.e.getBareJidFromJid(e),r=kc.e.getBareJidFromJid(t),i=kc.e.getResourceFromJid(e),o=kc.e.getResourceFromJid(t);if(Kl.isSameBareJID(e,t))return n!==this.get("jid")||i===o;return(n===this.get("jid")?this.occupants.findOccupant({nick:i}):this.occupants.findOccupant({jid:n}))===(r===this.get("jid")?this.occupants.findOccupant({nick:o}):this.occupants.findOccupant({jid:r}))},async isSubjectHidden(){return(await Vc.user.settings.get("mucs_with_hidden_subject",[])).includes(this.get("jid"))},async toggleSubjectHiddenState(){const e=this.get("jid"),t=await Vc.user.settings.get("mucs_with_hidden_subject",[]);t.includes(this.get("jid"))?Vc.user.settings.set("mucs_with_hidden_subject",t.filter(t=>t!==e)):Vc.user.settings.set("mucs_with_hidden_subject",[...t,e])},async handleSubjectChange(e){const t=Uc.__;if("string"==typeof e.subject&&!e.thread&&!e.message){const n=e.subject,r=e.nick;if(Kl.safeSave(this,{subject:{author:r,text:e.subject||""}}),!e.is_delayed&&r){const i=t(n?"Topic set by %1$s":"Topic cleared by %1$s",r),o=this.messages.last();(null==o?void 0:o.get("nick"))===e.nick&&"info"===(null==o?void 0:o.get("type"))&&(null==o?void 0:o.get("message"))===i||this.createMessage({message:i,nick:e.nick,type:"info"}),await this.isSubjectHidden()&&this.toggleSubjectHiddenState()}return!0}return!1},setSubject(e=""){Vc.send(Object(kc.c)({to:this.get("jid"),from:Uc.connection.jid,type:"groupchat"}).c("subject",{xmlns:"jabber:client"}).t(e).tree())},ignorableCSN(e){return e.chat_state&&!e.body&&(e.is_delayed||this.isOwnMessage(e))},isOwnMessage(e){let t;return t=Dn(e)?e.getAttribute("from"):e instanceof Uc.Message?e.get("from"):e.from,kc.e.getResourceFromJid(t)==this.get("nick")},getUpdatedMessageAttributes(e,t){const n=Uc.ChatBox.prototype.getUpdatedMessageAttributes.call(this,e,t);if(this.isOwnMessage(t)){const r=Object.keys(t).filter(e=>e.startsWith("stanza_id"));Object.assign(n,Bo(t,r)),e.get("received")||(n.received=(new Date).toISOString())}return n},async isJoined(){const e=this.get("jid"),t=Object(kc.b)({to:"".concat(e,"/").concat(this.get("nick")),type:"get"}).c("ping",{xmlns:kc.e.NS.PING});try{await Vc.sendIQ(t)}catch(t){return null===t?zn.warn("isJoined: Timeout error while checking whether we're joined to MUC: ".concat(e)):zn.warn("isJoined: Apparently we're no longer connected to MUC: ".concat(e)),!1}return!0},async rejoinIfNecessary(){if(!await this.isJoined())return this.rejoin(),!0},async shouldShowErrorMessage(e){return("not-acceptable"!==e.error_condition||!await this.rejoinIfNecessary())&&Uc.ChatBox.prototype.shouldShowErrorMessage.call(this,e)},findDanglingModeration(e){if(!this.messages.length)return null;if(this.messages.last().get("time")>e.time){const t=Array.from(this.messages.models),n=e["stanza_id ".concat(this.get("jid"))];return n?(t.reverse(),t.find(({attributes:e})=>"retracted"===e.moderated&&e.moderated_id===n&&e.moderated_by)):null}},async handleModeration(e){const t=["editable","moderated","moderated_by","moderated_id","moderation_reason"];if("retracted"===e.moderated){const n={};n["stanza_id ".concat(this.get("jid"))]=e.moderated_id;const r=this.messages.findWhere(n);return r?(r.save(Bo(e,t)),!0):(e.dangling_moderation=!0,await this.createMessage(e),!0)}{const n=this.findDanglingModeration(e);if(n){const r=Bo(n.attributes,t),i=Object.assign({dangling_moderation:!1},e,r);return delete i.id,n.save(i),!0}}return!1},removeNotification(e,t){const n=this.notifications.toJSON();(t=Array.isArray(t)?t:[t]).forEach(t=>{const r=Array.from(n[t]||[]);if(r.includes(e)){const n=r.indexOf(e);r.splice(n,1),this.notifications.set(t,Array.from(r))}})},updateNotifications(e,t){const n=this.notifications.toJSON(),r=n[t]||[];if(r.includes(e))return;const i=(i,o)=>(i[o]=o===t?[...r,e]:(n[o]||[]).filter(t=>t!==e),i),o=rl.CHAT_STATES.reduce(i,{}),s=rl.MUC_TRAFFIC_STATES_LIST.reduce(i,{}),a=rl.MUC_ROLE_CHANGES_LIST.reduce(i,{});this.notifications.set(Object.assign(o,s,a)),window.setTimeout(()=>this.removeNotification(e,t),1e4)},async onMessage(e){if(e=await e,Kl.isErrorObject(e))return e.stanza&&zn.error(e.stanza),zn.error(e.message);const t=this.getDuplicateMessage(e);if(t)return this.updateMessage(t,e);if(!(e.is_valid_receipt_request||e.is_marker||this.ignorableCSN(e))){if(await this.handleRetraction(e)||await this.handleModeration(e)||await this.handleSubjectChange(e))return this.removeNotification(e.nick,["composing","paused"]);if(this.setEditable(e,e.time),e.chat_state&&this.updateNotifications(e.nick,e.chat_state),Kl.shouldCreateGroupchatMessage(e)){const t=this.handleCorrection(e)||await this.createMessage(e);this.removeNotification(e.nick,["composing","paused"]),this.handleUnreadMessage(t)}}},handleModifyError(e){var t;const n=null===(t=e.querySelector("error text"))||void 0===t?void 0:t.textContent;if(n)if(this.session.get("connection_status")===rl.ROOMSTATUS.CONNECTING)this.setDisconnectionMessage(n);else{const e={type:"error",message:n,is_ephemeral:!0};this.createMessage(e)}},handleDisconnection(e){var t;const n=null!==e.querySelector("status[code='110']"),r=mr()('x[xmlns="'.concat(kc.e.NS.MUC_USER,'"]'),e).pop();if(!r)return;const i=mr()("status",r).map(e=>e.getAttribute("code")),o=iu(i,Object.keys(Uc.muc.disconnect_messages));if(!(n&&o.length>0))return;const s=r.querySelector("item"),a=s?null===(t=s.querySelector("reason"))||void 0===t?void 0:t.textContent:void 0,c=s?Pc(s.querySelector("actor"),"getAttribute","nick"):void 0,l=Uc.muc.disconnect_messages[o[0]];this.setDisconnectionMessage(l,a,c)},getActionInfoMessage(e,t,n){const r=Uc.__;return"301"===e?n?r("%1$s has been banned by %2$s",t,n):r("%1$s has been banned",t):"303"===e?r("%1$s's nickname has changed",t):"307"===e?n?r("%1$s has been kicked out by %2$s",t,n):r("%1$s has been kicked out",t):"321"===e?r("%1$s has been removed because of an affiliation change",t):"322"===e?r("%1$s has been removed for not being a member",t):void 0},createAffiliationChangeMessage(e){const t=Uc.__,n=e._previousAttributes.affiliation;if(!n)return;const r=e.get("affiliation");"admin"===n&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.EXADMIN)?this.createMessage({type:"info",message:t("%1$s is no longer an admin of this groupchat",e.get("nick"))}):"owner"===n&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.EXOWNER)?this.createMessage({type:"info",message:t("%1$s is no longer an owner of this groupchat",e.get("nick"))}):"outcast"===n&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.EXOUTCAST)&&this.createMessage({type:"info",message:t("%1$s is no longer banned from this groupchat",e.get("nick"))}),"none"===r&&"member"===n&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.EXMEMBER)&&this.createMessage({type:"info",message:t("%1$s is no longer a member of this groupchat",e.get("nick"))}),"member"===r&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.MEMBER)?this.createMessage({type:"info",message:t("%1$s is now a member of this groupchat",e.get("nick"))}):("admin"===r&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.ADMIN)||"owner"==r&&Uc.isInfoVisible(rl.AFFILIATION_CHANGES.OWNER))&&this.createMessage({type:"info",message:t("%1$s is now an %2$s of this groupchat",e.get("nick"),r)})},createRoleChangeMessage(e,t){if("none"===t||e.changed.affiliation)return;const n=e._previousAttributes.role;"moderator"===n&&Uc.isInfoVisible(rl.MUC_ROLE_CHANGES.DEOP)?this.updateNotifications(e.get("nick"),rl.MUC_ROLE_CHANGES.DEOP):"visitor"===n&&Uc.isInfoVisible(rl.MUC_ROLE_CHANGES.VOICE)&&this.updateNotifications(e.get("nick"),rl.MUC_ROLE_CHANGES.VOICE),"visitor"===e.get("role")&&Uc.isInfoVisible(rl.MUC_ROLE_CHANGES.MUTE)?this.updateNotifications(e.get("nick"),rl.MUC_ROLE_CHANGES.MUTE):"moderator"===e.get("role")&&!["owner","admin"].includes(e.get("affiliation"))&&Uc.isInfoVisible(rl.MUC_ROLE_CHANGES.OP)&&this.updateNotifications(e.get("nick"),rl.MUC_ROLE_CHANGES.OP)},createInfoMessage(e,t,n){const r=Uc.__,i={type:"info"};if(Uc.isInfoVisible(e)&&"110"!==e&&("100"!==e||n)){if(e in Uc.muc.info_messages)i.message=Uc.muc.info_messages[e];else if(!n&&ou.includes(e)){var o,s;const n=kc.e.getResourceFromJid(t.getAttribute("from")),r=t.querySelector('x[xmlns="'.concat(kc.e.NS.MUC_USER,'"] item'));i.actor=r?null===(o=r.querySelector("actor"))||void 0===o?void 0:o.getAttribute("nick"):void 0,i.reason=r?null===(s=r.querySelector("reason"))||void 0===s?void 0:s.textContent:void 0,i.message=this.getActionInfoMessage(e,n,i.actor)}else if(n&&e in Uc.muc.new_nickname_messages){let o;n&&"210"===e?o=kc.e.getResourceFromJid(t.getAttribute("from")):n&&"303"===e&&(o=t.querySelector('x[xmlns="'.concat(kc.e.NS.MUC_USER,'"] item')).getAttribute("nick")),this.save("nick",o),i.message=r(Uc.muc.new_nickname_messages[e],o)}if(i.message){if("201"===e&&this.messages.findWhere(i))return;if(e in Uc.muc.info_messages&&this.messages.length&&this.messages.pop().get("message")===i.message)return;this.createMessage(i)}}},createInfoMessages(e){const t=mr()('x[xmlns="'.concat(kc.e.NS.MUC_USER,'"] status'),e).map(e=>e.getAttribute("code"));t.includes("333")&&t.includes("307")&&t.splice(t.indexOf("307"),1);const n=t.includes("110");t.forEach(t=>this.createInfoMessage(t,e,n))},setDisconnectionMessage(e,t,n){this.save({disconnection_message:e,disconnection_reason:t,disconnection_actor:n}),this.session.save({connection_status:rl.ROOMSTATUS.DISCONNECTED})},onNicknameClash(e){const t=Uc.__;if(Vc.settings.get("muc_nickname_from_jid")){const t=e.getAttribute("from").split("/")[1];if(t===Uc.getDefaultMUCNickname())this.join(t+"-2");else{const e=t.lastIndexOf("-"),n=t.substring(e+1,t.length);this.join(t.substring(0,e+1)+String(Number(n)+1))}}else this.save({nickname_validation_message:t("The nickname you chose is reserved or currently in use, please choose a different one.")}),this.session.save({connection_status:rl.ROOMSTATUS.NICKNAME_REQUIRED})},onErrorPresence(e){var t;const n=Uc.__,r=e.querySelector("error"),i=r.getAttribute("type"),o=null===(t=mr()('text[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),r).pop())||void 0===t?void 0:t.textContent;if("modify"===i)this.handleModifyError(e);else if("auth"===i){if(mr()('not-authorized[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),r).length&&(this.save({password_validation_message:o||n("Password incorrect")}),this.session.save({connection_status:rl.ROOMSTATUS.PASSWORD_REQUIRED})),r.querySelector("registration-required")){const e=n("You are not on the member list of this groupchat.");this.setDisconnectionMessage(e,o)}else if(r.querySelector("forbidden")){const e=n("You have been banned from this groupchat.");this.setDisconnectionMessage(e,o)}}else if("cancel"===i)if(r.querySelector("not-allowed")){const e=n("You are not allowed to create new groupchats.");this.setDisconnectionMessage(e,o)}else if(r.querySelector("not-acceptable")){const e=n("Your nickname doesn't conform to this groupchat's policies.");this.setDisconnectionMessage(e,o)}else if(mr()('gone[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),r).length){var s;const e=null===(s=mr()('gone[xmlns="'.concat(kc.e.NS.STANZAS,'"]'),r).pop())||void 0===s?void 0:s.textContent.replace(/^xmpp:/,"").replace(/\?join$/,"");this.save({moved_jid:e,destroyed_reason:o}),this.session.save({connection_status:rl.ROOMSTATUS.DESTROYED})}else if(r.querySelector("conflict"))this.onNicknameClash(e);else if(r.querySelector("item-not-found")){const e=n("This groupchat does not (yet) exist.");this.setDisconnectionMessage(e,o)}else if(r.querySelector("service-unavailable")){const e=n("This groupchat has reached its maximum number of participants.");this.setDisconnectionMessage(e,o)}else if(r.querySelector("remote-server-not-found")){const e=n("Remote server not found"),t=o?n('The explanation given is: "%1$s".',o):void 0;this.setDisconnectionMessage(e,t)}},onPresence(e){if("error"===e.getAttribute("type"))return this.onErrorPresence(e);this.createInfoMessages(e),e.querySelector("status[code='110']")?(this.onOwnPresence(e),"none"!==this.getOwnRole()&&this.session.get("connection_status")===rl.ROOMSTATUS.CONNECTING&&this.session.save("connection_status",rl.ROOMSTATUS.CONNECTED)):this.updateOccupantsOnPresence(e)},onOwnPresence(e){if("unavailable"!==e.getAttribute("type")){const t=this.session.get("connection_status");t!==rl.ROOMSTATUS.ENTERED?(this.session.save("connection_status",rl.ROOMSTATUS.ENTERED,{silent:!0}),this.updateOccupantsOnPresence(e),this.session.trigger("change:connection_status",this.session,t)):this.updateOccupantsOnPresence(e)}else this.updateOccupantsOnPresence(e);if("unavailable"===e.getAttribute("type"))this.handleDisconnection(e);else{if(e.querySelector("status[code='201']"))if(this.get("auto_configure"))this.autoConfigureChatRoom().then(()=>this.refreshDiscoInfo());else{if(!Vc.settings.get("muc_instant_rooms"))return void this.trigger("configurationNeeded");this.sendConfiguration().then(()=>this.refreshDiscoInfo())}else this.features.get("fetched")||("owner"===this.getOwnAffiliation()&&this.get("auto_configure")?this.autoConfigureChatRoom().then(()=>this.refreshDiscoInfo()):this.getDiscoInfo())}this.session.save({connection_status:rl.ROOMSTATUS.ENTERED})},isUserMentioned(e){const t=this.get("nick");if(e.get("references").length){return e.get("references").filter(e=>"mention"===e.type).map(e=>e.value).includes(t)}return new RegExp("\\b".concat(t,"\\b")).test(e.get("message"))},handleUnreadMessage(e){if((null==e?void 0:e.get("body"))&&Kl.isNewMessage(e))if(this.isHidden()){const t={num_unread_general:this.get("num_unread_general")+1};0===this.get("num_unread_general")&&(t.first_unread_id=e.get("id")),this.isUserMentioned(e)&&(t.num_unread=this.get("num_unread")+1),this.save(t)}else this.sendMarkerForMessage(e)},clearUnreadMsgCounter(){(this.get("num_unread_general")>0||this.get("num_unread")>0)&&this.sendMarkerForMessage(this.messages.last()),Kl.safeSave(this,{num_unread:0,num_unread_general:0})}};var cu=qo.extend({defaults:{hats:[],show:"offline",states:[]},initialize(e){this.set(Object.assign({id:Kl.getUniqueId()},e)),this.on("change:image_hash",this.onAvatarChanged,this)},onAvatarChanged(){const e=this.get("image_hash"),t=[];this.get("jid")&&t.push(Uc.vcards.findWhere({jid:this.get("jid")})),t.push(Uc.vcards.findWhere({jid:this.get("from")})),t.filter(e=>e).forEach(t=>{e&&t.get("image_hash")!==e&&Vc.vcard.update(t,!0)})},getDisplayName(){return this.get("nick")||this.get("jid")},isMember(){return["admin","owner","member"].includes(this.get("affiliation"))},isModerator(){return["admin","owner"].includes(this.get("affiliation"))||"moderator"===this.get("role")},isSelf(){return this.get("states").includes("110")}});const lu={moderator:1,participant:2,visitor:3,none:2};var uu=ra.extend({model:cu,comparator(e,t){const n=e.get("role")||"none",r=t.get("role")||"none";if(lu[n]===lu[r]){const n=e.getDisplayName().toLowerCase(),r=t.getDisplayName().toLowerCase();return n<r?-1:n>r?1:0}return lu[n]<lu[r]?-1:1},getAutoFetchedAffiliationLists(){const e=Vc.settings.get("muc_fetch_members");return Array.isArray(e)?e:e?["member","admin","owner"]:[]},async fetchMembers(){const e=this.getAutoFetchedAffiliationLists();if(0===e.length)return;const t=await Promise.all(e.map(e=>this.chatroom.getAffiliationList(e))),n=t.reduce((e,t)=>Kl.isErrorObject(t)?e:[...t,...e],[]),r=e.filter(n=>!Kl.isErrorObject(t[e.indexOf(n)])),i=n.map(e=>e.jid).filter(e=>void 0!==e),o=n.map(e=>!e.jid&&e.nick||void 0).filter(e=>void 0!==e);this.filter(e=>r.includes(e.get("affiliation"))&&!o.includes(e.get("nick"))&&!i.includes(e.get("jid"))).forEach(e=>{e.get("jid")!==Uc.bare_jid&&("offline"===e.get("show")?e.destroy():e.save("affiliation",null))}),n.forEach(e=>{const t=e.jid?this.findOccupant({jid:e.jid}):this.findOccupant({nick:e.nick});t?t.save(e):this.create(e)}),Vc.trigger("membersFetched")},findOccupant(e){const t=kc.e.getBareJidFromJid(e.jid);return t&&this.findWhere({jid:t})||this.findWhere({nick:e.nick})}}),du={rooms:{create(e,t={}){if(!(t="string"==typeof t?{nick:t}:t||{}).nick&&Vc.settings.get("muc_nickname_from_jid")&&(t.nick=kc.e.getNodeFromJid(Uc.bare_jid)),void 0===e)throw new TypeError("rooms.create: You need to provide at least one JID");return"string"==typeof e?Vc.rooms.get(Kl.getJIDFromURI(e),t,!0):e.map(e=>Vc.rooms.get(Kl.getJIDFromURI(e),t,!0))},async open(e,t={},n=!1){if(await Vc.waitUntil("chatBoxesFetched"),void 0===e){const e="rooms.open: You need to provide at least one JID";throw zn.error(e),new TypeError(e)}if("string"==typeof e){const r=await Vc.rooms.get(e,t,!0);return r&&r.maybeShow(n),r}{const r=await Promise.all(e.map(e=>Vc.rooms.get(e,t,!0)));return r.forEach(e=>e.maybeShow(n)),r}},async get(e,t={},n=!1){async function r(e){e=Kl.getJIDFromURI(e);let r=await Vc.chatboxes.get(e);return!r&&n?r=await Vc.chatboxes.create(e,t,Uc.ChatRoom):(r=r&&r.get("type")===Uc.CHATROOMS_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await Vc.chatboxes.get()).filter(e=>e.get("type")===Uc.CHATROOMS_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}};
 /**
  * @module converse-muc
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description Implements the non-view logic for XEP-0045 Multi-User Chat
- */const Xl=["moderator","participant","visitor"],Ql=["owner","admin","member","outcast","none"];Yc.AFFILIATION_CHANGES={OWNER:"owner",ADMIN:"admin",MEMBER:"member",EXADMIN:"exadmin",EXOWNER:"exowner",EXOUTCAST:"exoutcast",EXMEMBER:"exmember"},Yc.AFFILIATION_CHANGES_LIST=Object.values(Yc.AFFILIATION_CHANGES),Yc.MUC_TRAFFIC_STATES={ENTERED:"entered",EXITED:"exited"},Yc.MUC_TRAFFIC_STATES_LIST=Object.values(Yc.MUC_TRAFFIC_STATES),Yc.MUC_ROLE_CHANGES={OP:"op",DEOP:"deop",VOICE:"voice",MUTE:"mute"},Yc.MUC_ROLE_CHANGES_LIST=Object.values(Yc.MUC_ROLE_CHANGES);const Yl=["301","303","333","307","321","322"];Yc.MUC_INFO_CODES={visibility_changes:["100","102","103","172","173","174"],self:["110"],non_privacy_changes:["104","201"],muc_logging_changes:["170","171"],nickname_changes:["210","303"],disconnect_messages:["301","307","321","322","332","333"],affiliation_changes:[...Yc.AFFILIATION_CHANGES_LIST],join_leave_events:[...Yc.MUC_TRAFFIC_STATES_LIST],role_changes:[...Yc.MUC_ROLE_CHANGES_LIST]};const Kl={moderator:1,participant:2,visitor:3,none:2},{Strophe:Zl,$iq:eu,$build:tu,$msg:nu,$pres:ru,sizzle:iu}=Yc.env;Zl.addNamespace("MUC_ADMIN",Zl.NS.MUC+"#admin"),Zl.addNamespace("MUC_OWNER",Zl.NS.MUC+"#owner"),Zl.addNamespace("MUC_REGISTER","jabber:iq:register"),Zl.addNamespace("MUC_ROOMCONF",Zl.NS.MUC+"#roomconfig"),Zl.addNamespace("MUC_USER",Zl.NS.MUC+"#user"),Zl.addNamespace("MUC_HATS","xmpp:prosody.im/protocol/hats:1"),Yc.MUC_NICK_CHANGED_CODE="303",Yc.ROOM_FEATURES=["passwordprotected","unsecured","hidden","publicroom","membersonly","open","persistent","temporary","nonanonymous","semianonymous","moderated","unmoderated","mam_enabled"],Yc.ROOMSTATUS={CONNECTED:0,CONNECTING:1,NICKNAME_REQUIRED:2,PASSWORD_REQUIRED:3,DISCONNECTED:4,ENTERED:5,DESTROYED:6},Yc.plugins.add("converse-muc",{dependencies:["converse-chatboxes","converse-chat","converse-disco","converse-controlbox"],overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e&&e.type==n.CHATROOMS_TYPE?new n.ChatRoom(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){const{__:e,___:t}=Lc;if(qc.settings.extend({allow_muc:!0,allow_muc_invitations:!0,auto_join_on_invite:!1,auto_join_rooms:[],auto_register_muc_nickname:!1,locked_muc_domain:!1,muc_domain:void 0,muc_fetch_members:!0,muc_history_max_stanzas:void 0,muc_instant_rooms:!0,muc_nickname_from_jid:!1,muc_send_probes:!1,muc_show_info_messages:[...Yc.MUC_INFO_CODES.visibility_changes,...Yc.MUC_INFO_CODES.self,...Yc.MUC_INFO_CODES.non_privacy_changes,...Yc.MUC_INFO_CODES.muc_logging_changes,...Yc.MUC_INFO_CODES.nickname_changes,...Yc.MUC_INFO_CODES.disconnect_messages,...Yc.MUC_INFO_CODES.affiliation_changes,...Yc.MUC_INFO_CODES.join_leave_events,...Yc.MUC_INFO_CODES.role_changes],muc_show_logs_before_join:!1}),qc.promises.add(["roomsAutoJoined"]),qc.settings.get("locked_muc_domain")&&"string"!=typeof qc.settings.get("muc_domain"))throw new Error("Config Error: it makes no sense to set locked_muc_domain to true when muc_domain is not set");Lc.muc={info_messages:{100:e("This groupchat is not anonymous"),102:e("This groupchat now shows unavailable members"),103:e("This groupchat does not show unavailable members"),104:e("The groupchat configuration has changed"),170:e("Groupchat logging is now enabled"),171:e("Groupchat logging is now disabled"),172:e("This groupchat is now no longer anonymous"),173:e("This groupchat is now semi-anonymous"),174:e("This groupchat is now fully-anonymous"),201:e("A new groupchat has been created")},new_nickname_messages:{210:t("Your nickname has been automatically set to %1$s"),303:t("Your nickname has been changed to %1$s")},disconnect_messages:{301:e("You have been banned from this groupchat"),333:e("You have exited this groupchat due to a technical problem"),307:e("You have been kicked from this groupchat"),321:e("You have been removed from this groupchat because of an affiliation change"),322:e("You have been removed from this groupchat because the groupchat has changed to members-only and you're not a member"),332:e("You have been removed from this groupchat because the service hosting it is being shut down")}},Lc.isInfoVisible=function(e){return!!qc.settings.get("muc_show_info_messages").includes(e)},Lc.router.route("converse/room?jid=:jid",(async function(e){if(!Fl.isValidMUCJID(e))return Pn.warn('invalid jid "'.concat(e,'" provided in url fragment'));await qc.waitUntil("roomsAutoJoined"),qc.settings.get("allow_bookmarks")&&await qc.waitUntil("bookmarksInitialized"),qc.rooms.open(e)})),Lc.getDefaultMUCNickname=function(){if(!Lc.xmppstatus)throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired.");const e=Lc.xmppstatus.getNickname();return e||(qc.settings.get("muc_nickname_from_jid")?Zl.unescapeNode(Zl.getNodeFromJid(Lc.bare_jid)):void 0)},Lc.ChatRoomMessage=Lc.Message.extend({initialize(){this.checkValidity()&&(this.get("file")&&this.on("change:put",this.uploadFile,this),this.setTimerForEphemeralMessage()||this.setOccupant(),qc.trigger("chatRoomMessageInitialized",this))},mayBeModerated(){return["all","moderator"].includes(qc.settings.get("allow_message_retraction"))&&this.collection.chatbox.canModerateMessages()},checkValidity(){const e=Lc.Message.prototype.checkValidity.call(this);return!e&&this.collection.chatbox.debouncedRejoin(),e},onOccupantRemoved(){var e;this.stopListening(this.occupant),delete this.occupant;const t=null==this||null===(e=this.collection)||void 0===e?void 0:e.chatbox;if(!t)return Pn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));this.listenTo(t.occupants,"add",this.onOccupantAdded)},onOccupantAdded(e){if(e.get("nick")===Zl.getResourceFromJid(this.get("from"))){var t;this.occupant=e,this.trigger("occupantAdded"),this.listenTo(this.occupant,"destroy",this.onOccupantRemoved);const n=null==this||null===(t=this.collection)||void 0===t?void 0:t.chatbox;if(!n)return Pn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));this.stopListening(n.occupants,"add",this.onOccupantAdded)}},setOccupant(){var e;if("groupchat"!==this.get("type"))return;const t=null==this||null===(e=this.collection)||void 0===e?void 0:e.chatbox;if(!t)return Pn.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON())));const n=Zl.getResourceFromJid(this.get("from"));if(this.occupant=t.occupants.findWhere({nick:n}),!this.occupant&&qc.settings.get("muc_send_probes")){this.occupant=t.occupants.create({nick:n,type:"unavailable"});const e="".concat(t.get("jid"),"/").concat(n);qc.user.presence.send("probe",e)}this.occupant?this.listenTo(this.occupant,"destroy",this.onOccupantRemoved):this.listenTo(t.occupants,"add",this.onOccupantAdded)}});const n=Rs.extend({defaults:()=>({connection_status:Yc.ROOMSTATUS.DISCONNECTED})});if(Lc.ChatRoomMessages=Yo.extend({model:Lc.ChatRoomMessage,comparator:"time"}),Lc.ChatRoom=Lc.ChatBox.extend({messagesCollection:Lc.ChatRoomMessages,defaults(){return{num_unread_general:0,bookmarked:!1,chat_state:void 0,hidden:Lc.isUniView()&&!qc.settings.get("singleton"),message_type:"groupchat",name:"",num_unread:0,roomconfig:{},time_opened:this.get("time_opened")||(new Date).getTime(),time_sent:new Date(0).toISOString(),type:Lc.CHATROOMS_TYPE}},async initialize(){this.initialized=Fl.getResolveablePromise(),this.debouncedRejoin=Tc(this.rejoin,250),this.set("box_id","box-".concat(this.get("jid"))),this.initNotifications(),this.initMessages(),this.initOccupants(),this.initDiscoModels(),this.registerHandlers(),this.on("change:chat_state",this.sendChatState,this),await this.restoreSession(),this.session.on("change:connection_status",this.onConnectionStatusChanged,this),this.listenTo(this.occupants,"add",this.onOccupantAdded),this.listenTo(this.occupants,"remove",this.onOccupantRemoved),this.listenTo(this.occupants,"change:show",this.onOccupantShowChanged),this.listenTo(this.occupants,"change:affiliation",this.createAffiliationChangeMessage),this.listenTo(this.occupants,"change:role",this.createRoleChangeMessage),await this.restoreFromCache()||this.join(),await qc.trigger("chatRoomInitialized",this,{Synchronous:!0}),this.initialized.resolve()},async restoreFromCache(){return this.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED&&await this.isJoined()?(await new Promise(e=>this.features.fetch({success:e,error:e})),await this.fetchOccupants(),await this.fetchMessages(),!0):(await this.clearCache(),!1)},async join(e,t){if(this.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED)return this;if(await this.refreshDiscoInfo(),!(e=await this.getAndPersistNickname(e)))return Fl.safeSave(this.session,{connection_status:Yc.ROOMSTATUS.NICKNAME_REQUIRED}),qc.settings.get("muc_show_logs_before_join")&&await this.fetchMessages(),this;const n=ru({from:Lc.connection.jid,to:this.getRoomJIDAndNick()}).c("x",{xmlns:Zl.NS.MUC}).c("history",{maxstanzas:this.features.get("mam_enabled")?0:qc.settings.get("muc_history_max_stanzas")}).up();return(t=t||this.get("password"))&&n.cnode(Zl.xmlElement("password",[],t)),this.session.save("connection_status",Yc.ROOMSTATUS.CONNECTING),qc.send(n),this},async fetchMessages(){await Lc.ChatBox.prototype.fetchMessages.call(this);const e=this.message_queue.map(e=>this.queueMessage(e));return this.message_queue=[],Promise.all(e)},async clearCache(){this.session.save("connection_status",Yc.ROOMSTATUS.DISCONNECTED),this.occupants.length?this.occupants.filter(e=>!e.isMember()).forEach(e=>e.destroy()):this.occupants.clearStore(),qc.settings.get("clear_messages_on_reconnection")&&await this.clearMessages()},onOccupantAdded(e){Lc.isInfoVisible(Yc.MUC_TRAFFIC_STATES.ENTERED)&&this.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED&&"online"===e.get("show")&&this.updateNotifications(e.get("nick"),Yc.MUC_TRAFFIC_STATES.ENTERED)},onOccupantRemoved(e){Lc.isInfoVisible(Yc.MUC_TRAFFIC_STATES.EXITED)&&this.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED&&"online"===e.get("show")&&this.updateNotifications(e.get("nick"),Yc.MUC_TRAFFIC_STATES.EXITED)},onOccupantShowChanged(e){e.get("states").includes("303")||("offline"===e.get("show")&&Lc.isInfoVisible(Yc.MUC_TRAFFIC_STATES.EXITED)?this.updateNotifications(e.get("nick"),Yc.MUC_TRAFFIC_STATES.EXITED):"online"===e.get("show")&&Lc.isInfoVisible(Yc.MUC_TRAFFIC_STATES.ENTERED)&&this.updateNotifications(e.get("nick"),Yc.MUC_TRAFFIC_STATES.ENTERED))},rejoin(){return this.clearCache(),this.join()},initMessages(){this.message_queue=[],Lc.ChatBox.prototype.initMessages.call(this)},async onConnectionStatusChanged(){this.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED&&(await this.occupants.fetchMembers(),await this.fetchMessages(),qc.trigger("enteredNewRoom",this),qc.settings.get("auto_register_muc_nickname")&&await qc.disco.supports(Zl.NS.MUC_REGISTER,this.get("jid"))&&this.registerNickname())},async onReconnection(){this.registerHandlers(),await this.rejoin(),this.announceReconnection()},restoreSession(){const e="muc.session-".concat(Lc.bare_jid,"-").concat(this.get("jid"));return this.session=new n({id:e}),this.session.browserStorage=Lc.createStore(e,"session"),new Promise(e=>this.session.fetch({success:e,error:e}))},initDiscoModels(){let e="converse.muc-features-".concat(Lc.bare_jid,"-").concat(this.get("jid"));this.features=new Rs(Object.assign({id:e},Nl(Yc.ROOM_FEATURES,Yc.ROOM_FEATURES.map(()=>!1)))),this.features.browserStorage=Lc.createStore(e,"session"),e="converse.muc-config-{_converse.bare_jid}-".concat(this.get("jid")),this.config=new Rs,this.config.browserStorage=Lc.createStore(e,"session")},initOccupants(){this.occupants=new Lc.ChatRoomOccupants;const e="converse.occupants-".concat(Lc.bare_jid).concat(this.get("jid"));this.occupants.browserStorage=Lc.createStore(e,"session"),this.occupants.chatroom=this},fetchOccupants(){return this.occupants.fetched=new Promise(e=>{this.occupants.fetch({add:!0,silent:!0,success:e,error:e})}),this.occupants.fetched},handleAffiliationChangedMessage(e){const t=iu('x[xmlns="'.concat(Zl.NS.MUC_USER,'"] item'),e).pop();if(t){const n=e.getAttribute("from"),r=e.getAttribute("type"),i=t.getAttribute("affiliation"),s=t.getAttribute("jid"),o={from:n,type:r,affiliation:i,nick:Zl.getNodeFromJid(s),states:[],show:"unavailable"==r?"offline":"online",role:t.getAttribute("role"),jid:Zl.getBareJidFromJid(s),resource:Zl.getResourceFromJid(s)},a=this.occupants.findOccupant({jid:o.jid});a?a.save(o):this.occupants.create(o)}},async handleErrorMessageStanza(t){const n=await ao.parseMUCMessage(t,this,Lc);if(!await this.shouldShowErrorMessage(n))return;const r=this.getMessageReferencedByError(n);if(r){const t={error:n.error,error_condition:n.error_condition,error_text:n.error_text,error_type:n.error_type,editable:!1};n.msgid===r.get("retraction_id")?(t.retraction_id=void 0,n.error||("forbidden"===n.error_condition?t.error=e("You're not allowed to retract your message."):"not-acceptable"===n.error_condition?t.error=e("Your retraction was not delivered because you're not present in the groupchat."):t.error=e("Sorry, an error occurred while trying to retract your message."))):n.error||("forbidden"===n.error_condition?t.error=e("Your message was not delivered because you weren't allowed to send it."):"not-acceptable"===n.error_condition?t.error=e("Your message was not delivered because you're not present in the groupchat."):t.error=e("Sorry, an error occurred while trying to send your message.")),r.save(t)}else this.createMessage(n)},async handleMessageStanza(e){if(ao.isArchived(e))return Pn.warn('Received a MAM message with type "groupchat"');this.createInfoMessages(e),this.fetchFeaturesIfConfigurationChanged(e);const t=await ao.parseMUCMessage(e,this,Lc),n={stanza:e,attrs:t,chatbox:this};return qc.trigger("message",n),t&&this.queueMessage(t)},registerHandlers(){const e=this.get("jid");this.removeHandlers(),this.presence_handler=Lc.connection.addHandler(e=>this.onPresence(e)||!0,null,"presence",null,null,e,{ignoreNamespaceFragment:!0,matchBareFromJid:!0}),this.message_handler=Lc.connection.addHandler(e=>!!this.handleMessageStanza(e)||!0,null,"message","groupchat",null,e,{matchBareFromJid:!0}),this.affiliation_message_handler=Lc.connection.addHandler(e=>this.handleAffiliationChangedMessage(e)||!0,Zl.NS.MUC_USER,"message",null,null,e)},removeHandlers(){return this.message_handler&&(Lc.connection&&Lc.connection.deleteHandler(this.message_handler),delete this.message_handler),this.presence_handler&&(Lc.connection&&Lc.connection.deleteHandler(this.presence_handler),delete this.presence_handler),this.affiliation_message_handler&&(Lc.connection&&Lc.connection.deleteHandler(this.affiliation_message_handler),delete this.affiliation_message_handler),this},invitesAllowed(){return qc.settings.get("allow_muc_invitations")&&(this.features.get("open")||"owner"===this.getOwnAffiliation())},getDisplayName(){const e=this.get("name");return e||("hidden"===qc.settings.get("locked_muc_domain")?Zl.getNodeFromJid(this.get("jid")):this.get("jid"))},sendTimedMessage(e){"function"==typeof e.tree&&(e=e.tree());let t=e.getAttribute("id");t||(t=this.getUniqueId("sendIQ"),e.setAttribute("id",t));const n=Fl.getResolveablePromise(),r=Lc.connection.addTimedHandler(Lc.STANZA_TIMEOUT,()=>(Lc.connection.deleteHandler(i),n.reject(new Lc.TimeoutError("Timeout Error: No response from server")),!1)),i=Lc.connection.addHandler(e=>{r&&Lc.connection.deleteTimedHandler(r),"groupchat"===e.getAttribute("type")?n.resolve(e):n.reject(e)},null,"message",["error","groupchat"],t);return qc.send(e),n},async retractOwnMessage(t){const n=t.get("origin_id");if(!n)throw new Error("Can't retract message without a XEP-0359 Origin ID");const r=t.get("editable"),i=nu({id:Fl.getUniqueId(),to:this.get("jid"),type:"groupchat"}).c("store",{xmlns:Zl.NS.HINTS}).up().c("apply-to",{id:n,xmlns:Zl.NS.FASTEN}).c("retract",{xmlns:Zl.NS.RETRACT});t.set({retracted:(new Date).toISOString(),retracted_id:n,retraction_id:i.nodeTree.getAttribute("id"),editable:!1});try{await this.sendTimedMessage(i)}catch(n){throw t.save({editable:r,error_type:"timeout",error:e("A timeout happened while while trying to retract your message."),retracted:void 0,retracted_id:void 0}),n}},async retractOtherMessage(e,t){const n=e.get("editable");e.save({moderated:"retracted",moderated_by:Lc.bare_jid,moderated_id:e.get("msgid"),moderation_reason:t,editable:!1});const r=await this.sendRetractionIQ(e,t);return(null===r||Fl.isErrorStanza(r))&&e.save({editable:n,moderated:void 0,moderated_by:void 0,moderated_id:void 0,moderation_reason:void 0}),r},sendRetractionIQ(e,t){const n=eu({to:this.get("jid"),type:"set"}).c("apply-to",{id:e.get("stanza_id ".concat(this.get("jid"))),xmlns:Zl.NS.FASTEN}).c("moderate",{xmlns:Zl.NS.MODERATE}).c("retract",{xmlns:Zl.NS.RETRACT}).up().c("reason").t(t||"");return qc.sendIQ(n,null,!1)},sendDestroyIQ(e,t){const n=tu("destroy");t&&n.attrs({jid:t});const r=eu({to:this.get("jid"),type:"set"}).c("query",{xmlns:Zl.NS.MUC_OWNER}).cnode(n.node);return e&&e.length>0&&r.c("reason",e),qc.sendIQ(r)},async leave(e){if(this.features.destroy(),this.occupants.clearStore(),Lc.disco_entities){const e=Lc.disco_entities.get(this.get("jid"));e&&await new Promise((t,n)=>e.destroy({success:t,error:n}))}qc.connection.connected()&&qc.user.presence.send("unavailable",this.getRoomJIDAndNick(),e),Fl.safeSave(this.session,{connection_status:Yc.ROOMSTATUS.DISCONNECTED}),this.removeHandlers()},async close(){return await new Promise(e=>this.session.destroy({success:e,error:(t,n)=>{Pn.error(n),e()}})),await new Promise(e=>this.features.destroy({success:e,error:(t,n)=>{Pn.error(n),e()}})),Lc.ChatBox.prototype.close.call(this)},canModerateMessages(){const e=this.getOwnOccupant();return e&&e.isModerator()&&qc.disco.supports(Zl.NS.MODERATE,this.get("jid"))},getAllKnownNicknames(){return[...new Set([...this.occupants.map(e=>e.get("nick")),...this.messages.map(e=>e.get("nick"))])].filter(e=>e)},getAllKnownNicknamesRegex(){const e=this.getAllKnownNicknames().join("|"),t=Vl.escapeRegexString(e),n=Yc.MENTION_BOUNDARIES.join("|"),r=Vl.escapeRegexString(n);return RegExp("(?:\\s|^)[".concat(r,"]?@(").concat(t,")(?![\\w@-])"),"ig")},getOccupantByJID(e){return this.occupants.findOccupant({jid:e})},getOccupantByNickname(e){return this.occupants.findOccupant({nick:e})},parseTextForReferences(e){if(!e)return["",[]];const t=Vl.matchRegexInText(e);if(!t(Vl.mention_regex))return[e,[]];const n=this.getAllKnownNicknames(),r=Vl.findFirstMatchInArray(n),i=e=>{const t=this.get("jid"),n=this.getOccupant(e)||this.getOccupant(t),r=n&&n.get("jid")||"".concat(t,"/").concat(e);return encodeURI("xmpp:".concat(r))},s=[...t(this.getAllKnownNicknamesRegex())].map(e=>{const t=e[0].indexOf("@"),n=e.index+t,s=n+e[0].length-t,o=r(e[1]);return{begin:n,end:s,value:o,type:"mention",uri:i(o)}}),[o,a]=Vl.reduceTextFromReferences(e,s);return[o,a]},getOutgoingMessageAttributes(e,t){const n=this.get("composing_spoiler"),[r,i]=this.parseTextForReferences(e),s=Fl.getUniqueId(),o=r?Fl.httpToGeoUri(Fl.shortnamesToUnicode(r),Lc):void 0;return{body:o,is_spoiler:n,origin_id:s,references:i,id:s,msgid:s,from:"".concat(this.get("jid"),"/").concat(this.get("nick")),fullname:this.get("nick"),is_only_emojis:!!r&&Fl.isOnlyEmojis(r),message:o,nick:this.get("nick"),sender:"me",spoiler_hint:n?t:void 0,type:"groupchat"}},getRoomJIDAndNick(){const e=this.get("nick");return Zl.getBareJidFromJid(this.get("jid"))+(null!==e?"/".concat(e):"")},sendChatState(){if(!qc.settings.get("send_chat_state_notifications")||!this.get("chat_state")||this.session.get("connection_status")!==Yc.ROOMSTATUS.ENTERED||this.features.get("moderated")&&"visitor"===this.getOwnRole())return;const e=qc.settings.get("send_chat_state_notifications");if(Array.isArray(e)&&!e.includes(this.get("chat_state")))return;const t=this.get("chat_state");t!==Lc.GONE&&qc.send(nu({to:this.get("jid"),type:"groupchat"}).c(t,{xmlns:Zl.NS.CHATSTATES}).up().c("no-store",{xmlns:Zl.NS.HINTS}).up().c("no-permanent-store",{xmlns:Zl.NS.HINTS}))},directInvite(e,t){this.features.get("membersonly")&&this.updateMemberLists([{jid:e,affiliation:"member",reason:t}]);const n={xmlns:"jabber:x:conference",jid:this.get("jid")};null!==t&&(n.reason=t),this.get("password")&&(n.password=this.get("password"));const r=nu({from:Lc.connection.jid,to:e,id:Fl.getUniqueId()}).c("x",n);qc.send(r),qc.trigger("roomInviteSent",{room:this,recipient:e,reason:t})},refreshDiscoInfo(){return qc.disco.refresh(this.get("jid")).then(()=>this.getDiscoInfo()).catch(e=>Pn.error(e))},getDiscoInfo(){return qc.disco.getIdentity("conference","text",this.get("jid")).then(e=>this.save({name:e&&e.get("name")})).then(()=>this.getDiscoInfoFields()).then(()=>this.getDiscoInfoFeatures()).catch(e=>Pn.error(e))},async getDiscoInfoFields(){const e=(await qc.disco.getFields(this.get("jid"))).reduce((e,t)=>{const n=t.get("var");return n&&n.startsWith("muc#roominfo_")&&(e[n.replace("muc#roominfo_","")]=t.get("value")),e},{});this.config.save(e)},async getDiscoInfoFeatures(){const e=await qc.disco.getFeatures(this.get("jid")),t=Object.assign(Nl(Yc.ROOM_FEATURES,Yc.ROOM_FEATURES.map(()=>!1)),{fetched:(new Date).toISOString()});e.each(e=>{const n=e.get("var");n.startsWith("muc_")?t[n.replace("muc_","")]=!0:n===Zl.NS.MAM&&(t.mam_enabled=!0)}),this.features.save(t)},setAffiliation(e,t){return t=t.filter(t=>void 0===t.affiliation||t.affiliation===e),Promise.all(t.map(t=>this.sendAffiliationIQ(e,t)))},addFieldValue(e){const t=e.getAttribute("type");if("fixed"===t)return e;const n=e.getAttribute("var").replace("muc#roomconfig_",""),r=this.get("roomconfig");if(n in r){let i;switch(t){case"boolean":i=[r[n]?1:0];break;case"list-multi":i=r[n];break;default:i=[r[n]]}e.innerHTML=i.map(e=>tu("value").t(e)).join("")}return e},async autoConfigureChatRoom(){const e=await this.fetchRoomConfiguration(),t=iu("field",e).map(e=>this.addFieldValue(e));if(t.length)return this.sendConfiguration(t)},fetchRoomConfiguration(){return qc.sendIQ(eu({to:this.get("jid"),type:"get"}).c("query",{xmlns:Zl.NS.MUC_OWNER}))},sendConfiguration(e=[]){const t=eu({to:this.get("jid"),type:"set"}).c("query",{xmlns:Zl.NS.MUC_OWNER}).c("x",{xmlns:Zl.NS.XFORM,type:"submit"});return e.forEach(e=>t.cnode(e).up()),qc.sendIQ(t)},getOwnRole(){var e,t;return null===(e=this.getOwnOccupant())||void 0===e||null===(t=e.attributes)||void 0===t?void 0:t.role},getOwnAffiliation(){var e,t;return null===(e=this.getOwnOccupant())||void 0===e||null===(t=e.attributes)||void 0===t?void 0:t.affiliation},getOwnOccupant(){return this.occupants.findWhere({jid:Lc.bare_jid})},sendAffiliationIQ(e,t){const n=eu({to:this.get("jid"),type:"set"}).c("query",{xmlns:Zl.NS.MUC_ADMIN}).c("item",{affiliation:t.affiliation||e,nick:t.nick,jid:t.jid});return void 0!==t.reason&&n.c("reason",t.reason),qc.sendIQ(n)},setAffiliations(e){const t=[...new Set(e.map(e=>e.affiliation))];return Promise.all(t.map(t=>this.setAffiliation(t,e)))},setRole(e,t,n,r,i){const s=tu("item",{nick:e.get("nick"),role:t}),o=eu({to:this.get("jid"),type:"set"}).c("query",{xmlns:Zl.NS.MUC_ADMIN}).cnode(s.node);return null!==n&&o.c("reason",n),qc.sendIQ(o).then(r).catch(i)},getOccupant(e){return Fl.isValidJID(e)?this.getOccupantByJID(e):this.getOccupantByNickname(e)},getOccupantsWithRole(e){return this.getOccupantsSortedBy("nick").filter(t=>t.get("role")===e).map(e=>({jid:e.get("jid"),nick:e.get("nick"),role:e.get("role")}))},getOccupantsWithAffiliation(e){return this.getOccupantsSortedBy("nick").filter(t=>t.get("affiliation")===e).map(e=>({jid:e.get("jid"),nick:e.get("nick"),affiliation:e.get("affiliation")}))},getOccupantsSortedBy(e){return Array.from(this.occupants.models).sort((t,n)=>t.get(e)<n.get(e)?-1:t.get(e)>n.get(e)?1:0)},async getAffiliationList(e){const t=eu({to:this.get("jid"),type:"get"}).c("query",{xmlns:Zl.NS.MUC_ADMIN}).c("item",{affiliation:e}),n=await qc.sendIQ(t,null,!1);if(null===n){const t="Error: timeout while fetching ".concat(e," list for MUC ").concat(this.get("jid")),r=new Error(t);return Pn.warn(t),Pn.warn(n),r}if(Fl.isErrorStanza(n)){const t="Error: not allowed to fetch ".concat(e," list for MUC ").concat(this.get("jid")),r=new Error(t);return Pn.warn(t),Pn.warn(n),r}return zl.parseMemberListIQ(n).filter(e=>e).sort((e,t)=>e.nick<t.nick?-1:e.nick>t.nick?1:0)},async updateMemberLists(e){const t=(await Promise.all(["member","admin","owner"].map(e=>this.getAffiliationList(e)))).reduce((e,t)=>Fl.isErrorObject(t)?e:[...t,...e],[]);await this.setAffiliations(zl.computeAffiliationsDelta(!0,!1,e,t)),await this.occupants.fetchMembers()},async getAndPersistNickname(e){return(e=e||this.get("nick")||await this.getReservedNick()||Lc.getDefaultMUCNickname())&&this.save({nick:e},{silent:!0}),e},async getReservedNick(){const e=eu({to:this.get("jid"),from:Lc.connection.jid,type:"get"}).c("query",{xmlns:Zl.NS.DISCO_INFO,node:"x-roomuser-item"}),t=await qc.sendIQ(e,null,!1);if(Fl.isErrorObject(t))throw t;const n=t.querySelector('query[node="x-roomuser-item"] identity');return n?n.getAttribute("name"):null},async registerNickname(){const t=this.get("nick"),n=this.get("jid");let r,i;try{r=await qc.sendIQ(eu({to:n,from:Lc.connection.jid,type:"get"}).c("query",{xmlns:Zl.NS.MUC_REGISTER}))}catch(t){return iu('not-allowed[xmlns="'.concat(Zl.NS.STANZAS,'"]'),t).length?i=e("You're not allowed to register yourself in this groupchat."):iu('registration-required[xmlns="'.concat(Zl.NS.STANZAS,'"]'),t).length&&(i=e("You're not allowed to register in this groupchat because it's members-only.")),Pn.error(t),i}const s=iu("field required",r).map(e=>e.parentElement);if(s.length>1&&"muc#register_roomnick"!==s[0].getAttribute("var"))return Pn.error("Can't register the user register in the groupchat ".concat(n," due to the required fields"));try{await qc.sendIQ(eu({to:n,from:Lc.connection.jid,type:"set"}).c("query",{xmlns:Zl.NS.MUC_REGISTER}).c("x",{xmlns:Zl.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#register").up().up().c("field",{var:"muc#register_roomnick"}).c("value").t(t))}catch(t){return iu('service-unavailable[xmlns="'.concat(Zl.NS.STANZAS,'"]'),t).length?i=e("Can't register your nickname in this groupchat, it doesn't support registration."):iu('bad-request[xmlns="'.concat(Zl.NS.STANZAS,'"]'),t).length&&(i=e("Can't register your nickname in this groupchat, invalid data form supplied.")),Pn.error(i),Pn.error(t),i}},updateOccupantsOnPresence(e){var t,n;const r=ao.parseMUCPresence(e);if("error"===r.type||!r.jid&&!r.nick)return!0;const i=this.occupants.findOccupant(r);if("unavailable"===r.type&&i&&!r.states.includes(Yc.MUC_NICK_CHANGED_CODE)&&!["admin","owner","member"].includes(r.affiliation))return i.set(r),void i.destroy();const s=r.jid||"",o=Object.assign(r,{jid:Zl.getBareJidFromJid(s)||(null==i||null===(t=i.attributes)||void 0===t?void 0:t.jid),resource:Zl.getResourceFromJid(s)||(null==i||null===(n=i.attributes)||void 0===n?void 0:n.resource)});i?i.save(o):this.occupants.create(o)},fetchFeaturesIfConfigurationChanged(e){const t=["104","170","171","172","173","174"];iu("status",e).filter(e=>t.includes(e.getAttribute("status"))).length&&this.refreshDiscoInfo()},isSameUser(e,t){const n=Zl.getBareJidFromJid(e),r=Zl.getBareJidFromJid(t),i=Zl.getResourceFromJid(e),s=Zl.getResourceFromJid(t);if(Fl.isSameBareJID(e,t))return n!==this.get("jid")||i===s;return(n===this.get("jid")?this.occupants.findOccupant({nick:i}):this.occupants.findOccupant({jid:n}))===(r===this.get("jid")?this.occupants.findOccupant({nick:s}):this.occupants.findOccupant({jid:r}))},async isSubjectHidden(){return(await qc.user.settings.get("mucs_with_hidden_subject",[])).includes(this.get("jid"))},async toggleSubjectHiddenState(){const e=this.get("jid"),t=await qc.user.settings.get("mucs_with_hidden_subject",[]);t.includes(this.get("jid"))?qc.user.settings.set("mucs_with_hidden_subject",t.filter(t=>t!==e)):qc.user.settings.set("mucs_with_hidden_subject",[...t,e])},async handleSubjectChange(t){if("string"==typeof t.subject&&!t.thread&&!t.message){const n=t.subject,r=t.nick;if(Fl.safeSave(this,{subject:{author:r,text:t.subject||""}}),!t.is_delayed&&r){const i=e(n?"Topic set by %1$s":"Topic cleared by %1$s",r),s=this.messages.last();(null==s?void 0:s.get("nick"))===t.nick&&"info"===(null==s?void 0:s.get("type"))&&(null==s?void 0:s.get("message"))===i||this.createMessage({message:i,nick:t.nick,type:"info"}),await this.isSubjectHidden()&&this.toggleSubjectHiddenState()}return!0}return!1},setSubject(e=""){qc.send(nu({to:this.get("jid"),from:Lc.connection.jid,type:"groupchat"}).c("subject",{xmlns:"jabber:client"}).t(e).tree())},ignorableCSN(e){return e.chat_state&&!e.body&&(e.is_delayed||this.isOwnMessage(e))},isOwnMessage(e){let t;return t=Mn(e)?e.getAttribute("from"):e instanceof Lc.Message?e.get("from"):e.from,Zl.getResourceFromJid(t)==this.get("nick")},getUpdatedMessageAttributes(e,t){const n=Lc.ChatBox.prototype.getUpdatedMessageAttributes.call(this,e,t);if(this.isOwnMessage(t)){const r=Object.keys(t).filter(e=>e.startsWith("stanza_id"));Object.assign(n,Ms(t,r)),e.get("received")||(n.received=(new Date).toISOString())}return n},async isJoined(){const e=eu({to:"".concat(this.get("jid"),"/").concat(this.get("nick")),type:"get"}).c("ping",{xmlns:Zl.NS.PING});try{await qc.sendIQ(e)}catch(e){return null===e?Pn.error("Timeout error while checking whether we're joined to MUC: ".concat(this.get("jid"))):(Pn.error("Apparently we're no longer connected to MUC: ".concat(this.get("jid"))),Pn.error(e)),!1}return!0},async rejoinIfNecessary(){if(!await this.isJoined())return this.rejoin(),!0},async shouldShowErrorMessage(e){return("not-acceptable"!==e.error_condition||!await this.rejoinIfNecessary())&&Lc.ChatBox.prototype.shouldShowErrorMessage.call(this,e)},findDanglingModeration(e){if(!this.messages.length)return null;if(this.messages.last().get("time")>e.time){const t=Array.from(this.messages.models),n=e["stanza_id ".concat(this.get("jid"))];return n?(t.reverse(),t.find(({attributes:e})=>"retracted"===e.moderated&&e.moderated_id===n&&e.moderated_by)):null}},async handleModeration(e){const t=["editable","moderated","moderated_by","moderated_id","moderation_reason"];if("retracted"===e.moderated){const n={};n["stanza_id ".concat(this.get("jid"))]=e.moderated_id;const r=this.messages.findWhere(n);return r?(r.save(Ms(e,t)),!0):(e.dangling_moderation=!0,await this.createMessage(e),!0)}{const n=this.findDanglingModeration(e);if(n){const r=Ms(n.attributes,t),i=Object.assign({dangling_moderation:!1},e,r);return delete i.id,n.save(i),!0}}return!1},queueMessage(e){var t;return(null===(t=this.messages)||void 0===t?void 0:t.fetched)?(this.msg_chain=this.msg_chain||this.messages.fetched,this.msg_chain=this.msg_chain.then(()=>this.onMessage(e)),this.msg_chain):(this.message_queue.push(e),Promise.resolve())},removeNotification(e,t){const n=this.notifications.toJSON();(t=Array.isArray(t)?t:[t]).forEach(t=>{const r=Array.from(n[t]||[]);if(r.includes(e)){const n=r.indexOf(e);r.splice(n,1),this.notifications.set(t,Array.from(r))}})},updateNotifications(e,t){const n=this.notifications.toJSON(),r=n[t]||[];if(r.includes(e))return;const i=(i,s)=>(i[s]=s===t?[...r,e]:(n[s]||[]).filter(t=>t!==e),i),s=Yc.CHAT_STATES.reduce(i,{}),o=Yc.MUC_TRAFFIC_STATES_LIST.reduce(i,{}),a=Yc.MUC_ROLE_CHANGES_LIST.reduce(i,{});this.notifications.set(Object.assign(s,o,a)),window.setTimeout(()=>this.removeNotification(e,t),1e4)},async onMessage(e){if(e=await e,Fl.isErrorObject(e))return e.stanza&&Pn.error(e.stanza),Pn.error(e.message);const t=this.getDuplicateMessage(e);if(t)return this.updateMessage(t,e);if(!(e.is_valid_receipt_request||e.is_marker||this.ignorableCSN(e))){if(await this.handleRetraction(e)||await this.handleModeration(e)||await this.handleSubjectChange(e))return this.removeNotification(e.nick,["composing","paused"]);if(this.setEditable(e,e.time),e.chat_state&&this.updateNotifications(e.nick,e.chat_state),Fl.shouldCreateGroupchatMessage(e)){const t=this.handleCorrection(e)||await this.createMessage(e);this.removeNotification(e.nick,["composing","paused"]),this.handleUnreadMessage(t)}}},handleModifyError(e){var t;const n=null===(t=e.querySelector("error text"))||void 0===t?void 0:t.textContent;if(n)if(this.session.get("connection_status")===Yc.ROOMSTATUS.CONNECTING)this.setDisconnectionMessage(n);else{const e={type:"error",message:n,is_ephemeral:!0};this.createMessage(e)}},handleDisconnection(e){var t;const n=null!==e.querySelector("status[code='110']"),r=iu('x[xmlns="'.concat(Zl.NS.MUC_USER,'"]'),e).pop();if(!r)return;const i=iu("status",r).map(e=>e.getAttribute("code")),s=Dl(i,Object.keys(Lc.muc.disconnect_messages));if(!(n&&s.length>0))return;const o=r.querySelector("item"),a=o?null===(t=o.querySelector("reason"))||void 0===t?void 0:t.textContent:void 0,c=o?kc(o.querySelector("actor"),"getAttribute","nick"):void 0,l=Lc.muc.disconnect_messages[s[0]];this.setDisconnectionMessage(l,a,c)},getActionInfoMessage:(t,n,r)=>"301"===t?r?e("%1$s has been banned by %2$s",n,r):e("%1$s has been banned",n):"303"===t?e("%1$s's nickname has changed",n):"307"===t?r?e("%1$s has been kicked out by %2$s",n,r):e("%1$s has been kicked out",n):"321"===t?e("%1$s has been removed because of an affiliation change",n):"322"===t?e("%1$s has been removed for not being a member",n):void 0,createAffiliationChangeMessage(t){const n=t._previousAttributes.affiliation;if(!n)return;const r=t.get("affiliation");"admin"===n&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.EXADMIN)?this.createMessage({type:"info",message:e("%1$s is no longer an admin of this groupchat",t.get("nick"))}):"owner"===n&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.EXOWNER)?this.createMessage({type:"info",message:e("%1$s is no longer an owner of this groupchat",t.get("nick"))}):"outcast"===n&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.EXOUTCAST)&&this.createMessage({type:"info",message:e("%1$s is no longer banned from this groupchat",t.get("nick"))}),"none"===r&&"member"===n&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.EXMEMBER)&&this.createMessage({type:"info",message:e("%1$s is no longer a member of this groupchat",t.get("nick"))}),"member"===r&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.MEMBER)?this.createMessage({type:"info",message:e("%1$s is now a member of this groupchat",t.get("nick"))}):("admin"===r&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.ADMIN)||"owner"==r&&Lc.isInfoVisible(Yc.AFFILIATION_CHANGES.OWNER))&&this.createMessage({type:"info",message:e("%1$s is now an %2$s of this groupchat",t.get("nick"),r)})},createRoleChangeMessage(e,t){if("none"===t||e.changed.affiliation)return;const n=e._previousAttributes.role;"moderator"===n&&Lc.isInfoVisible(Yc.MUC_ROLE_CHANGES.DEOP)?this.updateNotifications(e.get("nick"),Yc.MUC_ROLE_CHANGES.DEOP):"visitor"===n&&Lc.isInfoVisible(Yc.MUC_ROLE_CHANGES.VOICE)&&this.updateNotifications(e.get("nick"),Yc.MUC_ROLE_CHANGES.VOICE),"visitor"===e.get("role")&&Lc.isInfoVisible(Yc.MUC_ROLE_CHANGES.MUTE)?this.updateNotifications(e.get("nick"),Yc.MUC_ROLE_CHANGES.MUTE):"moderator"===e.get("role")&&!["owner","admin"].includes(e.get("affiliation"))&&Lc.isInfoVisible(Yc.MUC_ROLE_CHANGES.OP)&&this.updateNotifications(e.get("nick"),Yc.MUC_ROLE_CHANGES.OP)},createInfoMessage(t,n,r){const i={type:"info"};if(Lc.isInfoVisible(t)&&"110"!==t&&("100"!==t||r)){if(t in Lc.muc.info_messages)i.message=Lc.muc.info_messages[t];else if(!r&&Yl.includes(t)){var s,o;const e=Zl.getResourceFromJid(n.getAttribute("from")),r=n.querySelector('x[xmlns="'.concat(Zl.NS.MUC_USER,'"] item'));i.actor=r?null===(s=r.querySelector("actor"))||void 0===s?void 0:s.getAttribute("nick"):void 0,i.reason=r?null===(o=r.querySelector("reason"))||void 0===o?void 0:o.textContent:void 0,i.message=this.getActionInfoMessage(t,e,i.actor)}else if(r&&t in Lc.muc.new_nickname_messages){let s;r&&"210"===t?s=Zl.getResourceFromJid(n.getAttribute("from")):r&&"303"===t&&(s=n.querySelector('x[xmlns="'.concat(Zl.NS.MUC_USER,'"] item')).getAttribute("nick")),this.save("nick",s),i.message=e(Lc.muc.new_nickname_messages[t],s)}if(i.message){if("201"===t&&this.messages.findWhere(i))return;if(t in Lc.muc.info_messages&&this.messages.length&&this.messages.pop().get("message")===i.message)return;this.createMessage(i)}}},createInfoMessages(e){const t=iu('x[xmlns="'.concat(Zl.NS.MUC_USER,'"] status'),e).map(e=>e.getAttribute("code"));t.includes("333")&&t.includes("307")&&t.splice(t.indexOf("307"),1);const n=t.includes("110");t.forEach(t=>this.createInfoMessage(t,e,n))},setDisconnectionMessage(e,t,n){this.save({disconnection_message:e,disconnection_reason:t,disconnection_actor:n}),this.session.save({connection_status:Yc.ROOMSTATUS.DISCONNECTED})},onNicknameClash(t){if(qc.settings.get("muc_nickname_from_jid")){const e=t.getAttribute("from").split("/")[1];if(e===Lc.getDefaultMUCNickname())this.join(e+"-2");else{const t=e.lastIndexOf("-"),n=e.substring(t+1,e.length);this.join(e.substring(0,t+1)+String(Number(n)+1))}}else this.save({nickname_validation_message:e("The nickname you chose is reserved or currently in use, please choose a different one.")}),this.session.save({connection_status:Yc.ROOMSTATUS.NICKNAME_REQUIRED})},onErrorPresence(t){var n;const r=t.querySelector("error"),i=r.getAttribute("type"),s=null===(n=iu('text[xmlns="'.concat(Zl.NS.STANZAS,'"]'),r).pop())||void 0===n?void 0:n.textContent;if("modify"===i)this.handleModifyError(t);else if("auth"===i){if(iu('not-authorized[xmlns="'.concat(Zl.NS.STANZAS,'"]'),r).length&&(this.save({password_validation_message:s||e("Password incorrect")}),this.session.save({connection_status:Yc.ROOMSTATUS.PASSWORD_REQUIRED})),r.querySelector("registration-required")){const t=e("You are not on the member list of this groupchat.");this.setDisconnectionMessage(t,s)}else if(r.querySelector("forbidden")){const t=e("You have been banned from this groupchat.");this.setDisconnectionMessage(t,s)}}else if("cancel"===i)if(r.querySelector("not-allowed")){const t=e("You are not allowed to create new groupchats.");this.setDisconnectionMessage(t,s)}else if(r.querySelector("not-acceptable")){const t=e("Your nickname doesn't conform to this groupchat's policies.");this.setDisconnectionMessage(t,s)}else if(iu('gone[xmlns="'.concat(Zl.NS.STANZAS,'"]'),r).length){var o;const e=null===(o=iu('gone[xmlns="'.concat(Zl.NS.STANZAS,'"]'),r).pop())||void 0===o?void 0:o.textContent.replace(/^xmpp:/,"").replace(/\?join$/,"");this.save({moved_jid:e,destroyed_reason:s}),this.session.save({connection_status:Yc.ROOMSTATUS.DESTROYED})}else if(r.querySelector("conflict"))this.onNicknameClash(t);else if(r.querySelector("item-not-found")){const t=e("This groupchat does not (yet) exist.");this.setDisconnectionMessage(t,s)}else if(r.querySelector("service-unavailable")){const t=e("This groupchat has reached its maximum number of participants.");this.setDisconnectionMessage(t,s)}else if(r.querySelector("remote-server-not-found")){const t=e("Remote server not found"),n=s?e('The explanation given is: "%1$s".',s):void 0;this.setDisconnectionMessage(t,n)}},onPresence(e){if("error"===e.getAttribute("type"))return this.onErrorPresence(e);this.createInfoMessages(e),e.querySelector("status[code='110']")?(this.onOwnPresence(e),"none"!==this.getOwnRole()&&this.session.get("connection_status")===Yc.ROOMSTATUS.CONNECTING&&this.session.save("connection_status",Yc.ROOMSTATUS.CONNECTED)):this.updateOccupantsOnPresence(e)},onOwnPresence(e){if("unavailable"!==e.getAttribute("type")){const t=this.session.get("connection_status");t!==Yc.ROOMSTATUS.ENTERED?(this.session.save("connection_status",Yc.ROOMSTATUS.ENTERED,{silent:!0}),this.updateOccupantsOnPresence(e),this.session.trigger("change:connection_status",this.session,t)):this.updateOccupantsOnPresence(e)}else this.updateOccupantsOnPresence(e);if("unavailable"===e.getAttribute("type"))this.handleDisconnection(e);else{if(e.querySelector("status[code='201']"))if(this.get("auto_configure"))this.autoConfigureChatRoom().then(()=>this.refreshDiscoInfo());else{if(!qc.settings.get("muc_instant_rooms"))return void this.trigger("configurationNeeded");this.sendConfiguration().then(()=>this.refreshDiscoInfo())}else this.features.get("fetched")||("owner"===this.getOwnAffiliation()&&this.get("auto_configure")?this.autoConfigureChatRoom().then(()=>this.refreshDiscoInfo()):this.getDiscoInfo())}this.session.save({connection_status:Yc.ROOMSTATUS.ENTERED})},isUserMentioned(e){const t=this.get("nick");if(e.get("references").length){return e.get("references").filter(e=>"mention"===e.type).map(e=>e.value).includes(t)}return new RegExp("\\b".concat(t,"\\b")).test(e.get("message"))},handleUnreadMessage(e){if((null==e?void 0:e.get("body"))&&Fl.isNewMessage(e))if(this.isHidden()){const t={num_unread_general:this.get("num_unread_general")+1};0===this.get("num_unread_general")&&(t.first_unread_id=e.get("id")),this.isUserMentioned(e)&&(t.num_unread=this.get("num_unread")+1,Lc.incrementMsgCounter()),this.save(t)}else this.sendMarkerForMessage(e)},clearUnreadMsgCounter(){(this.get("num_unread_general")>0||this.get("num_unread")>0)&&this.sendMarkerForMessage(this.messages.last()),Fl.safeSave(this,{num_unread:0,num_unread_general:0})}}),Lc.ChatRoomOccupant=Rs.extend({defaults:{hats:[],show:"offline",states:[]},initialize(e){this.set(Object.assign({id:Fl.getUniqueId()},e)),this.on("change:image_hash",this.onAvatarChanged,this)},onAvatarChanged(){const e=this.get("image_hash"),t=[];this.get("jid")&&t.push(Lc.vcards.findWhere({jid:this.get("jid")})),t.push(Lc.vcards.findWhere({jid:this.get("from")})),t.filter(e=>e).forEach(t=>{e&&t.get("image_hash")!==e&&qc.vcard.update(t,!0)})},getDisplayName(){return this.get("nick")||this.get("jid")},isMember(){return["admin","owner","member"].includes(this.get("affiliation"))},isModerator(){return["admin","owner"].includes(this.get("affiliation"))||"moderator"===this.get("role")},isSelf(){return this.get("states").includes("110")}}),Lc.ChatRoomOccupants=Yo.extend({model:Lc.ChatRoomOccupant,comparator(e,t){const n=e.get("role")||"none",r=t.get("role")||"none";if(Kl[n]===Kl[r]){const n=e.getDisplayName().toLowerCase(),r=t.getDisplayName().toLowerCase();return n<r?-1:n>r?1:0}return Kl[n]<Kl[r]?-1:1},getAutoFetchedAffiliationLists(){const e=qc.settings.get("muc_fetch_members");return Array.isArray(e)?e:e?["member","admin","owner"]:[]},async fetchMembers(){const e=this.getAutoFetchedAffiliationLists();if(0===e.length)return;const t=await Promise.all(e.map(e=>this.chatroom.getAffiliationList(e))),n=t.reduce((e,t)=>Fl.isErrorObject(t)?e:[...t,...e],[]),r=e.filter(n=>!Fl.isErrorObject(t[e.indexOf(n)])),i=n.map(e=>e.jid).filter(e=>void 0!==e),s=n.map(e=>!e.jid&&e.nick||void 0).filter(e=>void 0!==e);this.filter(e=>r.includes(e.get("affiliation"))&&!s.includes(e.get("nick"))&&!i.includes(e.get("jid"))).forEach(e=>{e.get("jid")!==Lc.bare_jid&&("offline"===e.get("show")?e.destroy():e.save("affiliation",null))}),n.forEach(e=>{const t=e.jid?this.findOccupant({jid:e.jid}):this.findOccupant({nick:e.nick});t?t.save(e):this.create(e)}),qc.trigger("membersFetched")},findOccupant(e){const t=Zl.getBareJidFromJid(e.jid);return t&&this.findWhere({jid:t})||this.findWhere({nick:e.nick})}}),Lc.RoomsPanelModel=Rs.extend({defaults:function(){return{muc_domain:qc.settings.get("muc_domain"),nick:Lc.getDefaultMUCNickname()}},setDomain(e){qc.settings.get("locked_muc_domain")||this.save("muc_domain",Zl.getDomainFromJid(e))}}),Lc.onDirectMUCInvitation=async function(t){const n=iu('x[xmlns="jabber:x:conference"]',t).pop(),r=Zl.getBareJidFromJid(t.getAttribute("from")),i=n.getAttribute("jid"),s=n.getAttribute("reason");let o;if(qc.settings.get("auto_join_on_invite"))o=!0;else{let t=Lc.roster.get(r);t=t?t.getDisplayName():r,o=s?confirm(e('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"',t,i,s)):confirm(e("%1$s has invited you to join a groupchat: %2$s",t,i))}if(!0===o){(await async function(e,t){t.type=Lc.CHATROOMS_TYPE,t.id=e;const n=await qc.rooms.get(e,t,!0);return n.maybeShow(!0),n}(i,{password:n.getAttribute("password")})).session.get("connection_status")===Yc.ROOMSTATUS.DISCONNECTED&&Lc.chatboxes.get(i).rejoin()}},qc.settings.get("allow_muc_invitations")){const e=function(){Lc.connection.addHandler(e=>(Lc.onDirectMUCInvitation(e),!0),"jabber:x:conference","message")};qc.listen.on("connected",e),qc.listen.on("reconnected",e)}function r(){return Lc.chatboxes.filter(e=>e.get("type")===Lc.CHATROOMS_TYPE).forEach(e=>e.session.save({connection_status:Yc.ROOMSTATUS.DISCONNECTED}))}qc.listen.on("beforeTearDown",()=>{Lc.chatboxes.where({type:Lc.CHATROOMS_TYPE}).forEach(e=>Fl.safeSave(e.session,{connection_status:Yc.ROOMSTATUS.DISCONNECTED}))}),qc.listen.on("windowStateChanged",(async function(e){if("visible"===e.state&&qc.connection.connected()){(await qc.rooms.get()).forEach(e=>e.rejoinIfNecessary())}})),qc.listen.on("addClientFeatures",()=>{qc.settings.get("allow_muc")&&qc.disco.own.features.add(Zl.NS.MUC),qc.settings.get("allow_muc_invitations")&&qc.disco.own.features.add("jabber:x:conference")}),qc.listen.on("chatBoxesFetched",(async function(){await Promise.all(qc.settings.get("auto_join_rooms").map(e=>"string"==typeof e?Lc.chatboxes.where({jid:e}).length?Promise.resolve():qc.rooms.open(e):N(e)?qc.rooms.open(e.jid,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Gl(Object(n),!0).forEach((function(t){Jl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},e)):(Pn.error('Invalid muc criteria specified for "auto_join_rooms"'),Promise.resolve()))),qc.trigger("roomsAutoJoined")})),qc.listen.on("beforeResourceBinding",()=>{Lc.connection.addHandler(e=>{const t=Zl.getBareJidFromJid(e.getAttribute("from"));return Lc.chatboxes.get(t)||qc.waitUntil("chatBoxesFetched").then(async()=>{const n=Lc.chatboxes.get(t);n&&(await n.initialized,await n.messages.fetched,n.message_handler.run(e))}),!0},null,"message","groupchat")}),qc.listen.on("disconnected",r),qc.listen.on("statusInitialized",()=>{window.addEventListener(Lc.unloadevent,()=>{!qc.connection.isType("websocket")||qc.settings.get("enable_smacks")&&Lc.session.get("smacks_stream_id")||r()})}),Yc.env.muc_utils=zl,Object.assign(qc,{rooms:{create(e,t={}){if(!(t="string"==typeof t?{nick:t}:t||{}).nick&&qc.settings.get("muc_nickname_from_jid")&&(t.nick=Zl.getNodeFromJid(Lc.bare_jid)),void 0===e)throw new TypeError("rooms.create: You need to provide at least one JID");return"string"==typeof e?qc.rooms.get(Fl.getJIDFromURI(e),t,!0):e.map(e=>qc.rooms.get(Fl.getJIDFromURI(e),t,!0))},async open(e,t,n=!1){if(await qc.waitUntil("chatBoxesFetched"),void 0===e){const e="rooms.open: You need to provide at least one JID";throw Pn.error(e),new TypeError(e)}if("string"==typeof e){const r=await qc.rooms.get(e,t,!0);return r&&r.maybeShow(n),r}{const r=await Promise.all(e.map(e=>qc.rooms.get(e,t,!0)));return r.forEach(e=>e.maybeShow(n)),r}},async get(e,t={},n=!1){async function r(e){e=Fl.getJIDFromURI(e);let r=await qc.chatboxes.get(e);return!r&&n?r=await qc.chatboxes.create(e,t,Lc.ChatRoom):(r=r&&r.get("type")===Lc.CHATROOMS_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await qc.chatboxes.get()).filter(e=>e.get("type")===Lc.CHATROOMS_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}})}});
+ */
+const hu=["moderator","participant","visitor"],fu=["owner","admin","member","outcast","none"];rl.AFFILIATION_CHANGES={OWNER:"owner",ADMIN:"admin",MEMBER:"member",EXADMIN:"exadmin",EXOWNER:"exowner",EXOUTCAST:"exoutcast",EXMEMBER:"exmember"},rl.AFFILIATION_CHANGES_LIST=Object.values(rl.AFFILIATION_CHANGES),rl.MUC_TRAFFIC_STATES={ENTERED:"entered",EXITED:"exited"},rl.MUC_TRAFFIC_STATES_LIST=Object.values(rl.MUC_TRAFFIC_STATES),rl.MUC_ROLE_CHANGES={OP:"op",DEOP:"deop",VOICE:"voice",MUTE:"mute"},rl.MUC_ROLE_CHANGES_LIST=Object.values(rl.MUC_ROLE_CHANGES),rl.MUC_INFO_CODES={visibility_changes:["100","102","103","172","173","174"],self:["110"],non_privacy_changes:["104","201"],muc_logging_changes:["170","171"],nickname_changes:["210","303"],disconnect_messages:["301","307","321","322","332","333"],affiliation_changes:[...rl.AFFILIATION_CHANGES_LIST],join_leave_events:[...rl.MUC_TRAFFIC_STATES_LIST],role_changes:[...rl.MUC_ROLE_CHANGES_LIST]};const{Strophe:pu,sizzle:gu}=rl.env;function mu(){return Uc.chatboxes.filter(e=>e.get("type")===Uc.CHATROOMS_TYPE).forEach(e=>e.session.save({connection_status:rl.ROOMSTATUS.DISCONNECTED}))}async function vu(e){if("visible"===e.state&&Vc.connection.connected()){(await Vc.rooms.get()).forEach(e=>e.rejoinIfNecessary())}}async function _u(e){if(!Kl.isValidMUCJID(e))return zn.warn('invalid jid "'.concat(e,'" provided in url fragment'));await Vc.waitUntil("roomsAutoJoined"),Vc.settings.get("allow_bookmarks")&&await Vc.waitUntil("bookmarksInitialized"),Vc.rooms.open(e)}async function bu(){await Promise.all(Vc.settings.get("auto_join_rooms").map(e=>"string"==typeof e?Uc.chatboxes.where({jid:e}).length?Promise.resolve():Vc.rooms.open(e):N(e)?Vc.rooms.open(e.jid,{...e}):(zn.error('Invalid muc criteria specified for "auto_join_rooms"'),Promise.resolve()))),Vc.trigger("roomsAutoJoined")}pu.addNamespace("MUC_ADMIN",pu.NS.MUC+"#admin"),pu.addNamespace("MUC_OWNER",pu.NS.MUC+"#owner"),pu.addNamespace("MUC_REGISTER","jabber:iq:register"),pu.addNamespace("MUC_ROOMCONF",pu.NS.MUC+"#roomconfig"),pu.addNamespace("MUC_USER",pu.NS.MUC+"#user"),pu.addNamespace("MUC_HATS","xmpp:prosody.im/protocol/hats:1"),rl.MUC_NICK_CHANGED_CODE="303",rl.ROOM_FEATURES=["passwordprotected","unsecured","hidden","publicroom","membersonly","open","persistent","temporary","nonanonymous","semianonymous","moderated","unmoderated","mam_enabled"],rl.ROOMSTATUS={CONNECTED:0,CONNECTING:1,NICKNAME_REQUIRED:2,PASSWORD_REQUIRED:3,DISCONNECTED:4,ENTERED:5,DESTROYED:6},rl.plugins.add("converse-muc",{dependencies:["converse-chatboxes","converse-chat","converse-disco","converse-controlbox"],overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e&&e.type==n.CHATROOMS_TYPE?new n.ChatRoom(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){const{__:e,___:t}=Uc;if(Vc.settings.extend({allow_muc:!0,allow_muc_invitations:!0,auto_join_on_invite:!1,auto_join_rooms:[],auto_register_muc_nickname:!1,hide_muc_participants:!1,locked_muc_domain:!1,muc_domain:void 0,muc_fetch_members:!0,muc_history_max_stanzas:void 0,muc_instant_rooms:!0,muc_nickname_from_jid:!1,muc_send_probes:!1,muc_show_info_messages:[...rl.MUC_INFO_CODES.visibility_changes,...rl.MUC_INFO_CODES.self,...rl.MUC_INFO_CODES.non_privacy_changes,...rl.MUC_INFO_CODES.muc_logging_changes,...rl.MUC_INFO_CODES.nickname_changes,...rl.MUC_INFO_CODES.disconnect_messages,...rl.MUC_INFO_CODES.affiliation_changes,...rl.MUC_INFO_CODES.join_leave_events,...rl.MUC_INFO_CODES.role_changes],muc_show_logs_before_join:!1}),Vc.promises.add(["roomsAutoJoined"]),Vc.settings.get("locked_muc_domain")&&"string"!=typeof Vc.settings.get("muc_domain"))throw new Error("Config Error: it makes no sense to set locked_muc_domain to true when muc_domain is not set");if(rl.env.muc_utils=Vl,Object.assign(Vc,du),Uc.muc={info_messages:{100:e("This groupchat is not anonymous"),102:e("This groupchat now shows unavailable members"),103:e("This groupchat does not show unavailable members"),104:e("The groupchat configuration has changed"),170:e("Groupchat logging is now enabled"),171:e("Groupchat logging is now disabled"),172:e("This groupchat is now no longer anonymous"),173:e("This groupchat is now semi-anonymous"),174:e("This groupchat is now fully-anonymous"),201:e("A new groupchat has been created")},new_nickname_messages:{210:t("Your nickname has been automatically set to %1$s"),303:t("Your nickname has been changed to %1$s")},disconnect_messages:{301:e("You have been banned from this groupchat"),333:e("You have exited this groupchat due to a technical problem"),307:e("You have been kicked from this groupchat"),321:e("You have been removed from this groupchat because of an affiliation change"),322:e("You have been removed from this groupchat because the groupchat has changed to members-only and you're not a member"),332:e("You have been removed from this groupchat because the service hosting it is being shut down")}},Uc.isInfoVisible=function(e){return!!Vc.settings.get("muc_show_info_messages").includes(e)},Uc.router.route("converse/room?jid=:jid",_u),Uc.ChatRoom=Uc.ChatBox.extend(au),Uc.ChatRoomMessage=Uc.Message.extend($l),Uc.ChatRoomOccupants=uu,Uc.ChatRoomOccupant=cu,Uc.getDefaultMUCNickname=function(){if(!Uc.xmppstatus)throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired.");const e=Uc.xmppstatus.getNickname();return e||(Vc.settings.get("muc_nickname_from_jid")?pu.unescapeNode(pu.getNodeFromJid(Uc.bare_jid)):void 0)},Uc.ChatRoomMessages=ra.extend({model:Uc.ChatRoomMessage,comparator:"time"}),Uc.RoomsPanelModel=qo.extend({defaults:function(){return{muc_domain:Vc.settings.get("muc_domain"),nick:Uc.getDefaultMUCNickname()}},setDomain(e){Vc.settings.get("locked_muc_domain")||this.save("muc_domain",pu.getDomainFromJid(e))}}),Uc.onDirectMUCInvitation=async function(t){const n=gu('x[xmlns="jabber:x:conference"]',t).pop(),r=pu.getBareJidFromJid(t.getAttribute("from")),i=n.getAttribute("jid"),o=n.getAttribute("reason");let s;if(Vc.settings.get("auto_join_on_invite"))s=!0;else{let t=Uc.roster.get(r);t=t?t.getDisplayName():r,s=o?confirm(e('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"',t,i,o)):confirm(e("%1$s has invited you to join a groupchat: %2$s",t,i))}if(!0===s){(await async function(e,t){t.type=Uc.CHATROOMS_TYPE,t.id=e;const n=await Vc.rooms.get(e,t,!0);return n.maybeShow(!0),n}(i,{password:n.getAttribute("password")})).session.get("connection_status")===rl.ROOMSTATUS.DISCONNECTED&&Uc.chatboxes.get(i).rejoin()}},Vc.settings.get("allow_muc_invitations")){const e=function(){Uc.connection.addHandler(e=>(Uc.onDirectMUCInvitation(e),!0),"jabber:x:conference","message")};Vc.listen.on("connected",e),Vc.listen.on("reconnected",e)}Vc.listen.on("beforeTearDown",()=>{Uc.chatboxes.where({type:Uc.CHATROOMS_TYPE}).forEach(e=>Kl.safeSave(e.session,{connection_status:rl.ROOMSTATUS.DISCONNECTED}))}),Vc.listen.on("windowStateChanged",vu),Vc.listen.on("addClientFeatures",()=>{Vc.settings.get("allow_muc")&&Vc.disco.own.features.add(pu.NS.MUC),Vc.settings.get("allow_muc_invitations")&&Vc.disco.own.features.add("jabber:x:conference")}),Vc.listen.on("chatBoxesFetched",bu),Vc.listen.on("beforeResourceBinding",()=>{Uc.connection.addHandler(e=>{const t=pu.getBareJidFromJid(e.getAttribute("from"));return Uc.chatboxes.get(t)||Vc.waitUntil("chatBoxesFetched").then(async()=>{const n=Uc.chatboxes.get(t);n&&(await n.initialized,n.message_handler.run(e))}),!0},null,"message","groupchat")}),Vc.listen.on("disconnected",mu),Vc.listen.on("statusInitialized",()=>{window.addEventListener(Uc.unloadevent,()=>{!Vc.connection.isType("websocket")||Vc.settings.get("enable_smacks")&&Uc.session.get("smacks_stream_id")||mu()})})}});
 /**
  * @module converse-bookmarks
  * @description
@@ -286,31 +294,31 @@ const{Strophe:Pl,sizzle:Ll}=Yc.env;var zl={computeAffiliationsDelta(e,t,n,r){con
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:su,$iq:ou,sizzle:au}=Yc.env,cu=Yc.env.utils;Yc.plugins.add("converse-bookmarks",{dependencies:["converse-chatboxes","converse-muc"],overrides:{ChatRoom:{getDisplayName(){const{_converse:e}=this.__super__;if(this.get("bookmarked")&&e.bookmarks){const t=e.bookmarks.findWhere({jid:this.get("jid")});if(t)return t.get("name")}return this.__super__.getDisplayName.apply(this,arguments)},getAndPersistNickname(e){const{_converse:t}=this.__super__;return e=e||t.getNicknameFromBookmark(this.get("jid")),this.__super__.getAndPersistNickname.call(this,e)}}},initialize(){const{__:e}=Lc;qc.settings.extend({allow_bookmarks:!0,allow_public_bookmarks:!1,muc_respect_autojoin:!0}),qc.promises.add("bookmarksInitialized"),Lc.getNicknameFromBookmark=function(e){if(!Lc.bookmarks||!qc.settings.get("allow_bookmarks"))return null;const t=Lc.bookmarks.findWhere({jid:e});return t?t.get("nick"):void 0},Lc.Bookmark=Rs.extend({getDisplayName(){return su.xmlunescape(this.get("name"))}}),Lc.Bookmarks=Yo.extend({model:Lc.Bookmark,comparator:e=>e.get("name").toLowerCase(),initialize(){this.on("add",e=>this.openBookmarkedRoom(e).then(e=>this.markRoomAsBookmarked(e)).catch(e=>Pn.fatal(e))),this.on("remove",this.markRoomAsUnbookmarked,this),this.on("remove",this.sendBookmarkStanza,this);const e="converse.room-bookmarks".concat(Lc.bare_jid);this.fetched_flag=e+"fetched",this.browserStorage=Lc.createStore(e)},async openBookmarkedRoom(e){if(qc.settings.get("muc_respect_autojoin")&&e.get("autojoin")){(await qc.rooms.create(e.get("jid"),{nick:e.get("nick")})).maybeShow()}return e},fetchBookmarks(){const e=cu.getResolveablePromise();return window.sessionStorage.getItem(this.fetched_flag)?this.fetch({success:()=>e.resolve(),error:()=>e.resolve()}):this.fetchBookmarksFromServer(e),e},createBookmark(e){this.create(e),this.sendBookmarkStanza().catch(t=>this.onBookmarkError(t,e))},sendBookmarkStanza(){const e=ou({type:"set",from:Lc.connection.jid}).c("pubsub",{xmlns:su.NS.PUBSUB}).c("publish",{node:"storage:bookmarks"}).c("item",{id:"current"}).c("storage",{xmlns:"storage:bookmarks"});return this.forEach(t=>{e.c("conference",{name:t.get("name"),autojoin:t.get("autojoin"),jid:t.get("jid")}).c("nick").t(t.get("nick")).up().up()}),e.up().up().up(),e.c("publish-options").c("x",{xmlns:su.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t("http://jabber.org/protocol/pubsub#publish-options").up().up().c("field",{var:"pubsub#persist_items"}).c("value").t("true").up().up().c("field",{var:"pubsub#access_model"}).c("value").t("whitelist"),qc.sendIQ(e)},onBookmarkError(t,n){Pn.error("Error while trying to add bookmark"),Pn.error(t),qc.alert("error",e("Error"),[e("Sorry, something went wrong while trying to save your bookmark.")]),this.findWhere({jid:n.jid}).destroy()},fetchBookmarksFromServer(e){const t=ou({from:Lc.connection.jid,type:"get"}).c("pubsub",{xmlns:su.NS.PUBSUB}).c("items",{node:"storage:bookmarks"});qc.sendIQ(t).then(t=>this.onBookmarksReceived(e,t)).catch(t=>this.onBookmarksReceivedError(e,t))},markRoomAsBookmarked(e){const t=Lc.chatboxes.get(e.get("jid"));void 0!==t&&t.save("bookmarked",!0)},markRoomAsUnbookmarked(e){const t=Lc.chatboxes.get(e.get("jid"));void 0!==t&&t.save("bookmarked",!1)},createBookmarksFromStanza(e){au('items[node="storage:bookmarks"] item storage[xmlns="storage:bookmarks"] conference',e).forEach(e=>{var t;const n=e.getAttribute("jid");this.create({jid:n,name:e.getAttribute("name")||n,autojoin:"true"===e.getAttribute("autojoin"),nick:(null===(t=e.querySelector("nick"))||void 0===t?void 0:t.textContent)||""})})},onBookmarksReceived(e,t){if(this.createBookmarksFromStanza(t),window.sessionStorage.setItem(this.fetched_flag,!0),void 0!==e)return e.resolve()},onBookmarksReceivedError(t,n){if(null===n)Pn.error("Error: timeout while fetching bookmarks"),qc.alert("error",e("Timeout Error"),[e("The server did not return your bookmarks within the allowed time. You can reload the page to request them again.")]);else{if(t)return n.querySelector('error[type="cancel"] item-not-found')?(window.sessionStorage.setItem(this.fetched_flag,!0),t.resolve()):(Pn.error("Error while fetching bookmarks"),Pn.error(n),t.reject(new Error("Could not fetch bookmarks")));Pn.error("Error while fetching bookmarks"),Pn.error(n)}},getUnopenedBookmarks(){return this.filter(e=>!Lc.chatboxes.get(e.get("jid")))}}),Lc.BookmarksList=Rs.extend({defaults:{"toggle-state":Lc.OPENED}}),Lc.checkBookmarksSupport=async function(){const e=await qc.disco.getIdentity("pubsub","pep",Lc.bare_jid);return Lc.allow_public_bookmarks?!!e:qc.disco.supports(su.NS.PUBSUB+"#publish-options",Lc.bare_jid)};const t=async function(){qc.settings.get("allow_bookmarks")&&await Lc.checkBookmarksSupport()&&(Lc.bookmarks=new Lc.Bookmarks,await Lc.bookmarks.fetchBookmarks(),qc.trigger("bookmarksInitialized"))};qc.listen.on("clearSession",()=>{void 0!==Lc.bookmarks&&(Lc.bookmarks.clearStore({silent:!0}),window.sessionStorage.removeItem(Lc.bookmarks.fetched_flag),delete Lc.bookmarks)}),qc.listen.on("reconnected",t),qc.listen.on("connected",async()=>{Lc.connection.addHandler(e=>{au('event[xmlns="'+su.NS.PUBSUB+'#event"] items[node="storage:bookmarks"]',e).length&&qc.waitUntil("bookmarksInitialized").then(()=>Lc.bookmarks.createBookmarksFromStanza(e)).catch(e=>Pn.fatal(e))},null,"message","headline",null,Lc.bare_jid),await Promise.all([qc.waitUntil("chatBoxesFetched")]),t()})}});n(115);
+const{Strophe:yu,$iq:wu,sizzle:Su}=rl.env,xu=rl.env.utils;function Eu(e){return Su('event[xmlns="'.concat(yu.NS.PUBSUB,'#event"] items[node="').concat(yu.NS.BOOKMARKS,'"]'),e).length&&Vc.waitUntil("bookmarksInitialized").then(()=>Uc.bookmarks.createBookmarksFromStanza(e)).catch(e=>zn.fatal(e)),!0}yu.addNamespace("BOOKMARKS","storage:bookmarks"),rl.plugins.add("converse-bookmarks",{dependencies:["converse-chatboxes","converse-muc"],overrides:{ChatRoom:{getDisplayName(){const{_converse:e}=this.__super__;if(this.get("bookmarked")&&e.bookmarks){const t=e.bookmarks.findWhere({jid:this.get("jid")});if(t)return t.get("name")}return this.__super__.getDisplayName.apply(this,arguments)},getAndPersistNickname(e){const{_converse:t}=this.__super__;return e=e||t.getNicknameFromBookmark(this.get("jid")),this.__super__.getAndPersistNickname.call(this,e)}}},initialize(){const{__:e}=Uc;Vc.settings.extend({allow_bookmarks:!0,allow_public_bookmarks:!1,muc_respect_autojoin:!0}),Vc.promises.add("bookmarksInitialized"),Uc.getNicknameFromBookmark=function(e){if(!Uc.bookmarks||!Vc.settings.get("allow_bookmarks"))return null;const t=Uc.bookmarks.findWhere({jid:e});return t?t.get("nick"):void 0},Uc.Bookmark=qo.extend({idAttribute:"jid",getDisplayName(){return yu.xmlunescape(this.get("name"))}}),Uc.Bookmarks=ra.extend({model:Uc.Bookmark,comparator:e=>e.get("name").toLowerCase(),initialize(){this.on("add",e=>this.openBookmarkedRoom(e).then(e=>this.markRoomAsBookmarked(e)).catch(e=>zn.fatal(e))),this.on("remove",this.markRoomAsUnbookmarked,this),this.on("remove",this.sendBookmarkStanza,this);const e="converse.room-bookmarks".concat(Uc.bare_jid);this.fetched_flag=e+"fetched",this.browserStorage=Uc.createStore(e)},async openBookmarkedRoom(e){if(Vc.settings.get("muc_respect_autojoin")&&e.get("autojoin")){(await Vc.rooms.create(e.get("jid"),{nick:e.get("nick")})).maybeShow()}return e},fetchBookmarks(){const e=xu.getResolveablePromise();return window.sessionStorage.getItem(this.fetched_flag)?this.fetch({success:()=>e.resolve(),error:()=>e.resolve()}):this.fetchBookmarksFromServer(e),e},createBookmark(e){this.create(e),this.sendBookmarkStanza().catch(t=>this.onBookmarkError(t,e))},sendBookmarkStanza(){const e=wu({type:"set",from:Uc.connection.jid}).c("pubsub",{xmlns:yu.NS.PUBSUB}).c("publish",{node:yu.NS.BOOKMARKS}).c("item",{id:"current"}).c("storage",{xmlns:yu.NS.BOOKMARKS});return this.forEach(t=>{e.c("conference",{name:t.get("name"),autojoin:t.get("autojoin"),jid:t.get("jid")}).c("nick").t(t.get("nick")).up().up()}),e.up().up().up(),e.c("publish-options").c("x",{xmlns:yu.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t("http://jabber.org/protocol/pubsub#publish-options").up().up().c("field",{var:"pubsub#persist_items"}).c("value").t("true").up().up().c("field",{var:"pubsub#access_model"}).c("value").t("whitelist"),Vc.sendIQ(e)},onBookmarkError(t,n){zn.error("Error while trying to add bookmark"),zn.error(t),Vc.alert("error",e("Error"),[e("Sorry, something went wrong while trying to save your bookmark.")]),this.findWhere({jid:n.jid}).destroy()},fetchBookmarksFromServer(e){const t=wu({from:Uc.connection.jid,type:"get"}).c("pubsub",{xmlns:yu.NS.PUBSUB}).c("items",{node:yu.NS.BOOKMARKS});Vc.sendIQ(t).then(t=>this.onBookmarksReceived(e,t)).catch(t=>this.onBookmarksReceivedError(e,t))},markRoomAsBookmarked(e){const t=Uc.chatboxes.get(e.get("jid"));void 0!==t&&t.save("bookmarked",!0)},markRoomAsUnbookmarked(e){const t=Uc.chatboxes.get(e.get("jid"));void 0!==t&&t.save("bookmarked",!1)},createBookmarksFromStanza(e){const t=yu.NS.BOOKMARKS,n='items[node="'.concat(t,'"] item storage[xmlns="').concat(t,'"] conference');Su(n,e).forEach(e=>{var t;const n=e.getAttribute("jid"),r=this.get(n),i={jid:n,name:e.getAttribute("name")||n,autojoin:"true"===e.getAttribute("autojoin"),nick:(null===(t=e.querySelector("nick"))||void 0===t?void 0:t.textContent)||""};r?r.save(i):this.create(i)})},onBookmarksReceived(e,t){if(this.createBookmarksFromStanza(t),window.sessionStorage.setItem(this.fetched_flag,!0),void 0!==e)return e.resolve()},onBookmarksReceivedError(t,n){if(null===n)zn.error("Error: timeout while fetching bookmarks"),Vc.alert("error",e("Timeout Error"),[e("The server did not return your bookmarks within the allowed time. You can reload the page to request them again.")]);else{if(t)return n.querySelector('error[type="cancel"] item-not-found')?(window.sessionStorage.setItem(this.fetched_flag,!0),t.resolve()):(zn.error("Error while fetching bookmarks"),zn.error(n),t.reject(new Error("Could not fetch bookmarks")));zn.error("Error while fetching bookmarks"),zn.error(n)}},getUnopenedBookmarks(){return this.filter(e=>!Uc.chatboxes.get(e.get("jid")))}}),Uc.BookmarksList=qo.extend({defaults:{"toggle-state":Uc.OPENED}}),Uc.checkBookmarksSupport=async function(){const e=await Vc.disco.getIdentity("pubsub","pep",Uc.bare_jid);return Uc.allow_public_bookmarks?!!e:Vc.disco.supports(yu.NS.PUBSUB+"#publish-options",Uc.bare_jid)};const t=async function(){Vc.settings.get("allow_bookmarks")&&await Uc.checkBookmarksSupport()&&(Uc.bookmarks=new Uc.Bookmarks,await Uc.bookmarks.fetchBookmarks(),Vc.trigger("bookmarksInitialized"))};Vc.listen.on("addClientFeatures",()=>{Vc.settings.get("allow_bookmarks")&&Vc.disco.own.features.add(yu.NS.BOOKMARKS+"+notify")}),Vc.listen.on("clearSession",()=>{void 0!==Uc.bookmarks&&(Uc.bookmarks.clearStore({silent:!0}),window.sessionStorage.removeItem(Uc.bookmarks.fetched_flag),delete Uc.bookmarks)}),Vc.listen.on("reconnected",t),Vc.listen.on("connected",async()=>{const{connection:e}=Uc;e.addHandler(Eu,null,"message","headline",null,Uc.bare_jid),await Promise.all([Vc.waitUntil("chatBoxesFetched")]),t()})}});n(154);
 /**
  * @module converse-bosh
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description Converse.js plugin which add support for XEP-0206: XMPP Over BOSH
- */const{Strophe:lu}=Yc.env;Yc.plugins.add("converse-bosh",{enabled:()=>!Lc.api.settings.get("blacklisted_plugins").includes("converse-bosh"),initialize(){qc.settings.extend({bosh_service_url:void 0,prebind_url:null}),Lc.startNewPreboundBOSHSession=function(){if(!qc.settings.get("prebind_url"))throw new Error("startNewPreboundBOSHSession: If you use prebind then you MUST supply a prebind_url");const e=new XMLHttpRequest;e.open("GET",qc.settings.get("prebind_url"),!0),e.setRequestHeader("Accept","application/json, text/javascript"),e.onload=async function(){if(e.status>=200&&e.status<400){const t=JSON.parse(e.responseText),n=await Lc.setUserJID(t.jid);Lc.connection.attach(n,t.sid,t.rid,Lc.connection.onConnectStatusChanged)}else e.onerror()},e.onerror=function(){delete Lc.connection,qc.trigger("noResumeableBOSHSession",Lc)},e.send()},Lc.restoreBOSHSession=async function(){const e=(await async function(){const e="converse.bosh-session";if(Lc.bosh_session||(Lc.bosh_session=new Rs({id:e}),Lc.bosh_session.browserStorage=Lc.createStore(e,"session"),await new Promise(e=>Lc.bosh_session.fetch({success:e,error:e}))),Lc.jid){if(Lc.bosh_session.get("jid")!==Lc.jid){const e=await Lc.setUserJID(Lc.jid);Lc.bosh_session.clear({silent:!0}),Lc.bosh_session.save({jid:e})}}else{const e=Lc.bosh_session.get("jid");e&&await Lc.setUserJID(e)}return Lc.bosh_session}()).get("jid");if(e&&Lc.connection._proto instanceof lu.Bosh)try{return Lc.connection.restore(e,Lc.connection.onConnectStatusChanged),!0}catch(t){return!Lc.isTestEnv()&&Pn.warn("Could not restore session for jid: "+e+" Error message: "+t.message),!1}return!1},qc.listen.on("clearSession",()=>{if(void 0===Lc.bosh_session){const e="converse.bosh-session";sessionStorage.removeItem(e),sessionStorage.removeItem("".concat(e,"-").concat(e))}else Lc.bosh_session.destroy(),delete Lc.bosh_session}),qc.listen.on("setUserJID",()=>{void 0!==Lc.bosh_session&&Lc.bosh_session.save({jid:Lc.jid})}),qc.listen.on("addClientFeatures",()=>qc.disco.own.features.add(lu.NS.BOSH)),Object.assign(qc,{tokens:{get:e=>void 0===Lc.connection?null:"rid"===e.toLowerCase()?Lc.connection.rid||Lc.connection._proto.rid:"sid"===e.toLowerCase()?Lc.connection.sid||Lc.connection._proto.sid:void 0}})}});var uu=n(7);
+ */const{Strophe:Au}=rl.env;rl.plugins.add("converse-bosh",{enabled:()=>!Uc.api.settings.get("blacklisted_plugins").includes("converse-bosh"),initialize(){Vc.settings.extend({bosh_service_url:void 0,prebind_url:null}),Uc.startNewPreboundBOSHSession=function(){if(!Vc.settings.get("prebind_url"))throw new Error("startNewPreboundBOSHSession: If you use prebind then you MUST supply a prebind_url");const e=new XMLHttpRequest;e.open("GET",Vc.settings.get("prebind_url"),!0),e.setRequestHeader("Accept","application/json, text/javascript"),e.onload=async function(){if(e.status>=200&&e.status<400){const t=JSON.parse(e.responseText),n=await Uc.setUserJID(t.jid);Uc.connection.attach(n,t.sid,t.rid,Uc.connection.onConnectStatusChanged)}else e.onerror()},e.onerror=function(){delete Uc.connection,Vc.trigger("noResumeableBOSHSession",Uc)},e.send()},Uc.restoreBOSHSession=async function(){const e=(await async function(){const e="converse.bosh-session";if(Uc.bosh_session||(Uc.bosh_session=new qo({id:e}),Uc.bosh_session.browserStorage=Uc.createStore(e,"session"),await new Promise(e=>Uc.bosh_session.fetch({success:e,error:e}))),Uc.jid){if(Uc.bosh_session.get("jid")!==Uc.jid){const e=await Uc.setUserJID(Uc.jid);Uc.bosh_session.clear({silent:!0}),Uc.bosh_session.save({jid:e})}}else{const e=Uc.bosh_session.get("jid");e&&await Uc.setUserJID(e)}return Uc.bosh_session}()).get("jid");if(e&&Uc.connection._proto instanceof Au.Bosh)try{return Uc.connection.restore(e,Uc.connection.onConnectStatusChanged),!0}catch(t){return!Uc.isTestEnv()&&zn.warn("Could not restore session for jid: "+e+" Error message: "+t.message),!1}return!1},Vc.listen.on("clearSession",()=>{if(void 0===Uc.bosh_session){const e="converse.bosh-session";sessionStorage.removeItem(e),sessionStorage.removeItem("".concat(e,"-").concat(e))}else Uc.bosh_session.destroy(),delete Uc.bosh_session}),Vc.listen.on("setUserJID",()=>{void 0!==Uc.bosh_session&&Uc.bosh_session.save({jid:Uc.jid})}),Vc.listen.on("addClientFeatures",()=>Vc.disco.own.features.add(Au.NS.BOSH)),Object.assign(Vc,{tokens:{get:e=>void 0===Uc.connection?null:"rid"===e.toLowerCase()?Uc.connection.rid||Uc.connection._proto.rid:"sid"===e.toLowerCase()?Uc.connection.sid||Uc.connection._proto.sid:void 0}})}});var Cu=n(7);
 /**
  * @module converse-caps
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:du,$build:hu}=Yc.env;function fu(e,t){return e.sort((e,n)=>e[t]>n[t]?-1:1)}function pu(e){const t=e.api.disco.own.identities.get(),n=e.api.disco.own.features.get();t.length>1&&(fu(t,"category"),fu(t,"type"),fu(t,"lang"));let r=t.reduce((e,t)=>{var n;return"".concat(e).concat(t.category,"/").concat(t.type,"/").concat(null!==(n=null==t?void 0:t.lang)&&void 0!==n?n:"","/").concat(t.name,"<")},"");return n.sort(),r=n.reduce((e,t)=>"".concat(e).concat(t,"<"),r),uu.a.b64_sha1(r)}du.addNamespace("CAPS","http://jabber.org/protocol/caps"),Yc.plugins.add("converse-caps",{overrides:{XMPPStatus:{constructPresence(){const e=this.__super__.constructPresence.apply(this,arguments);var t;return e.root().cnode((t=this.__super__._converse,hu("c",{xmlns:du.NS.CAPS,hash:"sha-1",node:"https://conversejs.org",ver:pu(t)}).nodeTree)),e}}}}),Yc.plugins.add("converse-carbons",{initialize(){qc.settings.extend({message_carbons:!0}),qc.listen.on("afterResourceBinding",()=>
+ */const{Strophe:ju,$build:Tu}=rl.env;function Ou(e,t){return e.sort((e,n)=>e[t]>n[t]?-1:1)}function ku(e){const t=e.api.disco.own.identities.get(),n=e.api.disco.own.features.get();t.length>1&&(Ou(t,"category"),Ou(t,"type"),Ou(t,"lang"));let r=t.reduce((e,t)=>{var n;return"".concat(e).concat(t.category,"/").concat(t.type,"/").concat(null!==(n=null==t?void 0:t.lang)&&void 0!==n?n:"","/").concat(t.name,"<")},"");return n.sort(),r=n.reduce((e,t)=>"".concat(e).concat(t,"<"),r),Cu.a.b64_sha1(r)}
 /**
  * @module converse-carbons
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description Implements support for XEP-0280 Message Carbons
  */
-function(){var e;if(!qc.settings.get("message_carbons")||(null===(e=Lc.session)||void 0===e?void 0:e.get("carbons_enabled")))return;const t=new Ec.e.Builder("iq",{from:Lc.connection.jid,id:"enablecarbons",type:"set"}).c("enable",{xmlns:Ec.e.NS.CARBONS});Lc.connection.addHandler(e=>{e.querySelectorAll("error").length>0?Pn.warn("An error occurred while trying to enable message carbons."):(Lc.session.save({carbons_enabled:!0}),Pn.debug("Message carbons have been enabled."))},null,"iq",null,"enablecarbons"),Lc.connection.send(t)}())}});
+function Nu(e){var t,n;e&&(null===(n=Uc.session)||void 0===n||n.set({carbons_enabled:!1}));if(!Vc.settings.get("message_carbons")||(null===(t=Uc.session)||void 0===t?void 0:t.get("carbons_enabled")))return;const r=new kc.e.Builder("iq",{from:Uc.connection.jid,id:"enablecarbons",type:"set"}).c("enable",{xmlns:kc.e.NS.CARBONS});Uc.connection.addHandler(e=>{e.querySelectorAll("error").length>0?zn.warn("An error occurred while trying to enable message carbons."):(Uc.session.set({carbons_enabled:!0}),zn.debug("Message carbons have been enabled.")),Uc.session.save()},null,"iq",null,"enablecarbons"),Uc.connection.send(r)}ju.addNamespace("CAPS","http://jabber.org/protocol/caps"),rl.plugins.add("converse-caps",{overrides:{XMPPStatus:{constructPresence(){const e=this.__super__.constructPresence.apply(this,arguments);var t;return e.root().cnode((t=this.__super__._converse,Tu("c",{xmlns:ju.NS.CAPS,hash:"sha-1",node:"https://conversejs.org",ver:ku(t)}).nodeTree)),e}}}}),rl.plugins.add("converse-carbons",{initialize(){Vc.settings.extend({message_carbons:!0}),Vc.listen.on("afterResourceBinding",Nu)}});
 /**
  * @module converse-chatboxes
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:gu}=Yc.env;gu.addNamespace("MESSAGE_CORRECT","urn:xmpp:message-correct:0"),gu.addNamespace("RECEIPTS","urn:xmpp:receipts"),gu.addNamespace("REFERENCE","urn:xmpp:reference:0"),gu.addNamespace("MARKERS","urn:xmpp:chat-markers:0"),Yc.plugins.add("converse-chatboxes",{dependencies:["converse-emoji","converse-roster","converse-vcard"],initialize(){qc.promises.add(["chatBoxesFetched","chatBoxesInitialized","privateChatsAutoJoined"]);let e=0;async function t(e,t,n){let r;e=gu.getBareJidFromJid(e.toLowerCase()),Object.assign(t,{jid:e,id:e});try{r=new n(t,{collection:Lc.chatboxes})}catch(e){return Pn.error(e),null}return await r.initialized,r.isValid()?(Lc.chatboxes.add(r),await r.messages.fetched,r):(r.destroy(),null)}Lc.incrementMsgCounter=function(){e+=1;const t=document.title;t&&(-1===t.search(/^Messages \(\d+\) /)?document.title="Messages (".concat(e,") ").concat(t):document.title=t.replace(/^Messages \(\d+\) /,"Messages (".concat(e,") ")))},Lc.clearMsgCounter=function(){e=0;const t=document.title;t&&-1!==t.search(/^Messages \(\d+\) /)&&(document.title=t.replace(/^Messages \(\d+\) /,""))},Lc.ChatBoxes=Yo.extend({comparator:"time_opened",model:(e,t)=>new Lc.ChatBox(e,t),onChatBoxesFetched(e){e.filter(e=>!e.isValid()).forEach(e=>e.destroy()),qc.trigger("chatBoxesFetched")},onConnected(e){e||(this.browserStorage=Lc.createStore("converse.chatboxes-".concat(Lc.bare_jid)),this.fetch({add:!0,success:e=>this.onChatBoxesFetched(e)}))}}),qc.listen.on("addClientFeatures",()=>{qc.disco.own.features.add(gu.NS.MESSAGE_CORRECT),qc.disco.own.features.add(gu.NS.HTTPUPLOAD),qc.disco.own.features.add(gu.NS.OUTOFBAND)}),qc.listen.on("pluginsInitialized",()=>{Lc.chatboxes=new Lc.ChatBoxes,qc.trigger("chatBoxesInitialized")}),qc.listen.on("presencesInitialized",e=>Lc.chatboxes.onConnected(e)),qc.listen.on("reconnected",()=>Lc.chatboxes.forEach(e=>e.onReconnection())),qc.listen.on("windowStateChanged",e=>"visible"===e.state&&Lc.clearMsgCounter()),Object.assign(qc,{chatboxes:{create:async(e=[],n={},r)=>(await qc.waitUntil("chatBoxesFetched"),"string"==typeof e?t(e,n,r):Promise.all(e.map(e=>t(e,n,r)))),get:async e=>(await qc.waitUntil("chatBoxesFetched"),void 0===e?Lc.chatboxes.models:"string"==typeof e?Lc.chatboxes.get(e.toLowerCase()):(e=e.map(e=>e.toLowerCase()),Lc.chatboxes.models.filter(t=>e.includes(t.get("jid")))))}})}}),Yc.plugins.add("converse-headlines",{dependencies:["converse-chat"],overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e.type==n.HEADLINES_TYPE?new n.HeadlinesBox(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){function e(){Lc.connection.addHandler(e=>async function(e){if(ao.isHeadline(e)||ao.isServerMessage(e)){const t=e.getAttribute("from");if(t.includes("@")&&!Lc.roster.get(t)&&!qc.settings.get("allow_non_roster_messaging"))return;if(null===e.querySelector("body"))return;const n=Lc.chatboxes.create({id:t,jid:t,type:Lc.HEADLINES_TYPE,from:t}),r=await ao.parseMessage(e,Lc);await n.createMessage(r),qc.trigger("message",{chatbox:n,stanza:e,attrs:r})}}(e)||!0,null,"message")}Lc.HeadlinesBox=Lc.ChatBox.extend({defaults(){return{bookmarked:!1,hidden:["mobile","fullscreen"].includes(qc.settings.get("view_mode")),message_type:"headline",num_unread:0,time_opened:this.get("time_opened")||(new Date).getTime(),type:Lc.HEADLINES_TYPE}},initialize(){this.initMessages(),this.set({box_id:"box-".concat(this.get("jid"))}),qc.trigger("headlinesBoxInitialized",this)}}),qc.listen.on("connected",e),qc.listen.on("reconnected",e),Object.assign(qc,{headlines:{async get(e,t={},n=!1){async function r(e){let r=await qc.chatboxes.get(e);return!r&&n?r=await qc.chatboxes.create(e,t,Lc.HeadlinesBox):(r=r&&r.get("type")===Lc.HEADLINES_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await qc.chatboxes.get()).filter(e=>e.get("type")===Lc.HEADLINES_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}})}});
+const{Strophe:Iu}=rl.env;Iu.addNamespace("MESSAGE_CORRECT","urn:xmpp:message-correct:0"),Iu.addNamespace("RECEIPTS","urn:xmpp:receipts"),Iu.addNamespace("REFERENCE","urn:xmpp:reference:0"),Iu.addNamespace("MARKERS","urn:xmpp:chat-markers:0"),rl.plugins.add("converse-chatboxes",{dependencies:["converse-emoji","converse-roster","converse-vcard"],initialize(){async function e(e,t,n){let r;e=Iu.getBareJidFromJid(e.toLowerCase()),Object.assign(t,{jid:e,id:e});try{r=new n(t,{collection:Uc.chatboxes})}catch(e){return zn.error(e),null}return await r.initialized,r.isValid()?(Uc.chatboxes.add(r),r):(r.destroy(),null)}Vc.promises.add(["chatBoxesFetched","chatBoxesInitialized","privateChatsAutoJoined"]),Uc.ChatBoxes=ra.extend({comparator:"time_opened",model:(e,t)=>new Uc.ChatBox(e,t),onChatBoxesFetched(e){e.filter(e=>!e.isValid()).forEach(e=>e.destroy()),Vc.trigger("chatBoxesFetched")},onConnected(e){e||(this.browserStorage=Uc.createStore("converse.chatboxes-".concat(Uc.bare_jid)),this.fetch({add:!0,success:e=>this.onChatBoxesFetched(e)}))}}),Vc.listen.on("addClientFeatures",()=>{Vc.disco.own.features.add(Iu.NS.MESSAGE_CORRECT),Vc.disco.own.features.add(Iu.NS.HTTPUPLOAD),Vc.disco.own.features.add(Iu.NS.OUTOFBAND)}),Vc.listen.on("pluginsInitialized",()=>{Uc.chatboxes=new Uc.ChatBoxes,Vc.trigger("chatBoxesInitialized")}),Vc.listen.on("presencesInitialized",e=>Uc.chatboxes.onConnected(e)),Vc.listen.on("reconnected",()=>Uc.chatboxes.forEach(e=>e.onReconnection())),Object.assign(Vc,{chatboxes:{create:async(t=[],n={},r)=>(await Vc.waitUntil("chatBoxesFetched"),"string"==typeof t?e(t,n,r):Promise.all(t.map(t=>e(t,n,r)))),get:async e=>(await Vc.waitUntil("chatBoxesFetched"),void 0===e?Uc.chatboxes.models:"string"==typeof e?Uc.chatboxes.get(e.toLowerCase()):(e=e.map(e=>e.toLowerCase()),Uc.chatboxes.models.filter(t=>e.includes(t.get("jid")))))}})}}),rl.plugins.add("converse-headlines",{dependencies:["converse-chat"],overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e.type==n.HEADLINES_TYPE?new n.HeadlinesBox(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){function e(){Uc.connection.addHandler(e=>async function(e){if(ps.isHeadline(e)||ps.isServerMessage(e)){const t=e.getAttribute("from");if(t.includes("@")&&!Uc.roster.get(t)&&!Vc.settings.get("allow_non_roster_messaging"))return;if(null===e.querySelector("body"))return;const n=Uc.chatboxes.create({id:t,jid:t,type:Uc.HEADLINES_TYPE,from:t}),r=await ps.parseMessage(e,Uc);await n.createMessage(r),Vc.trigger("message",{chatbox:n,stanza:e,attrs:r})}}(e)||!0,null,"message")}Uc.HeadlinesBox=Uc.ChatBox.extend({defaults(){return{bookmarked:!1,hidden:["mobile","fullscreen"].includes(Vc.settings.get("view_mode")),message_type:"headline",num_unread:0,time_opened:this.get("time_opened")||(new Date).getTime(),type:Uc.HEADLINES_TYPE}},async initialize(){this.set({box_id:"box-".concat(this.get("jid"))}),this.initMessages(),await this.fetchMessages(),Vc.trigger("headlinesBoxInitialized",this)}}),Vc.listen.on("connected",e),Vc.listen.on("reconnected",e),Object.assign(Vc,{headlines:{async get(e,t={},n=!1){async function r(e){let r=await Vc.chatboxes.get(e);return!r&&n?r=await Vc.chatboxes.create(e,t,Uc.HeadlinesBox):(r=r&&r.get("type")===Uc.HEADLINES_TYPE?r:null,r&&Object.keys(t).length&&r.save(t)),r}if(void 0===e){return(await Vc.chatboxes.get()).filter(e=>e.get("type")===Uc.HEADLINES_TYPE)}return"string"==typeof e?r(e):Promise.all(e.map(e=>r(e)))}}})}});
 /**
  * @module converse-rsm
  * @copyright The Converse.js contributors
@@ -319,13 +327,14 @@ const{Strophe:gu}=Yc.env;gu.addNamespace("MESSAGE_CORRECT","urn:xmpp:message-cor
  *   Some code taken from the Strophe RSM plugin, licensed under the MIT License
  *   Copyright 2006-2017 Strophe (https://github.com/strophe/strophejs)
  */
-const{Strophe:mu,$build:vu}=Yc.env;mu.addNamespace("RSM","http://jabber.org/protocol/rsm");const _u=["after","before","index","max"],bu=e=>Number(e),yu=e=>e.toString(),wu={after:yu,before:yu,count:bu,first:yu,index:bu,last:yu,max:bu},Su=e=>void 0===e,xu=Object.keys(wu);class Eu{static getQueryParameters(e={}){return Ms(e,_u)}static parseXMLResult(e){const t={};for(var n=0;n<xu.length;n++){const r=xu[n],i=e.getElementsByTagName(r)[0];Su(i)||null===i||(t[r]=wu[r](mu.getText(i)),"first"==r&&(t.index=wu.index(i.getAttribute("index"))))}return t}constructor(e={}){this.query=Eu.getQueryParameters(e),this.result=e.xml?Eu.parseXMLResult(e.xml):{}}toXML(){const e=vu("set",{xmlns:mu.NS.RSM});return _u.reduce((e,t)=>Su(this.query[t])?e:e.c(t).t((this.query[t]||"").toString()).up(),e).tree()}next(e,t){const n=Object.assign({},this.query,{after:this.result.last,before:t,max:e});return new Eu(n)}previous(e,t){const n=Object.assign({},this.query,{after:t,before:this.result.first,max:e});return new Eu(n)}}function Au(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Cu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Au(Object(n),!0).forEach((function(t){ju(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Au(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ju(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+const{Strophe:Mu,$build:Ru}=rl.env;Mu.addNamespace("RSM","http://jabber.org/protocol/rsm");const Du=["after","before","index","max"],Pu=e=>Number(e),Lu=e=>e.toString(),zu={after:Lu,before:Lu,count:Pu,first:Lu,index:Pu,last:Lu,max:Pu},Fu=e=>void 0===e,Bu=Object.keys(zu);class qu{static getQueryParameters(e={}){return Bo(e,Du)}static parseXMLResult(e){const t={};for(var n=0;n<Bu.length;n++){const r=Bu[n],i=e.getElementsByTagName(r)[0];Fu(i)||null===i||(t[r]=zu[r](Mu.getText(i)),"first"==r&&(t.index=zu.index(i.getAttribute("index"))))}return t}constructor(e={}){this.query=qu.getQueryParameters(e),this.result=e.xml?qu.parseXMLResult(e.xml):{}}toXML(){const e=Ru("set",{xmlns:Mu.NS.RSM});return Du.reduce((e,t)=>Fu(this.query[t])?e:e.c(t).t((this.query[t]||"").toString()).up(),e).tree()}next(e,t){const n=Object.assign({},this.query,{after:this.result.last,before:t,max:e});return new qu(n)}previous(e,t){const n=Object.assign({},this.query,{after:t,before:this.result.first,max:e});return new qu(n)}}Uc.RSM_ATTRIBUTES=Bu,Uc.RSM=qu;
 /**
  * @module converse-mam
  * @description XEP-0313 Message Archive Management
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */Lc.RSM_ATTRIBUTES=xu,Lc.RSM=Eu;const{Strophe:Tu,$iq:Ou,dayjs:ku}=Yc.env,{NS:Nu}=Tu,Iu=Yc.env.utils,Mu={fetchNewestMessages(){if(this.disable_mam)return;const e=this.getMostRecentMessage();if(e&&!qc.settings.get("clear_messages_on_reconnection")){const t=e.get("stanza_id ".concat(this.get("jid")));t?this.fetchArchivedMessages({after:t},"forwards"):this.fetchArchivedMessages({start:e.get("time")},"forwards")}else this.fetchArchivedMessages({before:""})},async handleMAMResult(e,t,n,r){await qc.emojis.initialize();const i=this.get("type")===Lc.CHATROOMS_TYPE;e.messages=e.messages.map(e=>i?ao.parseMUCMessage(e,this,Lc):ao.parseMessage(e,Lc));const s={query:t,chatbox:this,messages:e.messages};if(await qc.trigger("MAMResult",s,{synchronous:!0}),e.messages.forEach(e=>this.queueMessage(e)),e.error){const t=e.error.retry_event_id=Iu.getUniqueId();qc.listen.once(t,()=>this.fetchArchivedMessages(n,r)),this.createMessageFromError(e.error)}},async fetchArchivedMessages(e={},t){if(this.disable_mam)return;const n=this.get("type")===Lc.CHATROOMS_TYPE,r=n?this.get("jid"):Lc.bare_jid;if(!await qc.disco.supports(Nu.MAM,r))return;const i=qc.settings.get("archived_messages_page_size"),s=Object.assign({groupchat:n,max:i,with:this.get("jid")},e),o=await qc.archive.query(s);return await this.handleMAMResult(o,s,e,t),t&&o.rsm&&!o.complete?("forwards"===t?e=o.rsm.next(i,e.before).query:"backwards"===t&&(e=o.rsm.previous(i,e.after).query),this.fetchArchivedMessages(e,t)):void 0}};Yc.plugins.add("converse-mam",{dependencies:["converse-disco","converse-muc"],initialize(){function e(e){qc.settings.get("muc_show_logs_before_join")&&e.features.get("mam_enabled")&&!e.get("prejoin_mam_fetched")&&(e.fetchNewestMessages(),e.save({prejoin_mam_fetched:!0}))}qc.settings.extend({archived_messages_page_size:"50",message_archiving:void 0,message_archiving_timeout:2e4}),Object.assign(Lc.ChatBox.prototype,Mu),Lc.onMAMError=function(e){(null==e?void 0:e.querySelectorAll("feature-not-implemented").length)?Pn.warn("Message Archive Management (XEP-0313) not supported by ".concat(e.getAttribute("from"))):(Pn.error("Error while trying to set archiving preferences for ".concat(e.getAttribute("from"),".")),Pn.error(e))},Lc.onMAMPreferences=function(e,t){const n=ur()('prefs[xmlns="'.concat(Nu.MAM,'"]'),e).pop();if(n.getAttribute("default")!==qc.settings.get("message_archiving")){const e=Ou({type:"set"}).c("prefs",{xmlns:Nu.MAM,default:qc.settings.get("message_archiving")});Array.from(n.children).forEach(t=>e.cnode(t).up()),qc.sendIQ(e).then(()=>t.save({preferences:{default:qc.settings.get("message_archiving")}})).catch(Lc.onMAMError)}else t.save({preferences:{default:qc.settings.get("message_archiving")}})},qc.listen.on("addClientFeatures",()=>qc.disco.own.features.add(Nu.MAM)),qc.listen.on("serviceDiscovered",(function(e){const t=e.get("preferences")||{};e.get("var")===Nu.MAM&&void 0!==qc.settings.get("message_archiving")&&t.default!==qc.settings.get("message_archiving")&&qc.sendIQ(Ou({type:"get"}).c("prefs",{xmlns:Nu.MAM})).then(t=>Lc.onMAMPreferences(t,e)).catch(Lc.onMAMError)})),qc.listen.on("chatRoomViewInitialized",t=>{qc.settings.get("muc_show_logs_before_join")&&(e(t.model),t.model.features.on("change:mam_enabled",()=>e(t.model)))}),qc.listen.on("enteredNewRoom",e=>e.features.get("mam_enabled")&&e.fetchNewestMessages()),qc.listen.on("chatReconnected",e=>{e.get("type")===Lc.PRIVATE_CHAT_TYPE&&e.fetchNewestMessages()}),qc.listen.on("afterMessagesFetched",e=>{e.get("type")!==Lc.PRIVATE_CHAT_TYPE||Lc.connection.restored||e.fetchNewestMessages()}),Object.assign(qc,{archive:{async query(e){if(!qc.connection.connected())throw new Error("Can't call `api.archive.query` before having established an XMPP session");const t={type:"set"};if(e&&e.groupchat){if(!e.with)throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');t.to=e.with}const n=t.to||Lc.bare_jid;if(!await qc.disco.supports(Nu.MAM,n))return Pn.warn("Did not fetch MAM archive for ".concat(n," because it doesn't support ").concat(Nu.MAM)),{messages:[]};const r=Iu.getUniqueId(),i=Ou(t).c("query",{xmlns:Nu.MAM,queryid:r});if(e){i.c("x",{xmlns:Nu.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t(Nu.MAM).up().up(),e.with&&!e.groupchat&&i.c("field",{var:"with"}).c("value").t(e.with).up().up(),["start","end"].forEach(t=>{if(e[t]){const n=ku(e[t]);if(!n.isValid())throw new TypeError("archive.query: invalid date provided for: ".concat(t));i.c("field",{var:t}).c("value").t(n.toISOString()).up().up()}}),i.up();const t=new Eu(e);Object.keys(t.query).length&&i.cnode(t.toXML())}const s=[],o=Lc.connection.addHandler(t=>{const n=ur()('message > result[xmlns="'.concat(Nu.MAM,'"]'),t).pop();if(void 0===n||n.getAttribute("queryid")!==r)return!0;const i=t.getAttribute("from")||Lc.bare_jid;if(e.groupchat){if(i!==e.with)return Pn.warn("Ignoring alleged groupchat MAM message from ".concat(t.getAttribute("from"))),!0}else if(i!==Lc.bare_jid)return Pn.warn("Ignoring alleged MAM message from ".concat(t.getAttribute("from"))),!0;return s.push(t),!0},Nu.MAM);let a;const c=await qc.sendIQ(i,qc.settings.get("message_archiving_timeout"),!1);if(null===c){const{__:e}=Lc,t=e("Timeout while trying to fetch archived messages.");return Pn.error(t),a=new Lc.TimeoutError(t),{messages:s,error:a}}if(Iu.isErrorStanza(c)){const{__:e}=Lc,t=e("An error occurred while querying for archived messages.");return Pn.error(t),Pn.error(c),a=new Error(t),{messages:s,error:a}}let l;Lc.connection.deleteHandler(o);const u=c&&ur()('fin[xmlns="'.concat(Nu.MAM,'"]'),c).pop(),d="true"===(null==u?void 0:u.getAttribute("complete")),h=ur()('set[xmlns="'.concat(Nu.RSM,'"]'),u).pop();return h&&(l=new Eu(Cu(Cu({},e),{},{xml:h}))),{messages:s,rsm:l,complete:d}}}})}});
+ */
+const{Strophe:Hu,$iq:Uu,dayjs:$u}=rl.env,{NS:Wu}=Hu,Gu=rl.env.utils,Vu={fetchNewestMessages(){if(this.disable_mam)return;const e=this.getMostRecentMessage();if(e&&!Vc.settings.get("clear_messages_on_reconnection")){const t=e.get("stanza_id ".concat(this.get("jid")));t?this.fetchArchivedMessages({after:t},"forwards"):this.fetchArchivedMessages({start:e.get("time")},"forwards")}else this.fetchArchivedMessages({before:""})},async handleMAMResult(e,t,n,r){await Vc.emojis.initialize();const i=this.get("type")===Uc.CHATROOMS_TYPE;e.messages=e.messages.map(e=>i?ps.parseMUCMessage(e,this,Uc):ps.parseMessage(e,Uc));const o={query:t,chatbox:this,messages:e.messages};if(await Vc.trigger("MAMResult",o,{synchronous:!0}),e.messages.forEach(e=>this.queueMessage(e)),e.error){const t=e.error.retry_event_id=Gu.getUniqueId();Vc.listen.once(t,()=>this.fetchArchivedMessages(n,r)),this.createMessageFromError(e.error)}},async fetchArchivedMessages(e={},t){if(this.disable_mam)return;const n=this.get("type")===Uc.CHATROOMS_TYPE,r=n?this.get("jid"):Uc.bare_jid;if(!await Vc.disco.supports(Wu.MAM,r))return;const i=Vc.settings.get("archived_messages_page_size"),o=Object.assign({groupchat:n,max:i,with:this.get("jid")},e),s=await Vc.archive.query(o);return await this.handleMAMResult(s,o,e,t),t&&s.rsm&&!s.complete?("forwards"===t?e=s.rsm.next(i,e.before).query:"backwards"===t&&(e=s.rsm.previous(i,e.after).query),this.fetchArchivedMessages(e,t)):void 0}};rl.plugins.add("converse-mam",{dependencies:["converse-disco","converse-muc"],initialize(){function e(e){Vc.settings.get("muc_show_logs_before_join")&&e.features.get("mam_enabled")&&!e.get("prejoin_mam_fetched")&&(e.fetchNewestMessages(),e.save({prejoin_mam_fetched:!0}))}Vc.settings.extend({archived_messages_page_size:"50",message_archiving:void 0,message_archiving_timeout:2e4}),Object.assign(Uc.ChatBox.prototype,Vu),Uc.onMAMError=function(e){(null==e?void 0:e.querySelectorAll("feature-not-implemented").length)?zn.warn("Message Archive Management (XEP-0313) not supported by ".concat(e.getAttribute("from"))):(zn.error("Error while trying to set archiving preferences for ".concat(e.getAttribute("from"),".")),zn.error(e))},Uc.onMAMPreferences=function(e,t){const n=mr()('prefs[xmlns="'.concat(Wu.MAM,'"]'),e).pop();if(n.getAttribute("default")!==Vc.settings.get("message_archiving")){const e=Uu({type:"set"}).c("prefs",{xmlns:Wu.MAM,default:Vc.settings.get("message_archiving")});Array.from(n.children).forEach(t=>e.cnode(t).up()),Vc.sendIQ(e).then(()=>t.save({preferences:{default:Vc.settings.get("message_archiving")}})).catch(Uc.onMAMError)}else t.save({preferences:{default:Vc.settings.get("message_archiving")}})},Vc.listen.on("addClientFeatures",()=>Vc.disco.own.features.add(Wu.MAM)),Vc.listen.on("serviceDiscovered",(function(e){const t=e.get("preferences")||{};e.get("var")===Wu.MAM&&void 0!==Vc.settings.get("message_archiving")&&t.default!==Vc.settings.get("message_archiving")&&Vc.sendIQ(Uu({type:"get"}).c("prefs",{xmlns:Wu.MAM})).then(t=>Uc.onMAMPreferences(t,e)).catch(Uc.onMAMError)})),Vc.listen.on("chatRoomViewInitialized",t=>{Vc.settings.get("muc_show_logs_before_join")&&(e(t.model),t.model.features.on("change:mam_enabled",()=>e(t.model)))}),Vc.listen.on("enteredNewRoom",e=>e.features.get("mam_enabled")&&e.fetchNewestMessages()),Vc.listen.on("chatReconnected",e=>{e.get("type")===Uc.PRIVATE_CHAT_TYPE&&e.fetchNewestMessages()}),Vc.listen.on("afterMessagesFetched",e=>{e.get("type")!==Uc.PRIVATE_CHAT_TYPE||Uc.connection.restored||e.fetchNewestMessages()}),Object.assign(Vc,{archive:{async query(e){if(!Vc.connection.connected())throw new Error("Can't call `api.archive.query` before having established an XMPP session");const t={type:"set"};if(e&&e.groupchat){if(!e.with)throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');t.to=e.with}const n=t.to||Uc.bare_jid;if(!await Vc.disco.supports(Wu.MAM,n))return zn.warn("Did not fetch MAM archive for ".concat(n," because it doesn't support ").concat(Wu.MAM)),{messages:[]};const r=Gu.getUniqueId(),i=Uu(t).c("query",{xmlns:Wu.MAM,queryid:r});if(e){i.c("x",{xmlns:Wu.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t(Wu.MAM).up().up(),e.with&&!e.groupchat&&i.c("field",{var:"with"}).c("value").t(e.with).up().up(),["start","end"].forEach(t=>{if(e[t]){const n=$u(e[t]);if(!n.isValid())throw new TypeError("archive.query: invalid date provided for: ".concat(t));i.c("field",{var:t}).c("value").t(n.toISOString()).up().up()}}),i.up();const t=new qu(e);Object.keys(t.query).length&&i.cnode(t.toXML())}const o=[],s=Uc.connection.addHandler(t=>{const n=mr()('message > result[xmlns="'.concat(Wu.MAM,'"]'),t).pop();if(void 0===n||n.getAttribute("queryid")!==r)return!0;const i=t.getAttribute("from")||Uc.bare_jid;if(e.groupchat){if(i!==e.with)return zn.warn("Ignoring alleged groupchat MAM message from ".concat(t.getAttribute("from"))),!0}else if(i!==Uc.bare_jid)return zn.warn("Ignoring alleged MAM message from ".concat(t.getAttribute("from"))),!0;return o.push(t),!0},Wu.MAM);let a;const c=await Vc.sendIQ(i,Vc.settings.get("message_archiving_timeout"),!1);if(null===c){const{__:e}=Uc,t=e("Timeout while trying to fetch archived messages.");return zn.error(t),a=new Uc.TimeoutError(t),{messages:o,error:a}}if(Gu.isErrorStanza(c)){const{__:e}=Uc,t=e("An error occurred while querying for archived messages.");return zn.error(t),zn.error(c),a=new Error(t),{messages:o,error:a}}let l;Uc.connection.deleteHandler(s);const u=c&&mr()('fin[xmlns="'.concat(Wu.MAM,'"]'),c).pop(),d="true"===(null==u?void 0:u.getAttribute("complete")),h=mr()('set[xmlns="'.concat(Wu.RSM,'"]'),u).pop();return h&&(l=new qu({...e,xml:h})),{messages:o,rsm:l,complete:d}}}})}});
 /**
  * @module converse-ping
  * @description
@@ -334,43 +343,43 @@ const{Strophe:mu,$build:vu}=Yc.env;mu.addNamespace("RSM","http://jabber.org/prot
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:Ru,$iq:Du}=Yc.env,Pu=Yc.env.utils;Ru.addNamespace("PING","urn:xmpp:ping"),Yc.plugins.add("converse-ping",{initialize(){let e;function t(t){e=new Date;const n=t.getAttribute("from"),r=t.getAttribute("id"),i=Du({type:"result",to:n,id:r});return Lc.connection.sendIQ(i),!0}qc.settings.extend({ping_interval:60}),setTimeout(()=>{if(qc.settings.get("ping_interval")>0){const t=new Date;return e||(e=t),!((t-e)/1e3>qc.settings.get("ping_interval"))||qc.ping()}},1e3);const n=function(){void 0!==Lc.connection.disco&&qc.disco.own.features.add(Ru.NS.PING),Lc.connection.addHandler(t,Ru.NS.PING,"iq","get"),Lc.connection.addHandler(()=>{if(qc.settings.get("ping_interval")>0)return e=new Date,!0})};qc.listen.on("connected",n),qc.listen.on("reconnected",n),qc.listen.on("windowStateChanged",(function(e){"visible"===e.state&&qc.connection.connected()&&qc.ping(null,5e3)})),Object.assign(qc,{async ping(t,n){if(e=new Date,t=t||Ru.getDomainFromJid(Lc.bare_jid),Lc.connection){const e=Du({type:"get",to:t,id:Pu.getUniqueId("ping")}).c("ping",{xmlns:Ru.NS.PING}),r=await qc.sendIQ(e,n||1e4,!1);return null===r?(Pn.warn("Timeout while pinging ".concat(t)),t===Ru.getDomainFromJid(Lc.bare_jid)&&qc.connection.reconnect()):Pu.isErrorStanza(r)&&(Pn.error("Error while pinging ".concat(t)),Pn.error(r)),!0}return!1}})}});
+const{Strophe:Ju,$iq:Xu}=rl.env,Qu=rl.env.utils;Ju.addNamespace("PING","urn:xmpp:ping"),rl.plugins.add("converse-ping",{initialize(){let e;function t(t){e=new Date;const n=t.getAttribute("from"),r=t.getAttribute("id"),i=Xu({type:"result",to:n,id:r});return Uc.connection.sendIQ(i),!0}Vc.settings.extend({ping_interval:60}),setTimeout(()=>{if(Vc.settings.get("ping_interval")>0){const t=new Date;return e||(e=t),!((t-e)/1e3>Vc.settings.get("ping_interval"))||Vc.ping()}},1e3);const n=function(){void 0!==Uc.connection.disco&&Vc.disco.own.features.add(Ju.NS.PING),Uc.connection.addHandler(t,Ju.NS.PING,"iq","get"),Uc.connection.addHandler(()=>{if(Vc.settings.get("ping_interval")>0)return e=new Date,!0})};Vc.listen.on("connected",n),Vc.listen.on("reconnected",n),Vc.listen.on("windowStateChanged",(function(e){"visible"===e.state&&Vc.connection.connected()&&Vc.ping(null,5e3)})),Object.assign(Vc,{async ping(t,n){if(e=new Date,t=t||Ju.getDomainFromJid(Uc.bare_jid),Uc.connection){const e=Xu({type:"get",to:t,id:Qu.getUniqueId("ping")}).c("ping",{xmlns:Ju.NS.PING}),r=await Vc.sendIQ(e,n||1e4,!1);return null===r?(zn.warn("Timeout while pinging ".concat(t)),t===Ju.getDomainFromJid(Uc.bare_jid)&&Vc.connection.reconnect()):Qu.isErrorStanza(r)&&(zn.error("Error while pinging ".concat(t)),zn.error(r)),!0}return!1}})}});
 /**
  * @module converse-pubsub
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:Lu,$iq:zu}=Yc.env;Lu.addNamespace("PUBSUB_ERROR",Lu.NS.PUBSUB+"#errors"),Yc.plugins.add("converse-pubsub",{dependencies:["converse-disco"],initialize(){Object.assign(Lc.api,{pubsub:{async publish(e,t,n,r,i=!0){const s=zu({from:Lc.bare_jid,type:"set",to:e}).c("pubsub",{xmlns:Lu.NS.PUBSUB}).c("publish",{node:t}).cnode(n.tree()).up().up();r&&(e=e||Lc.bare_jid,await qc.disco.supports(Lu.NS.PUBSUB+"#publish-options",e)?(s.c("publish-options").c("x",{xmlns:Lu.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t("".concat(Lu.NS.PUBSUB,"#publish-options")).up().up(),Object.keys(r).forEach(e=>s.c("field",{var:e}).c("value").t(r[e]).up().up())):Pn.warn("_converse.api.publish: ".concat(e," does not support #publish-options, ")+"so we didn't set them even though they were provided."));try{await qc.sendIQ(s)}catch(e){if(!(e instanceof Element&&i&&e.querySelector('precondition-not-met[xmlns="'.concat(Lu.NS.PUBSUB_ERROR,'"]'))))throw e;{const e=s.nodeTree;e.querySelector("publish-options").outerHTML="",Pn.warn("PubSub: Republishing without publish options. ".concat(e.outerHTML)),await qc.sendIQ(e)}}}}})}});var Fu=function(e){return"number"==typeof e||Ee(e)&&"[object Number]"==k(e)};var Bu=function(e){return Fu(e)&&e!=+e};
+const{Strophe:Yu,$iq:Ku}=rl.env;Yu.addNamespace("PUBSUB_ERROR",Yu.NS.PUBSUB+"#errors"),rl.plugins.add("converse-pubsub",{dependencies:["converse-disco"],initialize(){Object.assign(Uc.api,{pubsub:{async publish(e,t,n,r,i=!0){const o=Ku({from:Uc.bare_jid,type:"set",to:e}).c("pubsub",{xmlns:Yu.NS.PUBSUB}).c("publish",{node:t}).cnode(n.tree()).up().up();r&&(e=e||Uc.bare_jid,await Vc.disco.supports(Yu.NS.PUBSUB+"#publish-options",e)?(o.c("publish-options").c("x",{xmlns:Yu.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE",type:"hidden"}).c("value").t("".concat(Yu.NS.PUBSUB,"#publish-options")).up().up(),Object.keys(r).forEach(e=>o.c("field",{var:e}).c("value").t(r[e]).up().up())):zn.warn("_converse.api.publish: ".concat(e," does not support #publish-options, ")+"so we didn't set them even though they were provided."));try{await Vc.sendIQ(o)}catch(e){if(!(e instanceof Element&&i&&e.querySelector('precondition-not-met[xmlns="'.concat(Yu.NS.PUBSUB_ERROR,'"]'))))throw e;{const e=o.nodeTree;e.querySelector("publish-options").outerHTML="",zn.warn("PubSub: Republishing without publish options. ".concat(e.outerHTML)),await Vc.sendIQ(e)}}}}})}});var Zu=function(e){return"number"==typeof e||Ee(e)&&"[object Number]"==k(e)};var ed=function(e){return Zu(e)&&e!=+e};
 /**
  * @module converse-status
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:qu,$build:Hu,$pres:Uu}=Yc.env;Yc.plugins.add("converse-status",{initialize(){function e(e){qc.trigger("statusInitialized",e)}function t(t){if(t=void 0!==Lc.xmppstatus&&t)e(t);else{const n="converse.xmppstatus-".concat(Lc.bare_jid);Lc.xmppstatus=new Lc.XMPPStatus({id:n}),Lc.xmppstatus.browserStorage=Lc.createStore(n,"session"),Lc.xmppstatus.fetch({success:()=>e(t),error:()=>e(t),silent:!0})}}qc.settings.extend({auto_away:0,auto_xa:0,csi_waiting_time:0,default_state:"online",priority:0}),qc.promises.add(["statusInitialized"]),Lc.XMPPStatus=Rs.extend({defaults:()=>({status:qc.settings.get("default_state")}),initialize(){this.on("change",e=>{N(e.changed)&&("status"in e.changed||"status_message"in e.changed)&&qc.user.presence.send(this.get("status"),null,this.get("status_message"))})},getNickname:()=>Lc.nickname,getFullname:()=>"",constructPresence(e,t=null,n){let r;e="string"==typeof e?e:this.get("status")||qc.settings.get("default_state"),n="string"==typeof n?n:this.get("status_message");const i={to:t};"unavailable"===e||"probe"===e||"error"===e||"unsubscribe"===e||"unsubscribed"===e||"subscribe"===e||"subscribed"===e?(i.type=e,r=Uu(i)):"offline"===e?(i.type="unavailable",r=Uu(i)):r="online"===e?Uu(i):Uu(i).c("show").t(e).up(),n&&r.c("status").t(n).up();const s=qc.settings.get("priority");if(r.c("priority").t(Bu(Number(s))?0:s).up(),Lc.idle){const e=new Date;e.setSeconds(e.getSeconds()-Lc.idle_seconds),r.c("idle",{xmlns:qu.NS.IDLE,since:e.toISOString()})}return r}}),Lc.sendCSI=function(e){qc.send(Hu(e,{xmlns:qu.NS.CSI})),Lc.inactive=e===Lc.INACTIVE},Lc.onUserActivity=function(){var e;Lc.idle_seconds>0&&(Lc.idle_seconds=0),(null===(e=Lc.connection)||void 0===e?void 0:e.authenticated)&&(Lc.inactive&&Lc.sendCSI(Lc.ACTIVE),Lc.idle&&(Lc.idle=!1,qc.user.presence.send()),!0===Lc.auto_changed_status&&(Lc.auto_changed_status=!1,Lc.xmppstatus.set("status",qc.settings.get("default_state"))))},Lc.onEverySecond=function(){var e;if(!(null===(e=Lc.connection)||void 0===e?void 0:e.authenticated))return;const t=Lc.xmppstatus.get("status");Lc.idle_seconds++,qc.settings.get("csi_waiting_time")>0&&Lc.idle_seconds>qc.settings.get("csi_waiting_time")&&!Lc.inactive&&Lc.sendCSI(Lc.INACTIVE),qc.settings.get("idle_presence_timeout")>0&&Lc.idle_seconds>qc.settings.get("idle_presence_timeout")&&!Lc.idle&&(Lc.idle=!0,qc.user.presence.send()),qc.settings.get("auto_away")>0&&Lc.idle_seconds>qc.settings.get("auto_away")&&"away"!==t&&"xa"!==t&&"dnd"!==t?(Lc.auto_changed_status=!0,Lc.xmppstatus.set("status","away")):qc.settings.get("auto_xa")>0&&Lc.idle_seconds>qc.settings.get("auto_xa")&&"xa"!==t&&"dnd"!==t&&(Lc.auto_changed_status=!0,Lc.xmppstatus.set("status","xa"))},Lc.registerIntervalHandler=function(){if(qc.settings.get("auto_away")<1&&qc.settings.get("auto_xa")<1&&qc.settings.get("csi_waiting_time")<1&&qc.settings.get("idle_presence_timeout")<1)return;Lc.idle_seconds=0,Lc.auto_changed_status=!1;const{unloadevent:e}=Lc;window.addEventListener("click",Lc.onUserActivity),window.addEventListener("focus",Lc.onUserActivity),window.addEventListener("keypress",Lc.onUserActivity),window.addEventListener("mousemove",Lc.onUserActivity),window.addEventListener(e,Lc.onUserActivity,{once:!0,passive:!0}),window.addEventListener(e,()=>{var e;return null===(e=Lc.session)||void 0===e?void 0:e.save("active",!1)}),Lc.everySecondTrigger=window.setInterval(Lc.onEverySecond,1e3)},qc.listen.on("presencesInitialized",e=>{e||Lc.registerIntervalHandler()}),qc.listen.on("clearSession",()=>{Lc.shouldClearCache()&&Lc.xmppstatus&&(Lc.xmppstatus.destroy(),delete Lc.xmppstatus,qc.promises.add(["statusInitialized"]))}),qc.listen.on("connected",()=>t(!1)),qc.listen.on("reconnected",()=>t(!0)),Object.assign(Lc.api.user,{presence:{async send(e,t,n){await qc.waitUntil("statusInitialized"),qc.send(Lc.xmppstatus.constructPresence(e,t,n))}},status:{get:async()=>(await qc.waitUntil("statusInitialized"),Lc.xmppstatus.get("status")),async set(e,t){const n={status:e};if(!Object.keys(Lc.STATUS_WEIGHTS).includes(e))throw new Error("Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1");"string"==typeof t&&(n.status_message=t),await qc.waitUntil("statusInitialized"),Lc.xmppstatus.save(n)},message:{get:async()=>(await qc.waitUntil("statusInitialized"),Lc.xmppstatus.get("status_message")),async set(e){await qc.waitUntil("statusInitialized"),Lc.xmppstatus.save({status_message:e})}}}})}});var $u=function(e){return function(t){return null==e?void 0:ls(e,t)}};var Wu=function(e,t){for(var n,r=-1,i=e.length;++r<i;){var s=t(e[r]);void 0!==s&&(n=void 0===n?s:n+s)}return n};var Vu=function(e){return e&&e.length?Wu(e,fr):0};
+ */const{Strophe:td,$build:nd,$pres:rd}=rl.env;rl.plugins.add("converse-status",{initialize(){function e(e){Vc.trigger("statusInitialized",e)}function t(t){if(t=void 0!==Uc.xmppstatus&&t)e(t);else{const n="converse.xmppstatus-".concat(Uc.bare_jid);Uc.xmppstatus=new Uc.XMPPStatus({id:n}),Uc.xmppstatus.browserStorage=Uc.createStore(n,"session"),Uc.xmppstatus.fetch({success:()=>e(t),error:()=>e(t),silent:!0})}}Vc.settings.extend({auto_away:0,auto_xa:0,csi_waiting_time:0,default_state:"online",priority:0}),Vc.promises.add(["statusInitialized"]),Uc.XMPPStatus=qo.extend({defaults:()=>({status:Vc.settings.get("default_state")}),initialize(){this.on("change",e=>{N(e.changed)&&("status"in e.changed||"status_message"in e.changed)&&Vc.user.presence.send(this.get("status"),null,this.get("status_message"))})},getNickname:()=>Uc.nickname,getFullname:()=>"",constructPresence(e,t=null,n){let r;e="string"==typeof e?e:this.get("status")||Vc.settings.get("default_state"),n="string"==typeof n?n:this.get("status_message");const i={to:t};"unavailable"===e||"probe"===e||"error"===e||"unsubscribe"===e||"unsubscribed"===e||"subscribe"===e||"subscribed"===e?(i.type=e,r=rd(i)):"offline"===e?(i.type="unavailable",r=rd(i)):r="online"===e?rd(i):rd(i).c("show").t(e).up(),n&&r.c("status").t(n).up();const o=Vc.settings.get("priority");if(r.c("priority").t(ed(Number(o))?0:o).up(),Uc.idle){const e=new Date;e.setSeconds(e.getSeconds()-Uc.idle_seconds),r.c("idle",{xmlns:td.NS.IDLE,since:e.toISOString()})}return r}}),Uc.sendCSI=function(e){Vc.send(nd(e,{xmlns:td.NS.CSI})),Uc.inactive=e===Uc.INACTIVE},Uc.onUserActivity=function(){var e;Uc.idle_seconds>0&&(Uc.idle_seconds=0),(null===(e=Uc.connection)||void 0===e?void 0:e.authenticated)&&(Uc.inactive&&Uc.sendCSI(Uc.ACTIVE),Uc.idle&&(Uc.idle=!1,Vc.user.presence.send()),!0===Uc.auto_changed_status&&(Uc.auto_changed_status=!1,Uc.xmppstatus.set("status",Vc.settings.get("default_state"))))},Uc.onEverySecond=function(){var e;if(!(null===(e=Uc.connection)||void 0===e?void 0:e.authenticated))return;const t=Uc.xmppstatus.get("status");Uc.idle_seconds++,Vc.settings.get("csi_waiting_time")>0&&Uc.idle_seconds>Vc.settings.get("csi_waiting_time")&&!Uc.inactive&&Uc.sendCSI(Uc.INACTIVE),Vc.settings.get("idle_presence_timeout")>0&&Uc.idle_seconds>Vc.settings.get("idle_presence_timeout")&&!Uc.idle&&(Uc.idle=!0,Vc.user.presence.send()),Vc.settings.get("auto_away")>0&&Uc.idle_seconds>Vc.settings.get("auto_away")&&"away"!==t&&"xa"!==t&&"dnd"!==t?(Uc.auto_changed_status=!0,Uc.xmppstatus.set("status","away")):Vc.settings.get("auto_xa")>0&&Uc.idle_seconds>Vc.settings.get("auto_xa")&&"xa"!==t&&"dnd"!==t&&(Uc.auto_changed_status=!0,Uc.xmppstatus.set("status","xa"))},Uc.registerIntervalHandler=function(){if(Vc.settings.get("auto_away")<1&&Vc.settings.get("auto_xa")<1&&Vc.settings.get("csi_waiting_time")<1&&Vc.settings.get("idle_presence_timeout")<1)return;Uc.idle_seconds=0,Uc.auto_changed_status=!1;const{unloadevent:e}=Uc;window.addEventListener("click",Uc.onUserActivity),window.addEventListener("focus",Uc.onUserActivity),window.addEventListener("keypress",Uc.onUserActivity),window.addEventListener("mousemove",Uc.onUserActivity),window.addEventListener(e,Uc.onUserActivity,{once:!0,passive:!0}),window.addEventListener(e,()=>{var e;return null===(e=Uc.session)||void 0===e?void 0:e.save("active",!1)}),Uc.everySecondTrigger=window.setInterval(Uc.onEverySecond,1e3)},Vc.listen.on("presencesInitialized",e=>{e||Uc.registerIntervalHandler()}),Vc.listen.on("clearSession",()=>{Uc.shouldClearCache()&&Uc.xmppstatus&&(Uc.xmppstatus.destroy(),delete Uc.xmppstatus,Vc.promises.add(["statusInitialized"]))}),Vc.listen.on("connected",()=>t(!1)),Vc.listen.on("reconnected",()=>t(!0)),Object.assign(Uc.api.user,{presence:{async send(e,t,n){await Vc.waitUntil("statusInitialized"),Vc.send(Uc.xmppstatus.constructPresence(e,t,n))}},status:{get:async()=>(await Vc.waitUntil("statusInitialized"),Uc.xmppstatus.get("status")),async set(e,t){const n={status:e};if(!Object.keys(Uc.STATUS_WEIGHTS).includes(e))throw new Error("Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1");"string"==typeof t&&(n.status_message=t),await Vc.waitUntil("statusInitialized"),Uc.xmppstatus.save(n)},message:{get:async()=>(await Vc.waitUntil("statusInitialized"),Uc.xmppstatus.get("status_message")),async set(e){await Vc.waitUntil("statusInitialized"),Uc.xmppstatus.save({status_message:e})}}}})}});var id=function(e){return function(t){return null==e?void 0:mo(e,t)}};var od=function(e,t){for(var n,r=-1,i=e.length;++r<i;){var o=t(e[r]);void 0!==o&&(n=void 0===n?o:n+o)}return n};var sd=function(e){return e&&e.length?od(e,br):0};
 /**
  * @module converse-roster
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:Gu,$iq:Ju,$pres:Xu,dayjs:Qu,sizzle:Yu}=Yc.env,Ku=Yc.env.utils;Yc.plugins.add("converse-roster",{dependencies:["converse-status"],initialize(){const{__:e}=Lc;qc.settings.extend({allow_contact_requests:!0,auto_subscribe:!1,synchronize_availability:!0}),qc.promises.add(["cachedRoster","roster","rosterContactsFetched","rosterGroupsFetched","rosterInitialized"]),Lc.HEADER_CURRENT_CONTACTS=e("My contacts"),Lc.HEADER_PENDING_CONTACTS=e("Pending contacts"),Lc.HEADER_REQUESTING_CONTACTS=e("Contact requests"),Lc.HEADER_UNGROUPED=e("Ungrouped"),Lc.HEADER_UNREAD=e("New messages");const t={};t[Lc.HEADER_UNREAD]=0,t[Lc.HEADER_REQUESTING_CONTACTS]=1,t[Lc.HEADER_CURRENT_CONTACTS]=2,t[Lc.HEADER_UNGROUPED]=3,t[Lc.HEADER_PENDING_CONTACTS]=4,Lc.registerPresenceHandler=function(){Lc.unregisterPresenceHandler(),Lc.presence_ref=Lc.connection.addHandler(e=>(Lc.roster.presenceHandler(e),!0),null,"presence",null)},Lc.rejectPresenceSubscription=function(e,t){const n=Xu({to:e,type:"unsubscribed"});t&&""!==t&&n.c("status").t(t),qc.send(n)},Lc.sendInitialPresence=function(){Lc.send_initial_presence&&qc.user.presence.send()},Lc.populateRoster=async function(e=!1){e&&(Lc.send_initial_presence=!0);try{await Lc.rostergroups.fetchRosterGroups(),qc.trigger("rosterGroupsFetched"),await Lc.roster.fetchRosterContacts(),qc.trigger("rosterContactsFetched")}catch(e){Pn.error(e)}finally{Lc.sendInitialPresence()}};const n=Rs.extend({idAttribute:"name"}),r=Yo.extend({model:n});function i(e){const t=Lc.roster&&Lc.roster.findWhere({jid:e.get("jid")});void 0!==t&&t.save({num_unread:e.get("num_unread")})}async function s(){Lc.presences&&await Lc.presences.clearStore()}Lc.Presence=Rs.extend({defaults:{show:"offline"},initialize(){this.resources=new r;const e="converse.identities-".concat(this.get("jid"));this.resources.browserStorage=Lc.createStore(e,"session"),this.listenTo(this.resources,"update",this.onResourcesChanged),this.listenTo(this.resources,"change",this.onResourcesChanged)},onResourcesChanged(){var e;const t=this.getHighestPriorityResource(),n=(null==t||null===(e=t.attributes)||void 0===e?void 0:e.show)||"offline";this.get("show")!==n&&this.save({show:n})},getHighestPriorityResource(){return this.resources.sortBy(e=>"".concat(e.get("priority"),"-").concat(e.get("timestamp"))).reverse()[0]},addResource(e){const t=e.getAttribute("from"),n=Gu.getResourceFromJid(t),r=Yu('delay[xmlns="'.concat(Gu.NS.DELAY,'"]'),e).pop(),i=$u(e.querySelector("priority"))("textContent")||0,s=this.resources.get(n),o={name:n,priority:Bu(parseInt(i,10))?0:parseInt(i,10),show:$u(e.querySelector("show"))("textContent")||"online",timestamp:r?Qu(r.getAttribute("stamp")).toISOString():(new Date).toISOString()};s?s.save(o):this.resources.create(o)},removeResource(e){const t=this.resources.get(e);t&&t.destroy()}}),Lc.Presences=Yo.extend({model:Lc.Presence}),Lc.RosterContact=Rs.extend({defaults:{chat_state:void 0,image:Lc.DEFAULT_IMAGE,image_type:Lc.DEFAULT_IMAGE_TYPE,num_unread:0,status:void 0},async initialize(e){this.initialized=Ku.getResolveablePromise(),this.setPresence();const{jid:t}=e,n=Gu.getBareJidFromJid(t).toLowerCase();e.jid=n,this.set(Object.assign({groups:[],id:n,jid:n,user_id:Gu.getNodeFromJid(t)},e)),this.listenTo(this.presence,"change:show",()=>qc.trigger("contactPresenceChanged",this)),this.listenTo(this.presence,"change:show",()=>this.trigger("presenceChanged")),await qc.trigger("rosterContactInitialized",this,{Synchronous:!0}),this.initialized.resolve()},setPresence(){const e=this.get("jid");this.presence=Lc.presences.findWhere({jid:e})||Lc.presences.create({jid:e})},openChat(){const e=this.attributes;qc.chats.open(e.jid,e,!0)},getFilterCriteria(){const e=this.get("nickname"),t=this.get("jid");let n=this.getDisplayName();return n=n.includes(t)?n:n.concat("   ".concat(t)),n=n.includes(e)?n:n.concat("   ".concat(e)),n.toLowerCase()},getDisplayName(){return this.get("nickname")?this.get("nickname"):this.get("jid")},getFullname(){return this.get("jid")},subscribe(e){const t=Xu({to:this.get("jid"),type:"subscribe"});e&&""!==e&&t.c("status").t(e).up();const n=Lc.xmppstatus.getNickname()||Lc.xmppstatus.getFullname();return n&&t.c("nick",{xmlns:Gu.NS.NICK}).t(n).up(),qc.send(t),this.save("ask","subscribe"),this},ackSubscribe(){qc.send(Xu({type:"subscribe",to:this.get("jid")}))},ackUnsubscribe(){qc.send(Xu({type:"unsubscribe",to:this.get("jid")})),this.removeFromRoster(),this.destroy()},unauthorize(e){return Lc.rejectPresenceSubscription(this.get("jid"),e),this},authorize(e){const t=Xu({to:this.get("jid"),type:"subscribed"});return e&&""!==e&&t.c("status").t(e),qc.send(t),this},removeFromRoster(){const e=Ju({type:"set"}).c("query",{xmlns:Gu.NS.ROSTER}).c("item",{jid:this.get("jid"),subscription:"remove"});return qc.sendIQ(e)}}),Lc.RosterContacts=Yo.extend({model:Lc.RosterContact,comparator(e,t){const n=e.presence.get("show")||"offline",r=t.presence.get("show")||"offline";if(Lc.STATUS_WEIGHTS[n]===Lc.STATUS_WEIGHTS[r]){const n=e.getDisplayName().toLowerCase(),r=t.getDisplayName().toLowerCase();return n<r?-1:n>r?1:0}return Lc.STATUS_WEIGHTS[n]<Lc.STATUS_WEIGHTS[r]?-1:1},onConnected(){this.registerRosterHandler(),this.registerRosterXHandler()},registerRosterHandler(){Lc.connection.addHandler(e=>(Lc.roster.onRosterPush(e),!0),Gu.NS.ROSTER,"iq","set")},registerRosterXHandler(){let e=0;Lc.connection.addHandler((function(t){return window.setTimeout((function(){Lc.connection.flush(),Lc.roster.subscribeToSuggestedItems.bind(Lc.roster)(t)}),e),e+=250*t.querySelectorAll("item").length,!0}),Gu.NS.ROSTERX,"message",null)},async fetchRosterContacts(){const e=await new Promise((e,t)=>{this.fetch({add:!0,silent:!0,success:e,error:(e,n)=>t(n)})});if(Ku.isErrorObject(e)&&(Pn.error(e),Lc.session.set("roster_cached",!1),this.data.save("version",void 0)),!Lc.session.get("roster_cached"))return Lc.send_initial_presence=!0,Lc.roster.fetchFromServer();qc.trigger("cachedRoster",e)},subscribeToSuggestedItems:e=>(Array.from(e.querySelectorAll("item")).forEach(e=>{"add"===e.getAttribute("action")&&Lc.roster.addAndSubscribe(e.getAttribute("jid"),Lc.xmppstatus.getNickname()||Lc.xmppstatus.getFullname())}),!0),isSelf:e=>Ku.isSameBareJID(e,Lc.connection.jid),async addAndSubscribe(e,t,n,r,i){const s=await this.addContactToRoster(e,t,n,i);s instanceof Lc.RosterContact&&s.subscribe(r)},sendContactAddIQ(e,t,n){t=t||null;const r=Ju({type:"set"}).c("query",{xmlns:Gu.NS.ROSTER}).c("item",{jid:e,name:t});return n.forEach(e=>r.c("group").t(e).up()),qc.sendIQ(r)},async addContactToRoster(t,n,r,i){await qc.waitUntil("rosterContactsFetched"),r=r||[];try{await this.sendContactAddIQ(t,n,r)}catch(r){return Pn.error(r),alert(e("Sorry, there was an error while trying to add %1$s as a contact.",n||t)),r}return this.create(Object.assign({ask:void 0,nickname:n,groups:r,jid:t,requesting:!1,subscription:"none"},i),{sort:!1})},async subscribeBack(e,t){const n=this.get(e);if(n instanceof Lc.RosterContact)n.authorize().subscribe();else{var r;const n=(null===(r=Yu('nick[xmlns="'.concat(Gu.NS.NICK,'"]'),t).pop())||void 0===r?void 0:r.textContent)||null,i=await this.addContactToRoster(e,n,[],{subscription:"from"});i instanceof Lc.RosterContact&&i.authorize().subscribe()}},getNumOnlineContacts(){const e=["offline","unavailable"];return Vu(this.models.filter(t=>!e.includes(t.presence.get("show"))))},onRosterPush(e){const t=e.getAttribute("id"),n=e.getAttribute("from");if(n&&n!==Lc.bare_jid)return void Pn.warn("Ignoring roster illegitimate roster push message from ".concat(e.getAttribute("from")));qc.send(Ju({type:"result",id:t,from:Lc.connection.jid}));const r=Yu('query[xmlns="'.concat(Gu.NS.ROSTER,'"]'),e).pop();this.data.save("version",r.getAttribute("ver"));const i=Yu("item",r);if(i.length>1)throw Pn.error(e),new Error('Roster push query may not contain more than one "item" element.');if(0===i.length)return Pn.warn(e),void Pn.warn('Received a roster push stanza without an "item" element.');this.updateContact(i.pop()),qc.trigger("rosterPush",e)},rosterVersioningSupported(){return qc.disco.stream.getFeature("ver","urn:xmpp:features:rosterver")&&this.data.get("version")},async fetchFromServer(){const e=Ju({type:"get",id:Ku.getUniqueId("roster")}).c("query",{xmlns:Gu.NS.ROSTER});this.rosterVersioningSupported()&&e.attrs({ver:this.data.get("version")});const t=await qc.sendIQ(e,null,!1);if("error"!==t.getAttribute("type")){const e=Yu('query[xmlns="'.concat(Gu.NS.ROSTER,'"]'),t).pop();if(e){Yu("item",e).forEach(e=>this.updateContact(e)),this.data.save("version",e.getAttribute("ver"))}}else if(!Ku.isServiceUnavailableError(t))return Pn.error(t),void Pn.error("Error while trying to fetch roster from the server");Lc.session.save("roster_cached",!0),qc.trigger("roster",t)},updateContact(e){const t=e.getAttribute("jid"),n=this.get(t),r=e.getAttribute("subscription"),i=e.getAttribute("ask"),s=Array.from(e.getElementsByTagName("group")).map(e=>e.textContent);if(n){if("remove"===r)return n.destroy();n.save({subscription:r,ask:i,nickname:e.getAttribute("name"),requesting:null,groups:s})}else{if("none"===r&&null===i||"remove"===r)return;this.create({ask:i,nickname:e.getAttribute("name"),groups:s,jid:t,subscription:r},{sort:!1})}},createRequestingContact(e){var t;const n={jid:Gu.getBareJidFromJid(e.getAttribute("from")),subscription:"none",ask:null,requesting:!0,nickname:(null===(t=Yu('nick[xmlns="'.concat(Gu.NS.NICK,'"]'),e).pop())||void 0===t?void 0:t.textContent)||null};qc.trigger("contactRequest",this.create(n))},handleIncomingSubscription(t){const n=t.getAttribute("from"),r=Gu.getBareJidFromJid(n),i=this.get(r);qc.settings.get("allow_contact_requests")||Lc.rejectPresenceSubscription(n,e("This client does not allow presence subscriptions")),qc.settings.get("auto_subscribe")?i&&"to"===i.get("subscription")?i.authorize():this.subscribeBack(r,t):i?("none"!==i.get("subscription")||"subscribe"===i.get("ask"))&&i.authorize():this.createRequestingContact(t)},handleOwnPresence(e){const t=e.getAttribute("from"),n=Gu.getResourceFromJid(t),r=e.getAttribute("type");if(Lc.connection.jid!==t&&"unavailable"!==r&&(!0===qc.settings.get("synchronize_availability")||qc.settings.get("synchronize_availability")===n)){const t=$u(e.querySelector("show"))("textContent")||"online";Lc.xmppstatus.save({status:t},{silent:!0});const n=$u(e.querySelector("status"))("textContent");n&&Lc.xmppstatus.save({status_message:n})}Lc.jid===t&&"unavailable"===r&&qc.user.presence.send()},presenceHandler(e){const t=e.getAttribute("type");if("error"===t)return!0;const n=e.getAttribute("from"),r=Gu.getBareJidFromJid(n);if(this.isSelf(r))return this.handleOwnPresence(e);if(Yu('query[xmlns="'.concat(Gu.NS.MUC,'"]'),e).length)return;const i=$u(e.querySelector("status"))("textContent"),s=this.get(r);if(s&&i!==s.get("status")&&s.save({status:i}),"subscribed"===t&&s)s.ackSubscribe();else if("unsubscribed"===t&&s)s.ackUnsubscribe();else{if("unsubscribe"===t)return;if("subscribe"===t)this.handleIncomingSubscription(e);else if("unavailable"===t&&s){const e=Gu.getResourceFromJid(n);s.presence.removeResource(e)}else s&&s.presence.addResource(e)}}}),Lc.RosterGroup=Rs.extend({initialize(t){this.set(Object.assign({description:e("Click to hide these contacts"),state:Lc.OPENED},t)),this.contacts=new Lc.RosterContacts}}),Lc.RosterGroups=Yo.extend({model:Lc.RosterGroup,comparator(e,n){e=e.get("name"),n=n.get("name");const r=t,i=Object.keys(t),s=i.includes(e),o=i.includes(n);if(!s&&!o)return e.toLowerCase()<n.toLowerCase()?-1:e.toLowerCase()>n.toLowerCase()?1:0;if(s&&o)return r[e]<r[n]?-1:r[e]>r[n]?1:0;if(!s&&o){const e=Lc.HEADER_CURRENT_CONTACTS;return r[e]<r[n]?-1:r[e]>r[n]?1:0}if(s&&!o){const t=Lc.HEADER_CURRENT_CONTACTS;return r[e]<r[t]?-1:r[e]>r[t]?1:0}},fetchRosterGroups(){return new Promise(e=>{this.fetch({success:e,silent:!0})})}}),Lc.unregisterPresenceHandler=function(){void 0!==Lc.presence_ref&&(Lc.connection.deleteHandler(Lc.presence_ref),delete Lc.presence_ref)},qc.listen.on("chatBoxesInitialized",()=>{Lc.chatboxes.on("change:num_unread",i),Lc.chatboxes.on("add",e=>{e.get("type")===Lc.PRIVATE_CHAT_TYPE&&e.setRosterContact(e.get("jid"))})}),qc.listen.on("beforeTearDown",()=>Lc.unregisterPresenceHandler()),qc.waitUntil("rosterContactsFetched").then(()=>{Lc.roster.on("add",e=>{const t=Lc.chatboxes.findWhere({jid:e.get("jid")});t&&t.setRosterContact(e.get("jid"))})}),qc.listen.on("streamResumptionFailed",()=>Lc.session.set("roster_cached",!1)),qc.listen.on("clearSession",async()=>{await s(),Lc.shouldClearCache()&&(Lc.rostergroups&&(await Lc.rostergroups.clearStore(),delete Lc.rostergroups),Lc.roster&&(kc(Lc,"roster.data.destroy"),await Lc.roster.clearStore(),delete Lc.roster))}),qc.listen.on("statusInitialized",async e=>{if(e)!Lc.connection.hasResumed()&&await s();else{Lc.presences=new Lc.Presences;const e="converse.presences-".concat(Lc.bare_jid);Lc.presences.browserStorage=Lc.createStore(e,"session"),Lc.presences.fetch()}qc.trigger("presencesInitialized",e)}),qc.listen.on("presencesInitialized",async e=>{e?qc.trigger("rosterReadyAfterReconnection"):await async function(){await qc.waitUntil("VCardsInitialized"),Lc.roster=new Lc.RosterContacts;let e="converse.contacts-".concat(Lc.bare_jid);Lc.roster.browserStorage=Lc.createStore(e),Lc.roster.data=new Rs,e="converse-roster-model-".concat(Lc.bare_jid),Lc.roster.data.id=e,Lc.roster.data.browserStorage=Lc.createStore(e),Lc.roster.data.fetch(),e="converse.roster.groups".concat(Lc.bare_jid),Lc.rostergroups=new Lc.RosterGroups,Lc.rostergroups.browserStorage=Lc.createStore(e),qc.trigger("rosterInitialized")}(),Lc.roster.onConnected(),Lc.registerPresenceHandler(),Lc.populateRoster(!Lc.connection.restored)}),Object.assign(Lc.api,{contacts:{async get(e){await qc.waitUntil("rosterContactsFetched");const t=e=>Lc.roster.get(Gu.getBareJidFromJid(e));if(void 0===e)e=Lc.roster.pluck("jid");else if("string"==typeof e)return t(e);return e.map(t)},async add(e,t){if(await qc.waitUntil("rosterContactsFetched"),"string"!=typeof e||!e.includes("@"))throw new TypeError("contacts.add: invalid jid");return Lc.roster.addAndSubscribe(e,t)}}})}});
+ */const{Strophe:ad,$iq:cd,$pres:ld,dayjs:ud,sizzle:dd}=rl.env,hd=rl.env.utils;rl.plugins.add("converse-roster",{dependencies:["converse-status"],initialize(){const{__:e}=Uc;Vc.settings.extend({allow_contact_requests:!0,auto_subscribe:!1,synchronize_availability:!0}),Vc.promises.add(["cachedRoster","roster","rosterContactsFetched","rosterGroupsFetched","rosterInitialized"]),Uc.HEADER_CURRENT_CONTACTS=e("My contacts"),Uc.HEADER_PENDING_CONTACTS=e("Pending contacts"),Uc.HEADER_REQUESTING_CONTACTS=e("Contact requests"),Uc.HEADER_UNGROUPED=e("Ungrouped"),Uc.HEADER_UNREAD=e("New messages");const t={};t[Uc.HEADER_UNREAD]=0,t[Uc.HEADER_REQUESTING_CONTACTS]=1,t[Uc.HEADER_CURRENT_CONTACTS]=2,t[Uc.HEADER_UNGROUPED]=3,t[Uc.HEADER_PENDING_CONTACTS]=4,Uc.registerPresenceHandler=function(){Uc.unregisterPresenceHandler(),Uc.presence_ref=Uc.connection.addHandler(e=>(Uc.roster.presenceHandler(e),!0),null,"presence",null)},Uc.rejectPresenceSubscription=function(e,t){const n=ld({to:e,type:"unsubscribed"});t&&""!==t&&n.c("status").t(t),Vc.send(n)},Uc.sendInitialPresence=function(){Uc.send_initial_presence&&Vc.user.presence.send()},Uc.populateRoster=async function(e=!1){e&&(Uc.send_initial_presence=!0);try{await Uc.rostergroups.fetchRosterGroups(),Vc.trigger("rosterGroupsFetched"),await Uc.roster.fetchRosterContacts(),Vc.trigger("rosterContactsFetched")}catch(e){zn.error(e)}finally{Uc.sendInitialPresence()}};const n=qo.extend({idAttribute:"name"}),r=ra.extend({model:n});function i(e){const t=Uc.roster&&Uc.roster.findWhere({jid:e.get("jid")});void 0!==t&&t.save({num_unread:e.get("num_unread")})}async function o(){Uc.presences&&await Uc.presences.clearStore()}Uc.Presence=qo.extend({defaults:{show:"offline"},initialize(){this.resources=new r;const e="converse.identities-".concat(this.get("jid"));this.resources.browserStorage=Uc.createStore(e,"session"),this.listenTo(this.resources,"update",this.onResourcesChanged),this.listenTo(this.resources,"change",this.onResourcesChanged)},onResourcesChanged(){var e;const t=this.getHighestPriorityResource(),n=(null==t||null===(e=t.attributes)||void 0===e?void 0:e.show)||"offline";this.get("show")!==n&&this.save({show:n})},getHighestPriorityResource(){return this.resources.sortBy(e=>"".concat(e.get("priority"),"-").concat(e.get("timestamp"))).reverse()[0]},addResource(e){const t=e.getAttribute("from"),n=ad.getResourceFromJid(t),r=dd('delay[xmlns="'.concat(ad.NS.DELAY,'"]'),e).pop(),i=id(e.querySelector("priority"))("textContent")||0,o=this.resources.get(n),s={name:n,priority:ed(parseInt(i,10))?0:parseInt(i,10),show:id(e.querySelector("show"))("textContent")||"online",timestamp:r?ud(r.getAttribute("stamp")).toISOString():(new Date).toISOString()};o?o.save(s):this.resources.create(s)},removeResource(e){const t=this.resources.get(e);t&&t.destroy()}}),Uc.Presences=ra.extend({model:Uc.Presence}),Uc.RosterContact=qo.extend({defaults:{chat_state:void 0,image:Uc.DEFAULT_IMAGE,image_type:Uc.DEFAULT_IMAGE_TYPE,num_unread:0,status:void 0},async initialize(e){this.initialized=hd.getResolveablePromise(),this.setPresence();const{jid:t}=e,n=ad.getBareJidFromJid(t).toLowerCase();e.jid=n,this.set(Object.assign({groups:[],id:n,jid:n,user_id:ad.getNodeFromJid(t)},e)),this.listenTo(this.presence,"change:show",()=>Vc.trigger("contactPresenceChanged",this)),this.listenTo(this.presence,"change:show",()=>this.trigger("presenceChanged")),await Vc.trigger("rosterContactInitialized",this,{Synchronous:!0}),this.initialized.resolve()},setPresence(){const e=this.get("jid");this.presence=Uc.presences.findWhere({jid:e})||Uc.presences.create({jid:e})},openChat(){const e=this.attributes;Vc.chats.open(e.jid,e,!0)},getFilterCriteria(){const e=this.get("nickname"),t=this.get("jid");let n=this.getDisplayName();return n=n.includes(t)?n:n.concat("   ".concat(t)),n=n.includes(e)?n:n.concat("   ".concat(e)),n.toLowerCase()},getDisplayName(){return this.get("nickname")?this.get("nickname"):this.get("jid")},getFullname(){return this.get("jid")},subscribe(e){const t=ld({to:this.get("jid"),type:"subscribe"});e&&""!==e&&t.c("status").t(e).up();const n=Uc.xmppstatus.getNickname()||Uc.xmppstatus.getFullname();return n&&t.c("nick",{xmlns:ad.NS.NICK}).t(n).up(),Vc.send(t),this.save("ask","subscribe"),this},ackSubscribe(){Vc.send(ld({type:"subscribe",to:this.get("jid")}))},ackUnsubscribe(){Vc.send(ld({type:"unsubscribe",to:this.get("jid")})),this.removeFromRoster(),this.destroy()},unauthorize(e){return Uc.rejectPresenceSubscription(this.get("jid"),e),this},authorize(e){const t=ld({to:this.get("jid"),type:"subscribed"});return e&&""!==e&&t.c("status").t(e),Vc.send(t),this},removeFromRoster(){const e=cd({type:"set"}).c("query",{xmlns:ad.NS.ROSTER}).c("item",{jid:this.get("jid"),subscription:"remove"});return Vc.sendIQ(e)}}),Uc.RosterContacts=ra.extend({model:Uc.RosterContact,comparator(e,t){const n=e.presence.get("show")||"offline",r=t.presence.get("show")||"offline";if(Uc.STATUS_WEIGHTS[n]===Uc.STATUS_WEIGHTS[r]){const n=e.getDisplayName().toLowerCase(),r=t.getDisplayName().toLowerCase();return n<r?-1:n>r?1:0}return Uc.STATUS_WEIGHTS[n]<Uc.STATUS_WEIGHTS[r]?-1:1},onConnected(){this.registerRosterHandler(),this.registerRosterXHandler()},registerRosterHandler(){Uc.connection.addHandler(e=>(Uc.roster.onRosterPush(e),!0),ad.NS.ROSTER,"iq","set")},registerRosterXHandler(){let e=0;Uc.connection.addHandler((function(t){return window.setTimeout((function(){Uc.connection.flush(),Uc.roster.subscribeToSuggestedItems.bind(Uc.roster)(t)}),e),e+=250*t.querySelectorAll("item").length,!0}),ad.NS.ROSTERX,"message",null)},async fetchRosterContacts(){const e=await new Promise((e,t)=>{this.fetch({add:!0,silent:!0,success:e,error:(e,n)=>t(n)})});if(hd.isErrorObject(e)&&(zn.error(e),Uc.session.set("roster_cached",!1),this.data.save("version",void 0)),!Uc.session.get("roster_cached"))return Uc.send_initial_presence=!0,Uc.roster.fetchFromServer();Vc.trigger("cachedRoster",e)},subscribeToSuggestedItems:e=>(Array.from(e.querySelectorAll("item")).forEach(e=>{"add"===e.getAttribute("action")&&Uc.roster.addAndSubscribe(e.getAttribute("jid"),Uc.xmppstatus.getNickname()||Uc.xmppstatus.getFullname())}),!0),isSelf:e=>hd.isSameBareJID(e,Uc.connection.jid),async addAndSubscribe(e,t,n,r,i){const o=await this.addContactToRoster(e,t,n,i);o instanceof Uc.RosterContact&&o.subscribe(r)},sendContactAddIQ(e,t,n){t=t||null;const r=cd({type:"set"}).c("query",{xmlns:ad.NS.ROSTER}).c("item",{jid:e,name:t});return n.forEach(e=>r.c("group").t(e).up()),Vc.sendIQ(r)},async addContactToRoster(t,n,r,i){await Vc.waitUntil("rosterContactsFetched"),r=r||[];try{await this.sendContactAddIQ(t,n,r)}catch(r){return zn.error(r),alert(e("Sorry, there was an error while trying to add %1$s as a contact.",n||t)),r}return this.create(Object.assign({ask:void 0,nickname:n,groups:r,jid:t,requesting:!1,subscription:"none"},i),{sort:!1})},async subscribeBack(e,t){const n=this.get(e);if(n instanceof Uc.RosterContact)n.authorize().subscribe();else{var r;const n=(null===(r=dd('nick[xmlns="'.concat(ad.NS.NICK,'"]'),t).pop())||void 0===r?void 0:r.textContent)||null,i=await this.addContactToRoster(e,n,[],{subscription:"from"});i instanceof Uc.RosterContact&&i.authorize().subscribe()}},getNumOnlineContacts(){const e=["offline","unavailable"];return sd(this.models.filter(t=>!e.includes(t.presence.get("show"))))},onRosterPush(e){const t=e.getAttribute("id"),n=e.getAttribute("from");if(n&&n!==Uc.bare_jid)return void zn.warn("Ignoring roster illegitimate roster push message from ".concat(e.getAttribute("from")));Vc.send(cd({type:"result",id:t,from:Uc.connection.jid}));const r=dd('query[xmlns="'.concat(ad.NS.ROSTER,'"]'),e).pop();this.data.save("version",r.getAttribute("ver"));const i=dd("item",r);if(i.length>1)throw zn.error(e),new Error('Roster push query may not contain more than one "item" element.');if(0===i.length)return zn.warn(e),void zn.warn('Received a roster push stanza without an "item" element.');this.updateContact(i.pop()),Vc.trigger("rosterPush",e)},rosterVersioningSupported(){return Vc.disco.stream.getFeature("ver","urn:xmpp:features:rosterver")&&this.data.get("version")},async fetchFromServer(){const e=cd({type:"get",id:hd.getUniqueId("roster")}).c("query",{xmlns:ad.NS.ROSTER});this.rosterVersioningSupported()&&e.attrs({ver:this.data.get("version")});const t=await Vc.sendIQ(e,null,!1);if("error"!==t.getAttribute("type")){const e=dd('query[xmlns="'.concat(ad.NS.ROSTER,'"]'),t).pop();if(e){dd("item",e).forEach(e=>this.updateContact(e)),this.data.save("version",e.getAttribute("ver"))}}else if(!hd.isServiceUnavailableError(t))return zn.error(t),void zn.error("Error while trying to fetch roster from the server");Uc.session.save("roster_cached",!0),Vc.trigger("roster",t)},updateContact(e){const t=e.getAttribute("jid"),n=this.get(t),r=e.getAttribute("subscription"),i=e.getAttribute("ask"),o=Array.from(e.getElementsByTagName("group")).map(e=>e.textContent);if(n){if("remove"===r)return n.destroy();n.save({subscription:r,ask:i,nickname:e.getAttribute("name"),requesting:null,groups:o})}else{if("none"===r&&null===i||"remove"===r)return;this.create({ask:i,nickname:e.getAttribute("name"),groups:o,jid:t,subscription:r},{sort:!1})}},createRequestingContact(e){var t;const n={jid:ad.getBareJidFromJid(e.getAttribute("from")),subscription:"none",ask:null,requesting:!0,nickname:(null===(t=dd('nick[xmlns="'.concat(ad.NS.NICK,'"]'),e).pop())||void 0===t?void 0:t.textContent)||null};Vc.trigger("contactRequest",this.create(n))},handleIncomingSubscription(t){const n=t.getAttribute("from"),r=ad.getBareJidFromJid(n),i=this.get(r);Vc.settings.get("allow_contact_requests")||Uc.rejectPresenceSubscription(n,e("This client does not allow presence subscriptions")),Vc.settings.get("auto_subscribe")?i&&"to"===i.get("subscription")?i.authorize():this.subscribeBack(r,t):i?("none"!==i.get("subscription")||"subscribe"===i.get("ask"))&&i.authorize():this.createRequestingContact(t)},handleOwnPresence(e){const t=e.getAttribute("from"),n=ad.getResourceFromJid(t),r=e.getAttribute("type");if(Uc.connection.jid!==t&&"unavailable"!==r&&(!0===Vc.settings.get("synchronize_availability")||Vc.settings.get("synchronize_availability")===n)){const t=id(e.querySelector("show"))("textContent")||"online";Uc.xmppstatus.save({status:t},{silent:!0});const n=id(e.querySelector("status"))("textContent");n&&Uc.xmppstatus.save({status_message:n})}Uc.jid===t&&"unavailable"===r&&Vc.user.presence.send()},presenceHandler(e){const t=e.getAttribute("type");if("error"===t)return!0;const n=e.getAttribute("from"),r=ad.getBareJidFromJid(n);if(this.isSelf(r))return this.handleOwnPresence(e);if(dd('query[xmlns="'.concat(ad.NS.MUC,'"]'),e).length)return;const i=id(e.querySelector("status"))("textContent"),o=this.get(r);if(o&&i!==o.get("status")&&o.save({status:i}),"subscribed"===t&&o)o.ackSubscribe();else if("unsubscribed"===t&&o)o.ackUnsubscribe();else{if("unsubscribe"===t)return;if("subscribe"===t)this.handleIncomingSubscription(e);else if("unavailable"===t&&o){const e=ad.getResourceFromJid(n);o.presence.removeResource(e)}else o&&o.presence.addResource(e)}}}),Uc.RosterGroup=qo.extend({initialize(t){this.set(Object.assign({description:e("Click to hide these contacts"),state:Uc.OPENED},t)),this.contacts=new Uc.RosterContacts}}),Uc.RosterGroups=ra.extend({model:Uc.RosterGroup,comparator(e,n){e=e.get("name"),n=n.get("name");const r=t,i=Object.keys(t),o=i.includes(e),s=i.includes(n);if(!o&&!s)return e.toLowerCase()<n.toLowerCase()?-1:e.toLowerCase()>n.toLowerCase()?1:0;if(o&&s)return r[e]<r[n]?-1:r[e]>r[n]?1:0;if(!o&&s){const e=Uc.HEADER_CURRENT_CONTACTS;return r[e]<r[n]?-1:r[e]>r[n]?1:0}if(o&&!s){const t=Uc.HEADER_CURRENT_CONTACTS;return r[e]<r[t]?-1:r[e]>r[t]?1:0}},fetchRosterGroups(){return new Promise(e=>{this.fetch({success:e,silent:!0})})}}),Uc.unregisterPresenceHandler=function(){void 0!==Uc.presence_ref&&(Uc.connection.deleteHandler(Uc.presence_ref),delete Uc.presence_ref)},Vc.listen.on("chatBoxesInitialized",()=>{Uc.chatboxes.on("change:num_unread",i),Uc.chatboxes.on("add",e=>{e.get("type")===Uc.PRIVATE_CHAT_TYPE&&e.setRosterContact(e.get("jid"))})}),Vc.listen.on("beforeTearDown",()=>Uc.unregisterPresenceHandler()),Vc.waitUntil("rosterContactsFetched").then(()=>{Uc.roster.on("add",e=>{const t=Uc.chatboxes.findWhere({jid:e.get("jid")});t&&t.setRosterContact(e.get("jid"))})}),Vc.listen.on("streamResumptionFailed",()=>Uc.session.set("roster_cached",!1)),Vc.listen.on("clearSession",async()=>{await o(),Uc.shouldClearCache()&&(Uc.rostergroups&&(await Uc.rostergroups.clearStore(),delete Uc.rostergroups),Uc.roster&&(Pc(Uc,"roster.data.destroy"),await Uc.roster.clearStore(),delete Uc.roster))}),Vc.listen.on("statusInitialized",async e=>{if(e)!Uc.connection.hasResumed()&&await o();else{Uc.presences=new Uc.Presences;const e="converse.presences-".concat(Uc.bare_jid);Uc.presences.browserStorage=Uc.createStore(e,"session"),Uc.presences.fetch()}Vc.trigger("presencesInitialized",e)}),Vc.listen.on("presencesInitialized",async e=>{e?Vc.trigger("rosterReadyAfterReconnection"):await async function(){await Vc.waitUntil("VCardsInitialized"),Uc.roster=new Uc.RosterContacts;let e="converse.contacts-".concat(Uc.bare_jid);Uc.roster.browserStorage=Uc.createStore(e),Uc.roster.data=new qo,e="converse-roster-model-".concat(Uc.bare_jid),Uc.roster.data.id=e,Uc.roster.data.browserStorage=Uc.createStore(e),Uc.roster.data.fetch(),e="converse.roster.groups".concat(Uc.bare_jid),Uc.rostergroups=new Uc.RosterGroups,Uc.rostergroups.browserStorage=Uc.createStore(e),Vc.trigger("rosterInitialized")}(),Uc.roster.onConnected(),Uc.registerPresenceHandler(),Uc.populateRoster(!Uc.connection.restored)}),Object.assign(Uc.api,{contacts:{async get(e){await Vc.waitUntil("rosterContactsFetched");const t=e=>Uc.roster.get(ad.getBareJidFromJid(e));if(void 0===e)e=Uc.roster.pluck("jid");else if("string"==typeof e)return t(e);return e.map(t)},async add(e,t){if(await Vc.waitUntil("rosterContactsFetched"),"string"!=typeof e||!e.includes("@"))throw new TypeError("contacts.add: invalid jid");return Uc.roster.addAndSubscribe(e,t)}}})}});
 /**
  * @module converse-smacks
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description Converse.js plugin which adds support for XEP-0198: Stream Management
  */
-const{Strophe:Zu}=Yc.env,ed=Yc.env.utils;Zu.addNamespace("SM","urn:xmpp:sm:3"),Yc.plugins.add("converse-smacks",{initialize(){function e(){return!(qc.connection.isType("bosh")&&!Lc.isTestEnv())&&qc.disco.stream.getFeature("sm",Zu.NS.SM)}function t(e){if(!Lc.session.get("smacks_enabled"))return!0;const t=parseInt(e.getAttribute("h"),10),n=Lc.session.get("num_stanzas_handled_by_server"),r=t-n;if(r<0){const e="New reported stanza count lower than previous. "+"New: ".concat(t," - Previous: ").concat(n);Pn.error(e)}const i=Lc.session.get("unacked_stanzas");if(r>i.length){const e="Higher reported acknowledge count than unacknowledged stanzas. "+"Reported Acknowledged Count: ".concat(r," -")+"Unacknowledged Stanza Count: ".concat(i.length," -")+"New: ".concat(t," - Previous: ").concat(n);Pn.error(e)}return Lc.session.save({num_stanzas_handled_by_server:t,num_stanzas_since_last_ack:0,unacked_stanzas:i.slice(r)}),!0}function n(){if(Lc.session.get("smacks_enabled")){const e=Lc.session.get("num_stanzas_handled"),t=ed.toStanza('<a xmlns="'.concat(Zu.NS.SM,'" h="').concat(e,'"/>'));qc.send(t)}return!0}function r(e){if(Lc.session.get("smacks_enabled")&&(ed.isTagEqual(e,"iq")||ed.isTagEqual(e,"presence")||ed.isTagEqual(e,"message"))){const e=Lc.session.get("num_stanzas_handled");Lc.session.save("num_stanzas_handled",e+1)}return!0}function i(){Lc.session&&Lc.session.save({smacks_enabled:!1,num_stanzas_handled:0,num_stanzas_handled_by_server:0,num_stanzas_since_last_ack:0,unacked_stanzas:[]})}function s(e){const t={smacks_enabled:!0};return["1","true"].includes(e.getAttribute("resume"))&&(t.smacks_stream_id=e.getAttribute("id")),Lc.session.save(t),!0}function o(e){return e.querySelector("item-not-found")?Pn.warn("Could not resume previous SMACKS session, session id not found. A new session will be established."):(Pn.error("Failed to enable stream management"),Pn.error(e.outerHTML)),i(),qc.trigger("streamResumptionFailed"),!0}function a(e){s(e),t(e),function(){const e=Lc.session.get("unacked_stanzas");Lc.session.save("unacked_stanzas",[]),e.forEach(e=>qc.send(e))}(),Lc.connection.do_bind=!1,Lc.connection.authenticated=!0,Lc.connection.restored=!0,Lc.connection._changeConnectStatus(Zu.Status.CONNECTED,null)}qc.settings.extend({enable_smacks:!0,smacks_max_unacked_stanzas:5}),qc.listen.on("userSessionInitialized",(function(){Lc.session.save({smacks_enabled:Lc.session.get("smacks_enabled")||!1,num_stanzas_handled:Lc.session.get("num_stanzas_handled")||0,num_stanzas_handled_by_server:Lc.session.get("num_stanzas_handled_by_server")||0,num_stanzas_since_last_ack:Lc.session.get("num_stanzas_since_last_ack")||0,unacked_stanzas:Lc.session.get("unacked_stanzas")||[]})})),qc.listen.on("beforeResourceBinding",(async function(){qc.settings.get("enable_smacks")&&await e()&&(Lc.connection.addHandler(r),Lc.connection.addHandler(n,Zu.NS.SM,"r"),Lc.connection.addHandler(t,Zu.NS.SM,"a"),Lc.session.get("smacks_stream_id")?await async function(){const e=ed.getResolveablePromise();Lc.connection._addSysHandler(t=>e.resolve(a(t)),Zu.NS.SM,"resumed"),Lc.connection._addSysHandler(t=>e.resolve(o(t)),Zu.NS.SM,"failed");const t=Lc.session.get("smacks_stream_id"),n=Lc.session.get("num_stanzas_handled"),r=ed.toStanza('<resume xmlns="'.concat(Zu.NS.SM,'" h="').concat(n,'" previd="').concat(t,'"/>'));qc.send(r),Lc.connection.flush(),await e}():i())})),qc.listen.on("afterResourceBinding",(async function(){if(qc.settings.get("enable_smacks")&&!Lc.session.get("smacks_enabled")&&await e()){const e=ed.getResolveablePromise();Lc.connection._addSysHandler(t=>e.resolve(s(t)),Zu.NS.SM,"enabled"),Lc.connection._addSysHandler(t=>e.resolve(o(t)),Zu.NS.SM,"failed");const t=qc.connection.isType("websocket")||Lc.isTestEnv(),n=ed.toStanza('<enable xmlns="'.concat(Zu.NS.SM,'" resume="').concat(t,'"/>'));qc.send(n),Lc.connection.flush(),await e}})),qc.listen.on("send",(function(e){if(Lc.session){if(Lc.session.get("smacks_enabled")&&(ed.isTagEqual(e,"iq")||ed.isTagEqual(e,"presence")||ed.isTagEqual(e,"message"))){const t=Zu.serialize(e);Lc.session.save("unacked_stanzas",(Lc.session.get("unacked_stanzas")||[]).concat([t]));const n=qc.settings.get("smacks_max_unacked_stanzas");if(n>0){const e=Lc.session.get("num_stanzas_since_last_ack")+1;e%n==0&&qc.send(ed.toStanza('<r xmlns="'.concat(Zu.NS.SM,'"/>'))),Lc.session.save({num_stanzas_since_last_ack:e})}}}else Pn.warn("No _converse.session!")}))}});
+const{Strophe:fd}=rl.env,pd=rl.env.utils;function gd(){return!(Vc.connection.isType("bosh")&&!Uc.isTestEnv())&&Vc.disco.stream.getFeature("sm",fd.NS.SM)}function md(e){if(!Uc.session.get("smacks_enabled"))return!0;const t=parseInt(e.getAttribute("h"),10),n=Uc.session.get("num_stanzas_handled_by_server"),r=t-n;if(r<0){const e="New reported stanza count lower than previous. "+"New: ".concat(t," - Previous: ").concat(n);zn.error(e)}const i=Uc.session.get("unacked_stanzas");if(r>i.length){const e="Higher reported acknowledge count than unacknowledged stanzas. "+"Reported Acknowledged Count: ".concat(r," -")+"Unacknowledged Stanza Count: ".concat(i.length," -")+"New: ".concat(t," - Previous: ").concat(n);zn.error(e)}return Uc.session.save({num_stanzas_handled_by_server:t,num_stanzas_since_last_ack:0,unacked_stanzas:i.slice(r)}),!0}function vd(){if(Uc.session.get("smacks_enabled")){const e=Uc.session.get("num_stanzas_handled"),t=pd.toStanza('<a xmlns="'.concat(fd.NS.SM,'" h="').concat(e,'"/>'));Vc.send(t)}return!0}function _d(e){if(Uc.session.get("smacks_enabled")&&(pd.isTagEqual(e,"iq")||pd.isTagEqual(e,"presence")||pd.isTagEqual(e,"message"))){const e=Uc.session.get("num_stanzas_handled");Uc.session.save("num_stanzas_handled",e+1)}return!0}function bd(){Uc.session.save({smacks_enabled:Uc.session.get("smacks_enabled")||!1,num_stanzas_handled:Uc.session.get("num_stanzas_handled")||0,num_stanzas_handled_by_server:Uc.session.get("num_stanzas_handled_by_server")||0,num_stanzas_since_last_ack:Uc.session.get("num_stanzas_since_last_ack")||0,unacked_stanzas:Uc.session.get("unacked_stanzas")||[]})}function yd(){Uc.session&&Uc.session.save({smacks_enabled:!1,num_stanzas_handled:0,num_stanzas_handled_by_server:0,num_stanzas_since_last_ack:0,unacked_stanzas:[]})}function wd(e){const t={smacks_enabled:!0};return["1","true"].includes(e.getAttribute("resume"))&&(t.smacks_stream_id=e.getAttribute("id")),Uc.session.save(t),!0}function Sd(e){return e.querySelector("item-not-found")?zn.warn("Could not resume previous SMACKS session, session id not found. A new session will be established."):(zn.error("Failed to enable stream management"),zn.error(e.outerHTML)),yd(),Vc.trigger("streamResumptionFailed"),!0}function xd(e){wd(e),md(e),function(){const e=Uc.session.get("unacked_stanzas");Uc.session.save("unacked_stanzas",[]),e.forEach(e=>Vc.send(e))}(),Uc.connection.do_bind=!1,Uc.connection.authenticated=!0,Uc.connection.restored=!0,Uc.connection._changeConnectStatus(fd.Status.CONNECTED,null)}async function Ed(){if(Vc.settings.get("enable_smacks")&&!Uc.session.get("smacks_enabled")&&await gd()){const e=pd.getResolveablePromise();Uc.connection._addSysHandler(t=>e.resolve(wd(t)),fd.NS.SM,"enabled"),Uc.connection._addSysHandler(t=>e.resolve(Sd(t)),fd.NS.SM,"failed");const t=Vc.connection.isType("websocket")||Uc.isTestEnv(),n=pd.toStanza('<enable xmlns="'.concat(fd.NS.SM,'" resume="').concat(t,'"/>'));Vc.send(n),Uc.connection.flush(),await e}}fd.addNamespace("SM","urn:xmpp:sm:3");const Ad=[];async function Cd(){if(!Vc.settings.get("enable_smacks"))return;if(!await gd())return;const e=Uc.connection;for(;Ad.length;)e.deleteHandler(Ad.pop());Ad.push(e.addHandler(_d)),Ad.push(e.addHandler(vd,fd.NS.SM,"r")),Ad.push(e.addHandler(md,fd.NS.SM,"a")),Uc.session.get("smacks_stream_id")?await async function(){const e=pd.getResolveablePromise();Uc.connection._addSysHandler(t=>e.resolve(xd(t)),fd.NS.SM,"resumed"),Uc.connection._addSysHandler(t=>e.resolve(Sd(t)),fd.NS.SM,"failed");const t=Uc.session.get("smacks_stream_id"),n=Uc.session.get("num_stanzas_handled"),r=pd.toStanza('<resume xmlns="'.concat(fd.NS.SM,'" h="').concat(n,'" previd="').concat(t,'"/>'));Vc.send(r),Uc.connection.flush(),await e}():yd()}function jd(e){if(Uc.session){if(Uc.session.get("smacks_enabled")&&(pd.isTagEqual(e,"iq")||pd.isTagEqual(e,"presence")||pd.isTagEqual(e,"message"))){const t=fd.serialize(e);Uc.session.save("unacked_stanzas",(Uc.session.get("unacked_stanzas")||[]).concat([t]));const n=Vc.settings.get("smacks_max_unacked_stanzas");if(n>0){const e=Uc.session.get("num_stanzas_since_last_ack")+1;e%n==0&&Vc.send(pd.toStanza('<r xmlns="'.concat(fd.NS.SM,'"/>'))),Uc.session.save({num_stanzas_since_last_ack:e})}}}else zn.warn("No _converse.session!")}rl.plugins.add("converse-smacks",{initialize(){Vc.settings.extend({enable_smacks:!0,smacks_max_unacked_stanzas:5}),Vc.listen.on("afterResourceBinding",Ed),Vc.listen.on("beforeResourceBinding",Cd),Vc.listen.on("send",jd),Vc.listen.on("userSessionInitialized",bd)}});
 /**
  * @module converse-vcard
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:td,$iq:nd,dayjs:rd}=Yc.env,id=Yc.env.utils;Yc.plugins.add("converse-vcard",{dependencies:["converse-status","converse-roster"],overrides:{XMPPStatus:{getNickname(){const{_converse:e}=this.__super__,t=this.__super__.getNickname.apply(this);return!t&&e.xmppstatus.vcard?e.xmppstatus.vcard.get("nickname"):t},getFullname(){const{_converse:e}=this.__super__,t=this.__super__.getFullname.apply(this);return!t&&e.xmppstatus.vcard?e.xmppstatus.vcard.get("fullname"):t}},RosterContact:{getDisplayName(){return!this.get("nickname")&&this.vcard?this.vcard.getDisplayName():this.__super__.getDisplayName.apply(this)},getFullname(){return this.vcard?this.vcard.get("fullname"):this.__super__.getFullname.apply(this)}}},initialize(){function e(e,t,n){const r=nd(t?{type:e,to:t}:{type:e});return n?r.cnode(n):r.c("vCard",{xmlns:td.NS.VCARD}),r}async function t(t,n){const r=td.getBareJidFromJid(n)===t.bare_jid?null:n;let i;try{i=await qc.sendIQ(e("get",r))}catch(i){return{stanza:i,jid:n,vcard_error:(new Date).toISOString()}}return async function(e,t){const n=t.querySelector("vCard");let r={};var i,s,o,a,c,l,u;if(null!==n&&(r={stanza:t,fullname:null===(i=n.querySelector("FN"))||void 0===i?void 0:i.textContent,nickname:null===(s=n.querySelector("NICKNAME"))||void 0===s?void 0:s.textContent,image:null===(o=n.querySelector("PHOTO BINVAL"))||void 0===o?void 0:o.textContent,image_type:null===(a=n.querySelector("PHOTO TYPE"))||void 0===a?void 0:a.textContent,url:null===(c=n.querySelector("URL"))||void 0===c?void 0:c.textContent,role:null===(l=n.querySelector("ROLE"))||void 0===l?void 0:l.textContent,email:null===(u=n.querySelector("EMAIL USERID"))||void 0===u?void 0:u.textContent,vcard_updated:(new Date).toISOString(),vcard_error:void 0}),r.image){const e=id.base64ToArrayBuffer(r.image),t=await crypto.subtle.digest("SHA-1",e);r.image_hash=id.arrayBufferToHex(t)}return r}(0,i)}async function n(e){let t;if(e instanceof Lc.Message){if("error"===e.get("type"))return;t=e.get("from")}else t=e.get("jid");await qc.waitUntil("VCardsInitialized"),e.vcard=Lc.vcards.findWhere({jid:t}),e.vcard||(e.vcard=Lc.vcards.create({jid:t})),e.vcard.on("change",()=>e.trigger("vcard:change"))}async function r(e){await qc.waitUntil("VCardsInitialized"),["error","info"].includes(e.get("type"))||(e.vcard=function(e){var t;const n=null==e||null===(t=e.collection)||void 0===t?void 0:t.chatbox,r=td.getResourceFromJid(e.get("from"));if(n&&n.get("nick")===r)return Lc.xmppstatus.vcard;{const t=e.occupant&&e.occupant.get("jid")||e.get("from");return t?Lc.vcards.findWhere({jid:t})||Lc.vcards.create({jid:t}):void Pn.error("Could not assign VCard for message because no JID found! msgid: ".concat(e.get("msgid")))}}(e))}qc.promises.add("VCardsInitialized"),Lc.VCard=Rs.extend({defaults:{image:Lc.DEFAULT_IMAGE,image_type:Lc.DEFAULT_IMAGE_TYPE},set(e,t,n){let r;return"object"==typeof e?(r=e,n=t):(r={})[e]=t,"image"in r&&!r.image?(r.image=Lc.DEFAULT_IMAGE,r.image_type=Lc.DEFAULT_IMAGE_TYPE,Rs.prototype.set.call(this,r,n)):Rs.prototype.set.apply(this,arguments)},getDisplayName(){return this.get("nickname")||this.get("fullname")||this.get("jid")}}),Lc.VCards=Yo.extend({model:Lc.VCard,initialize(){this.on("add",e=>e.get("jid")&&qc.vcard.update(e))}}),Lc.initVCardCollection=async function(){Lc.vcards=new Lc.VCards,Lc.vcards.browserStorage=Lc.createStore("".concat(Lc.bare_jid,"-converse.vcards")),await new Promise(e=>{Lc.vcards.fetch({success:e,error:e},{silent:!0})});const e=Lc.vcards;if(Lc.session){const t=Lc.session.get("bare_jid");Lc.xmppstatus.vcard=e.findWhere({jid:t})||e.create({jid:t})}qc.trigger("VCardsInitialized")},qc.listen.on("chatBoxInitialized",e=>n(e)),qc.listen.on("chatRoomInitialized",e=>n(e)),qc.listen.on("chatRoomMessageInitialized",e=>r(e)),qc.listen.on("addClientFeatures",()=>qc.disco.own.features.add(td.NS.VCARD)),qc.listen.on("clearSession",()=>{Lc.shouldClearCache()&&(qc.promises.add("VCardsInitialized"),Lc.vcards&&(Lc.vcards.clearStore(),delete Lc.vcards))}),qc.listen.on("messageInitialized",e=>n(e)),qc.listen.on("rosterContactInitialized",e=>n(e)),qc.listen.on("statusInitialized",Lc.initVCardCollection),Object.assign(Lc.api,{vcard:{async set(t,n){if(!t)throw Error("No jid provided for the VCard data");const r=document.createElement("div"),i=id.toStanza('\n                        <vCard xmlns="vcard-temp">\n                            <FN>'.concat(n.fn,"</FN>\n                            <NICKNAME>").concat(n.nickname,"</NICKNAME>\n                            <URL>").concat(n.url,"</URL>\n                            <ROLE>").concat(n.role,"</ROLE>\n                            <EMAIL><INTERNET/><PREF/><USERID>").concat(n.email,"</USERID></EMAIL>\n                            <PHOTO>\n                                <TYPE>").concat(n.image_type,"</TYPE>\n                                <BINVAL>").concat(n.image,"</BINVAL>\n                            </PHOTO>\n                        </vCard>"),r);let s;try{s=await qc.sendIQ(e("set",t,i))}catch(e){throw e}return await qc.vcard.update(t,!0),s},get(e,n){if("string"==typeof e)return t(Lc,e);if(!n&&e.get("vcard_updated")&&rd(e.get("vcard_error")).isSame(new Date,"day"))return Promise.resolve({});{const n=e.get("jid");return n||Pn.error("No JID to get vcard for"),t(Lc,n)}},async update(e,t){const n=await this.get(e,t);(e="string"==typeof e?Lc.vcards.findWhere({jid:e}):e)?(delete n.stanza,e.save(n)):Pn.error("Could not find a VCard model for ".concat(e))}}})}});var sd=n(53),od=n.n(sd);function ad(e,t){return"string"==typeof e&&t.includes(e)}function cd(e,t){return"string"!=typeof e||"en"!==e&&!t(e)?
+const{Strophe:Td,$iq:Od,dayjs:kd}=rl.env,Nd=rl.env.utils;rl.plugins.add("converse-vcard",{dependencies:["converse-status","converse-roster"],overrides:{XMPPStatus:{getNickname(){const{_converse:e}=this.__super__,t=this.__super__.getNickname.apply(this);return!t&&e.xmppstatus.vcard?e.xmppstatus.vcard.get("nickname"):t},getFullname(){const{_converse:e}=this.__super__,t=this.__super__.getFullname.apply(this);return!t&&e.xmppstatus.vcard?e.xmppstatus.vcard.get("fullname"):t}},RosterContact:{getDisplayName(){return!this.get("nickname")&&this.vcard?this.vcard.getDisplayName():this.__super__.getDisplayName.apply(this)},getFullname(){return this.vcard?this.vcard.get("fullname"):this.__super__.getFullname.apply(this)}}},initialize(){function e(e,t,n){const r=Od(t?{type:e,to:t}:{type:e});return n?r.cnode(n):r.c("vCard",{xmlns:Td.NS.VCARD}),r}async function t(t,n){const r=Td.getBareJidFromJid(n)===t.bare_jid?null:n;let i;try{i=await Vc.sendIQ(e("get",r))}catch(i){return{stanza:i,jid:n,vcard_error:(new Date).toISOString()}}return async function(e,t){const n=t.querySelector("vCard");let r={};var i,o,s,a,c,l,u;if(null!==n&&(r={stanza:t,fullname:null===(i=n.querySelector("FN"))||void 0===i?void 0:i.textContent,nickname:null===(o=n.querySelector("NICKNAME"))||void 0===o?void 0:o.textContent,image:null===(s=n.querySelector("PHOTO BINVAL"))||void 0===s?void 0:s.textContent,image_type:null===(a=n.querySelector("PHOTO TYPE"))||void 0===a?void 0:a.textContent,url:null===(c=n.querySelector("URL"))||void 0===c?void 0:c.textContent,role:null===(l=n.querySelector("ROLE"))||void 0===l?void 0:l.textContent,email:null===(u=n.querySelector("EMAIL USERID"))||void 0===u?void 0:u.textContent,vcard_updated:(new Date).toISOString(),vcard_error:void 0}),r.image){const e=Nd.base64ToArrayBuffer(r.image),t=await crypto.subtle.digest("SHA-1",e);r.image_hash=Nd.arrayBufferToHex(t)}return r}(0,i)}async function n(e){let t;if(e instanceof Uc.Message){if("error"===e.get("type"))return;t=e.get("from")}else t=e.get("jid");await Vc.waitUntil("VCardsInitialized"),e.vcard=Uc.vcards.findWhere({jid:t}),e.vcard||(e.vcard=Uc.vcards.create({jid:t})),e.vcard.on("change",()=>e.trigger("vcard:change"))}async function r(e){await Vc.waitUntil("VCardsInitialized"),["error","info"].includes(e.get("type"))||(e.vcard=function(e){var t;const n=null==e||null===(t=e.collection)||void 0===t?void 0:t.chatbox,r=Td.getResourceFromJid(e.get("from"));if(n&&n.get("nick")===r)return Uc.xmppstatus.vcard;{const t=e.occupant&&e.occupant.get("jid")||e.get("from");return t?Uc.vcards.findWhere({jid:t})||Uc.vcards.create({jid:t}):void zn.error("Could not assign VCard for message because no JID found! msgid: ".concat(e.get("msgid")))}}(e))}Vc.promises.add("VCardsInitialized"),Uc.VCard=qo.extend({defaults:{image:Uc.DEFAULT_IMAGE,image_type:Uc.DEFAULT_IMAGE_TYPE},set(e,t,n){let r;return"object"==typeof e?(r=e,n=t):(r={})[e]=t,"image"in r&&!r.image?(r.image=Uc.DEFAULT_IMAGE,r.image_type=Uc.DEFAULT_IMAGE_TYPE,qo.prototype.set.call(this,r,n)):qo.prototype.set.apply(this,arguments)},getDisplayName(){return this.get("nickname")||this.get("fullname")||this.get("jid")}}),Uc.VCards=ra.extend({model:Uc.VCard,initialize(){this.on("add",e=>e.get("jid")&&Vc.vcard.update(e))}}),Uc.initVCardCollection=async function(){Uc.vcards=new Uc.VCards,Uc.vcards.browserStorage=Uc.createStore("".concat(Uc.bare_jid,"-converse.vcards")),await new Promise(e=>{Uc.vcards.fetch({success:e,error:e},{silent:!0})});const e=Uc.vcards;if(Uc.session){const t=Uc.session.get("bare_jid");Uc.xmppstatus.vcard=e.findWhere({jid:t})||e.create({jid:t})}Vc.trigger("VCardsInitialized")},Vc.listen.on("chatBoxInitialized",e=>n(e)),Vc.listen.on("chatRoomInitialized",e=>n(e)),Vc.listen.on("chatRoomMessageInitialized",e=>r(e)),Vc.listen.on("addClientFeatures",()=>Vc.disco.own.features.add(Td.NS.VCARD)),Vc.listen.on("clearSession",()=>{Uc.shouldClearCache()&&(Vc.promises.add("VCardsInitialized"),Uc.vcards&&(Uc.vcards.clearStore(),delete Uc.vcards))}),Vc.listen.on("messageInitialized",e=>n(e)),Vc.listen.on("rosterContactInitialized",e=>n(e)),Vc.listen.on("statusInitialized",Uc.initVCardCollection),Object.assign(Uc.api,{vcard:{async set(t,n){if(!t)throw Error("No jid provided for the VCard data");const r=document.createElement("div"),i=Nd.toStanza('\n                        <vCard xmlns="vcard-temp">\n                            <FN>'.concat(n.fn,"</FN>\n                            <NICKNAME>").concat(n.nickname,"</NICKNAME>\n                            <URL>").concat(n.url,"</URL>\n                            <ROLE>").concat(n.role,"</ROLE>\n                            <EMAIL><INTERNET/><PREF/><USERID>").concat(n.email,"</USERID></EMAIL>\n                            <PHOTO>\n                                <TYPE>").concat(n.image_type,"</TYPE>\n                                <BINVAL>").concat(n.image,"</BINVAL>\n                            </PHOTO>\n                        </vCard>"),r);let o;try{o=await Vc.sendIQ(e("set",t,i))}catch(e){throw e}return await Vc.vcard.update(t,!0),o},get(e,n){if("string"==typeof e)return t(Uc,e);if(!n&&e.get("vcard_updated")&&kd(e.get("vcard_error")).isSame(new Date,"day"))return Promise.resolve({});{const n=e.get("jid");return n||zn.error("No JID to get vcard for"),t(Uc,n)}},async update(e,t){const n=await this.get(e,t);(e="string"==typeof e?Uc.vcards.findWhere({jid:e}):e)?(delete n.stanza,e.save(n)):zn.error("Could not find a VCard model for ".concat(e))}}})}});var Id=n(67),Md=n.n(Id);function Rd(e,t){return"string"==typeof e&&t.includes(e)}function Dd(e,t){return"string"!=typeof e||"en"!==e&&!t(e)?
 /**
  * @module i18n
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @description This is the internationalization module
  */
-function(e){var t,n;if(window.navigator.userLanguage&&(t=ld(window.navigator.userLanguage,e)),window.navigator.languages&&!t)for(n=0;n<window.navigator.languages.length&&!t;n++)t=ld(window.navigator.languages[n],e);return window.navigator.browserLanguage&&!t&&(t=ld(window.navigator.browserLanguage,e)),window.navigator.language&&!t&&(t=ld(window.navigator.language,e)),window.navigator.systemLanguage&&!t&&(t=ld(window.navigator.systemLanguage,e)),t||"en"}(t)||"en":e}function ld(e,t){if(t(e))return e;var n=e.split("-")[0];return n!==e&&t(n)?n:void 0}let ud;Object.assign(Pc,{getLocale:(e,t)=>cd(e,e=>ad(e,t)),translate(e){if(!ud)return od.a.sprintf.apply(od.a,arguments);const t=ud.translate(e);return arguments.length>1?t.fetch.apply(t,[].slice.call(arguments,1)):t.fetch()},async initialize(){if(Lc.isTestEnv())Lc.locale="en";else try{Lc.locale=Pc.getLocale(qc.settings.get("i18n"),qc.settings.get("locales")),await async function(e){const{api:t,locale:r}=e;if(!ad(r,t.settings.get("locales"))||"en"===r)return;const{default:i}=await n(406)("./".concat(r,"/LC_MESSAGES/converse.po"));await n(407)("./".concat(r.toLowerCase().replace("_","-"))),Sn.a.locale(cd(r,e=>Sn.a.locale(e))),ud=new od.a(i)}(Lc)}catch(e){Pn.fatal(e.message),Lc.locale="en"}},__:(...e)=>Pc.translate(...e)});const dd=Pc.__,hd={};qc.elements={registry:hd,define:function(e,t){this.registry[e]=t},register:function(){Object.keys(hd).forEach(e=>{customElements.get(e)||customElements.define(e,hd[e])})}},
+function(e){var t,n;if(window.navigator.userLanguage&&(t=Pd(window.navigator.userLanguage,e)),window.navigator.languages&&!t)for(n=0;n<window.navigator.languages.length&&!t;n++)t=Pd(window.navigator.languages[n],e);return window.navigator.browserLanguage&&!t&&(t=Pd(window.navigator.browserLanguage,e)),window.navigator.language&&!t&&(t=Pd(window.navigator.language,e)),window.navigator.systemLanguage&&!t&&(t=Pd(window.navigator.systemLanguage,e)),t||"en"}(t)||"en":e}function Pd(e,t){if(t(e))return e;var n=e.split("-")[0];return n!==e&&t(n)?n:void 0}let Ld;Object.assign(Hc,{getLocale:(e,t)=>Dd(e,e=>Rd(e,t)),translate(e){if(!Ld)return Md.a.sprintf.apply(Md.a,arguments);const t=Ld.translate(e);return arguments.length>1?t.fetch.apply(t,[].slice.call(arguments,1)):t.fetch()},async initialize(){if(Uc.isTestEnv())Uc.locale="en";else try{Uc.locale=Hc.getLocale(Vc.settings.get("i18n"),Vc.settings.get("locales")),await async function(e){const{api:t,locale:r}=e,i=r.toLowerCase().replace("_","-");if(!Rd(r,t.settings.get("locales"))||"en"===r)return;const{default:o}=await n(494)("./".concat(r,"/LC_MESSAGES/converse.po"));await n(495)("./".concat(i)),En.a.locale(Dd(i,e=>En.a.locale(e))),Ld=new Md.a(o)}(Uc)}catch(e){zn.fatal(e.message),Uc.locale="en"}},__:(...e)=>Hc.translate(...e)});const zd=Hc.__,Fd={};Vc.elements={registry:Fd,define:function(e,t){this.registry[e]=t},register:function(){Object.keys(Fd).forEach(e=>{customElements.get(e)||customElements.define(e,Fd[e])})}};
 /**
  * @module converse-autocomplete
  * @copyright Lea Verou and the Converse.js contributors
@@ -379,19 +388,19 @@ function(e){var t,n;if(window.navigator.userLanguage&&(t=ld(window.navigator.use
  *  https://leaverou.github.io/awesomplete/
  * @license Mozilla Public License (MPLv2)
  */
-Yc.MENTION_BOUNDARIES=['"',"(","<","#","!","\\","/","+","~","[","{","^",">"];const fd=Yc.env.utils,pd=function(e,t){return RegExp(_d.regExpEscape(t.trim()),"i").test(e)},gd=function(e,t){return RegExp("^"+_d.regExpEscape(t.trim()),"i").test(e)},md=function(e,t){const n=e.query.toLowerCase(),r=e.label.toLowerCase().indexOf(n),i=t.label.toLowerCase().indexOf(n);return r===i?function(e,t){return e.length!==t.length?e.length-t.length:e<t?-1:1}(e,t):(-1===r?1/0:r)<(-1===i?1/0:i)?-1:1},vd=(e,t)=>{t=t.trim();const n=document.createElement("li");n.setAttribute("aria-selected","false");const r=new RegExp("("+t+")","ig");return(t?e.split(r):[e]).forEach(e=>{if(t&&e.match(r)){const t=document.createElement("mark");t.textContent=e,n.appendChild(t)}else n.appendChild(document.createTextNode(e))}),n},_d={getElement:(e,t)=>"string"==typeof e?(t||document).querySelector(e):e||null,bind(e,t){if(e)for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=t[n];n.split(/\s+/).forEach(t=>e.addEventListener(t,r))}},unbind(e,t){if(e)for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=t[n];n.split(/\s+/).forEach(t=>e.removeEventListener(t,r))}},regExpEscape:e=>e.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&"),isMention:(e,t,n)=>t.includes(e[0])||n.includes(e[0])&&t.includes(e[1])};class bd extends String{constructor(e,t){super();const n=Array.isArray(e)?{label:e[0],value:e[1]}:"object"==typeof e&&"label"in e&&"value"in e?e:{label:e,value:e};this.label=n.label||n.value,this.value=n.value,this.query=t}get lenth(){return this.label.length}toString(){return""+this.label}valueOf(){return this.toString()}}class yd{constructor(e,t={}){this.is_opened=!1,fd.hasClass("suggestion-box",e)?this.container=e:this.container=e.querySelector(".suggestion-box"),this.input=this.container.querySelector(".suggestion-box__input"),this.input.setAttribute("aria-autocomplete","list"),this.ul=this.container.querySelector(".suggestion-box__results"),this.status=this.container.querySelector(".suggestion-box__additions"),Object.assign(this,{match_current_word:!1,ac_triggers:[],include_triggers:[],min_chars:2,max_items:10,auto_evaluate:!0,auto_first:!1,data:e=>e,filter:pd,sort:!1!==t.sort&&md,item:vd},t),this.index=-1,this.bindEvents(),this.input.hasAttribute("list")?(this.list="#"+this.input.getAttribute("list"),this.input.removeAttribute("list")):this.list=this.input.getAttribute("data-list")||t.list||[]}bindEvents(){const e={blur:()=>this.close({reason:"blur"})};this.auto_evaluate&&(e.input=()=>this.evaluate()),this._events={input:e,form:{submit:()=>this.close({reason:"submit"})},ul:{mousedown:e=>this.onMouseDown(e),mouseover:e=>this.onMouseOver(e)}},_d.bind(this.input,this._events.input),_d.bind(this.input.form,this._events.form),_d.bind(this.ul,this._events.ul)}set list(e){if(Array.isArray(e)||"function"==typeof e)this._list=e;else if("string"==typeof e&&e.includes(","))this._list=e.split(/\s*,\s*/);else{var t;const n=(null===(t=_d.getElement(e))||void 0===t?void 0:t.children)||[];this._list=Array.from(n).filter(e=>!e.disabled).map(e=>{const t=e.textContent.trim(),n=e.value||t,r=e.label||t;return""!==n?{label:r,value:n}:null}).filter(e=>e)}document.activeElement===this.input&&this.evaluate()}get list(){return this._list}get selected(){return this.index>-1}get opened(){return this.is_opened}close(e){this.opened&&(this.ul.setAttribute("hidden",""),this.is_opened=!1,this.index=-1,this.trigger("suggestion-box-close",e||{}))}insertValue(e){this.match_current_word?fd.replaceCurrentWord(this.input,e.value,Yc.MENTION_BOUNDARIES):this.input.value=e.value}open(){this.ul.removeAttribute("hidden"),this.is_opened=!0,this.auto_first&&-1===this.index&&this.goto(0),this.trigger("suggestion-box-open")}destroy(){_d.unbind(this.input,this._events.input),_d.unbind(this.input.form,this._events.form),this.input.removeAttribute("aria-autocomplete")}next(){const e=this.ul.children.length;this.goto(this.index<e-1?this.index+1:e?0:-1)}previous(){const e=this.ul.children.length,t=this.index-1;this.goto(this.selected&&-1!==t?t:e-1)}goto(e){const t=this.ul.children;this.selected&&t[this.index].setAttribute("aria-selected","false"),this.index=e,e>-1&&t.length>0&&(t[e].setAttribute("aria-selected","true"),t[e].focus(),this.status.textContent=t[e].textContent,this.ul.scrollTop=t[e].offsetTop-this.ul.clientHeight+t[e].clientHeight,this.trigger("suggestion-box-highlight",{text:this.suggestions[this.index]}))}select(e){if(e?this.index=fd.siblingIndex(e):e=this.ul.children[this.index],e){const e=this.suggestions[this.index];this.insertValue(e),this.close({reason:"select"}),this.auto_completing=!1,this.trigger("suggestion-box-selectcomplete",{text:e})}}onMouseOver(e){const t=fd.ancestor(e.target,"li");t&&this.goto(Array.prototype.slice.call(this.ul.children).indexOf(t))}onMouseDown(e){if(0!==e.button)return;const t=fd.ancestor(e.target,"li");t&&(e.preventDefault(),this.select(t,e.target))}onKeyDown(e){if(this.opened){if([Yc.keycodes.ENTER,Yc.keycodes.TAB].includes(e.keyCode)&&this.selected)return e.preventDefault(),e.stopPropagation(),this.select(),!0;if(e.keyCode===Yc.keycodes.ESCAPE)return this.close({reason:"esc"}),!0;if([Yc.keycodes.UP_ARROW,Yc.keycodes.DOWN_ARROW].includes(e.keyCode))return e.preventDefault(),e.stopPropagation(),this[e.keyCode===Yc.keycodes.UP_ARROW?"previous":"next"](),!0}if(![Yc.keycodes.SHIFT,Yc.keycodes.META,Yc.keycodes.META_RIGHT,Yc.keycodes.ESCAPE,Yc.keycodes.ALT].includes(e.keyCode))if(this.ac_triggers.includes(e.key))"Tab"===e.key&&e.preventDefault(),this.auto_completing=!0;else if("Backspace"===e.key){const t=fd.getCurrentWord(e.target,e.target.selectionEnd-1);_d.isMention(t,this.ac_triggers,Yc.MENTION_BOUNDARIES)&&(this.auto_completing=!0)}}async evaluate(e){const t=this.selected&&e&&(e.keyCode===Yc.keycodes.UP_ARROW||e.keyCode===Yc.keycodes.DOWN_ARROW);if(!this.auto_evaluate&&!this.auto_completing||t)return;const n="function"==typeof this._list?await this._list():this._list;if(0===n.length)return;let r=this.match_current_word?fd.getCurrentWord(this.input):this.input.value;const i=_d.isMention(r,this.ac_triggers,Yc.MENTION_BOUNDARIES);i&&(this.auto_completing=!0,this.include_triggers.includes(e.key)||(r=Yc.MENTION_BOUNDARIES.includes(r[0])?r.slice("2"):r.slice("1"))),(i||r.length)&&r.length>=this.min_chars?(this.index=-1,this.ul.innerHTML="",this.suggestions=n.map(e=>new bd(this.data(e,r),r)).filter(e=>this.filter(e,r)),!1!==this.sort&&(this.suggestions=this.suggestions.sort(this.sort)),this.suggestions=this.suggestions.slice(0,this.max_items),this.suggestions.forEach(e=>this.ul.appendChild(this.item(e,r))),0===this.ul.children.length?this.close({reason:"nomatches"}):this.open()):(this.close({reason:"nomatches"}),i||(this.auto_completing=!1))}}function wd(){const e=xd(['\n        <div class="list-container list-container--bookmarks ','">\n            <a class="list-toggle bookmarks-toggle controlbox-padded"\n            title="','"\n            @click=','>\n\n                <span class="fa ','">\n                </span> ','</a>\n            <div class="items-list bookmarks rooms-list ','">\n            ',"\n            </div>\n        </div>\n    "]);return wd=function(){return e},e}function Sd(){const e=xd(['\n        <div class="list-item controlbox-padded room-item available-chatroom d-flex flex-row ','" data-room-jid="','">\n            <a class="list-item-link open-room w-100" data-room-jid="','"\n            title="','"\n            @click=',">",'</a>\n\n            <a class="list-item-action remove-bookmark fa fa-bookmark align-self-center ','"\n            data-room-jid="','"\n            data-bookmark-name="','"\n            title="','"\n            @click=',"></a>\n        </div>\n    "]);return Sd=function(){return e},e}function xd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Object.assign(yd.prototype,hi),Yc.plugins.add("converse-autocomplete",{initialize(){const e=this._converse;e.FILTER_CONTAINS=pd,e.FILTER_STARTSWITH=gd,e.AutoComplete=yd}});var Ed=e=>{const t=dd("Click to toggle the bookmarks list"),n=dd("Bookmarks");return Ga(wd(),e.hidden?"":"hidden",t,e.toggleBookmarksList,e.toggle_state===e._converse.OPENED?"fa-caret-down":"fa-caret-right",n,e.toggle_state!==e._converse.OPENED?"hidden":"",e.bookmarks.map(t=>(e=>{const t=dd("Unbookmark this groupchat"),n=dd("Click to open this groupchat");return Ga(Sd(),e.is_hidden(e.bm)?"hidden":"",e.bm.get("jid"),e.bm.get("jid"),n,e.openRoom,e.bm.getDisplayName(),e.bm.get("bookmarked")?"button-on":"",e.bm.get("jid"),e.bm.getDisplayName(),t,e.removeBookmark)})(Object.assign({bm:t},e))))};function Ad(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <form class="converse-form chatroom-form" @submit=',">\n            <legend>",'</legend>\n            <fieldset class="form-group">\n                <label for="converse_muc_bookmark_name">','</label>\n                <input class="form-control" type="text" value="','" name="name" required="required" id="converse_muc_bookmark_name"/>\n            </fieldset>\n            <fieldset class="form-group">\n                <label for="converse_muc_bookmark_nick">','</label>\n                <input class="form-control" type="text" name="nick" value="','" id="converse_muc_bookmark_nick"/>\n            </fieldset>\n            <fieldset class="form-group form-check">\n                <input class="form-check-input" id="converse_muc_bookmark_autojoin" type="checkbox" name="autojoin"/>\n                <label class="form-check-label" for="converse_muc_bookmark_autojoin">','</label>\n            </fieldset>\n            <fieldset class="form-group">\n                <input class="btn btn-primary" type="submit" value="','">\n                <input class="btn btn-secondary button-cancel" type="button" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return Ad=function(){return e},e}const Cd=/^\s*</,jd=("undefined"!=typeof Element&&Element.prototype,function(e){this.cid=di("view"),this._domEvents=[],this.preinitialize.apply(this,arguments),xr(this,Ms(e,Od)),this._ensureElement(),this.initialize.apply(this,arguments)});jd.extend=Wr;const Td=/^(\S+)\s*(.*)$/,Od=["model","collection","el","id","attributes","className","tagName","events"];Object.assign(jd.prototype,hi,{tagName:"div",$:function(e){return this.el.querySelectorAll(e)},preinitialize:function(){},initialize:function(){},render:function(){return M(this.beforeRender)&&this.beforeRender(),M(this.toHTML)&&Wa(this.toHTML(),this.el),M(this.afterRender)&&this.afterRender(),this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.undelegateEvents(),this.el.parentNode&&this.el.parentNode.removeChild(this.el)},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){if("string"==typeof e)if(Cd.test(e)){const t=document.createElement("div");t.innerHTML=e,this.el=t.firstChild}else this.el=document.querySelector(e);else e&&!Mn(e)&&e.length?this.el=e[0]:this.el=e},delegateEvents:function(e){if(e||(e=$r(this,"events")),!e)return this;this.undelegateEvents();for(const t in e){let n=e[t];if(M(n)||(n=this[n]),!n)continue;const r=t.match(Td);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(e,t,n){const r=this.el;if(!r)return this;if("function"==typeof t&&(n=t,t=null),-1!==["focus","blur"].indexOf(e)){const r=this.el.querySelectorAll(t);for(let t=0,i=r.length;t<i;t++){const i=r[t];i.addEventListener(e,n,!1),this._domEvents.push({el:i,eventName:e,handler:n})}return n}const i=t?function(e){let i=e.target||e.srcElement;for(;i&&i!=r;i=i.parentNode)i.matches(t)&&(e.delegateTarget=i,n(e))}:n;return this.el.addEventListener(e,i,!1),this._domEvents.push({el:this.el,eventName:e,handler:i,listener:n,selector:t}),this},undelegateEvents:function(){if(this.el){for(let e=0,t=this._domEvents.length;e<t;e++){const t=this._domEvents[e];t.el.removeEventListener(t.eventName,t.handler,!1)}this._domEvents.length=0}return this},undelegate:function(e,t,n){if("function"==typeof t&&(n=t,t=null),this.el){const r=this._domEvents.slice();let i=r.length;for(;i--;){const s=r[i];!(s.eventName!==e||n&&s.listener!==n||t&&s.selector!==t)&&(s.el.removeEventListener(s.eventName,s.handler,!1),this._domEvents.splice(i,1))}}return this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement($r(this,"el"));else{const e=xr({},$r(this,"attributes"));this.id&&(e.id=$r(this,"id")),this.className&&(e.class=$r(this,"className")),this.setElement(this._createElement($r(this,"tagName"))),this._setAttributes(e)}},_setAttributes:function(e){for(const t in e)t in this.el?this.el[t]=e[t]:this.el.setAttribute(t,e[t])}});var kd=wr((function(e,t,n){var r=-1,i="function"==typeof t,s=Xe(e)?Array(e.length):[];return uo(e,(function(e){s[++r]=i?pr(t,e,n):Oc(e,t,n)})),s}));
+const Bd=rl.env.utils,qd=function(e,t){return RegExp(Wd.regExpEscape(t.trim()),"i").test(e)},Hd=function(e,t){return RegExp("^"+Wd.regExpEscape(t.trim()),"i").test(e)},Ud=function(e,t){const n=e.query.toLowerCase(),r=e.label.toLowerCase().indexOf(n),i=t.label.toLowerCase().indexOf(n);return r===i?function(e,t){return e.length!==t.length?e.length-t.length:e<t?-1:1}(e,t):(-1===r?1/0:r)<(-1===i?1/0:i)?-1:1},$d=(e,t)=>{t=t.trim();const n=document.createElement("li");n.setAttribute("aria-selected","false");const r=new RegExp("("+t+")","ig");return(t?e.split(r):[e]).forEach(e=>{if(t&&e.match(r)){const t=document.createElement("mark");t.textContent=e,n.appendChild(t)}else n.appendChild(document.createTextNode(e))}),n},Wd={getElement:(e,t)=>"string"==typeof e?(t||document).querySelector(e):e||null,bind(e,t){if(e)for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=t[n];n.split(/\s+/).forEach(t=>e.addEventListener(t,r))}},unbind(e,t){if(e)for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const r=t[n];n.split(/\s+/).forEach(t=>e.removeEventListener(t,r))}},regExpEscape:e=>e.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&"),isMention:(e,t)=>t.includes(e[0])||Bd.isMentionBoundary(e[0])&&t.includes(e[1])};class Gd extends String{constructor(e,t){super();const n=Array.isArray(e)?{label:e[0],value:e[1]}:"object"==typeof e&&"label"in e&&"value"in e?e:{label:e,value:e};this.label=n.label||n.value,this.value=n.value,this.query=t}get lenth(){return this.label.length}toString(){return""+this.label}valueOf(){return this.toString()}}class Vd{constructor(e,t={}){this.is_opened=!1,Bd.hasClass("suggestion-box",e)?this.container=e:this.container=e.querySelector(".suggestion-box"),this.input=this.container.querySelector(".suggestion-box__input"),this.input.setAttribute("aria-autocomplete","list"),this.ul=this.container.querySelector(".suggestion-box__results"),this.status=this.container.querySelector(".suggestion-box__additions"),Object.assign(this,{match_current_word:!1,ac_triggers:[],include_triggers:[],min_chars:2,max_items:10,auto_evaluate:!0,auto_first:!1,data:e=>e,filter:qd,sort:!1!==t.sort&&Ud,item:$d},t),this.index=-1,this.bindEvents(),this.input.hasAttribute("list")?(this.list="#"+this.input.getAttribute("list"),this.input.removeAttribute("list")):this.list=this.input.getAttribute("data-list")||t.list||[]}bindEvents(){const e={blur:()=>this.close({reason:"blur"})};this.auto_evaluate&&(e.input=()=>this.evaluate()),this._events={input:e,form:{submit:()=>this.close({reason:"submit"})},ul:{mousedown:e=>this.onMouseDown(e),mouseover:e=>this.onMouseOver(e)}},Wd.bind(this.input,this._events.input),Wd.bind(this.input.form,this._events.form),Wd.bind(this.ul,this._events.ul)}set list(e){if(Array.isArray(e)||"function"==typeof e)this._list=e;else if("string"==typeof e&&e.includes(","))this._list=e.split(/\s*,\s*/);else{var t;const n=(null===(t=Wd.getElement(e))||void 0===t?void 0:t.children)||[];this._list=Array.from(n).filter(e=>!e.disabled).map(e=>{const t=e.textContent.trim(),n=e.value||t,r=e.label||t;return""!==n?{label:r,value:n}:null}).filter(e=>e)}document.activeElement===this.input&&this.evaluate()}get list(){return this._list}get selected(){return this.index>-1}get opened(){return this.is_opened}close(e){this.opened&&(this.ul.setAttribute("hidden",""),this.is_opened=!1,this.index=-1,this.trigger("suggestion-box-close",e||{}))}insertValue(e){this.match_current_word?Bd.replaceCurrentWord(this.input,e.value):this.input.value=e.value}open(){this.ul.removeAttribute("hidden"),this.is_opened=!0,this.auto_first&&-1===this.index&&this.goto(0),this.trigger("suggestion-box-open")}destroy(){Wd.unbind(this.input,this._events.input),Wd.unbind(this.input.form,this._events.form),this.input.removeAttribute("aria-autocomplete")}next(){const e=this.ul.children.length;this.goto(this.index<e-1?this.index+1:e?0:-1)}previous(){const e=this.ul.children.length,t=this.index-1;this.goto(this.selected&&-1!==t?t:e-1)}goto(e){const t=this.ul.children;this.selected&&t[this.index].setAttribute("aria-selected","false"),this.index=e,e>-1&&t.length>0&&(t[e].setAttribute("aria-selected","true"),t[e].focus(),this.status.textContent=t[e].textContent,this.ul.scrollTop=t[e].offsetTop-this.ul.clientHeight+t[e].clientHeight,this.trigger("suggestion-box-highlight",{text:this.suggestions[this.index]}))}select(e){if(e?this.index=Bd.siblingIndex(e):e=this.ul.children[this.index],e){const e=this.suggestions[this.index];this.insertValue(e),this.close({reason:"select"}),this.auto_completing=!1,this.trigger("suggestion-box-selectcomplete",{text:e})}}onMouseOver(e){const t=Bd.ancestor(e.target,"li");t&&this.goto(Array.prototype.slice.call(this.ul.children).indexOf(t))}onMouseDown(e){if(0!==e.button)return;const t=Bd.ancestor(e.target,"li");t&&(e.preventDefault(),this.select(t,e.target))}onKeyDown(e){if(this.opened){if([rl.keycodes.ENTER,rl.keycodes.TAB].includes(e.keyCode)&&this.selected)return e.preventDefault(),e.stopPropagation(),this.select(),!0;if(e.keyCode===rl.keycodes.ESCAPE)return this.close({reason:"esc"}),!0;if([rl.keycodes.UP_ARROW,rl.keycodes.DOWN_ARROW].includes(e.keyCode))return e.preventDefault(),e.stopPropagation(),this[e.keyCode===rl.keycodes.UP_ARROW?"previous":"next"](),!0}if(![rl.keycodes.SHIFT,rl.keycodes.META,rl.keycodes.META_RIGHT,rl.keycodes.ESCAPE,rl.keycodes.ALT].includes(e.keyCode))if(this.ac_triggers.includes(e.key))"Tab"===e.key&&e.preventDefault(),this.auto_completing=!0;else if("Backspace"===e.key){const t=Bd.getCurrentWord(e.target,e.target.selectionEnd-1);Wd.isMention(t,this.ac_triggers)&&(this.auto_completing=!0)}}async evaluate(e){const t=this.selected&&e&&(e.keyCode===rl.keycodes.UP_ARROW||e.keyCode===rl.keycodes.DOWN_ARROW);if(!this.auto_evaluate&&!this.auto_completing||t)return;const n="function"==typeof this._list?await this._list():this._list;if(0===n.length)return;let r=this.match_current_word?Bd.getCurrentWord(this.input):this.input.value;const i=Wd.isMention(r,this.ac_triggers);i&&(this.auto_completing=!0,this.include_triggers.includes(e.key)||(r=Bd.isMentionBoundary(r[0])?r.slice("2"):r.slice("1"))),(i||r.length)&&r.length>=this.min_chars?(this.index=-1,this.ul.innerHTML="",this.suggestions=n.map(e=>new Gd(this.data(e,r),r)).filter(e=>this.filter(e,r)),!1!==this.sort&&(this.suggestions=this.suggestions.sort(this.sort)),this.suggestions=this.suggestions.slice(0,this.max_items),this.suggestions.forEach(e=>this.ul.appendChild(this.item(e,r))),0===this.ul.children.length?this.close({reason:"nomatches"}):this.open()):(this.close({reason:"nomatches"}),i||(this.auto_completing=!1))}}function Jd(){const e=Qd(['\n        <div class="list-container list-container--bookmarks ','">\n            <a class="list-toggle bookmarks-toggle controlbox-padded"\n            title="','"\n            @click=','>\n\n                <span class="fa ','">\n                </span> ','</a>\n            <div class="items-list bookmarks rooms-list ','">\n            ',"\n            </div>\n        </div>\n    "]);return Jd=function(){return e},e}function Xd(){const e=Qd(['\n        <div class="list-item controlbox-padded room-item available-chatroom d-flex flex-row ','" data-room-jid="','">\n            <a class="list-item-link open-room w-100" data-room-jid="','"\n            title="','"\n            @click=',">",'</a>\n\n            <a class="list-item-action remove-bookmark fa fa-bookmark align-self-center ','"\n            data-room-jid="','"\n            data-bookmark-name="','"\n            title="','"\n            @click=',"></a>\n        </div>\n    "]);return Xd=function(){return e},e}function Qd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Object.assign(Vd.prototype,_i),rl.plugins.add("converse-autocomplete",{initialize(){const e=this._converse;e.FILTER_CONTAINS=qd,e.FILTER_STARTSWITH=Hd,e.AutoComplete=Vd}});var Yd=e=>{const t=zd("Click to toggle the bookmarks list"),n=zd("Bookmarks");return Za(Jd(),e.hidden?"":"hidden",t,e.toggleBookmarksList,e.toggle_state===e._converse.OPENED?"fa-caret-down":"fa-caret-right",n,e.toggle_state!==e._converse.OPENED?"hidden":"",e.bookmarks.map(t=>(e=>{const t=zd("Unbookmark this groupchat"),n=zd("Click to open this groupchat");return Za(Xd(),e.is_hidden(e.bm)?"hidden":"",e.bm.get("jid"),e.bm.get("jid"),n,e.openRoom,e.bm.getDisplayName(),e.bm.get("bookmarked")?"button-on":"",e.bm.get("jid"),e.bm.getDisplayName(),t,e.removeBookmark)})(Object.assign({bm:t},e))))};function Kd(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <form class="converse-form chatroom-form" @submit=',">\n            <legend>",'</legend>\n            <fieldset class="form-group">\n                <label for="converse_muc_bookmark_name">','</label>\n                <input class="form-control" type="text" value="','" name="name" required="required" id="converse_muc_bookmark_name"/>\n            </fieldset>\n            <fieldset class="form-group">\n                <label for="converse_muc_bookmark_nick">','</label>\n                <input class="form-control" type="text" name="nick" value="','" id="converse_muc_bookmark_nick"/>\n            </fieldset>\n            <fieldset class="form-group form-check">\n                <input class="form-check-input" id="converse_muc_bookmark_autojoin" type="checkbox" name="autojoin"/>\n                <label class="form-check-label" for="converse_muc_bookmark_autojoin">','</label>\n            </fieldset>\n            <fieldset class="form-group">\n                <input class="btn btn-primary" type="submit" value="','">\n                <input class="btn btn-secondary button-cancel" type="button" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return Kd=function(){return e},e}const Zd=/^\s*</,eh=("undefined"!=typeof Element&&Element.prototype,function(e){this.cid=vi("view"),this._domEvents=[],this.preinitialize.apply(this,arguments),Or(this,Bo(e,nh)),this._ensureElement(),this.initialize.apply(this,arguments)});eh.extend=Yr;const th=/^(\S+)\s*(.*)$/,nh=["model","collection","el","id","attributes","className","tagName","events"];Object.assign(eh.prototype,_i,{tagName:"div",$:function(e){return this.el.querySelectorAll(e)},preinitialize:function(){},initialize:function(){},render:function(){return M(this.beforeRender)&&this.beforeRender(),M(this.toHTML)&&Ya(this.toHTML(),this.el),M(this.afterRender)&&this.afterRender(),this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.undelegateEvents(),this.el.parentNode&&this.el.parentNode.removeChild(this.el)},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){if("string"==typeof e)if(Zd.test(e)){const t=document.createElement("div");t.innerHTML=e,this.el=t.firstChild}else this.el=document.querySelector(e);else e&&!Dn(e)&&e.length?this.el=e[0]:this.el=e},delegateEvents:function(e){if(e||(e=Qr(this,"events")),!e)return this;this.undelegateEvents();for(const t in e){let n=e[t];if(M(n)||(n=this[n]),!n)continue;const r=t.match(th);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(e,t,n){const r=this.el;if(!r)return this;if("function"==typeof t&&(n=t,t=null),-1!==["focus","blur"].indexOf(e)){const r=this.el.querySelectorAll(t);for(let t=0,i=r.length;t<i;t++){const i=r[t];i.addEventListener(e,n,!1),this._domEvents.push({el:i,eventName:e,handler:n})}return n}const i=t?function(e){let i=e.target||e.srcElement;for(;i&&i!=r;i=i.parentNode)i.matches(t)&&(e.delegateTarget=i,n(e))}:n;return this.el.addEventListener(e,i,!1),this._domEvents.push({el:this.el,eventName:e,handler:i,listener:n,selector:t}),this},undelegateEvents:function(){if(this.el){for(let e=0,t=this._domEvents.length;e<t;e++){const t=this._domEvents[e];t.el.removeEventListener(t.eventName,t.handler,!1)}this._domEvents.length=0}return this},undelegate:function(e,t,n){if("function"==typeof t&&(n=t,t=null),this.el){const r=this._domEvents.slice();let i=r.length;for(;i--;){const o=r[i];!(o.eventName!==e||n&&o.listener!==n||t&&o.selector!==t)&&(o.el.removeEventListener(o.eventName,o.handler,!1),this._domEvents.splice(i,1))}}return this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement(Qr(this,"el"));else{const e=Or({},Qr(this,"attributes"));this.id&&(e.id=Qr(this,"id")),this.className&&(e.class=Qr(this,"className")),this.setElement(this._createElement(Qr(this,"tagName"))),this._setAttributes(e)}},_setAttributes:function(e){for(const t in e)t in this.el?this.el[t]=e[t]:this.el.setAttribute(t,e[t])}});var rh=jr((function(e,t,n){var r=-1,i="function"==typeof t,o=Xe(e)?Array(e.length):[];return vs(e,(function(e){o[++r]=i?yr(t,e,n):Dc(e,t,n)})),o}));
 /**
  * @module converse-bookmark-views
  * @description Converse.js plugin which adds views for XEP-0048 bookmarks
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:Nd}=Yc.env,Id=Yc.env.utils;Yc.plugins.add("converse-bookmark-views",{dependencies:["converse-chatboxes","converse-muc","converse-muc-views"],initialize(){qc.settings.extend({hide_open_bookmarks:!0}),Object.assign(Lc,{removeBookmarkViaEvent(e){e.preventDefault();const t=e.target.getAttribute("data-bookmark-name"),n=e.target.getAttribute("data-room-jid");confirm(dd('Are you sure you want to remove the bookmark "%1$s"?',t))&&kd(Lc.bookmarks.where({jid:n}),Rs.prototype.destroy)},addBookmarkViaEvent(e){e.preventDefault();const t=e.target.getAttribute("data-room-jid");qc.rooms.open(t,{bring_to_foreground:!0}),Lc.chatboxviews.get(t).renderBookmarkForm()}});const e={setBookmarkState(){if(void 0!==Lc.bookmarks){Lc.bookmarks.where({jid:this.model.get("jid")}).length?this.model.save("bookmarked",!0):this.model.save("bookmarked",!1)}},renderBookmarkForm(){if(this.hideChatRoomContents(),!this.bookmark_form){this.bookmark_form=new Lc.MUCBookmarkForm({model:this.model,chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.bookmark_form.el)}Id.showElement(this.bookmark_form.el)},toggleBookmark(e){null==e||e.preventDefault();const t=Lc.bookmarks.where({jid:this.model.get("jid")});t.length?t.forEach(e=>e.destroy()):this.renderBookmarkForm()}};Object.assign(Lc.ChatRoomView.prototype,e),Lc.MUCBookmarkForm=jd.extend({className:"muc-bookmark-form chatroom-form-container",initialize(e){this.chatroomview=e.chatroomview,this.render()},toHTML(){return(e=>{const t=dd("Bookmark this groupchat"),n=dd("Would you like this groupchat to be automatically joined upon startup?"),r=dd("Cancel"),i=dd("The name for this bookmark:"),s=dd("What should your nickname for this groupchat be?"),o=dd("Save");return Ga(Ad(),e.onSubmit,t,i,e.name,s,e.nick||"",n,o,r,e.onCancel)})(Object.assign(this.model.toJSON(),{onCancel:e=>this.closeBookmarkForm(e),onSubmit:e=>this.onBookmarkFormSubmitted(e)}))},onBookmarkFormSubmitted(e){var t,n,r;e.preventDefault(),Lc.bookmarks.createBookmark({jid:this.model.get("jid"),autojoin:(null===(t=e.target.querySelector('input[name="autojoin"]'))||void 0===t?void 0:t.checked)||!1,name:null===(n=e.target.querySelector("input[name=name]"))||void 0===n?void 0:n.value,nick:null===(r=e.target.querySelector("input[name=nick]"))||void 0===r?void 0:r.value}),this.closeBookmarkForm(e)},closeBookmarkForm(e){e.preventDefault(),this.chatroomview.closeForm()}}),Lc.BookmarksView=jd.extend({tagName:"span",initialize(){this.listenTo(this.model,"add",this.render),this.listenTo(this.model,"remove",this.render),this.listenTo(Lc.chatboxes,"add",this.render),this.listenTo(Lc.chatboxes,"remove",this.render);const e="converse.room-bookmarks".concat(Lc.bare_jid,"-list-model");this.list_model=new Lc.BookmarksList({id:e}),this.list_model.browserStorage=Lc.createStore(e);const t=()=>{this.render(),this.insertIntoControlBox()};this.list_model.fetch({success:t,error:t})},toHTML(){return Ed({_converse:Lc,bookmarks:this.model,hidden:this.model.getUnopenedBookmarks().length&&!0,is_hidden:e=>!(!qc.settings.get("hide_open_bookmarks")||!Lc.chatboxes.get(e.get("jid"))),openRoom:e=>this.openRoom(e),removeBookmark:e=>this.removeBookmark(e),toggleBookmarksList:e=>this.toggleBookmarksList(e),toggle_state:this.list_model.get("toggle-state")})},insertIntoControlBox(){const e=Lc.chatboxviews.get("controlbox");if(void 0!==e&&!Id.rootContains(Lc.root,this.el)){const t=e.el.querySelector(".list-container--bookmarks");t&&t.parentNode.replaceChild(this.el,t)}},openRoom(e){e.preventDefault();const t=e.target.textContent,n=e.target.getAttribute("data-room-jid"),r={name:t||Nd.unescapeNode(Nd.getNodeFromJid(n))||n};qc.rooms.open(n,r,!0)},removeBookmark:Lc.removeBookmarkViaEvent,toggleBookmarksList(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");Id.hasClass("fa-caret-down",t)?(Id.slideIn(this.el.querySelector(".bookmarks")),this.list_model.save({"toggle-state":Lc.CLOSED}),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")):(t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down"),Id.slideOut(this.el.querySelector(".bookmarks")),this.list_model.save({"toggle-state":Lc.OPENED}))}});qc.listen.on("getHeadingButtons",(e,t)=>{if(Lc.allow_bookmarks&&e.model.get("type")===Lc.CHATROOMS_TYPE){const n=e.model.get("bookmarked"),r={i18n_title:dd(n?"Unbookmark this groupchat":"Bookmark this groupchat"),i18n_text:dd(n?"Unbookmark":"Bookmark"),handler:t=>e.toggleBookmark(t),a_class:"toggle-bookmark",icon_class:"fa-bookmark",name:"bookmark"},i=t.map(e=>e.name).indexOf("details"),s=Lc.checkBookmarksSupport().then(e=>e?r:"");return i>-1?[...t.slice(0,i),s,...t.slice(i)]:[s,...t]}return t}),qc.listen.on("bookmarksInitialized",(async function(){await qc.waitUntil("roomsPanelRendered"),Lc.bookmarksview=new Lc.BookmarksView({model:Lc.bookmarks}),qc.trigger("bookmarkViewsInitialized")})),qc.listen.on("chatRoomViewInitialized",e=>e.setBookmarkState())}});var Md=n(27),Rd=n.n(Md);function Dd(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<div class="alert ','" role="alert"><p>',"</p></div>"]);return Dd=function(){return e},e}function Pd(){const e=zd(['<button type="button" class="close" data-dismiss="modal" aria-label="','"><span aria-hidden="true">×</span></button>']);return Pd=function(){return e},e}function Ld(){const e=zd(['<button type="button" class="btn btn-secondary" data-dismiss="modal">',"</button>"]);return Ld=function(){return e},e}function zd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const Fd=Ga(Ld(),dd("Close")),Bd=Ga(Pd(),dd("Close"));function qd(){const e=Ud(["<p>","</p>"]);return qd=function(){return e},e}function Hd(){const e=Ud(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header ','">\n              <h5 class="modal-title">',"</h5>\n              ",'\n            </div>\n            <div class="modal-body">\n              <span class="modal-alert"></span>\n              ',"\n            </div>\n        </div>\n    </div>\n"]);return Hd=function(){return e},e}function Ud(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function $d(){const e=Gd(["<p>","</p>"]);return $d=function(){return e},e}function Wd(){const e=Gd(['\n    <div class="modal-dialog" role="document">\n      <div class="modal-content">\n        <div class="modal-header ','">\n          <h5 class="modal-title">','</h5>\n          <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n            <span aria-hidden="true">×</span>\n          </button>\n        </div>\n        <div class="modal-body">\n            <span class="modal-alert"></span>\n            <form class="converse-form converse-form--modal confirm" action="#">\n              <div class="form-group">\n                  ',"\n              </div>\n              ",'\n              <div class="form-group">\n                  <button type="submit" class="btn btn-primary">','</button>\n                  <input type="button" class="btn btn-secondary" data-dismiss="modal" value="','"/>\n              </div>\n          </form>\n        </div>\n      </div>\n    </div>\n']);return Wd=function(){return e},e}function Vd(){const e=Gd(['\n    <div class="form-group">\n        <label>\n            ','\n            <input type="text"\n                name="','"\n                class="',' form-control form-control--labeled"\n                ?required="','"\n                placeholder="','" />\n        </label>\n    </div>\n']);return Vd=function(){return e},e}function Gd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Jd=e=>Ga(Wd(),e.level||"",e.title,e.messages.map(e=>Ga($d(),e)),e.fields.map(e=>(e=>Ga(Vd(),e.label||"",e.name,e.challenge_failed?"error":"",e.required,e.placeholder))(e)),dd("OK"),dd("Cancel"));
+const{Strophe:ih}=rl.env,oh=rl.env.utils;rl.plugins.add("converse-bookmark-views",{dependencies:["converse-chatboxes","converse-muc","converse-muc-views"],initialize(){Vc.settings.extend({hide_open_bookmarks:!0}),Object.assign(Uc,{removeBookmarkViaEvent(e){e.preventDefault();const t=e.target.getAttribute("data-bookmark-name"),n=e.target.getAttribute("data-room-jid");confirm(zd('Are you sure you want to remove the bookmark "%1$s"?',t))&&rh(Uc.bookmarks.where({jid:n}),qo.prototype.destroy)},addBookmarkViaEvent(e){e.preventDefault();const t=e.target.getAttribute("data-room-jid");Vc.rooms.open(t,{bring_to_foreground:!0}),Uc.chatboxviews.get(t).renderBookmarkForm()}});const e={setBookmarkState(){if(void 0!==Uc.bookmarks){Uc.bookmarks.where({jid:this.model.get("jid")}).length?this.model.save("bookmarked",!0):this.model.save("bookmarked",!1)}},renderBookmarkForm(){if(this.hideChatRoomContents(),!this.bookmark_form){this.bookmark_form=new Uc.MUCBookmarkForm({model:this.model,chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.bookmark_form.el)}oh.showElement(this.bookmark_form.el)},toggleBookmark(e){null==e||e.preventDefault();const t=Uc.bookmarks.where({jid:this.model.get("jid")});t.length?t.forEach(e=>e.destroy()):this.renderBookmarkForm()}};Object.assign(Uc.ChatRoomView.prototype,e),Uc.MUCBookmarkForm=eh.extend({className:"muc-bookmark-form chatroom-form-container",initialize(e){this.chatroomview=e.chatroomview,this.render()},toHTML(){return(e=>{const t=zd("Bookmark this groupchat"),n=zd("Would you like this groupchat to be automatically joined upon startup?"),r=zd("Cancel"),i=zd("The name for this bookmark:"),o=zd("What should your nickname for this groupchat be?"),s=zd("Save");return Za(Kd(),e.onSubmit,t,i,e.name,o,e.nick||"",n,s,r,e.onCancel)})(Object.assign(this.model.toJSON(),{onCancel:e=>this.closeBookmarkForm(e),onSubmit:e=>this.onBookmarkFormSubmitted(e)}))},onBookmarkFormSubmitted(e){var t,n,r;e.preventDefault(),Uc.bookmarks.createBookmark({jid:this.model.get("jid"),autojoin:(null===(t=e.target.querySelector('input[name="autojoin"]'))||void 0===t?void 0:t.checked)||!1,name:null===(n=e.target.querySelector("input[name=name]"))||void 0===n?void 0:n.value,nick:null===(r=e.target.querySelector("input[name=nick]"))||void 0===r?void 0:r.value}),this.closeBookmarkForm(e)},closeBookmarkForm(e){e.preventDefault(),this.chatroomview.closeForm()}}),Uc.BookmarksView=eh.extend({tagName:"span",initialize(){this.listenTo(this.model,"add",this.render),this.listenTo(this.model,"remove",this.render),this.listenTo(Uc.chatboxes,"add",this.render),this.listenTo(Uc.chatboxes,"remove",this.render);const e="converse.room-bookmarks".concat(Uc.bare_jid,"-list-model");this.list_model=new Uc.BookmarksList({id:e}),this.list_model.browserStorage=Uc.createStore(e);const t=()=>{this.render(),this.insertIntoControlBox()};this.list_model.fetch({success:t,error:t})},toHTML(){return Yd({_converse:Uc,bookmarks:this.model,hidden:this.model.getUnopenedBookmarks().length&&!0,is_hidden:e=>!(!Vc.settings.get("hide_open_bookmarks")||!Uc.chatboxes.get(e.get("jid"))),openRoom:e=>this.openRoom(e),removeBookmark:e=>this.removeBookmark(e),toggleBookmarksList:e=>this.toggleBookmarksList(e),toggle_state:this.list_model.get("toggle-state")})},insertIntoControlBox(){const e=Uc.chatboxviews.get("controlbox");if(void 0!==e&&!oh.rootContains(Uc.root,this.el)){const t=e.el.querySelector(".list-container--bookmarks");t&&t.parentNode.replaceChild(this.el,t)}},openRoom(e){e.preventDefault();const t=e.target.textContent,n=e.target.getAttribute("data-room-jid"),r={name:t||ih.unescapeNode(ih.getNodeFromJid(n))||n};Vc.rooms.open(n,r,!0)},removeBookmark:Uc.removeBookmarkViaEvent,toggleBookmarksList(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");oh.hasClass("fa-caret-down",t)?(oh.slideIn(this.el.querySelector(".bookmarks")),this.list_model.save({"toggle-state":Uc.CLOSED}),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")):(t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down"),oh.slideOut(this.el.querySelector(".bookmarks")),this.list_model.save({"toggle-state":Uc.OPENED}))}});Vc.listen.on("getHeadingButtons",(e,t)=>{if(Uc.allow_bookmarks&&e.model.get("type")===Uc.CHATROOMS_TYPE){const n=e.model.get("bookmarked"),r={i18n_title:zd(n?"Unbookmark this groupchat":"Bookmark this groupchat"),i18n_text:zd(n?"Unbookmark":"Bookmark"),handler:t=>e.toggleBookmark(t),a_class:"toggle-bookmark",icon_class:"fa-bookmark",name:"bookmark"},i=t.map(e=>e.name).indexOf("details"),o=Uc.checkBookmarksSupport().then(e=>e?r:"");return i>-1?[...t.slice(0,i),o,...t.slice(i)]:[o,...t]}return t}),Vc.listen.on("bookmarksInitialized",(async function(){await Vc.waitUntil("roomsPanelRendered"),Uc.bookmarksview=new Uc.BookmarksView({model:Uc.bookmarks}),Vc.trigger("bookmarkViewsInitialized")})),Vc.listen.on("chatRoomViewInitialized",e=>e.setBookmarkState())}});var sh=n(35),ah=n.n(sh);function ch(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <audio controls src="','"></audio>\n    <a target="_blank" rel="noopener" href="','">',"</a>\n"]);return ch=function(){return e},e}function lh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<a target="_blank" rel="noopener" href="','">',"</a>"]);return lh=function(){return e},e}var uh=e=>Za(lh(),e.url,e.label_download),dh=n(170),hh=n.n(dh),fh=n(171),ph=n.n(fh),gh=n(64),mh=n.n(gh),vh=n(172),_h=n.n(vh),bh=n(173),yh=n.n(bh),wh=n(174),Sh=n.n(wh),xh=n(65),Eh=n.n(xh);function Ah(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<a href="','"\n                class="chat-image__link"\n                target="_blank"\n                rel="noopener"\n            ><img class="chat-image img-thumbnail" src="','" @click='," @error="," @load=","/></a>"]);return Ah=function(){return e},e}const Ch=ka((e,t,n,r)=>i=>{i.setValue(Za(Ah(),t,e,r,(function(){const o=rl.env.utils;o.isURLWithImageExtension(e)?(i.setValue(o.convertUrlToHyperlink(t)),i.commit()):(i.setValue(Ch("".concat(e,".png"),t,n,r)),i.commit())}),n))});function jh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["",""]);return jh=function(){return e},e}var Th=n(175),Oh=n.n(Th);function kh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<video controls preload="metadata" src="','" style="max-height: 50vh"></video>']);return kh=function(){return e},e}function Nh(){const e=Mh(['<a target="_blank" rel="noopener" href="','">',"</a>"]);return Nh=function(){return e},e}function Ih(){const e=Mh(['\n            <a target="_blank"\n               rel="noopener"\n               @click=','\n               href="','">',"</a>"]);return Ih=function(){return e},e}function Mh(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
- * @module converse-modal
- * @copyright The Converse.js contributors
+ * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{sizzle:Xd}=Yc.env,Qd=Yc.env.utils;let Yd;const Kd=jd.extend({className:"modal",events:{"click  .nav-item .nav-link":"switchTab"},initialize(){this.render(),this.el.setAttribute("tabindex","-1"),this.el.setAttribute("role","dialog"),this.el.setAttribute("aria-hidden","true");const e=this.el.querySelector(".modal-title").getAttribute("id");e&&this.el.setAttribute("aria-labelledby",e),this.insertIntoDOM();const t=Rd.a.Modal;this.modal=new t(this.el,{backdrop:!0,keyboard:!0}),this.el.addEventListener("hide.bs.modal",()=>Qd.removeClass("selected",this.trigger_el),!1)},insertIntoDOM(){Yd.chatboxviews.el.querySelector("#converse-modals").insertAdjacentElement("beforeEnd",this.el)},switchTab(e){e.stopPropagation(),e.preventDefault(),Xd(".nav-link.active",this.el).forEach(e=>{Qd.removeClass("active",this.el.querySelector(e.getAttribute("href"))),Qd.removeClass("active",e)}),Qd.addClass("active",e.target),Qd.addClass("active",this.el.querySelector(e.target.getAttribute("href")))},alert(e,t="primary"){const n=this.el.querySelector(".modal-alert");if(null===n)return void Pn.error("Could not find a .modal-alert element in the modal to show an alert message in!");var r;Wa((r={type:"alert-".concat(t),message:e},Ga(Dd(),r.type,r.message)),n);const i=n.firstElementChild;setTimeout(()=>{Qd.addClass("fade-out",i),setTimeout(()=>Qd.removeElement(i),600)},5e3)},show(e){e&&(e.preventDefault(),this.trigger_el=e.target,this.trigger_el.classList.add("selected")),this.modal.show()}}),Zd=Kd.extend({events:{"submit .confirm":"onConfimation"},initialize(){this.confirmation=Qd.getResolveablePromise(),Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.el.addEventListener("closed.bs.modal",()=>this.confirmation.reject(),!1)},toHTML(){return Jd(this.model.toJSON())},afterRender(){this.close_handler_registered||(this.el.addEventListener("closed.bs.modal",()=>{this.confirmation.isResolved||this.confirmation.reject()},!1),this.close_handler_registered=!0)},onConfimation(e){e.preventDefault();const t=new FormData(e.target),n=(this.model.get("fields")||[]).map(e=>{const n=t.get(e.name).trim();return e.value=n,e.challenge&&(e.challenge_failed=n!==e.challenge),e});if(n.filter(e=>e.challenge_failed).length)return this.model.set("fields",n),void this.model.trigger("change");this.confirmation.resolve(n),this.modal.hide()}}),eh=Kd.extend({initialize(){Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render)},toHTML(){return e=Object.assign({__:dd},this.model.toJSON()),Ga(Hd(),e.level,e.title,Bd,e.messages.map(e=>Ga(qd(),e)));var e}});function th(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="modal-dialog fit-content" role="document">\n        <div class="modal-content fit-content">\n            <div class="modal-header">\n                <h4 class="modal-title" id="message-versions-modal-label">','<a target="_blank" rel="noopener" href="','">',"</a></h4>\n                ",'\n            </div>\n            <div class="modal-body fit-content">\n                <img class="chat-image" src="','"/>\n            </div>\n            <div class="modal-footer">',"</div>\n        </div>\n    </div>\n"]);return th=function(){return e},e}Yc.plugins.add("converse-modal",{initialize(){let e;Yd=this._converse,Yd.api.listen.on("disconnect",()=>{const e=document.querySelector("#converse-modals");e&&(e.innerHTML="")}),Object.assign(Yd.api,{async confirm(e,t=[],n=[]){"string"==typeof t&&(t=[t]);const r=new Rs({title:e,messages:t,fields:n,type:"confirm"}),i=new Zd({model:r});let s;i.show();try{s=await i.confirmation}catch(e){s=!1}return i.remove(),s},async prompt(e,t=[],n=""){"string"==typeof t&&(t=[t]);const r=new Rs({title:e,messages:t,fields:[{name:"reason",placeholder:n}],type:"prompt"}),i=new Zd({model:r});let s;i.show();try{var o;s=null===(o=(await i.confirmation).pop())||void 0===o?void 0:o.value}catch(e){s=!1}return i.remove(),s},alert(t,n,r){let i;if("string"==typeof r&&(r=[r]),"error"===t?i="alert-danger":"info"===t?i="alert-info":"warn"===t&&(i="alert-warning"),void 0===e){const t=new Rs({title:n,messages:r,level:i,type:"alert"});e=new eh({model:t})}else e.model.set({title:n,messages:r,level:i});e.show()}})}});var nh=Kd.extend({toHTML(){return e={src:this.src},Ga(th(),dd("Image: "),e.src,e.src,Bd,e.src,Fd);var e}}),rh=n(28),ih=n.n(rh);
+ * @description This is the DOM/HTML utilities module.
+ */const Rh=["http","https","xmpp","mailto"];function Dh(e,t){return{"muc#roomconfig_lang":"language","muc#roomconfig_roomsecret":(null==t?void 0:t.new_password)?"new-password":"current-password"}[e]}const Ph={"text-private":"password","text-single":"text",fixed:"label",boolean:"checkbox",hidden:"hidden","jid-multi":"textarea","list-single":"dropdown","list-multi":"dropdown"};function Lh(e){try{return e instanceof ah.a?e:new ah.a(e)}catch(e){return zn.debug(e),null}}function zh(e,t){const n=Lh(t);if(null===n||!function(e){return"http:"===window.location.protocol||"https:"===window.location.protocol&&"https"===e.protocol().toLowerCase()}(n))return!1;const r=n.filename().toLowerCase();return!!e.filter(e=>r.endsWith(e)).length}function Fh(e){try{return decodeURI(e.filename())}catch(t){return zn.debug(t),e.filename()}}function Bh(e,t){const{__:n}=e;return r={url:t.toString(),label_download:n('Download audio file "%1$s"',Fh(t))},Za(ch(),r.url,r.url,r.label_download);var r}function qh(e){e.preventDefault(),Vc.rooms.open(e.target.href)}function Hh(e,t){e.classList.remove("visible"),M(t)&&t()}Jo.isAudioURL=e=>zh([".ogg",".mp3",".m4a"],e),Jo.isVideoURL=e=>zh([".mp4",".webm"],e),Jo.isURLWithImageExtension=e=>zh([".jpg",".jpeg",".png",".gif",".bmp",".tiff",".svg"],e),Jo.isImageURL=e=>{const t=Vc.settings.get("image_urls_regex");return(null==t?void 0:t.test(e))||Jo.isURLWithImageExtension(e)},Jo.isImageDomainAllowed=e=>{const t=Vc.settings.get("show_images_inline");if(!Array.isArray(t))return!0;try{const n=Lh(e).domain();return t.includes(n)}catch(e){return zn.debug(e),!0}},Jo.getOOBURLMarkup=function(e,t){const n=Lh(t);return null===n?t:Jo.isVideoURL(n)?(r={url:t},Za(kh(),r.url)):Jo.isAudioURL(n)?Bh(e,n):Jo.isImageURL(n)?function(e,t){const{__:n}=e;return uh({url:t.toString(),label_download:n('Download image file "%1$s"',Fh(t))})}(e,n):function(e,t){const{__:n}=e;return uh({url:t.toString(),label_download:n('Download file "%1$s"',Fh(t))})}(e,n);var r},Jo.applyDragResistance=function(e,t){if(void 0===e)return;if(void 0===t)return e;return e!==t&&Math.abs(e-t)<10?t:e},Jo.calculateElementHeight=function(e){return Array.from(e.children).reduce((e,t)=>e+t.offsetHeight,0)},Jo.getNextElement=function(e,t="*"){let n=e.nextElementSibling;for(;null!==n&&!mr.a.matchesSelector(n,t);)n=n.nextElementSibling;return n},Jo.getPreviousElement=function(e,t="*"){let n=e.previousElementSibling;for(;null!==n&&!mr.a.matchesSelector(n,t);)n=n.previousElementSibling;return n},Jo.getFirstChildElement=function(e,t="*"){let n=e.firstElementChild;for(;null!==n&&!mr.a.matchesSelector(n,t);)n=n.nextElementSibling;return n},Jo.getLastChildElement=function(e,t="*"){let n=e.lastElementChild;for(;null!==n&&!mr.a.matchesSelector(n,t);)n=n.previousElementSibling;return n},Jo.hasClass=function(e,t){return t instanceof Element&&t.classList.contains(e)},Jo.toggleClass=function(e,t){Jo.hasClass(e,t)?Jo.removeClass(e,t):Jo.addClass(e,t)},Jo.addClass=function(e,t){return t instanceof Element&&t.classList.add(e),t},Jo.removeClass=function(e,t){return t instanceof Element&&t.classList.remove(e),t},Jo.removeElement=function(e){return e instanceof Element&&e.parentNode&&e.parentNode.removeChild(e),e},Jo.getElementFromTemplateResult=function(e){const t=document.createElement("div");return Ya(e,t),t.firstElementChild},Jo.showElement=e=>{Jo.removeClass("collapsed",e),Jo.removeClass("hidden",e)},Jo.hideElement=function(e){return e instanceof Element&&e.classList.add("hidden"),e},Jo.ancestor=function(e,t){let n=e;for(;null!==n&&!mr.a.matchesSelector(n,t);)n=n.parentElement;return n},Jo.nextUntil=function(e,t){const n=[];let r=e.nextElementSibling;for(;null!==r&&!r.matches(t);)n.push(r),r=r.nextElementSibling;return n},Jo.unescapeHTML=function(e){var t=document.createElement("div");return t.innerHTML=e,t.innerText},Jo.escapeHTML=function(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},Jo.convertToImageTag=function(e,t,n){return r={url:e,onClick:n,onLoad:t},Za(jh(),Ch(r.url,r.url,r.onLoad,r.onClick));var r},Jo.convertURIoHyperlink=function(e,t){let n=e.normalize()._string;const r=e._parts.urn?n:e.readable(),i=t||r;return e._parts.protocol||n.startsWith("http://")||n.startsWith("https://")||(n="http://"+n),"xmpp"===e._parts.protocol&&"join"===e._parts.query?Za(Ih(),qh,n,i):Za(Nh(),n,i)},Jo.convertUrlToHyperlink=function(e){const t=RegExp("^w{3}.","ig").test(e)?"http://".concat(e):e,n=Lh(e);return null===n||!function(e){try{return!!new URL(e)}catch(e){return!1}}(t)||!function(e,t=Rh){return!!t.includes(e)}(n._parts.protocol)&&n._parts.protocol?e:this.convertURIoHyperlink(n,e)},Jo.filterQueryParamsFromURL=function(e){const t=Vc.settings.get("filter_url_query_params");return t?Lh(e).removeQuery(t).toString():e},Jo.addHyperlinks=function(e){const t=[],n={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi};try{ah.a.withinString(e,(e,n,r)=>(t.push({url:e,start:n,end:r}),e),n)}catch(t){return zn.debug(t),[e]}let r=[e];return t.length?t.sort((e,t)=>t.start-e.start).forEach(e=>{const t=r.shift(),n=t.slice(e.start,e.end);r=[t.slice(0,e.start),Jo.convertUrlToHyperlink(n),t.slice(e.end),...r]}):r=[e],r},Jo.httpToGeoUri=function(e,t){return e.replace(t.api.settings.get("geouri_regex"),"geo:$1,$2")},Jo.slideInAllElements=function(e,t=300){return Promise.all(Array.from(e).map(e=>Jo.slideIn(e,t)))},Jo.slideToggleElement=function(e,t){return Jo.hasClass("collapsed",e)||Jo.hasClass("hidden",e)?Jo.slideOut(e,t):Jo.slideIn(e,t)},Jo.slideOut=function(e,t=200){return new Promise((n,r)=>{if(!e){const e="An element needs to be passed in to slideOut";return zn.warn(e),void r(new Error(e))}const i=e.getAttribute("data-slider-marker");i&&(e.removeAttribute("data-slider-marker"),window.cancelAnimationFrame(i));const o=Jo.calculateElementHeight(e);if(window.converse_disable_effects)return e.style.height=o+"px",function(e){e.removeAttribute("data-slider-marker"),e.classList.remove("collapsed"),e.style.overflow="",e.style.height=""}(e),void n();if(!Jo.hasClass("collapsed",e)&&!Jo.hasClass("hidden",e))return void n();const s=t/17;let a=0;e.style.height="0",e.style.overflow="hidden",e.classList.remove("hidden"),e.classList.remove("collapsed"),e.setAttribute("data-slider-marker",window.requestAnimationFrame((function t(){a+=o/s,a<o?(e.style.height=a+"px",e.setAttribute("data-slider-marker",window.requestAnimationFrame(t))):(e.removeAttribute("data-slider-marker"),e.style.height=Jo.calculateElementHeight(e)+"px",e.style.overflow="",e.style.height="",n())})))})},Jo.slideIn=function(e,t=200){return new Promise((n,r)=>{if(!e){const e="An element needs to be passed in to slideIn";return zn.warn(e),r(new Error(e))}if(Jo.hasClass("collapsed",e))return n(e);if(window.converse_disable_effects)return e.classList.add("collapsed"),e.style.height="",n(e);const i=e.getAttribute("data-slider-marker");i&&(e.removeAttribute("data-slider-marker"),window.cancelAnimationFrame(i));const o=e.offsetHeight,s=t/17;let a=o;e.style.overflow="hidden",e.setAttribute("data-slider-marker",window.requestAnimationFrame((function t(){a-=o/s,a>0?(e.style.height=a+"px",e.setAttribute("data-slider-marker",window.requestAnimationFrame(t))):(e.removeAttribute("data-slider-marker"),e.classList.add("collapsed"),e.style.height="",n(e))})))})},Jo.isInDOM=function(e){return document.querySelector("body").contains(e)},Jo.isVisible=function(e){return null!==e&&(!Jo.hasClass("hidden",e)&&(e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0))},Jo.fadeIn=function(e,t){if(e||zn.warn("An element needs to be passed in to fadeIn"),window.converse_disable_effects)return e.classList.remove("hidden"),Hh(e,t);Jo.hasClass("hidden",e)?(e.classList.add("visible"),e.classList.remove("hidden"),e.addEventListener("webkitAnimationEnd",()=>Hh(e,t)),e.addEventListener("animationend",()=>Hh(e,t)),e.addEventListener("oanimationend",()=>Hh(e,t))):Hh(e,t)},Jo.xForm2webForm=function(e,t,n){if("list-single"===e.getAttribute("type")||"list-multi"===e.getAttribute("type")){const t=Jo.queryChildren(e,"value").map(e=>null==e?void 0:e.textContent),n=Jo.queryChildren(e,"option").map(n=>{var r;const i=null===(r=n.querySelector("value"))||void 0===r?void 0:r.textContent;return Oh()({value:i,label:n.getAttribute("label"),selected:t.includes(i),required:!!e.querySelector("required")})});return _h()({id:Jo.getUniqueId(),name:e.getAttribute("var"),label:e.getAttribute("label"),options:n.join(""),multiple:"list-multi"===e.getAttribute("type"),required:!!e.querySelector("required")})}if("fixed"===e.getAttribute("type")){var r;return'<p class="form-help">'+(null===(r=e.querySelector("value"))||void 0===r?void 0:r.textContent)+"</p>"}var i,o,s;if("jid-multi"===e.getAttribute("type"))return yh()({name:e.getAttribute("var"),label:e.getAttribute("label")||"",value:null===(i=e.querySelector("value"))||void 0===i?void 0:i.textContent,required:!!e.querySelector("required")});if("boolean"===e.getAttribute("type")){var a;const t=null===(a=e.querySelector("value"))||void 0===a?void 0:a.textContent;return ph()({id:Jo.getUniqueId(),name:e.getAttribute("var"),label:e.getAttribute("label")||"",checked:"1"===t||"true"===t?'checked="1"':"",required:!!e.querySelector("required")})}if("url"===e.getAttribute("var"))return Sh()({label:e.getAttribute("label")||"",value:null===(o=e.querySelector("value"))||void 0===o?void 0:o.textContent});if("username"===e.getAttribute("var"))return Eh()({domain:" @"+n.domain,name:e.getAttribute("var"),type:Ph[e.getAttribute("type")],label:e.getAttribute("label")||"",value:null===(s=e.querySelector("value"))||void 0===s?void 0:s.textContent,required:!!e.querySelector("required")});if("ocr"===e.getAttribute("var")){const n=e.querySelector("uri"),r=mr()('data[cid="'+n.textContent.replace(/^cid:/,"")+'"]',t)[0];return hh()({label:e.getAttribute("label"),name:e.getAttribute("var"),data:null==r?void 0:r.textContent,type:n.getAttribute("type"),required:!!e.querySelector("required")})}{var c;const t=e.getAttribute("var");return mh()({id:Jo.getUniqueId(),label:e.getAttribute("label")||"",name:t,fixed_username:null==n?void 0:n.fixed_username,autocomplete:Dh(t,n),placeholder:null,required:!!e.querySelector("required"),type:Ph[e.getAttribute("type")],value:null===(c=e.querySelector("value"))||void 0===c?void 0:c.textContent})}};var Uh=Jo;const{keycodes:$h}=rl;function Wh(e){let t=0;do{isNaN(e.offsetTop)||(t+=e.offsetTop)}while(e=e.offsetParent);return t}function Gh(e){let t=0;do{isNaN(e.offsetLeft)||(t+=e.offsetLeft)}while(e=e.offsetParent);return t}class Vh{static get DIRECTION(){return{down:"down",end:"end",home:"home",left:"left",right:"right",up:"up"}}static get DEFAULTS(){return{home:["".concat($h.SHIFT,"+").concat($h.UP_ARROW)],end:["".concat($h.SHIFT,"+").concat($h.DOWN_ARROW)],up:[$h.UP_ARROW],down:[$h.DOWN_ARROW],left:[$h.LEFT_ARROW,"".concat($h.SHIFT,"+").concat($h.TAB)],right:[$h.RIGHT_ARROW,$h.TAB],getSelector:null,jump_to_picked:null,jump_to_picked_direction:null,jump_to_picked_selector:"picked",onSelected:null,selected:"selected",selector:"li"}}static getClosestElement(e,t){return e.reduce((e,n)=>{const r=t(n);return r<e.distance?{distance:r,element:n}:e},{distance:1/0}).element}constructor(e,t){this.doc=window.document,this.container=e,this.scroll_container=t.scroll_container||e,this.options=Object.assign({},Vh.DEFAULTS,t),this.init()}init(){this.selected=null,this.keydownHandler=null,this.elements={},this.keys={},this.options.down.forEach(e=>this.keys[e]=Vh.DIRECTION.down),this.options.end.forEach(e=>this.keys[e]=Vh.DIRECTION.end),this.options.home.forEach(e=>this.keys[e]=Vh.DIRECTION.home),this.options.left.forEach(e=>this.keys[e]=Vh.DIRECTION.left),this.options.right.forEach(e=>this.keys[e]=Vh.DIRECTION.right),this.options.up.forEach(e=>this.keys[e]=Vh.DIRECTION.up)}enable(){this.getElements(),this.keydownHandler=e=>this.handleKeydown(e),this.doc.addEventListener("keydown",this.keydownHandler),this.enabled=!0}disable(){this.keydownHandler&&this.doc.removeEventListener("keydown",this.keydownHandler),this.unselect(),this.elements={},this.enabled=!1}destroy(){this.disable(),this.container.domNavigator&&delete this.container.domNavigator}getNextElement(e){let t;if(e===Vh.DIRECTION.home)t=this.getElements(e)[0];else if(e===Vh.DIRECTION.end)t=Array.from(this.getElements(e)).pop();else if(this.selected)if(e===Vh.DIRECTION.right){const n=this.getElements(e);t=n.slice(n.indexOf(this.selected))[1]}else if(e==Vh.DIRECTION.left){const n=this.getElements(e);t=n.slice(0,n.indexOf(this.selected)).pop()||this.selected}else if(e==Vh.DIRECTION.down){const e=this.selected.offsetLeft,n=this.selected.offsetTop+this.selected.offsetHeight,r=this.elementsAfter(0,n),i=t=>Math.abs(t.offsetLeft-e)+Math.abs(t.offsetTop-n);t=Vh.getClosestElement(r,i)}else{if(e!=Vh.DIRECTION.up)throw new Error("getNextElement: invalid direction value");{const e=this.selected.offsetLeft,n=this.selected.offsetTop-1,r=this.elementsBefore(1/0,n),i=t=>Math.abs(e-t.offsetLeft)+Math.abs(n-t.offsetTop);t=Vh.getClosestElement(r,i)}}else t=e===Vh.DIRECTION.right||e===Vh.DIRECTION.down?this.getElements(e)[1]:this.getElements(e)[0];return this.options.jump_to_picked&&t&&t.matches(this.options.jump_to_picked)&&e===this.options.jump_to_picked_direction&&(t=this.container.querySelector(this.options.jump_to_picked_selector)||t),t}select(e,t){e&&e!==this.selected&&(this.unselect(),t&&this.scrollTo(e,t),e.matches("input")?e.focus():Uh.addClass(this.options.selected,e),this.selected=e,this.options.onSelected&&this.options.onSelected(e))}unselect(){this.selected&&(Uh.removeClass(this.options.selected,this.selected),delete this.selected)}scrollTo(e,t){if(this.inScrollContainerViewport(e)){if(!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.innerHeight&&t.right<=window.innerWidth}(e))switch(t){case Vh.DIRECTION.left:document.body.scrollLeft=Gh(e)-document.body.offsetLeft;break;case Vh.DIRECTION.up:document.body.scrollTop=Wh(e)-document.body.offsetTop;break;case Vh.DIRECTION.right:document.body.scrollLeft=Gh(e)-document.body.offsetLeft-(document.documentElement.clientWidth-e.offsetWidth);break;case Vh.DIRECTION.down:document.body.scrollTop=Wh(e)-document.body.offsetTop-(document.documentElement.clientHeight-e.offsetHeight)}}else{const n=this.scroll_container;if(!n.contains(e))return;switch(t){case Vh.DIRECTION.left:n.scrollLeft=e.offsetLeft-n.offsetLeft,n.scrollTop=e.offsetTop-n.offsetTop;break;case Vh.DIRECTION.up:n.scrollTop=e.offsetTop-n.offsetTop;break;case Vh.DIRECTION.right:n.scrollLeft=e.offsetLeft-n.offsetLeft-(n.offsetWidth-e.offsetWidth),n.scrollTop=e.offsetTop-n.offsetTop-(n.offsetHeight-e.offsetHeight);break;case Vh.DIRECTION.down:n.scrollTop=e.offsetTop-n.offsetTop-(n.offsetHeight-e.offsetHeight)}}}inScrollContainerViewport(e){const t=this.scroll_container;return!(e.offsetLeft-t.scrollLeft<t.offsetLeft)&&(!(e.offsetTop-t.scrollTop<t.offsetTop)&&(!(e.offsetLeft+e.offsetWidth-t.scrollLeft>t.offsetLeft+t.offsetWidth)&&!(e.offsetTop+e.offsetHeight-t.scrollTop>t.offsetTop+t.offsetHeight)))}getElements(e){const t=this.options.getSelector?this.options.getSelector(e):this.options.selector;return this.elements[t]||(this.elements[t]=Array.from(this.container.querySelectorAll(t))),this.elements[t]}elementsAfter(e,t){return this.getElements(Vh.DIRECTION.down).filter(n=>n.offsetLeft>=e&&n.offsetTop>=t)}elementsBefore(e,t){return this.getElements(Vh.DIRECTION.up).filter(n=>n.offsetLeft<=e&&n.offsetTop<=t)}handleKeydown(e){const t=$h,n=e.shiftKey?this.keys["".concat(t.SHIFT,"+").concat(e.which)]:this.keys[e.which];if(n){e.preventDefault(),e.stopPropagation();const t=this.getNextElement(n,e);this.select(t,n)}}}var Jh=Vh;
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -404,13 +413,13 @@ const{Strophe:Nd}=Yc.env,Id=Yc.env.utils;Yc.plugins.add("converse-bookmark-views
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
- */
-const sh=new WeakMap,oh=Ea((...e)=>t=>{let n=sh.get(t);void 0===n&&(n={lastRenderedIndex:2147483647,values:[]},sh.set(t,n));const r=n.values;let i=r.length;n.values=e;for(let s=0;s<e.length&&!(s>n.lastRenderedIndex);s++){const o=e[s];if(Na(o)||"function"!=typeof o.then){t.setValue(o),n.lastRenderedIndex=s;break}s<i&&o===r[s]||(n.lastRenderedIndex=2147483647,i=0,Promise.resolve(o).then(e=>{const r=n.values.indexOf(o);r>-1&&r<n.lastRenderedIndex&&(n.lastRenderedIndex=r,t.setValue(e),t.commit())}))}});function ah(){const e=dh(["",""]);return ah=function(){return e},e}function ch(){const e=dh(["",""]);return ch=function(){return e},e}function lh(){const e=dh(['<span class="mention">',"</span>"]);return lh=function(){return e},e}function uh(){const e=dh(['<span class="mention mention--self badge badge-info">',"</span>"]);return uh=function(){return e},e}function dh(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const hh=Yc.env.utils;class fh extends String{constructor(e){super(e),this.references=[]}addTemplateResult(e,t,n){this.references.push({begin:e,end:t,template:n})}isMeCommand(){const e=this.toString();return!!e&&e.startsWith("/me ")}static replaceText(e){return Cl(e.replace(/\n\n+/g,"\n\n"))}marshall(){let e=[this.toString()];this.references.sort((e,t)=>t.begin-e.begin).forEach(t=>{const n=e.shift();e=[n.slice(0,t.begin),t.template,n.slice(t.end),...e]}),this.isMeCommand()&&(e[0]=e[0].substring(4));return e.reduce((e,t)=>"string"==typeof t?[...e,fh.replaceText(t)]:[...e,t],[])}}function ph(e,t){var n;const r=t.collection.chatbox.get("nick");null===(n=t.get("references"))||void 0===n||n.forEach(t=>{const n=e.slice(t.begin,t.end);var i;n===r?e.addTemplateResult(t.begin,t.end,(i={mention:n},Ga(uh(),i.mention))):e.addTemplateResult(t.begin,t.end,(e=>Ga(lh(),e.mention))({mention:n}))})}class gh{constructor(e){var t;this.model=e.model,this.component=e,this.chatview=null===(t=hh.ancestor(this.component,"converse-chat-message"))||void 0===t?void 0:t.chatview,this.was_scrolled_up=this.chatview.model.get("scrolled"),this.text=this.component.model.getMessageText()}scrollDownOnImageLoad(){this.was_scrolled_up||this.chatview.scrollDown()}async transform(){const e=new fh(this.text);return await qc.trigger("beforeMessageBodyTransformed",this.model,e,{Synchronous:!0}),function(e,t,n){const r=[];try{const t={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi};ih.a.withinString(e,(e,t,n)=>(r.push({url:e,start:t,end:n}),e),t)}catch(e){return void Pn.debug(e)}const i=qc.settings.get("show_images_inline");r.forEach(r=>{const s=e.slice(r.start,r.end),o=hh.filterQueryParamsFromURL(s);e.addTemplateResult(r.start,r.end,i&&hh.isImageURL(s)&&hh.isImageDomainAllowed(s)?hh.convertToImageTag(o,t,n):hh.convertUrlToHyperlink(o))})}(e,()=>this.scrollDownOnImageLoad(),e=>this.component.showImageModal(e)),function(e){const t=/geo:([\-0-9.]+),([\-0-9.]+)(?:,([\-0-9.]+))?(?:\?(.*))?/g,n=e.matchAll(t);for(const r of n)e.addTemplateResult(r.index,r.index+r.input.length,hh.convertUrlToHyperlink(r.input.replace(t,Lc.geouri_replacement)))}(e),await async function(e){await qc.emojis.initialize(),[...Tl(e.toString()),...Ol(e.toString())].forEach(t=>{e.addTemplateResult(t.begin,t.end,jl(t,{add_title_wrapper:!0}))})}(e),ph(e,this.model),await qc.trigger("afterMessageBodyTransformed",this.model,e,{Synchronous:!0}),e.marshall()}render(){return Ga(ch(),oh(this.transform(),Ga(ah(),this.text)))}}const mh=Ea(e=>t=>{var n;const r=new gh(e);t.setValue(r.render());const i=e.model;null===(n=i.collection)||void 0===n||n.trigger("rendered",i)});function vh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <audio controls src="','"></audio>\n    <a target="_blank" rel="noopener" href="','">',"</a>\n"]);return vh=function(){return e},e}qc.elements.define("converse-chat-message-body",class extends uc{static get properties(){return{model:{type:Object},is_me_message:{type:Boolean},text:{type:String}}}showImageModal(e){e.preventDefault(),void 0===this.image_modal&&(this.image_modal=new nh),this.image_modal.src=e.target.src,this.image_modal.render(),this.image_modal.show(e)}render(){return mh(this)}});function _h(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<a target="_blank" rel="noopener" href="','">',"</a>"]);return _h=function(){return e},e}var bh=e=>Ga(_h(),e.url,e.label_download),yh=n(129),wh=n.n(yh),Sh=n(130),xh=n.n(Sh),Eh=n(50),Ah=n.n(Eh),Ch=n(131),jh=n.n(Ch),Th=n(132),Oh=n.n(Th),kh=n(133),Nh=n.n(kh),Ih=n(51),Mh=n.n(Ih);function Rh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<a href="','"\n                class="chat-image__link"\n                target="_blank"\n                rel="noopener"\n            ><img class="chat-image img-thumbnail" src="','" @click='," @error="," @load=","/></a>"]);return Rh=function(){return e},e}const Dh=Ea((e,t,n,r)=>i=>{i.setValue(Ga(Rh(),t,e,r,(function(){const s=Yc.env.utils;s.isURLWithImageExtension(e)?(i.setValue(s.convertUrlToHyperlink(t)),i.commit()):(i.setValue(Dh("".concat(e,".png"),t,n,r)),i.commit())}),n))});function Ph(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["",""]);return Ph=function(){return e},e}var Lh=n(134),zh=n.n(Lh);function Fh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<video controls preload="metadata" src="','" style="max-height: 50vh"></video>']);return Fh=function(){return e},e}function Bh(){const e=Hh(['<a target="_blank" rel="noopener" href="','">',"</a>"]);return Bh=function(){return e},e}function qh(){const e=Hh(['\n            <a target="_blank"\n               rel="noopener"\n               @click=','\n               href="','">',"</a>"]);return qh=function(){return e},e}function Hh(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
+ */const Xh=new WeakMap,Qh=ka((...e)=>t=>{let n=Xh.get(t);void 0===n&&(n={lastRenderedIndex:2147483647,values:[]},Xh.set(t,n));const r=n.values;let i=r.length;n.values=e;for(let o=0;o<e.length&&!(o>n.lastRenderedIndex);o++){const s=e[o];if(La(s)||"function"!=typeof s.then){t.setValue(s),n.lastRenderedIndex=o;break}o<i&&s===r[o]||(n.lastRenderedIndex=2147483647,i=0,Promise.resolve(s).then(e=>{const r=n.values.indexOf(s);r>-1&&r<n.lastRenderedIndex&&(n.lastRenderedIndex=r,t.setValue(e),t.commit())}))}});function Yh(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n            <div class="dropleft">\n                <button type="button" class="btn btn--transparent btn--standalone" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n                    <i class="',' only-icon"></i>\n                </button>\n                <div class="dropdown-menu">\n                    ',"\n                </div>\n            </div>\n        "]);return Yh=function(){return e},e}const Kh=rl.env.utils;class Zh extends mc{firstUpdated(){this.menu=this.querySelector(".dropdown-menu"),this.dropdown=this.firstElementChild,this.button=this.dropdown.querySelector("button"),this.dropdown.addEventListener("click",e=>this.toggleMenu(e)),this.dropdown.addEventListener("keyup",e=>this.handleKeyUp(e)),document.addEventListener("click",e=>!this.contains(e.composedPath()[0])&&this.hideMenu(e))}hideMenu(){var e,t;Kh.removeClass("show",this.menu),null===(e=this.button)||void 0===e||e.setAttribute("aria-expanded",!1),null===(t=this.button)||void 0===t||t.blur()}showMenu(){Kh.addClass("show",this.menu),this.button.setAttribute("aria-expanded",!0)}toggleMenu(e){e.preventDefault(),Kh.hasClass("show",this.menu)?this.hideMenu():this.showMenu()}handleKeyUp(e){e.keyCode===rl.keycodes.ESCAPE?this.hideMenu():e.keyCode===rl.keycodes.DOWN_ARROW&&this.navigator&&!this.navigator.enabled&&this.enableArrowNavigation(e)}}function ef(){const e=rf(['<converse-dropdown class="chat-msg__actions" .items=',"></converse-dropdown>"]);return ef=function(){return e},e}function tf(){const e=rf(['\n            <button class="chat-msg__action ','" @click=','>\n                <converse-icon class="','"\n                    path-prefix="','"\n                    color="var(--text-color-lighten-15-percent)"\n                    size="1em"></converse-icon>\n                ',"\n            </button>\n        "]);return tf=function(){return e},e}function nf(){const e=rf(["",""]);return nf=function(){return e},e}function rf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-dropdown",class extends Zh{static get properties(){return{icon_classes:{type:String},items:{type:Array}}}render(){const e=this.icon_classes||"fa fa-bars";return Za(Yh(),e,this.items.map(e=>Qh(e,"")))}hideMenu(){super.hideMenu(),this.navigator.disable()}firstUpdated(){super.firstUpdated(),this.initArrowNavigation()}initArrowNavigation(){if(!this.navigator){const e={selector:".dropdown-item",onSelected:e=>e.focus()};this.navigator=new Jh(this.menu,e)}}enableArrowNavigation(e){e&&(e.preventDefault(),e.stopPropagation()),this.navigator.enable(),this.navigator.select(this.menu.firstElementChild)}handleKeyUp(e){super.handleKeyUp(e),e.keyCode!==rl.keycodes.DOWN_ARROW||this.navigator.enabled||this.enableArrowNavigation(e)}});class of extends mc{static get properties(){return{chatview:{type:Object},model:{type:Object},editable:{type:Boolean},correcting:{type:Boolean},message_type:{type:String},is_retracted:{type:Boolean}}}render(){return Za(nf(),Qh(this.renderActions(),""))}static getActionsDropdownItem(e){return Za(tf(),e.button_class,e.handler,e.icon_class,Vc.settings.get("assets_path"),e.i18n_text)}onMessageEditButtonClicked(e){e.preventDefault(),this.chatview.onMessageEditButtonClicked(this.model)}onMessageRetractButtonClicked(e){e.preventDefault(),this.chatview.onMessageRetractButtonClicked(this.model)}async getActionButtons(){const e=[];this.editable&&e.push({i18n_text:this.correcting?zd("Cancel Editing"):zd("Edit"),handler:e=>this.onMessageEditButtonClicked(e),button_class:"chat-msg__action-edit",icon_class:"fa fa-pencil-alt",name:"edit"});const t="groupchat"===this.model.get("type")&&await this.model.mayBeModerated();return!this.is_retracted&&(this.model.mayBeRetracted()||t)&&e.push({i18n_text:zd("Retract"),handler:e=>this.onMessageRetractButtonClicked(e),button_class:"chat-msg__action-retract",icon_class:"fas fa-trash-alt",name:"retract"}),Vc.hook("getMessageActionButtons",this,e)}async renderActions(){const e=(await this.getActionButtons()).map(e=>of.getActionsDropdownItem(e));return e.length?Za(ef(),e):""}}Vc.elements.define("converse-message-actions",of);var sf=n(34),af=n.n(sf);function cf(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<div class="alert ','" role="alert"><p>',"</p></div>"]);return cf=function(){return e},e}const{sizzle:lf}=rl.env,uf=rl.env.utils;var df=eh.extend({className:"modal",persistent:!1,events:{"click  .nav-item .nav-link":"switchTab"},initialize(e){if(!this.id)throw new Error("Each modal class must have a unique id attribute");this.render(),Object.assign(this,e),this.el.setAttribute("tabindex","-1"),this.el.setAttribute("role","dialog"),this.el.setAttribute("aria-hidden","true");const t=this.el.querySelector(".modal-title").getAttribute("id");t&&this.el.setAttribute("aria-labelledby",t),this.insertIntoDOM();const n=af.a.Modal;this.modal=new n(this.el,{backdrop:!0,keyboard:!0}),this.el.addEventListener("hide.bs.modal",()=>this.onHide(),!1)},onHide(){uf.removeClass("selected",this.trigger_el),!this.persistent&&Vc.modal.remove(this)},insertIntoDOM(){Uc.chatboxviews.el.querySelector("#converse-modals").insertAdjacentElement("beforeEnd",this.el)},switchTab(e){e.stopPropagation(),e.preventDefault(),lf(".nav-link.active",this.el).forEach(e=>{uf.removeClass("active",this.el.querySelector(e.getAttribute("href"))),uf.removeClass("active",e)}),uf.addClass("active",e.target),uf.addClass("active",this.el.querySelector(e.target.getAttribute("href")))},alert(e,t="primary"){const n=this.el.querySelector(".modal-alert");if(null===n)return void zn.error("Could not find a .modal-alert element in the modal to show an alert message in!");var r;Ya((r={type:"alert-".concat(t),message:e},Za(cf(),r.type,r.message)),n);const i=n.firstElementChild;setTimeout(()=>{uf.addClass("fade-out",i),setTimeout(()=>uf.removeElement(i),600)},5e3)},show(e){e&&(e.preventDefault(),this.trigger_el=e.target,this.trigger_el.classList.add("selected")),this.modal.show()}});function hf(){const e=pf(['<button type="button" class="close" data-dismiss="modal" aria-label="','"><span aria-hidden="true">×</span></button>']);return hf=function(){return e},e}function ff(){const e=pf(['<button type="button" class="btn btn-secondary" data-dismiss="modal">',"</button>"]);return ff=function(){return e},e}function pf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const gf=Za(ff(),zd("Close")),mf=Za(hf(),zd("Close"));function vf(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="modal-dialog fit-content" role="document">\n            <div class="modal-content fit-content">\n                <div class="modal-header">\n                    <h4 class="modal-title" id="message-versions-modal-label">','<a target="_blank" rel="noopener" href="','">',"</a></h4>\n                    ",'\n                </div>\n                <div class="modal-body modal-body--image fit-content">\n                    <img class="chat-image" src="','" @load=','>\n                </div>\n                <div class="modal-footer">',"</div>\n            </div>\n        </div>"]);return vf=function(){return e},e}var _f=df.extend({id:"image-modal",toHTML(){return e={src:this.src,onload:e=>e.target.parentElement.style.height="".concat(e.target.height,"px")},Za(vf(),zd("Image: "),e.src,e.src,mf,e.src,e.onload,gf);var e}});function bf(){const e=wf(["",""]);return bf=function(){return e},e}function yf(){const e=wf(["",""]);return yf=function(){return e},e}function wf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const Sf=ka((e,t,n)=>r=>r.setValue(function(e,t,n){const r=new $f(e,t,n,!1);return Za(yf(),Qh(async function(e){return await e.addTemplates(),e.payload}(r),Za(bf(),r)))}(e,t,n)));function xf(){const e=Of(['<span class="styling-directive">*</span><b>','</b><span class="styling-directive">*</span>']);return xf=function(){return e},e}function Ef(){const e=Of(['<span class="styling-directive">~</span><del>','</del><span class="styling-directive">~</span>']);return Ef=function(){return e},e}function Af(){const e=Of(["<blockquote>","</blockquote>"]);return Af=function(){return e},e}function Cf(){const e=Of(['<div class="styling-directive">```</div><code class="block">','</code><div class="styling-directive">```</div>'],['<div class="styling-directive">\\`\\`\\`</div><code class="block">','</code><div class="styling-directive">\\`\\`\\`</div>']);return Cf=function(){return e},e}function jf(){const e=Of(['<span class="styling-directive">`</span><code>','</code><span class="styling-directive">`</span>'],['<span class="styling-directive">\\`</span><code>','</code><span class="styling-directive">\\`</span>']);return jf=function(){return e},e}function Tf(){const e=Of(['<span class="styling-directive">_</span><i>','</i><span class="styling-directive">_</span>']);return Tf=function(){return e},e}function Of(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- * @description This is the DOM/HTML utilities module.
- */const Uh=["http","https","xmpp","mailto"];function $h(e,t){return{"muc#roomconfig_lang":"language","muc#roomconfig_roomsecret":(null==t?void 0:t.new_password)?"new-password":"current-password"}[e]}const Wh={"text-private":"password","text-single":"text",fixed:"label",boolean:"checkbox",hidden:"hidden","jid-multi":"textarea","list-single":"dropdown","list-multi":"dropdown"};function Vh(e){try{return e instanceof ih.a?e:new ih.a(e)}catch(e){return Pn.debug(e),null}}function Gh(e,t){const n=Vh(t);if(null===n||!function(e){return"http:"===window.location.protocol||"https:"===window.location.protocol&&"https"===e.protocol().toLowerCase()}(n))return!1;const r=n.filename().toLowerCase();return!!e.filter(e=>r.endsWith(e)).length}function Jh(e){try{return decodeURI(e.filename())}catch(t){return Pn.debug(t),e.filename()}}function Xh(e,t){const{__:n}=e;return r={url:t.toString(),label_download:n('Download audio file "%1$s"',Jh(t))},Ga(vh(),r.url,r.url,r.label_download);var r}function Qh(e,t){e.classList.remove("visible"),M(t)&&t()}qs.isAudioURL=e=>Gh([".ogg",".mp3",".m4a"],e),qs.isVideoURL=e=>Gh([".mp4",".webm"],e),qs.isURLWithImageExtension=e=>Gh([".jpg",".jpeg",".png",".gif",".bmp",".tiff",".svg"],e),qs.isImageURL=e=>{const t=qc.settings.get("image_urls_regex");return(null==t?void 0:t.test(e))||qs.isURLWithImageExtension(e)},qs.isImageDomainAllowed=e=>{const t=qc.settings.get("show_images_inline");if(!Array.isArray(t))return!0;try{const n=Vh(e).domain();return t.includes(n)}catch(e){return Pn.debug(e),!0}},qs.getOOBURLMarkup=function(e,t){const n=Vh(t);return null===n?t:qs.isVideoURL(n)?(r={url:t},Ga(Fh(),r.url)):qs.isAudioURL(n)?Xh(e,n):qs.isImageURL(n)?function(e,t){const{__:n}=e;return bh({url:t.toString(),label_download:n('Download image file "%1$s"',Jh(t))})}(e,n):function(e,t){const{__:n}=e;return bh({url:t.toString(),label_download:n('Download file "%1$s"',Jh(t))})}(e,n);var r},qs.applyDragResistance=function(e,t){if(void 0===e)return;if(void 0===t)return e;return e!==t&&Math.abs(e-t)<10?t:e},qs.calculateElementHeight=function(e){return Array.from(e.children).reduce((e,t)=>e+t.offsetHeight,0)},qs.getNextElement=function(e,t="*"){let n=e.nextElementSibling;for(;null!==n&&!ur.a.matchesSelector(n,t);)n=n.nextElementSibling;return n},qs.getPreviousElement=function(e,t="*"){let n=e.previousElementSibling;for(;null!==n&&!ur.a.matchesSelector(n,t);)n=n.previousElementSibling;return n},qs.getFirstChildElement=function(e,t="*"){let n=e.firstElementChild;for(;null!==n&&!ur.a.matchesSelector(n,t);)n=n.nextElementSibling;return n},qs.getLastChildElement=function(e,t="*"){let n=e.lastElementChild;for(;null!==n&&!ur.a.matchesSelector(n,t);)n=n.previousElementSibling;return n},qs.hasClass=function(e,t){return t instanceof Element&&t.classList.contains(e)},qs.toggleClass=function(e,t){qs.hasClass(e,t)?qs.removeClass(e,t):qs.addClass(e,t)},qs.addClass=function(e,t){return t instanceof Element&&t.classList.add(e),t},qs.removeClass=function(e,t){return t instanceof Element&&t.classList.remove(e),t},qs.removeElement=function(e){return e instanceof Element&&e.parentNode&&e.parentNode.removeChild(e),e},qs.getElementFromTemplateResult=function(e){const t=document.createElement("div");return Wa(e,t),t.firstElementChild},qs.showElement=e=>{qs.removeClass("collapsed",e),qs.removeClass("hidden",e)},qs.hideElement=function(e){return e instanceof Element&&e.classList.add("hidden"),e},qs.ancestor=function(e,t){let n=e;for(;null!==n&&!ur.a.matchesSelector(n,t);)n=n.parentElement;return n},qs.nextUntil=function(e,t){const n=[];let r=e.nextElementSibling;for(;null!==r&&!r.matches(t);)n.push(r),r=r.nextElementSibling;return n},qs.unescapeHTML=function(e){var t=document.createElement("div");return t.innerHTML=e,t.innerText},qs.escapeHTML=function(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},qs.convertToImageTag=function(e,t,n){return r={url:e,onClick:n,onLoad:t},Ga(Ph(),Dh(r.url,r.url,r.onLoad,r.onClick));var r},qs.convertURIoHyperlink=function(e,t){let n=e.normalize()._string;const r=e._parts.urn?n:e.readable(),i=t||r;return e._parts.protocol||n.startsWith("http://")||n.startsWith("https://")||(n="http://"+n),"xmpp"===e._parts.protocol&&"join"===e._parts.query?Ga(qh(),e=>qc.rooms.open(e.target.href),n,i):Ga(Bh(),n,i)},qs.convertUrlToHyperlink=function(e){const t=RegExp("^w{3}.","ig").test(e)?"http://".concat(e):e,n=Vh(e);return null===n||!function(e){try{return!!new URL(e)}catch(e){return!1}}(t)||!function(e,t=Uh){return!!t.includes(e)}(n._parts.protocol)&&n._parts.protocol?e:this.convertURIoHyperlink(n,e)},qs.filterQueryParamsFromURL=function(e){const t=qc.settings.get("filter_url_query_params");return t?Vh(e).removeQuery(t).toString():e},qs.addHyperlinks=function(e){const t=[],n={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi};try{ih.a.withinString(e,(e,n,r)=>(t.push({url:e,start:n,end:r}),e),n)}catch(t){return Pn.debug(t),[e]}let r=[e];return t.length?t.sort((e,t)=>t.start-e.start).forEach(e=>{const t=r.shift(),n=t.slice(e.start,e.end);r=[t.slice(0,e.start),qs.convertUrlToHyperlink(n),t.slice(e.end),...r]}):r=[e],r},qs.httpToGeoUri=function(e,t){return e.replace(t.api.settings.get("geouri_regex"),"geo:$1,$2")},qs.slideInAllElements=function(e,t=300){return Promise.all(Array.from(e).map(e=>qs.slideIn(e,t)))},qs.slideToggleElement=function(e,t){return qs.hasClass("collapsed",e)||qs.hasClass("hidden",e)?qs.slideOut(e,t):qs.slideIn(e,t)},qs.slideOut=function(e,t=200){return new Promise((n,r)=>{if(!e){const e="An element needs to be passed in to slideOut";return Pn.warn(e),void r(new Error(e))}const i=e.getAttribute("data-slider-marker");i&&(e.removeAttribute("data-slider-marker"),window.cancelAnimationFrame(i));const s=qs.calculateElementHeight(e);if(window.converse_disable_effects)return e.style.height=s+"px",function(e){e.removeAttribute("data-slider-marker"),e.classList.remove("collapsed"),e.style.overflow="",e.style.height=""}(e),void n();if(!qs.hasClass("collapsed",e)&&!qs.hasClass("hidden",e))return void n();const o=t/17;let a=0;e.style.height="0",e.style.overflow="hidden",e.classList.remove("hidden"),e.classList.remove("collapsed"),e.setAttribute("data-slider-marker",window.requestAnimationFrame((function t(){a+=s/o,a<s?(e.style.height=a+"px",e.setAttribute("data-slider-marker",window.requestAnimationFrame(t))):(e.removeAttribute("data-slider-marker"),e.style.height=qs.calculateElementHeight(e)+"px",e.style.overflow="",e.style.height="",n())})))})},qs.slideIn=function(e,t=200){return new Promise((n,r)=>{if(!e){const e="An element needs to be passed in to slideIn";return Pn.warn(e),r(new Error(e))}if(qs.hasClass("collapsed",e))return n(e);if(window.converse_disable_effects)return e.classList.add("collapsed"),e.style.height="",n(e);const i=e.getAttribute("data-slider-marker");i&&(e.removeAttribute("data-slider-marker"),window.cancelAnimationFrame(i));const s=e.offsetHeight,o=t/17;let a=s;e.style.overflow="hidden",e.setAttribute("data-slider-marker",window.requestAnimationFrame((function t(){a-=s/o,a>0?(e.style.height=a+"px",e.setAttribute("data-slider-marker",window.requestAnimationFrame(t))):(e.removeAttribute("data-slider-marker"),e.classList.add("collapsed"),e.style.height="",n(e))})))})},qs.isInDOM=function(e){return document.querySelector("body").contains(e)},qs.isVisible=function(e){return null!==e&&(!qs.hasClass("hidden",e)&&(e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0))},qs.fadeIn=function(e,t){if(e||Pn.warn("An element needs to be passed in to fadeIn"),window.converse_disable_effects)return e.classList.remove("hidden"),Qh(e,t);qs.hasClass("hidden",e)?(e.classList.add("visible"),e.classList.remove("hidden"),e.addEventListener("webkitAnimationEnd",()=>Qh(e,t)),e.addEventListener("animationend",()=>Qh(e,t)),e.addEventListener("oanimationend",()=>Qh(e,t))):Qh(e,t)},qs.xForm2webForm=function(e,t,n){if("list-single"===e.getAttribute("type")||"list-multi"===e.getAttribute("type")){const t=qs.queryChildren(e,"value").map(e=>null==e?void 0:e.textContent),n=qs.queryChildren(e,"option").map(n=>{var r;const i=null===(r=n.querySelector("value"))||void 0===r?void 0:r.textContent;return zh()({value:i,label:n.getAttribute("label"),selected:t.includes(i),required:!!e.querySelector("required")})});return jh()({id:qs.getUniqueId(),name:e.getAttribute("var"),label:e.getAttribute("label"),options:n.join(""),multiple:"list-multi"===e.getAttribute("type"),required:!!e.querySelector("required")})}if("fixed"===e.getAttribute("type")){var r;return'<p class="form-help">'+(null===(r=e.querySelector("value"))||void 0===r?void 0:r.textContent)+"</p>"}var i,s,o;if("jid-multi"===e.getAttribute("type"))return Oh()({name:e.getAttribute("var"),label:e.getAttribute("label")||"",value:null===(i=e.querySelector("value"))||void 0===i?void 0:i.textContent,required:!!e.querySelector("required")});if("boolean"===e.getAttribute("type")){var a;const t=null===(a=e.querySelector("value"))||void 0===a?void 0:a.textContent;return xh()({id:qs.getUniqueId(),name:e.getAttribute("var"),label:e.getAttribute("label")||"",checked:"1"===t||"true"===t?'checked="1"':"",required:!!e.querySelector("required")})}if("url"===e.getAttribute("var"))return Nh()({label:e.getAttribute("label")||"",value:null===(s=e.querySelector("value"))||void 0===s?void 0:s.textContent});if("username"===e.getAttribute("var"))return Mh()({domain:" @"+n.domain,name:e.getAttribute("var"),type:Wh[e.getAttribute("type")],label:e.getAttribute("label")||"",value:null===(o=e.querySelector("value"))||void 0===o?void 0:o.textContent,required:!!e.querySelector("required")});if("ocr"===e.getAttribute("var")){const n=e.querySelector("uri"),r=ur()('data[cid="'+n.textContent.replace(/^cid:/,"")+'"]',t)[0];return wh()({label:e.getAttribute("label"),name:e.getAttribute("var"),data:null==r?void 0:r.textContent,type:n.getAttribute("type"),required:!!e.querySelector("required")})}{var c;const t=e.getAttribute("var");return Ah()({id:qs.getUniqueId(),label:e.getAttribute("label")||"",name:t,fixed_username:null==n?void 0:n.fixed_username,autocomplete:$h(t,n),placeholder:null,required:!!e.querySelector("required"),type:Wh[e.getAttribute("type")],value:null===(c=e.querySelector("value"))||void 0===c?void 0:c.textContent})}};var Yh=qs;const{keycodes:Kh}=Yc;function Zh(e){let t=0;do{isNaN(e.offsetTop)||(t+=e.offsetTop)}while(e=e.offsetParent);return t}function ef(e){let t=0;do{isNaN(e.offsetLeft)||(t+=e.offsetLeft)}while(e=e.offsetParent);return t}class tf{static get DIRECTION(){return{down:"down",end:"end",home:"home",left:"left",right:"right",up:"up"}}static get DEFAULTS(){return{home:["".concat(Kh.SHIFT,"+").concat(Kh.UP_ARROW)],end:["".concat(Kh.SHIFT,"+").concat(Kh.DOWN_ARROW)],up:[Kh.UP_ARROW],down:[Kh.DOWN_ARROW],left:[Kh.LEFT_ARROW,"".concat(Kh.SHIFT,"+").concat(Kh.TAB)],right:[Kh.RIGHT_ARROW,Kh.TAB],getSelector:null,jump_to_picked:null,jump_to_picked_direction:null,jump_to_picked_selector:"picked",onSelected:null,selected:"selected",selector:"li"}}static getClosestElement(e,t){return e.reduce((e,n)=>{const r=t(n);return r<e.distance?{distance:r,element:n}:e},{distance:1/0}).element}constructor(e,t){this.doc=window.document,this.container=e,this.scroll_container=t.scroll_container||e,this.options=Object.assign({},tf.DEFAULTS,t),this.init()}init(){this.selected=null,this.keydownHandler=null,this.elements={},this.keys={},this.options.down.forEach(e=>this.keys[e]=tf.DIRECTION.down),this.options.end.forEach(e=>this.keys[e]=tf.DIRECTION.end),this.options.home.forEach(e=>this.keys[e]=tf.DIRECTION.home),this.options.left.forEach(e=>this.keys[e]=tf.DIRECTION.left),this.options.right.forEach(e=>this.keys[e]=tf.DIRECTION.right),this.options.up.forEach(e=>this.keys[e]=tf.DIRECTION.up)}enable(){this.getElements(),this.keydownHandler=e=>this.handleKeydown(e),this.doc.addEventListener("keydown",this.keydownHandler),this.enabled=!0}disable(){this.keydownHandler&&this.doc.removeEventListener("keydown",this.keydownHandler),this.unselect(),this.elements={},this.enabled=!1}destroy(){this.disable(),this.container.domNavigator&&delete this.container.domNavigator}getNextElement(e){let t;if(e===tf.DIRECTION.home)t=this.getElements(e)[0];else if(e===tf.DIRECTION.end)t=Array.from(this.getElements(e)).pop();else if(this.selected)if(e===tf.DIRECTION.right){const n=this.getElements(e);t=n.slice(n.indexOf(this.selected))[1]}else if(e==tf.DIRECTION.left){const n=this.getElements(e);t=n.slice(0,n.indexOf(this.selected)).pop()||this.selected}else if(e==tf.DIRECTION.down){const e=this.selected.offsetLeft,n=this.selected.offsetTop+this.selected.offsetHeight,r=this.elementsAfter(0,n),i=t=>Math.abs(t.offsetLeft-e)+Math.abs(t.offsetTop-n);t=tf.getClosestElement(r,i)}else{if(e!=tf.DIRECTION.up)throw new Error("getNextElement: invalid direction value");{const e=this.selected.offsetLeft,n=this.selected.offsetTop-1,r=this.elementsBefore(1/0,n),i=t=>Math.abs(e-t.offsetLeft)+Math.abs(n-t.offsetTop);t=tf.getClosestElement(r,i)}}else t=e===tf.DIRECTION.right||e===tf.DIRECTION.down?this.getElements(e)[1]:this.getElements(e)[0];return this.options.jump_to_picked&&t&&t.matches(this.options.jump_to_picked)&&e===this.options.jump_to_picked_direction&&(t=this.container.querySelector(this.options.jump_to_picked_selector)||t),t}select(e,t){e&&e!==this.selected&&(this.unselect(),t&&this.scrollTo(e,t),e.matches("input")?e.focus():Yh.addClass(this.options.selected,e),this.selected=e,this.options.onSelected&&this.options.onSelected(e))}unselect(){this.selected&&(Yh.removeClass(this.options.selected,this.selected),delete this.selected)}scrollTo(e,t){if(this.inScrollContainerViewport(e)){if(!function(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.innerHeight&&t.right<=window.innerWidth}(e))switch(t){case tf.DIRECTION.left:document.body.scrollLeft=ef(e)-document.body.offsetLeft;break;case tf.DIRECTION.up:document.body.scrollTop=Zh(e)-document.body.offsetTop;break;case tf.DIRECTION.right:document.body.scrollLeft=ef(e)-document.body.offsetLeft-(document.documentElement.clientWidth-e.offsetWidth);break;case tf.DIRECTION.down:document.body.scrollTop=Zh(e)-document.body.offsetTop-(document.documentElement.clientHeight-e.offsetHeight)}}else{const n=this.scroll_container;if(!n.contains(e))return;switch(t){case tf.DIRECTION.left:n.scrollLeft=e.offsetLeft-n.offsetLeft,n.scrollTop=e.offsetTop-n.offsetTop;break;case tf.DIRECTION.up:n.scrollTop=e.offsetTop-n.offsetTop;break;case tf.DIRECTION.right:n.scrollLeft=e.offsetLeft-n.offsetLeft-(n.offsetWidth-e.offsetWidth),n.scrollTop=e.offsetTop-n.offsetTop-(n.offsetHeight-e.offsetHeight);break;case tf.DIRECTION.down:n.scrollTop=e.offsetTop-n.offsetTop-(n.offsetHeight-e.offsetHeight)}}}inScrollContainerViewport(e){const t=this.scroll_container;return!(e.offsetLeft-t.scrollLeft<t.offsetLeft)&&(!(e.offsetTop-t.scrollTop<t.offsetTop)&&(!(e.offsetLeft+e.offsetWidth-t.scrollLeft>t.offsetLeft+t.offsetWidth)&&!(e.offsetTop+e.offsetHeight-t.scrollTop>t.offsetTop+t.offsetHeight)))}getElements(e){const t=this.options.getSelector?this.options.getSelector(e):this.options.selector;return this.elements[t]||(this.elements[t]=Array.from(this.container.querySelectorAll(t))),this.elements[t]}elementsAfter(e,t){return this.getElements(tf.DIRECTION.down).filter(n=>n.offsetLeft>=e&&n.offsetTop>=t)}elementsBefore(e,t){return this.getElements(tf.DIRECTION.up).filter(n=>n.offsetLeft<=e&&n.offsetTop<=t)}handleKeydown(e){const t=Kh,n=e.shiftKey?this.keys["".concat(t.SHIFT,"+").concat(e.which)]:this.keys[e.which];if(n){e.preventDefault(),e.stopPropagation();const t=this.getNextElement(n,e);this.select(t,n)}}}var nf=tf;function rf(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n            <div class="dropleft">\n                <button type="button" class="btn btn--transparent btn--standalone" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n                    <i class="',' only-icon"></i>\n                </button>\n                <div class="dropdown-menu">\n                    ',"\n                </div>\n            </div>\n        "]);return rf=function(){return e},e}const sf=Yc.env.utils;class of extends uc{firstUpdated(){this.menu=this.querySelector(".dropdown-menu"),this.dropdown=this.firstElementChild,this.button=this.dropdown.querySelector("button"),this.dropdown.addEventListener("click",e=>this.toggleMenu(e)),this.dropdown.addEventListener("keyup",e=>this.handleKeyUp(e)),document.addEventListener("click",e=>!this.contains(e.composedPath()[0])&&this.hideMenu(e))}hideMenu(){var e,t;sf.removeClass("show",this.menu),null===(e=this.button)||void 0===e||e.setAttribute("aria-expanded",!1),null===(t=this.button)||void 0===t||t.blur()}showMenu(){sf.addClass("show",this.menu),this.button.setAttribute("aria-expanded",!0)}toggleMenu(e){e.preventDefault(),sf.hasClass("show",this.menu)?this.hideMenu():this.showMenu()}handleKeyUp(e){e.keyCode===Yc.keycodes.ESCAPE?this.hideMenu():e.keyCode===Yc.keycodes.DOWN_ARROW&&this.navigator&&!this.navigator.enabled&&this.enableArrowNavigation(e)}}function af(){const e=uf(['<converse-dropdown class="chat-msg__actions" .items=',"></converse-dropdown>"]);return af=function(){return e},e}function cf(){const e=uf(['\n            <button class="chat-msg__action ','" @click=','>\n                <converse-icon class="','"\n                    path-prefix="','"\n                    color="var(--text-color-lighten-15-percent)"\n                    size="1em"></converse-icon>\n                ',"\n            </button>\n        "]);return cf=function(){return e},e}function lf(){const e=uf(["",""]);return lf=function(){return e},e}function uf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-dropdown",class extends of{static get properties(){return{icon_classes:{type:String},items:{type:Array}}}render(){const e=this.icon_classes||"fa fa-bars";return Ga(rf(),e,this.items.map(e=>oh(e,"")))}hideMenu(){super.hideMenu(),this.navigator.disable()}firstUpdated(){super.firstUpdated(),this.initArrowNavigation()}initArrowNavigation(){if(!this.navigator){const e={selector:".dropdown-item",onSelected:e=>e.focus()};this.navigator=new nf(this.menu,e)}}enableArrowNavigation(e){e&&(e.preventDefault(),e.stopPropagation()),this.navigator.enable(),this.navigator.select(this.menu.firstElementChild)}handleKeyUp(e){super.handleKeyUp(e),e.keyCode!==Yc.keycodes.DOWN_ARROW||this.navigator.enabled||this.enableArrowNavigation(e)}});class df extends uc{static get properties(){return{chatview:{type:Object},model:{type:Object},editable:{type:Boolean},correcting:{type:Boolean},message_type:{type:String},is_retracted:{type:Boolean}}}render(){return Ga(lf(),oh(this.renderActions(),""))}static getActionsDropdownItem(e){return Ga(cf(),e.button_class,e.handler,e.icon_class,qc.settings.get("assets_path"),e.i18n_text)}onMessageEditButtonClicked(e){e.preventDefault(),this.chatview.onMessageEditButtonClicked(this.model)}onMessageRetractButtonClicked(e){e.preventDefault(),this.chatview.onMessageRetractButtonClicked(this.model)}async renderActions(){const e=[];this.editable&&e.push({i18n_text:this.correcting?dd("Cancel Editing"):dd("Edit"),handler:e=>this.onMessageEditButtonClicked(e),button_class:"chat-msg__action-edit",icon_class:"fa fa-pencil-alt",name:"edit"});const t="groupchat"===this.model.get("type")&&await this.model.mayBeModerated();!this.is_retracted&&(this.model.mayBeRetracted()||t)&&e.push({i18n_text:dd("Retract"),handler:e=>this.onMessageRetractButtonClicked(e),button_class:"chat-msg__action-retract",icon_class:"fas fa-trash-alt",name:"retract"});const n=e.map(e=>df.getActionsDropdownItem(e));return n.length?Ga(af(),n):""}}function hf(){const e=pf(['<p class="older-msg"><time>',"</time>: ","</p>"]);return hf=function(){return e},e}function ff(){const e=pf(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h4 class="modal-title" id="message-versions-modal-label">',"</h4>\n                ",'\n            </div>\n            <div class="modal-body">\n                <h4>Older versions</h4>\n                ',"\n                <hr/>\n                <h4>Current version</h4>\n                <p>",'</p>\n            </div>\n            <div class="modal-footer">',"</div>\n        </div>\n    </div>\n"]);return ff=function(){return e},e}function pf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-message-actions",df);var gf=Kd.extend({id:"message-versions-modal",toHTML(){return e=this.model.toJSON(),Ga(ff(),dd("Message versions"),Bd,Object.keys(e.older_versions).map(t=>Ga(hf(),Sn()(t).format("MMM D, YYYY, HH:mm:ss"),e.older_versions[t])),e.message,Fd);var e}}),mf=n(135),vf=n.n(mf);function _f(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <svg xmlns="http://www.w3.org/2000/svg" class="avatar ','" width="','" height="','">\n        <image width="','" height="','" preserveAspectRatio="xMidYMid meet" href="','"/>\n    </svg>']);return _f=function(){return e},e}var bf=e=>{return Ga(_f(),e.classes,e.width,e.height,e.width,e.height,(t=e.image,n=e.image_type,t.startsWith("data:")?t:"data:".concat(n,";base64,").concat(t)));var t,n};const yf=Ea(e=>t=>{const n={classes:e.classes?"".concat(e.classes," avatar"):"avatar",height:e.width||36,image:e.image,image_type:e.image_type,width:e.height||36};t.setValue(bf(n))});function wf(){const e=Cf(['\n                            <time timestamp="','" class="chat-msg__time">','</time>&nbsp;\n                            <span class="chat-msg__author">',"","</span>&nbsp;"]);return wf=function(){return e},e}function Sf(){const e=Cf(['<span class="fa fa-lock"></span>']);return Sf=function(){return e},e}function xf(){const e=Cf(['\n                    <span class="chat-msg__heading">\n                        <span class="chat-msg__author">',"</span>\n                        ","\n                        ","\n                    </span>"]);return xf=function(){return e},e}function Ef(){const e=Cf(['<div class="message separator"><hr class="separator"><span class="separator-text">',"</span></div>"]);return Ef=function(){return e},e}function Af(){const e=Cf(["\n        ",'\n        <div class="message chat-msg ','"\n                data-isodate="','"\n                data-msgid="','"\n                data-from="','"\n                data-encrypted="','">\n\n            ','\n            <div class="chat-msg__content chat-msg__content--'," ",'">\n\n                ','\n                <div class="chat-msg__body chat-msg__body--'," "," ",'">\n                    <div class="chat-msg__message">\n                        ',"\n                        ","\n                    </div>\n                    <converse-message-actions\n                        .chatview=","\n                        .model=",'\n                        ?correcting="','"\n                        ?editable="','"\n                        ?is_retracted="','"\n                        message_type="','"></converse-message-actions>\n                </div>\n            </div>\n        </div>']);return Af=function(){return e},e}function Cf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jf(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<span class="spinner fa fa-spinner centered ','"/>']);return jf=function(){return e},e}var Tf=(e={})=>Ga(jf(),e.classes||"");function Of(){const e=$f(['<span class="badge badge-secondary">',"</span>"]);return Of=function(){return e},e}function kf(){const e=$f(["\n            ",'\n            <time timestamp="','" class="chat-msg__time">',"</time>\n        "]);return kf=function(){return e},e}function Nf(){const e=$f(['<div class="chat-msg__media">',"</div>"]);return Nf=function(){return e},e}function If(){const e=$f(['<i title="','" class="fa fa-edit chat-msg__edit-modal" @click=',"></i>"]);return If=function(){return e},e}function Mf(){const e=$f(['<span class="fa fa-check chat-msg__receipt"></span>']);return Mf=function(){return e},e}function Rf(){const e=$f(['<div class="chat-msg__subject">',"</div>"]);return Rf=function(){return e},e}function Df(){const e=$f(["\n            ","\n            ",'\n            <span>\n                <converse-chat-message-body\n                    class="chat-msg__text '," ",'"\n                    .model="','"\n                    ?is_me_message="','"\n                    ?is_only_emojis="','"\n                    ?is_spoiler="','"\n                    ?is_spoiler_visible="','"\n                    text="','"></converse-chat-message-body>\n                ',"\n                ","\n            </span>\n            ",'\n            <div class="chat-msg__error">',"</div>\n        "]);return Df=function(){return e},e}function Pf(){const e=$f(['\n            <div class="chat-msg__spoiler-hint">\n                <span class="spoiler-hint">','</span>\n                <a class="badge badge-info spoiler-toggle" href="#" @click=','>\n                    <i class="fa ','"></i>\n                    ',"\n                </a>\n            </div>\n        "]);return Pf=function(){return e},e}function Lf(){const e=$f(['<q class="chat-msg--retracted__reason">',"</q>"]);return Lf=function(){return e},e}function zf(){const e=$f(["\n            <div>","</div>\n            ","\n        "]);return zf=function(){return e},e}function Ff(){const e=$f(['\n            <div class="message chat-msg">\n                ','\n                <div class="chat-msg__content">\n                    <span class="chat-msg__text">'," <strong>","</strong>, ",'</span>\n                    <progress value="','"/>\n                </div>\n            </div>']);return Ff=function(){return e},e}function Bf(){const e=$f(['<a class="retry" @click=',">","</a>"]);return Bf=function(){return e},e}function qf(){const e=$f(['<q class="reason">',"</q>"]);return qf=function(){return e},e}function Hf(){const e=$f(['<q class="reason">',"</q>"]);return Hf=function(){return e},e}function Uf(){const e=$f(['\n            <div class="message chat-info chat-','"\n                data-isodate="','"\n                data-type="','"\n                data-value="','">\n\n                <div class="chat-info__message">\n                    ',"\n                </div>\n                ","\n                ","\n                ","\n            </div>\n        "]);return Uf=function(){return e},e}function $f(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const{Strophe:Wf}=Yc.env,Vf=Yc.env.utils;class Gf extends uc{static get properties(){return{chatview:{type:Object},correcting:{type:Boolean},editable:{type:Boolean},edited:{type:String},error:{type:String},error_text:{type:String},from:{type:String},has_mentions:{type:Boolean},hats:{type:Array},is_delayed:{type:Boolean},is_encrypted:{type:Boolean},is_first_unread:{type:Boolean},is_me_message:{type:Boolean},is_only_emojis:{type:Boolean},is_retracted:{type:Boolean},is_spoiler:{type:Boolean},is_spoiler_visible:{type:Boolean},message_type:{type:String},model:{type:Object},moderated_by:{type:String},moderation_reason:{type:String},msgid:{type:String},occupant_affiliation:{type:String},occupant_role:{type:String},oob_url:{type:String},progress:{type:Number},reason:{type:String},received:{type:String},retractable:{type:Boolean},retry_event_id:{type:String},sender:{type:String},show_spinner:{type:Boolean},spoiler_hint:{type:String},subject:{type:String},time:{type:String},username:{type:String}}}render(){const e=qc.settings.get("time_format");return this.pretty_time=Sn()(this.time).format(e),this.show_spinner?Tf():this.model.get("file")&&!this.model.get("oob_url")?this.renderFileProgress():["error","info"].includes(this.message_type)?this.renderInfoMessage():this.renderChatMessage()}connectedCallback(){super.connectedCallback(),this.listenTo(this.model,"change",e=>{const t=this.model.collection.chatbox;Object.assign(this,up(t,this.model)),Object.keys(e.changed).filter(e=>Object.keys(Gf.properties).includes(e)).forEach(t=>this[t]=e.changed[t])});const e=this.model.vcard;e&&this.listenTo(e,"change",()=>this.requestUpdate())}updated(){var e;(this.show_spinner||this.model.get("file")&&!this.model.get("oob_url")||["error","info"].includes(this.message_type))&&(null===(e=this.model.collection)||void 0===e||e.trigger("rendered",this.model))}renderInfoMessage(){const e=Sn()(this.model.get("time")).toISOString(),t=dd("Retry");return Ga(Uf(),this.message_type,e,this.data_name,this.data_value,this.model.getMessageText(),this.reason?Ga(Hf(),this.reason):"",this.error_text?Ga(qf(),this.error_text):"",this.retry_event_id?Ga(Bf(),this.onRetryClicked,t):"")}renderFileProgress(){const e=dd("Uploading file:"),t=this.model.file.name,n=vf()(this.model.file.size);return Ga(Ff(),yf(this.getAvatarData()),e,t,n,this.progress)}renderChatMessage(){return(e=>{const t=dd("New messages");return Ga(Af(),e.is_first_unread?Ga(Ef(),t):"",e.getExtraMessageClasses(),e.time,e.msgid,e.from,e.is_encrypted,e.shouldShowAvatar()?yf(e.getAvatarData()):"",e.sender,e.is_me_message?"chat-msg__content--action":"",e.is_me_message?"":Ga(xf(),e.username,e.renderAvatarByline(),e.is_encrypted?Ga(Sf()):""),e.message_type,e.received?"chat-msg__body--received":"",e.is_delayed?"chat-msg__body--delayed":"",e.is_me_message?Ga(wf(),e.time,e.pretty_time,e.is_me_message?"**":"",e.username):"",e.is_retracted?e.renderRetraction():e.renderMessageText(),e.chatview,e.model,e.correcting,e.editable,e.is_retracted,e.message_type)})(this)}shouldShowAvatar(){return qc.settings.get("show_message_avatar")&&!this.is_me_message&&"headline"!==this.type}getAvatarData(){var e,t;return{classes:"chat-msg__avatar",height:36,width:36,image:"data:"+((null===(e=this.model.vcard)||void 0===e?void 0:e.get("image_type"))||Lc.DEFAULT_IMAGE_TYPE)+";base64,"+((null===(t=this.model.vcard)||void 0===t?void 0:t.get("image"))||Lc.DEFAULT_IMAGE)}}async onRetryClicked(){this.show_spinner=!0,await qc.trigger(this.retry_event_id,{synchronous:!0}),this.model.destroy(),this.parentElement.removeChild(this)}isFollowup(){const e=this.model.collection.models,t=e.indexOf(this.model),n=t?e[t-1]:null;if(null===n)return!1;const r=Sn()(this.time);return this.from===n.get("from")&&!this.is_me_message&&!n.isMeCommand()&&"info"!==this.message_type&&"info"!==n.get("type")&&r.isBefore(Sn()(n.get("time")).add(10,"minutes"))&&!!this.is_encrypted==!!n.get("is_encrypted")}getExtraMessageClasses(){const e=[this.isFollowup()?"chat-msg--followup":null,this.is_delayed?"delayed":null,this.is_me_message?"chat-msg--action":null,this.is_retracted?"chat-msg--retracted":null,this.message_type,this.shouldShowAvatar()?"chat-msg--with-avatar":null].map(e=>e);return"groupchat"===this.message_type&&(this.occupant_role&&e.push(this.occupant_role),this.occupant_affiliation&&e.push(this.occupant_affiliation),"them"===this.sender&&this.has_mentions&&e.push("mentioned")),this.correcting&&e.push("correcting"),e.filter(e=>e).join(" ")}getRetractionText(){if("groupchat"===this.message_type&&this.moderated_by){const e=this.moderated_by,t=this.model.collection.chatbox;this.model.mod||(this.model.mod=t.occupants.findOccupant({jid:e})||t.occupants.findOccupant({nick:Wf.getResourceFromJid(e)}));const n=this.model.mod?this.model.mod.getDisplayName():"A moderator";return dd("%1$s has removed this message",n)}return dd("%1$s has removed this message",this.model.getDisplayName())}renderRetraction(){const e=this.is_retracted?this.getRetractionText():null;return Ga(zf(),e,this.moderation_reason?Ga(Lf(),this.moderation_reason):"")}renderMessageText(){const e=dd("This message has been edited"),t=dd("Show more"),n="groupchat"===this.message_type,r=dd("Show less"),i=Ga(Pf(),this.spoiler_hint,this.toggleSpoilerMessage,this.is_spoiler_visible?"fa-eye-slash":"fa-eye",this.is_spoiler_visible?r:t),s=this.is_spoiler?"spoiler ".concat(this.is_spoiler_visible?"":"hidden"):"";return Ga(Df(),this.is_spoiler?i:"",this.subject?Ga(Rf(),this.subject):"",this.is_only_emojis?"chat-msg__text--larger":"",s,this.model,this.is_me_message,this.is_only_emojis,this.is_spoiler,this.is_spoiler_visible,this.model.getMessageText(),!this.received||this.is_me_message||n?"":Ga(Mf()),this.edited?Ga(If(),e,this.showMessageVersionsModal):"",this.oob_url?Ga(Nf(),Vf.getOOBURLMarkup(Lc,this.oob_url)):"",this.error_text||this.error)}renderAvatarByline(){return Ga(kf(),this.hats.map(e=>Ga(Of(),e.title)),this.time,this.pretty_time)}showMessageVersionsModal(e){e.preventDefault(),void 0===this.message_versions_modal&&(this.message_versions_modal=new gf({model:this.model})),this.message_versions_modal.show(e)}toggleSpoilerMessage(e){null==e||e.preventDefault(),this.model.save({is_spoiler_visible:!this.model.get("is_spoiler_visible")})}}function Jf(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="message date-separator" data-isodate="','">\n        <hr class="separator"/>\n        <time class="separator-text" datetime="','"><span>',"</span></time>\n    </div>\n"]);return Jf=function(){return e},e}qc.elements.define("converse-chat-message",Gf);
+ * @description Utility functions to help with parsing XEP-393 message styling hints
+ * @todo Other parsing helpers can be made more abstract and placed here.
+ */const kf=["*","_","~","`","```",">"],Nf={"*":{name:"strong",type:"span"},_:{name:"emphasis",type:"span"},"~":{name:"strike",type:"span"},"`":{name:"preformatted",type:"span"},"```":{name:"preformatted_block",type:"block"},">":{name:"quote",type:"block"}},If=["_",">","`","~"],Mf={emphasis:(e,t,n)=>Za(Tf(),Sf(e,t,n)),preformatted:e=>Za(jf(),e),preformatted_block:e=>Za(Cf(),e),quote:(e,t,n)=>Za(Af(),Sf(e,t,n)),strike:(e,t,n)=>Za(Ef(),Sf(e,t,n)),strong:(e,t,n)=>Za(xf(),Sf(e,t,n))};function Rf(e,t,n=!0){let r;if(!/(^```\s*\n|^```\s*$)/.test(e.slice(t))||0!==t&&"\n"!==e[t-1]&&">"!==e[t-1]){if(!kf.includes(e.slice(t,t+1)))return null;if(r=e.slice(t,t+1),!function(e,t,n,r){if(r){const r=RegExp(If.includes(e)?"^(\\p{L}|\\p{N})".concat(e):"^(\\p{L}|\\p{N})\\".concat(e),"u");if(n>1&&r.test(t.slice(n-1)))return!1;const i=Lf(e);if(i&&n>0&&"\n"!==t[n-1])return!1;if(!i&&e===t[n+1])return!1}else{const r=RegExp(If.includes(e)?"^".concat(e,"(\\p{L}|\\p{N})"):"^\\".concat(e,"(\\p{L}|\\p{N})"),"u");if(n<t.length-1&&r.test(t.slice(n)))return!1}return!0}(r,e,t,n))return null}else r=e.slice(t,t+3);return r}function Df(e,t,n){const r=Nf[e].type;return t===n.length||Rf(n,t,!1)===e||"span"===r&&"\n"===n[t]}function Pf(e,t){const n=Rf(e,t),r=n?function(e,t,n){if(!e)return 0;const r=n;if(n+=e.length,Lf(e))return(n+=t.slice(n).split(/\n[^>]/).shift().length)-r;if("span"===Nf[e].type){const r=t.slice(n+1).split("\n").shift();let i=0,o=r.indexOf(e);for(;-1!==o;){if(Df(e,n+1+o,t))return o+1+2*e.length;o=r.indexOf(e,i++)}return 0}{const r=t.slice(n+1);let i,o=r.indexOf(e);for(;-1!==o;){if(Df(e,n+1+o,t))return o+1+2*e.length;o=r.indexOf(e,i++)}return 0}}(n,e,t):0;return r>0?{d:n,length:r}:{}}const Lf=e=>[">","&gt;"].includes(e);function zf(e,t,n,r){const i=Mf[Nf[e].name];if(Lf(e)){return i(t.replace(/\n>/g,"\n").replace(/\n$/,""),n,r)}return i(t,n,r)}function Ff(){const e=qf(['<span class="mention">',"</span>"]);return Ff=function(){return e},e}function Bf(){const e=qf(['<span class="mention mention--self badge badge-info">',"</span>"]);return Bf=function(){return e},e}function qf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const Hf=rl.env.utils,Uf=e=>"string"==typeof e;class $f extends String{constructor(e,t,n=0,r,i,o){super(e),this.model=t,this.offset=n,this.onImgClick=o,this.onImgLoad=i,this.references=[],this.show_images=r,this.payload=[]}addHyperlinks(e,t){const n=[];try{const t={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi};ah.a.withinString(e,(e,t,r)=>(n.push({url:e,start:t,end:r}),e),t)}catch(e){return void zn.debug(e)}n.forEach(n=>{const r=e.slice(n.start,n.end),i=Hf.filterQueryParamsFromURL(r);this.addTemplateResult(n.start+t,n.end+t,this.show_images&&Hf.isImageURL(r)&&Hf.isImageDomainAllowed(r)?Hf.convertToImageTag(i,this.onImgLoad,this.onImgClick):Hf.convertUrlToHyperlink(i))})}addMapURLs(e,t){const n=/geo:([\-0-9.]+),([\-0-9.]+)(?:,([\-0-9.]+))?(?:\?(.*))?/g,r=e.matchAll(n);for(const e of r)this.addTemplateResult(e.index+t,e.index+e[0].length+t,Hf.convertUrlToHyperlink(e[0].replace(n,Uc.geouri_replacement)))}addEmojis(e,t){[...Hl(e.toString()),...Ul(e.toString())].forEach(e=>{this.addTemplateResult(e.begin+t,e.end+t,ql(e,{add_title_wrapper:!0}))})}addMentions(e,t){var n;const r=t+this.offset;if(!this.model.collection)return void zn.debug("addMentions: ignoring dangling model");const i=this.model.collection.chatbox.get("nick");null===(n=this.model.get("references"))||void 0===n||n.forEach(n=>{const o=Number(n.begin)-r;if(o<0||o>=r+e.length)return;const s=Number(n.end)-r,a=e.slice(o,s);var c;a===i?this.addTemplateResult(o+t,s+t,(c={mention:a},Za(Bf(),c.mention))):this.addTemplateResult(o+t,s+t,(e=>Za(Ff(),e.mention))({mention:a}))})}addStyling(){if(this.model.get("is_unstyled")||!Vc.settings.get("allow_message_styling"))return;let e=0;const t=[];if(function(e){for(let t=0;t<kf.length;t++)if(e.includes(kf[t]))return!0}(this))for(;e<this.length;){const{d:n,length:r}=Pf(this,e);if(n&&r){const i=Lf(n),o=e+r,s=i?o:o-n.length;let a="```"===n?e+n.length+1:e+n.length;i&&" "===this[a]&&(a+=1);const c=a,l=this.slice(a,s);t.push({begin:e,template:zf(n,l,this.model,c),end:o}),e=o}e++}t.forEach(e=>this.addTemplateResult(e.begin,e.end,e.template))}trimMeMessage(){0===this.offset&&this.isMeCommand()&&(this.payload[0]=this.payload[0].substring(4))}addAnnotations(e){const t=this.marshall();let n=0;for(const r of t)r&&(Uf(r)?(e.call(this,r,n),n+=r.length):n=r.end)}async addTemplates(){await Vc.trigger("beforeMessageBodyTransformed",this,{Synchronous:!0}),this.addStyling(),this.addAnnotations(this.addMentions),this.addAnnotations(this.addHyperlinks),this.addAnnotations(this.addMapURLs),await Vc.emojis.initialize(),this.addAnnotations(this.addEmojis),await Vc.trigger("afterMessageBodyTransformed",this,{Synchronous:!0}),this.payload=this.marshall(),this.trimMeMessage(),this.payload=this.payload.map(e=>Uf(e)?e:e.template)}addTemplateResult(e,t,n){this.references.push({begin:e,end:t,template:n})}isMeCommand(){const e=this.toString();return!!e&&e.startsWith("/me ")}static replaceText(e){return Bl(e.replace(/\n\n+/g,"\n\n"))}marshall(){let e=[this.toString()];return this.references.sort((e,t)=>t.begin-e.begin).forEach(t=>{const n=e.shift();e=[n.slice(0,t.begin),t,n.slice(t.end),...e]}),e.reduce((e,t)=>Uf(t)?[...e,$f.replaceText(t)]:[...e,t],[])}}function Wf(){const e=Vf(["",""]);return Wf=function(){return e},e}function Gf(){const e=Vf(["",""]);return Gf=function(){return e},e}function Vf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const Jf=rl.env.utils;class Xf{constructor(e){var t;this.model=e.model,this.component=e,this.chatview=null===(t=Jf.ancestor(this.component,"converse-chat-message"))||void 0===t?void 0:t.chatview,this.was_scrolled_up=this.chatview.model.get("scrolled"),this.text=this.component.model.getMessageText()}scrollDownOnImageLoad(){this.was_scrolled_up||this.chatview.scrollDown()}async transform(){const e=Vc.settings.get("show_images_inline"),t=new $f(this.text,this.model,0,e,()=>this.scrollDownOnImageLoad(),e=>this.component.showImageModal(e));return await t.addTemplates(),t.payload}render(){return Za(Gf(),Qh(this.transform(),Za(Wf(),this.text)))}}const Qf=ka(e=>t=>{var n;const r=new Xf(e);t.setValue(r.render());const i=e.model;null===(n=i.collection)||void 0===n||n.trigger("rendered",i)});function Yf(){const e=Zf(['<p class="older-msg"><time>',"</time>: ","</p>"]);return Yf=function(){return e},e}function Kf(){const e=Zf(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h4 class="modal-title" id="message-versions-modal-label">',"</h4>\n                ",'\n            </div>\n            <div class="modal-body">\n                <h4>Older versions</h4>\n                ',"\n                <hr/>\n                <h4>Current version</h4>\n                <p>",'</p>\n            </div>\n            <div class="modal-footer">',"</div>\n        </div>\n    </div>\n"]);return Kf=function(){return e},e}function Zf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-chat-message-body",class extends mc{static get properties(){return{model:{type:Object},is_me_message:{type:Boolean},text:{type:String}}}showImageModal(e){e.preventDefault(),Vc.modal.create(_f,{src:e.target.src},e).show(e)}render(){return Qf(this)}});var ep=df.extend({id:"message-versions-modal",toHTML(){return e=this.model.toJSON(),Za(Kf(),zd("Message versions"),mf,Object.keys(e.older_versions).map(t=>Za(Yf(),En()(t).format("MMM D, YYYY, HH:mm:ss"),e.older_versions[t])),e.message,gf);var e}}),tp=n(176),np=n.n(tp);function rp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <svg xmlns="http://www.w3.org/2000/svg" class="avatar ','" width="','" height="','">\n        <image width="','" height="','" preserveAspectRatio="xMidYMid meet" href="','"/>\n    </svg>']);return rp=function(){return e},e}var ip=e=>{return Za(rp(),e.classes,e.width,e.height,e.width,e.height,(t=e.image,n=e.image_type,t.startsWith("data:")?t:"data:".concat(n,";base64,").concat(t)));var t,n};const op=ka(e=>t=>{const n={classes:e.classes?"".concat(e.classes," avatar"):"avatar",height:e.width||36,image:e.image,image_type:e.image_type,width:e.height||36};t.setValue(ip(n))});function sp(){const e=dp(['\n                            <time timestamp="','" class="chat-msg__time">','</time>&nbsp;\n                            <span class="chat-msg__author">',"","</span>&nbsp;"]);return sp=function(){return e},e}function ap(){const e=dp(['<span class="fa fa-lock"></span>']);return ap=function(){return e},e}function cp(){const e=dp(['\n                    <span class="chat-msg__heading">\n                        <span class="chat-msg__author"><a class="show-msg-author-modal" @click=',">","</a></span>\n                        ","\n                        ","\n                    </span>"]);return cp=function(){return e},e}function lp(){const e=dp(['<div class="message separator"><hr class="separator"><span class="separator-text">',"</span></div>"]);return lp=function(){return e},e}function up(){const e=dp(["\n        ",'\n        <div class="message chat-msg ','"\n                data-isodate="','"\n                data-msgid="','"\n                data-from="','"\n                data-encrypted="','">\n\n            \x3c!-- Anchor to allow us to scroll the message into view --\x3e\n            <a id="','"></a>\n\n            <a class="show-msg-author-modal" @click=',">",'</a>\n            <div class="chat-msg__content chat-msg__content--'," ",'">\n\n                ','\n                <div class="chat-msg__body chat-msg__body--'," "," ",'">\n                    <div class="chat-msg__message">\n                        ',"\n                        ","\n                    </div>\n                    <converse-message-actions\n                        .chatview=","\n                        .model=",'\n                        ?correcting="','"\n                        ?editable="','"\n                        ?is_retracted="','"\n                        message_type="','"></converse-message-actions>\n                </div>\n            </div>\n        </div>']);return up=function(){return e},e}function dp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function hp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['<span class="spinner fa fa-spinner centered ','"/>']);return hp=function(){return e},e}var fp=(e={})=>Za(hp(),e.classes||"");function pp(){const e=Op(['<span class="badge badge-secondary">',"</span>"]);return pp=function(){return e},e}function gp(){const e=Op(["\n            ",'\n            <time timestamp="','" class="chat-msg__time">',"</time>\n        "]);return gp=function(){return e},e}function mp(){const e=Op(['<div class="chat-msg__media">',"</div>"]);return mp=function(){return e},e}function vp(){const e=Op(['<i title="','" class="fa fa-edit chat-msg__edit-modal" @click=',"></i>"]);return vp=function(){return e},e}function _p(){const e=Op(['<span class="fa fa-check chat-msg__receipt"></span>']);return _p=function(){return e},e}function bp(){const e=Op(['<div class="chat-msg__subject">',"</div>"]);return bp=function(){return e},e}function yp(){const e=Op(["\n            ","\n            ",'\n            <span>\n                <converse-chat-message-body\n                    class="chat-msg__text '," ",'"\n                    .model="','"\n                    ?is_me_message="','"\n                    ?is_only_emojis="','"\n                    ?is_spoiler="','"\n                    ?is_spoiler_visible="','"\n                    text="','"></converse-chat-message-body>\n                ',"\n                ","\n            </span>\n            ",'\n            <div class="chat-msg__error">',"</div>\n        "]);return yp=function(){return e},e}function wp(){const e=Op(['\n            <div class="chat-msg__spoiler-hint">\n                <span class="spoiler-hint">','</span>\n                <a class="badge badge-info spoiler-toggle" href="#" @click=','>\n                    <i class="fa ','"></i>\n                    ',"\n                </a>\n            </div>\n        "]);return wp=function(){return e},e}function Sp(){const e=Op(['<q class="chat-msg--retracted__reason">',"</q>"]);return Sp=function(){return e},e}function xp(){const e=Op(["\n            <div>","</div>\n            ","\n        "]);return xp=function(){return e},e}function Ep(){const e=Op(['\n            <div class="message chat-msg">\n                ','\n                <div class="chat-msg__content">\n                    <span class="chat-msg__text">'," <strong>","</strong>, ",'</span>\n                    <progress value="','"/>\n                </div>\n            </div>']);return Ep=function(){return e},e}function Ap(){const e=Op(['<a class="retry" @click=',">","</a>"]);return Ap=function(){return e},e}function Cp(){const e=Op(['<q class="reason">',"</q>"]);return Cp=function(){return e},e}function jp(){const e=Op(['<q class="reason">',"</q>"]);return jp=function(){return e},e}function Tp(){const e=Op(['\n            <div class="message chat-info chat-','"\n                data-isodate="','"\n                data-type="','"\n                data-value="','">\n\n                <div class="chat-info__message">\n                    ',"\n                </div>\n                ","\n                ","\n                ","\n            </div>\n        "]);return Tp=function(){return e},e}function Op(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const{Strophe:kp}=rl.env,Np=rl.env.utils;class Ip extends mc{static get properties(){return{chatview:{type:Object},correcting:{type:Boolean},editable:{type:Boolean},edited:{type:String},error:{type:String},error_text:{type:String},from:{type:String},has_mentions:{type:Boolean},hats:{type:Array},is_delayed:{type:Boolean},is_encrypted:{type:Boolean},is_first_unread:{type:Boolean},is_me_message:{type:Boolean},is_only_emojis:{type:Boolean},is_retracted:{type:Boolean},is_spoiler:{type:Boolean},is_spoiler_visible:{type:Boolean},message_type:{type:String},model:{type:Object},moderated_by:{type:String},moderation_reason:{type:String},msgid:{type:String},occupant_affiliation:{type:String},occupant_role:{type:String},oob_url:{type:String},progress:{type:Number},reason:{type:String},received:{type:String},retractable:{type:Boolean},retry_event_id:{type:String},sender:{type:String},show_spinner:{type:Boolean},spoiler_hint:{type:String},subject:{type:String},time:{type:String},username:{type:String}}}render(){const e=Vc.settings.get("time_format");return this.pretty_time=En()(this.edited||this.time).format(e),this.show_spinner?fp():this.model.get("file")&&!this.model.get("oob_url")?this.renderFileProgress():["error","info"].includes(this.message_type)?this.renderInfoMessage():this.renderChatMessage()}connectedCallback(){super.connectedCallback(),this.listenTo(this.model,"change",e=>{const t=this.model.collection.chatbox;Object.assign(this,Jp(t,this.model)),Object.keys(e.changed).filter(e=>Object.keys(Ip.properties).includes(e)).forEach(t=>this[t]=e.changed[t])});const e=this.model.vcard;e&&this.listenTo(e,"change",()=>this.requestUpdate())}updated(){var e;(this.show_spinner||this.model.get("file")&&!this.model.get("oob_url")||["error","info"].includes(this.message_type))&&(null===(e=this.model.collection)||void 0===e||e.trigger("rendered",this.model))}renderInfoMessage(){const e=En()(this.model.get("time")).toISOString(),t=zd("Retry");return Za(Tp(),this.message_type,e,this.data_name,this.data_value,this.model.getMessageText(),this.reason?Za(jp(),this.reason):"",this.error_text?Za(Cp(),this.error_text):"",this.retry_event_id?Za(Ap(),this.onRetryClicked,t):"")}renderFileProgress(){const e=zd("Uploading file:"),t=this.model.file.name,n=np()(this.model.file.size);return Za(Ep(),op(this.getAvatarData()),e,t,n,this.progress)}renderChatMessage(){return(e=>{const t=zd("New messages");return Za(up(),e.is_first_unread?Za(lp(),t):"",e.getExtraMessageClasses(),e.time,e.msgid,e.from,e.is_encrypted,e.msgid,e.showUserModal,e.shouldShowAvatar()?op(e.getAvatarData()):"",e.sender,e.is_me_message?"chat-msg__content--action":"",e.is_me_message?"":Za(cp(),e.showUserModal,e.username,e.renderAvatarByline(),e.is_encrypted?Za(ap()):""),e.message_type,e.received?"chat-msg__body--received":"",e.is_delayed?"chat-msg__body--delayed":"",e.is_me_message?Za(sp(),e.edited||e.time,e.pretty_time,e.is_me_message?"**":"",e.username):"",e.is_retracted?e.renderRetraction():e.renderMessageText(),e.chatview,e.model,e.correcting,e.editable,e.is_retracted,e.message_type)})(this)}shouldShowAvatar(){return Vc.settings.get("show_message_avatar")&&!this.is_me_message&&"headline"!==this.type}getAvatarData(){var e,t;return{classes:"chat-msg__avatar",height:36,width:36,image:"data:"+((null===(e=this.model.vcard)||void 0===e?void 0:e.get("image_type"))||Uc.DEFAULT_IMAGE_TYPE)+";base64,"+((null===(t=this.model.vcard)||void 0===t?void 0:t.get("image"))||Uc.DEFAULT_IMAGE)}}async onRetryClicked(){this.show_spinner=!0,await Vc.trigger(this.retry_event_id,{synchronous:!0}),this.model.destroy(),this.parentElement.removeChild(this)}isFollowup(){const e=this.model.collection.models,t=e.indexOf(this.model),n=t?e[t-1]:null;if(null===n)return!1;const r=En()(this.time);return this.from===n.get("from")&&!this.is_me_message&&!n.isMeCommand()&&"info"!==this.message_type&&"info"!==n.get("type")&&r.isBefore(En()(n.get("time")).add(10,"minutes"))&&!!this.is_encrypted==!!n.get("is_encrypted")}getExtraMessageClasses(){const e=[this.isFollowup()?"chat-msg--followup":null,this.is_delayed?"delayed":null,this.is_me_message?"chat-msg--action":null,this.is_retracted?"chat-msg--retracted":null,this.message_type,this.shouldShowAvatar()?"chat-msg--with-avatar":null].map(e=>e);return"groupchat"===this.message_type&&(this.occupant_role&&e.push(this.occupant_role),this.occupant_affiliation&&e.push(this.occupant_affiliation),"them"===this.sender&&this.has_mentions&&e.push("mentioned")),this.correcting&&e.push("correcting"),e.filter(e=>e).join(" ")}getRetractionText(){if("groupchat"===this.message_type&&this.moderated_by){const e=this.moderated_by,t=this.model.collection.chatbox;this.model.mod||(this.model.mod=t.occupants.findOccupant({jid:e})||t.occupants.findOccupant({nick:kp.getResourceFromJid(e)}));const n=this.model.mod?this.model.mod.getDisplayName():"A moderator";return zd("%1$s has removed this message",n)}return zd("%1$s has removed this message",this.model.getDisplayName())}renderRetraction(){const e=this.is_retracted?this.getRetractionText():null;return Za(xp(),e,this.moderation_reason?Za(Sp(),this.moderation_reason):"")}renderMessageText(){const e=zd("This message has been edited"),t=zd("Show more"),n="groupchat"===this.message_type,r=zd("Show less"),i=Za(wp(),this.spoiler_hint,this.toggleSpoilerMessage,this.is_spoiler_visible?"fa-eye-slash":"fa-eye",this.is_spoiler_visible?r:t),o=this.is_spoiler?"spoiler ".concat(this.is_spoiler_visible?"":"hidden"):"";return Za(yp(),this.is_spoiler?i:"",this.subject?Za(bp(),this.subject):"",this.is_only_emojis?"chat-msg__text--larger":"",o,this.model,this.is_me_message,this.is_only_emojis,this.is_spoiler,this.is_spoiler_visible,this.model.getMessageText(),!this.received||this.is_me_message||n?"":Za(_p()),this.edited?Za(vp(),e,this.showMessageVersionsModal):"",this.oob_url?Za(mp(),Np.getOOBURLMarkup(Uc,this.oob_url)):"",this.error_text||this.error)}renderAvatarByline(){return Za(gp(),this.hats.map(e=>Za(pp(),e.title)),this.edited||this.time,this.pretty_time)}showUserModal(e){"me"===this.model.get("sender")?Uc.xmppstatusview.showProfileModal(e):"groupchat"===this.message_type?this.chatview.showOccupantDetailsModal(e,this.model):this.chatview.showUserDetailsModal(e,this.model)}showMessageVersionsModal(e){e.preventDefault(),void 0===this.message_versions_modal&&(this.message_versions_modal=new ep({model:this.model})),this.message_versions_modal.show(e)}toggleSpoilerMessage(e){null==e||e.preventDefault(),this.model.save({is_spoiler_visible:!this.model.get("is_spoiler_visible")})}}function Mp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="message date-separator" data-isodate="','">\n        <hr class="separator"/>\n        <time class="separator-text" datetime="','"><span>',"</span></time>\n    </div>\n"]);return Mp=function(){return e},e}Vc.elements.define("converse-chat-message",Ip);
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -424,7 +433,7 @@ const sh=new WeakMap,oh=Ea((...e)=>t=>{let n=sh.get(t);void 0===n&&(n={lastRende
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-const Xf=(e,t)=>{const n=e.startNode.parentNode,r=void 0===t?e.endNode:t.startNode,i=n.insertBefore(_a(),r);n.insertBefore(_a(),r);const s=new Da(e.options);return s.insertAfterNode(i),s},Qf=(e,t)=>(e.setValue(t),e.commit(),e),Yf=(e,t,n)=>{const r=e.startNode.parentNode,i=n?n.startNode:e.endNode,s=t.endNode.nextSibling;s!==i&&ua(r,t.startNode,s,i)},Kf=e=>{da(e.startNode.parentNode,e.startNode,e.endNode.nextSibling)},Zf=(e,t,n)=>{const r=new Map;for(let i=t;i<=n;i++)r.set(e[i],i);return r},ep=new WeakMap,tp=new WeakMap,np=Ea((e,t,n)=>{let r;return void 0===n?n=t:void 0!==t&&(r=t),t=>{if(!(t instanceof Da))throw new Error("repeat can only be used in text bindings");const i=ep.get(t)||[],s=tp.get(t)||[],o=[],a=[],c=[];let l,u,d=0;for(const t of e)c[d]=r?r(t,d):d,a[d]=n(t,d),d++;let h=0,f=i.length-1,p=0,g=a.length-1;for(;h<=f&&p<=g;)if(null===i[h])h++;else if(null===i[f])f--;else if(s[h]===c[p])o[p]=Qf(i[h],a[p]),h++,p++;else if(s[f]===c[g])o[g]=Qf(i[f],a[g]),f--,g--;else if(s[h]===c[g])o[g]=Qf(i[h],a[g]),Yf(t,i[h],o[g+1]),h++,g--;else if(s[f]===c[p])o[p]=Qf(i[f],a[p]),Yf(t,i[f],i[h]),f--,p++;else if(void 0===l&&(l=Zf(c,p,g),u=Zf(s,h,f)),l.has(s[h]))if(l.has(s[f])){const e=u.get(c[p]),n=void 0!==e?i[e]:null;if(null===n){const e=Xf(t,i[h]);Qf(e,a[p]),o[p]=e}else o[p]=Qf(n,a[p]),Yf(t,n,i[h]),i[e]=null;p++}else Kf(i[f]),f--;else Kf(i[h]),h++;for(;p<=g;){const e=Xf(t,o[g+1]);Qf(e,a[p]),o[p++]=e}for(;h<=f;){const e=i[h++];null!==e&&Kf(e)}ep.set(t,o),tp.set(t,c)}});function rp(){const e=op(['<div class="empty-history-feedback form-help"><span>',"</span></div>"]);return rp=function(){return e},e}function ip(){const e=op(["",""]);return ip=function(){return e},e}function sp(){const e=op(["\n    <converse-chat-message\n        .chatview=","\n        .hats=","\n        .model=","\n        ?correcting=","\n        ?editable=","\n        ?has_mentions=","\n        ?is_delayed=","\n        ?is_encrypted=","\n        ?is_first_unread=","\n        ?is_me_message=","\n        ?is_only_emojis=","\n        ?is_retracted=","\n        ?is_spoiler=","\n        ?is_spoiler_visible=","\n        ?retractable=","\n        edited=","\n        error=","\n        error_text=","\n        filename=","\n        filesize=","\n        from=","\n        message_type=","\n        moderated_by=","\n        moderation_reason=","\n        msgid=","\n        occupant_affiliation=","\n        occupant_role=","\n        oob_url=","\n        pretty_type=","\n        progress=","\n        reason=","\n        received=","\n        retry_event_id=","\n        sender=","\n        spoiler_hint=","\n        subject=","\n        time=","\n        username=","></converse-chat-message>\n"]);return sp=function(){return e},e}function op(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const ap=dd("No message history available.");function cp(e){const t=e.collection.models,n=t.indexOf(e),r=t[n-1];if(!r||Sn()(e.get("time")).isAfter(Sn()(r.get("time")),"day")){const t=Sn()(e.get("time")).startOf("day");return i={type:"date",time:t.toISOString(),datestring:t.format("dddd MMM Do YYYY")},Ga(Jf(),i.time,i.time,i.datestring)}var i}function lp(e){if("groupchat"===e.get("type")){var t;const n=qc.settings.get("muc_hats").filter(e=>e).map(e=>e.toLowerCase());let r=[];n.includes("vcard_roles")&&(r=e.vcard?e.vcard.get("role"):null,r=r?r.split(",").filter(e=>e).map(e=>({title:e})):[]);let i=[...e.occupant?[e.occupant.get("role")]:[],...e.occupant?[e.occupant.get("affiliation")]:[]].filter(e=>e).filter(e=>n.includes(e.toLowerCase())).map(e=>({title:e}));const s=qc.settings.get("role_affiliation_hat_conversions")||"";if(s){Object.keys(s);i=i.map(e=>Object.keys(s).includes(e.title)?{title:s[e.title]}:e)}return[...n.includes("xep317")&&(null===(t=e.occupant)||void 0===t?void 0:t.get("hats"))||[],...r,...i]}return[]}function up(e,t){return{has_mentions:"groupchat"===t.get("type")&&"them"===t.get("sender")&&e.isUserMentioned(t),hats:lp(t),is_first_unread:e.get("first_unread_id")===t.get("id"),is_me_message:t.isMeCommand(),is_retracted:t.get("retracted")||"retracted"===t.get("moderated"),username:t.getDisplayName()}}qc.elements.define("converse-message-history",class extends uc{static get properties(){return{chatview:{type:Object},messages:{type:Array}}}render(){const e=this.messages;return e.length?Ga(ip(),np(e,e=>e.get("id"),e=>this.renderMessage(e))):Ga(rp(),ap)}renderMessage(e){if(e.get("dangling_retraction")||e.get("is_only_key"))return"";const t=cp(e);var n;return[...t?[t]:[],(n=Object.assign(e.toJSON(),up(this.chatview.model,e),{chatview:this.chatview,model:e}),Ga(sp(),n.chatview,n.hats,n.model,n.correcting,n.editable,n.has_mentions,n.is_delayed,!!n.is_encrypted,n.is_first_unread,n.is_me_message,n.is_only_emojis,n.is_retracted,n.is_spoiler,n.is_spoiler_visible,n.retractable,n.edited||"",n.error||"",n.error_text||"",n.filename||"",n.filesize||"",n.from,n.type||"",n.moderated_by||"",n.moderation_reason||"",n.msgid,n.model.occupant?n.model.occupant.get("affiliation"):"",n.model.occupant?n.model.occupant.get("role"):"",n.oob_url||"",n.pretty_type,n.progress||0,n.reason||"",n.received||"",n.retry_event_id||"",n.sender,n.spoiler_hint||"",n.subject||"",n.time,n.username))]}});var dp=n(16),hp=n.n(dp);
+const Rp=(e,t)=>{const n=e.startNode.parentNode,r=void 0===t?e.endNode:t.startNode,i=n.insertBefore(Ea(),r);n.insertBefore(Ea(),r);const o=new qa(e.options);return o.insertAfterNode(i),o},Dp=(e,t)=>(e.setValue(t),e.commit(),e),Pp=(e,t,n)=>{const r=e.startNode.parentNode,i=n?n.startNode:e.endNode,o=t.endNode.nextSibling;o!==i&&ma(r,t.startNode,o,i)},Lp=e=>{va(e.startNode.parentNode,e.startNode,e.endNode.nextSibling)},zp=(e,t,n)=>{const r=new Map;for(let i=t;i<=n;i++)r.set(e[i],i);return r},Fp=new WeakMap,Bp=new WeakMap,qp=ka((e,t,n)=>{let r;return void 0===n?n=t:void 0!==t&&(r=t),t=>{if(!(t instanceof qa))throw new Error("repeat can only be used in text bindings");const i=Fp.get(t)||[],o=Bp.get(t)||[],s=[],a=[],c=[];let l,u,d=0;for(const t of e)c[d]=r?r(t,d):d,a[d]=n(t,d),d++;let h=0,f=i.length-1,p=0,g=a.length-1;for(;h<=f&&p<=g;)if(null===i[h])h++;else if(null===i[f])f--;else if(o[h]===c[p])s[p]=Dp(i[h],a[p]),h++,p++;else if(o[f]===c[g])s[g]=Dp(i[f],a[g]),f--,g--;else if(o[h]===c[g])s[g]=Dp(i[h],a[g]),Pp(t,i[h],s[g+1]),h++,g--;else if(o[f]===c[p])s[p]=Dp(i[f],a[p]),Pp(t,i[f],i[h]),f--,p++;else if(void 0===l&&(l=zp(c,p,g),u=zp(o,h,f)),l.has(o[h]))if(l.has(o[f])){const e=u.get(c[p]),n=void 0!==e?i[e]:null;if(null===n){const e=Rp(t,i[h]);Dp(e,a[p]),s[p]=e}else s[p]=Dp(n,a[p]),Pp(t,n,i[h]),i[e]=null;p++}else Lp(i[f]),f--;else Lp(i[h]),h++;for(;p<=g;){const e=Rp(t,s[g+1]);Dp(e,a[p]),s[p++]=e}for(;h<=f;){const e=i[h++];null!==e&&Lp(e)}Fp.set(t,s),Bp.set(t,c)}});function Hp(){const e=Wp(['<div class="empty-history-feedback form-help"><span>',"</span></div>"]);return Hp=function(){return e},e}function Up(){const e=Wp(["",""]);return Up=function(){return e},e}function $p(){const e=Wp(["\n    <converse-chat-message\n        .chatview=","\n        .hats=","\n        .model=","\n        ?correcting=","\n        ?editable=","\n        ?has_mentions=","\n        ?is_delayed=","\n        ?is_encrypted=","\n        ?is_first_unread=","\n        ?is_me_message=","\n        ?is_only_emojis=","\n        ?is_retracted=","\n        ?is_spoiler=","\n        ?is_spoiler_visible=","\n        ?retractable=","\n        edited=","\n        error=","\n        error_text=","\n        filename=","\n        filesize=","\n        from=","\n        message_type=","\n        moderated_by=","\n        moderation_reason=","\n        msgid=","\n        occupant_affiliation=","\n        occupant_role=","\n        oob_url=","\n        pretty_type=","\n        progress=","\n        reason=","\n        received=","\n        retry_event_id=","\n        sender=","\n        spoiler_hint=","\n        subject=","\n        time=","\n        username=","></converse-chat-message>\n"]);return $p=function(){return e},e}function Wp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const Gp=zd("No message history available.");function Vp(e){const t=e.collection.models,n=t.indexOf(e),r=t[n-1];if(!r||En()(e.get("time")).isAfter(En()(r.get("time")),"day")){const t=En()(e.get("time")).startOf("day");return i={type:"date",time:t.toISOString(),datestring:t.format("dddd MMM Do YYYY")},Za(Mp(),i.time,i.time,i.datestring)}var i}function Jp(e,t){return{has_mentions:"groupchat"===t.get("type")&&"them"===t.get("sender")&&e.isUserMentioned(t),hats:Uc.getHats(t),is_first_unread:e.get("first_unread_id")===t.get("id"),is_me_message:t.isMeCommand(),is_retracted:t.get("retracted")||"retracted"===t.get("moderated"),username:t.getDisplayName()}}Uc.getHats=function(e){if("groupchat"===e.get("type")){var t;const n=Vc.settings.get("muc_hats").filter(e=>e).map(e=>e.toLowerCase());let r=[];n.includes("vcard_roles")&&(r=e.vcard?e.vcard.get("role"):null,r=r?r.split(",").filter(e=>e).map(e=>({title:e})):[]);const i=[...e.occupant?[e.occupant.get("role")]:[],...e.occupant?[e.occupant.get("affiliation")]:[]].filter(e=>e).filter(e=>n.includes(e.toLowerCase())).map(e=>({title:e}));return[...n.includes("xep317")&&(null===(t=e.occupant)||void 0===t?void 0:t.get("hats"))||[],...r,...i]}return[]};Vc.elements.define("converse-message-history",class extends mc{static get properties(){return{chatview:{type:Object},messages:{type:Array}}}render(){const e=this.messages;return e.length?Za(Up(),qp(e,e=>e.get("id"),e=>this.renderMessage(e))):Za(Hp(),Gp)}renderMessage(e){if(e.get("dangling_retraction")||e.get("is_only_key"))return"";const t=Vp(e);var n;return[...t?[t]:[],(n=Object.assign(e.toJSON(),Jp(this.chatview.model,e),{chatview:this.chatview,model:e}),Za($p(),n.chatview,n.hats,n.model,n.correcting,n.editable,n.has_mentions,n.is_delayed,!!n.is_encrypted,n.is_first_unread,n.is_me_message,n.is_only_emojis,n.is_retracted,n.is_spoiler,n.is_spoiler_visible,n.retractable,n.edited||"",n.error||"",n.error_text||"",n.filename||"",n.filesize||"",n.from,n.type||"",n.moderated_by||"",n.moderation_reason||"",n.msgid,n.model.occupant?n.model.occupant.get("affiliation"):"",n.model.occupant?n.model.occupant.get("role"):"",n.oob_url||"",n.pretty_type,n.progress||0,n.reason||"",n.received||"",n.retry_event_id||"",n.sender,n.spoiler_hint||"",n.subject||"",n.time,n.username))]}});var Xp=n(18),Qp=n.n(Xp);
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -438,7 +447,7 @@ const Xf=(e,t)=>{const n=e.startNode.parentNode,r=void 0===t?e.endNode:t.startNo
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-const fp=new WeakMap,pp=Ea(e=>t=>{if(!(t instanceof Da))throw new Error("unsafeHTML can only be used in text bindings");const n=fp.get(t);if(void 0!==n&&Na(e)&&e===n.value&&t.value===n.fragment)return;const r=document.createElement("template");r.innerHTML=e;const i=document.importNode(r.content,!0);t.setValue(i),fp.set(t,{value:e,fragment:i})});function gp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n            <converse-message-history\n                .chatview=","\n                .messages=",'>\n            </converse-message-history>\n            <div class="chat-content__notifications">',"</div>\n        "]);return gp=function(){return e},e}function mp(){const e=_p(['<svg .style="','"> <use href="','"> </use> </svg>']);return mp=function(){return e},e}function vp(){const e=_p(["\n            :host {\n                display: inline-block;\n                padding: 0;\n                margin: 0;\n            }\n        "]);return vp=function(){return e},e}function _p(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
+const Yp=new WeakMap,Kp=ka(e=>t=>{if(!(t instanceof qa))throw new Error("unsafeHTML can only be used in text bindings");const n=Yp.get(t);if(void 0!==n&&La(e)&&e===n.value&&t.value===n.fragment)return;const r=document.createElement("template");r.innerHTML=e;const i=document.importNode(r.content,!0);t.setValue(i),Yp.set(t,{value:e,fragment:i})});function Zp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n            <converse-message-history\n                .chatview=","\n                .messages=",'>\n            </converse-message-history>\n            <div class="chat-content__notifications">',"</div>\n        "]);return Zp=function(){return e},e}function eg(){const e=ng(['<svg .style="','"> <use href="','"> </use> </svg>']);return eg=function(){return e},e}function tg(){const e=ng(["\n            :host {\n                display: inline-block;\n                padding: 0;\n                margin: 0;\n            }\n        "]);return tg=function(){return e},e}function ng(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
  * @module icons.js
  * @copyright Alfredo Medrano Sánchez and the Converse.js contributors
@@ -446,7 +455,7 @@ const fp=new WeakMap,pp=Ea(e=>t=>{if(!(t instanceof Da))throw new Error("unsafeH
  *  Component inspired by the one from fa-icons
  *  https://github.com/obsidiansoft-io/fa-icons/blob/master/LICENSE
  * @license Mozilla Public License (MPLv2)
- */qc.elements.define("converse-chat-content",class extends uc{static get properties(){return{chatview:{type:Object},messages:{type:Array},notifications:{type:String}}}render(){const e=hp.a.filterXSS(this.notifications,{whiteList:{}});return Ga(gp(),this.chatview,this.messages,pp(e))}});function bp(){const e=wp(['<div class="message chat-','" data-isodate="','">',"</div>"]);return bp=function(){return e},e}function yp(){const e=wp(['<converse-icon class="fas fa-times close-chat-help"\n                    @click=','\n                    path-prefix="','"\n                    size="1em"></converse-icon>']);return yp=function(){return e},e}function wp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}customElements.define("converse-icon",class extends uc{static get properties(){return{color:String,class_name:{attribute:"class"},style:String,size:String}}static get styles(){return ac(vp())}constructor(){super(),this.class_name="",this.style="",this.size="",this.color=""}getSource(){return"#icon-".concat(this.class_name.split(" ")[1].replace("fa-",""))}getStyles(){return"\n            ".concat(this.size?"width: ".concat(this.size,";"):"","\n            ").concat(this.size?"height: ".concat(this.size,";"):"","\n            ").concat(this.color?"fill: ".concat(this.color,";"):"","\n            ").concat(this.style,"\n        ")}render(){return Ga(mp(),this.getStyles(),this.getSource())}});function Sp(){const e=Np(["<converse-emoji-picker-content\n                .chatview=","\n                .model=",'\n                .search_results="','"\n                current_skintone="','"\n                query="','"></converse-emoji-picker-content>']);return Sp=function(){return e},e}function xp(){const e=Np(['\n        <div class="emoji-picker__header">\n            <input class="form-control emoji-search" name="emoji-search" placeholder="','"\n                .value=',"\n                @keydown=","\n                @blur=","\n                @focus=",">\n            ","\n        </div>\n        ",'\n\n        <div class="emoji-skintone-picker">\n            <label>Skin tone</label>\n            <ul>',"</ul>\n        </div>"]);return xp=function(){return e},e}function Ep(){const e=Np(['\n        <li data-skintone="','" class="emoji-skintone ','">\n            <a class="pick-skintone" href="#" data-skintone="','" @click=',">","</a>\n        </li>"]);return Ep=function(){return e},e}function Ap(){const e=Np(["\n        <span ?hidden=",' class="emoji-lists__container emoji-lists__container--browse">\n            ',"\n        </span>"]);return Ap=function(){return e},e}function Cp(){const e=Np(['\n        <a id="emoji-picker-','" class="emoji-category__heading" data-category="','">','</a>\n        <ul class="emoji-picker" data-category="','">\n            ',"\n        </ul>"]);return Cp=function(){return e},e}function jp(){const e=Np(["\n        <span ?hidden=",' class="emoji-lists__container emojis-lists__container--search">\n        <a id="emoji-picker-search-results" class="emoji-category__heading">','</a>\n        <ul class="emoji-picker">\n            ',"\n        </ul>\n        </span>\n    "]);return jp=function(){return e},e}function Tp(){const e=Np(['\n        <li class="emoji insert-emoji ','" data-emoji="','" title="','">\n            <a href="#" @click=',' data-emoji="','">',"</a>\n        </li>\n    "]);return Tp=function(){return e},e}function Op(){const e=Np(["<ul>","</ul>"]);return Op=function(){return e},e}function kp(){const e=Np(['\n        <li data-category="','"\n            class="emoji-category '," ",'"\n            title="','">\n\n            <a class="pick-category"\n               @click=','\n               href="#emoji-picker-','"\n               data-category="','">'," </a>\n        </li>\n    "]);return kp=function(){return e},e}function Np(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-chat-help",class extends uc{static get properties(){return{chat_type:{type:String},messages:{type:Array},model:{type:Object},type:{type:String}}}render(){const e=(new Date).toISOString();return[Ga(yp(),this.close,qc.settings.get("assets_path")),...this.messages.map(t=>this.renderHelpMessage({isodate:e,markup:hp.a.filterXSS(t,{whiteList:{strong:[]}})}))]}close(){this.model.set({show_help_messages:!1})}renderHelpMessage(e){return Ga(bp(),this.type,e.isodate,pp(e.markup))}});const Ip=Yc.env.utils,Mp=e=>{const t=qc.settings.get("emoji_categories");return Ga(Op(),Object.keys(t).map(n=>t[n]?(e=>Ga(kp(),e.category,e.category,e.current_category===e.category?"picked":"",dd(Lc.emoji_category_labels[e.category]),e.onCategoryPicked,e.category,e.category,e.emoji))(Object.assign({category:n,emoji:e.sn2Emoji(t[n])},e)):""))},Rp=e=>Ga(Tp(),e.shouldBeHidden(e.emoji.sn)?"hidden":"",e.emoji.sn,e.emoji.sn,e.insertEmoji,e.emoji.sn,Ip.shortnamesToEmojis(e.emoji.sn)),Dp=e=>{const t=qc.settings.get("emoji_categories");return Ga(Ap(),e.query,Object.keys(t).map(n=>t[n]?(e=>Ga(Cp(),e.category,e.category,dd(qc.settings.get("emoji_category_labels")[e.category]),e.category,Object.values(Yc.emojis.json[e.category]).map(t=>Rp(Object.assign({emoji:t},e)))))(Object.assign({category:n},e)):""))},Pp=e=>{const t=dd("Search");return Ga(xp(),t,e.query||"",e.onSearchInputKeyDown,e.onSearchInputBlurred,e.onSearchInputFocus,e.query?"":Mp(e),e.render_emojis?Ga(Sp(),e.chatview,e.model,e.search_results,e.current_skintone,e.query):"",["tone1","tone2","tone3","tone4","tone5"].map(t=>(e=>Ga(Ep(),e.skintone,e.current_skintone===e.skintone?"picked":"",e.skintone,e.onSkintonePicked,Ip.shortnamesToEmojis(":"+e.skintone+":")))(Object.assign({skintone:t},e))))};function Lp(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n          <div class="emoji-picker__lists">\n              ',"\n              ","\n          </div>\n      "]);return Lp=function(){return e},e}function zp(){const e=Bp(["\n                        <converse-emoji-picker\n                                .chatview=","\n                                .model=","\n                                ?render_emojis=",'\n                                current_category="','"\n                                current_skintone="','"\n                                query="','"\n                        ></converse-emoji-picker>']);return zp=function(){return e},e}function Fp(){const e=Bp(['\n            <div class="dropup">\n                <button class="toggle-emojis"\n                        title="','"\n                        data-toggle="dropdown"\n                        aria-haspopup="true"\n                        aria-expanded="false">\n                    <converse-icon\n                        class="fa fa-smile "\n                        path-prefix="','"\n                        size="1em"></converse-icon>\n                </button>\n                <div class="dropdown-menu">\n                    ',"\n                </div>\n            </div>"]);return Fp=function(){return e},e}function Bp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-emoji-picker-content",class extends uc{static get properties(){return{chatview:{type:Object},search_results:{type:Array},current_skintone:{type:String},model:{type:Object},query:{type:String}}}render(){const e={current_skintone:this.current_skintone,insertEmoji:e=>this.insertEmoji(e),query:this.query,search_results:this.search_results,shouldBeHidden:e=>this.shouldBeHidden(e)};return Ga(Lp(),(e=>{const t=dd("Search results");return Ga(jp(),!e.query,t,e.search_results.map(t=>Rp(Object.assign({emoji:t},e))))})(e),Dp(e))}firstUpdated(){this.initIntersectionObserver()}initIntersectionObserver(){if(window.IntersectionObserver){if(this.observer)this.observer.disconnect();else{const e={root:this.querySelector(".emoji-picker__lists"),threshold:[.1]},t=e=>this.setCategoryOnVisibilityChange(e);this.observer=new IntersectionObserver(t,e)}ur()(".emoji-picker",this).forEach(e=>this.observer.observe(e))}}setCategoryOnVisibilityChange(e){const t=this.parentElement.navigator.selected,n=e.filter(e=>e.target.contains(t)).pop();let r;if(r=n||e.reduce((e,t)=>t.intersectionRatio>=((null==e?void 0:e.intersectionRatio)||0)?t:e,null),r&&r.isIntersecting){const e=r.target.getAttribute("data-category");e!==this.model.get("current_category")&&(this.parentElement.preserve_scroll=!0,this.model.save({current_category:e}))}}insertEmoji(e){e.preventDefault(),e.stopPropagation();const t="IMG"===e.target.nodeName?e.target.parentElement:e.target;this.parentElement.insertIntoTextArea(t.getAttribute("data-emoji"))}shouldBeHidden(e){if(e.includes("_tone")){if(!this.current_skintone||!e.includes(this.current_skintone))return!0}else if(this.current_skintone&&Yc.emojis.toned.includes(e))return!0;return!(!this.query||Lc.FILTER_CONTAINS(e,this.query))}});const qp=Yc.env.utils;function Hp(){const e=Zp(["",""]);return Hp=function(){return e},e}function Up(){const e=Zp(['\n            <button class="toggle-compose-spoiler"\n                    title="','"\n                    @click=','>\n                <converse-icon class="fa ','"\n                         path-prefix="','"\n                         size="1em"></converse-icon>\n            </button>']);return Up=function(){return e},e}function $p(){const e=Zp(['\n                <button title="','" @click=','>\n                    <converse-icon class="fa fa-paperclip"\n                        path-prefix="','"\n                        size="1em"></converse-icon>\n                </button>\n                <input type="file" @change=',' class="fileupload" multiple="" style="display:none"/>']);return $p=function(){return e},e}function Wp(){const e=Zp(['\n                <button class="toggle_occupants right"\n                        title="','"\n                        @click=','>\n                    <converse-icon class="fa ','"\n                             path-prefix="','" size="1em"></converse-icon>\n                </button>']);return Wp=function(){return e},e}function Vp(){const e=Zp(["",""]);return Vp=function(){return e},e}function Gp(){const e=Zp(['<span class="right message-limit" title="','">',"</span>"]);return Gp=function(){return e},e}function Jp(){const e=Zp(['\n                <button class="toggle-call" @click=',' title="','">\n                    <converse-icon class="fa fa-phone" path-prefix="/dist" size="1em"></converse-icon>\n                </button>']);return Jp=function(){return e},e}function Xp(){const e=Zp(["<converse-emoji-dropdown .chatview=","></converse-dropdown>"]);return Xp=function(){return e},e}function Qp(){const e=Zp(['<button type="submit" class="btn send-button fa fa-paper-plane" title="','"></button>']);return Qp=function(){return e},e}function Yp(){const e=Zp(['<span class="toolbar-buttons">',"</span>"]);return Yp=function(){return e},e}function Kp(){const e=Zp(["\n            ","\n            ","\n        "]);return Kp=function(){return e},e}function Zp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-emoji-dropdown",class extends of{static get properties(){return{chatview:{type:Object}}}constructor(){super(),this.render_emojis=!1}initModel(){return this.init_promise||(this.init_promise=(async()=>{await qc.emojis.initialize();const e="converse.emoji-".concat(Lc.bare_jid,"-").concat(this.chatview.model.get("jid"));this.model=new Lc.EmojiPicker({id:e}),this.model.browserStorage=Lc.createStore(e),await new Promise(e=>this.model.fetch({success:e,error:e})),this.model.set({autocompleting:null,ac_position:null})})()),this.init_promise}render(){return Ga(Fp(),dd("Insert emojis"),qc.settings.get("assets_path"),oh(this.initModel().then(()=>Ga(zp(),this.chatview,this.model,this.render_emojis,this.model.get("current_category")||"",this.model.get("current_skintone")||"",this.model.get("query")||"")),""))}connectedCallback(){super.connectedCallback(),this.render_emojis=!1}toggleMenu(e){e.stopPropagation(),e.preventDefault(),qp.hasClass("show",this.menu)?qp.ancestor(e.target,".toggle-emojis")&&this.hideMenu():this.showMenu()}async showMenu(){await this.initModel(),this.render_emojis||(this.render_emojis=!0,await this.requestUpdate()),super.showMenu(),setTimeout(()=>{var e;return null===(e=this.querySelector(".emoji-search"))||void 0===e?void 0:e.focus()})}}),qc.elements.define("converse-emoji-picker",class extends uc{static get properties(){return{chatview:{type:Object},current_category:{type:String,reflect:!0},current_skintone:{type:String,reflect:!0},model:{type:Object},query:{type:String,reflet:!0},render_emojis:{type:Boolean}}}firstUpdated(){this.listenTo(this.model,"change",e=>this.onModelChanged(e.changed)),this.initArrowNavigation()}constructor(){super(),this._search_results=[],this.debouncedFilter=Tc(e=>this.model.set({query:e.value}),250),this.registerEvents()}get search_results(){return this._search_results}set search_results(e){this._search_results=e,this.requestUpdate()}render(){return Pp({chatview:this.chatview,current_category:this.current_category,current_skintone:this.current_skintone,model:this.model,onCategoryPicked:e=>this.chooseCategory(e),onSearchInputBlurred:e=>this.chatview.emitFocused(e),onSearchInputFocus:e=>this.onSearchInputFocus(e),onSearchInputKeyDown:e=>this.onKeyDown(e),onSkintonePicked:e=>this.chooseSkinTone(e),query:this.query,search_results:this.search_results,render_emojis:this.render_emojis,sn2Emoji:e=>qp.shortnamesToEmojis(this.getTonedShortname(e))})}updated(e){e.has("query")&&this.updateSearchResults(e),e.has("current_category")&&this.setScrollPosition()}onModelChanged(e){"current_category"in e&&(this.current_category=e.current_category),"current_skintone"in e&&(this.current_skintone=e.current_skintone),"query"in e&&(this.query=e.query)}setScrollPosition(){if(this.preserve_scroll)return void(this.preserve_scroll=!1);const e=this.querySelector(".emoji-lists__container--browse"),t=this.querySelector("#emoji-picker-".concat(this.current_category));t&&(e.scrollTop=t.offsetTop-3*t.offsetHeight+4)}updateSearchResults(e){const t=e.get("query"),n=Lc.FILTER_CONTAINS;if(this.query){if(this.query===t)return this.search_results;t&&this.query.includes(t)?this.search_results=this.search_results.filter(e=>n(e.sn,this.query)):this.search_results=Yc.emojis.list.filter(e=>n(e.sn,this.query))}else this.search_results.length&&(this.search_results=[]);this.requestUpdate()}registerEvents(){this.onGlobalKeyDown=e=>this._onGlobalKeyDown(e),document.querySelector("body").addEventListener("keydown",this.onGlobalKeyDown)}connectedCallback(){super.connectedCallback(),this.registerEvents()}disconnectedCallback(){document.querySelector("body").removeEventListener("keydown",this.onGlobalKeyDown),super.disconnectedCallback()}_onGlobalKeyDown(e){this.navigator&&(e.keyCode===Yc.keycodes.ENTER&&this.navigator.selected&&qp.isVisible(this)?this.onEnterPressed(e):e.keyCode===Yc.keycodes.DOWN_ARROW&&!this.navigator.enabled&&qp.isVisible(this)&&this.enableArrowNavigation(e))}setCategoryForElement(e){const t=this.current_category,n=(null==e?void 0:e.getAttribute("data-category"))||t;t!==n&&this.model.save({current_category:n})}insertIntoTextArea(e){this.chatview.onEmojiReceivedFromPicker(e),this.model.set({autocompleting:null,query:"",ac_position:null})}chooseSkinTone(e){e.preventDefault(),e.stopPropagation();const t=("IMG"===e.target.nodeName?e.target.parentElement:e.target).getAttribute("data-skintone").trim();this.current_skintone===t?this.model.save({current_skintone:""}):this.model.save({current_skintone:t})}chooseCategory(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation();const t=e.target.matches("li")?e.target:qp.ancestor(e.target,"li");this.setCategoryForElement(t),this.navigator.select(t),!this.navigator.enabled&&this.navigator.enable()}onKeyDown(e){if(e.keyCode===Yc.keycodes.TAB)if(e.target.value){e.preventDefault();const t=Yc.emojis.shortnames.find(t=>Lc.FILTER_CONTAINS(t,e.target.value));t&&this.model.set({query:t})}else this.navigator.enabled||this.enableArrowNavigation(e);else e.keyCode!==Yc.keycodes.DOWN_ARROW||this.navigator.enabled?e.keyCode===Yc.keycodes.ENTER?this.onEnterPressed(e):e.keyCode===Yc.keycodes.ESCAPE?(qp.ancestor(this,"converse-emoji-dropdown").hideMenu(),this.chatview.el.querySelector(".chat-textarea").focus(),e.stopPropagation(),e.preventDefault()):e.keyCode!==Yc.keycodes.ENTER&&e.keyCode!==Yc.keycodes.DOWN_ARROW&&this.debouncedFilter(e.target):this.enableArrowNavigation(e)}onEnterPressed(e){e.emoji_keypress_handled||(e.preventDefault(),e.stopPropagation(),e.emoji_keypress_handled=!0,Yc.emojis.shortnames.includes(e.target.value)?this.insertIntoTextArea(e.target.value):1===this.search_results.length?this.insertIntoTextArea(this.search_results[0].sn):this.navigator.selected&&this.navigator.selected.matches(".insert-emoji")?this.insertIntoTextArea(this.navigator.selected.getAttribute("data-emoji")):this.navigator.selected&&this.navigator.selected.matches(".emoji-category")&&this.chooseCategory({target:this.navigator.selected}))}onSearchInputFocus(e){this.chatview.emitBlurred(e),this.disableArrowNavigation()}getTonedShortname(e){return Yc.emojis.toned.includes(e)&&this.current_skintone?"".concat(e.slice(0,e.length-1),"_").concat(this.current_skintone,":"):e}initArrowNavigation(){if(!this.navigator){const e="li:not(.hidden):not(.emoji-skintone), .emoji-search",t={jump_to_picked:".emoji-category",jump_to_picked_selector:".emoji-category.picked",jump_to_picked_direction:nf.DIRECTION.down,picked_selector:".picked",scroll_container:this.querySelector(".emoji-picker__lists"),getSelector:t=>{if(t===nf.DIRECTION.down){const t=this.navigator.selected&&this.navigator.selected.getAttribute("data-category");return t?'ul[data-category="'.concat(t,'"] li:not(.hidden):not(.emoji-skintone), .emoji-search'):e}return e},onSelected:e=>{e.matches(".insert-emoji")&&this.setCategoryForElement(e.parentElement),e.matches(".insert-emoji, .emoji-category")&&e.firstElementChild.focus(),e.matches(".emoji-search")&&e.focus()}};this.navigator=new nf(this,t)}}disableArrowNavigation(){this.navigator.disable()}enableArrowNavigation(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.disableArrowNavigation(),this.navigator.enable(),this.navigator.handleKeydown(e)}});const eg=Yc.env.Strophe;window.customElements.define("converse-chat-toolbar",class extends uc{static get properties(){return{chatview:{type:Object},composing_spoiler:{type:Boolean},hidden_occupants:{type:Boolean},is_groupchat:{type:Boolean},message_limit:{type:Number},model:{type:Object},show_call_button:{type:Boolean},show_emoji_button:{type:Boolean},show_occupants_toggle:{type:Boolean},show_send_button:{type:Boolean},show_spoiler_button:{type:Boolean},show_toolbar:{type:Boolean}}}render(){const e=dd("Send the message");return Ga(Kp(),this.show_toolbar?Ga(Yp(),oh(this.getButtons(),"")):"",this.show_send_button?Ga(Qp(),e):"")}getButtons(){const e=[];if(this.show_emoji_button&&e.push(Ga(Xp(),this.chatview)),this.show_call_button){const t=dd("Start a call");e.push(Ga(Jp(),this.toggleCall,t))}const t=dd("Message characters remaining");qc.settings.get("message_limit")&&e.push(Ga(Gp(),t,this.message_limit)),this.show_spoiler_button&&e.push(this.getSpoilerButton());const n=qc.disco.supports(eg.NS.HTTPUPLOAD,Lc.domain);if(e.push(Ga(Vp(),oh(n.then(e=>this.getHTTPUploadButton(e)),""))),this.show_occupants_toggle){const t=dd("Hide participants"),n=dd("Show participants");e.push(Ga(Wp(),this.hidden_occupants?n:t,this.toggleOccupants,this.hidden_occupants?"fa-angle-double-left":"fa-angle-double-right",qc.settings.get("assets_path")))}return Lc.api.hook("getToolbarButtons",this,e)}getHTTPUploadButton(e){if(e){const e=dd("Choose a file to send");return Ga($p(),e,this.toggleFileUpload,qc.settings.get("assets_path"),this.onFileSelection)}return""}getSpoilerButton(){const e=this.model;if(!this.is_groupchat&&0===e.presence.resources.length)return;let t;t=this.composing_spoiler?dd("Click to write as a normal (non-spoiler) message"):dd("Click to write your message as a spoiler");const n=Ga(Up(),t,this.toggleComposeSpoilerMessage,this.composing_spoiler?"fa-eye-slash":"fa-eye",qc.settings.get("assets_path"));if(this.is_groupchat)return n;{const t=e.get("jid"),r=Promise.all(e.presence.resources.map(e=>qc.disco.supports(eg.NS.SPOILER,"".concat(t,"/").concat(e.get("name"))))).then(e=>e.reduce((e,t)=>e&&t,!0));return Ga(Hp(),oh(r.then(()=>n),""))}}toggleFileUpload(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.querySelector(".fileupload").click()}onFileSelection(e){this.model.sendFiles(e.target.files)}toggleComposeSpoilerMessage(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.set("composing_spoiler",!this.model.get("composing_spoiler"))}toggleOccupants(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.save({hidden_occupants:!this.model.get("hidden_occupants")})}toggleCall(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),qc.trigger("callButtonClicked",{connection:Lc.connection,model:this.model})}});class tg extends HTMLElement{async connectedCallback(){await qc.waitUntil("initialized"),Yc.insertInto(this)}}function ng(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="inner-content converse-brand row">\n        <div class="converse-brand__padding"></div>\n        <div class="converse-brand__heading">\n            <svg height="200px"\n                xmlns="http://www.w3.org/2000/svg"\n                xmlns:xlink="http://www.w3.org/1999/xlink"\n                viewBox="0 0 364 364"\n                version="1.1">\n                <title>Logo Converse</title>\n                <defs>\n                    <linearGradient id="gradient" x1="92.14" y1="27.64" x2="267.65" y2="331.62" gradientUnits="userSpaceOnUse">\n                        <stop offset="0" stop-color="#fff1d1"/>\n                        <stop offset="0.05" stop-color="#fae8c1"/>\n                        <stop offset="0.15" stop-color="#f0d5a1"/>\n                        <stop offset="0.27" stop-color="#e7c687"/>\n                        <stop offset="0.4" stop-color="#e1bb72"/>\n                        <stop offset="0.54" stop-color="#dcb264"/>\n                        <stop offset="0.71" stop-color="#daad5c"/>\n                        <stop offset="1" stop-color="#d9ac59"/>\n                    </linearGradient>\n                    <filter id="shadow">\n                        <feGaussianBlur in="SourceAlpha" stdDeviation="2.3" result="blur1"/>\n                        <feOffset in="blur1" dx="3" dy="3" result="blur2"/>\n                        <feColorMatrix in="blur2" type="matrix" result="blur3"\n                            values="1 0 0 0 0.1\n                                    0 1 0 0 0.1\n                                    0 0 1 0 0.1\n                                    0 0 0 1 0"/>\n                        <feMerge>\n                            <feMergeNode in="blur3"/>\n                            <feMergeNode in="SourceGraphic"/>\n                        </feMerge>\n                    </filter>\n                </defs>\n                <g filter="url(#shadow)">\n                    <path d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" fill="#d9ac59"/>\n                    <path d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" fill="url(#gradient)"/>\n                </g>\n            </svg>\n            <span class="converse-brand__text">\n                <span>converse<span class="subdued">.js</span></span>\n                <p class="byline">messaging freedom</p>\n            </span>\n        </div>\n    </div>']);return ng=function(){return e},e}customElements.define("converse-root",tg);
+ */Vc.elements.define("converse-chat-content",class extends mc{static get properties(){return{chatview:{type:Object},messages:{type:Array},notifications:{type:String}}}render(){const e=Qp.a.filterXSS(this.notifications,{whiteList:{}});return Za(Zp(),this.chatview,this.messages,Kp(e))}});function rg(){const e=og(['<div class="message chat-','" data-isodate="','">',"</div>"]);return rg=function(){return e},e}function ig(){const e=og(['<converse-icon class="fas fa-times close-chat-help"\n                    @click=','\n                    path-prefix="','"\n                    size="1em"></converse-icon>']);return ig=function(){return e},e}function og(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}customElements.define("converse-icon",class extends mc{static get properties(){return{color:String,class_name:{attribute:"class"},style:String,size:String}}static get styles(){return fc(tg())}constructor(){super(),this.class_name="",this.style="",this.size="",this.color=""}getSource(){return"#icon-".concat(this.class_name.split(" ")[1].replace("fa-",""))}getStyles(){return"\n            ".concat(this.size?"width: ".concat(this.size,";"):"","\n            ").concat(this.size?"height: ".concat(this.size,";"):"","\n            ").concat(this.color?"fill: ".concat(this.color,";"):"","\n            ").concat(this.style,"\n        ")}render(){return Za(eg(),this.getStyles(),this.getSource())}});function sg(){const e=gg(["<converse-emoji-picker-content\n                .chatview=","\n                .model=",'\n                .search_results="','"\n                current_skintone="','"\n                query="','"></converse-emoji-picker-content>']);return sg=function(){return e},e}function ag(){const e=gg(['\n        <div class="emoji-picker__header">\n            <input class="form-control emoji-search" name="emoji-search" placeholder="','"\n                .value=',"\n                @keydown=","\n                @blur=","\n                @focus=",">\n            ","\n        </div>\n        ",'\n\n        <div class="emoji-skintone-picker">\n            <label>Skin tone</label>\n            <ul>',"</ul>\n        </div>"]);return ag=function(){return e},e}function cg(){const e=gg(['\n        <li data-skintone="','" class="emoji-skintone ','">\n            <a class="pick-skintone" href="#" data-skintone="','" @click=',">","</a>\n        </li>"]);return cg=function(){return e},e}function lg(){const e=gg(["\n        <span ?hidden=",' class="emoji-lists__container emoji-lists__container--browse">\n            ',"\n        </span>"]);return lg=function(){return e},e}function ug(){const e=gg(['\n        <a id="emoji-picker-','" class="emoji-category__heading" data-category="','">','</a>\n        <ul class="emoji-picker" data-category="','">\n            ',"\n        </ul>"]);return ug=function(){return e},e}function dg(){const e=gg(["\n        <span ?hidden=",' class="emoji-lists__container emojis-lists__container--search">\n        <a id="emoji-picker-search-results" class="emoji-category__heading">','</a>\n        <ul class="emoji-picker">\n            ',"\n        </ul>\n        </span>\n    "]);return dg=function(){return e},e}function hg(){const e=gg(['\n        <li class="emoji insert-emoji ','" data-emoji="','" title="','">\n            <a href="#" @click=',' data-emoji="','">',"</a>\n        </li>\n    "]);return hg=function(){return e},e}function fg(){const e=gg(["<ul>","</ul>"]);return fg=function(){return e},e}function pg(){const e=gg(['\n        <li data-category="','"\n            class="emoji-category '," ",'"\n            title="','">\n\n            <a class="pick-category"\n               @click=','\n               href="#emoji-picker-','"\n               data-category="','">'," </a>\n        </li>\n    "]);return pg=function(){return e},e}function gg(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-chat-help",class extends mc{static get properties(){return{chat_type:{type:String},messages:{type:Array},model:{type:Object},type:{type:String}}}render(){const e=(new Date).toISOString();return[Za(ig(),this.close,Vc.settings.get("assets_path")),...this.messages.map(t=>this.renderHelpMessage({isodate:e,markup:Qp.a.filterXSS(t,{whiteList:{strong:[]}})}))]}close(){this.model.set({show_help_messages:!1})}renderHelpMessage(e){return Za(rg(),this.type,e.isodate,Kp(e.markup))}});const mg=rl.env.utils,vg=e=>{const t=Vc.settings.get("emoji_categories");return Za(fg(),Object.keys(t).map(n=>t[n]?(e=>Za(pg(),e.category,e.category,e.current_category===e.category?"picked":"",zd(Uc.emoji_category_labels[e.category]),e.onCategoryPicked,e.category,e.category,e.emoji))(Object.assign({category:n,emoji:e.sn2Emoji(t[n])},e)):""))},_g=e=>Za(hg(),e.shouldBeHidden(e.emoji.sn)?"hidden":"",e.emoji.sn,e.emoji.sn,e.insertEmoji,e.emoji.sn,mg.shortnamesToEmojis(e.emoji.sn)),bg=e=>{const t=Vc.settings.get("emoji_categories");return Za(lg(),e.query,Object.keys(t).map(n=>t[n]?(e=>Za(ug(),e.category,e.category,zd(Vc.settings.get("emoji_category_labels")[e.category]),e.category,Object.values(rl.emojis.json[e.category]).map(t=>_g(Object.assign({emoji:t},e)))))(Object.assign({category:n},e)):""))},yg=e=>{const t=zd("Search");return Za(ag(),t,e.query||"",e.onSearchInputKeyDown,e.onSearchInputBlurred,e.onSearchInputFocus,e.query?"":vg(e),e.render_emojis?Za(sg(),e.chatview,e.model,e.search_results,e.current_skintone,e.query):"",["tone1","tone2","tone3","tone4","tone5"].map(t=>(e=>Za(cg(),e.skintone,e.current_skintone===e.skintone?"picked":"",e.skintone,e.onSkintonePicked,mg.shortnamesToEmojis(":"+e.skintone+":")))(Object.assign({skintone:t},e))))};function wg(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n          <div class="emoji-picker__lists">\n              ',"\n              ","\n          </div>\n      "]);return wg=function(){return e},e}function Sg(){const e=Eg(["\n                        <converse-emoji-picker\n                                .chatview=","\n                                .model=","\n                                ?render_emojis=",'\n                                current_category="','"\n                                current_skintone="','"\n                                query="','"\n                        ></converse-emoji-picker>']);return Sg=function(){return e},e}function xg(){const e=Eg(['\n            <div class="dropup">\n                <button class="toggle-emojis"\n                        title="','"\n                        data-toggle="dropdown"\n                        aria-haspopup="true"\n                        aria-expanded="false">\n                    <converse-icon\n                        class="fa fa-smile "\n                        path-prefix="','"\n                        size="1em"></converse-icon>\n                </button>\n                <div class="dropdown-menu">\n                    ',"\n                </div>\n            </div>"]);return xg=function(){return e},e}function Eg(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-emoji-picker-content",class extends mc{static get properties(){return{chatview:{type:Object},search_results:{type:Array},current_skintone:{type:String},model:{type:Object},query:{type:String}}}render(){const e={current_skintone:this.current_skintone,insertEmoji:e=>this.insertEmoji(e),query:this.query,search_results:this.search_results,shouldBeHidden:e=>this.shouldBeHidden(e)};return Za(wg(),(e=>{const t=zd("Search results");return Za(dg(),!e.query,t,e.search_results.map(t=>_g(Object.assign({emoji:t},e))))})(e),bg(e))}firstUpdated(){this.initIntersectionObserver()}initIntersectionObserver(){if(window.IntersectionObserver){if(this.observer)this.observer.disconnect();else{const e={root:this.querySelector(".emoji-picker__lists"),threshold:[.1]},t=e=>this.setCategoryOnVisibilityChange(e);this.observer=new IntersectionObserver(t,e)}mr()(".emoji-picker",this).forEach(e=>this.observer.observe(e))}}setCategoryOnVisibilityChange(e){const t=this.parentElement.navigator.selected,n=e.filter(e=>e.target.contains(t)).pop();let r;if(r=n||e.reduce((e,t)=>t.intersectionRatio>=((null==e?void 0:e.intersectionRatio)||0)?t:e,null),r&&r.isIntersecting){const e=r.target.getAttribute("data-category");e!==this.model.get("current_category")&&(this.parentElement.preserve_scroll=!0,this.model.save({current_category:e}))}}insertEmoji(e){e.preventDefault(),e.stopPropagation();const t="IMG"===e.target.nodeName?e.target.parentElement:e.target;this.parentElement.insertIntoTextArea(t.getAttribute("data-emoji"))}shouldBeHidden(e){if(e.includes("_tone")){if(!this.current_skintone||!e.includes(this.current_skintone))return!0}else if(this.current_skintone&&rl.emojis.toned.includes(e))return!0;return!(!this.query||Uc.FILTER_CONTAINS(e,this.query))}});const Ag=rl.env.utils;function Cg(){const e=Lg(["",""]);return Cg=function(){return e},e}function jg(){const e=Lg(['\n            <button class="toggle-compose-spoiler"\n                    title="','"\n                    @click=','>\n                <converse-icon class="fa ','"\n                         path-prefix="','"\n                         size="1em"></converse-icon>\n            </button>']);return jg=function(){return e},e}function Tg(){const e=Lg(['\n                <button title="','" @click=','>\n                    <converse-icon class="fa fa-paperclip"\n                        path-prefix="','"\n                        size="1em"></converse-icon>\n                </button>\n                <input type="file" @change=',' class="fileupload" multiple="" style="display:none"/>']);return Tg=function(){return e},e}function Og(){const e=Lg(['\n                <button class="toggle_occupants right"\n                        title="','"\n                        @click=','>\n                    <converse-icon class="fa ','"\n                             path-prefix="','" size="1em"></converse-icon>\n                </button>']);return Og=function(){return e},e}function kg(){const e=Lg(["",""]);return kg=function(){return e},e}function Ng(){const e=Lg(['<span class="right message-limit" title="','">',"</span>"]);return Ng=function(){return e},e}function Ig(){const e=Lg(['\n                <button class="toggle-call" @click=',' title="','">\n                    <converse-icon class="fa fa-phone" path-prefix="/dist" size="1em"></converse-icon>\n                </button>']);return Ig=function(){return e},e}function Mg(){const e=Lg(["<converse-emoji-dropdown .chatview=","></converse-dropdown>"]);return Mg=function(){return e},e}function Rg(){const e=Lg(['<button type="submit" class="btn send-button fa fa-paper-plane" title="','"></button>']);return Rg=function(){return e},e}function Dg(){const e=Lg(['<span class="toolbar-buttons">',"</span>"]);return Dg=function(){return e},e}function Pg(){const e=Lg(["\n            ","\n            ","\n        "]);return Pg=function(){return e},e}function Lg(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-emoji-dropdown",class extends Zh{static get properties(){return{chatview:{type:Object}}}constructor(){super(),this.render_emojis=!1}initModel(){return this.init_promise||(this.init_promise=(async()=>{await Vc.emojis.initialize();const e="converse.emoji-".concat(Uc.bare_jid,"-").concat(this.chatview.model.get("jid"));this.model=new Uc.EmojiPicker({id:e}),this.model.browserStorage=Uc.createStore(e),await new Promise(e=>this.model.fetch({success:e,error:e})),this.model.set({autocompleting:null,ac_position:null})})()),this.init_promise}render(){return Za(xg(),zd("Insert emojis"),Vc.settings.get("assets_path"),Qh(this.initModel().then(()=>Za(Sg(),this.chatview,this.model,this.render_emojis,this.model.get("current_category")||"",this.model.get("current_skintone")||"",this.model.get("query")||"")),""))}connectedCallback(){super.connectedCallback(),this.render_emojis=!1}toggleMenu(e){e.stopPropagation(),e.preventDefault(),Ag.hasClass("show",this.menu)?Ag.ancestor(e.target,".toggle-emojis")&&this.hideMenu():this.showMenu()}async showMenu(){await this.initModel(),this.render_emojis||(this.render_emojis=!0,await this.requestUpdate()),super.showMenu(),setTimeout(()=>{var e;return null===(e=this.querySelector(".emoji-search"))||void 0===e?void 0:e.focus()})}}),Vc.elements.define("converse-emoji-picker",class extends mc{static get properties(){return{chatview:{type:Object},current_category:{type:String,reflect:!0},current_skintone:{type:String,reflect:!0},model:{type:Object},query:{type:String,reflet:!0},render_emojis:{type:Boolean}}}firstUpdated(){this.listenTo(this.model,"change",e=>this.onModelChanged(e.changed)),this.initArrowNavigation()}constructor(){super(),this._search_results=[],this.debouncedFilter=Rc(e=>this.model.set({query:e.value}),250),this.registerEvents()}get search_results(){return this._search_results}set search_results(e){this._search_results=e,this.requestUpdate()}render(){return yg({chatview:this.chatview,current_category:this.current_category,current_skintone:this.current_skintone,model:this.model,onCategoryPicked:e=>this.chooseCategory(e),onSearchInputBlurred:e=>this.chatview.emitFocused(e),onSearchInputFocus:e=>this.onSearchInputFocus(e),onSearchInputKeyDown:e=>this.onKeyDown(e),onSkintonePicked:e=>this.chooseSkinTone(e),query:this.query,search_results:this.search_results,render_emojis:this.render_emojis,sn2Emoji:e=>Ag.shortnamesToEmojis(this.getTonedShortname(e))})}updated(e){e.has("query")&&this.updateSearchResults(e),e.has("current_category")&&this.setScrollPosition()}onModelChanged(e){"current_category"in e&&(this.current_category=e.current_category),"current_skintone"in e&&(this.current_skintone=e.current_skintone),"query"in e&&(this.query=e.query)}setScrollPosition(){if(this.preserve_scroll)return void(this.preserve_scroll=!1);const e=this.querySelector(".emoji-lists__container--browse"),t=this.querySelector("#emoji-picker-".concat(this.current_category));t&&(e.scrollTop=t.offsetTop-3*t.offsetHeight+4)}updateSearchResults(e){const t=e.get("query"),n=Uc.FILTER_CONTAINS;if(this.query){if(this.query===t)return this.search_results;t&&this.query.includes(t)?this.search_results=this.search_results.filter(e=>n(e.sn,this.query)):this.search_results=rl.emojis.list.filter(e=>n(e.sn,this.query))}else this.search_results.length&&(this.search_results=[]);this.requestUpdate()}registerEvents(){this.onGlobalKeyDown=e=>this._onGlobalKeyDown(e),document.querySelector("body").addEventListener("keydown",this.onGlobalKeyDown)}connectedCallback(){super.connectedCallback(),this.registerEvents()}disconnectedCallback(){document.querySelector("body").removeEventListener("keydown",this.onGlobalKeyDown),super.disconnectedCallback()}_onGlobalKeyDown(e){this.navigator&&(e.keyCode===rl.keycodes.ENTER&&this.navigator.selected&&Ag.isVisible(this)?this.onEnterPressed(e):e.keyCode===rl.keycodes.DOWN_ARROW&&!this.navigator.enabled&&Ag.isVisible(this)&&this.enableArrowNavigation(e))}setCategoryForElement(e){const t=this.current_category,n=(null==e?void 0:e.getAttribute("data-category"))||t;t!==n&&this.model.save({current_category:n})}insertIntoTextArea(e){this.chatview.onEmojiReceivedFromPicker(e),this.model.set({autocompleting:null,query:"",ac_position:null})}chooseSkinTone(e){e.preventDefault(),e.stopPropagation();const t=("IMG"===e.target.nodeName?e.target.parentElement:e.target).getAttribute("data-skintone").trim();this.current_skintone===t?this.model.save({current_skintone:""}):this.model.save({current_skintone:t})}chooseCategory(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation();const t=e.target.matches("li")?e.target:Ag.ancestor(e.target,"li");this.setCategoryForElement(t),this.navigator.select(t),!this.navigator.enabled&&this.navigator.enable()}onKeyDown(e){if(e.keyCode===rl.keycodes.TAB)if(e.target.value){e.preventDefault();const t=rl.emojis.shortnames.find(t=>Uc.FILTER_CONTAINS(t,e.target.value));t&&this.model.set({query:t})}else this.navigator.enabled||this.enableArrowNavigation(e);else e.keyCode!==rl.keycodes.DOWN_ARROW||this.navigator.enabled?e.keyCode===rl.keycodes.ENTER?this.onEnterPressed(e):e.keyCode===rl.keycodes.ESCAPE?(Ag.ancestor(this,"converse-emoji-dropdown").hideMenu(),this.chatview.el.querySelector(".chat-textarea").focus(),e.stopPropagation(),e.preventDefault()):e.keyCode!==rl.keycodes.ENTER&&e.keyCode!==rl.keycodes.DOWN_ARROW&&this.debouncedFilter(e.target):this.enableArrowNavigation(e)}onEnterPressed(e){e.emoji_keypress_handled||(e.preventDefault(),e.stopPropagation(),e.emoji_keypress_handled=!0,rl.emojis.shortnames.includes(e.target.value)?this.insertIntoTextArea(e.target.value):1===this.search_results.length?this.insertIntoTextArea(this.search_results[0].sn):this.navigator.selected&&this.navigator.selected.matches(".insert-emoji")?this.insertIntoTextArea(this.navigator.selected.getAttribute("data-emoji")):this.navigator.selected&&this.navigator.selected.matches(".emoji-category")&&this.chooseCategory({target:this.navigator.selected}))}onSearchInputFocus(e){this.chatview.emitBlurred(e),this.disableArrowNavigation()}getTonedShortname(e){return rl.emojis.toned.includes(e)&&this.current_skintone?"".concat(e.slice(0,e.length-1),"_").concat(this.current_skintone,":"):e}initArrowNavigation(){if(!this.navigator){const e="li:not(.hidden):not(.emoji-skintone), .emoji-search",t={jump_to_picked:".emoji-category",jump_to_picked_selector:".emoji-category.picked",jump_to_picked_direction:Jh.DIRECTION.down,picked_selector:".picked",scroll_container:this.querySelector(".emoji-picker__lists"),getSelector:t=>{if(t===Jh.DIRECTION.down){const t=this.navigator.selected&&this.navigator.selected.getAttribute("data-category");return t?'ul[data-category="'.concat(t,'"] li:not(.hidden):not(.emoji-skintone), .emoji-search'):e}return e},onSelected:e=>{e.matches(".insert-emoji")&&this.setCategoryForElement(e.parentElement),e.matches(".insert-emoji, .emoji-category")&&e.firstElementChild.focus(),e.matches(".emoji-search")&&e.focus()}};this.navigator=new Jh(this,t)}}disableArrowNavigation(){this.navigator.disable()}enableArrowNavigation(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.disableArrowNavigation(),this.navigator.enable(),this.navigator.handleKeydown(e)}});const zg=rl.env.Strophe;window.customElements.define("converse-chat-toolbar",class extends mc{static get properties(){return{chatview:{type:Object},composing_spoiler:{type:Boolean},hidden_occupants:{type:Boolean},is_groupchat:{type:Boolean},message_limit:{type:Number},model:{type:Object},show_call_button:{type:Boolean},show_emoji_button:{type:Boolean},show_occupants_toggle:{type:Boolean},show_send_button:{type:Boolean},show_spoiler_button:{type:Boolean},show_toolbar:{type:Boolean}}}render(){const e=zd("Send the message");return Za(Pg(),this.show_toolbar?Za(Dg(),Qh(this.getButtons(),"")):"",this.show_send_button?Za(Rg(),e):"")}getButtons(){const e=[];if(this.show_emoji_button&&e.push(Za(Mg(),this.chatview)),this.show_call_button){const t=zd("Start a call");e.push(Za(Ig(),this.toggleCall,t))}const t=zd("Message characters remaining");Vc.settings.get("message_limit")&&e.push(Za(Ng(),t,this.message_limit)),this.show_spoiler_button&&e.push(this.getSpoilerButton());const n=Vc.disco.supports(zg.NS.HTTPUPLOAD,Uc.domain);if(e.push(Za(kg(),Qh(n.then(e=>this.getHTTPUploadButton(e)),""))),this.show_occupants_toggle){const t=zd("Hide participants"),n=zd("Show participants");e.push(Za(Og(),this.hidden_occupants?n:t,this.toggleOccupants,this.hidden_occupants?"fa-angle-double-left":"fa-angle-double-right",Vc.settings.get("assets_path")))}return Uc.api.hook("getToolbarButtons",this,e)}getHTTPUploadButton(e){if(e){const e=zd("Choose a file to send");return Za(Tg(),e,this.toggleFileUpload,Vc.settings.get("assets_path"),this.onFileSelection)}return""}getSpoilerButton(){const e=this.model;if(!this.is_groupchat&&0===e.presence.resources.length)return;let t;t=this.composing_spoiler?zd("Click to write as a normal (non-spoiler) message"):zd("Click to write your message as a spoiler");const n=Za(jg(),t,this.toggleComposeSpoilerMessage,this.composing_spoiler?"fa-eye-slash":"fa-eye",Vc.settings.get("assets_path"));if(this.is_groupchat)return n;{const t=e.get("jid"),r=Promise.all(e.presence.resources.map(e=>Vc.disco.supports(zg.NS.SPOILER,"".concat(t,"/").concat(e.get("name"))))).then(e=>e.reduce((e,t)=>e&&t,!0));return Za(Cg(),Qh(r.then(()=>n),""))}}toggleFileUpload(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.querySelector(".fileupload").click()}onFileSelection(e){this.model.sendFiles(e.target.files)}toggleComposeSpoilerMessage(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.set("composing_spoiler",!this.model.get("composing_spoiler"))}toggleOccupants(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.save({hidden_occupants:!this.model.get("hidden_occupants")})}toggleCall(e){var t,n;null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),Vc.trigger("callButtonClicked",{connection:Uc.connection,model:this.model})}});class Fg extends HTMLElement{async connectedCallback(){await Vc.waitUntil("initialized"),rl.insertInto(this)}}customElements.define("converse-root",Fg);const Bg=rl.env.utils;var qg={renderAvatar(e){const t=(e=e||this.el).querySelector("canvas.avatar, svg.avatar");if(null!==t&&this.model.vcard){const e={classes:t.getAttribute("class"),width:t.getAttribute("width"),height:t.getAttribute("height"),image_type:this.model.vcard.get("image_type"),image:this.model.vcard.get("image")};t.outerHTML=Bg.getElementFromTemplateResult(ip(e)).outerHTML}}};function Hg(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="inner-content converse-brand row">\n        <div class="converse-brand__padding"></div>\n        <div class="converse-brand__heading">\n            <svg height="200px"\n                xmlns="http://www.w3.org/2000/svg"\n                xmlns:xlink="http://www.w3.org/1999/xlink"\n                viewBox="0 0 364 364"\n                version="1.1">\n                <title>Logo Converse</title>\n                <defs>\n                    <linearGradient id="gradient" x1="92.14" y1="27.64" x2="267.65" y2="331.62" gradientUnits="userSpaceOnUse">\n                        <stop offset="0" stop-color="#fff1d1"/>\n                        <stop offset="0.05" stop-color="#fae8c1"/>\n                        <stop offset="0.15" stop-color="#f0d5a1"/>\n                        <stop offset="0.27" stop-color="#e7c687"/>\n                        <stop offset="0.4" stop-color="#e1bb72"/>\n                        <stop offset="0.54" stop-color="#dcb264"/>\n                        <stop offset="0.71" stop-color="#daad5c"/>\n                        <stop offset="1" stop-color="#d9ac59"/>\n                    </linearGradient>\n                    <filter id="shadow">\n                        <feGaussianBlur in="SourceAlpha" stdDeviation="2.3" result="blur1"/>\n                        <feOffset in="blur1" dx="3" dy="3" result="blur2"/>\n                        <feColorMatrix in="blur2" type="matrix" result="blur3"\n                            values="1 0 0 0 0.1\n                                    0 1 0 0 0.1\n                                    0 0 1 0 0.1\n                                    0 0 0 1 0"/>\n                        <feMerge>\n                            <feMergeNode in="blur3"/>\n                            <feMergeNode in="SourceGraphic"/>\n                        </feMerge>\n                    </filter>\n                </defs>\n                <g filter="url(#shadow)">\n                    <path d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" fill="#d9ac59"/>\n                    <path d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" fill="url(#gradient)"/>\n                </g>\n            </svg>\n            <span class="converse-brand__text">\n                <span>converse<span class="subdued">.js</span></span>\n                <p class="byline">messaging freedom</p>\n            </span>\n        </div>\n    </div>']);return Hg=function(){return e},e}
 /**
  * @license
  * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
@@ -460,45 +469,51 @@ const fp=new WeakMap,pp=Ea(e=>t=>{if(!(t instanceof Da))throw new Error("unsafeH
  * subject to an additional IP rights grant found at
  * http://polymer.github.io/PATENTS.txt
  */
-const rg=new WeakMap,ig=Ea(e=>t=>{if(!(t instanceof Da))throw new Error("unsafeSVG can only be used in text bindings");const n=rg.get(t);if(void 0!==n&&Na(e)&&e===n.value&&t.value===n.fragment)return;const r=document.createElement("template");r.innerHTML=`<svg>${e}</svg>`;const i=r.content,s=i.firstChild;i.removeChild(s),ua(i,s.firstChild);const o=document.importNode(i,!0);t.setValue(o),rg.set(t,{value:e,fragment:o})});function sg(){const e=ag(["",""]);return sg=function(){return e},e}function og(){const e=ag(["",""]);return og=function(){return e},e}function ag(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function cg(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="converse-chatboxes row no-gutters"></div>\n    <div id="converse-modals" class="modals"></div>\n    <converse-fontawesome></converse-fontawesome>\n']);return cg=function(){return e},e}window.customElements.define("converse-fontawesome",class extends uc{constructor(){super();const e=n.e(138).then(n.t.bind(null,459,7));this.data=e.then(e=>Ga(og(),ig(e.default())))}render(){return Ga(sg(),oh(this.data,""))}});var lg=function(e,t,n){var r=null==e?0:e.length;return r?(t=n||void 0===t?1:ai(t),ys(e,t<0?0:t,r)):[]};var ug=function(e,t){var n=[];return uo(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n};var dg=function(e,t){return(ke(e)?st:ug)(e,vs(t,3))};var hg=function(e){return e&&e.length?e[0]:void 0};var fg=function(e){return"function"==typeof e?e:fr};var pg=function(e,t){return(ke(e)?ve:uo)(e,fg(t))};var gg=function(e,t){return Dr(t,(function(t){return e[t]}))};var mg=function(e){return null==e?[]:gg(e,Qe(e))},vg=Math.max;var _g=function(e,t,n,r){e=Xe(e)?e:mg(e),n=n&&!r?ai(n):0;var i=e.length;return n<0&&(n=vg(i+n,0)),Zt(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&bo(e,t,n)>-1};var bg=function(e){return(null==e?0:e.length)?ys(e,0,-1):[]};var yg=function(e,t){return(ke(e)?Dr:$o)(e,vs(t,3))};var wg=function(e,t,n){for(var r=-1,i=e.length;++r<i;){var s=e[r],o=t(s);if(null!=o&&(void 0===a?o==o&&!Cr(o):n(o,a)))var a=o,c=s}return c};var Sg=function(e,t){return e>t};var xg=function(e){return e&&e.length?wg(e,fr,Sg):void 0};var Eg=function(e,t){return e<t};var Ag=function(e){return e&&e.length?wg(e,fr,Eg):void 0};var Cg=function(e,t,n,r){var i=-1,s=null==e?0:e.length;for(r&&s&&(n=e[++i]);++i<s;)n=t(n,e[i],i,e);return n};var jg=function(e,t,n,r,i){return i(e,(function(e,i,s){n=r?(r=!1,e):t(n,e,i,s)})),n};var Tg=function(e,t,n){var r=ke(e)?Cg:jg,i=arguments.length<3;return r(e,vs(t,4),n,i,uo)};var Og=function(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n},kg=Mi(!0);var Ng=lo((function(e,t){return e&&kg(e,t,Qe)}),!0);var Ig=function(e,t,n){var r=ke(e)?Og:jg,i=arguments.length<3;return r(e,vs(t,4),n,i,Ng)};var Mg=function(e){if("function"!=typeof e)throw new TypeError("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}};var Rg=function(e,t){return(ke(e)?st:ug)(e,Mg(vs(t,3)))};var Dg=function(e,t){if("function"!=typeof e)throw new TypeError("Expected a function");return t=void 0===t?t:ai(t),wr(e,t)},Pg=Math.floor,Lg=Math.random;var zg=function(e,t){return e+Pg(Lg()*(t-e+1))};var Fg=function(e){var t=e.length;return t?e[zg(0,t-1)]:void 0};var Bg=function(e){return Fg(mg(e))};var qg=function(e){return(ke(e)?Fg:Bg)(e)};var Hg=function(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n<t;){var s=zg(n,i),o=e[s];e[s]=e[n],e[n]=o}return e.length=t,e};var Ug=function(e){return Hg(it(e))};var $g=function(e){return Hg(mg(e))};var Wg=function(e){return(ke(e)?Ug:$g)(e)},Vg=ps("length"),Gg=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Jg=function(e){return Gg.test(e)},Xg="[\\ud800-\\udfff]",Qg="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Yg="\\ud83c[\\udffb-\\udfff]",Kg="[^\\ud800-\\udfff]",Zg="(?:\\ud83c[\\udde6-\\uddff]){2}",em="[\\ud800-\\udbff][\\udc00-\\udfff]",tm="(?:"+Qg+"|"+Yg+")"+"?",nm="[\\ufe0e\\ufe0f]?"+tm+("(?:\\u200d(?:"+[Kg,Zg,em].join("|")+")[\\ufe0e\\ufe0f]?"+tm+")*"),rm="(?:"+[Kg+Qg+"?",Qg,Zg,em,Xg].join("|")+")",im=RegExp(Yg+"(?="+Yg+")|"+rm+nm,"g");var sm=function(e){for(var t=im.lastIndex=0;im.test(e);)++t;return t};var om=function(e){return Jg(e)?sm(e):Vg(e)};var am=function(e){if(null==e)return 0;if(Xe(e))return Zt(e)?om(e):e.length;var t=Tt(e);return"[object Map]"==t||"[object Set]"==t?e.size:Je(e).length};var cm=function(e){var t=null==e?0:e.length;return t?ys(e,1,t):[]};var lm=function(e,t,n){return e&&e.length?(t=n||void 0===t?1:ai(t),ys(e,0,t<0?0:t)):[]};var um=function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n};var dm=function(e){return e.split("")},hm="[\\ud800-\\udfff]",fm="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",pm="[^\\ud800-\\udfff]",gm="(?:\\ud83c[\\udde6-\\uddff]){2}",mm="[\\ud800-\\udbff][\\udc00-\\udfff]",vm="(?:"+fm+"|\\ud83c[\\udffb-\\udfff])"+"?",_m="[\\ufe0e\\ufe0f]?"+vm+("(?:\\u200d(?:"+[pm,gm,mm].join("|")+")[\\ufe0e\\ufe0f]?"+vm+")*"),bm="(?:"+[pm+fm+"?",fm,gm,mm,hm].join("|")+")",ym=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+bm+_m,"g");var wm=function(e){return e.match(ym)||[]};var Sm=function(e){return Jg(e)?wm(e):dm(e)},xm=w?w.iterator:void 0;var Em=function(e){if(!e)return[];if(Xe(e))return Zt(e)?Sm(e):it(e);if(xm&&e[xm])return um(e[xm]());var t=Tt(e);return("[object Map]"==t?Gi:"[object Set]"==t?Ji:mg)(e)},Am=wr((function(e,t){return xo(e)?So(e,t):[]}));
+const Ug=new WeakMap,$g=ka(e=>t=>{if(!(t instanceof qa))throw new Error("unsafeSVG can only be used in text bindings");const n=Ug.get(t);if(void 0!==n&&La(e)&&e===n.value&&t.value===n.fragment)return;const r=document.createElement("template");r.innerHTML=`<svg>${e}</svg>`;const i=r.content,o=i.firstChild;i.removeChild(o),ma(i,o.firstChild);const s=document.importNode(i,!0);t.setValue(s),Ug.set(t,{value:e,fragment:s})});function Wg(){const e=Vg(["",""]);return Wg=function(){return e},e}function Gg(){const e=Vg(["",""]);return Gg=function(){return e},e}function Vg(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Jg(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="converse-chatboxes row no-gutters"></div>\n    <div id="converse-modals" class="modals"></div>\n    <converse-fontawesome></converse-fontawesome>\n']);return Jg=function(){return e},e}window.customElements.define("converse-fontawesome",class extends mc{constructor(){super();const e=n.e(138).then(n.t.bind(null,548,7));this.data=e.then(e=>Za(Gg(),$g(e.default())))}render(){return Za(Wg(),Qh(this.data,""))}});var Xg=function(e,t,n){var r=null==e?0:e.length;return r?(t=n||void 0===t?1:fi(t),jo(e,t<0?0:t,r)):[]};var Qg=function(e,t){var n=[];return vs(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n};var Yg=function(e,t){return(ke(e)?ot:Qg)(e,Eo(t,3))};var Kg=function(e){return e&&e.length?e[0]:void 0};var Zg=function(e){return"function"==typeof e?e:br};var em=function(e,t){return(ke(e)?ve:vs)(e,Zg(t))};var tm=function(e,t){return qr(t,(function(t){return e[t]}))};var nm=function(e){return null==e?[]:tm(e,Qe(e))},rm=Math.max;var im=function(e,t,n,r){e=Xe(e)?e:nm(e),n=n&&!r?fi(n):0;var i=e.length;return n<0&&(n=rm(i+n,0)),Zt(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&As(e,t,n)>-1};var om=function(e){return(null==e?0:e.length)?jo(e,0,-1):[]};var sm=function(e,t){return(ke(e)?qr:Qs)(e,Eo(t,3))};var am=function(e,t,n){for(var r=-1,i=e.length;++r<i;){var o=e[r],s=t(o);if(null!=s&&(void 0===a?s==s&&!Ir(s):n(s,a)))var a=s,c=o}return c};var cm=function(e,t){return e>t};var lm=function(e){return e&&e.length?am(e,br,cm):void 0};var um=function(e,t){return e<t};var dm=function(e){return e&&e.length?am(e,br,um):void 0};var hm=function(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n};var fm=function(e,t,n,r,i){return i(e,(function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)})),n};var pm=function(e,t,n){var r=ke(e)?hm:fm,i=arguments.length<3;return r(e,Eo(t,4),n,i,vs)};var gm=function(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n},mm=Fi(!0);var vm=ms((function(e,t){return e&&mm(e,t,Qe)}),!0);var _m=function(e,t,n){var r=ke(e)?gm:fm,i=arguments.length<3;return r(e,Eo(t,4),n,i,vm)};var bm=function(e){if("function"!=typeof e)throw new TypeError("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}};var ym=function(e,t){return(ke(e)?ot:Qg)(e,bm(Eo(t,3)))};var wm=function(e,t){if("function"!=typeof e)throw new TypeError("Expected a function");return t=void 0===t?t:fi(t),jr(e,t)},Sm=Math.floor,xm=Math.random;var Em=function(e,t){return e+Sm(xm()*(t-e+1))};var Am=function(e){var t=e.length;return t?e[Em(0,t-1)]:void 0};var Cm=function(e){return Am(nm(e))};var jm=function(e){return(ke(e)?Am:Cm)(e)};var Tm=function(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n<t;){var o=Em(n,i),s=e[o];e[o]=e[n],e[n]=s}return e.length=t,e};var Om=function(e){return Tm(it(e))};var km=function(e){return Tm(nm(e))};var Nm=function(e){return(ke(e)?Om:km)(e)},Im=wo("length"),Mm=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Rm=function(e){return Mm.test(e)},Dm="[\\ud800-\\udfff]",Pm="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Lm="\\ud83c[\\udffb-\\udfff]",zm="[^\\ud800-\\udfff]",Fm="(?:\\ud83c[\\udde6-\\uddff]){2}",Bm="[\\ud800-\\udbff][\\udc00-\\udfff]",qm="(?:"+Pm+"|"+Lm+")"+"?",Hm="[\\ufe0e\\ufe0f]?"+qm+("(?:\\u200d(?:"+[zm,Fm,Bm].join("|")+")[\\ufe0e\\ufe0f]?"+qm+")*"),Um="(?:"+[zm+Pm+"?",Pm,Fm,Bm,Dm].join("|")+")",$m=RegExp(Lm+"(?="+Lm+")|"+Um+Hm,"g");var Wm=function(e){for(var t=$m.lastIndex=0;$m.test(e);)++t;return t};var Gm=function(e){return Rm(e)?Wm(e):Im(e)};var Vm=function(e){if(null==e)return 0;if(Xe(e))return Zt(e)?Gm(e):e.length;var t=Tt(e);return"[object Map]"==t||"[object Set]"==t?e.size:Je(e).length};var Jm=function(e){var t=null==e?0:e.length;return t?jo(e,1,t):[]};var Xm=function(e,t,n){return e&&e.length?(t=n||void 0===t?1:fi(t),jo(e,0,t<0?0:t)):[]};var Qm=function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n};var Ym=function(e){return e.split("")},Km="[\\ud800-\\udfff]",Zm="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",ev="[^\\ud800-\\udfff]",tv="(?:\\ud83c[\\udde6-\\uddff]){2}",nv="[\\ud800-\\udbff][\\udc00-\\udfff]",rv="(?:"+Zm+"|\\ud83c[\\udffb-\\udfff])"+"?",iv="[\\ufe0e\\ufe0f]?"+rv+("(?:\\u200d(?:"+[ev,tv,nv].join("|")+")[\\ufe0e\\ufe0f]?"+rv+")*"),ov="(?:"+[ev+Zm+"?",Zm,tv,nv,Km].join("|")+")",sv=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+ov+iv,"g");var av=function(e){return e.match(sv)||[]};var cv=function(e){return Rm(e)?av(e):Ym(e)},lv=w?w.iterator:void 0;var uv=function(e){if(!e)return[];if(Xe(e))return Zt(e)?cv(e):it(e);if(lv&&e[lv])return Qm(e[lv]());var t=Tt(e);return("[object Map]"==t?Zi:"[object Set]"==t?eo:nm)(e)},dv=jr((function(e,t){return Os(e)?Ts(e,t):[]}));
 /*!
  * Copyright (c) JC Brand <jc@opkode.com>
  */
-const Cm=function(e){this.views={},this.keys=()=>Object.keys(this.views),this.getAll=()=>this.views,this.get=e=>this.views[e],this.xget=e=>this.keys().filter(t=>t!==e).reduce((e,t)=>(e[t]=this.views[t],e),{}),this.add=(e,t)=>(this.views[e]=t,t),this.remove=e=>{void 0===e&&(new jd).remove.apply(this);const t=this.views[e];if(t)return delete this.views[e],t.remove(),t},this.removeAll=()=>(this.keys().forEach(e=>this.remove(e)),this),jd.apply(this,Array.prototype.slice.apply(arguments))},jm={includes:_g,difference:Eo,drop:lg,every:jo,filter:dg,find:sl,first:hg,forEach:pg,head:hg,indexOf:Po,initial:bg,invoke:kc,isEmpty:Zr,last:bs,lastIndexOf:qo,map:yg,max:xg,min:Ag,reduce:Tg,reduceRight:Ig,reject:Rg,rest:Dg,sample:qg,shuffle:Wg,size:am,some:Uo,sortBy:Xo,tail:cm,take:lm,toArray:Em,without:Am};Object.keys(jm).forEach(e=>{Cm.prototype[e]=function(){const t=Array.prototype.slice.call(arguments);return t.unshift(this.views),jm[e].apply(this,t)}}),Object.assign(Cm.prototype,jd.prototype),Cm.extend=jd.extend;const Tm=Cm.extend({listItems:"model",sortEvent:"change",sortImmediatelyOnAdd:!1,listSelector:".ordered-items",ItemView:void 0,subviewIndex:"id",initialize(){this.sortEventually=Tc(()=>this.sortAndPositionAllItems(),100),this.items=us(this,this.listItems),this.items.on("remove",this.removeView,this),this.items.on("reset",this.removeAll,this),this.items.on("add",(e,t)=>{this.sortImmediatelyOnAdd?this.sortAndPositionAllItems():this.sortEventually()}),this.sortEvent&&this.items.on(this.sortEvent,this.sortEventually,this)},createItemView(e){let t=this.get(e.get(this.subviewIndex));return t?(t.model=e,t.initialize()):(t=new this.ItemView({model:e}),this.add(e.get(this.subviewIndex),t)),t.render(),t},removeView(e){this.remove(e.get(this.subviewIndex))},sortAndPositionAllItems(){if(!this.items.length)return;this.items.sort();const e=this.el.querySelector(this.listSelector),t=document.createElement("div");e.parentNode.replaceChild(t,e),this.items.forEach(t=>{let n=this.get(t.get(this.subviewIndex));n||(n=this.createItemView(t)),e.insertAdjacentElement("beforeend",n.el)}),t.parentNode.replaceChild(e,t)}}),Om=Yc.env.utils,km=jd.extend({renderAvatar(e){const t=(e=e||this.el).querySelector("canvas.avatar, svg.avatar");if(null!==t&&this.model.vcard){const e={classes:t.getAttribute("class"),width:t.getAttribute("width"),height:t.getAttribute("height"),image_type:this.model.vcard.get("image_type"),image:this.model.vcard.get("image")};t.outerHTML=Om.getElementFromTemplateResult(bf(e)).outerHTML}}}),Nm=Cm.extend({_ensureElement(){if(this.el)this.setElement($r(this,"el"),!1);else{let e=Lc.root.querySelector("#conversejs");if(null===e){e=document.createElement("div"),e.setAttribute("id","conversejs"),Om.addClass("theme-".concat(qc.settings.get("theme")),e);const t=Lc.root.querySelector("body");t?t.appendChild(e):Lc.root.appendChild(e)}this.setElement(e,!1)}},initialize(){this.listenTo(this.model,"destroy",this.removeChat);const e=document.getElementById("conversejs-bg");e&&!e.innerHTML.trim()&&Wa(Ga(ng()),e),document.querySelector("body").classList.add("converse-".concat(qc.settings.get("view_mode"))),this.el.classList.add("converse-".concat(qc.settings.get("view_mode"))),qc.settings.get("singleton")&&this.el.classList.add("converse-singleton"),this.render()},render(){this._ensureElement(),Wa(Ga(cg()),this.el),this.row_el=this.el.querySelector(".row")},insertRowColumn(e){this.row_el.insertAdjacentElement("afterBegin",e)},removeChat(e){this.remove(e.get("id"))},closeAllChatBoxes(){return Promise.all(this.map(e=>e.close({name:"closeAllChatBoxes"})))}});
+const hv=function(e){this.views={},this.keys=()=>Object.keys(this.views),this.getAll=()=>this.views,this.get=e=>this.views[e],this.xget=e=>this.keys().filter(t=>t!==e).reduce((e,t)=>(e[t]=this.views[t],e),{}),this.add=(e,t)=>(this.views[e]=t,t),this.remove=e=>{void 0===e&&(new eh).remove.apply(this);const t=this.views[e];if(t)return delete this.views[e],t.remove(),t},this.removeAll=()=>(this.keys().forEach(e=>this.remove(e)),this),eh.apply(this,Array.prototype.slice.apply(arguments))},fv={includes:im,difference:ks,drop:Xg,every:Ms,filter:Yg,find:fl,first:Kg,forEach:em,head:Kg,indexOf:Hs,initial:om,invoke:Pc,isEmpty:oi,last:Co,lastIndexOf:Vs,map:sm,max:lm,min:dm,reduce:pm,reduceRight:_m,reject:ym,rest:wm,sample:jm,shuffle:Nm,size:Vm,some:Xs,sortBy:ta,tail:Jm,take:Xm,toArray:uv,without:dv};Object.keys(fv).forEach(e=>{hv.prototype[e]=function(){const t=Array.prototype.slice.call(arguments);return t.unshift(this.views),fv[e].apply(this,t)}}),Object.assign(hv.prototype,eh.prototype),hv.extend=eh.extend;const pv=hv.extend({listItems:"model",sortEvent:"change",sortImmediatelyOnAdd:!1,listSelector:".ordered-items",ItemView:void 0,subviewIndex:"id",initialize(){this.sortEventually=Rc(()=>this.sortAndPositionAllItems(),100),this.items=vo(this,this.listItems),this.items.on("remove",this.removeView,this),this.items.on("reset",this.removeAll,this),this.items.on("add",(e,t)=>{this.sortImmediatelyOnAdd?this.sortAndPositionAllItems():this.sortEventually()}),this.sortEvent&&this.items.on(this.sortEvent,this.sortEventually,this)},createItemView(e){let t=this.get(e.get(this.subviewIndex));return t?(t.model=e,t.initialize()):(t=new this.ItemView({model:e}),this.add(e.get(this.subviewIndex),t)),t.render(),t},removeView(e){this.remove(e.get(this.subviewIndex))},sortAndPositionAllItems(){if(!this.items.length)return;this.items.sort();const e=this.el.querySelector(this.listSelector),t=document.createElement("div");e.parentNode.replaceChild(t,e),this.items.forEach(t=>{let n=this.get(t.get(this.subviewIndex));n||(n=this.createItemView(t)),e.insertAdjacentElement("beforeend",n.el)}),t.parentNode.replaceChild(e,t)}}),gv=rl.env.utils;var mv=hv.extend({_ensureElement(){if(this.el)this.setElement(Qr(this,"el"),!1);else{let e=Uc.root.querySelector("#conversejs");if(null===e){e=document.createElement("div"),e.setAttribute("id","conversejs"),gv.addClass("theme-".concat(Vc.settings.get("theme")),e);const t=Uc.root.querySelector("body");t?t.appendChild(e):Uc.root.appendChild(e)}this.setElement(e,!1)}},initialize(){this.listenTo(this.model,"destroy",this.removeChat);const e=document.getElementById("conversejs-bg");e&&!e.innerHTML.trim()&&Ya(Za(Hg()),e),document.querySelector("body").classList.add("converse-".concat(Vc.settings.get("view_mode"))),this.el.classList.add("converse-".concat(Vc.settings.get("view_mode"))),Vc.settings.get("singleton")&&this.el.classList.add("converse-singleton"),this.render()},render(){this._ensureElement(),Ya(Za(Jg()),this.el),this.row_el=this.el.querySelector(".row")},insertRowColumn(e){this.row_el.insertAdjacentElement("afterBegin",e)},removeChat(e){this.remove(e.get("id"))},closeAllChatBoxes(){return Promise.all(this.map(e=>e.close({name:"closeAllChatBoxes"})))}});
 /**
  * @module converse-chatboxviews
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */function Im(){Lc.chatboxviews=new Lc.ChatBoxViews({model:Lc.chatboxes}),qc.trigger("chatBoxViewsInitialized")}function Mm(e){"controlbox"!==e.model.get("id")&&(Om.safeSave(e.model,{hidden:!0}),e.hide())}function Rm(e){if(Lc.isUniView()&&(Object.values(Lc.chatboxviews.xget(e.model.get("id"))).filter(e=>!e.model.get("hidden")).forEach(Mm),e.model.get("hidden")))return new Promise(t=>{Om.safeSave(e.model,{hidden:!1},{success:t,failure:t})})}function Dm(){const e=.01*window.innerHeight;document.documentElement.style.setProperty("--vh","".concat(e,"px"))}function Pm(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="flyout box-flyout">\n        <div class="chat-head chat-head-chatbox row no-gutters"></div>\n        <div class="chat-body">\n            <div class="chat-content ','" aria-live="polite">\n                <div class="chat-content__messages" @scroll=','></div>\n                <div class="chat-content__help"></div>\n            </div>\n            <div class="bottom-panel">\n                <div class="message-form-container">\n            </div>\n        </div>\n    </div>\n']);return Pm=function(){return e},e}Yc.plugins.add("converse-chatboxviews",{dependencies:["converse-chatboxes","converse-vcard"],initialize(){qc.elements.register(),qc.promises.add(["chatBoxViewsInitialized"]),qc.settings.extend({animate:!0,theme:"default"}),Lc.ViewWithAvatar=km,Lc.ChatBoxViews=Nm,qc.listen.on("beforeShowingChatView",Rm),qc.listen.on("chatBoxesInitialized",Im),qc.listen.on("cleanup",()=>delete Lc.chatboxviews),qc.listen.on("clearSession",()=>Lc.chatboxviews.closeAllChatBoxes()),qc.listen.on("chatBoxViewsInitialized",Dm),window.addEventListener("resize",Dm),Object.assign(Yc,{insertInto(e){var t;const n=null===(t=Lc.chatboxviews)||void 0===t?void 0:t.el;if(n&&!e.contains(n))e.insertAdjacentElement("afterBegin",n),qc.chatviews.get().filter(e=>"controlbox"!==e.model.get("id")).forEach(e=>e.maintainScrollTop());else if(!n)throw new Error("Cannot insert non-existing #conversejs element into the DOM")}})}});var Lm=e=>Ga(Pm(),e.show_send_button?"chat-content-sendbutton":"",e.markScrolled);function zm(){const e=$m(['<p class="chat-head__desc">',"</p>"]);return zm=function(){return e},e}function Fm(){const e=$m(["<converse-dropdown .items=","></converse-dropdown>"]);return Fm=function(){return e},e}function Bm(){const e=$m(['<a href="','" target="_blank" rel="noopener" class="user">',"</a>"]);return Bm=function(){return e},e}function qm(){const e=$m(['<span class="mr-2">',"</span>"]);return qm=function(){return e},e}function Hm(){const e=$m(['<div class="chatbox-navback"><i class="fa fa-arrow-left"></i></div>']);return Hm=function(){return e},e}function Um(){const e=$m(['\n        <div class="chatbox-title ','">\n            <div class="chatbox-title--row">\n                ',"\n                ",'\n                <div class="chatbox-title__text" title="','">\n                    ','\n                </div>\n            </div>\n            <div class="chatbox-title__buttons row no-gutters">\n                ',"\n                ","\n            </div>\n        </div>\n        ","\n    "]);return Um=function(){return e},e}function $m(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Wm(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="new-msgs-indicator hidden">â–¼ ',' â–¼</div>\n    <form class="setNicknameButtonForm hidden">\n        <input type="submit" class="btn btn-primary" name="join" value="Join"/>\n    </form>\n    <form class="sendXMPPMessage">\n        <span class="chat-toolbar no-text-select"></span>\n        <input type="text" placeholder="','" value="','" class="',' spoiler-hint"/>\n\n        <div class="suggestion-box">\n            <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n            <textarea\n                type="text"\n                class="chat-textarea suggestion-box__input\n                    ',"\n                    ",'"\n                placeholder="','">','</textarea>\n            <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n        </div>\n    </form>\n']);return Wm=function(){return e},e}function Vm(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n        <converse-chat-toolbar\n            .chatview=","\n            .model=",'\n            ?composing_spoiler="','"\n            ?hidden_occupants="','"\n            ?is_groupchat="','"\n            ?show_call_button="','"\n            ?show_emoji_button="','"\n            ?show_occupants_toggle="','"\n            ?show_send_button="','"\n            ?show_spoiler_button="','"\n            ?show_toolbar="','"\n            message_limit="','"\n        ></converse-chat-toolbar>\n    ']);return Vm=function(){return e},e}function Gm(){const e=iv(["<p><label>",":</label> ","</p>"]);return Gm=function(){return e},e}function Jm(){const e=iv(["<p><label>",':</label> <a href="mailto:','">',"</a></p>"]);return Jm=function(){return e},e}function Xm(){const e=iv(["<p><label>",':</label> <a target="_blank" rel="noopener" href="','">',"</a></p>"]);return Xm=function(){return e},e}function Qm(){const e=iv(["<p><label>",":</label> ","</p>"]);return Qm=function(){return e},e}function Ym(){const e=iv(["<p><label>",":</label> ","</p>"]);return Ym=function(){return e},e}function Km(){const e=iv(['<div class="mb-4">',"</div>"]);return Km=function(){return e},e}function Zm(){const e=iv(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="user-details-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    ',"\n                    ","\n                    <p><label>",':</label> <a href="xmpp:','">',"</a></p>\n                    ","\n                    ","\n                    ","\n                    ","\n\n                    ",'\n                </div>\n                <div class="modal-footer">\n                    ','\n                    <button type="button" class="btn btn-info refresh-contact"><i class="fa fa-refresh"> </i>',"</button>\n                    ","\n\n                </div>\n            </div>\n        </div>\n    "]);return Zm=function(){return e},e}function ev(){const e=iv(['\n        <button type="button" @click="','" class="btn btn-danger remove-contact">\n            <i class="far fa-trash-alt"></i>',"\n        </button>\n    "]);return ev=function(){return e},e}function tv(){const e=iv(['<li class="list-group-item"> '," </li>"]);return tv=function(){return e},e}function nv(){const e=iv(['\n        <hr/>\n        <ul class="list-group fingerprints">\n            <li class="list-group-item active">',"</li>\n            ","\n        </ul>\n    "]);return nv=function(){return e},e}function rv(){const e=iv(['\n            <li class="list-group-item">\n                <form class="fingerprint-trust">\n                <div class="btn-group btn-group-toggle">\n                    <label class="btn btn--small ','">\n                        <input type="radio" name="','" value="1" ?checked=',">",'\n                    </label>\n                    <label class="btn btn--small ','">\n                        <input type="radio" name="','" value="-1" ?checked=',">",'\n                    </label>\n                </div>\n                <code class="fingerprint">',"</code>\n                </form>\n            </li>\n        "]);return rv=function(){return e},e}function iv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const sv=e=>{const t=dd("OMEMO Fingerprints"),n=dd("No OMEMO-enabled devices found"),r=e.view.devicelist.devices;return Ga(nv(),t,r.length?r.map(t=>(e=>{const t=dd("Trusted"),n=dd("Untrusted");return e.device.get("bundle")&&e.device.get("bundle").fingerprint?Ga(rv(),-1!==e.device.get("trusted")?"btn-primary active":"btn-secondary",e.device.get("id"),-1!==e.device.get("trusted"),t,-1!==e.device.get("trusted")?"btn-primary active":"btn-secondary",e.device.get("id"),-1===e.device.get("trusted"),n,e.utils.formatFingerprint(e.device.get("bundle").fingerprint)):""})(Object.assign({device:t},e))):Ga(tv(),n))};var ov=e=>{const t=dd("XMPP Address"),n=dd("Email"),r=dd("Full Name"),i=dd("Nickname"),s=dd("The User's Profile Image"),o=dd("Refresh"),a=dd("Role"),c=dd("URL"),l={alt_text:s,extra_classes:"mb-3",height:"120",width:"120"};return Ga(Zm(),e.display_name,Bd,e.image?Ga(Km(),bf(Object.assign(e,l))):"",e.fullname?Ga(Ym(),r,e.fullname):"",t,e.jid,e.jid,e.nickname?Ga(Qm(),i,e.nickname):"",e.url?Ga(Xm(),c,e.url,e.url):"",e.email?Ga(Jm(),n,e.email,e.email):"",e.role?Ga(Gm(),a,e.role):"",e._converse.pluggable.plugins["converse-omemo"].enabled(e._converse)?sv(e):"",Fd,o,e.allow_contact_removal&&e.is_roster_contact?(e=>{const t=dd("Remove as contact");return Ga(ev(),e.removeContact,t)})(e):"")};function av(){const e=dv(['<a href="#"\n            class="dropdown-item ','"\n            @click=','\n            title="','"><i class="fa ','"></i>',"</a>"]);return av=function(){return e},e}function cv(){const e=dv(['<a href="#"\n            class="chatbox-btn '," fa ",'"\n            @click=','\n            title="','"></a>']);return cv=function(){return e},e}function lv(){const e=dv(["\n                    <converse-chat-content\n                        .chatview=","\n                        .messages=","\n                        notifications=",">\n                    </converse-chat-content>"]);return lv=function(){return e},e}function uv(){const e=dv(["<converse-chat-help\n                .model=","\n                .messages=","\n                ?hidden=",'\n                type="info"\n                chat_type="','"></converse-chat-help>']);return uv=function(){return e},e}function dv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
+ */function vv(){Uc.chatboxviews=new Uc.ChatBoxViews({model:Uc.chatboxes}),Vc.trigger("chatBoxViewsInitialized")}function _v(){const e=.01*window.innerHeight;document.documentElement.style.setProperty("--vh","".concat(e,"px"))}function bv(){const e=wv(["<p>","</p>"]);return bv=function(){return e},e}function yv(){const e=wv(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header ','">\n              <h5 class="modal-title">',"</h5>\n              ",'\n            </div>\n            <div class="modal-body">\n              <span class="modal-alert"></span>\n              ',"\n            </div>\n        </div>\n    </div>\n"]);return yv=function(){return e},e}function wv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}rl.plugins.add("converse-chatboxviews",{dependencies:["converse-chatboxes","converse-vcard"],initialize(){Vc.elements.register(),Vc.promises.add(["chatBoxViewsInitialized"]),Vc.settings.extend({animate:!0,theme:"default"}),Uc.ViewWithAvatar=eh.extend(qg),Uc.ChatBoxViews=mv,Vc.listen.on("chatBoxesInitialized",vv),Vc.listen.on("cleanup",()=>delete Uc.chatboxviews),Vc.listen.on("clearSession",()=>Uc.chatboxviews.closeAllChatBoxes()),Vc.listen.on("chatBoxViewsInitialized",_v),window.addEventListener("resize",_v),Object.assign(rl,{insertInto(e){var t;const n=null===(t=Uc.chatboxviews)||void 0===t?void 0:t.el;if(n&&!e.contains(n))e.insertAdjacentElement("afterBegin",n),Vc.chatviews.get().filter(e=>"controlbox"!==e.model.get("id")).forEach(e=>e.maintainScrollTop());else if(!n)throw new Error("Cannot insert non-existing #conversejs element into the DOM")}})}});var Sv=df.extend({id:"alert-modal",initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render)},toHTML(){return e=Object.assign({__:zd},this.model.toJSON()),Za(yv(),e.level,e.title,mf,e.messages.map(e=>Za(bv(),e)));var e}});function xv(){const e=Cv(["<p>","</p>"]);return xv=function(){return e},e}function Ev(){const e=Cv(['\n    <div class="modal-dialog" role="document">\n      <div class="modal-content">\n        <div class="modal-header ','">\n          <h5 class="modal-title">','</h5>\n          <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n            <span aria-hidden="true">×</span>\n          </button>\n        </div>\n        <div class="modal-body">\n            <span class="modal-alert"></span>\n            <form class="converse-form converse-form--modal confirm" action="#">\n              <div class="form-group">\n                  ',"\n              </div>\n              ",'\n              <div class="form-group">\n                  <button type="submit" class="btn btn-primary">','</button>\n                  <input type="button" class="btn btn-secondary" data-dismiss="modal" value="','"/>\n              </div>\n          </form>\n        </div>\n      </div>\n    </div>\n']);return Ev=function(){return e},e}function Av(){const e=Cv(['\n    <div class="form-group">\n        <label>\n            ','\n            <input type="text"\n                name="','"\n                class="',' form-control form-control--labeled"\n                ?required="','"\n                placeholder="','" />\n        </label>\n    </div>\n']);return Av=function(){return e},e}function Cv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var jv=e=>Za(Ev(),e.level||"",e.title,e.messages.map(e=>Za(xv(),e)),e.fields.map(e=>(e=>Za(Av(),e.label||"",e.name,e.challenge_failed?"error":"",e.required,e.placeholder))(e)),zd("OK"),zd("Cancel"));const Tv=rl.env.utils;var Ov=df.extend({id:"confirm-modal",events:{"submit .confirm":"onConfimation"},initialize(){this.confirmation=Tv.getResolveablePromise(),df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.el.addEventListener("closed.bs.modal",()=>this.confirmation.reject(),!1)},toHTML(){return jv(this.model.toJSON())},afterRender(){this.close_handler_registered||(this.el.addEventListener("closed.bs.modal",()=>{this.confirmation.isResolved||this.confirmation.reject()},!1),this.close_handler_registered=!0)},onConfimation(e){e.preventDefault();const t=new FormData(e.target),n=(this.model.get("fields")||[]).map(e=>{const n=t.get(e.name).trim();return e.value=n,e.challenge&&(e.challenge_failed=n!==e.challenge),e});if(n.filter(e=>e.challenge_failed).length)return this.model.set("fields",n),void this.model.trigger("change");this.confirmation.resolve(n),this.modal.hide()}});
+/**
+ * @module converse-modal
+ * @copyright The Converse.js contributors
+ * @license Mozilla Public License (MPLv2)
+ */rl.env.BootstrapModal=df;let kv=[];const Nv={modal:{show(e,t,n){const r=this.get(e.id)||this.create(e,t);return r.show(n),r},get:e=>kv.filter(t=>t.id==e).pop(),create(e,t){const n=new e(t);return kv.push(n),n},remove(e){kv=kv.filter(t=>t!==e),e.remove()},removeAll(){kv.forEach(e=>e.remove()),kv=[]}},async confirm(e,t=[],n=[]){"string"==typeof t&&(t=[t]);const r=new qo({title:e,messages:t,fields:n,type:"confirm"}),i=new Ov({model:r});let o;i.show();try{o=await i.confirmation}catch(e){o=!1}return i.remove(),o},async prompt(e,t=[],n=""){"string"==typeof t&&(t=[t]);const r=new qo({title:e,messages:t,fields:[{name:"reason",placeholder:n}],type:"prompt"}),i=new Ov({model:r});let o;i.show();try{var s;o=null===(s=(await i.confirmation).pop())||void 0===s?void 0:s.value}catch(e){o=!1}return i.remove(),o},alert(e,t,n){let r;"string"==typeof n&&(n=[n]),"error"===e?r="alert-danger":"info"===e?r="alert-info":"warn"===e&&(r="alert-warning");const i=new qo({title:t,messages:n,level:r,type:"alert"});Vc.modal.show(Sv,{model:i})}};function Iv(){const e=Uv(["<p><label>",":</label> ","</p>"]);return Iv=function(){return e},e}function Mv(){const e=Uv(["<p><label>",':</label> <a href="mailto:','">',"</a></p>"]);return Mv=function(){return e},e}function Rv(){const e=Uv(["<p><label>",':</label> <a target="_blank" rel="noopener" href="','">',"</a></p>"]);return Rv=function(){return e},e}function Dv(){const e=Uv(["<p><label>",":</label> ","</p>"]);return Dv=function(){return e},e}function Pv(){const e=Uv(["<p><label>",":</label> ","</p>"]);return Pv=function(){return e},e}function Lv(){const e=Uv(['<div class="mb-4">',"</div>"]);return Lv=function(){return e},e}function zv(){const e=Uv(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="user-details-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    ',"\n                    ","\n                    <p><label>",':</label> <a href="xmpp:','">',"</a></p>\n                    ","\n                    ","\n                    ","\n                    ","\n\n                    ",'\n                </div>\n                <div class="modal-footer">\n                    ','\n                    <button type="button" class="btn btn-info refresh-contact"><i class="fa fa-refresh"> </i>',"</button>\n                    ","\n\n                </div>\n            </div>\n        </div>\n    "]);return zv=function(){return e},e}function Fv(){const e=Uv(['\n        <button type="button" @click="','" class="btn btn-danger remove-contact">\n            <i class="far fa-trash-alt"></i>',"\n        </button>\n    "]);return Fv=function(){return e},e}function Bv(){const e=Uv(['<li class="list-group-item"> '," </li>"]);return Bv=function(){return e},e}function qv(){const e=Uv(['\n        <hr/>\n        <ul class="list-group fingerprints">\n            <li class="list-group-item active">',"</li>\n            ","\n        </ul>\n    "]);return qv=function(){return e},e}function Hv(){const e=Uv(['\n            <li class="list-group-item">\n                <form class="fingerprint-trust">\n                <div class="btn-group btn-group-toggle">\n                    <label class="btn btn--small ','">\n                        <input type="radio" name="','" value="1" ?checked=',">",'\n                    </label>\n                    <label class="btn btn--small ','">\n                        <input type="radio" name="','" value="-1" ?checked=',">",'\n                    </label>\n                </div>\n                <code class="fingerprint">',"</code>\n                </form>\n            </li>\n        "]);return Hv=function(){return e},e}function Uv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}rl.plugins.add("converse-modal",{initialize(){Vc.listen.on("disconnect",()=>{const e=document.querySelector("#converse-modals");e&&(e.innerHTML="")}),Vc.listen.on("clearSession",()=>Vc.modal.removeAll()),Object.assign(Uc.api,Nv)}});const $v=e=>{const t=zd("OMEMO Fingerprints"),n=zd("No OMEMO-enabled devices found"),r=e.view.devicelist.devices;return Za(qv(),t,r.length?r.map(t=>(e=>{const t=zd("Trusted"),n=zd("Untrusted");return e.device.get("bundle")&&e.device.get("bundle").fingerprint?Za(Hv(),-1!==e.device.get("trusted")?"btn-primary active":"btn-secondary",e.device.get("id"),-1!==e.device.get("trusted"),t,-1!==e.device.get("trusted")?"btn-primary active":"btn-secondary",e.device.get("id"),-1===e.device.get("trusted"),n,e.utils.formatFingerprint(e.device.get("bundle").fingerprint)):""})(Object.assign({device:t},e))):Za(Bv(),n))};var Wv=e=>{const t=zd("XMPP Address"),n=zd("Email"),r=zd("Full Name"),i=zd("Nickname"),o=zd("The User's Profile Image"),s=zd("Refresh"),a=zd("Role"),c=zd("URL"),l={alt_text:o,extra_classes:"mb-3",height:"120",width:"120"};return Za(zv(),e.display_name,mf,e.image?Za(Lv(),ip(Object.assign(e,l))):"",e.fullname?Za(Pv(),r,e.fullname):"",t,e.jid,e.jid,e.nickname?Za(Dv(),i,e.nickname):"",e.url?Za(Rv(),c,e.url,e.url):"",e.email?Za(Mv(),n,e.email,e.email):"",e.role?Za(Iv(),a,e.role):"",e._converse.pluggable.plugins["converse-omemo"].enabled(e._converse)?$v(e):"",gf,s,e.allow_contact_removal&&e.is_roster_contact?(e=>{const t=zd("Remove as contact");return Za(Fv(),e.removeContact,t)})(e):"")};const Gv=rl.env.utils;const Vv=df.extend({id:"user-details-modal",persistent:!0,events:{"click button.refresh-contact":"refreshContact","click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){df.prototype.initialize.apply(this,arguments),this.model.rosterContactAdded.then(()=>this.registerContactEventHandlers()),this.listenTo(this.model,"change",this.render),this.registerContactEventHandlers(),Vc.trigger("userDetailsModalInitialized",this.model)},toHTML(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{};return Wv(Object.assign(this.model.toJSON(),n,{_converse:Uc,allow_contact_removal:Vc.settings.get("allow_contact_removal"),display_name:this.model.getDisplayName(),is_roster_contact:void 0!==this.model.contact,removeContact:e=>this.removeContact(e),view:this,utils:Gv}))},registerContactEventHandlers(){void 0!==this.model.contact&&(this.listenTo(this.model.contact,"change",this.render),this.listenTo(this.model.contact.vcard,"change",this.render),this.model.contact.on("destroy",()=>{delete this.model.contact,this.render()}))},async refreshContact(e){e&&e.preventDefault&&e.preventDefault();const t=this.el.querySelector(".fa-refresh");Gv.addClass("fa-spin",t);try{await Vc.vcard.update(this.model.contact.vcard,!0)}catch(e){zn.fatal(e),this.alert(zd("Sorry, something went wrong while trying to refresh"),"danger")}Gv.removeClass("fa-spin",t)},removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),!Vc.settings.get("allow_contact_removal"))return;!0===confirm(zd("Are you sure you want to remove this contact?"))&&(setTimeout(()=>{var e;(e=this.model.contact).removeFromRoster(()=>e.destroy(),t=>{t&&zn.error(t),Vc.alert("error",zd("Error"),[zd("Sorry, there was an error while trying to remove %1$s as a contact.",e.getDisplayName())])})},1),this.modal.hide())}});Uc.UserDetailsModal=Vv;var Jv=Vv;function Xv(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="flyout box-flyout">\n        <div class="chat-head chat-head-chatbox row no-gutters"></div>\n        <div class="chat-body">\n            <div class="chat-content ','" aria-live="polite">\n                <div class="chat-content__messages" @scroll=','></div>\n                <div class="chat-content__help"></div>\n            </div>\n            <div class="bottom-panel">\n                <div class="message-form-container">\n            </div>\n        </div>\n    </div>\n']);return Xv=function(){return e},e}var Qv=e=>Za(Xv(),e.show_send_button?"chat-content-sendbutton":"",e.markScrolled);function Yv(){const e=i_(['<p class="chat-head__desc">',"</p>"]);return Yv=function(){return e},e}function Kv(){const e=i_(["<converse-dropdown .items=","></converse-dropdown>"]);return Kv=function(){return e},e}function Zv(){const e=i_(['<a class="user show-msg-author-modal" @click=',">","</a>"]);return Zv=function(){return e},e}function e_(){const e=i_(['<a class="show-msg-author-modal" @click=',">","</a>"]);return e_=function(){return e},e}function t_(){const e=i_(['<div class="chatbox-navback"><i class="fa fa-arrow-left"></i></div>']);return t_=function(){return e},e}function n_(){const e=i_(['\n        <div class="chatbox-title ','">\n            <div class="chatbox-title--row">\n                ',"\n                ",'\n                <div class="chatbox-title__text" title="','">\n                    ','\n                </div>\n            </div>\n            <div class="chatbox-title__buttons row no-gutters">\n                ',"\n                ","\n            </div>\n        </div>\n        ","\n    "]);return n_=function(){return e},e}function r_(){const e=i_(['<span class="mr-2">',"</span>"]);return r_=function(){return e},e}function i_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function o_(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="new-msgs-indicator hidden">â–¼ ',' â–¼</div>\n    <form class="setNicknameButtonForm hidden">\n        <input type="submit" class="btn btn-primary" name="join" value="Join"/>\n    </form>\n    <form class="sendXMPPMessage">\n        <span class="chat-toolbar no-text-select"></span>\n        <input type="text" placeholder="','" value="','" class="',' spoiler-hint"/>\n\n        <div class="suggestion-box">\n            <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n            <textarea\n                type="text"\n                class="chat-textarea suggestion-box__input\n                    ',"\n                    ",'"\n                placeholder="','">','</textarea>\n            <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n        </div>\n    </form>\n']);return o_=function(){return e},e}function s_(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n        <converse-chat-toolbar\n            .chatview=","\n            .model=",'\n            ?composing_spoiler="','"\n            ?hidden_occupants="','"\n            ?is_groupchat="','"\n            ?show_call_button="','"\n            ?show_emoji_button="','"\n            ?show_occupants_toggle="','"\n            ?show_send_button="','"\n            ?show_spoiler_button="','"\n            ?show_toolbar="','"\n            message_limit="','"\n        ></converse-chat-toolbar>\n    ']);return s_=function(){return e},e}function a_(){const e=d_(['\n            <a href="#" class="dropdown-item ','" @click=',' title="','"\n                ><i class="fa ','"></i>',"</a\n            >\n        "]);return a_=function(){return e},e}function c_(){const e=d_(['\n            <a\n                href="#"\n                class="chatbox-btn '," fa ",'"\n                @click=','\n                title="','"\n            ></a>\n        ']);return c_=function(){return e},e}function l_(){const e=d_(["\n                    <converse-chat-content .chatview="," .messages="," notifications=",">\n                    </converse-chat-content>\n                "]);return l_=function(){return e},e}function u_(){const e=d_(["\n                <converse-chat-help\n                    .model=","\n                    .messages=","\n                    ?hidden=",'\n                    type="info"\n                    chat_type="','"\n                ></converse-chat-help>\n            ']);return u_=function(){return e},e}function d_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const h_=rl.env.utils,{dayjs:f_}=rl.env;var p_=eh.extend({length:200,className:"chatbox hidden",is_chatroom:!1,events:{"click .chatbox-navback":"showControlBox","click .new-msgs-indicator":"viewUnreadMessages","click .send-button":"onFormSubmitted","click .toggle-clear":"clearMessages","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","paste .chat-textarea":"onPaste"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:status",this.onStatusMessageChanged),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"vcard:change",this.renderHeading),this.model.contact&&this.listenTo(this.model.contact,"destroy",this.renderHeading),this.model.rosterContactAdded&&this.model.rosterContactAdded.then(()=>{this.listenTo(this.model.contact,"change:nickname",this.renderHeading),this.renderHeading()}),this.listenTo(this.model.presence,"change:show",this.onPresenceChanged),this.render(),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),await this.model.messages.fetched,this.insertIntoDOM(),this.model.maybeShow(),this.scrollDown(),Vc.trigger("chatBoxViewInitialized",this)},initDebounced(){this.markScrolled=Rc(this._markScrolled,100),this.debouncedScrollDown=Rc(this.scrollDown,100),Vc.settings.get("debounced_content_rendering")?(this.renderChatHistory=Rc(()=>this.renderChatContent(!1),100),this.renderNotifications=Rc(()=>this.renderChatContent(!0),100)):(this.renderChatHistory=()=>this.renderChatContent(!1),this.renderNotifications=()=>this.renderChatContent(!0))},render(){const e=Qv(Object.assign(this.model.toJSON(),{markScrolled:e=>this.markScrolled(e)}));return Ya(e,this.el),this.content=this.el.querySelector(".chat-content"),this.notifications=this.el.querySelector(".chat-content__notifications"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderChatContent(),this.renderMessageForm(),this.renderHeading(),this},onMessageAdded(e){this.renderChatHistory(),h_.isNewMessage(e)&&("me"===e.get("sender")?this.model.set("scrolled",!1):this.model.get("scrolled",!0)&&this.showNewMessagesIndicator())},getNotifications(){return this.model.notifications.get("chat_state")===Uc.COMPOSING?zd("%1$s is typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Uc.PAUSED?zd("%1$s has stopped typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Uc.GONE?zd("%1$s has gone away",this.model.getDisplayName()):""},getHelpMessages:()=>["<strong>/clear</strong>: ".concat(zd("Remove messages")),"<strong>/close</strong>: ".concat(zd("Close this chat")),"<strong>/me</strong>: ".concat(zd("Write in the third person")),"<strong>/help</strong>: ".concat(zd("Show this menu"))],renderHelpMessages(){Ya(Za(u_(),this.model,this.getHelpMessages(),!this.model.get("show_help_messages"),this.model.get("type")),this.help_container)},renderChatContent(e=!1){this.tpl_chat_content||(this.tpl_chat_content=e=>Za(l_(),this,e.messages,e.notifications));const t=this.model.messages.models,n=e?t:Array.from(t);Ya(this.tpl_chat_content({messages:n,notifications:this.getNotifications()}),this.msgs_container)},renderToolbar(){if(!Vc.settings.get("show_toolbar"))return this;const e=Object.assign({model:this.model,chatview:this},this.model.toJSON(),this.getToolbarOptions());return Ya((e=>{const t=Vc.settings.get("message_limit"),n=Vc.settings.get("visible_toolbar_buttons").call,r=Vc.settings.get("visible_toolbar_buttons").emoji,i=Vc.settings.get("show_send_button"),o=Vc.settings.get("visible_toolbar_buttons").spoiler,s=Vc.settings.get("show_toolbar");return Za(s_(),e.chatview,e.model,e.composing_spoiler,e.hidden_occupants,e.is_groupchat,n,r,e.show_occupants_toggle,i,o,s,t)})(e),this.el.querySelector(".chat-toolbar")),Vc.trigger("renderToolbar",this),this},renderMessageForm(){var e,t;const n=this.el.querySelector(".message-form-container");var r;Ya((r=Object.assign(this.model.toJSON(),{hint_value:null===(e=this.el.querySelector(".spoiler-hint"))||void 0===e?void 0:e.value,label_message:this.model.get("composing_spoiler")?zd("Hidden message"):zd("Message"),label_spoiler_hint:zd("Optional hint"),message_value:null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value,show_send_button:Vc.settings.get("show_send_button"),show_toolbar:Vc.settings.get("show_toolbar"),unread_msgs:zd("You have unread messages")}),Za(o_(),r.unread_msgs,r.label_spoiler_hint||"",r.hint_value||"",r.composing_spoiler?"":"hidden",r.show_send_button?"chat-textarea-send-button":"",r.composing_spoile?"spoiler":"",r.label_message,r.message_value||"")),n),this.el.addEventListener("focusin",e=>this.emitFocused(e)),this.el.addEventListener("focusout",e=>this.emitBlurred(e)),this.renderToolbar()},showControlBox(){var e;null===(e=Uc.chatboxviews.get("controlbox"))||void 0===e||e.show(),this.hide()},showUserDetailsModal(e){e.preventDefault(),Vc.modal.show(Jv,{model:this.model},e)},onDragOver(e){e.preventDefault()},onDrop(e){0!=e.dataTransfer.files.length&&(e.preventDefault(),this.model.sendFiles(e.dataTransfer.files))},async renderHeading(){const e=await this.generateHeadingTemplate();Ya(e,this.el.querySelector(".chat-head-chatbox"))},async getHeadingStandaloneButton(e){const t=await e;return Za(c_(),t.a_class,t.icon_class,t.handler,t.i18n_title)},async getHeadingDropdownItem(e){const t=await e;return Za(a_(),t.a_class,t.handler,t.i18n_title,t.icon_class,t.i18n_text)},async generateHeadingTemplate(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{},r=zd("The User's Profile Image"),i=Object.assign({alt_text:r,extra_classes:"",height:40,width:40},n),o=await this.getHeadingButtons(),s=o.filter(e=>e.standalone),a=o.filter(e=>!e.standalone);return(e=>{const t=Za(r_(),op(e.avatar_data));return Za(n_(),e.status?"":"chatbox-title--no-desc",Uc.api.settings.get("singleton")?"":Za(t_()),e.type!==Uc.HEADLINES_TYPE?Za(e_(),e.showUserDetailsModal,t):"",e.jid,e.type!==Uc.HEADLINES_TYPE?Za(Zv(),e.showUserDetailsModal,e.display_name):e.display_name,e.dropdown_btns.length?Za(Kv(),e.dropdown_btns):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>Qh(e,"")))(e):"",e.status?Za(Yv(),e.status):"")})(Object.assign(this.model.toJSON(),{avatar_data:i,display_name:this.model.getDisplayName(),dropdown_btns:a.map(e=>this.getHeadingDropdownItem(e)),showUserDetailsModal:e=>this.showUserDetailsModal(e),standalone_btns:s.map(e=>this.getHeadingStandaloneButton(e))}))},getHeadingButtons(){const e=[{a_class:"show-user-details-modal",handler:e=>this.showUserDetailsModal(e),i18n_text:zd("Details"),i18n_title:zd("See more information about this person"),icon_class:"fa-id-card",name:"details",standalone:"overlayed"===Vc.settings.get("view_mode")}];return Vc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:zd("Close"),i18n_title:zd("Close and end this conversation"),icon_class:"fa-times",name:"close",standalone:"overlayed"===Vc.settings.get("view_mode")}),Uc.api.hook("getHeadingButtons",this,e)},getToolbarOptions:()=>({}),maybeScrollDown(e){!(!(null==e?void 0:e.get("is_archived"))&&"me"===(null==e?void 0:e.get("sender")))&&this.model.get("scrolled")||this.model.isHidden()||this.debouncedScrollDown()},scrollDown(e){var t,n;if(null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.get("scrolled")&&h_.safeSave(this.model,{scrolled:!1,scrollTop:null}),this.msgs_container.scrollTo){const e=this.msgs_container.scrollTop?"smooth":"auto";this.msgs_container.scrollTo({top:this.msgs_container.scrollHeight,behavior:e})}else this.msgs_container.scrollTop=this.msgs_container.scrollHeight;this.onScrolledDown()},maintainScrollTop(){const e=this.model.get("scrollTop");e?this.msgs_container.scrollTop=e:this.scrollDown()},insertIntoDOM(){return Uc.chatboxviews.insertRowColumn(this.el),Vc.trigger("chatBoxInsertedIntoDOM",this),this},addSpinner(e=!1){if(null===this.el.querySelector(".spinner")){const t=h_.getElementFromTemplateResult(fp());e?(this.content.insertAdjacentElement("beforeend",t),this.scrollDown()):this.content.insertAdjacentElement("afterbegin",t)}},clearSpinner(){this.content.querySelectorAll(".spinner").forEach(h_.removeElement)},onStatusMessageChanged(e){this.renderHeading(),Vc.trigger("contactStatusMessageChanged",{contact:e.attributes,message:e.get("status")})},markFollowups(e){const t=e.getAttribute("data-from"),n=e.previousElementSibling,r=f_(e.getAttribute("data-isodate")),i=e.nextElementSibling;h_.hasClass("chat-msg--action",e)||h_.hasClass("chat-msg--action",n)||h_.hasClass("chat-info",e)||h_.hasClass("chat-info",n)||n.getAttribute("data-from")!==t||!r.isBefore(f_(n.getAttribute("data-isodate")).add(10,"minutes"))||e.getAttribute("data-encrypted")!==n.getAttribute("data-encrypted")||h_.addClass("chat-msg--followup",e),i&&(!h_.hasClass("chat-msg--action",e)&&h_.hasClass("chat-info",e)&&i.getAttribute("data-from")===t&&f_(i.getAttribute("data-isodate")).isBefore(r.add(10,"minutes"))&&e.getAttribute("data-encrypted")===i.getAttribute("data-encrypted")?h_.addClass("chat-msg--followup",i):h_.removeClass("chat-msg--followup",i))},parseMessageForCommands(e){const t=e.replace(/^\s*/,"").match(/^\/(.*)\s*$/);if(t){if("clear"===t[1])return this.clearMessages(),!0;if("close"===t[1])return this.close(),!0;if("help"===t[1])return this.model.set({show_help_messages:!0}),!0}},async onFormSubmitted(e){var t;e.preventDefault();const n=this.el.querySelector(".chat-textarea"),r=n.value.trim();if(Vc.settings.get("message_limit")&&r.length>Vc.settings.get("message_limit")||!r.replace(/\s/g,"").length)return;if(!Uc.connection.authenticated){const e=zd("Sorry, the connection has been lost, and your message could not be sent");return Vc.alert("error",zd("Error"),e),void Vc.connection.reconnect()}let i,o={};this.model.get("composing_spoiler")&&(o=this.el.querySelector("form.sendXMPPMessage input.spoiler-hint"),i=o.value),h_.addClass("disabled",n),n.setAttribute("disabled","disabled"),null===(t=this.el.querySelector("converse-emoji-dropdown"))||void 0===t||t.hideMenu();const s=this.parseMessageForCommands(r),a=s?null:await this.model.sendMessage(r,i);(s||a)&&(o.value="",n.value="",h_.removeClass("correcting",n),n.style.height="auto",this.updateCharCounter(n.value)),a&&Vc.trigger("messageSend",a),"overlayed"===Vc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display="none"),n.removeAttribute("disabled"),h_.removeClass("disabled",n),"overlayed"===Vc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display=""),this.model.setChatState(Uc.ACTIVE,{silent:!0}),n.focus()},updateCharCounter(e){if(Vc.settings.get("message_limit")){const t=this.el.querySelector(".message-limit"),n=Vc.settings.get("message_limit")-e.length;t.textContent=n,n<1?h_.addClass("error",t):h_.removeClass("error",t)}},onPaste(e){if(0!==e.clipboardData.files.length)return e.preventDefault(),void this.model.sendFiles(Array.from(e.clipboardData.files));this.updateCharCounter(e.clipboardData.getData("text/plain"))},autocompleteInPicker(e,t){const n=this.el.querySelector("converse-emoji-dropdown"),r=this.el.querySelector("converse-emoji-picker");if(r&&n)return r.model.set({ac_position:e.selectionStart,autocompleting:t,query:t}),n.showMenu(),!0},onEmojiReceivedFromPicker(e){const t=this.el.querySelector("converse-emoji-picker").model,n=t.get("autocompleting"),r=t.get("ac_position");this.insertIntoTextArea(e,n,!1,r)},onKeyUp(e){this.updateCharCounter(e.target.value)},onKeyDown(e){if(!e.ctrlKey){if(!e.shiftKey&&!e.altKey&&!e.metaKey)if(e.keyCode===rl.keycodes.TAB){const t=h_.getCurrentWord(e.target,null,/(:.*?:)/g);t.startsWith(":")&&this.autocompleteInPicker(e.target,t)&&(e.preventDefault(),e.stopPropagation())}else{if(e.keyCode===rl.keycodes.FORWARD_SLASH)return;if(e.keyCode===rl.keycodes.ESCAPE)return this.onEscapePressed(e);if(e.keyCode===rl.keycodes.ENTER)return this.onEnterPressed(e);if(e.keyCode!==rl.keycodes.UP_ARROW||e.target.selectionEnd){if(e.keyCode===rl.keycodes.DOWN_ARROW&&e.target.selectionEnd===e.target.value.length&&h_.hasClass("correcting",this.el.querySelector(".chat-textarea")))return this.editLaterMessage()}else{const e=this.el.querySelector(".chat-textarea");if(!e.value||h_.hasClass("correcting",e))return this.editEarlierMessage()}}[rl.keycodes.SHIFT,rl.keycodes.META,rl.keycodes.META_RIGHT,rl.keycodes.ESCAPE,rl.keycodes.ALT].includes(e.keyCode)||this.model.get("chat_state")!==Uc.COMPOSING&&this.model.setChatState(Uc.COMPOSING)}},getOwnMessages(){return this.model.messages.filter({sender:"me"})},onEnterPressed(e){return this.onFormSubmitted(e)},onEscapePressed(e){e.preventDefault();const t=this.model.messages.findLastIndex("correcting"),n=t>=0?this.model.messages.at(t):null;n&&n.save("correcting",!1),this.insertIntoTextArea("",!0,!1)},async onMessageRetractButtonClicked(e){if("me"!==e.get("sender"))return zn.error("onMessageRetractButtonClicked called for someone else's message!");const t=zd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere."),n=[zd("Are you sure you want to retract this message?")];Vc.settings.get("show_retraction_warning")&&(n[1]=t),await Vc.confirm(zd("Confirm"),n)&&this.model.retractOwnMessage(e)},onMessageEditButtonClicked(e){var t;const n=this.model.messages.findWhere("correcting"),r=null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value;(!r||n&&n.get("message")===r||confirm(zd("You have an unsent message which will be lost if you continue. Are you sure?")))&&(n!==e?(null==n||n.save("correcting",!1),e.save("correcting",!0),this.insertIntoTextArea(h_.prefixMentions(e),!0,!0)):(e.save("correcting",!1),this.insertIntoTextArea("",!0,!1)))},editLaterMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t<this.model.messages.length-1;){t+=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e?(this.insertIntoTextArea(h_.prefixMentions(e),!0,!0),e.save("correcting",!0)):this.insertIntoTextArea("",!0,!1)},editEarlierMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t>0;){t-=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e=e||this.getOwnMessages().reverse().find(e=>e.get("editable")),e&&(this.insertIntoTextArea(h_.prefixMentions(e),!0,!0),e.save("correcting",!0))},inputChanged(e){const t=e.target.scrollHeight+"px";e.target.style.height!=t&&(e.target.style.height="auto",e.target.style.height=t)},async clearMessages(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(zd("Are you sure you want to clear the messages from this conversation?"))&&await this.model.clearMessages(),this},insertIntoTextArea(e,t=!1,n=!1,r){const i=this.el.querySelector(".chat-textarea");if(n?h_.addClass("correcting",i):h_.removeClass("correcting",i),t)i.value=r&&"string"==typeof t?i.value.replace(new RegExp(t,"g"),(n,i)=>i==r-t.length?e+" ":n):e;else{let t=i.value;t&&" "!==t[t.length-1]&&(t+=" "),i.value=t+e+" "}this.updateCharCounter(i.value),h_.placeCaretAtEnd(i)},onPresenceChanged(e){const t=e.get("show"),n=this.model.getDisplayName();let r;h_.isVisible(this.el)&&("offline"===t?r=zd("%1$s has gone offline",n):"away"===t?r=zd("%1$s has gone away",n):"dnd"===t?r=zd("%1$s is busy",n):"online"===t&&(r=zd("%1$s is online",n)),r&&this.model.createMessage({message:r,type:"info"}))},async close(e){return e&&e.preventDefault&&e.preventDefault(),Uc.router.history.getFragment()==="converse/chat?jid="+this.model.get("jid")&&Uc.router.navigate(""),Vc.connection.connected()&&(this.model.setChatState(Uc.INACTIVE),this.model.sendChatState()),await this.model.close(),this.remove(),Vc.trigger("chatBoxClosed",this),this},emitBlurred(e){this.el.contains(document.activeElement)||this.el.contains(e.relatedTarget)||Vc.trigger("chatBoxBlurred",this,e)},emitFocused(e){this.el.contains(e.relatedTarget)||Vc.trigger("chatBoxFocused",this,e)},focus(){const e=this.el.getElementsByClassName("chat-textarea")[0];return e&&document.activeElement!==e&&e.focus(),this},maybeFocus(){Vc.settings.get("auto_focus")&&this.focus()},hide(){return this.el.classList.add("hidden"),this},afterShown(){this.model.clearUnreadMsgCounter(),this.model.setChatState(Uc.ACTIVE),this.scrollDown(),this.maybeFocus()},show(){this.model.get("hidden")?zn.debug("Not showing chat ".concat(this.model.get("jid")," because it's set as hidden")):h_.isVisible(this.el)?this.maybeFocus():Vc.settings.get("animate")?h_.fadeIn(this.el,()=>this.afterShown()):(h_.showElement(this.el),this.afterShown())},showNewMessagesIndicator(){h_.showElement(this.el.querySelector(".new-msgs-indicator"))},hideNewMessagesIndicator(){const e=this.el.querySelector(".new-msgs-indicator");null!==e&&e.classList.add("hidden")},_markScrolled:function(e){let t=!0,n=null;this.msgs_container.scrollTop+this.msgs_container.clientHeight>=this.msgs_container.scrollHeight-62?(t=!1,this.onScrolledDown()):0===this.msgs_container.scrollTop?Vc.trigger("chatBoxScrolledUp",this):n=e.target.scrollTop,h_.safeSave(this.model,{scrolled:t,scrollTop:n})},viewUnreadMessages(){this.model.save({scrolled:!1,scrollTop:null}),this.scrollDown()},onScrolledDown(){if(this.hideNewMessagesIndicator(),!this.model.isHidden()){this.model.clearUnreadMsgCounter();const e=window.location.hash;e&&this.model.messages.get(e.slice(1))&&Uc.router.history.navigate()}Vc.trigger("chatBoxScrolledDown",{chatbox:this.model})},onWindowStateChanged(e){"visible"===e?this.model.isHidden()||this.model.get("num_unread",0)&&this.model.clearUnreadMsgCounter():"hidden"===e&&(this.model.setChatState(Uc.INACTIVE,{silent:!0}),this.model.sendChatState())}}),g_={chatviews:{get:e=>void 0===e?Object.values(Uc.chatboxviews.getAll()):"string"==typeof e?Uc.chatboxviews.get(e):e.map(e=>Uc.chatboxviews.get(e))}};
 /**
  * @module converse-chatview
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:hv,dayjs:fv}=Yc.env,pv=Yc.env.utils,gv=jd.extend({length:200,className:"chatbox hidden",is_chatroom:!1,events:{"click .chatbox-navback":"showControlBox","click .new-msgs-indicator":"viewUnreadMessages","click .send-button":"onFormSubmitted","click .toggle-clear":"clearMessages","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","paste .chat-textarea":"onPaste"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:status",this.onStatusMessageChanged),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"vcard:change",this.renderHeading),this.model.contact&&this.listenTo(this.model.contact,"destroy",this.renderHeading),this.model.rosterContactAdded&&this.model.rosterContactAdded.then(()=>{this.listenTo(this.model.contact,"change:nickname",this.renderHeading),this.renderHeading()}),this.listenTo(this.model.presence,"change:show",this.onPresenceChanged),this.render(),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),await this.updateAfterMessagesFetched(),this.model.maybeShow(),qc.trigger("chatBoxViewInitialized",this)},initDebounced(){this.markScrolled=Tc(this._markScrolled,100),this.debouncedScrollDown=Tc(this.scrollDown,100),qc.settings.get("debounced_content_rendering")?(this.renderChatHistory=Tc(()=>this.renderChatContent(!1),100),this.renderNotifications=Tc(()=>this.renderChatContent(!0),100)):(this.renderChatHistory=()=>this.renderChatContent(!1),this.renderNotifications=()=>this.renderChatContent(!0))},render(){const e=Lm(Object.assign(this.model.toJSON(),{markScrolled:e=>this.markScrolled(e)}));return Wa(e,this.el),this.content=this.el.querySelector(".chat-content"),this.notifications=this.el.querySelector(".chat-content__notifications"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderChatContent(),this.renderMessageForm(),this.renderHeading(),this},onMessageAdded(e){this.renderChatHistory(),pv.isNewMessage(e)&&("me"===e.get("sender")?this.model.set("scrolled",!1):this.model.get("scrolled",!0)&&this.showNewMessagesIndicator())},getNotifications(){return this.model.notifications.get("chat_state")===Lc.COMPOSING?dd("%1$s is typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.PAUSED?dd("%1$s has stopped typing",this.model.getDisplayName()):this.model.notifications.get("chat_state")===Lc.GONE?dd("%1$s has gone away",this.model.getDisplayName()):""},getHelpMessages:()=>["<strong>/clear</strong>: ".concat(dd("Remove messages")),"<strong>/close</strong>: ".concat(dd("Close this chat")),"<strong>/me</strong>: ".concat(dd("Write in the third person")),"<strong>/help</strong>: ".concat(dd("Show this menu"))],renderHelpMessages(){Wa(Ga(uv(),this.model,this.getHelpMessages(),!this.model.get("show_help_messages"),this.model.get("type")),this.help_container)},renderChatContent(e=!1){this.tpl_chat_content||(this.tpl_chat_content=e=>Ga(lv(),this,e.messages,e.notifications));const t=this.model.messages.models,n=e?t:Array.from(t);Wa(this.tpl_chat_content({messages:n,notifications:this.getNotifications()}),this.msgs_container)},renderToolbar(){if(!qc.settings.get("show_toolbar"))return this;const e=Object.assign({model:this.model,chatview:this},this.model.toJSON(),this.getToolbarOptions());return Wa((e=>{const t=qc.settings.get("message_limit"),n=qc.settings.get("visible_toolbar_buttons").call,r=qc.settings.get("visible_toolbar_buttons").emoji,i=qc.settings.get("show_send_button"),s=qc.settings.get("visible_toolbar_buttons").spoiler,o=qc.settings.get("show_toolbar");return Ga(Vm(),e.chatview,e.model,e.composing_spoiler,e.hidden_occupants,e.is_groupchat,n,r,e.show_occupants_toggle,i,s,o,t)})(e),this.el.querySelector(".chat-toolbar")),qc.trigger("renderToolbar",this),this},renderMessageForm(){var e,t;const n=this.el.querySelector(".message-form-container");var r;Wa((r=Object.assign(this.model.toJSON(),{hint_value:null===(e=this.el.querySelector(".spoiler-hint"))||void 0===e?void 0:e.value,label_message:this.model.get("composing_spoiler")?dd("Hidden message"):dd("Message"),label_spoiler_hint:dd("Optional hint"),message_value:null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value,show_send_button:qc.settings.get("show_send_button"),show_toolbar:qc.settings.get("show_toolbar"),unread_msgs:dd("You have unread messages")}),Ga(Wm(),r.unread_msgs,r.label_spoiler_hint||"",r.hint_value||"",r.composing_spoiler?"":"hidden",r.show_send_button?"chat-textarea-send-button":"",r.composing_spoile?"spoiler":"",r.label_message,r.message_value||"")),n),this.el.addEventListener("focusin",e=>this.emitFocused(e)),this.el.addEventListener("focusout",e=>this.emitBlurred(e)),this.renderToolbar()},showControlBox(){Lc.chatboxviews.get("controlbox").show(),this.hide()},showUserDetailsModal(e){e.preventDefault(),void 0===this.user_details_modal&&(this.user_details_modal=new Lc.UserDetailsModal({model:this.model})),this.user_details_modal.show(e)},onDragOver(e){e.preventDefault()},onDrop(e){0!=e.dataTransfer.files.length&&(e.preventDefault(),this.model.sendFiles(e.dataTransfer.files))},async renderHeading(){const e=await this.generateHeadingTemplate();Wa(e,this.el.querySelector(".chat-head-chatbox"))},async getHeadingStandaloneButton(e){const t=await e;return Ga(cv(),t.a_class,t.icon_class,t.handler,t.i18n_title)},async getHeadingDropdownItem(e){const t=await e;return Ga(av(),t.a_class,t.handler,t.i18n_title,t.icon_class,t.i18n_text)},async generateHeadingTemplate(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{},r=await this.getHeadingButtons(),i=r.filter(e=>e.standalone),s=r.filter(e=>!e.standalone);return(e=>{const t={alt_text:dd("The User's Profile Image"),extra_classes:"",height:40,width:40};return Ga(Um(),e.status?"":"chatbox-title--no-desc",e._converse.api.settings.get("singleton")?"":Ga(Hm()),e.type!==e._converse.HEADLINES_TYPE?Ga(qm(),bf(Object.assign({},e,t))):"",e.jid,e.url?Ga(Bm(),e.url,e.display_name):e.display_name,e.dropdown_btns.length?Ga(Fm(),e.dropdown_btns):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>oh(e,"")))(e):"",e.status?Ga(zm(),e.status):"")})(Object.assign(n,this.model.toJSON(),{_converse:Lc,dropdown_btns:s.map(e=>this.getHeadingDropdownItem(e)),standalone_btns:i.map(e=>this.getHeadingStandaloneButton(e)),display_name:this.model.getDisplayName()}))},getHeadingButtons(){const e=[{a_class:"show-user-details-modal",handler:e=>this.showUserDetailsModal(e),i18n_text:dd("Details"),i18n_title:dd("See more information about this person"),icon_class:"fa-id-card",name:"details",standalone:"overlayed"===qc.settings.get("view_mode")}];return qc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:dd("Close"),i18n_title:dd("Close and end this conversation"),icon_class:"fa-times",name:"close",standalone:"overlayed"===qc.settings.get("view_mode")}),Lc.api.hook("getHeadingButtons",this,e)},getToolbarOptions:()=>({}),async updateAfterMessagesFetched(){await this.model.messages.fetched,this.renderChatContent(),this.insertIntoDOM(),this.scrollDown(),qc.trigger("afterMessagesFetched",this.model)},maybeScrollDown(e){("me"!==e.get("sender")||e.get("is_archived"))&&this.model.isHidden()||this.debouncedScrollDown()},scrollDown(e){var t,n;if(null==e||null===(t=e.preventDefault)||void 0===t||t.call(e),null==e||null===(n=e.stopPropagation)||void 0===n||n.call(e),this.model.get("scrolled")&&pv.safeSave(this.model,{scrolled:!1,scrollTop:null}),this.msgs_container.scrollTo){const e=this.msgs_container.scrollTop?"smooth":"auto";this.msgs_container.scrollTo({top:this.msgs_container.scrollHeight,behavior:e})}else this.msgs_container.scrollTop=this.msgs_container.scrollHeight;this.onScrolledDown()},maintainScrollTop(){const e=this.model.get("scrollTop");e?this.msgs_container.scrollTop=e:this.scrollDown()},insertIntoDOM(){return Lc.chatboxviews.insertRowColumn(this.el),qc.trigger("chatBoxInsertedIntoDOM",this),this},addSpinner(e=!1){if(null===this.el.querySelector(".spinner")){const t=pv.getElementFromTemplateResult(Tf());e?(this.content.insertAdjacentElement("beforeend",t),this.scrollDown()):this.content.insertAdjacentElement("afterbegin",t)}},clearSpinner(){this.content.querySelectorAll(".spinner").forEach(pv.removeElement)},onStatusMessageChanged(e){this.renderHeading(),qc.trigger("contactStatusMessageChanged",{contact:e.attributes,message:e.get("status")})},shouldShowOnTextMessage(){return!Lc.isUniView()&&!pv.isVisible(this.el)},markFollowups(e){const t=e.getAttribute("data-from"),n=e.previousElementSibling,r=fv(e.getAttribute("data-isodate")),i=e.nextElementSibling;pv.hasClass("chat-msg--action",e)||pv.hasClass("chat-msg--action",n)||pv.hasClass("chat-info",e)||pv.hasClass("chat-info",n)||n.getAttribute("data-from")!==t||!r.isBefore(fv(n.getAttribute("data-isodate")).add(10,"minutes"))||e.getAttribute("data-encrypted")!==n.getAttribute("data-encrypted")||pv.addClass("chat-msg--followup",e),i&&(!pv.hasClass("chat-msg--action",e)&&pv.hasClass("chat-info",e)&&i.getAttribute("data-from")===t&&fv(i.getAttribute("data-isodate")).isBefore(r.add(10,"minutes"))&&e.getAttribute("data-encrypted")===i.getAttribute("data-encrypted")?pv.addClass("chat-msg--followup",i):pv.removeClass("chat-msg--followup",i))},parseMessageForCommands(e){const t=e.replace(/^\s*/,"").match(/^\/(.*)\s*$/);if(t){if("clear"===t[1])return this.clearMessages(),!0;if("close"===t[1])return this.close(),!0;if("help"===t[1])return this.model.set({show_help_messages:!0}),!0}},async onFormSubmitted(e){var t;e.preventDefault();const n=this.el.querySelector(".chat-textarea"),r=n.value.trim();if(qc.settings.get("message_limit")&&r.length>qc.settings.get("message_limit")||!r.replace(/\s/g,"").length)return;if(!Lc.connection.authenticated){const e=dd("Sorry, the connection has been lost, and your message could not be sent");return qc.alert("error",dd("Error"),e),void qc.connection.reconnect()}let i,s={};this.model.get("composing_spoiler")&&(s=this.el.querySelector("form.sendXMPPMessage input.spoiler-hint"),i=s.value),pv.addClass("disabled",n),n.setAttribute("disabled","disabled"),null===(t=this.el.querySelector("converse-emoji-dropdown"))||void 0===t||t.hideMenu();const o=this.parseMessageForCommands(r),a=o?null:await this.model.sendMessage(r,i);(o||a)&&(s.value="",n.value="",pv.removeClass("correcting",n),n.style.height="auto",this.updateCharCounter(n.value)),a&&qc.trigger("messageSend",a),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display="none"),n.removeAttribute("disabled"),pv.removeClass("disabled",n),"overlayed"===qc.settings.get("view_mode")&&(this.msgs_container.parentElement.style.display=""),this.model.setChatState(Lc.ACTIVE,{silent:!0}),n.focus()},updateCharCounter(e){if(qc.settings.get("message_limit")){const t=this.el.querySelector(".message-limit"),n=qc.settings.get("message_limit")-e.length;t.textContent=n,n<1?pv.addClass("error",t):pv.removeClass("error",t)}},onPaste(e){if(0!==e.clipboardData.files.length)return e.preventDefault(),void this.model.sendFiles(Array.from(e.clipboardData.files));this.updateCharCounter(e.clipboardData.getData("text/plain"))},autocompleteInPicker(e,t){const n=this.el.querySelector("converse-emoji-dropdown"),r=this.el.querySelector("converse-emoji-picker");if(r&&n)return r.model.set({ac_position:e.selectionStart,autocompleting:t,query:t}),n.showMenu(),!0},onEmojiReceivedFromPicker(e){const t=this.el.querySelector("converse-emoji-picker").model,n=t.get("autocompleting"),r=t.get("ac_position");this.insertIntoTextArea(e,n,!1,r)},onKeyUp(e){this.updateCharCounter(e.target.value)},onKeyDown(e){if(!e.ctrlKey){if(!e.shiftKey&&!e.altKey&&!e.metaKey)if(e.keyCode===Yc.keycodes.TAB){const t=pv.getCurrentWord(e.target,null,/(:.*?:)/g);t.startsWith(":")&&this.autocompleteInPicker(e.target,t)&&(e.preventDefault(),e.stopPropagation())}else{if(e.keyCode===Yc.keycodes.FORWARD_SLASH)return;if(e.keyCode===Yc.keycodes.ESCAPE)return this.onEscapePressed(e);if(e.keyCode===Yc.keycodes.ENTER)return this.onEnterPressed(e);if(e.keyCode!==Yc.keycodes.UP_ARROW||e.target.selectionEnd){if(e.keyCode===Yc.keycodes.DOWN_ARROW&&e.target.selectionEnd===e.target.value.length&&pv.hasClass("correcting",this.el.querySelector(".chat-textarea")))return this.editLaterMessage()}else{const e=this.el.querySelector(".chat-textarea");if(!e.value||pv.hasClass("correcting",e))return this.editEarlierMessage()}}[Yc.keycodes.SHIFT,Yc.keycodes.META,Yc.keycodes.META_RIGHT,Yc.keycodes.ESCAPE,Yc.keycodes.ALT].includes(e.keyCode)||this.model.get("chat_state")!==Lc.COMPOSING&&this.model.setChatState(Lc.COMPOSING)}},getOwnMessages(){return this.model.messages.filter({sender:"me"})},onEnterPressed(e){return this.onFormSubmitted(e)},onEscapePressed(e){e.preventDefault();const t=this.model.messages.findLastIndex("correcting"),n=t>=0?this.model.messages.at(t):null;n&&n.save("correcting",!1),this.insertIntoTextArea("",!0,!1)},async onMessageRetractButtonClicked(e){if("me"!==e.get("sender"))return Pn.error("onMessageRetractButtonClicked called for someone else's message!");const t=dd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere."),n=[dd("Are you sure you want to retract this message?")];qc.settings.get("show_retraction_warning")&&(n[1]=t),await qc.confirm(dd("Confirm"),n)&&this.model.retractOwnMessage(e)},onMessageEditButtonClicked(e){var t;const n=this.model.messages.findWhere("correcting"),r=null===(t=this.el.querySelector(".chat-textarea"))||void 0===t?void 0:t.value;(!r||n&&n.get("message")===r||confirm(dd("You have an unsent message which will be lost if you continue. Are you sure?")))&&(n!==e?(null==n||n.save("correcting",!1),e.save("correcting",!0),this.insertIntoTextArea(pv.prefixMentions(e),!0,!0)):(e.save("correcting",!1),this.insertIntoTextArea("",!0,!1)))},editLaterMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t<this.model.messages.length-1;){t+=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e?(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0)):this.insertIntoTextArea("",!0,!1)},editEarlierMessage(){let e,t=this.model.messages.findLastIndex("correcting");if(t>=0)for(this.model.messages.at(t).save("correcting",!1);t>0;){t-=1;const n=this.model.messages.at(t);if(n.get("editable")){e=n;break}}e=e||this.getOwnMessages().reverse().find(e=>e.get("editable")),e&&(this.insertIntoTextArea(pv.prefixMentions(e),!0,!0),e.save("correcting",!0))},inputChanged(e){const t=e.target.scrollHeight+"px";e.target.style.height!=t&&(e.target.style.height="auto",e.target.style.height=t)},async clearMessages(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(dd("Are you sure you want to clear the messages from this conversation?"))&&await this.model.clearMessages(),this},insertIntoTextArea(e,t=!1,n=!1,r){const i=this.el.querySelector(".chat-textarea");if(n?pv.addClass("correcting",i):pv.removeClass("correcting",i),t)i.value=r&&"string"==typeof t?i.value.replace(new RegExp(t,"g"),(n,i)=>i==r-t.length?e+" ":n):e;else{let t=i.value;t&&" "!==t[t.length-1]&&(t+=" "),i.value=t+e+" "}this.updateCharCounter(i.value),pv.placeCaretAtEnd(i)},onPresenceChanged(e){const t=e.get("show"),n=this.model.getDisplayName();let r;pv.isVisible(this.el)&&("offline"===t?r=dd("%1$s has gone offline",n):"away"===t?r=dd("%1$s has gone away",n):"dnd"===t?r=dd("%1$s is busy",n):"online"===t&&(r=dd("%1$s is online",n)),r&&this.model.createMessage({message:r,type:"info"}))},async close(e){return e&&e.preventDefault&&e.preventDefault(),Lc.router.history.getFragment()==="converse/chat?jid="+this.model.get("jid")&&Lc.router.navigate(""),qc.connection.connected()&&(this.model.setChatState(Lc.INACTIVE),this.model.sendChatState()),await this.model.close(),this.remove(),qc.trigger("chatBoxClosed",this),this},emitBlurred(e){this.el.contains(document.activeElement)||this.el.contains(e.relatedTarget)||qc.trigger("chatBoxBlurred",this,e)},emitFocused(e){this.el.contains(e.relatedTarget)||qc.trigger("chatBoxFocused",this,e)},focus(){const e=this.el.getElementsByClassName("chat-textarea")[0];return e&&document.activeElement!==e&&e.focus(),this},maybeFocus(){qc.settings.get("auto_focus")&&this.focus()},hide(){return this.el.classList.add("hidden"),this},afterShown(){this.model.clearUnreadMsgCounter(),this.model.setChatState(Lc.ACTIVE),this.scrollDown(),this.maybeFocus()},show(){pv.isVisible(this.el)?this.maybeFocus():(qc.trigger("beforeShowingChatView",this),qc.settings.get("animate")?pv.fadeIn(this.el,()=>this.afterShown()):(pv.showElement(this.el),this.afterShown()))},showNewMessagesIndicator(){pv.showElement(this.el.querySelector(".new-msgs-indicator"))},hideNewMessagesIndicator(){const e=this.el.querySelector(".new-msgs-indicator");null!==e&&e.classList.add("hidden")},_markScrolled:function(e){let t=!0,n=null;this.msgs_container.scrollTop+this.msgs_container.clientHeight>=this.msgs_container.scrollHeight-62?(t=!1,this.onScrolledDown()):0===this.msgs_container.scrollTop?qc.trigger("chatBoxScrolledUp",this):n=e.target.scrollTop,pv.safeSave(this.model,{scrolled:t,scrollTop:n})},viewUnreadMessages(){this.model.save({scrolled:!1,scrollTop:null}),this.scrollDown()},onScrolledDown(){this.hideNewMessagesIndicator(),!this.model.isHidden()&&this.model.clearUnreadMsgCounter(),qc.trigger("chatBoxScrolledDown",{chatbox:this.model})},onWindowStateChanged(e){"visible"===e?this.model.isHidden()||this.model.get("num_unread",0)&&this.model.clearUnreadMsgCounter():"hidden"===e&&(this.model.setChatState(Lc.INACTIVE,{silent:!0}),this.model.sendChatState())}});let mv;Yc.plugins.add("converse-chatview",{dependencies:["converse-chatboxviews","converse-chat","converse-disco","converse-modal"],initialize(){qc.settings.extend({auto_focus:!0,debounced_content_rendering:!0,filter_url_query_params:null,image_urls_regex:null,message_limit:0,muc_hats:["xep317"],role_affiliation_hat_conversions:{},show_images_inline:!0,show_message_avatar:!0,show_retraction_warning:!0,show_send_button:!0,show_toolbar:!0,time_format:"HH:mm",use_system_emojis:!0,visible_toolbar_buttons:{call:!1,clear:!0,emoji:!0,spoiler:!0}}),Lc.ChatBoxView=gv,Lc.UserDetailsModal=Kd.extend({id:"user-details-modal",events:{"click button.refresh-contact":"refreshContact","click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){Kd.prototype.initialize.apply(this,arguments),this.model.rosterContactAdded.then(()=>this.registerContactEventHandlers()),this.listenTo(this.model,"change",this.render),this.registerContactEventHandlers(),qc.trigger("userDetailsModalInitialized",this.model)},toHTML(){var e;const t=null===(e=this.model)||void 0===e?void 0:e.vcard,n=t?t.toJSON():{};return ov(Object.assign(this.model.toJSON(),n,{_converse:Lc,allow_contact_removal:qc.settings.get("allow_contact_removal"),display_name:this.model.getDisplayName(),is_roster_contact:void 0!==this.model.contact,removeContact:e=>this.removeContact(e),view:this,utils:pv}))},registerContactEventHandlers(){void 0!==this.model.contact&&(this.listenTo(this.model.contact,"change",this.render),this.listenTo(this.model.contact.vcard,"change",this.render),this.model.contact.on("destroy",()=>{delete this.model.contact,this.render()}))},async refreshContact(e){e&&e.preventDefault&&e.preventDefault();const t=this.el.querySelector(".fa-refresh");pv.addClass("fa-spin",t);try{await qc.vcard.update(this.model.contact.vcard,!0)}catch(e){Pn.fatal(e),this.alert(dd("Sorry, something went wrong while trying to refresh"),"danger")}pv.removeClass("fa-spin",t)},removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),!qc.settings.get("allow_contact_removal"))return;!0===confirm(dd("Are you sure you want to remove this contact?"))&&(this.modal.hide(),setTimeout(()=>{this.model.contact.removeFromRoster(()=>this.model.contact.destroy(),e=>{Pn.error(e),qc.alert("error",dd("Error"),[dd("Sorry, there was an error while trying to remove %1$s as a contact.",this.model.contact.getDisplayName())])})},1))}}),qc.listen.on("chatBoxViewsInitialized",()=>{const e=Lc.chatboxviews;Lc.chatboxes.on("add",async t=>{e.get(t.get("id"))||t.get("type")!==Lc.PRIVATE_CHAT_TYPE||(await t.initialized,e.add(t.get("id"),new Lc.ChatBoxView({model:t})))})}),qc.listen.on("windowStateChanged",(function(e){Lc.chatboxviews&&Lc.chatboxviews.forEach(t=>{"controlbox"!==t.model.get("id")&&t.onWindowStateChanged(e.state)})})),qc.listen.on("connected",()=>qc.disco.own.features.add(hv.NS.SPOILER)),Object.assign(qc,{chatviews:{get:e=>void 0===e?Object.values(Lc.chatboxviews.getAll()):"string"==typeof e?Lc.chatboxviews.get(e):e.map(e=>Lc.chatboxviews.get(e))}})}});let vv=0;function _v(e){mv=e}function bv(){mv=null,vv=0}const yv=Symbol("haunted.phase"),wv=Symbol("haunted.hook"),Sv=Symbol("haunted.update"),xv=Symbol("haunted.commit"),Ev=Symbol("haunted.effects"),Av=Symbol("haunted.layoutEffects");class Cv{constructor(e,t){this.update=e,this.host=t,this[wv]=new Map,this[Ev]=[],this[Av]=[]}run(e){_v(this);let t=e();return bv(),t}_runEffects(e){let t=this[e];_v(this);for(let e of t)e.call(this);bv()}runEffects(){this._runEffects(Ev)}runLayoutEffects(){this._runEffects(Av)}teardown(){this[wv].forEach(e=>{"function"==typeof e.teardown&&e.teardown()})}}const jv=Promise.resolve().then.bind(Promise.resolve());function Tv(){let e,t=[];function n(){e=null;let n=t;t=[];for(var r=0,i=n.length;r<i;r++)n[r]()}return function(r){t.push(r),null==e&&(e=jv(n))}}const Ov=Tv(),kv=Tv();class Nv{constructor(e,t){this.renderer=e,this.host=t,this.state=new Cv(this.update.bind(this),t),this[yv]=null,this._updateQueued=!1}update(){this._updateQueued||(Ov(()=>{let e=this.handlePhase(Sv);kv(()=>{this.handlePhase(xv,e),kv(()=>{this.handlePhase(Ev)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(e,t){switch(this[yv]=e,e){case xv:return this.commit(t),void this.runEffects(Av);case Sv:return this.render();case Ev:return this.runEffects(Ev)}this[yv]=null}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(e){this.state._runEffects(e)}teardown(){this.state.teardown()}}function Iv(e){class t extends Nv{constructor(e,t,n){super(e,n||t),this.frag=t}commit(t){e(t,this.frag)}}return function(e,n,r){const i=(r||n||{}).baseElement||HTMLElement,{observedAttributes:s=[],useShadowDOM:o=!0,shadowRootInit:a={}}=r||n||{};class c extends i{constructor(){super(),!1===o?this._scheduler=new t(e,this):(this.attachShadow({mode:"open",...a}),this._scheduler=new t(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||s||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(e,t,n){if(t===n)return;let r=""===n||n;Reflect.set(this,((e="")=>e.replace(/-+([a-z])?/g,(e,t)=>t?t.toUpperCase():""))(e),r)}}const l=new Proxy(i.prototype,{getPrototypeOf:e=>e,set(e,t,n,r){let i;if(t in e){if(i=Object.getOwnPropertyDescriptor(e,t),i&&i.set)return i.set.call(r,n),!0;Reflect.set(e,t,n)}return i="symbol"==typeof t||"_"===t[0]?{enumerable:!0,configurable:!0,writable:!0,value:n}:function(e){let t=e;return Object.freeze({enumerable:!0,configurable:!0,get:()=>t,set(e){t=e,this._scheduler.update()}})}(n),Object.defineProperty(r,t,i),i.set&&i.set.call(r,n),!0}});return Object.setPrototypeOf(c.prototype,l),c}}class Mv{constructor(e,t){this.id=e,this.state=t}}function Rv(e,...t){let n=vv++,r=mv[wv],i=r.get(n);return i||(i=new e(n,mv,...t),r.set(n,i)),i.update(...t)}function Dv(e){return Rv.bind(null,e)}function Pv(e){return Dv(class extends Mv{constructor(t,n,r,i){super(t,n),e(n,this)}update(e,t){this.callback=e,this.lastValues=this.values,this.values=t}call(){this.values&&!this.hasChanged()||this.run()}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){"function"==typeof this._teardown&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((e,t)=>this.lastValues[t]!==e)}})}function Lv(e,t){e[Ev].push(t)}Pv(Lv);const zv=Dv(class extends Mv{constructor(e,t,n){super(e,t),this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,Lv(t,this)}update(e){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==e&&(this._subscribe(e),this.Context=e),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(e){this.value=e,this.state.update()}_subscribe(e){const t={Context:e,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent("haunted.context",{detail:t,bubbles:!0,cancelable:!0,composed:!0}));const{unsubscribe:n,value:r}=t;this.value=n?r:e.defaultValue,this._unsubscribe=n}teardown(){this._unsubscribe&&this._unsubscribe()}});Dv(class extends Mv{constructor(e,t,n,r){super(e,t),this.value=n(),this.values=r}update(e,t){return this.hasChanged(t)&&(this.values=t,this.value=e()),this.value}hasChanged(e=[]){return e.some((e,t)=>this.values[t]!==e)}});Pv((function(e,t){e[Av].push(t)})),Dv(class extends Mv{constructor(e,t,n){super(e,t),this.updater=this.updater.bind(this),"function"==typeof n&&(n=n()),this.makeArgs(n)}update(){return this.args}updater(e){if("function"==typeof e){const t=e,[n]=this.args;e=t(n)}this.makeArgs(e),this.state.update()}makeArgs(e){this.args=Object.freeze([e,this.updater])}}),Dv(class extends Mv{constructor(e,t,n,r,i){super(e,t),this.dispatch=this.dispatch.bind(this),this.currentState=void 0!==i?i(r):r}update(e){return this.reducer=e,[this.currentState,this.dispatch]}dispatch(e){this.currentState=this.reducer(this.currentState,e),this.state.update()}});const Fv=Array.prototype.includes;const{component:Bv,createContext:qv}=function({render:e}){const t=Iv(e),n=function(e){return t=>{const n={Provider:class extends HTMLElement{constructor(){super(),this.listeners=new Set,this.addEventListener("haunted.context",this)}disconnectedCallback(){this.removeEventListener("haunted.context",this)}handleEvent(e){const{detail:t}=e;t.Context===n&&(t.value=this.value,t.unsubscribe=this.unsubscribe.bind(this,t.callback),this.listeners.add(t.callback),e.stopPropagation())}unsubscribe(e){this.listeners.delete(e)}set value(e){this._value=e;for(let t of this.listeners)t(e)}get value(){return this._value}},Consumer:e((function({render:e}){return e(zv(n))})),defaultValue:t};return n}}(t);return{component:t,createContext:n}}({render:Wa});!function(){const e=new WeakMap,t=new WeakMap;class n extends Nv{constructor(e,t){super(e,t),this.state.virtual=!0}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(e){this.host.setValue(e),this.host.commit()}teardown(){super.teardown();let n=t.get(this);e.delete(n)}}}();function Hv(){const e=Wv(['\n            <p class="brand-subtitle">','</p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://conversejs.org">Open Source</a> XMPP chat client brought to you by <a target="_blank" rel="nofollow" href="https://opkode.com">Opkode</a> </p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">Translate</a> it into your own language</p>']);return Hv=function(){return e},e}function Uv(){const e=Wv(['<p class="byline">messaging freedom</p>']);return Uv=function(){return e},e}function $v(){const e=Wv(['\n        <a class="brand-heading" href="https://conversejs.org" target="_blank" rel="noopener">\n            <span class="brand-name-wrapper ','">\n                <svg class="converse-svg-logo"\n                    xmlns:svg="http://www.w3.org/2000/svg"\n                    xmlns="http://www.w3.org/2000/svg"\n                    xmlns:xlink="http://www.w3.org/1999/xlink"\n                    viewBox="0 0 364 364">\n                    <title>Converse</title>\n                    <g class="cls-1" id="g904">\n                        <g data-name="Layer 2">\n                            <g data-name="Layer 7">\n                                <path\n                                    class="cls-3"\n                                    d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" />\n                                <path\n                                    class="cls-4"\n                                    d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class="brand-name">\n                    <span class="brand-name__text">converse<span class="subdued">.js</span></span>\n                    ',"\n                </span>\n            </span>\n        </a>\n        ","\n        "]);return $v=function(){return e},e}function Wv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Vv(){const e=Jv(['<a class="chatbox-btn close-chatbox-button fa fa-times"></a>']);return Vv=function(){return e},e}function Gv(){const e=Jv(['\n    <div class="flyout box-flyout">\n        <div class="chat-head controlbox-head">\n            ','\n        </div>\n        <div class="controlbox-panes"></div>\n    </div>']);return Gv=function(){return e},e}function Jv(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-brand-heading",Bv(e=>{const t="fullscreen"===qc.settings.get("view_mode");return Ga($v(),t?"brand-name-wrapper--fullscreen":"",t?Ga(Uv()):"",t?Ga(Hv(),e.version_name):"")},{useShadowDOM:!1}));var Xv=n(136),Qv=n.n(Xv);function Yv(){const e=s_(['\n    <converse-brand-heading></converse-brand-heading>\n    <form id="converse-login" class="converse-form" method="post">\n        <div class="conn-feedback fade-in ','">\n            <p class="feedback-subject">','</p>\n            <p class="feedback-message ','">',"</p>\n        </div>\n        ","\n    </form>\n"]);return Yv=function(){return e},e}function Kv(){const e=s_(["<p>","</p>"]);return Kv=function(){return e},e}function Zv(){const e=s_(['<input class="btn btn-primary login-anon" type="submit" value="','">']);return Zv=function(){return e},e}function e_(){const e=s_(["\n        ","\n        ","\n        ","\n    "]);return e_=function(){return e},e}function t_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-jid">',':</label>\n            <input id="converse-login-jid"\n                ?autofocus=','\n                required\n                class="form-control"\n                type="text"\n                name="jid"\n                placeholder="','"/>\n        </div>\n        ',"\n        ",'\n        <fieldset class="buttons">\n            <input class="btn btn-primary" type="submit" value="','"/>\n        </fieldset>\n        ',"\n    "]);return t_=function(){return e},e}function n_(){const e=s_(['\n        <fieldset class="switch-form">\n            <p>','</p>\n            <p><a class="register-account toggle-register-login" href="#converse/register">',"</a></p>\n        </fieldset>\n    "]);return n_=function(){return e},e}function r_(){const e=s_(['\n        <div class="form-group">\n            <label for="converse-login-password">','</label>\n            <input id="converse-login-password" class="form-control" required="required" type="password" name="password" placeholder="','"/>\n        </div>\n    ']);return r_=function(){return e},e}function i_(){const e=s_(['\n        <div class="form-group form-check login-trusted">\n            <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" ?checked=','>\n            <label for="converse-login-trusted" class="form-check-label login-trusted__desc">','</label>\n            <i class="fa fa-info-circle" data-toggle="popover"\n                data-title="Trusted device?"\n                data-content="','"></i>\n        </div>\n    ']);return i_=function(){return e},e}function s_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const o_=e=>{const t=dd("Log in"),n=dd("XMPP Address");return Ga(t_(),n,!!qc.settings.get("auto_focus"),e.placeholder_username,e.authentication!==e.EXTERNAL?(()=>{const e=dd("Password");return Ga(r_(),e,e)})():"",e.show_trust_checkbox?(e=>{const t=dd("To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It's important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available."),n=dd("This is a trusted device");return Ga(i_(),e._converse.config.get("trusted"),n,t)})(e):"",t,(e=>{const t=e._converse;return t.allow_registration&&!qc.settings.get("auto_login")&&t.pluggable.plugins["converse-register"].enabled(t)})(e)?(()=>{const e=dd("Create an account"),t=dd("Don't have a chat account?");return Ga(n_(),t,e)})():"")};var a_=e=>Ga(Yv(),e.conn_feedback_subject?e.conn_feedback_class:"hidden",e.conn_feedback_subject,e.conn_feedback_message?"":"hidden",e.conn_feedback_message,"CONNECTING"===e._converse.CONNECTION_STATUS[e.connection_status]?Tf({classes:"hor_centered"}):(e=>{const t=dd("Disconnected"),n=dd("Click here to log in anonymously");return Ga(e_(),e.authentication==e.LOGIN||e.authentication==e.EXTERNAL?o_(e):"",e.authentication==e.ANONYMOUS?Ga(Zv(),n):"",e.authentication==e.PREBIND?Ga(Kv(),t):"")})(e));function c_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */
+const{Strophe:m_}=rl.env;function v_(e){Uc.chatboxviews&&Uc.chatboxviews.forEach(t=>{"controlbox"!==t.model.get("id")&&t.onWindowStateChanged(e.state)})}function __(){const e=Uc.chatboxviews;Uc.chatboxes.on("add",async t=>{e.get(t.get("id"))||t.get("type")!==Uc.PRIVATE_CHAT_TYPE||(await t.initialized,e.add(t.get("id"),new Uc.ChatBoxView({model:t})))})}let b_;rl.plugins.add("converse-chatview",{dependencies:["converse-chatboxviews","converse-chat","converse-disco","converse-modal"],initialize(){Vc.settings.extend({auto_focus:!0,debounced_content_rendering:!0,filter_url_query_params:null,image_urls_regex:null,message_limit:0,muc_hats:["xep317"],show_images_inline:!0,show_message_avatar:!0,show_retraction_warning:!0,show_send_button:!0,show_toolbar:!0,time_format:"HH:mm",use_system_emojis:!0,visible_toolbar_buttons:{call:!1,clear:!0,emoji:!0,spoiler:!0}}),Object.assign(Vc,g_),Uc.ChatBoxView=p_,Vc.listen.on("chatBoxViewsInitialized",__),Vc.listen.on("windowStateChanged",v_),Vc.listen.on("connected",()=>Vc.disco.own.features.add(m_.NS.SPOILER))}});let y_=0;function w_(e){b_=e}function S_(){b_=null,y_=0}const x_=Symbol("haunted.phase"),E_=Symbol("haunted.hook"),A_=Symbol("haunted.update"),C_=Symbol("haunted.commit"),j_=Symbol("haunted.effects"),T_=Symbol("haunted.layoutEffects");class O_{constructor(e,t){this.update=e,this.host=t,this[E_]=new Map,this[j_]=[],this[T_]=[]}run(e){w_(this);let t=e();return S_(),t}_runEffects(e){let t=this[e];w_(this);for(let e of t)e.call(this);S_()}runEffects(){this._runEffects(j_)}runLayoutEffects(){this._runEffects(T_)}teardown(){this[E_].forEach(e=>{"function"==typeof e.teardown&&e.teardown()})}}const k_=Promise.resolve().then.bind(Promise.resolve());function N_(){let e,t=[];function n(){e=null;let n=t;t=[];for(var r=0,i=n.length;r<i;r++)n[r]()}return function(r){t.push(r),null==e&&(e=k_(n))}}const I_=N_(),M_=N_();class R_{constructor(e,t){this.renderer=e,this.host=t,this.state=new O_(this.update.bind(this),t),this[x_]=null,this._updateQueued=!1}update(){this._updateQueued||(I_(()=>{let e=this.handlePhase(A_);M_(()=>{this.handlePhase(C_,e),M_(()=>{this.handlePhase(j_)})}),this._updateQueued=!1}),this._updateQueued=!0)}handlePhase(e,t){switch(this[x_]=e,e){case C_:return this.commit(t),void this.runEffects(T_);case A_:return this.render();case j_:return this.runEffects(j_)}this[x_]=null}render(){return this.state.run(()=>this.renderer.call(this.host,this.host))}runEffects(e){this.state._runEffects(e)}teardown(){this.state.teardown()}}function D_(e){class t extends R_{constructor(e,t,n){super(e,n||t),this.frag=t}commit(t){e(t,this.frag)}}return function(e,n,r){const i=(r||n||{}).baseElement||HTMLElement,{observedAttributes:o=[],useShadowDOM:s=!0,shadowRootInit:a={}}=r||n||{};class c extends i{constructor(){super(),!1===s?this._scheduler=new t(e,this):(this.attachShadow({mode:"open",...a}),this._scheduler=new t(e,this.shadowRoot,this))}static get observedAttributes(){return e.observedAttributes||o||[]}connectedCallback(){this._scheduler.update()}disconnectedCallback(){this._scheduler.teardown()}attributeChangedCallback(e,t,n){if(t===n)return;let r=""===n||n;Reflect.set(this,((e="")=>e.replace(/-+([a-z])?/g,(e,t)=>t?t.toUpperCase():""))(e),r)}}const l=new Proxy(i.prototype,{getPrototypeOf:e=>e,set(e,t,n,r){let i;if(t in e){if(i=Object.getOwnPropertyDescriptor(e,t),i&&i.set)return i.set.call(r,n),!0;Reflect.set(e,t,n)}return i="symbol"==typeof t||"_"===t[0]?{enumerable:!0,configurable:!0,writable:!0,value:n}:function(e){let t=e;return Object.freeze({enumerable:!0,configurable:!0,get:()=>t,set(e){t=e,this._scheduler.update()}})}(n),Object.defineProperty(r,t,i),i.set&&i.set.call(r,n),!0}});return Object.setPrototypeOf(c.prototype,l),c}}class P_{constructor(e,t){this.id=e,this.state=t}}function L_(e,...t){let n=y_++,r=b_[E_],i=r.get(n);return i||(i=new e(n,b_,...t),r.set(n,i)),i.update(...t)}function z_(e){return L_.bind(null,e)}function F_(e){return z_(class extends P_{constructor(t,n,r,i){super(t,n),e(n,this)}update(e,t){this.callback=e,this.lastValues=this.values,this.values=t}call(){this.values&&!this.hasChanged()||this.run()}run(){this.teardown(),this._teardown=this.callback.call(this.state)}teardown(){"function"==typeof this._teardown&&this._teardown()}hasChanged(){return!this.lastValues||this.values.some((e,t)=>this.lastValues[t]!==e)}})}function B_(e,t){e[j_].push(t)}F_(B_);const q_=z_(class extends P_{constructor(e,t,n){super(e,t),this._updater=this._updater.bind(this),this._ranEffect=!1,this._unsubscribe=null,B_(t,this)}update(e){if(this.state.virtual)throw new Error("can't be used with virtual components");return this.Context!==e&&(this._subscribe(e),this.Context=e),this.value}call(){this._ranEffect||(this._ranEffect=!0,this._unsubscribe&&this._unsubscribe(),this._subscribe(this.Context),this.state.update())}_updater(e){this.value=e,this.state.update()}_subscribe(e){const t={Context:e,callback:this._updater};this.state.host.dispatchEvent(new CustomEvent("haunted.context",{detail:t,bubbles:!0,cancelable:!0,composed:!0}));const{unsubscribe:n,value:r}=t;this.value=n?r:e.defaultValue,this._unsubscribe=n}teardown(){this._unsubscribe&&this._unsubscribe()}});z_(class extends P_{constructor(e,t,n,r){super(e,t),this.value=n(),this.values=r}update(e,t){return this.hasChanged(t)&&(this.values=t,this.value=e()),this.value}hasChanged(e=[]){return e.some((e,t)=>this.values[t]!==e)}});F_((function(e,t){e[T_].push(t)})),z_(class extends P_{constructor(e,t,n){super(e,t),this.updater=this.updater.bind(this),"function"==typeof n&&(n=n()),this.makeArgs(n)}update(){return this.args}updater(e){if("function"==typeof e){const t=e,[n]=this.args;e=t(n)}this.makeArgs(e),this.state.update()}makeArgs(e){this.args=Object.freeze([e,this.updater])}}),z_(class extends P_{constructor(e,t,n,r,i){super(e,t),this.dispatch=this.dispatch.bind(this),this.currentState=void 0!==i?i(r):r}update(e){return this.reducer=e,[this.currentState,this.dispatch]}dispatch(e){this.currentState=this.reducer(this.currentState,e),this.state.update()}});const H_=Array.prototype.includes;const{component:U_,createContext:$_}=function({render:e}){const t=D_(e),n=function(e){return t=>{const n={Provider:class extends HTMLElement{constructor(){super(),this.listeners=new Set,this.addEventListener("haunted.context",this)}disconnectedCallback(){this.removeEventListener("haunted.context",this)}handleEvent(e){const{detail:t}=e;t.Context===n&&(t.value=this.value,t.unsubscribe=this.unsubscribe.bind(this,t.callback),this.listeners.add(t.callback),e.stopPropagation())}unsubscribe(e){this.listeners.delete(e)}set value(e){this._value=e;for(let t of this.listeners)t(e)}get value(){return this._value}},Consumer:e((function({render:e}){return e(q_(n))})),defaultValue:t};return n}}(t);return{component:t,createContext:n}}({render:Ya});!function(){const e=new WeakMap,t=new WeakMap;class n extends R_{constructor(e,t){super(e,t),this.state.virtual=!0}render(){return this.state.run(()=>this.renderer.apply(this.host,this.args))}commit(e){this.host.setValue(e),this.host.commit()}teardown(){super.teardown();let n=t.get(this);e.delete(n)}}}();function W_(){const e=J_(['\n            <p class="brand-subtitle">','</p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://conversejs.org">Open Source</a> XMPP chat client brought to you by <a target="_blank" rel="nofollow" href="https://opkode.com">Opkode</a> </p>\n            <p class="brand-subtitle"><a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">Translate</a> it into your own language</p>']);return W_=function(){return e},e}function G_(){const e=J_(['<p class="byline">messaging freedom</p>']);return G_=function(){return e},e}function V_(){const e=J_(['\n        <a class="brand-heading" href="https://conversejs.org" target="_blank" rel="noopener">\n            <span class="brand-name-wrapper ','">\n                <svg class="converse-svg-logo"\n                    xmlns:svg="http://www.w3.org/2000/svg"\n                    xmlns="http://www.w3.org/2000/svg"\n                    xmlns:xlink="http://www.w3.org/1999/xlink"\n                    viewBox="0 0 364 364">\n                    <title>Converse</title>\n                    <g class="cls-1" id="g904">\n                        <g data-name="Layer 2">\n                            <g data-name="Layer 7">\n                                <path\n                                    class="cls-3"\n                                    d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" />\n                                <path\n                                    class="cls-4"\n                                    d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" />\n                            </g>\n                        </g>\n                    </g>\n                </svg>\n                <span class="brand-name">\n                    <span class="brand-name__text">converse<span class="subdued">.js</span></span>\n                    ',"\n                </span>\n            </span>\n        </a>\n        ","\n        "]);return V_=function(){return e},e}function J_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-brand-heading",U_(e=>{const t="fullscreen"===Vc.settings.get("view_mode");return Za(V_(),t?"brand-name-wrapper--fullscreen":"",t?Za(G_()):"",t?Za(W_(),e.version_name):"")},{useShadowDOM:!1}));const{dayjs:X_}=rl.env;var Q_={defaults(){return{bookmarked:!1,box_id:"controlbox",chat_state:void 0,closed:!Vc.settings.get("show_controlbox_by_default"),num_unread:0,time_opened:this.get("time_opened")||(new Date).getTime(),type:Uc.CONTROLBOX_TYPE,url:""}},initialize(){"controlbox"===this.get("id")?this.set({time_opened:X_(0).valueOf()}):Uc.ChatBox.prototype.initialize.apply(this,arguments)},validate(e){return e.type===Uc.CONTROLBOX_TYPE?"embedded"===Vc.settings.get("view_mode")&&Vc.settings.get("singleton")?"Controlbox not relevant in embedded view mode":void 0:Uc.ChatBox.prototype.validate.call(this,e)},maybeShow(e){return e||"controlbox"!==this.get("id")?Uc.ChatBox.prototype.maybeShow.call(this,e):this},onReconnection:function(){}};var Y_=eh.extend({tagName:"div",className:"controlbox-pane",initialize(){Vc.trigger("controlBoxPaneInitialized",this)}}),K_=n(177),Z_=n.n(K_);function eb(){const e=new Uc.ControlBox({id:"controlbox"});return Uc.chatboxes.add(e)}const tb=rl.env.utils;var nb=eh.extend({tagName:"a",className:"toggle-controlbox hidden",id:"toggle-controlbox",events:{click:"onClick"},attributes:{href:"#"},initialize(){Uc.chatboxviews.insertRowColumn(this.render().el),Vc.waitUntil("initialized").then(this.render.bind(this)).catch(e=>zn.fatal(e))},render(){return this.el.innerHTML=Z_()({label_toggle:Vc.connection.connected()?zd("Chat Contacts"):zd("Toggle chat")}),this},hide(e){tb.isVisible(this.el)&&(tb.hideElement(this.el),e())},show(e){tb.isVisible(this.el)||tb.fadeIn(this.el,e)},showControlBox(){let e=Uc.chatboxes.get("controlbox");e||(e=eb()),Vc.connection.connected()?e.save({closed:!1}):e.trigger("show")},onClick(e){if(e.preventDefault(),tb.isVisible(Uc.root.querySelector("#controlbox"))){const e=Uc.chatboxes.get("controlbox");Vc.connection.connected?e.save({closed:!0}):e.trigger("hide")}else this.showControlBox()}});function rb(){const e=ob(['<a class="chatbox-btn close-chatbox-button fa fa-times"></a>']);return rb=function(){return e},e}function ib(){const e=ob(['\n    <div class="flyout box-flyout">\n        <div class="chat-head controlbox-head">\n            ','\n        </div>\n        <div class="controlbox-panes"></div>\n    </div>']);return ib=function(){return e},e}function ob(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const sb=rl.env.utils;var ab={tagName:"div",className:"chatbox",id:"controlbox",events:{"click a.close-chatbox-button":"close"},initialize(){void 0===Uc.controlboxtoggle&&(Uc.controlboxtoggle=new Uc.ControlBoxToggle),Uc.controlboxtoggle.el.insertAdjacentElement("afterend",this.el),this.listenTo(this.model,"change:connected",this.onConnected),this.listenTo(this.model,"destroy",this.hide),this.listenTo(this.model,"hide",this.hide),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"change:closed",this.ensureClosedState),this.render(),Vc.trigger("controlBoxInitialized",this)},render(){this.model.get("connected")&&void 0===this.model.get("closed")&&this.model.set("closed",!Vc.settings.get("show_controlbox_by_default"));const e=(t={sticky_controlbox:Vc.settings.get("sticky_controlbox"),...this.model.toJSON()},Za(ib(),t.sticky_controlbox?"":Za(rb())));var t;Ya(e,this.el),this.model.get("closed")?this.hide():this.show();const n=(null==Uc?void 0:Uc.connection)||{};return n.connected&&n.authenticated&&!n.disconnecting?this.model.get("connected")&&this.renderControlBoxPane():this.renderLoginPanel(),this},onConnected(){this.model.get("connected")&&this.render()},renderLoginPanel(){if(this.el.classList.add("logged-out"),this.loginpanel)this.loginpanel.render();else{this.loginpanel=new Uc.LoginPanel({model:new Uc.LoginPanelModel});const e=this.el.querySelector(".controlbox-panes");e.innerHTML="",e.appendChild(this.loginpanel.render().el)}return this.loginpanel.initPopovers(),this},renderControlBoxPane(){this.loginpanel&&(this.loginpanel.remove(),delete this.loginpanel),this.controlbox_pane&&sb.isVisible(this.controlbox_pane.el)||(this.el.classList.remove("logged-out"),this.controlbox_pane=new Uc.ControlBoxPane,this.el.querySelector(".controlbox-panes").insertAdjacentElement("afterBegin",this.controlbox_pane.el))},async close(e){if(e&&e.preventDefault&&e.preventDefault(),"closeAllChatBoxes"===(null==e?void 0:e.name)&&(Uc.disconnection_cause!==Uc.LOGOUT||Vc.settings.get("show_controlbox_by_default")))return;if(Vc.settings.get("sticky_controlbox"))return;const t=(null==Uc?void 0:Uc.connection)||{};return t.connected&&!t.disconnecting?await new Promise((e,t)=>this.model.save({closed:!0},{success:e,error:t,wait:!0})):this.model.trigger("hide"),Vc.trigger("controlBoxClosed",this),this},ensureClosedState(){this.model.get("closed")?this.hide():this.show()},hide(e){if(!Vc.settings.get("sticky_controlbox"))return sb.addClass("hidden",this.el),Vc.trigger("chatBoxClosed",this),Vc.connection.connected()||Uc.controlboxtoggle.render(),Uc.controlboxtoggle.show(e),this},onControlBoxToggleHidden(){this.model.set("closed",!1),this.el.classList.remove("hidden"),Vc.trigger("controlBoxOpened",this)},show(){return Uc.controlboxtoggle.hide(()=>this.onControlBoxToggleHidden()),this},showHelpMessages(){}};function cb(){const e=mb(['\n    <converse-brand-heading></converse-brand-heading>\n    <form id="converse-login" class="converse-form" method="post">\n        <div class="conn-feedback fade-in ','">\n            <p class="feedback-subject">','</p>\n            <p class="feedback-message ','">',"</p>\n        </div>\n        ","\n    </form>\n"]);return cb=function(){return e},e}function lb(){const e=mb(["<p>","</p>"]);return lb=function(){return e},e}function ub(){const e=mb(['<input class="btn btn-primary login-anon" type="submit" value="','">']);return ub=function(){return e},e}function db(){const e=mb(["\n        ","\n        ","\n        ","\n    "]);return db=function(){return e},e}function hb(){const e=mb(['\n        <div class="form-group">\n            <label for="converse-login-jid">',':</label>\n            <input id="converse-login-jid"\n                ?autofocus=','\n                required\n                class="form-control"\n                type="text"\n                name="jid"\n                placeholder="','"/>\n        </div>\n        ',"\n        ",'\n        <fieldset class="buttons">\n            <input class="btn btn-primary" type="submit" value="','"/>\n        </fieldset>\n        ',"\n    "]);return hb=function(){return e},e}function fb(){const e=mb(['\n        <fieldset class="switch-form">\n            <p>','</p>\n            <p><a class="register-account toggle-register-login" href="#converse/register">',"</a></p>\n        </fieldset>\n    "]);return fb=function(){return e},e}function pb(){const e=mb(['\n        <div class="form-group">\n            <label for="converse-login-password">','</label>\n            <input id="converse-login-password" class="form-control" required="required" type="password" name="password" placeholder="','"/>\n        </div>\n    ']);return pb=function(){return e},e}function gb(){const e=mb(['\n        <div class="form-group form-check login-trusted">\n            <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" ?checked=','>\n            <label for="converse-login-trusted" class="form-check-label login-trusted__desc">','</label>\n            <i class="fa fa-info-circle" data-toggle="popover"\n                data-title="Trusted device?"\n                data-content="','"></i>\n        </div>\n    ']);return gb=function(){return e},e}function mb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const vb=e=>{const t=zd("Log in"),n=zd("XMPP Address");return Za(hb(),n,!!Vc.settings.get("auto_focus"),e.placeholder_username,e.authentication!==e.EXTERNAL?(()=>{const e=zd("Password");return Za(pb(),e,e)})():"",e.show_trust_checkbox?(e=>{const t=zd("To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It's important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available."),n=zd("This is a trusted device");return Za(gb(),e,n,t)})("off"!==e.show_trust_checkbox):"",t,Uc.allow_registration&&!Vc.settings.get("auto_login")&&Uc.pluggable.plugins["converse-register"].enabled(Uc)?(()=>{const e=zd("Create an account"),t=zd("Don't have a chat account?");return Za(fb(),t,e)})():"")};var _b=e=>Za(cb(),e.conn_feedback_subject?e.conn_feedback_class:"hidden",e.conn_feedback_subject,e.conn_feedback_message?"":"hidden",e.conn_feedback_message,"CONNECTING"===Uc.CONNECTION_STATUS[e.connection_status]?fp({classes:"hor_centered"}):(e=>{const t=zd("Disconnected"),n=zd("Click here to log in anonymously");return Za(db(),e.authentication==e.LOGIN||e.authentication==e.EXTERNAL?vb(e):"",e.authentication==e.ANONYMOUS?Za(ub(),n):"",e.authentication==e.PREBIND?Za(lb(),t):"")})(e));const bb=rl.env.utils,{Strophe:yb}=rl.env,wb=[0,1,2,3,4,7,10],Sb={0:"Error",1:"Connecting",2:"Connection failure",3:"Authenticating",4:"Authentication failure",5:"Connected",6:"Disconnected",7:"Disconnecting",8:"Attached",9:"Redirect",10:"Reconnecting"},xb={Error:"error",Connecting:"info","Connection failure":"error",Authenticating:"info","Authentication failure":"error",Connected:"info",Disconnected:"error",Disconnecting:"warn",Attached:"info",Redirect:"info",Reconnecting:"warn"},Eb=qo.extend({defaults:{errors:[]}}),Ab=eh.extend({tagName:"div",id:"converse-login-panel",className:"controlbox-pane fade-in row no-gutters",events:{"submit form#converse-login":"authenticate","change input":"validate"},initialize(){this.listenTo(this.model,"change",this.render),this.listenTo(Uc.connfeedback,"change",this.render),this.render()},toHTML(){const e=Uc.connfeedback.get("connection_status");let t,n;return wb.includes(e)&&(n=Sb[e],t=xb[n]),_b(Object.assign(this.model.toJSON(),{_converse:Uc,ANONYMOUS:Uc.ANONYMOUS,EXTERNAL:Uc.EXTERNAL,LOGIN:Uc.LOGIN,PREBIND:Uc.PREBIND,auto_login:Vc.settings.get("auto_login"),authentication:Vc.settings.get("authentication"),connection_status:e,conn_feedback_class:t,conn_feedback_subject:n,conn_feedback_message:Uc.connfeedback.get("message"),placeholder_username:(Vc.settings.get("locked_domain")||Vc.settings.get("default_domain"))&&zd("Username")||zd("user@domain"),show_trust_checkbox:Vc.settings.get("allow_user_trust_override")}))},initPopovers(){Array.from(this.el.querySelectorAll("[data-title]")).forEach(e=>{new af.a.Popover(e,{trigger:"mobile"===Vc.settings.get("view_mode")?"click":"hover",dismissible:"mobile"===Vc.settings.get("view_mode"),container:this.el.parentElement.parentElement.parentElement})})},validate(){const e=this.el.querySelector("form").querySelector("input[name=jid]");return!e.value||Vc.settings.get("locked_domain")||Vc.settings.get("default_domain")||bb.isValidJID(e.value)?(e.setCustomValidity(""),!0):(e.setCustomValidity(zd("Please enter a valid XMPP address")),!1)},authenticate(e){if(e&&e.preventDefault&&e.preventDefault(),Vc.settings.get("authentication")===Uc.ANONYMOUS)return this.connect(Uc.jid,null);if(!this.validate())return;const t=new FormData(e.target);Uc.config.save({trusted:!!t.get("trusted")});let n=t.get("jid");if(Vc.settings.get("locked_domain")){const e="@"+Vc.settings.get("locked_domain");n.endsWith(e)&&(n=n.substr(0,n.length-e.length)),n=yb.escapeNode(n)+e}else Vc.settings.get("default_domain")&&!n.includes("@")&&(n=n+"@"+Vc.settings.get("default_domain"));this.connect(n,t.get("password"))},connect(e,t){["converse/login","converse/register"].includes(Uc.router.history.getFragment())&&Uc.router.navigate("",{replace:!0}),Uc.connection&&Uc.connection.reset(),Vc.user.login(e,t)}});var Cb={controlbox:{async open(){await Vc.waitUntil("chatBoxesFetched");const e=await Vc.chatboxes.get("controlbox")||Vc.chatboxes.create("controlbox",{},Uc.Controlbox);return e.trigger("show"),e},get:()=>Uc.chatboxviews.get("controlbox")}};
 /**
  * @module converse-controlbox
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */const{Strophe:u_,dayjs:d_}=Yc.env,h_=Yc.env.utils,f_={Error:"error",Connecting:"info","Connection failure":"error",Authenticating:"info","Authentication failure":"error",Connected:"info",Disconnected:"error",Disconnecting:"warn",Attached:"info",Redirect:"info",Reconnecting:"warn"},p_={0:"Error",1:"Connecting",2:"Connection failure",3:"Authenticating",4:"Authentication failure",5:"Connected",6:"Disconnected",7:"Disconnecting",8:"Attached",9:"Redirect",10:"Reconnecting"},g_=[0,1,2,3,4,7,10];Yc.plugins.add("converse-controlbox",{dependencies:["converse-modal","converse-chatboxes","converse-chat","converse-rosterview","converse-chatview"],enabled:e=>!e.api.settings.get("singleton"),overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e&&"controlbox"==e.id?new n.ControlBox(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){function e(){const e=new Lc.ControlBox({id:"controlbox"});return Lc.chatboxes.add(e)}qc.settings.extend({allow_logout:!0,default_domain:void 0,locked_domain:void 0,show_controlbox_by_default:!1,sticky_controlbox:!1}),qc.promises.add("controlBoxInitialized"),Lc.ControlBox=Lc.ChatBox.extend({defaults(){return{bookmarked:!1,box_id:"controlbox",chat_state:void 0,closed:!qc.settings.get("show_controlbox_by_default"),num_unread:0,time_opened:this.get("time_opened")||(new Date).getTime(),type:Lc.CONTROLBOX_TYPE,url:""}},initialize(){"controlbox"===this.get("id")?this.set({time_opened:d_(0).valueOf()}):Lc.ChatBox.prototype.initialize.apply(this,arguments)},validate(e){return e.type===Lc.CONTROLBOX_TYPE?"embedded"===qc.settings.get("view_mode")&&qc.settings.get("singleton")?"Controlbox not relevant in embedded view mode":void 0:Lc.ChatBox.prototype.validate.call(this,e)},maybeShow(e){return e||"controlbox"!==this.get("id")?Lc.ChatBox.prototype.maybeShow.call(this,e):this},onReconnection:function(){}}),Lc.ControlBoxView=Lc.ChatBoxView.extend({tagName:"div",className:"chatbox",id:"controlbox",events:{"click a.close-chatbox-button":"close"},initialize(){void 0===Lc.controlboxtoggle&&(Lc.controlboxtoggle=new Lc.ControlBoxToggle),Lc.controlboxtoggle.el.insertAdjacentElement("afterend",this.el),this.listenTo(this.model,"change:connected",this.onConnected),this.listenTo(this.model,"destroy",this.hide),this.listenTo(this.model,"hide",this.hide),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"change:closed",this.ensureClosedState),this.render(),qc.trigger("controlBoxInitialized",this)},render(){this.model.get("connected")&&void 0===this.model.get("closed")&&this.model.set("closed",!qc.settings.get("show_controlbox_by_default"));const e=(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c_(Object(n),!0).forEach((function(t){l_(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c_(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({sticky_controlbox:qc.settings.get("sticky_controlbox")},this.model.toJSON()),Ga(Gv(),t.sticky_controlbox?"":Ga(Vv())));var t;Wa(e,this.el),this.model.get("closed")?this.hide():this.show();const n=(null==Lc?void 0:Lc.connection)||{};return n.connected&&n.authenticated&&!n.disconnecting?this.model.get("connected")&&this.renderControlBoxPane():this.renderLoginPanel(),this},onConnected(){this.model.get("connected")&&this.render()},renderLoginPanel(){if(this.el.classList.add("logged-out"),this.loginpanel)this.loginpanel.render();else{this.loginpanel=new Lc.LoginPanel({model:new Lc.LoginPanelModel});const e=this.el.querySelector(".controlbox-panes");e.innerHTML="",e.appendChild(this.loginpanel.render().el)}return this.loginpanel.initPopovers(),this},renderControlBoxPane(){this.loginpanel&&(this.loginpanel.remove(),delete this.loginpanel),this.controlbox_pane&&h_.isVisible(this.controlbox_pane.el)||(this.el.classList.remove("logged-out"),this.controlbox_pane=new Lc.ControlBoxPane,this.el.querySelector(".controlbox-panes").insertAdjacentElement("afterBegin",this.controlbox_pane.el))},async close(e){if(e&&e.preventDefault&&e.preventDefault(),"closeAllChatBoxes"===(null==e?void 0:e.name)&&(Lc.disconnection_cause!==Lc.LOGOUT||qc.settings.get("show_controlbox_by_default")))return;if(qc.settings.get("sticky_controlbox"))return;const t=(null==Lc?void 0:Lc.connection)||{};return t.connected&&!t.disconnecting?await new Promise((e,t)=>this.model.save({closed:!0},{success:e,error:t,wait:!0})):this.model.trigger("hide"),qc.trigger("controlBoxClosed",this),this},ensureClosedState(){this.model.get("closed")?this.hide():this.show()},hide(e){if(!qc.settings.get("sticky_controlbox"))return h_.addClass("hidden",this.el),qc.trigger("chatBoxClosed",this),qc.connection.connected()||Lc.controlboxtoggle.render(),Lc.controlboxtoggle.show(e),this},onControlBoxToggleHidden(){this.model.set("closed",!1),this.el.classList.remove("hidden"),qc.trigger("controlBoxOpened",this)},show(){return Lc.controlboxtoggle.hide(()=>this.onControlBoxToggleHidden()),this},showHelpMessages(){}}),Lc.LoginPanelModel=Rs.extend({defaults:{errors:[]}}),Lc.LoginPanel=jd.extend({tagName:"div",id:"converse-login-panel",className:"controlbox-pane fade-in row no-gutters",events:{"submit form#converse-login":"authenticate","change input":"validate"},initialize(){this.listenTo(this.model,"change",this.render),this.listenTo(Lc.connfeedback,"change",this.render),this.render()},toHTML(){const e=Lc.connfeedback.get("connection_status");let t,n;return g_.includes(e)&&(n=p_[e],t=f_[n]),a_(Object.assign(this.model.toJSON(),{_converse:Lc,ANONYMOUS:Lc.ANONYMOUS,EXTERNAL:Lc.EXTERNAL,LOGIN:Lc.LOGIN,PREBIND:Lc.PREBIND,auto_login:qc.settings.get("auto_login"),authentication:qc.settings.get("authentication"),connection_status:e,conn_feedback_class:t,conn_feedback_subject:n,conn_feedback_message:Lc.connfeedback.get("message"),placeholder_username:(qc.settings.get("locked_domain")||qc.settings.get("default_domain"))&&dd("Username")||dd("user@domain"),show_trust_checkbox:"on"!==Lc.trusted&&"off"!==Lc.trusted}))},initPopovers(){Array.from(this.el.querySelectorAll("[data-title]")).forEach(e=>{new Rd.a.Popover(e,{trigger:"mobile"===qc.settings.get("view_mode")?"click":"hover",dismissible:"mobile"===qc.settings.get("view_mode"),container:this.el.parentElement.parentElement.parentElement})})},validate(){const e=this.el.querySelector("form").querySelector("input[name=jid]");return!e.value||qc.settings.get("locked_domain")||qc.settings.get("default_domain")||h_.isValidJID(e.value)?(e.setCustomValidity(""),!0):(e.setCustomValidity(dd("Please enter a valid XMPP address")),!1)},authenticate(e){if(e&&e.preventDefault&&e.preventDefault(),qc.settings.get("authentication")===Lc.ANONYMOUS)return this.connect(Lc.jid,null);if(!this.validate())return;const t=new FormData(e.target);"on"===Lc.trusted||"off"===Lc.trusted?Lc.config.save({trusted:"on"===Lc.trusted,storage:"on"===Lc.trusted?"persistent":"session"}):Lc.config.save({trusted:!!t.get("trusted"),storage:t.get("trusted")?"persistent":"session"});let n=t.get("jid");if(qc.settings.get("locked_domain")){const e="@"+qc.settings.get("locked_domain");n.endsWith(e)&&(n=n.substr(0,n.length-e.length)),n=u_.escapeNode(n)+e}else qc.settings.get("default_domain")&&!n.includes("@")&&(n=n+"@"+qc.settings.get("default_domain"));this.connect(n,t.get("password"))},connect(e,t){["converse/login","converse/register"].includes(Lc.router.history.getFragment())&&Lc.router.navigate("",{replace:!0}),Lc.connection&&Lc.connection.reset(),qc.user.login(e,t)}}),Lc.ControlBoxPane=jd.extend({tagName:"div",className:"controlbox-pane",initialize(){qc.trigger("controlBoxPaneInitialized",this)}}),Lc.ControlBoxToggle=jd.extend({tagName:"a",className:"toggle-controlbox hidden",id:"toggle-controlbox",events:{click:"onClick"},attributes:{href:"#"},initialize(){Lc.chatboxviews.insertRowColumn(this.render().el),qc.waitUntil("initialized").then(this.render.bind(this)).catch(e=>Pn.fatal(e))},render(){return this.el.innerHTML=Qv()({label_toggle:qc.connection.connected()?dd("Chat Contacts"):dd("Toggle chat")}),this},hide(e){h_.isVisible(this.el)&&(h_.hideElement(this.el),e())},show(e){h_.isVisible(this.el)||h_.fadeIn(this.el,e)},showControlBox(){let t=Lc.chatboxes.get("controlbox");t||(t=e()),qc.connection.connected()?t.save({closed:!1}):t.trigger("show")},onClick(e){if(e.preventDefault(),h_.isVisible(Lc.root.querySelector("#controlbox"))){const e=Lc.chatboxes.get("controlbox");qc.connection.connected?e.save({closed:!0}):e.trigger("hide")}else this.showControlBox()}}),qc.listen.on("cleanup",()=>delete Lc.controlboxtoggle),qc.listen.on("chatBoxViewsInitialized",()=>{Lc.chatboxes.on("add",e=>{if(e.get("type")===Lc.CONTROLBOX_TYPE){const t=Lc.chatboxviews,n=t.get(e.get("id"));n?(n.model=e,n.initialize()):t.add(e.get("id"),new Lc.ControlBoxView({model:e}))}})}),qc.listen.on("clearSession",()=>{const e=null==Lc?void 0:Lc.chatboxviews,t=e&&e.get("controlbox");t&&(h_.safeSave(t.model,{connected:!1}),(null==t?void 0:t.controlbox_pane)&&(t.controlbox_pane.remove(),delete t.controlbox_pane))}),qc.waitUntil("chatBoxViewsInitialized").then(e).catch(e=>Pn.fatal(e)),qc.listen.on("chatBoxesFetched",()=>{(Lc.chatboxes.get("controlbox")||e()).save({connected:!0})});const t=function(){const e=Lc.chatboxviews.get("controlbox");return e.model.set({connected:!1}),e};qc.listen.on("disconnected",()=>t().renderLoginPanel()),qc.listen.on("will-reconnect",t),Object.assign(qc,{controlbox:{async open(){await qc.waitUntil("chatBoxesFetched");const e=await qc.chatboxes.get("controlbox")||qc.chatboxes.create("controlbox",{},Lc.Controlbox);return e.trigger("show"),e},get:()=>Lc.chatboxviews.get("controlbox")}})}});var m_=n(137),v_=n.n(m_);
+ */const jb=rl.env.utils;function Tb(){Uc.chatboxes.on("add",e=>{if(e.get("type")===Uc.CONTROLBOX_TYPE){const t=Uc.chatboxviews,n=t.get(e.get("id"));n?(n.model=e,n.initialize()):t.add(e.get("id"),new Uc.ControlBoxView({model:e}))}})}function Ob(){const e=Uc.chatboxviews.get("controlbox");return e.model.set({connected:!1}),e}function kb(){const e=null==Uc?void 0:Uc.chatboxviews,t=e&&e.get("controlbox");t&&(jb.safeSave(t.model,{connected:!1}),(null==t?void 0:t.controlbox_pane)&&(t.controlbox_pane.remove(),delete t.controlbox_pane))}function Nb(){(Uc.chatboxes.get("controlbox")||eb()).save({connected:!0})}rl.plugins.add("converse-controlbox",{dependencies:["converse-modal","converse-chatboxes","converse-chat","converse-rosterview","converse-chatview"],enabled:e=>!e.api.settings.get("singleton"),overrides:{ChatBoxes:{model(e,t){const{_converse:n}=this.__super__;return e&&"controlbox"==e.id?new n.ControlBox(e,t):this.__super__.model.apply(this,arguments)}}},initialize(){Vc.settings.extend({allow_logout:!0,allow_user_trust_override:!0,default_domain:void 0,locked_domain:void 0,show_controlbox_by_default:!1,sticky_controlbox:!1}),Vc.promises.add("controlBoxInitialized"),Object.assign(Vc,Cb),Uc.ControlBox=Uc.ChatBox.extend(Q_),Uc.ControlBoxView=Uc.ChatBoxView.extend(ab),Uc.LoginPanelModel=Eb,Uc.LoginPanel=Ab,Uc.ControlBoxPane=Y_,Uc.ControlBoxToggle=nb,Vc.listen.on("chatBoxViewsInitialized",Tb),Vc.listen.on("chatBoxesFetched",Nb),Vc.listen.on("cleanup",()=>delete Uc.controlboxtoggle),Vc.listen.on("clearSession",kb),Vc.listen.on("disconnected",()=>Ob().renderLoginPanel()),Vc.listen.on("will-reconnect",Ob),Vc.waitUntil("chatBoxViewsInitialized").then(eb).catch(e=>zn.fatal(e))}});var Ib=n(178),Mb=n.n(Ib);
 /**
  * @module converse-dragresize
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const __=Yc.env.utils;function b_(e,t){const n=t.el.querySelector(".box-flyout"),r=document.createElement("div");r.innerHTML=v_()(),n.insertBefore(r,n.firstChild)}function y_(){const e=S_(['<span class="message-count badge badge-light">',"</span>"]);return y_=function(){return e},e}function w_(){const e=S_(['\n        <div class="chat-head-',' chat-head row no-gutters">\n            <a class="restore-chat w-100 align-self-center" title="','" @click=',">\n                ","\n                ",'\n            </a>\n            <a class="chatbox-btn close-chatbox-button fa fa-times" @click=',"></a>\n        </div>"]);return w_=function(){return e},e}function S_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Yc.plugins.add("converse-dragresize",{dependencies:["converse-chatview","converse-headlines-view","converse-muc-views"],enabled:e=>"overlayed"==e.api.settings.get("view_mode"),overrides:{ChatBox:{initialize(){const e=this.__super__.initialize.apply(this,arguments),t=this.get("height"),n=this.get("width");return("controlbox"===this.get("id")?e=>this.set(e):e=>this.save(e))({height:__.applyDragResistance(t,this.get("default_height")),width:__.applyDragResistance(n,this.get("default_width"))}),e}},ChatBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return b_(this.__super__._converse,this),this.setWidth(),e}},HeadlinesBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return b_(this.__super__._converse,this),this.setWidth(),e}},ControlBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return b_(this.__super__._converse,this),this.setWidth(),e},renderLoginPanel(){const e=this.__super__.renderLoginPanel.apply(this,arguments);return this.initDragResize().setDimensions(),e},renderControlBoxPane(){const e=this.__super__.renderControlBoxPane.apply(this,arguments);return this.initDragResize().setDimensions(),e}},ChatRoomView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return b_(this.__super__._converse,this),this.setWidth(),e}}},initialize(){qc.settings.extend({allow_dragresize:!0});const e={initDragResize(){var e;const t=this,n=Tc(()=>t.setDimensions());window.addEventListener("resize",t.debouncedSetDimensions),this.listenTo(this.model,"destroy",()=>window.removeEventListener("resize",n));const r=this.el.querySelector(".box-flyout"),i=window.getComputedStyle(r);if(void 0===this.model.get("height")){const e=parseInt(i.height.replace(/px$/,""),10),t=parseInt(i.width.replace(/px$/,""),10);this.model.set("height",e),this.model.set("default_height",e),this.model.set("width",t),this.model.set("default_width",t)}const s=i["min-width"],o=i["min-height"];return this.model.set("min_width",s.endsWith("px")?Number(s.replace(/px$/,"")):0),this.model.set("min_height",o.endsWith("px")?Number(o.replace(/px$/,"")):0),this.prev_pageY=0,this.prev_pageX=0,(null===(e=Lc.connection)||void 0===e?void 0:e.connected)&&(this.height=this.model.get("height"),this.width=this.model.get("width")),this},resizeChatBox(e){let t;0===Lc.resizing.direction.indexOf("top")&&(t=e.pageY-this.prev_pageY,t&&(this.height=this.height-t>(this.model.get("min_height")||0)?this.height-t:this.model.get("min_height"),this.prev_pageY=e.pageY,this.setChatBoxHeight(this.height))),Lc.resizing.direction.includes("left")&&(t=this.prev_pageX-e.pageX,t&&(this.width=this.width+t>(this.model.get("min_width")||0)?this.width+t:this.model.get("min_width"),this.prev_pageX=e.pageX,this.setChatBoxWidth(this.width)))},setWidth(){this.model.get("width")&&(this.el.style.width=this.model.get("width"))},setDimensions(){this.adjustToViewport(),this.setChatBoxHeight(this.model.get("height")),this.setChatBoxWidth(this.model.get("width"))},setChatBoxHeight(e){e=e?__.applyDragResistance(e,this.model.get("default_height"))+"px":"";const t=this.el.querySelector(".box-flyout");null!==t&&(t.style.height=e)},setChatBoxWidth(e){e=e?__.applyDragResistance(e,this.model.get("default_width"))+"px":"",this.el.style.width=e;const t=this.el.querySelector(".box-flyout");null!==t&&(t.style.width=e)},adjustToViewport(){const e=Math.max(document.documentElement.clientWidth,window.innerWidth||0),t=Math.max(document.documentElement.clientHeight,window.innerHeight||0);e<=480?(this.model.set("height",void 0),this.model.set("width",void 0)):e<=this.model.get("width")?this.model.set("width",void 0):t<=this.model.get("height")&&this.model.set("height",void 0)},onStartVerticalResize(e,t=!0){if(!qc.settings.get("allow_dragresize"))return!0;e.preventDefault();const n=this.el.querySelector(".box-flyout"),r=window.getComputedStyle(n);this.height=parseInt(r.height.replace(/px$/,""),10),Lc.resizing={chatbox:this,direction:"top"},this.prev_pageY=e.pageY,t&&qc.trigger("startVerticalResize",this)},onStartHorizontalResize(e,t=!0){if(!qc.settings.get("allow_dragresize"))return!0;e.preventDefault();const n=this.el.querySelector(".box-flyout"),r=window.getComputedStyle(n);this.width=parseInt(r.width.replace(/px$/,""),10),Lc.resizing={chatbox:this,direction:"left"},this.prev_pageX=e.pageX,t&&qc.trigger("startHorizontalResize",this)},onStartDiagonalResize(e){this.onStartHorizontalResize(e,!1),this.onStartVerticalResize(e,!1),Lc.resizing.direction="topleft",qc.trigger("startDiagonalResize",this)}};function t(e){if(!Lc.resizing||!qc.settings.get("allow_dragresize"))return!0;e.preventDefault(),Lc.resizing.chatbox.resizeChatBox(e)}function n(e){if(!Lc.resizing||!qc.settings.get("allow_dragresize"))return!0;e.preventDefault();const t=__.applyDragResistance(Lc.resizing.chatbox.height,Lc.resizing.chatbox.model.get("default_height")),n=__.applyDragResistance(Lc.resizing.chatbox.width,Lc.resizing.chatbox.model.get("default_width"));qc.connection.connected()?(Lc.resizing.chatbox.model.save({height:t}),Lc.resizing.chatbox.model.save({width:n})):(Lc.resizing.chatbox.model.set({height:t}),Lc.resizing.chatbox.model.set({width:n})),Lc.resizing=null}Object.assign(Lc.ChatBoxView.prototype,e),__.applyDragResistance=function(e,t){if(void 0===e)return;if(void 0===t)return e;return e!==t&&Math.abs(e-t)<10?t:e},qc.listen.on("registeredGlobalEventHandlers",(function(){document.addEventListener("mousemove",t),document.addEventListener("mouseup",n)})),qc.listen.on("unregisteredGlobalEventHandlers",(function(){document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",n)})),qc.listen.on("beforeShowingChatView",e=>e.initDragResize().setDimensions())}}),
+const Rb=rl.env.utils;function Db(e,t){const n=t.el.querySelector(".box-flyout"),r=document.createElement("div");r.innerHTML=Mb()(),n.insertBefore(r,n.firstChild)}function Pb(){const e=zb(['<span class="message-count badge badge-light">',"</span>"]);return Pb=function(){return e},e}function Lb(){const e=zb(['\n        <div class="chat-head-',' chat-head row no-gutters">\n            <a class="restore-chat w-100 align-self-center" title="','" @click=',">\n                ","\n                ",'\n            </a>\n            <a class="chatbox-btn close-chatbox-button fa fa-times" @click=',"></a>\n        </div>"]);return Lb=function(){return e},e}function zb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}rl.plugins.add("converse-dragresize",{dependencies:["converse-chatview","converse-headlines-view","converse-muc-views"],enabled:e=>"overlayed"==e.api.settings.get("view_mode"),overrides:{ChatBox:{initialize(){const e=this.__super__.initialize.apply(this,arguments),t=this.get("height"),n=this.get("width");return("controlbox"===this.get("id")?e=>this.set(e):e=>this.save(e))({height:Rb.applyDragResistance(t,this.get("default_height")),width:Rb.applyDragResistance(n,this.get("default_width"))}),e}},ChatBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return Db(this.__super__._converse,this),this.setWidth(),e}},HeadlinesBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return Db(this.__super__._converse,this),this.setWidth(),e}},ControlBoxView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return Db(this.__super__._converse,this),this.setWidth(),e},renderLoginPanel(){const e=this.__super__.renderLoginPanel.apply(this,arguments);return this.initDragResize().setDimensions(),e},renderControlBoxPane(){const e=this.__super__.renderControlBoxPane.apply(this,arguments);return this.initDragResize().setDimensions(),e}},ChatRoomView:{events:{"mousedown .dragresize-top":"onStartVerticalResize","mousedown .dragresize-left":"onStartHorizontalResize","mousedown .dragresize-topleft":"onStartDiagonalResize"},render(){const e=this.__super__.render.apply(this,arguments);return Db(this.__super__._converse,this),this.setWidth(),e}}},initialize(){Vc.settings.extend({allow_dragresize:!0});const e={initDragResize(){var e;const t=this,n=Rc(()=>t.setDimensions());window.addEventListener("resize",t.debouncedSetDimensions),this.listenTo(this.model,"destroy",()=>window.removeEventListener("resize",n));const r=this.el.querySelector(".box-flyout"),i=window.getComputedStyle(r);if(void 0===this.model.get("height")){const e=parseInt(i.height.replace(/px$/,""),10),t=parseInt(i.width.replace(/px$/,""),10);this.model.set("height",e),this.model.set("default_height",e),this.model.set("width",t),this.model.set("default_width",t)}const o=i["min-width"],s=i["min-height"];return this.model.set("min_width",o.endsWith("px")?Number(o.replace(/px$/,"")):0),this.model.set("min_height",s.endsWith("px")?Number(s.replace(/px$/,"")):0),this.prev_pageY=0,this.prev_pageX=0,(null===(e=Uc.connection)||void 0===e?void 0:e.connected)&&(this.height=this.model.get("height"),this.width=this.model.get("width")),this},resizeChatBox(e){let t;0===Uc.resizing.direction.indexOf("top")&&(t=e.pageY-this.prev_pageY,t&&(this.height=this.height-t>(this.model.get("min_height")||0)?this.height-t:this.model.get("min_height"),this.prev_pageY=e.pageY,this.setChatBoxHeight(this.height))),Uc.resizing.direction.includes("left")&&(t=this.prev_pageX-e.pageX,t&&(this.width=this.width+t>(this.model.get("min_width")||0)?this.width+t:this.model.get("min_width"),this.prev_pageX=e.pageX,this.setChatBoxWidth(this.width)))},setWidth(){this.model.get("width")&&(this.el.style.width=this.model.get("width"))},setDimensions(){this.adjustToViewport(),this.setChatBoxHeight(this.model.get("height")),this.setChatBoxWidth(this.model.get("width"))},setChatBoxHeight(e){e=e?Rb.applyDragResistance(e,this.model.get("default_height"))+"px":"";const t=this.el.querySelector(".box-flyout");null!==t&&(t.style.height=e)},setChatBoxWidth(e){e=e?Rb.applyDragResistance(e,this.model.get("default_width"))+"px":"",this.el.style.width=e;const t=this.el.querySelector(".box-flyout");null!==t&&(t.style.width=e)},adjustToViewport(){const e=Math.max(document.documentElement.clientWidth,window.innerWidth||0),t=Math.max(document.documentElement.clientHeight,window.innerHeight||0);e<=480?(this.model.set("height",void 0),this.model.set("width",void 0)):e<=this.model.get("width")?this.model.set("width",void 0):t<=this.model.get("height")&&this.model.set("height",void 0)},onStartVerticalResize(e,t=!0){if(!Vc.settings.get("allow_dragresize"))return!0;e.preventDefault();const n=this.el.querySelector(".box-flyout"),r=window.getComputedStyle(n);this.height=parseInt(r.height.replace(/px$/,""),10),Uc.resizing={chatbox:this,direction:"top"},this.prev_pageY=e.pageY,t&&Vc.trigger("startVerticalResize",this)},onStartHorizontalResize(e,t=!0){if(!Vc.settings.get("allow_dragresize"))return!0;e.preventDefault();const n=this.el.querySelector(".box-flyout"),r=window.getComputedStyle(n);this.width=parseInt(r.width.replace(/px$/,""),10),Uc.resizing={chatbox:this,direction:"left"},this.prev_pageX=e.pageX,t&&Vc.trigger("startHorizontalResize",this)},onStartDiagonalResize(e){this.onStartHorizontalResize(e,!1),this.onStartVerticalResize(e,!1),Uc.resizing.direction="topleft",Vc.trigger("startDiagonalResize",this)}};function t(e){if(!Uc.resizing||!Vc.settings.get("allow_dragresize"))return!0;e.preventDefault(),Uc.resizing.chatbox.resizeChatBox(e)}function n(e){if(!Uc.resizing||!Vc.settings.get("allow_dragresize"))return!0;e.preventDefault();const t=Rb.applyDragResistance(Uc.resizing.chatbox.height,Uc.resizing.chatbox.model.get("default_height")),n=Rb.applyDragResistance(Uc.resizing.chatbox.width,Uc.resizing.chatbox.model.get("default_width"));Vc.connection.connected()?(Uc.resizing.chatbox.model.save({height:t}),Uc.resizing.chatbox.model.save({width:n})):(Uc.resizing.chatbox.model.set({height:t}),Uc.resizing.chatbox.model.set({width:n})),Uc.resizing=null}Object.assign(Uc.ChatBoxView.prototype,e),Rb.applyDragResistance=function(e,t){if(void 0===e)return;if(void 0===t)return e;return e!==t&&Math.abs(e-t)<10?t:e},Vc.listen.on("registeredGlobalEventHandlers",(function(){document.addEventListener("mousemove",t),document.addEventListener("mouseup",n)})),Vc.listen.on("unregisteredGlobalEventHandlers",(function(){document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",n)})),Vc.listen.on("beforeShowingChatView",e=>e.initDragResize().setDimensions())}}),
 /**
  * @module converse-singleton
  * @copyright JC Brand
  * @license Mozilla Public License (MPLv2)
  * @description A plugin which restricts Converse to only one chat.
  */
-Yc.plugins.add("converse-singleton",{enabled:e=>e.api.settings.get("singleton"),initialize(){if(qc.settings.extend({allow_logout:!1,allow_muc_invitations:!1,hide_muc_server:!0}),!Array.isArray(qc.settings.get("auto_join_rooms"))&&!Array.isArray(qc.settings.get("auto_join_private_chats")))throw new Error("converse-singleton: auto_join_rooms must be an Array");if(qc.settings.get("auto_join_rooms").length>1||qc.settings.get("auto_join_private_chats").length>1)throw new Error("It doesn't make sense to have singleton set to true and auto_join_rooms or auto_join_private_chats set to more then one, since only one chat room may be open at any time.")}}),
+rl.plugins.add("converse-singleton",{enabled:e=>e.api.settings.get("singleton"),initialize(){if(Vc.settings.extend({allow_logout:!1,allow_muc_invitations:!1,hide_muc_server:!0}),!Array.isArray(Vc.settings.get("auto_join_rooms"))&&!Array.isArray(Vc.settings.get("auto_join_private_chats")))throw new Error("converse-singleton: auto_join_rooms must be an Array");if(Vc.settings.get("auto_join_rooms").length>1||Vc.settings.get("auto_join_private_chats").length>1)throw new Error("It doesn't make sense to have singleton set to true and auto_join_rooms or auto_join_private_chats set to more then one, since only one chat room may be open at any time.")}}),
 /**
  * @module converse-fullscreen
  * @license Mozilla Public License (MPLv2)
  * @copyright 2020, the Converse.js contributors
  */
-Yc.plugins.add("converse-fullscreen",{enabled:e=>e.isUniView(),initialize(){qc.settings.extend({chatview_avatar_height:50,chatview_avatar_width:50,hide_open_bookmarks:!0,show_controlbox_by_default:!0,sticky_controlbox:!0})}}),
+rl.plugins.add("converse-fullscreen",{enabled:e=>e.isUniView(),initialize(){Vc.settings.extend({chatview_avatar_height:50,chatview_avatar_width:50,hide_open_bookmarks:!0,show_controlbox_by_default:!0,sticky_controlbox:!0})}}),
 /**
  * @module converse-mam-views
  * @description
@@ -506,43 +521,36 @@ Yc.plugins.add("converse-fullscreen",{enabled:e=>e.isUniView(),initialize(){qc.s
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-Yc.plugins.add("converse-mam-views",{dependencies:["converse-mam","converse-chatview","converse-muc-views"],initialize(){qc.listen.on("chatBoxScrolledUp",async e=>{if(e.model.messages.length){const t=e.model.getOldestMessage();if(t){const n=e.model.get("jid"),r=t&&t.get("stanza_id ".concat(n));e.addSpinner(),r?await e.model.fetchArchivedMessages({before:r}):await e.model.fetchArchivedMessages({end:t.get("time")}),e.clearSpinner()}}})}});function x_(){const e=A_(["<converse-minimized-chat\n                        .model=","\n                        title=","\n                        type=","\n                        num_unread=","></converse-minimized-chat>"]);return x_=function(){return e},e}function E_(){const e=A_(['<div id="minimized-chats" class="','">\n        <a id="toggle-minimized-chats" class="row no-gutters" @click=',">\n            "," ",'\n            <span class="unread-message-count ','" href="#">','</span>\n        </a>\n        <div class="flyout minimized-chats-flyout row no-gutters ','">\n            ',"\n        </div>\n    </div>"]);return E_=function(){return e},e}function A_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-minimized-chat",class extends uc{static get properties(){return{model:{type:Object},title:{type:String},type:{type:String},num_unread:{type:Number}}}render(){return(e=>{const t=dd("Click to restore this chat");return Ga(w_(),e.type,t,e.restore,e.num_unread?Ga(y_(),e.num_unread):"",e.title,e.close)})({close:e=>this.close(e),num_unread:this.num_unread,restore:e=>this.restore(e),title:this.title,type:this.type})}close(e){null==e||e.preventDefault();const t=Lc.chatboxviews.get(this.model.get("id"));t?t.close():(this.model.destroy(),qc.trigger("chatBoxClosed",this))}restore(e){null==e||e.preventDefault(),this.model.maximize()}});
+rl.plugins.add("converse-mam-views",{dependencies:["converse-mam","converse-chatview","converse-muc-views"],initialize(){Vc.listen.on("chatBoxScrolledUp",async e=>{if(e.model.messages.length){const t=e.model.get("type")===Uc.CHATROOMS_TYPE,n=e.model.getOldestMessage();if(n){const r=t?e.model.get("jid"):Uc.bare_jid,i=n&&n.get("stanza_id ".concat(r));e.addSpinner(),i?await e.model.fetchArchivedMessages({before:i}):await e.model.fetchArchivedMessages({end:n.get("time")}),e.clearSpinner()}}})}});function Fb(){const e=qb(["<converse-minimized-chat\n                        .model=","\n                        title=","\n                        type=","\n                        num_unread=","></converse-minimized-chat>"]);return Fb=function(){return e},e}function Bb(){const e=qb(['<div id="minimized-chats" class="','">\n        <a id="toggle-minimized-chats" class="row no-gutters" @click=',">\n            "," ",'\n            <span class="unread-message-count ','" href="#">','</span>\n        </a>\n        <div class="flyout minimized-chats-flyout row no-gutters ','">\n            ',"\n        </div>\n    </div>"]);return Bb=function(){return e},e}function qb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-minimized-chat",class extends mc{static get properties(){return{model:{type:Object},title:{type:String},type:{type:String},num_unread:{type:Number}}}render(){return(e=>{const t=zd("Click to restore this chat");return Za(Lb(),e.type,t,e.restore,e.num_unread?Za(Pb(),e.num_unread):"",e.title,e.close)})({close:e=>this.close(e),num_unread:this.num_unread,restore:e=>this.restore(e),title:this.title,type:this.type})}close(e){null==e||e.preventDefault();const t=Uc.chatboxviews.get(this.model.get("id"));t?t.close():(this.model.destroy(),Vc.trigger("chatBoxClosed",this))}restore(e){null==e||e.preventDefault(),this.model.maximize()}});
 /**
  * @module converse-minimize
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{dayjs:C_}=Yc.env,j_=Yc.env.utils;function T_(){const e=I_(['<div class="form-group">',"</div>"]);return T_=function(){return e},e}function O_(){const e=I_(['<label class="roomid-policy-error">',"</label>"]);return O_=function(){return e},e}function k_(){const e=I_(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="add-chatroom-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <form class="converse-form add-chatroom">\n                        <div class="form-group">\n                            <label for="chatroom">',":</label>\n                            ",'\n                            <input type="text" required="required" name="chatroom" class="form-control roomjid-input" placeholder="','"/>\n                        </div>\n                        ',"\n                        ",'\n                        <input type="submit" class="btn btn-primary" name="join" value="','" ?disabled=',">\n                    </form>\n                </div>\n            </div>\n        </div>\n    "]);return k_=function(){return e},e}function N_(){const e=I_(['\n        <div class="form-group" >\n            <label for="nickname">',':</label>\n            <input type="text" title="','" required="required" name="nickname" value="','" class="form-control"/>\n        </div>\n    ']);return N_=function(){return e},e}function I_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Yc.plugins.add("converse-minimize",{dependencies:["converse-chatview","converse-controlbox","converse-muc-views","converse-headlines-view","converse-dragresize"],enabled:e=>"overlayed"===e.api.settings.get("view_mode"),overrides:{ChatBox:{initialize(){this.__super__.initialize.apply(this,arguments),this.on("show",this.maximize,this),"controlbox"!==this.get("id")&&this.save({minimized:this.get("minimized")||!1,time_minimized:this.get("time_minimized")||C_()})},maybeShow(e){return!e&&this.get("minimized")?this:this.__super__.maybeShow.apply(this,arguments)},isHidden(){return this.__super__.isHidden.call(this)||this.get("minimized")}},ChatBoxView:{show(){const{_converse:e}=this.__super__;return"overlayed"===e.api.settings.get("view_mode")&&this.model.get("minimized")?(this.model.minimize(),this):this.__super__.show.apply(this,arguments)},isNewMessageHidden(){return this.model.get("minimized")||this.__super__.isNewMessageHidden.apply(this,arguments)},shouldShowOnTextMessage(){return!this.model.get("minimized")&&this.__super__.shouldShowOnTextMessage.apply(this,arguments)},setChatBoxHeight(e){if(!this.model.get("minimized"))return this.__super__.setChatBoxHeight.call(this,e)},setChatBoxWidth(e){if(!this.model.get("minimized"))return this.__super__.setChatBoxWidth.call(this,e)}}},initialize(){qc.settings.extend({no_trimming:!1});const e={maximize(){j_.safeSave(this,{minimized:!1,time_opened:(new Date).getTime()})},minimize(){j_.safeSave(this,{minimized:!0,time_minimized:(new Date).toISOString()})}};Object.assign(Lc.ChatBox.prototype,e);const t={onMaximized(){const{_converse:e}=this.__super__;return this.insertIntoDOM(),this.model.isScrolledUp()||this.model.clearUnreadMsgCounter(),this.model.setChatState(e.ACTIVE),this.show(),qc.trigger("chatBoxMaximized",this),this},onMinimized(e){const{_converse:t}=this.__super__;return e&&e.preventDefault&&e.preventDefault(),this.model.collection&&this.model.collection.browserStorage?this.model.save({scroll:this.content.scrollTop}):this.model.set({scroll:this.content.scrollTop}),this.model.setChatState(t.INACTIVE),this.hide(),qc.trigger("chatBoxMinimized",this),this},minimize(e){return e&&e.preventDefault&&e.preventDefault(),this.model.minimize(),this},onMinimizedChanged(e){e.get("minimized")?this.onMinimized():this.onMaximized()}};Object.assign(Lc.ChatBoxView.prototype,t);const n={getChatBoxWidth(e){if("controlbox"===e.model.get("id")){const e=this.get("controlbox");return e&&j_.isVisible(e.el)?j_.getOuterWidth(e.el,!0):j_.getOuterWidth(Lc.controlboxtoggle.el,!0)}return!e.model.get("minimized")&&j_.isVisible(e.el)?j_.getOuterWidth(e.el,!0):0},getShownChats(){return this.filter(e=>!e.model.get("minimized")&&!e.model.get("closed")&&j_.isVisible(e.el))},getMinimizedWidth(){var e;const t=null===(e=Lc.minimized_chats)||void 0===e?void 0:e.el;return this.model.pluck("minimized").includes(!0)?j_.getOuterWidth(t,!0):0},getBoxesWidth(e){const t=e?e.model.get("id"):null,n=e?j_.getOuterWidth(e.el,!0):0;return Object.values(this.xget(t)).reduce((e,t)=>e+this.getChatBoxWidth(t),n)},async trimChats(e){var t;if(qc.settings.get("no_trimming")||!qc.connection.connected()||"overlayed"!==qc.settings.get("view_mode"))return;const n=this.getShownChats();if(n.length<=1)return;const r=j_.getOuterWidth(document.querySelector("body"),!0);if(this.getChatBoxWidth(n[0])!==r&&(await qc.waitUntil("minimizedChatsInitialized"),null===(t=Lc.minimized_chats)||void 0===t?void 0:t.el))for(;this.getMinimizedWidth()+this.getBoxesWidth(e)>r;){const t=e?e.model.get("id"):null,n=this.getOldestMaximizedChat([t]);if(!n)break;{const e=this.get(n.get("id"));e&&e.hide(),n.minimize()}}},getOldestMaximizedChat(e){e.push("controlbox");let t=0,n=this.model.sort().at(t);for(;e.includes(n.get("id"))||!0===n.get("minimized");)if(t++,n=this.model.at(t),!n)return null;return n}};Object.assign(Lc.ChatBoxViews.prototype,n),qc.promises.add("minimizedChatsInitialized"),Lc.MinimizedChatsToggle=Rs.extend({defaults:{collapsed:!1}}),Lc.MinimizedChats=jd.extend({tagName:"span",async initialize(){await this.initToggle(),this.render(),this.listenTo(this.minchats,"change:collapsed",this.render),this.listenTo(this.model,"add",this.render),this.listenTo(this.model,"change:fullname",this.render),this.listenTo(this.model,"change:jid",this.render),this.listenTo(this.model,"change:minimized",this.render),this.listenTo(this.model,"change:name",this.render),this.listenTo(this.model,"change:num_unread",this.render),this.listenTo(this.model,"remove",this.render)},render(){const e=this.model.where({minimized:!0}),t=e.reduce((e,t)=>e+t.get("num_unread"),0),n=e.reduce((e,t)=>e+(t.get("minimized")?1:0),0),r={chats:e,num_unread:t,num_minimized:n,collapsed:this.minchats.get("collapsed")};var i;r.toggle=e=>this.toggle(e),Wa((i=r,Ga(E_(),i.chats.length?"":"hidden",i.toggle,i.num_minimized,dd("Minimized"),i.num_unread?"":"unread-message-count-hidden",i.num_unread,i.collapsed?"hidden":"",i.chats.map(e=>Ga(x_(),e,e.getDisplayName(),e.get("type"),e.get("num_unread"))))),this.el),this.el.parentElement||Lc.chatboxviews.insertRowColumn(this.el)},async initToggle(){const e="converse.minchatstoggle-".concat(Lc.bare_jid);this.minchats=new Lc.MinimizedChatsToggle({id:e}),this.minchats.browserStorage=Lc.createStore(e),await new Promise(e=>this.minchats.fetch({success:e,error:e}))},toggle(e){null==e||e.preventDefault(),this.minchats.save({collapsed:!this.minchats.get("collapsed")})}}),qc.listen.on("chatBoxInsertedIntoDOM",e=>Lc.chatboxviews.trimChats(e)),qc.listen.on("connected",()=>{return null===(e=Lc.minimized_chats)||void 0===e||e.remove(),Lc.minimized_chats=new Lc.MinimizedChats({model:Lc.chatboxes}),void qc.trigger("minimizedChatsInitialized");var e}),qc.listen.on("controlBoxOpened",e=>Lc.chatboxviews.trimChats(e)),qc.listen.on("chatBoxViewInitialized",e=>e.listenTo(e.model,"change:minimized",e.onMinimizedChanged)),qc.listen.on("chatRoomViewInitialized",e=>{e.listenTo(e.model,"change:minimized",e.onMinimizedChanged),e.model.get("minimized")&&e.hide()}),qc.listen.on("getHeadingButtons",(e,t)=>e.model.get("type")===Lc.CHATROOMS_TYPE?function(e,t){const n={a_class:"toggle-chatbox-button",handler:t=>e.minimize(t),i18n_text:dd("Minimize"),i18n_title:dd("Minimize this groupchat"),icon_class:"fa-minus",name:"minimize",standalone:"overlayed"===Lc.api.settings.get("view_mode")},r=t.map(e=>e.name).indexOf("signout");return r>-1?[...t.slice(0,r),n,...t.slice(r)]:[n,...t]}(e,t):function(e,t){const n={a_class:"toggle-chatbox-button",handler:t=>e.minimize(t),i18n_text:dd("Minimize"),i18n_title:dd("Minimize this chat"),icon_class:"fa-minus",name:"minimize",standalone:"overlayed"===Lc.api.settings.get("view_mode")},r=t.map(e=>e.name).indexOf("close");return r>-1?[...t.slice(0,r),n,...t.slice(r)]:[n,...t]}(e,t));const r=Tc(()=>Lc.chatboxviews.trimChats(),250);qc.listen.on("registeredGlobalEventHandlers",()=>window.addEventListener("resize",r)),qc.listen.on("unregisteredGlobalEventHandlers",()=>window.removeEventListener("resize",r))}});var M_=e=>{const t=dd("Join"),n=dd("Enter a new Groupchat");return Ga(k_(),n,Bd,e.label_room_address,e.muc_roomid_policy_error_msg?Ga(O_(),e.muc_roomid_policy_error_msg):"",e.chatroom_placeholder,e.muc_roomid_policy_hint?Ga(T_(),pp(hp.a.filterXSS(e.muc_roomid_policy_hint,{whiteList:{b:[],br:[],em:[]}}))):"",e._converse.locked_muc_nickname?"":(e=>{const t=dd("Nickname"),n=dd("This field is required");return Ga(N_(),t,n,e.nick||"")})(e),t||"",e.muc_roomid_policy_error_msg)},R_=n(20);const D_=Yc.env.utils;var P_=Kd.extend({id:"add-chatroom-modal",events:{"submit form.add-chatroom":"openChatRoom","keyup .roomjid-input":"checkRoomidPolicy","change .roomjid-input":"checkRoomidPolicy"},initialize(){Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:muc_domain",this.render),this.muc_roomid_policy_error_msg=null},toHTML(){let e="";if(!qc.settings.get("locked_muc_domain")){const t=this.model.get("muc_domain")||qc.settings.get("muc_domain");e=t?"name@".concat(t):dd("name@conference.example.org")}return M_(Object.assign(this.model.toJSON(),{_converse:Lc,label_room_address:qc.settings.get("muc_domain")?dd("Groupchat name"):dd("Groupchat address"),chatroom_placeholder:e,muc_roomid_policy_error_msg:this.muc_roomid_policy_error_msg,muc_roomid_policy_hint:qc.settings.get("muc_roomid_policy_hint")}))},afterRender(){this.el.addEventListener("shown.bs.modal",()=>{this.el.querySelector('input[name="chatroom"]').focus()},!1)},parseRoomDataFromEvent(e){const t=new FormData(e),n=t.get("chatroom");let r;if(qc.settings.get("locked_muc_nickname")){if(r=Lc.getDefaultMUCNickname(),!r)throw new Error("Using locked_muc_nickname but no nickname found!")}else r=t.get("nickname").trim();return{jid:n,nick:r}},openChatRoom(e){e.preventDefault();const t=this.parseRoomDataFromEvent(e.target);let n;""===t.nick&&(t.nick=void 0),qc.settings.get("locked_muc_domain")||qc.settings.get("muc_domain")&&!D_.isValidJID(t.jid)?n="".concat(R_.b.escapeNode(t.jid),"@").concat(qc.settings.get("muc_domain")):(n=t.jid,this.model.setDomain(n)),qc.rooms.open(n,Object.assign(t,{jid:n}),!0),this.modal.hide(),e.target.reset()},checkRoomidPolicy(){if(qc.settings.get("muc_roomid_policy")&&qc.settings.get("muc_domain")){let e=this.el.querySelector(".roomjid-input").value;!Yc.locked_muc_domain&&D_.isValidJID(e)||(e="".concat(R_.b.escapeNode(e),"@").concat(qc.settings.get("muc_domain")));const t=R_.b.getNodeFromJid(e),n=R_.b.getDomainFromJid(e);qc.settings.get("muc_domain")!==n||qc.settings.get("muc_roomid_policy").test(t)?this.muc_roomid_policy_error_msg=null:this.muc_roomid_policy_error_msg=dd("Groupchat id is invalid."),this.render()}}});function L_(){const e=F_(['<div class="error error-feedback">',"</div>"]);return L_=function(){return e},e}function z_(){const e=F_(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="add-chatroom-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <div class="suggestion-box room-invite">\n                        <form @submit=','>\n                            <div class="form-group">\n                                <label class="clearfix" for="invitee_jids">',":</label>\n                                ",'\n                                <input class="form-control suggestion-box__input"\n                                    required="required"\n                                    name="invitee_jids"\n                                    id="invitee_jids"\n                                    placeholder="','"\n                                    type="text"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                                <ul class="suggestion-box__results suggestion-box__results--below" hidden=""></ul>\n                            </div>\n                            <div class="form-group">\n                                <label>',':</label>\n                                <textarea class="form-control" name="reason"></textarea>\n                            </div>\n                            <div class="form-group">\n                                <button type="submit" class="btn btn-primary">',"</button>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);return z_=function(){return e},e}function F_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const B_=Yc.env.utils;var q_=Kd.extend({id:"muc-invite-modal",initialize(){Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.initInviteWidget()},toHTML(){return(e=>{const t=dd("Invite"),n=dd("Invite someone to this groupchat"),r=dd("user@example.org"),i=dd("Please enter a valid XMPP address"),s=dd("XMPP Address"),o=dd("Optional reason for the invitation");return Ga(z_(),n,Bd,e.submitInviteForm,s,e.invalid_invite_jid?Ga(L_(),i):"",r,o,t)})(Object.assign(this.model.toJSON(),{submitInviteForm:e=>this.submitInviteForm(e)}))},initInviteWidget(){this.invite_auto_complete&&this.invite_auto_complete.destroy();const e=Lc.roster.map(e=>({label:e.getDisplayName(),value:e.get("jid")})),t=this.el.querySelector(".suggestion-box").parentElement;this.invite_auto_complete=new Lc.AutoComplete(t,{min_chars:1,list:e})},submitInviteForm(e){e.preventDefault();const t=new FormData(e.target),n=t.get("invitee_jids"),r=t.get("reason");B_.isValidJID(n)?(this.chatroomview.model.directInvite(n,r),this.modal.hide()):this.model.set({invalid_invite_jid:!0})}});function H_(){const e=G_(['<li class="list-group-item active">',"</li>"]);return H_=function(){return e},e}function U_(){const e=G_(['<li class="list-group-item"> '," </li>"]);return U_=function(){return e},e}function $_(){const e=G_(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="list-chatrooms-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body d-flex flex-column">\n                    <span class="modal-alert"></span>\n                    ','\n                    <ul class="available-chatrooms list-group">\n                        ',"\n                        ","\n                        ",'\n                    </ul>\n                </div>\n                <div class="modal-footer">',"</div>\n            </div>\n        </div>\n    "]);return $_=function(){return e},e}function W_(){const e=G_(['\n        <li class="room-item list-group-item">\n            <div class="available-chatroom d-flex flex-row">\n                <a class="open-room available-room w-100"\n                @click=','\n                data-room-jid="','"\n                data-room-name="','"\n                title="','"\n                href="#">','</a>\n                <a class="right room-info icon-room-info"\n                @click=','\n                data-room-jid="','"\n                title="','"\n                href="#"></a>\n            </div>\n        </li>\n    ']);return W_=function(){return e},e}function V_(){const e=G_(['\n        <form class="converse-form list-chatrooms"\n            @submit=','>\n            <div class="form-group">\n                <label for="chatroom">',':</label>\n                <input type="text"\n                    @change=','\n                    value="','"\n                    required="required"\n                    name="server"\n                    class="form-control"\n                    placeholder="','"/>\n            </div>\n            <input type="submit" class="btn btn-primary" name="list" value="','"/>\n        </form>\n    ']);return V_=function(){return e},e}function G_(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var J_=e=>{const t=dd("Query for Groupchats");return Ga($_(),t,Bd,e.show_form?(e=>{const t=dd("Show groupchats"),n=dd("Server address");return Ga(V_(),e.submitForm,n,e.setDomainFromEvent,e.muc_domain||"",e.server_placeholder,t)})(e):"",e.loading_items?Ga(U_(),Tf()):"",e.feedback_text?Ga(H_(),e.feedback_text):"",np(e.items,e=>e.jid,t=>((e,t)=>{const n=dd("Show more information on this groupchat"),r=dd("Click to open this groupchat");return Ga(W_(),e.openRoom,t.jid,t.name,r,t.name||t.jid,e.toggleRoomInfo,t.jid,n)})(e,t)),Fd)},X_=n(138),Q_=n.n(X_);const Y_=Yc.env.utils;function K_(e){const t=Y_.ancestor(e.target,".room-item"),n=t.querySelector("div.room-info");n?(Y_.slideIn(n).then(Y_.removeElement),t.querySelector("a.room-info").classList.remove("selected")):(t.insertAdjacentElement("beforeend",Y_.getElementFromTemplateResult(Tf())),qc.disco.info(e.target.getAttribute("data-room-jid"),null).then(e=>function(e,t){var n,r;e.querySelector("span.spinner").remove(),e.querySelector("a.room-info").classList.add("selected"),e.insertAdjacentHTML("beforeEnd",Q_()({jid:t.getAttribute("from"),desc:null===(n=hg(ur()('field[var="muc#roominfo_description"] value',t)))||void 0===n?void 0:n.textContent,occ:null===(r=hg(ur()('field[var="muc#roominfo_occupants"] value',t)))||void 0===r?void 0:r.textContent,hidden:ur()('feature[var="muc_hidden"]',t).length,membersonly:ur()('feature[var="muc_membersonly"]',t).length,moderated:ur()('feature[var="muc_moderated"]',t).length,nonanonymous:ur()('feature[var="muc_nonanonymous"]',t).length,open:ur()('feature[var="muc_open"]',t).length,passwordprotected:ur()('feature[var="muc_passwordprotected"]',t).length,persistent:ur()('feature[var="muc_persistent"]',t).length,publicroom:ur()('feature[var="muc_publicroom"]',t).length,semianonymous:ur()('feature[var="muc_semianonymous"]',t).length,temporary:ur()('feature[var="muc_temporary"]',t).length,unmoderated:ur()('feature[var="muc_unmoderated"]',t).length,label_desc:dd("Description:"),label_jid:dd("Groupchat Address (JID):"),label_occ:dd("Participants:"),label_features:dd("Features:"),label_requires_auth:dd("Requires authentication"),label_hidden:dd("Hidden"),label_requires_invite:dd("Requires an invitation"),label_moderated:dd("Moderated"),label_non_anon:dd("Non-anonymous"),label_open_room:dd("Open"),label_permanent_room:dd("Permanent"),label_public:dd("Public"),label_semi_anon:dd("Semi-anonymous"),label_temp_room:dd("Temporary"),label_unmoderated:dd("Unmoderated")}))}(t,e)).catch(e=>Pn.error(e)))}var Z_=Kd.extend({id:"list-chatrooms-modal",initialize(){this.items=[],this.loading_items=!1,Kd.prototype.initialize.apply(this,arguments),qc.settings.get("muc_domain")&&!this.model.get("muc_domain")&&this.model.save("muc_domain",qc.settings.get("muc_domain")),this.listenTo(this.model,"change:muc_domain",this.onDomainChange),this.el.addEventListener("shown.bs.modal",()=>qc.settings.get("locked_muc_domain")?this.updateRoomsList():this.el.querySelector('input[name="server"]').focus())},toHTML(){const e=this.model.get("muc_domain")||qc.settings.get("muc_domain");return J_(Object.assign(this.model.toJSON(),{show_form:!qc.settings.get("locked_muc_domain"),server_placeholder:e||dd("conference.example.org"),items:this.items,loading_items:this.loading_items,openRoom:e=>this.openRoom(e),setDomainFromEvent:e=>this.setDomainFromEvent(e),submitForm:e=>this.showRooms(e),toggleRoomInfo:e=>this.toggleRoomInfo(e)}))},openRoom(e){e.preventDefault();const t=e.target.getAttribute("data-room-jid"),n=e.target.getAttribute("data-room-name");this.modal.hide(),qc.rooms.open(t,{name:n},!0)},toggleRoomInfo(e){e.preventDefault(),K_(e)},onDomainChange(){qc.settings.get("auto_list_rooms")&&this.updateRoomsList()},onRoomsFound(e){this.loading_items=!1;const t=e?ur()("query item",e):[];return t.length?(this.model.set({feedback_text:dd("Groupchats found")},{silent:!0}),this.items=t.map(ao.getAttributes)):(this.items=[],this.model.set({feedback_text:dd("No groupchats found")},{silent:!0})),this.render(),!0},updateRoomsList(){const e=Object(R_.a)({to:this.model.get("muc_domain"),from:Lc.connection.jid,type:"get"}).c("query",{xmlns:R_.b.NS.DISCO_ITEMS});qc.sendIQ(e).then(e=>this.onRoomsFound(e)).catch(()=>this.onRoomsFound())},showRooms(e){e.preventDefault(),this.loading_items=!0,this.render();const t=new FormData(e.target);this.model.setDomain(t.get("server")),this.updateRoomsList()},setDomainFromEvent(e){this.model.setDomain(e.target.value)},setNick(e){this.model.save({nick:e.target.value})}});function eb(){const e=wb(['<li class="list-group-item">',"</li>"]);return eb=function(){return e},e}function tb(){const e=wb(['<li class="list-group-item"> '," </li>"]);return tb=function(){return e},e}function nb(){const e=wb(['<div class="row"><div class="col pt-2"><p class="helptext pb-3">',"</p></div></div>"]);return nb=function(){return e},e}function rb(){const e=wb(['<input class="form-control" .value="','" @keyup=',' type="text" name="filter" placeholder="','"/>']);return rb=function(){return e},e}function ib(){const e=wb(['<li class="list-group-item">',"</li>"]);return ib=function(){return e},e}function sb(){const e=wb(['<li class="list-group-item">',"</li>"]);return sb=function(){return e},e}function ob(){const e=wb(['<li class="list-group-item"> '," </li>"]);return ob=function(){return e},e}function ab(){const e=wb(['<div class="row"><div class="col pt-2"><p class="helptext pb-3">',"</p></div></div>"]);return ab=function(){return e},e}function cb(){const e=wb(['<input class="form-control" .value="','" @keyup=',' type="text" name="filter" placeholder="','"/>']);return cb=function(){return e},e}function lb(){const e=wb(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="converse-modtools-modal-label">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body d-flex flex-column">\n                <span class="modal-alert"></span>\n\n                ','\n\n                <div class="tab-content">\n                    <div class="tab-pane tab-pane--columns ','" id="affiliations-tabpanel" role="tabpanel" aria-labelledby="affiliations-tab">\n                        <form class="converse-form query-affiliation" @submit=','>\n                            <p class="helptext pb-3">','</p>\n                            <div class="form-group">\n                                <label for="affiliation">\n                                    <strong>',':</strong>\n                                </label>\n                                <div class="row">\n                                    <div class="col">\n                                        <select class="custom-select select-affiliation" name="affiliation">\n                                            ','\n                                        </select>\n                                    </div>\n                                    <div class="col">\n                                        <input type="submit" class="btn btn-primary" name="users_with_affiliation" value="','"/>\n                                    </div>\n                                </div>\n                                <div class="row">\n                                    <div class="col mt-3">\n                                        ',"\n                                    </div>\n                                </div>\n\n                                ",'\n                            </div>\n                        </form>\n                        <div class="scrollable-container">\n                            <ul class="list-group list-group--users">\n                                ',"\n                                ","\n\n                                ",'\n                            </ul>\n                        </div>\n                    </div>\n\n                    <div class="tab-pane tab-pane--columns ','" id="roles-tabpanel" role="tabpanel" aria-labelledby="roles-tab">\n                        <form class="converse-form query-role" @submit=','>\n                            <p class="helptext pb-3">','</p>\n                            <div class="form-group">\n                                <label for="role"><strong>',':</strong></label>\n                                <div class="row">\n                                    <div class="col">\n                                        <select class="custom-select select-role" name="role">\n                                            ','\n                                        </select>\n                                    </div>\n                                    <div class="col">\n                                        <input type="submit" class="btn btn-primary" name="users_with_role" value="','"/>\n                                    </div>\n                                </div>\n                                <div class="row">\n                                    <div class="col mt-3">\n                                        ',"\n                                    </div>\n                                </div>\n\n                                ",'\n                            </div>\n                        </form>\n                        <div class="scrollable-container">\n                            <ul class="list-group list-group--users">\n                                ',"\n                                ","\n                                ","\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>"]);return lb=function(){return e},e}function ub(){const e=wb(['\n    <ul class="nav nav-pills justify-content-center">\n        <li role="presentation" class="nav-item">\n            <a class="nav-link active" id="affiliations-tab" href="#affiliations-tabpanel" aria-controls="affiliations-tabpanel" role="tab" data-toggle="tab" @click=','>Affiliations</a>\n        </li>\n        <li role="presentation" class="nav-item">\n            <a class="nav-link" id="roles-tab" href="#roles-tabpanel" aria-controls="roles-tabpanel" role="tab" data-toggle="tab" @click=',">Roles</a>\n        </li>\n    </ul>\n"]);return ub=function(){return e},e}function db(){const e=wb(['<a href="#" data-form="affiliation-form" class="toggle-form right fa fa-wrench" @click=',"></a>"]);return db=function(){return e},e}function hb(){const e=wb(['\n    <li class="list-group-item" data-nick="','">\n        <ul class="list-group">\n            <li class="list-group-item active">\n                <div><strong>JID:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Nickname:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Affiliation:</strong> '," ","</div>\n                ","\n            </li>\n        </ul>\n    </li>\n"]);return hb=function(){return e},e}function fb(){const e=wb(['<option value="','" ?selected=',">","</option>"]);return fb=function(){return e},e}function pb(){const e=wb(['\n        <form class="affiliation-form hidden" @submit=','>\n            <div class="form-group">\n                <input type="hidden" name="jid" value="','"/>\n                <input type="hidden" name="nick" value="','"/>\n                <div class="row">\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <select class="custom-select select-affiliation" name="affiliation">\n                            ','\n                        </select>\n                    </div>\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <input class="form-control" type="text" name="reason"/>\n                    </div>\n                </div>\n            </div>\n            <div class="form-group">\n                <input type="submit" class="btn btn-primary" name="change" value="','"/>\n            </div>\n        </form>\n    ']);return pb=function(){return e},e}function gb(){const e=wb(['<a href="#" data-form="role-form" class="toggle-form right fa fa-wrench" @click=',"></a>"]);return gb=function(){return e},e}function mb(){const e=wb(['\n    <li class="list-group-item" data-nick="','">\n        <ul class="list-group">\n            <li class="list-group-item active">\n                <div><strong>JID:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Nickname:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Role:</strong> '," ","</div>\n                ","\n            </li>\n        </ul>\n    </li>\n"]);return mb=function(){return e},e}function vb(){const e=wb(['<option value="','" ?selected=',">","</option>"]);return vb=function(){return e},e}function _b(){const e=wb(['\n        <form class="role-form hidden" @submit=','>\n            <div class="form-group">\n                <input type="hidden" name="jid" value="','"/>\n                <input type="hidden" name="nick" value="','"/>\n                <div class="row">\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <select class="custom-select select-role" name="role">\n                            ','\n                        </select>\n                    </div>\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <input class="form-control" type="text" name="reason"/>\n                    </div>\n                </div>\n            </div>\n            <div class="form-group">\n                <input type="submit" class="btn btn-primary" value="','"/>\n            </div>\n        </form>\n    ']);return _b=function(){return e},e}function bb(){const e=wb(['\n    <option value="','"\n            ?selected=','\n            title="','">',"</option>\n"]);return bb=function(){return e},e}function yb(){const e=wb(['\n    <option value="','"\n            ?selected=','\n            title="','">',"</option>\n"]);return yb=function(){return e},e}function wb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Sb(e){return"moderator"===e?dd("Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations."):"participant"===e?dd("The default role, implies that you can read and write messages."):"visitor"==e?dd("Visitors aren't allowed to write messages in a moderated multi-user chat."):void 0}function xb(e){return"owner"===e?dd("Owner is the highest affiliation. Owners can modify roles and affiliations of all other users."):"admin"===e?dd("Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners."):"outcast"===e?dd('To ban a user, you give them the affiliation of "outcast".'):void 0}const Eb=e=>Ga(mb(),e.item.nick,e.item.jid,e.item.nick,e.item.role,e.assignable_roles.length?Ga(gb(),e.toggleForm):"",e.assignable_roles.length?(e=>{const t=dd("Change role"),n=dd("New Role"),r=dd("Reason");return Ga(_b(),e.assignRole,e.item.jid,e.item.nick,n,e.assignable_roles.map(t=>Ga(vb(),t,t===e.item.role,t)),r,t)})(e):""),Ab=e=>Ga(hb(),e.item.nick,e.item.jid,e.item.nick,e.item.affiliation,e.assignable_affiliations.length?Ga(db(),e.toggleForm):"",e.assignable_affiliations.length?(e=>{const t=dd("Change affiliation"),n=dd("New affiliation"),r=dd("Reason");return Ga(pb(),e.assignAffiliation,e.item.jid,e.item.nick,n,e.assignable_affiliations.map(t=>Ga(fb(),t,t===e.item.affiliation,t)),r,t)})(e):"");var Cb=e=>{const t=dd("Affiliation"),n=dd("Moderator Tools"),r=dd("No users with that affiliation found."),i=dd("No users with that role found."),s=dd("Type here to filter the search results"),o=dd("Role"),a=dd("Show users"),c=dd("Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They're assigned either explicitly or implicitly as part of an affiliation. A role that's not due to an affiliation, is only valid for the duration of the user's session."),l=dd("An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role."),u=e.queryable_roles.length&&e.queryable_affiliations.length;return Ga(lb(),n,Bd,u?(e=>Ga(ub(),e.switchTab,e.switchTab))(e):"",e.queryable_affiliations.length?"active":"",e.queryAffiliation,l,t,e.queryable_affiliations.map(t=>(e=>Ga(bb(),e.item||"",e.item===e.affiliation,xb(e.item),e.item))(Object.assign({item:t},e))),a,Array.isArray(e.users_with_affiliation)&&e.users_with_affiliation.length>5?Ga(cb(),e.affiliations_filter,e.filterAffiliationResults,s):"",xb(e.affiliation)?Ga(ab(),xb(e.affiliation)):"",e.loading_users_with_affiliation?Ga(ob(),Tf()):"",Array.isArray(e.users_with_affiliation)&&0===e.users_with_affiliation.length?Ga(sb(),r):"",e.users_with_affiliation instanceof Error?Ga(ib(),e.users_with_affiliation.message):(e.users_with_affiliation||[]).map(t=>(t.nick||t.jid).match(new RegExp(e.affiliations_filter,"i"))?Ab(Object.assign({item:t},e)):""),!u&&e.queryable_roles.length?"active":"",e.queryRole,c,o,e.queryable_roles.map(t=>(e=>Ga(yb(),e.item||"",e.item===e.role,Sb(e.item),e.item))(Object.assign({item:t},e))),a,Array.isArray(e.users_with_role)&&e.users_with_role.length>5?Ga(rb(),e.roles_filter,e.filterRoleResults,s):"",Sb(e.role)?Ga(nb(),Sb(e.role)):"",e.loading_users_with_role?Ga(tb(),Tf()):"",e.users_with_role&&0===e.users_with_role.length?Ga(eb(),i):"",(e.users_with_role||[]).map(t=>t.nick.match(e.roles_filter)?Eb(Object.assign({item:t},e)):""))};const{Strophe:jb}=Yc.env,Tb=Yc.env.utils;let Ob;var kb=Kd.extend({id:"converse-modtools-modal",initialize(e){Ob=e._converse,this.chatroomview=e.chatroomview,Kd.prototype.initialize.apply(this,arguments),this.affiliations_filter="",this.roles_filter="",this.listenTo(this.model,"change:role",()=>{this.users_with_role=this.chatroomview.model.getOccupantsWithRole(this.model.get("role")),this.render()}),this.listenTo(this.model,"change:affiliation",async()=>{this.loading_users_with_affiliation=!0,this.users_with_affiliation=null,this.render();const e=this.chatroomview.model,t=this.model.get("affiliation");this.shouldFetchAffiliationsList()?this.users_with_affiliation=await e.getAffiliationList(t):this.users_with_affiliation=e.getOccupantsWithAffiliation(t),this.loading_users_with_affiliation=!1,this.render()})},toHTML(){const e=this.chatroomview.model.occupants.findWhere({jid:Ob.bare_jid});return Cb(Object.assign(this.model.toJSON(),{affiliations_filter:this.affiliations_filter,assignAffiliation:e=>this.assignAffiliation(e),assignRole:e=>this.assignRole(e),assignable_affiliations:this.getAssignableAffiliations(e),assignable_roles:this.getAssignableRoles(e),filterAffiliationResults:e=>this.filterAffiliationResults(e),filterRoleResults:e=>this.filterRoleResults(e),loading_users_with_affiliation:this.loading_users_with_affiliation,queryAffiliation:e=>this.queryAffiliation(e),queryRole:e=>this.queryRole(e),queryable_affiliations:Ql.filter(e=>!Ob.modtools_disable_query.includes(e)),queryable_roles:Xl.filter(e=>!Ob.modtools_disable_query.includes(e)),roles_filter:this.roles_filter,switchTab:e=>this.switchTab(e),toggleForm:e=>this.toggleForm(e),users_with_affiliation:this.users_with_affiliation,users_with_role:this.users_with_role}))},getAssignableAffiliations(e){let t=qc.settings.get("modtools_disable_assign");return Array.isArray(t)||(t=t?Ql:[]),"owner"===e.get("affiliation")?Ql.filter(e=>!t.includes(e)):"admin"===e.get("affiliation")?Ql.filter(e=>!["owner","admin",...t].includes(e)):[]},getAssignableRoles(e){let t=qc.settings.get("modtools_disable_assign");return Array.isArray(t)||(t=t?Xl:[]),"moderator"===e.get("role")?Xl.filter(e=>!t.includes(e)):[]},shouldFetchAffiliationsList(){const e=this.model.get("affiliation");return"none"!==e&&!this.chatroomview.model.occupants.getAutoFetchedAffiliationLists().includes(e)},toggleForm(e){e.stopPropagation(),e.preventDefault();const t=e.target.getAttribute("data-form"),n=Tb.ancestor(e.target,".list-group-item").querySelector(".".concat(t));Tb.hasClass("hidden",n)?Tb.removeClass("hidden",n):Tb.addClass("hidden",n)},filterRoleResults(e){this.roles_filter=e.target.value,this.render()},filterAffiliationResults(e){this.affiliations_filter=e.target.value,this.render()},queryRole(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target).get("role");this.model.set({role:null},{silent:!0}),this.model.set({role:t})},queryAffiliation(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target).get("affiliation");this.model.set({affiliation:null},{silent:!0}),this.model.set({affiliation:t})},async assignAffiliation(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target),n=t.get("affiliation"),r={jid:t.get("jid"),reason:t.get("reason")},i=this.model.get("affiliation");try{await this.chatroomview.model.setAffiliation(n,[r])}catch(e){return null===e?this.alert(dd("Timeout error while trying to set the affiliation"),"danger"):ur()('not-allowed[xmlns="'.concat(jb.NS.STANZAS,'"]'),e).length?this.alert(dd("Sorry, you're not allowed to make that change"),"danger"):this.alert(dd("Sorry, something went wrong while trying to set the affiliation"),"danger"),void Pn.error(e)}this.alert(dd("Affiliation changed"),"primary"),await this.chatroomview.model.occupants.fetchMembers(),this.model.set({affiliation:null},{silent:!0}),this.model.set({affiliation:i})},assignRole(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target),n=this.chatroomview.model.getOccupant(t.get("jid")||t.get("nick")),r=t.get("role"),i=t.get("reason"),s=this.model.get("role");this.chatroomview.model.setRole(n,r,i,()=>{this.alert(dd("Role changed"),"primary"),this.model.set({role:null},{silent:!0}),this.model.set({role:s})},e=>{ur()('not-allowed[xmlns="'.concat(jb.NS.STANZAS,'"]'),e).length?this.alert(dd("You're not allowed to make that change"),"danger"):(this.alert(dd("Sorry, something went wrong while trying to set the role"),"danger"),Tb.isErrorObject(e)&&Pn.error(e))})}});function Nb(){const e=Vb(['<li class="feature" ><span class="fa fa-database"></span>'," - <em>","</em></li>"]);return Nb=function(){return e},e}function Ib(){const e=Vb(['<li class="feature" ><span class="fa fa-info-circle"></span>'," - <em>","</em></li>"]);return Ib=function(){return e},e}function Mb(){const e=Vb(['<li class="feature" ><span class="fa fa-gavel"></span>'," - <em>","</em></li>"]);return Mb=function(){return e},e}function Rb(){const e=Vb(['<li class="feature" ><span class="fa fa-user-secret"></span>'," - <em>","</em></li>"]);return Rb=function(){return e},e}function Db(){const e=Vb(['<li class="feature" ><span class="fa fa-id-card"></span>'," - <em>","</em></li>"]);return Db=function(){return e},e}function Pb(){const e=Vb(['<li class="feature" ><span class="fa fa-snowflake-o"></span>'," - <em>","</em></li>"]);return Pb=function(){return e},e}function Lb(){const e=Vb(['<li class="feature" ><span class="fa fa-save"></span>'," - <em>","</em></li>"]);return Lb=function(){return e},e}function zb(){const e=Vb(['<li class="feature" ><span class="fa fa-globe"></span>'," - <em>","</em></li>"]);return zb=function(){return e},e}function Fb(){const e=Vb(['<li class="feature" ><span class="fa fa-address-book"></span>'," - <em>","</em></li>"]);return Fb=function(){return e},e}function Bb(){const e=Vb(['<li class="feature" ><span class="fa fa-eye"></span>'," - <em>","</em></li>"]);return Bb=function(){return e},e}function qb(){const e=Vb(['<li class="feature" ><span class="fa fa-eye-slash"></span>'," - <em>","</em></li>"]);return qb=function(){return e},e}function Hb(){const e=Vb(['<li class="feature" ><span class="fa fa-unlock"></span>'," - <em>","</em></li>"]);return Hb=function(){return e},e}function Ub(){const e=Vb(['<li class="feature" ><span class="fa fa-lock"></span>'," - <em>","</em></li>"]);return Ub=function(){return e},e}function $b(){const e=Vb(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="room-details-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <div class="room-info">\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>',"</strong>: ","</p>\n                        ",'\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>','</strong>:\n                            <div class="chatroom-features">\n                            <ul class="features-list">\n                                ',"\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ",'\n                            </ul>\n                            </div>\n                        </p>\n                    </div>\n                </div>\n                <div class="modal-footer">',"</div>\n            </div>\n        </div>\n    "]);return $b=function(){return e},e}function Wb(){const e=Vb(['\n        <p class="room-info"><strong>',"</strong>: ",'</p>\n            <p class="room-info"><strong>',"</strong>: ","</p>\n    "]);return Wb=function(){return e},e}function Vb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Gb=e=>{const t=dd("Groupchat address (JID)"),n=dd("Message archiving"),r=dd("Messages are archived on the server"),i=dd("Description"),s=dd("Features"),o=dd("Hidden"),a=dd("This groupchat is not publicly searchable"),c=dd("This groupchat is restricted to members only"),l=dd("Members only"),u=dd("Moderated"),d=dd("Participants entering this groupchat need to request permission to write"),h=dd("Name"),f=dd("This groupchat does not require a password upon entry"),p=dd("No password required"),g=dd("Not anonymous"),m=dd("All other groupchat participants can see your XMPP address"),v=dd("Not moderated"),_=dd("Participants entering this groupchat can write right away"),b=dd("Online users"),y=dd("Open"),w=dd("Anyone can join this groupchat"),S=dd("This groupchat requires a password before entry"),x=dd("Password protected"),E=dd("Persistent"),A=dd("This groupchat persists even if it's unoccupied"),C=dd("Public"),j=dd("Semi-anonymous"),T=dd("Only moderators can see your XMPP address"),O=dd("Temporary"),k=dd("This groupchat will disappear once the last person leaves");return Ga($b(),e.display_name,Bd,h,e.name,t,e.jid,i,e.config.description,e.subject?(e=>{const t=dd("Topic"),n=dd("Topic author");return Ga(Wb(),t,pp(hp.a.filterXSS(e.subject.text,{whiteList:{}})),n,e.subject&&e.subject.author)})(e):"",b,e.num_occupants,s,e.features.passwordprotected?Ga(Ub(),x,S):"",e.features.unsecured?Ga(Hb(),p,f):"",e.features.hidden?Ga(qb(),o,a):"",e.features.public_room?Ga(Bb(),C,e.__("This groupchat is publicly searchable")):"",e.features.membersonly?Ga(Fb(),l,c):"",e.features.open?Ga(zb(),y,w):"",e.features.persistent?Ga(Lb(),E,A):"",e.features.temporary?Ga(Pb(),O,k):"",e.features.nonanonymous?Ga(Db(),g,m):"",e.features.semianonymous?Ga(Rb(),j,T):"",e.features.moderated?Ga(Mb(),u,d):"",e.features.unmoderated?Ga(Ib(),v,_):"",e.features.mam_enabled?Ga(Nb(),n,r):"",Fd)},Jb=Kd.extend({id:"room-details-modal",initialize(){Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.listenTo(this.model.features,"change",this.render),this.listenTo(this.model.occupants,"add",this.render),this.listenTo(this.model.occupants,"change",this.render)},toHTML(){return Gb(Object.assign(this.model.toJSON(),{config:this.model.config.toJSON(),display_name:dd("Groupchat info for %1$s",this.model.getDisplayName()),features:this.model.features.toJSON(),num_occupants:this.model.occupants.length}))}});function Xb(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="flyout box-flyout">\n        <div class="chat-head chat-head-chatroom row no-gutters"></div>\n        <div class="chat-body chatroom-body row no-gutters">\n            <div class="chat-area col">\n                <div class="chat-content ','" aria-live="polite">\n                    <div class="chat-content__messages" @scroll=','></div>\n                    <div class="chat-content__help"></div>\n                </div>\n                <div class="bottom-panel"></div>\n            </div>\n            <div class="disconnect-container hidden"></div>\n        </div>\n    </div>\n']);return Xb=function(){return e},e}function Qb(){const e=Zb(['<div class="muc-bottom-panel"></div>']);return Qb=function(){return e},e}function Yb(){const e=Zb(['<div class="muc-bottom-panel">',"</div>"]);return Yb=function(){return e},e}function Kb(){const e=Zb(['\n    <div class="emoji-picker__container dropup"></div>\n    <div class="message-form-container">']);return Kb=function(){return e},e}function Zb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var ey=e=>{const t=dd("You're not allowed to send messages in this room");return e.entered?e.can_edit?Ga(Kb()):Ga(Yb(),t):Ga(Qb())};function ty(){const e=iy(['<p class="destroyed-reason">"','"</p>']);return ty=function(){return e},e}function ny(){const e=iy(['\n        <div class="alert alert-danger">\n            <h3 class="alert-heading disconnect-msg">',"</h3>\n            ","\n            ","\n        </div>"]);return ny=function(){return e},e}function ry(){const e=iy(['\n        <p class="moved-label">','</p>\n        <p class="moved-link"><a class="switch-chat" href="#">',"</a></p>"]);return ry=function(){return e},e}function iy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var sy=(e,t)=>{const n=dd("This groupchat no longer exists");return Ga(ny(),n,t?Ga(ty(),t):"",e?(e=>{const t=dd("The conversation has moved. Click below to enter.");return Ga(ry(),t,e)})(e):"")};function oy(){const e=cy(['<p class="disconnect-msg">',"</p>"]);return oy=function(){return e},e}function ay(){const e=cy(['\n        <div class="alert alert-danger">\n            <h3 class="alert-heading disconnect-msg">',"</h3>\n            ","\n        </div>"]);return ay=function(){return e},e}function cy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ly(){const e=py(['<p class="chat-head__desc" title="','">',"</p>"]);return ly=function(){return e},e}function uy(){const e=py(["<converse-dropdown .items=","></converse-dropdown>"]);return uy=function(){return e},e}function dy(){const e=py(['<i class="fa fa-bookmark chatbox-title__text--bookmarked" title="','"></i>']);return dy=function(){return e},e}function hy(){const e=py(['<div class="chatbox-navback"><i class="fa fa-arrow-left"></i></div>']);return hy=function(){return e},e}function fy(){const e=py(['\n        <div class="chatbox-title ','">\n            ','\n            <div class="chatbox-title__text" title="','">',"\n                ",'\n            </div>\n            <div class="chatbox-title__buttons row no-gutters">\n                ',"\n                ","\n            </div>\n        </div>\n        ","\n    "]);return fy=function(){return e},e}function py(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const gy=Yc.env.utils;var my=e=>{const t=dd("Hide the groupchat topic"),n=dd("This groupchat is bookmarked"),r=e.subject?gy.addHyperlinks(e.subject.text):"",i=r&&!e.subject_hidden;return Ga(fy(),i?"":"chatbox-title--no-desc",e._converse.standalone?Ga(hy()):"","hidden"!==e._converse.locked_muc_domain?e.jid:"",e.title,e.bookmarked?Ga(dy(),n):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>oh(e,"")))(e):"",e.dropdown_btns.length?Ga(uy(),e.dropdown_btns):"",i?Ga(ly(),t,r):"")};function vy(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="chatroom-form-container muc-nickname-form">\n            <form class="converse-form chatroom-form converse-centered-form">\n                <fieldset class="form-group">\n                    <label>','</label>\n                    <input type="text" required="required" name="nick" value="','"\n                        class="form-control" placeholder="','"/>\n                </fieldset>\n                <fieldset class="form-group">\n                    <input type="submit" class="btn btn-primary" name="join" value="','"/>\n                </fieldset>\n            </form>\n        </div>']);return vy=function(){return e},e}function _y(){const e=yy(['<p class="form-help">',"</p>"]);return _y=function(){return e},e}function by(){const e=yy(['\n        <form class="converse-form chatroom-form" autocomplete="off" @submit=','>\n            <fieldset class="form-group">\n                <legend>',"</legend>\n                ","\n                \x3c!-- Fields are generated internally, with xForm2webForm --\x3e\n                ",'\n            </fieldset>\n            <fieldset>\n                <input type="submit" class="btn btn-primary" value="','">\n                <input type="button" class="btn btn-secondary button-cancel" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return by=function(){return e},e}function yy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function wy(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <form class="converse-form chatroom-form converse-centered-form" @submit=','>\n            <fieldset class="form-group">\n                <label>','</label>\n                <p class="validation-message">','</p>\n                <input class="hidden-username" type="text" autocomplete="username" value="','"></input>\n                <input type="password"\n                    name="password"\n                    required="required"\n                    class="form-control ','"\n                    placeholder="','"/>\n            </fieldset>\n            <fieldset class="form-group">\n                <input class="btn btn-primary" type="submit" value="','"/>\n            </fieldset>\n        </form>\n    ']);return wy=function(){return e},e}function Sy(){const e=Ty(['<span class="badge badge-secondary">',"</span>"]);return Sy=function(){return e},e}function xy(){const e=Ty(['<span class="badge badge-info">',"</span>"]);return xy=function(){return e},e}function Ey(){const e=Ty(['<span class="badge badge-info">',"</span>"]);return Ey=function(){return e},e}function Ay(){const e=Ty(['<span class="badge badge-info">',"</span>"]);return Ay=function(){return e},e}function Cy(){const e=Ty(['<span class="badge badge-groupchat">',"</span>"]);return Cy=function(){return e},e}function jy(){const e=Ty(['\n        <li class="occupant" id="','" title="','">\n            <div class="row no-gutters">\n                <div class="col-auto">\n                    <div class="occupant-status occupant-',' circle" title="','"></div>\n                </div>\n                <div class="col occupant-nick-badge">\n                    <span class="occupant-nick">','</span>\n                    <span class="occupant-badges">\n                        ',"\n                        ","\n                        ","\n                        ","\n                        ","\n                    </span>\n                </div>\n            </div>\n        </li>\n    "]);return jy=function(){return e},e}function Ty(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Oy=e=>{const t=dd("Owner"),n=dd("Admin"),r=dd("Member"),i=dd("Moderator"),s=dd("Visitor");return Ga(jy(),e.id,(e=>{const t=dd("This user is a moderator."),n=dd("This user can send messages in this groupchat."),r=dd("This user can NOT send messages in this groupchat."),i="".concat(e.jid," ")||!1;return"moderator"===e.role?"".concat(i).concat(t," ").concat(e.hint_occupant):"participant"===e.role?"".concat(i).concat(n," ").concat(e.hint_occupant):"visitor"===e.role?"".concat(i).concat(r," ").concat(e.hint_occupant):["visitor","participant","moderator"].includes(e.role)?void 0:"".concat(i).concat(e.hint_occupant)})(e),e.show,e.hint_show,e.nick||e.jid,"owner"===e.affiliation?Ga(Cy(),t):"","admin"===e.affiliation?Ga(Ay(),n):"","member"===e.affiliation?Ga(Ey(),r):"","moderator"===e.role?Ga(xy(),i):"","visitor"===e.role?Ga(Sy(),s):"")};function ky(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="occupants-header">\n            <i class="hide-occupants fa fa-times"></i>\n            <div class="occupants-header--title">\n                <span class="occupants-heading">','</span>\n            </div>\n        </div>\n        <div class="dragresize dragresize-occupants-left"></div>\n        <ul class="occupant-list">\n            ',"\n        </ul>\n    "]);return ky=function(){return e},e}const Ny={offline:"Offline",unavailable:"Unavailable",xa:"Extended Away",away:"Away",dnd:"Do not disturb",chat:"Chattty",online:"Online"};function Iy(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="d-flex controlbox-padded">\n        <span class="w-100 controlbox-heading controlbox-heading--groupchats">','</span>\n        <a class="controlbox-heading__btn show-list-muc-modal fa fa-list-ul" title="','" data-toggle="modal" data-target="#list-chatrooms-modal"></a>\n        <a class="controlbox-heading__btn show-add-muc-modal fa fa-plus" title="','" data-toggle="modal" data-target="#add-chatrooms-modal"></a>\n    </div>\n    <div class="list-container list-container--openrooms hidden"></div>\n    <div class="list-container list-container--bookmarks hidden"></div>']);return Iy=function(){return e},e}
-/**
- * @module converse-muc-views
- * @copyright 2020, the Converse.js contributors
- * @description XEP-0045 Multi-User Chat Views
- * @license Mozilla Public License (MPLv2)
- */
-const{Strophe:My,sizzle:Ry,$pres:Dy}=Yc.env,Py=Yc.env.utils,Ly=["owner"],zy=["admin","ban","deop","destroy","member","op","revoke"],Fy=["kick","mute","voice","modtools"],By=["nick"],qy={deop:"participant",kick:"none",mute:"visitor",op:"moderator",voice:"participant"},Hy={admin:"admin",ban:"outcast",member:"member",owner:"owner",revoke:"none"},Uy=gv.extend({length:300,tagName:"div",className:"chatbox chatroom hidden",is_chatroom:!0,events:{"click .chatbox-navback":"showControlBox","click .hide-occupants":"hideOccupants","click .new-msgs-indicator":"viewUnreadMessages","click .occupant-nick":function(e){this.insertIntoTextArea(e.target.textContent)},"click .send-button":"onFormSubmitted","dragover .chat-textarea":"onDragOver","drop .chat-textarea":"onDrop","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","mousedown .dragresize-occupants-left":"onStartResizeOccupants","paste .chat-textarea":"onPaste","submit .muc-nickname-form":"submitNickname"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change",Tc(()=>this.renderHeading(),250)),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:hidden_occupants",this.renderToolbar),this.listenTo(this.model,"configurationNeeded",this.getAndRenderConfigurationForm),this.listenTo(this.model,"destroy",this.hide),this.listenTo(this.model,"show",this.show),this.listenTo(this.model.features,"change:moderated",this.renderBottomPanel),this.listenTo(this.model.features,"change:open",this.renderHeading),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.session,"change:connection_status",this.onConnectionStatusChanged),this.onMouseMove=this.onMouseMove.bind(this),this.onMouseUp=this.onMouseUp.bind(this),await this.render(),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"change",this.renderChatHistory),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.model.occupants.forEach(e=>this.onOccupantAdded(e)),this.listenTo(this.model.occupants,"add",this.onOccupantAdded),this.listenTo(this.model.occupants,"change",this.renderChatHistory),this.listenTo(this.model.occupants,"change:affiliation",this.onOccupantAffiliationChanged),this.listenTo(this.model.occupants,"change:role",this.onOccupantRoleChanged),this.listenTo(this.model.occupants,"change:show",this.showJoinOrLeaveNotification),this.listenTo(this.model.occupants,"remove",this.onOccupantRemoved),this.createSidebarView(),await this.updateAfterMessagesFetched();const e=await Lc.api.user.settings.getModel();this.listenTo(e,"change:mucs_with_hidden_subject",this.renderHeading),this.onConnectionStatusChanged(),this.model.maybeShow(),qc.trigger("chatRoomViewInitialized",this)},async render(){var e;this.el.setAttribute("id",this.model.get("box_id")),Wa((e={markScrolled:e=>this.markScrolled(e),muc_show_logs_before_join:qc.settings.get("muc_show_logs_before_join"),show_send_button:Lc.show_send_button},Ga(Xb(),e.show_send_button?"chat-content-sendbutton":"",e.markScrolled)),this.el),this.notifications=this.el.querySelector(".chat-content__notifications"),this.content=this.el.querySelector(".chat-content"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderBottomPanel(),qc.settings.get("muc_show_logs_before_join")||this.model.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED||this.showSpinner(),await this.renderHeading(),!this.model.get("hidden")&&this.show()},getNotifications(){const e=this.model.notifications.toJSON(),t=qc.settings.get("muc_show_info_messages").filter(e=>Yc.MUC_ROLE_CHANGES_LIST.includes(e)),n=qc.settings.get("muc_show_info_messages").filter(e=>Yc.MUC_TRAFFIC_STATES_LIST.includes(e));return[...Yc.CHAT_STATES,...n,...t].reduce((t,n)=>{const r=e[n];if(!(null==r?void 0:r.length))return t;const i=r.map(e=>{var t;return(null===(t=this.model.getOccupant(e))||void 0===t?void 0:t.getDisplayName())||e});if(1===i.length){if("composing"===n)return"".concat(t).concat(dd("%1$s is typing",i[0]),"\n");if("paused"===n)return"".concat(t).concat(dd("%1$s has stopped typing",i[0]),"\n");if(n===Lc.GONE)return"".concat(t).concat(dd("%1$s has gone away",i[0]),"\n");if("entered"===n)return"".concat(t).concat(dd("%1$s has entered the groupchat",i[0]),"\n");if("exited"===n)return"".concat(t).concat(dd("%1$s has left the groupchat",i[0]),"\n");if("op"===n)return"".concat(t).concat(dd("%1$s is now a moderator",i[0]),"\n");if("deop"===n)return"".concat(t).concat(dd("%1$s is no longer a moderator",i[0]),"\n");if("voice"===n)return"".concat(t).concat(dd("%1$s has been given a voice",i[0]),"\n");if("mute"===n)return"".concat(t).concat(dd("%1$s has been muted",i[0]),"\n")}else if(i.length>1){let e;if(i.length>3)e="".concat(Array.from(i).slice(0,2).join(", ")," and others");else{const t=i.pop();e=dd("%1$s and %2$s",i.join(", "),t)}if("composing"===n)return"".concat(t).concat(dd("%1$s are typing",e),"\n");if("paused"===n)return"".concat(t).concat(dd("%1$s have stopped typing",e),"\n");if(n===Lc.GONE)return"".concat(t).concat(dd("%1$s have gone away",e),"\n");if("entered"===n)return"".concat(t).concat(dd("%1$s have entered the groupchat",e),"\n");if("exited"===n)return"".concat(t).concat(dd("%1$s have left the groupchat",e),"\n");if("op"===n)return"".concat(t).concat(dd("%1$s are now moderators",i[0]),"\n");if("deop"===n)return"".concat(t).concat(dd("%1$s are no longer moderators",i[0]),"\n");if("voice"===n)return"".concat(t).concat(dd("%1$s have been given voices",i[0]),"\n");if("mute"===n)return"".concat(t).concat(dd("%1$s have been muted",i[0]),"\n")}return t},"")},getHelpMessages(){const e=qc.settings.get("muc_disable_slash_commands"),t=Array.isArray(e)?e:[];return["<strong>/admin</strong>: ".concat(dd("Change user's affiliation to admin")),"<strong>/ban</strong>: ".concat(dd("Ban user by changing their affiliation to outcast")),"<strong>/clear</strong>: ".concat(dd("Clear the chat area")),"<strong>/close</strong>: ".concat(dd("Close this groupchat")),"<strong>/deop</strong>: ".concat(dd("Change user role to participant")),"<strong>/destroy</strong>: ".concat(dd("Remove this groupchat")),"<strong>/help</strong>: ".concat(dd("Show this menu")),"<strong>/kick</strong>: ".concat(dd("Kick user from groupchat")),"<strong>/me</strong>: ".concat(dd("Write in 3rd person")),"<strong>/member</strong>: ".concat(dd("Grant membership to a user")),"<strong>/modtools</strong>: ".concat(dd("Opens up the moderator tools GUI")),"<strong>/mute</strong>: ".concat(dd("Remove user's ability to post messages")),"<strong>/nick</strong>: ".concat(dd("Change your nickname")),"<strong>/op</strong>: ".concat(dd("Grant moderator role to user")),"<strong>/owner</strong>: ".concat(dd("Grant ownership of this groupchat")),"<strong>/register</strong>: ".concat(dd("Register your nickname")),"<strong>/revoke</strong>: ".concat(dd("Revoke the user's current affiliation")),"<strong>/subject</strong>: ".concat(dd("Set groupchat subject")),"<strong>/topic</strong>: ".concat(dd("Set groupchat subject (alias for /subject)")),"<strong>/voice</strong>: ".concat(dd("Allow muted user to post messages"))].filter(e=>t.every(t=>!e.startsWith(t+"<",9))).filter(e=>this.getAllowedCommands().some(t=>e.startsWith(t+"<",9)))},async renderHeading(){const e=await this.generateHeadingTemplate();Wa(e,this.el.querySelector(".chat-head-chatroom"))},renderBottomPanel(){const e=this.el.querySelector(".bottom-panel"),t=this.model.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED,n=t&&!(this.model.features.get("moderated")&&"visitor"===this.model.getOwnRole());Wa(ey({can_edit:n,entered:t}),e),t&&n&&(this.renderMessageForm(),this.initMentionAutoComplete())},createSidebarView(){this.model.occupants.chatroomview=this,this.sidebar_view=new Lc.MUCSidebar({model:this.model.occupants});const e=this.el.querySelector(".chatroom-body"),t=this.model.get("occupants_width");this.sidebar_view&&void 0!==t&&(this.sidebar_view.el.style.flex="0 0 "+t+"px"),e.insertAdjacentElement("beforeend",this.sidebar_view.el)},onStartResizeOccupants(e){this.resizing=!0,this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseup",this.onMouseUp);const t=window.getComputedStyle(this.sidebar_view.el);this.width=parseInt(t.width.replace(/px$/,""),10),this.prev_pageX=e.pageX},onMouseMove(e){if(this.resizing){e.preventDefault();const t=this.prev_pageX-e.pageX;this.resizeSidebarView(t,e.pageX),this.prev_pageX=e.pageX}},onMouseUp(e){if(this.resizing){e.preventDefault(),this.resizing=!1,this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseup",this.onMouseUp);const t=this.sidebar_view.el.getBoundingClientRect(),n={occupants_width:this.calculateSidebarWidth(t,0)};Lc.connection.connected?this.model.save(n):this.model.set(n)}},resizeSidebarView(e,t){const n=this.sidebar_view.el.getBoundingClientRect();if(this.is_minimum)this.is_minimum=n.left<t;else if(this.is_maximum)this.is_maximum=n.left>t;else{const t=this.calculateSidebarWidth(n,e);this.sidebar_view.el.style.flex="0 0 "+t+"px"}},calculateSidebarWidth(e,t){let n=e.width+t;const r=this.el.clientWidth;return n<.2*r?(n=.2*r,this.is_minimum=!0):n>.75*r?(n=.75*r,this.is_maximum=!0):r-n<250?(n=r-250,this.is_maximum=!0):(this.is_maximum=!1,this.is_minimum=!1),n},getAutoCompleteList(){return this.model.getAllKnownNicknames().map(e=>({label:e,value:"@".concat(e)}))},getAutoCompleteListItem(e,t){t=t.trim();const n=document.createElement("li");if(n.setAttribute("aria-selected","false"),qc.settings.get("muc_mention_autocomplete_show_avatar")){const t=document.createElement("img");let r="data:"+Lc.DEFAULT_IMAGE_TYPE+";base64,"+Lc.DEFAULT_IMAGE;if(Lc.vcards){const t=Lc.vcards.findWhere({nickname:e});t&&(r="data:"+t.get("image_type")+";base64,"+t.get("image"))}t.setAttribute("src",r),t.setAttribute("width","22"),t.setAttribute("class","avatar avatar-autocomplete"),n.appendChild(t)}const r=new RegExp("("+t+")","ig");return(t?e.split(r):[e]).forEach(e=>{if(t&&e.match(r)){const t=document.createElement("mark");t.textContent=e,n.appendChild(t)}else n.appendChild(document.createTextNode(e))}),n},initMentionAutoComplete(){this.mention_auto_complete=new Lc.AutoComplete(this.el,{auto_first:!0,auto_evaluate:!1,min_chars:qc.settings.get("muc_mention_autocomplete_min_chars"),match_current_word:!0,list:()=>this.getAutoCompleteList(),filter:"contains"==qc.settings.get("muc_mention_autocomplete_filter")?Lc.FILTER_CONTAINS:Lc.FILTER_STARTSWITH,ac_triggers:["Tab","@"],include_triggers:[],item:this.getAutoCompleteListItem}),this.mention_auto_complete.on("suggestion-box-selectcomplete",()=>this.auto_completing=!1)},submitNickname(e){e.preventDefault();const t=e.target.nick.value.trim();t&&this.model.join(t)},onKeyDown(e){if(!this.mention_auto_complete.onKeyDown(e))return Lc.ChatBoxView.prototype.onKeyDown.call(this,e)},onKeyUp(e){return this.mention_auto_complete.evaluate(e),Lc.ChatBoxView.prototype.onKeyUp.call(this,e)},async onMessageRetractButtonClicked(e){const t=dd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.");if(e.mayBeRetracted()){const n=[dd("Are you sure you want to retract this message?")];qc.settings.get("show_retraction_warning")&&(n[1]=t),await qc.confirm(dd("Confirm"),n)&&this.model.retractOwnMessage(e)}else if(await e.mayBeModerated())if("me"===e.get("sender")){let n=[dd("Are you sure you want to retract this message?")];qc.settings.get("show_retraction_warning")&&(n=[n[0],t,n[1]]),await qc.confirm(dd("Confirm"),n)&&this.retractOtherMessage(e)}else{let n=[dd("You are about to retract this message."),dd("You may optionally include a message, explaining the reason for the retraction.")];qc.settings.get("show_retraction_warning")&&(n=[n[0],t,n[1]]);const r=await qc.prompt(dd("Message Retraction"),n,dd("Optional reason"));!1!==r&&this.retractOtherMessage(e,r)}else{const e=dd("Sorry, you're not allowed to retract this message");qc.alert("error",dd("Error"),e)}},async retractOtherMessage(e,t){const n=await this.model.retractOtherMessage(e,t);if(null===n){const e=dd("A timeout occurred while trying to retract the message");qc.alert("error",dd("Error"),e),Pn(e,My.LogLevel.WARN)}else if(Py.isErrorStanza(n)){const e=dd("Sorry, you're not allowed to retract this message.");qc.alert("error",dd("Error"),e),Pn(e,My.LogLevel.WARN),Pn(n,My.LogLevel.WARN)}},showModeratorToolsModal(e){if(this.verifyRoles(["moderator"])){if(void 0===this.model.modtools_modal){const t=new Rs({affiliation:e});this.modtools_modal=new kb({model:t,_converse:Lc,chatroomview:this})}else this.modtools_modal.set("affiliation",e);this.modtools_modal.show()}},showRoomDetailsModal(e){e.preventDefault(),void 0===this.model.room_details_modal&&(this.model.room_details_modal=new Jb({model:this.model})),this.model.room_details_modal.show(e)},showChatStateNotification(e){if("me"!==e.get("sender"))return Lc.ChatBoxView.prototype.showChatStateNotification.apply(this,arguments)},onOccupantAffiliationChanged(e){e.get("jid")===Lc.bare_jid&&this.renderHeading()},onOccupantRoleChanged(e){e.get("jid")===Lc.bare_jid&&this.renderBottomPanel()},getHeadingButtons(e){const t=[];t.push({i18n_text:dd("Details"),i18n_title:dd("Show more information about this groupchat"),handler:e=>this.showRoomDetailsModal(e),a_class:"show-room-details-modal",icon_class:"fa-info-circle",name:"details"}),"owner"===this.model.getOwnAffiliation()&&t.push({i18n_text:dd("Configure"),i18n_title:dd("Configure this groupchat"),handler:e=>this.getAndRenderConfigurationForm(e),a_class:"configure-chatroom-button",icon_class:"fa-wrench",name:"configure"}),this.model.invitesAllowed()&&t.push({i18n_text:dd("Invite"),i18n_title:dd("Invite someone to join this groupchat"),handler:e=>this.showInviteModal(e),a_class:"open-invite-modal",icon_class:"fa-user-plus",name:"invite"});const n=this.model.get("subject");if(n&&n.text&&t.push({i18n_text:dd(e?"Show topic":"Hide topic"),i18n_title:dd(e?"Show the topic message in the heading":"Hide the topic in the heading"),handler:e=>this.toggleTopic(e),a_class:"hide-topic",icon_class:"fa-minus-square",name:"toggle-topic"}),this.model.session.get("connection_status")===Yc.ROOMSTATUS.ENTERED){const e=this.getAllowedCommands();e.includes("modtools")&&t.push({i18n_text:dd("Moderate"),i18n_title:dd("Moderate this groupchat"),handler:()=>this.showModeratorToolsModal(),a_class:"moderate-chatroom-button",icon_class:"fa-user-cog",name:"moderate"}),e.includes("destroy")&&t.push({i18n_text:dd("Destroy"),i18n_title:dd("Remove this groupchat"),handler:e=>this.destroy(e),a_class:"destroy-chatroom-button",icon_class:"fa-trash",name:"destroy"})}return qc.settings.get("singleton")||t.push({i18n_text:dd("Leave"),i18n_title:dd("Leave and close this groupchat"),handler:async e=>{e.stopPropagation();const t=[dd("Are you sure you want to leave this groupchat?")];await qc.confirm(dd("Confirm"),t)&&this.close(e)},a_class:"close-chatbox-button",standalone:"overlayed"===qc.settings.get("view_mode"),icon_class:"fa-sign-out-alt",name:"signout"}),Lc.api.hook("getHeadingButtons",this,t)},async generateHeadingTemplate(){const e=await this.model.isSubjectHidden(),t=await this.getHeadingButtons(e),n=t.filter(e=>e.standalone),r=t.filter(e=>!e.standalone);return my(Object.assign(this.model.toJSON(),{_converse:Lc,subject_hidden:e,dropdown_btns:r.map(e=>this.getHeadingDropdownItem(e)),standalone_btns:n.map(e=>this.getHeadingStandaloneButton(e)),title:this.model.getDisplayName()}))},toggleTopic(){this.model.toggleSubjectHiddenState()},showInviteModal(e){e.preventDefault(),void 0===this.muc_invite_modal&&(this.muc_invite_modal=new q_({model:new Rs}),this.muc_invite_modal.chatroomview=this),this.muc_invite_modal.show(e)},afterShown(){Py.isPersistableModel(this.model)&&this.model.clearUnreadMsgCounter(),this.scrollDown()},onConnectionStatusChanged(){const e=this.model.session.get("connection_status");e===Yc.ROOMSTATUS.NICKNAME_REQUIRED?this.renderNicknameForm():e===Yc.ROOMSTATUS.PASSWORD_REQUIRED?this.renderPasswordForm():e===Yc.ROOMSTATUS.CONNECTING?this.showSpinner():e===Yc.ROOMSTATUS.ENTERED?(this.renderBottomPanel(),this.hideSpinner(),this.maybeFocus()):e===Yc.ROOMSTATUS.DISCONNECTED?this.showDisconnectMessage():e===Yc.ROOMSTATUS.DESTROYED&&this.showDestroyedMessage()},getToolbarOptions(){return Object.assign(Lc.ChatBoxView.prototype.getToolbarOptions.apply(this,arguments),{is_groupchat:!0,label_hide_occupants:dd("Hide the list of participants"),show_occupants_toggle:Lc.visible_toolbar_buttons.toggle_occupants})},async close(){return this.hide(),Lc.router.history.getFragment()==="converse/room?jid="+this.model.get("jid")&&Lc.router.navigate(""),await this.model.leave(),Lc.ChatBoxView.prototype.close.apply(this,arguments)},hideOccupants(e){e&&(e.preventDefault(),e.stopPropagation()),this.model.save({hidden_occupants:!0}),this.scrollDown()},verifyRoles(e,t,n=!0){if(!Array.isArray(e))throw new TypeError("roles must be an Array");if(!e.length)return!0;if(t=t||this.model.occupants.findWhere({jid:Lc.bare_jid})){const n=t.get("role");if(e.includes(n))return!0}if(n){const e=dd("Forbidden: you do not have the necessary role in order to do that.");this.model.createMessage({message:e,type:"error"})}return!1},verifyAffiliations(e,t,n=!0){if(!Array.isArray(e))throw new TypeError("affiliations must be an Array");if(!e.length)return!0;if(t=t||this.model.occupants.findWhere({jid:Lc.bare_jid})){const n=t.get("affiliation");if(e.includes(n))return!0}if(n){const e=dd("Forbidden: you do not have the necessary affiliation in order to do that.");this.model.createMessage({message:e,type:"error"})}return!1},validateRoleOrAffiliationChangeArgs(e,t){if(!t){const t=dd('Error: the "%1$s" command takes two arguments, the user\'s nickname and optionally a reason.',e);return this.model.createMessage({message:t,type:"error"}),!1}return!0},getNickOrJIDFromCommandArgs(e){if(Py.isValidJID(e.trim()))return e.trim();e.startsWith("@")||(e="@"+e);const[t,n]=this.model.parseTextForReferences(e);if(!n.length){const e=dd("Error: couldn't find a groupchat participant based on your arguments");return void this.model.createMessage({message:e,type:"error"})}if(n.length>1){const e=dd("Error: found multiple groupchat participant based on your arguments");return void this.model.createMessage({message:e,type:"error"})}const r=n.pop().value,i=e.split(r,2)[1];if(!i||i.startsWith(" "))return r;{const e=dd("Error: couldn't find a groupchat participant based on your arguments");this.model.createMessage({message:e,type:"error"})}},setAffiliation(e,t,n){const r=Hy[e];if(!r)throw Error("ChatRoomView#setAffiliation called with invalid command: ".concat(e));if(!this.verifyAffiliations(n))return!1;if(!this.validateRoleOrAffiliationChangeArgs(e,t))return!1;const i=this.getNickOrJIDFromCommandArgs(t);if(!i)return!1;let s;const o=t.split(i,2)[1].trim(),a=this.model.getOccupant(i);if(a)s=a.get("jid");else{if(!Py.isValidJID(i)){const e=dd("Couldn't find a participant with that nickname. They might have left the groupchat.");return void this.model.createMessage({message:e,type:"error"})}s=i}const c={jid:s,reason:o};a&&qc.settings.get("auto_register_muc_nickname")&&(c.nick=a.get("nick")),this.model.setAffiliation(r,[c]).then(()=>this.model.occupants.fetchMembers()).catch(e=>this.onCommandError(e))},getReason:e=>e.includes(",")?e.slice(e.indexOf(",")+1).trim():null,setRole(e,t,n=[],r=[]){const i=qy[e];if(!i)throw Error("ChatRoomView#setRole called with invalid command: ".concat(e));if(!this.verifyAffiliations(n)||!this.verifyRoles(r))return!1;if(!this.validateRoleOrAffiliationChangeArgs(e,t))return!1;const s=this.getNickOrJIDFromCommandArgs(t);if(!s)return!1;const o=t.split(s,2)[1].trim(),a=this.model.getOccupant(s);return this.model.setRole(a,i,o,void 0,this.onCommandError.bind(this)),!0},onCommandError(e){Pn.fatal(e);const t=dd("Sorry, an error happened while running the command.")+" "+dd("Check your browser's developer console for details.");this.model.createMessage({message:t,type:"error"})},getAllowedCommands(){let e=["clear","help","me","nick","register"];(this.model.config.get("changesubject")||["owner","admin"].includes(this.model.getOwnAffiliation()))&&(e=[...e,"subject","topic"]);const t=this.model.occupants.findWhere({jid:Lc.bare_jid});return this.verifyAffiliations(["owner"],t,!1)?e=e.concat(Ly).concat(zy):this.verifyAffiliations(["admin"],t,!1)&&(e=e.concat(zy)),this.verifyRoles(["moderator"],t,!1)?e=e.concat(Fy).concat(By):this.verifyRoles(["visitor","participant","moderator"],t,!1)||(e=e.concat(By)),e.sort(),Array.isArray(qc.settings.get("muc_disable_slash_commands"))?e.filter(e=>!qc.settings.get("muc_disable_slash_commands").includes(e)):e},async destroy(){const e=[dd("Are you sure you want to destroy this groupchat?")];let t=[{name:"challenge",label:dd("Please enter the XMPP address of this groupchat to confirm"),challenge:this.model.get("jid"),placeholder:dd("name@example.org"),required:!0},{name:"reason",label:dd("Optional reason for destroying this groupchat"),placeholder:dd("Reason")},{name:"newjid",label:dd("Optional XMPP address for a new groupchat that replaces this one"),placeholder:dd("replacement@example.org")}];try{var n,r;t=await qc.confirm(dd("Confirm"),e,t);const i=null===(n=t.filter(e=>"reason"===e.name).pop())||void 0===n?void 0:n.value,s=null===(r=t.filter(e=>"newjid"===e.name).pop())||void 0===r?void 0:r.value;return this.model.sendDestroyIQ(i,s).then(()=>this.close())}catch(e){Pn.error(e)}},parseMessageForCommands(e){if(qc.settings.get("muc_disable_slash_commands")&&!Array.isArray(qc.settings.get("muc_disable_slash_commands")))return Lc.ChatBoxView.prototype.parseMessageForCommands.apply(this,arguments);const t=((e=e.replace(/^\s*/,"")).match(/^\/([a-zA-Z]*) ?/)||[""]).pop().toLowerCase();if(!t)return!1;const n=e.slice(("/"+t).length+1).trim();if(!this.getAllowedCommands().includes(t))return!1;switch(t){case"admin":this.setAffiliation(t,n,["owner"]);break;case"ban":this.setAffiliation(t,n,["admin","owner"]);break;case"modtools":this.showModeratorToolsModal(n);break;case"deop":this.setRole(t,n,["admin","owner"]);break;case"destroy":if(!this.verifyAffiliations(["owner"]))break;this.destroy().catch(e=>this.onCommandError(e));break;case"help":this.model.set({show_help_messages:!0});break;case"kick":case"mute":this.setRole(t,n,[],["moderator"]);break;case"member":this.setAffiliation(t,n,["admin","owner"]);break;case"nick":if(!this.verifyRoles(["visitor","participant","moderator"]))break;if(0===n.length){const e=dd('Your nickname is "%1$s"',this.model.get("nick"));this.model.createMessage({message:e,type:"error"})}else{const e=My.getBareJidFromJid(this.model.get("jid"));qc.send(Dy({from:Lc.connection.jid,to:"".concat(e,"/").concat(n),id:Py.getUniqueId()}).tree())}break;case"owner":this.setAffiliation(t,n,["owner"]);break;case"op":this.setRole(t,n,["admin","owner"]);break;case"register":n.length>1?this.model.createMessage({message:dd("Error: invalid number of arguments"),type:"error"}):this.model.registerNickname().then(e=>{e&&this.model.createMessage({message:e,type:"error"})});break;case"revoke":this.setAffiliation(t,n,["admin","owner"]);break;case"topic":case"subject":this.model.setSubject(n);break;case"voice":this.setRole(t,n,[],["moderator"]);break;default:return Lc.ChatBoxView.prototype.parseMessageForCommands.apply(this,arguments)}return!0},renderConfigurationForm(e){if(this.hideChatRoomContents(),this.model.save("config_stanza",e.outerHTML),!this.config_form){this.config_form=new Lc.MUCConfigForm({model:this.model,chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.config_form.el)}Py.showElement(this.config_form.el)},renderNicknameForm(){const e=(e=>{const t=dd("Nickname"),n=dd("Enter groupchat"),r=qc.settings.get("muc_show_logs_before_join")?dd("Choose a nickname to enter"):dd("Please choose your nickname");return Ga(vy(),r,e.nick||"",t,n)})(this.model.toJSON());if(qc.settings.get("muc_show_logs_before_join")){const t=this.el.querySelector(".muc-bottom-panel");Wa(e,t),Py.addClass("muc-bottom-panel--nickname",t)}else{const t=this.el.querySelector(".muc-nickname-form"),n=Py.getElementFromTemplateResult(e);if(t)Ry(".spinner",this.el).forEach(Py.removeElement),t.outerHTML=n.outerHTML;else{this.hideChatRoomContents(),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",n)}}Py.safeSave(this.model.session,{connection_status:Yc.ROOMSTATUS.NICKNAME_REQUIRED})},closeForm(){Ry(".chatroom-form-container",this.el).forEach(e=>Py.addClass("hidden",e)),this.renderAfterTransition()},getAndRenderConfigurationForm(){this.config_form&&Py.isVisible(this.config_form.el)?this.closeForm():(this.showSpinner(),this.model.fetchRoomConfiguration().then(e=>this.renderConfigurationForm(e)).catch(e=>Pn.error(e)))},hideChatRoomContents(){const e=this.el.querySelector(".chatroom-body");null!==e&&[].forEach.call(e.children,e=>e.classList.add("hidden"))},renderPasswordForm(){this.hideChatRoomContents();const e=this.model.get("password_validation_message");if(this.model.save("password_validation_message",void 0),this.password_form)this.password_form.model.set("validation_message",e);else{this.password_form=new Lc.MUCPasswordForm({model:new Rs({validation_message:e}),chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.password_form.el)}Py.showElement(this.password_form.el),this.model.session.save("connection_status",Yc.ROOMSTATUS.PASSWORD_REQUIRED)},showDestroyedMessage(){Py.hideElement(this.el.querySelector(".chat-area")),Py.hideElement(this.el.querySelector(".occupants")),Ry(".spinner",this.el).forEach(Py.removeElement);const e=this.model.get("destroyed_reason"),t=this.model.get("moved_jid");this.model.save({destroyed_reason:void 0,moved_jid:void 0});const n=this.el.querySelector(".disconnect-container");Wa(sy(t,e),n);const r=n.querySelector("a.switch-chat");r&&r.addEventListener("click",async e=>{e.preventDefault(),(await qc.rooms.get(t,null,!0)).maybeShow(!0),this.model.destroy()}),Py.showElement(n)},showDisconnectMessage(){const e=this.model.get("disconnection_message");if(!e)return;Py.hideElement(this.el.querySelector(".chat-area")),Py.hideElement(this.el.querySelector(".occupants")),Ry(".spinner",this.el).forEach(Py.removeElement);const t=[e],n=this.model.get("disconnection_actor");n&&t.push(dd("This action was done by %1$s.",n));const r=this.model.get("disconnection_reason");r&&t.push(dd('The reason given is: "%1$s".',r)),this.model.save({disconnection_message:void 0,disconnection_reason:void 0,disconnection_actor:void 0});const i=this.el.querySelector(".disconnect-container");Wa((e=>Ga(ay(),e[0],e.slice(1).map(e=>Ga(oy(),e))))(t),i),Py.showElement(i)},onOccupantAdded(e){e.get("jid")===Lc.bare_jid&&(this.renderHeading(),this.renderBottomPanel())},getPreviousJoinOrLeaveNotification(e,t){const n=(new Date).toISOString().split("T")[0];for(;null!==e;){var r;if(!e.classList.contains("chat-info"))return;const i=e.getAttribute("data-isodate");if(i&&i.split("T")[0]!==n)return;const s=(null===(r=e)||void 0===r?void 0:r.dataset)||{};if(s.join===t||s.leave===t||s.leavejoin===t||s.joinleave===t)return e;e=e.previousElementSibling}},renderAfterTransition(){const e=this.model.session.get("connection_status");e==Yc.ROOMSTATUS.NICKNAME_REQUIRED?this.renderNicknameForm():e==Yc.ROOMSTATUS.PASSWORD_REQUIRED?this.renderPasswordForm():e==Yc.ROOMSTATUS.ENTERED&&(this.hideChatRoomContents(),Py.showElement(this.el.querySelector(".chat-area")),Py.showElement(this.el.querySelector(".occupants")),this.scrollDown())},showSpinner(){Ry(".spinner",this.el).forEach(Py.removeElement),this.hideChatRoomContents(),this.el.querySelector(".chatroom-body").insertAdjacentElement("afterbegin",Py.getElementFromTemplateResult(Tf()))},hideSpinner(){const e=this.el.querySelector(".spinner");return null!==e&&(Py.removeElement(e),this.renderAfterTransition()),this}}),$y=jd.extend({tagName:"div",className:"controlbox-section",id:"chatrooms",events:{"click a.controlbox-heading__btn.show-add-muc-modal":"showAddRoomModal","click a.controlbox-heading__btn.show-list-muc-modal":"showMUCListModal"},toHTML(){return e={heading_chatrooms:dd("Groupchats"),title_new_room:dd("Add a new groupchat"),title_list_rooms:dd("Query for groupchats")},Ga(Iy(),e.heading_chatrooms,e.title_list_rooms,e.title_new_room);var e},showAddRoomModal(e){void 0===this.add_room_modal&&(this.add_room_modal=new P_({model:this.model})),this.add_room_modal.show(e)},showMUCListModal(e){void 0===this.muc_list_modal&&(this.muc_list_modal=new Z_({model:this.model})),this.muc_list_modal.show(e)}});function Wy(){const e=Gy(['\n    <div class="list-container list-container--headline ','">\n        <div class="items-list rooms-list headline-list">\n            ',"\n        </div>\n    </div>\n"]);return Wy=function(){return e},e}function Vy(){const e=Gy(['\n    <div class="list-item controlbox-padded d-flex flex-row"\n        data-headline-jid="','">\n    <a class="list-item-link open-headline available-room w-100"\n        data-headline-jid="','"\n        title="','" href="#">',"</a>\n    </div>\n"]);return Vy=function(){return e},e}function Gy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Yc.plugins.add("converse-muc-views",{dependencies:["converse-autocomplete","converse-modal","converse-controlbox","converse-chatview"],overrides:{ControlBoxView:{renderControlBoxPane(){this.__super__.renderControlBoxPane.apply(this,arguments),qc.settings.get("allow_muc")&&this.renderRoomsPanel()}}},initialize(){const{_converse:e}=this;qc.promises.add(["roomsPanelRendered"]),qc.settings.extend({auto_list_rooms:!1,cache_muc_messages:!0,locked_muc_nickname:!1,modtools_disable_query:[],modtools_disable_assign:!1,muc_disable_slash_commands:!1,muc_mention_autocomplete_filter:"contains",muc_mention_autocomplete_min_chars:0,muc_mention_autocomplete_show_avatar:!0,muc_roomid_policy:null,muc_roomid_policy_hint:null,roomconfig_whitelist:[],show_retraction_warning:!0,visible_toolbar_buttons:{toggle_occupants:!0}}),e.ChatRoomView=Uy,e.RoomsPanel=$y;const t={renderRoomsPanel(){if(this.roomspanel&&Py.isInDOM(this.roomspanel.el))return this.roomspanel;const t="converse.roomspanel".concat(e.bare_jid);return this.roomspanel=new e.RoomsPanel({model:new(e.RoomsPanelModel.extend({id:t,browserStorage:e.createStore(t)}))}),this.roomspanel.model.fetch(),this.el.querySelector(".controlbox-pane").insertAdjacentElement("beforeEnd",this.roomspanel.render().el),qc.trigger("roomsPanelRendered"),this.roomspanel},getRoomsPanel(){return this.roomspanel&&Py.isInDOM(this.roomspanel.el)?this.roomspanel:this.renderRoomsPanel()}};function n(e,t){t.getRoomsPanel().model.save("muc_domain",My.getDomainFromJid(e))}function r(t){t.model.get("connected")&&(t.getRoomsPanel().model.get("muc_domain")||(void 0===qc.settings.get("muc_domain")?function(t){function r(e){e&&e.get("var")===My.NS.MUC&&e.entity.getIdentity("conference","text").then(r=>{r&&n(e.get("from"),t)})}qc.waitUntil("discoInitialized").then(()=>{qc.listen.on("serviceDiscovered",r),e.disco_entities.each(e=>r(e.features.findWhere({var:My.NS.MUC})))}).catch(e=>Pn.error(e))}(t):n(qc.settings.get("muc_domain"),t)))}e.ControlBoxView&&Object.assign(e.ControlBoxView.prototype,t),e.MUCConfigForm=jd.extend({className:"chatroom-form-container muc-config-form",initialize(e){this.chatroomview=e.chatroomview,this.listenTo(this.chatroomview.model.features,"change:passwordprotected",this.render),this.listenTo(this.chatroomview.model.features,"change:config_stanza",this.render),this.render()},toHTML(){var e,t;const n=Py.toStanza(this.model.get("config_stanza")),r=qc.settings.get("roomconfig_whitelist");let i=Ry("field",n);r.length&&(i=i.filter(e=>r.includes(e.getAttribute("var"))));const s={new_password:!this.model.features.get("passwordprotected"),fixed_username:this.model.get("jid")};return(e=>{const t=dd("Save"),n=dd("Cancel");return Ga(by(),e.submitConfigForm,e.title,e.title!==e.instructions?Ga(_y(),e.instructions):"",e.fields.map(e=>pp(e)),t,n,e.closeConfigForm)})({closeConfigForm:e=>this.closeConfigForm(e),fields:i.map(e=>Py.xForm2webForm(e,n,s)),instructions:null===(e=n.querySelector("instructions"))||void 0===e?void 0:e.textContent,submitConfigForm:e=>this.submitConfigForm(e),title:null===(t=n.querySelector("title"))||void 0===t?void 0:t.textContent})},async submitConfigForm(e){e.preventDefault();const t=Ry(":input:not([type=button]):not([type=submit])",e.target).map(Py.webForm2xForm).filter(e=>e);try{await this.model.sendConfiguration(t)}catch(e){Pn.error(e);const t=dd("Sorry, an error occurred while trying to submit the config form.")+" "+dd("Check your browser's developer console for details.");qc.alert("error",dd("Error"),t)}await this.model.refreshDiscoInfo(),this.chatroomview.closeForm()},closeConfigForm(e){e.preventDefault(),this.chatroomview.closeForm()}}),e.MUCPasswordForm=jd.extend({className:"chatroom-form-container muc-password-form",initialize(e){this.chatroomview=e.chatroomview,this.listenTo(this.model,"change:validation_message",this.render),this.render()},toHTML(){return(e=>{const t=dd("This groupchat requires a password"),n=dd("Password: "),r=dd("Submit");return Ga(wy(),e.submitPassword,t,e.validation_message,e.jid,e.validation_message?"error":"",n,r)})({jid:this.model.get("jid"),submitPassword:e=>this.submitPassword(e),validation_message:this.model.get("validation_message")})},submitPassword(e){e.preventDefault();const t=this.el.querySelector("input[type=password]").value;this.chatroomview.model.join(this.chatroomview.model.get("nick"),t),this.model.set("validation_message",null)}}),e.MUCSidebar=jd.extend({tagName:"div",className:"occupants col-md-3 col-4",async initialize(){this.chatroomview=this.model.chatroomview,this.listenTo(this.model,"add",this.render),this.listenTo(this.model,"remove",this.render),this.listenTo(this.model,"change",this.render),this.listenTo(this.chatroomview.model.features,"change",this.render),this.listenTo(this.chatroomview.model,"change:hidden_occupants",this.setVisibility),this.render(),await this.model.fetched},toHTML(){return(e=>{const t=e=>dd("Click to mention %1$s in your message.",e.get("nick")),n=dd("Participants");return Ga(ky(),n,e.occupants.map(e=>Oy(Object.assign({jid:"",hint_show:Ny[e.get("show")],hint_occupant:t(e)},e.toJSON()))))})(Object.assign(this.chatroomview.model.toJSON(),{_converse:e,features:this.chatroomview.model.features,occupants:this.model.models}))},afterRender(){this.setVisibility()},setVisibility(){this.chatroomview.model.get("hidden_occupants")||this.chatroomview.model.session.get("connection_status")!==Yc.ROOMSTATUS.ENTERED?Py.hideElement(this.el):Py.showElement(this.el)}}),qc.listen.on("chatBoxViewsInitialized",()=>{e.chatboxviews.delegate("click","a.open-chatroom",(function(e){e.preventDefault(),qc.rooms.open(e.target.href)})),e.chatboxes.on("add",(async function(t){const n=e.chatboxviews;if(!n.get(t.get("id"))&&t.get("type")===e.CHATROOMS_TYPE&&t.isValid())return await t.initialized,n.add(t.get("id"),new e.ChatRoomView({model:t}))}))}),qc.listen.on("clearSession",()=>{const t=e.chatboxviews.get("controlbox");t&&t.roomspanel&&(t.roomspanel.model.destroy(),t.roomspanel.remove(),delete t.roomspanel)}),qc.listen.on("controlBoxInitialized",e=>{qc.settings.get("allow_muc")&&(r(e),e.model.on("change:connected",()=>r(e)))}),Object.assign(e.api,{roomviews:{get(t){if(Array.isArray(t)){return qc.chatviews.get(t).filter(t=>t.model.get("type")===e.CHATROOMS_TYPE)}{const n=qc.chatviews.get(t);return n.model.get("type")===e.CHATROOMS_TYPE?n:null}},close(t){let n;return void 0===t?n=e.chatboxviews:"string"==typeof t?n=[e.chatboxviews.get(t)].filter(e=>e):Array.isArray(t)&&(n=t.map(t=>e.chatboxviews.get(t))),Promise.all(n.map(e=>e.is_chatroom&&e.model&&e.close()))}}})}});var Jy=e=>Ga(Wy(),e.headlineboxes.length?"":"hidden",e.headlineboxes.map(t=>(e=>Ga(Vy(),e.headlinebox.get("jid"),e.headlinebox.get("jid"),e.open_title,e.headlinebox.get("jid")))(Object.assign({headlinebox:t},e))));function Xy(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="d-flex controlbox-padded ','">\n        <span class="w-100 controlbox-heading controlbox-heading--headline">',"</span>\n    </div>\n    ","\n"]);return Xy=function(){return e},e}
+const{dayjs:Hb}=rl.env,Ub=rl.env.utils;function $b(){const e=Qb(['<span class="badge badge-secondary">',"</span>"]);return $b=function(){return e},e}function Wb(){const e=Qb(['<span class="badge badge-info">',"</span>"]);return Wb=function(){return e},e}function Gb(){const e=Qb(['<span class="badge badge-info">',"</span>"]);return Gb=function(){return e},e}function Vb(){const e=Qb(['<span class="badge badge-info">',"</span>"]);return Vb=function(){return e},e}function Jb(){const e=Qb(['<span class="badge badge-groupchat">',"</span>"]);return Jb=function(){return e},e}function Xb(){const e=Qb(['\n        <li class="occupant" id="','" title="','">\n            <div class="row no-gutters">\n                <div class="col-auto">\n                    <div class="occupant-status occupant-',' circle" title="','"></div>\n                </div>\n                <div class="col occupant-nick-badge">\n                    <span class="occupant-nick">','</span>\n                    <span class="occupant-badges">\n                        ',"\n                        ","\n                        ","\n                        ","\n                        ","\n                    </span>\n                </div>\n            </div>\n        </li>\n    "]);return Xb=function(){return e},e}function Qb(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}rl.plugins.add("converse-minimize",{dependencies:["converse-chatview","converse-controlbox","converse-muc-views","converse-headlines-view","converse-dragresize"],enabled:e=>"overlayed"===e.api.settings.get("view_mode"),overrides:{ChatBox:{initialize(){this.__super__.initialize.apply(this,arguments),this.on("show",this.maximize,this),"controlbox"!==this.get("id")&&this.save({minimized:this.get("minimized")||!1,time_minimized:this.get("time_minimized")||Hb()})},maybeShow(e){return!e&&this.get("minimized")?this:this.__super__.maybeShow.apply(this,arguments)},isHidden(){return this.__super__.isHidden.call(this)||this.get("minimized")}},ChatBoxView:{show(){const{_converse:e}=this.__super__;return"overlayed"===e.api.settings.get("view_mode")&&this.model.get("minimized")?(this.model.minimize(),this):this.__super__.show.apply(this,arguments)},isNewMessageHidden(){return this.model.get("minimized")||this.__super__.isNewMessageHidden.apply(this,arguments)},setChatBoxHeight(e){if(!this.model.get("minimized"))return this.__super__.setChatBoxHeight.call(this,e)},setChatBoxWidth(e){if(!this.model.get("minimized"))return this.__super__.setChatBoxWidth.call(this,e)}}},initialize(){Vc.settings.extend({no_trimming:!1});const e={maximize(){Ub.safeSave(this,{minimized:!1,time_opened:(new Date).getTime()})},minimize(){Ub.safeSave(this,{minimized:!0,time_minimized:(new Date).toISOString()})}};Object.assign(Uc.ChatBox.prototype,e);const t={onMaximized(){const{_converse:e}=this.__super__;return this.insertIntoDOM(),this.model.isScrolledUp()||this.model.clearUnreadMsgCounter(),this.model.setChatState(e.ACTIVE),this.show(),Vc.trigger("chatBoxMaximized",this),this},onMinimized(e){const{_converse:t}=this.__super__;return e&&e.preventDefault&&e.preventDefault(),this.model.collection&&this.model.collection.browserStorage?this.model.save({scroll:this.content.scrollTop}):this.model.set({scroll:this.content.scrollTop}),this.model.setChatState(t.INACTIVE),this.hide(),Vc.trigger("chatBoxMinimized",this),this},minimize(e){return e&&e.preventDefault&&e.preventDefault(),this.model.minimize(),this},onMinimizedChanged(e){e.get("minimized")?this.onMinimized():this.onMaximized()}};Object.assign(Uc.ChatBoxView.prototype,t);const n={getChatBoxWidth(e){if("controlbox"===e.model.get("id")){const e=this.get("controlbox");return e&&Ub.isVisible(e.el)?Ub.getOuterWidth(e.el,!0):Ub.getOuterWidth(Uc.controlboxtoggle.el,!0)}return!e.model.get("minimized")&&Ub.isVisible(e.el)?Ub.getOuterWidth(e.el,!0):0},getShownChats(){return this.filter(e=>!e.model.get("minimized")&&!e.model.get("closed")&&Ub.isVisible(e.el))},getMinimizedWidth(){var e;const t=null===(e=Uc.minimized_chats)||void 0===e?void 0:e.el;return this.model.pluck("minimized").includes(!0)?Ub.getOuterWidth(t,!0):0},getBoxesWidth(e){const t=e?e.model.get("id"):null,n=e?Ub.getOuterWidth(e.el,!0):0;return Object.values(this.xget(t)).reduce((e,t)=>e+this.getChatBoxWidth(t),n)},async trimChats(e){var t;if(Vc.settings.get("no_trimming")||!Vc.connection.connected()||"overlayed"!==Vc.settings.get("view_mode"))return;const n=this.getShownChats();if(n.length<=1)return;const r=Ub.getOuterWidth(document.querySelector("body"),!0);if(this.getChatBoxWidth(n[0])!==r&&(await Vc.waitUntil("minimizedChatsInitialized"),null===(t=Uc.minimized_chats)||void 0===t?void 0:t.el))for(;this.getMinimizedWidth()+this.getBoxesWidth(e)>r;){const t=e?e.model.get("id"):null,n=this.getOldestMaximizedChat([t]);if(!n)break;{const e=this.get(n.get("id"));e&&e.hide(),n.minimize()}}},getOldestMaximizedChat(e){e.push("controlbox");let t=0,n=this.model.sort().at(t);for(;e.includes(n.get("id"))||!0===n.get("minimized");)if(t++,n=this.model.at(t),!n)return null;return n}};Object.assign(Uc.ChatBoxViews.prototype,n),Vc.promises.add("minimizedChatsInitialized"),Uc.MinimizedChatsToggle=qo.extend({defaults:{collapsed:!1}}),Uc.MinimizedChats=eh.extend({tagName:"span",async initialize(){await this.initToggle(),this.render(),this.listenTo(this.minchats,"change:collapsed",this.render),this.listenTo(this.model,"add",this.render),this.listenTo(this.model,"change:fullname",this.render),this.listenTo(this.model,"change:jid",this.render),this.listenTo(this.model,"change:minimized",this.render),this.listenTo(this.model,"change:name",this.render),this.listenTo(this.model,"change:num_unread",this.render),this.listenTo(this.model,"remove",this.render)},render(){const e=this.model.where({minimized:!0}),t=e.reduce((e,t)=>e+t.get("num_unread"),0),n=e.reduce((e,t)=>e+(t.get("minimized")?1:0),0),r={chats:e,num_unread:t,num_minimized:n,collapsed:this.minchats.get("collapsed")};var i;r.toggle=e=>this.toggle(e),Ya((i=r,Za(Bb(),i.chats.length?"":"hidden",i.toggle,i.num_minimized,zd("Minimized"),i.num_unread?"":"unread-message-count-hidden",i.num_unread,i.collapsed?"hidden":"",i.chats.map(e=>Za(Fb(),e,e.getDisplayName(),e.get("type"),e.get("num_unread"))))),this.el),this.el.parentElement||Uc.chatboxviews.insertRowColumn(this.el)},async initToggle(){const e="converse.minchatstoggle-".concat(Uc.bare_jid);this.minchats=new Uc.MinimizedChatsToggle({id:e}),this.minchats.browserStorage=Uc.createStore(e),await new Promise(e=>this.minchats.fetch({success:e,error:e}))},toggle(e){null==e||e.preventDefault(),this.minchats.save({collapsed:!this.minchats.get("collapsed")})}}),Vc.listen.on("chatBoxInsertedIntoDOM",e=>Uc.chatboxviews.trimChats(e)),Vc.listen.on("connected",()=>{return null===(e=Uc.minimized_chats)||void 0===e||e.remove(),Uc.minimized_chats=new Uc.MinimizedChats({model:Uc.chatboxes}),void Vc.trigger("minimizedChatsInitialized");var e}),Vc.listen.on("controlBoxOpened",e=>Uc.chatboxviews.trimChats(e)),Vc.listen.on("chatBoxViewInitialized",e=>e.listenTo(e.model,"change:minimized",e.onMinimizedChanged)),Vc.listen.on("chatRoomViewInitialized",e=>{e.listenTo(e.model,"change:minimized",e.onMinimizedChanged),e.model.get("minimized")&&e.hide()}),Vc.listen.on("getHeadingButtons",(e,t)=>e.model.get("type")===Uc.CHATROOMS_TYPE?function(e,t){const n={a_class:"toggle-chatbox-button",handler:t=>e.minimize(t),i18n_text:zd("Minimize"),i18n_title:zd("Minimize this groupchat"),icon_class:"fa-minus",name:"minimize",standalone:"overlayed"===Uc.api.settings.get("view_mode")},r=t.map(e=>e.name).indexOf("signout");return r>-1?[...t.slice(0,r),n,...t.slice(r)]:[n,...t]}(e,t):function(e,t){const n={a_class:"toggle-chatbox-button",handler:t=>e.minimize(t),i18n_text:zd("Minimize"),i18n_title:zd("Minimize this chat"),icon_class:"fa-minus",name:"minimize",standalone:"overlayed"===Uc.api.settings.get("view_mode")},r=t.map(e=>e.name).indexOf("close");return r>-1?[...t.slice(0,r),n,...t.slice(r)]:[n,...t]}(e,t));const r=Rc(()=>Uc.chatboxviews.trimChats(),250);Vc.listen.on("registeredGlobalEventHandlers",()=>window.addEventListener("resize",r)),Vc.listen.on("unregisteredGlobalEventHandlers",()=>window.removeEventListener("resize",r))}});var Yb=e=>{const t=zd("Owner"),n=zd("Admin"),r=zd("Member"),i=zd("Moderator"),o=zd("Visitor");return Za(Xb(),e.id,(e=>{const t=zd("This user is a moderator."),n=zd("This user can send messages in this groupchat."),r=zd("This user can NOT send messages in this groupchat."),i="".concat(e.jid," ")||!1;return"moderator"===e.role?"".concat(i).concat(t," ").concat(e.hint_occupant):"participant"===e.role?"".concat(i).concat(n," ").concat(e.hint_occupant):"visitor"===e.role?"".concat(i).concat(r," ").concat(e.hint_occupant):["visitor","participant","moderator"].includes(e.role)?void 0:"".concat(i).concat(e.hint_occupant)})(e),e.show,e.hint_show,e.nick||e.jid,"owner"===e.affiliation?Za(Jb(),t):"","admin"===e.affiliation?Za(Vb(),n):"","member"===e.affiliation?Za(Gb(),r):"","moderator"===e.role?Za(Wb(),i):"","visitor"===e.role?Za($b(),o):"")};function Kb(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="occupants-header">\n            <i class="hide-occupants fa fa-times"></i>\n            <div class="occupants-header--title">\n                <span class="occupants-heading">','</span>\n            </div>\n        </div>\n        <div class="dragresize dragresize-occupants-left"></div>\n        <ul class="occupant-list">',"</ul>\n    "]);return Kb=function(){return e},e}const Zb={offline:"Offline",unavailable:"Unavailable",xa:"Extended Away",away:"Away",dnd:"Do not disturb",chat:"Chattty",online:"Online"};const ey=rl.env.utils;function ty(){const e=ry(['<p class="form-help">',"</p>"]);return ty=function(){return e},e}function ny(){const e=ry(['\n        <form class="converse-form chatroom-form" autocomplete="off" @submit=','>\n            <fieldset class="form-group">\n                <legend>',"</legend>\n                ","\n                \x3c!-- Fields are generated internally, with xForm2webForm --\x3e\n                ",'\n            </fieldset>\n            <fieldset>\n                <input type="submit" class="btn btn-primary" value="','">\n                <input type="button" class="btn btn-secondary button-cancel" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return ny=function(){return e},e}function ry(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-muc-sidebar",class extends mc{static get properties(){return{chatroom:{type:Object},occupants:{type:Object}}}connectedCallback(){super.connectedCallback(),this.listenTo(this.occupants,"add",this.requestUpdate),this.listenTo(this.occupants,"remove",this.requestUpdate),this.listenTo(this.occupants,"change",this.requestUpdate)}render(){return(e=>{const t=e=>zd("Click to mention %1$s in your message.",e.get("nick")),n=zd("Participants"),r=e.occupants.map(e=>Yb(Object.assign({jid:"",hint_show:Zb[e.get("show")],hint_occupant:t(e)},e.toJSON())));return Za(Kb(),n,r)})(Object.assign(this.chatroom.toJSON(),{occupants:[...this.occupants.models]}))}shouldShow(){return!this.chatroom.get("hidden_occupants")&&this.chatroom.session.get("connection_status")===rl.ROOMSTATUS.ENTERED}setVisibility(){this.shouldShow()?ey.showElement(this):ey.hideElement(this)}});const{sizzle:iy}=rl.env,oy=rl.env.utils;var sy=eh.extend({className:"chatroom-form-container muc-config-form",initialize(e){this.chatroomview=e.chatroomview,this.listenTo(this.chatroomview.model.features,"change:passwordprotected",this.render),this.listenTo(this.chatroomview.model.features,"change:config_stanza",this.render),this.render()},toHTML(){var e,t;const n=oy.toStanza(this.model.get("config_stanza")),r=Vc.settings.get("roomconfig_whitelist");let i=iy("field",n);r.length&&(i=i.filter(e=>r.includes(e.getAttribute("var"))));const o={new_password:!this.model.features.get("passwordprotected"),fixed_username:this.model.get("jid")};return(e=>{const t=zd("Save"),n=zd("Cancel");return Za(ny(),e.submitConfigForm,e.title,e.title!==e.instructions?Za(ty(),e.instructions):"",e.fields.map(e=>Kp(e)),t,n,e.closeConfigForm)})({closeConfigForm:e=>this.closeConfigForm(e),fields:i.map(e=>oy.xForm2webForm(e,n,o)),instructions:null===(e=n.querySelector("instructions"))||void 0===e?void 0:e.textContent,submitConfigForm:e=>this.submitConfigForm(e),title:null===(t=n.querySelector("title"))||void 0===t?void 0:t.textContent})},async submitConfigForm(e){e.preventDefault();const t=iy(":input:not([type=button]):not([type=submit])",e.target).map(oy.webForm2xForm).filter(e=>e);try{await this.model.sendConfiguration(t)}catch(e){zn.error(e);const t=zd("Sorry, an error occurred while trying to submit the config form.")+" "+zd("Check your browser's developer console for details.");Vc.alert("error",zd("Error"),t)}await this.model.refreshDiscoInfo(),this.chatroomview.closeForm()},closeConfigForm(e){e.preventDefault(),this.chatroomview.closeForm()}});function ay(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <form class="converse-form chatroom-form converse-centered-form" @submit=','>\n            <fieldset class="form-group">\n                <label>','</label>\n                <p class="validation-message">','</p>\n                <input class="hidden-username" type="text" autocomplete="username" value="','"></input>\n                <input type="password"\n                    name="password"\n                    required="required"\n                    class="form-control ','"\n                    placeholder="','"/>\n            </fieldset>\n            <fieldset class="form-group">\n                <input class="btn btn-primary" type="submit" value="','"/>\n            </fieldset>\n        </form>\n    ']);return ay=function(){return e},e}var cy=eh.extend({className:"chatroom-form-container muc-password-form",initialize(e){this.chatroomview=e.chatroomview,this.listenTo(this.model,"change:validation_message",this.render),this.render()},toHTML(){return(e=>{const t=zd("This groupchat requires a password"),n=zd("Password: "),r=zd("Submit");return Za(ay(),e.submitPassword,t,e.validation_message,e.jid,e.validation_message?"error":"",n,r)})({jid:this.model.get("jid"),submitPassword:e=>this.submitPassword(e),validation_message:this.model.get("validation_message")})},submitPassword(e){e.preventDefault();const t=this.el.querySelector("input[type=password]").value;this.chatroomview.model.join(this.chatroomview.model.get("nick"),t),this.model.set("validation_message",null)}});function ly(){const e=dy(['<div class="error error-feedback">',"</div>"]);return ly=function(){return e},e}function uy(){const e=dy(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="add-chatroom-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <div class="suggestion-box room-invite">\n                        <form @submit=','>\n                            <div class="form-group">\n                                <label class="clearfix" for="invitee_jids">',":</label>\n                                ",'\n                                <input class="form-control suggestion-box__input"\n                                    required="required"\n                                    name="invitee_jids"\n                                    id="invitee_jids"\n                                    placeholder="','"\n                                    type="text"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                                <ul class="suggestion-box__results suggestion-box__results--below" hidden=""></ul>\n                            </div>\n                            <div class="form-group">\n                                <label>',':</label>\n                                <textarea class="form-control" name="reason"></textarea>\n                            </div>\n                            <div class="form-group">\n                                <button type="submit" class="btn btn-primary">',"</button>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);return uy=function(){return e},e}function dy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const hy=rl.env.utils;var fy=df.extend({id:"muc-invite-modal",initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.initInviteWidget()},toHTML(){return(e=>{const t=zd("Invite"),n=zd("Invite someone to this groupchat"),r=zd("user@example.org"),i=zd("Please enter a valid XMPP address"),o=zd("XMPP Address"),s=zd("Optional reason for the invitation");return Za(uy(),n,mf,e.submitInviteForm,o,e.invalid_invite_jid?Za(ly(),i):"",r,s,t)})(Object.assign(this.model.toJSON(),{submitInviteForm:e=>this.submitInviteForm(e)}))},initInviteWidget(){this.invite_auto_complete&&this.invite_auto_complete.destroy();const e=Uc.roster.map(e=>({label:e.getDisplayName(),value:e.get("jid")})),t=this.el.querySelector(".suggestion-box").parentElement;this.invite_auto_complete=new Uc.AutoComplete(t,{min_chars:1,list:e})},submitInviteForm(e){e.preventDefault();const t=new FormData(e.target),n=t.get("invitee_jids"),r=t.get("reason");hy.isValidJID(n)?(this.chatroomview.model.directInvite(n,r),this.modal.hide()):this.model.set({invalid_invite_jid:!0})}});function py(){const e=Dy(['<li class="list-group-item">',"</li>"]);return py=function(){return e},e}function gy(){const e=Dy(['<li class="list-group-item"> '," </li>"]);return gy=function(){return e},e}function my(){const e=Dy(['<div class="row"><div class="col pt-2"><p class="helptext pb-3">',"</p></div></div>"]);return my=function(){return e},e}function vy(){const e=Dy(['<input class="form-control" .value="','" @keyup=',' type="text" name="filter" placeholder="','"/>']);return vy=function(){return e},e}function _y(){const e=Dy(['<li class="list-group-item">',"</li>"]);return _y=function(){return e},e}function by(){const e=Dy(['<li class="list-group-item">',"</li>"]);return by=function(){return e},e}function yy(){const e=Dy(['<li class="list-group-item"> '," </li>"]);return yy=function(){return e},e}function wy(){const e=Dy(['<div class="row"><div class="col pt-2"><p class="helptext pb-3">',"</p></div></div>"]);return wy=function(){return e},e}function Sy(){const e=Dy(['<input class="form-control" .value="','" @keyup=',' type="text" name="filter" placeholder="','"/>']);return Sy=function(){return e},e}function xy(){const e=Dy(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="converse-modtools-modal-label">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body d-flex flex-column">\n                <span class="modal-alert"></span>\n\n                ','\n\n                <div class="tab-content">\n                    <div class="tab-pane tab-pane--columns ','" id="affiliations-tabpanel" role="tabpanel" aria-labelledby="affiliations-tab">\n                        <form class="converse-form query-affiliation" @submit=','>\n                            <p class="helptext pb-3">','</p>\n                            <div class="form-group">\n                                <label for="affiliation">\n                                    <strong>',':</strong>\n                                </label>\n                                <div class="row">\n                                    <div class="col">\n                                        <select class="custom-select select-affiliation" name="affiliation">\n                                            ','\n                                        </select>\n                                    </div>\n                                    <div class="col">\n                                        <input type="submit" class="btn btn-primary" name="users_with_affiliation" value="','"/>\n                                    </div>\n                                </div>\n                                <div class="row">\n                                    <div class="col mt-3">\n                                        ',"\n                                    </div>\n                                </div>\n\n                                ",'\n                            </div>\n                        </form>\n                        <div class="scrollable-container">\n                            <ul class="list-group list-group--users">\n                                ',"\n                                ","\n\n                                ",'\n                            </ul>\n                        </div>\n                    </div>\n\n                    <div class="tab-pane tab-pane--columns ','" id="roles-tabpanel" role="tabpanel" aria-labelledby="roles-tab">\n                        <form class="converse-form query-role" @submit=','>\n                            <p class="helptext pb-3">','</p>\n                            <div class="form-group">\n                                <label for="role"><strong>',':</strong></label>\n                                <div class="row">\n                                    <div class="col">\n                                        <select class="custom-select select-role" name="role">\n                                            ','\n                                        </select>\n                                    </div>\n                                    <div class="col">\n                                        <input type="submit" class="btn btn-primary" name="users_with_role" value="','"/>\n                                    </div>\n                                </div>\n                                <div class="row">\n                                    <div class="col mt-3">\n                                        ',"\n                                    </div>\n                                </div>\n\n                                ",'\n                            </div>\n                        </form>\n                        <div class="scrollable-container">\n                            <ul class="list-group list-group--users">\n                                ',"\n                                ","\n                                ","\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>"]);return xy=function(){return e},e}function Ey(){const e=Dy(['\n    <ul class="nav nav-pills justify-content-center">\n        <li role="presentation" class="nav-item">\n            <a class="nav-link active" id="affiliations-tab" href="#affiliations-tabpanel" aria-controls="affiliations-tabpanel" role="tab" data-toggle="tab" @click=','>Affiliations</a>\n        </li>\n        <li role="presentation" class="nav-item">\n            <a class="nav-link" id="roles-tab" href="#roles-tabpanel" aria-controls="roles-tabpanel" role="tab" data-toggle="tab" @click=',">Roles</a>\n        </li>\n    </ul>\n"]);return Ey=function(){return e},e}function Ay(){const e=Dy(['<a href="#" data-form="affiliation-form" class="toggle-form right fa fa-wrench" @click=',"></a>"]);return Ay=function(){return e},e}function Cy(){const e=Dy(['\n    <li class="list-group-item" data-nick="','">\n        <ul class="list-group">\n            <li class="list-group-item active">\n                <div><strong>JID:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Nickname:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Affiliation:</strong> '," ","</div>\n                ","\n            </li>\n        </ul>\n    </li>\n"]);return Cy=function(){return e},e}function jy(){const e=Dy(['<option value="','" ?selected=',">","</option>"]);return jy=function(){return e},e}function Ty(){const e=Dy(['\n        <form class="affiliation-form hidden" @submit=','>\n            <div class="form-group">\n                <input type="hidden" name="jid" value="','"/>\n                <input type="hidden" name="nick" value="','"/>\n                <div class="row">\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <select class="custom-select select-affiliation" name="affiliation">\n                            ','\n                        </select>\n                    </div>\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <input class="form-control" type="text" name="reason"/>\n                    </div>\n                </div>\n            </div>\n            <div class="form-group">\n                <input type="submit" class="btn btn-primary" name="change" value="','"/>\n            </div>\n        </form>\n    ']);return Ty=function(){return e},e}function Oy(){const e=Dy(['<a href="#" data-form="role-form" class="toggle-form right fa fa-wrench" @click=',"></a>"]);return Oy=function(){return e},e}function ky(){const e=Dy(['\n    <li class="list-group-item" data-nick="','">\n        <ul class="list-group">\n            <li class="list-group-item active">\n                <div><strong>JID:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Nickname:</strong> ','</div>\n            </li>\n            <li class="list-group-item">\n                <div><strong>Role:</strong> '," ","</div>\n                ","\n            </li>\n        </ul>\n    </li>\n"]);return ky=function(){return e},e}function Ny(){const e=Dy(['<option value="','" ?selected=',">","</option>"]);return Ny=function(){return e},e}function Iy(){const e=Dy(['\n        <form class="role-form hidden" @submit=','>\n            <div class="form-group">\n                <input type="hidden" name="jid" value="','"/>\n                <input type="hidden" name="nick" value="','"/>\n                <div class="row">\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <select class="custom-select select-role" name="role">\n                            ','\n                        </select>\n                    </div>\n                    <div class="col">\n                        <label><strong>',':</strong></label>\n                        <input class="form-control" type="text" name="reason"/>\n                    </div>\n                </div>\n            </div>\n            <div class="form-group">\n                <input type="submit" class="btn btn-primary" value="','"/>\n            </div>\n        </form>\n    ']);return Iy=function(){return e},e}function My(){const e=Dy(['\n    <option value="','"\n            ?selected=','\n            title="','">',"</option>\n"]);return My=function(){return e},e}function Ry(){const e=Dy(['\n    <option value="','"\n            ?selected=','\n            title="','">',"</option>\n"]);return Ry=function(){return e},e}function Dy(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Py(e){return"moderator"===e?zd("Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations."):"participant"===e?zd("The default role, implies that you can read and write messages."):"visitor"==e?zd("Visitors aren't allowed to write messages in a moderated multi-user chat."):void 0}function Ly(e){return"owner"===e?zd("Owner is the highest affiliation. Owners can modify roles and affiliations of all other users."):"admin"===e?zd("Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners."):"outcast"===e?zd('To ban a user, you give them the affiliation of "outcast".'):void 0}const zy=e=>Za(ky(),e.item.nick,e.item.jid,e.item.nick,e.item.role,e.assignable_roles.length?Za(Oy(),e.toggleForm):"",e.assignable_roles.length?(e=>{const t=zd("Change role"),n=zd("New Role"),r=zd("Reason");return Za(Iy(),e.assignRole,e.item.jid,e.item.nick,n,e.assignable_roles.map(t=>Za(Ny(),t,t===e.item.role,t)),r,t)})(e):""),Fy=e=>Za(Cy(),e.item.nick,e.item.jid,e.item.nick,e.item.affiliation,e.assignable_affiliations.length?Za(Ay(),e.toggleForm):"",e.assignable_affiliations.length?(e=>{const t=zd("Change affiliation"),n=zd("New affiliation"),r=zd("Reason");return Za(Ty(),e.assignAffiliation,e.item.jid,e.item.nick,n,e.assignable_affiliations.map(t=>Za(jy(),t,t===e.item.affiliation,t)),r,t)})(e):"");var By=e=>{const t=zd("Affiliation"),n=zd("Moderator Tools"),r=zd("No users with that affiliation found."),i=zd("No users with that role found."),o=zd("Type here to filter the search results"),s=zd("Role"),a=zd("Show users"),c=zd("Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They're assigned either explicitly or implicitly as part of an affiliation. A role that's not due to an affiliation, is only valid for the duration of the user's session."),l=zd("An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role."),u=e.queryable_roles.length&&e.queryable_affiliations.length;return Za(xy(),n,mf,u?(e=>Za(Ey(),e.switchTab,e.switchTab))(e):"",e.queryable_affiliations.length?"active":"",e.queryAffiliation,l,t,e.queryable_affiliations.map(t=>(e=>Za(My(),e.item||"",e.item===e.affiliation,Ly(e.item),e.item))(Object.assign({item:t},e))),a,Array.isArray(e.users_with_affiliation)&&e.users_with_affiliation.length>5?Za(Sy(),e.affiliations_filter,e.filterAffiliationResults,o):"",Ly(e.affiliation)?Za(wy(),Ly(e.affiliation)):"",e.loading_users_with_affiliation?Za(yy(),fp()):"",Array.isArray(e.users_with_affiliation)&&0===e.users_with_affiliation.length?Za(by(),r):"",e.users_with_affiliation instanceof Error?Za(_y(),e.users_with_affiliation.message):(e.users_with_affiliation||[]).map(t=>(t.nick||t.jid).match(new RegExp(e.affiliations_filter,"i"))?Fy(Object.assign({item:t},e)):""),!u&&e.queryable_roles.length?"active":"",e.queryRole,c,s,e.queryable_roles.map(t=>(e=>Za(Ry(),e.item||"",e.item===e.role,Py(e.item),e.item))(Object.assign({item:t},e))),a,Array.isArray(e.users_with_role)&&e.users_with_role.length>5?Za(vy(),e.roles_filter,e.filterRoleResults,o):"",Py(e.role)?Za(my(),Py(e.role)):"",e.loading_users_with_role?Za(gy(),fp()):"",e.users_with_role&&0===e.users_with_role.length?Za(py(),i):"",(e.users_with_role||[]).map(t=>t.nick.match(e.roles_filter)?zy(Object.assign({item:t},e)):""))};const{Strophe:qy}=rl.env,Hy=rl.env.utils;let Uy;var $y=df.extend({id:"converse-modtools-modal",persistent:!0,initialize(e){Uy=e._converse,this.chatroomview=e.chatroomview,df.prototype.initialize.apply(this,arguments),this.affiliations_filter="",this.roles_filter="",this.listenTo(this.model,"change:role",()=>{this.users_with_role=this.chatroomview.model.getOccupantsWithRole(this.model.get("role")),this.render()}),this.listenTo(this.model,"change:affiliation",async()=>{this.loading_users_with_affiliation=!0,this.users_with_affiliation=null,this.render();const e=this.chatroomview.model,t=this.model.get("affiliation");this.shouldFetchAffiliationsList()?this.users_with_affiliation=await e.getAffiliationList(t):this.users_with_affiliation=e.getOccupantsWithAffiliation(t),this.loading_users_with_affiliation=!1,this.render()})},toHTML(){const e=this.chatroomview.model.occupants.findWhere({jid:Uy.bare_jid});return By(Object.assign(this.model.toJSON(),{affiliations_filter:this.affiliations_filter,assignAffiliation:e=>this.assignAffiliation(e),assignRole:e=>this.assignRole(e),assignable_affiliations:this.getAssignableAffiliations(e),assignable_roles:this.getAssignableRoles(e),filterAffiliationResults:e=>this.filterAffiliationResults(e),filterRoleResults:e=>this.filterRoleResults(e),loading_users_with_affiliation:this.loading_users_with_affiliation,queryAffiliation:e=>this.queryAffiliation(e),queryRole:e=>this.queryRole(e),queryable_affiliations:fu.filter(e=>!Uy.modtools_disable_query.includes(e)),queryable_roles:hu.filter(e=>!Uy.modtools_disable_query.includes(e)),roles_filter:this.roles_filter,switchTab:e=>this.switchTab(e),toggleForm:e=>this.toggleForm(e),users_with_affiliation:this.users_with_affiliation,users_with_role:this.users_with_role}))},getAssignableAffiliations(e){let t=Vc.settings.get("modtools_disable_assign");return Array.isArray(t)||(t=t?fu:[]),"owner"===e.get("affiliation")?fu.filter(e=>!t.includes(e)):"admin"===e.get("affiliation")?fu.filter(e=>!["owner","admin",...t].includes(e)):[]},getAssignableRoles(e){let t=Vc.settings.get("modtools_disable_assign");return Array.isArray(t)||(t=t?hu:[]),"moderator"===e.get("role")?hu.filter(e=>!t.includes(e)):[]},shouldFetchAffiliationsList(){const e=this.model.get("affiliation");return"none"!==e&&!this.chatroomview.model.occupants.getAutoFetchedAffiliationLists().includes(e)},toggleForm(e){e.stopPropagation(),e.preventDefault();const t=e.target.getAttribute("data-form"),n=Hy.ancestor(e.target,".list-group-item").querySelector(".".concat(t));Hy.hasClass("hidden",n)?Hy.removeClass("hidden",n):Hy.addClass("hidden",n)},filterRoleResults(e){this.roles_filter=e.target.value,this.render()},filterAffiliationResults(e){this.affiliations_filter=e.target.value,this.render()},queryRole(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target).get("role");this.model.set({role:null},{silent:!0}),this.model.set({role:t})},queryAffiliation(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target).get("affiliation");this.model.set({affiliation:null},{silent:!0}),this.model.set({affiliation:t})},async assignAffiliation(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target),n=t.get("affiliation"),r={jid:t.get("jid"),reason:t.get("reason")},i=this.model.get("affiliation");try{await this.chatroomview.model.setAffiliation(n,[r])}catch(e){return null===e?this.alert(zd("Timeout error while trying to set the affiliation"),"danger"):mr()('not-allowed[xmlns="'.concat(qy.NS.STANZAS,'"]'),e).length?this.alert(zd("Sorry, you're not allowed to make that change"),"danger"):this.alert(zd("Sorry, something went wrong while trying to set the affiliation"),"danger"),void zn.error(e)}this.alert(zd("Affiliation changed"),"primary"),await this.chatroomview.model.occupants.fetchMembers(),this.model.set({affiliation:null},{silent:!0}),this.model.set({affiliation:i})},assignRole(e){e.stopPropagation(),e.preventDefault();const t=new FormData(e.target),n=this.chatroomview.model.getOccupant(t.get("jid")||t.get("nick")),r=t.get("role"),i=t.get("reason"),o=this.model.get("role");this.chatroomview.model.setRole(n,r,i,()=>{this.alert(zd("Role changed"),"primary"),this.model.set({role:null},{silent:!0}),this.model.set({role:o})},e=>{mr()('not-allowed[xmlns="'.concat(qy.NS.STANZAS,'"]'),e).length?this.alert(zd("You're not allowed to make that change"),"danger"):(this.alert(zd("Sorry, something went wrong while trying to set the role"),"danger"),Hy.isErrorObject(e)&&zn.error(e))})}});function Wy(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="user-details-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    ','\n                </div>\n                <div class="modal-footer">\n                    ',"\n                </div>\n            </div>\n        </div>\n    "]);return Wy=function(){return e},e}const Gy=df.extend({initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),Vc.trigger("occupantModalInitialized",this.model)},toHTML(){return e=Object.assign(this.model.toJSON(),{avatar_data:this.getAvatarData(),display_name:this.model.getDisplayName()}),Za(Wy(),e.display_name,mf,op(e.avatar_data),gf);var e},getAvatarData(){const e=Uc.vcards.findWhere({jid:this.model.get("jid")});return{classes:"chat-msg__avatar",height:120,width:120,image:"data:"+((null==e?void 0:e.get("image_type"))||Uc.DEFAULT_IMAGE_TYPE)+";base64,"+((null==e?void 0:e.get("image"))||Uc.DEFAULT_IMAGE)}}});Uc.OccupantModal=Gy;var Vy=Gy;function Jy(){const e=lw(['<li class="feature" ><span class="fa fa-database"></span>'," - <em>","</em></li>"]);return Jy=function(){return e},e}function Xy(){const e=lw(['<li class="feature" ><span class="fa fa-info-circle"></span>'," - <em>","</em></li>"]);return Xy=function(){return e},e}function Qy(){const e=lw(['<li class="feature" ><span class="fa fa-gavel"></span>'," - <em>","</em></li>"]);return Qy=function(){return e},e}function Yy(){const e=lw(['<li class="feature" ><span class="fa fa-user-secret"></span>'," - <em>","</em></li>"]);return Yy=function(){return e},e}function Ky(){const e=lw(['<li class="feature" ><span class="fa fa-id-card"></span>'," - <em>","</em></li>"]);return Ky=function(){return e},e}function Zy(){const e=lw(['<li class="feature" ><span class="fa fa-snowflake-o"></span>'," - <em>","</em></li>"]);return Zy=function(){return e},e}function ew(){const e=lw(['<li class="feature" ><span class="fa fa-save"></span>'," - <em>","</em></li>"]);return ew=function(){return e},e}function tw(){const e=lw(['<li class="feature" ><span class="fa fa-globe"></span>'," - <em>","</em></li>"]);return tw=function(){return e},e}function nw(){const e=lw(['<li class="feature" ><span class="fa fa-address-book"></span>'," - <em>","</em></li>"]);return nw=function(){return e},e}function rw(){const e=lw(['<li class="feature" ><span class="fa fa-eye"></span>'," - <em>","</em></li>"]);return rw=function(){return e},e}function iw(){const e=lw(['<li class="feature" ><span class="fa fa-eye-slash"></span>'," - <em>","</em></li>"]);return iw=function(){return e},e}function ow(){const e=lw(['<li class="feature" ><span class="fa fa-unlock"></span>'," - <em>","</em></li>"]);return ow=function(){return e},e}function sw(){const e=lw(['<li class="feature" ><span class="fa fa-lock"></span>'," - <em>","</em></li>"]);return sw=function(){return e},e}function aw(){const e=lw(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="muc-details-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <div class="room-info">\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>',"</strong>: ","</p>\n                        ",'\n                        <p class="room-info"><strong>',"</strong>: ",'</p>\n                        <p class="room-info"><strong>','</strong>:\n                            <div class="chatroom-features">\n                            <ul class="features-list">\n                                ',"\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ","\n                                ",'\n                            </ul>\n                            </div>\n                        </p>\n                    </div>\n                </div>\n                <div class="modal-footer">',"</div>\n            </div>\n        </div>\n    "]);return aw=function(){return e},e}function cw(){const e=lw(['\n        <p class="room-info"><strong>',"</strong>: ",'</p>\n            <p class="room-info"><strong>',"</strong>: ","</p>\n    "]);return cw=function(){return e},e}function lw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var uw=e=>{const t=zd("Groupchat address (JID)"),n=zd("Message archiving"),r=zd("Messages are archived on the server"),i=zd("Description"),o=zd("Features"),s=zd("Hidden"),a=zd("This groupchat is not publicly searchable"),c=zd("This groupchat is restricted to members only"),l=zd("Members only"),u=zd("Moderated"),d=zd("Participants entering this groupchat need to request permission to write"),h=zd("Name"),f=zd("This groupchat does not require a password upon entry"),p=zd("No password required"),g=zd("Not anonymous"),m=zd("All other groupchat participants can see your XMPP address"),v=zd("Not moderated"),_=zd("Participants entering this groupchat can write right away"),b=zd("Online users"),y=zd("Open"),w=zd("Anyone can join this groupchat"),S=zd("This groupchat requires a password before entry"),x=zd("Password protected"),E=zd("Persistent"),A=zd("This groupchat persists even if it's unoccupied"),C=zd("Public"),j=zd("Semi-anonymous"),T=zd("Only moderators can see your XMPP address"),O=zd("Temporary"),k=zd("This groupchat will disappear once the last person leaves");return Za(aw(),e.display_name,mf,h,e.name,t,e.jid,i,e.config.description,e.subject?(e=>{const t=zd("Topic"),n=zd("Topic author");return Za(cw(),t,Kp(Qp.a.filterXSS(e.subject.text,{whiteList:{}})),n,e.subject&&e.subject.author)})(e):"",b,e.num_occupants,o,e.features.passwordprotected?Za(sw(),x,S):"",e.features.unsecured?Za(ow(),p,f):"",e.features.hidden?Za(iw(),s,a):"",e.features.public_room?Za(rw(),C,e.__("This groupchat is publicly searchable")):"",e.features.membersonly?Za(nw(),l,c):"",e.features.open?Za(tw(),y,w):"",e.features.persistent?Za(ew(),E,A):"",e.features.temporary?Za(Zy(),O,k):"",e.features.nonanonymous?Za(Ky(),g,m):"",e.features.semianonymous?Za(Yy(),j,T):"",e.features.moderated?Za(Qy(),u,d):"",e.features.unmoderated?Za(Xy(),v,_):"",e.features.mam_enabled?Za(Jy(),n,r):"",gf)},dw=df.extend({id:"muc-details-modal",initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render),this.listenTo(this.model.features,"change",this.render),this.listenTo(this.model.occupants,"add",this.render),this.listenTo(this.model.occupants,"change",this.render)},toHTML(){return uw(Object.assign(this.model.toJSON(),{config:this.model.config.toJSON(),display_name:zd("Groupchat info for %1$s",this.model.getDisplayName()),features:this.model.features.toJSON(),num_occupants:this.model.occupants.length}))}});function hw(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="flyout box-flyout">\n        <div class="chat-head chat-head-chatroom row no-gutters"></div>\n        <div class="chat-body chatroom-body row no-gutters">\n            <div class="chat-area col">\n                <div class="chat-content ','" aria-live="polite">\n                    <div class="chat-content__messages" @scroll=','></div>\n                    <div class="chat-content__help"></div>\n                </div>\n                <div class="bottom-panel"></div>\n            </div>\n            <div class="disconnect-container hidden"></div>\n            <converse-muc-sidebar class="occupants col-md-3 col-4 ','"\n                .occupants=',"\n                .chatroom=","></converse-muc-sidebar>\n        </div>\n    </div>\n"]);return hw=function(){return e},e}function fw(){const e=_w(['<p class="chat-head__desc" title="','">',"</p>"]);return fw=function(){return e},e}function pw(){const e=_w(["<converse-dropdown .items=","></converse-dropdown>"]);return pw=function(){return e},e}function gw(){const e=_w(['<i class="fa fa-bookmark chatbox-title__text--bookmarked" title="','"></i>']);return gw=function(){return e},e}function mw(){const e=_w(['<div class="chatbox-navback"><i class="fa fa-arrow-left"></i></div>']);return mw=function(){return e},e}function vw(){const e=_w(['\n        <div class="chatbox-title ','">\n            ','\n            <div class="chatbox-title__text" title="','">',"\n                ",'\n            </div>\n            <div class="chatbox-title__buttons row no-gutters">\n                ',"\n                ","\n            </div>\n        </div>\n        ","\n    "]);return vw=function(){return e},e}function _w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const bw=rl.env.utils;var yw=e=>{const t=zd("Hide the groupchat topic"),n=zd("This groupchat is bookmarked"),r=e.subject?bw.addHyperlinks(e.subject.text):"",i=r&&!e.subject_hidden;return Za(vw(),i?"":"chatbox-title--no-desc",e._converse.api.settings.get("singleton")?"":Za(mw()),"hidden"!==e._converse.locked_muc_domain?e.jid:"",e.title,e.bookmarked?Za(gw(),n):"",e.standalone_btns.length?(e=>e.standalone_btns.reverse().map(e=>Qh(e,"")))(e):"",e.dropdown_btns.length?Za(pw(),e.dropdown_btns):"",i?Za(fw(),t,r):"")};function ww(){const e=Ew(['<div class="muc-bottom-panel"></div>']);return ww=function(){return e},e}function Sw(){const e=Ew(['<div class="muc-bottom-panel">',"</div>"]);return Sw=function(){return e},e}function xw(){const e=Ew(['\n    <div class="emoji-picker__container dropup"></div>\n    <div class="message-form-container">']);return xw=function(){return e},e}function Ew(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Aw=e=>{const t=zd("You're not allowed to send messages in this room");return e.entered?e.can_edit?Za(xw()):Za(Sw(),t):Za(ww())};function Cw(){const e=Ow(['<p class="destroyed-reason">"','"</p>']);return Cw=function(){return e},e}function jw(){const e=Ow(['\n        <div class="alert alert-danger">\n            <h3 class="alert-heading disconnect-msg">',"</h3>\n            ","\n            ","\n        </div>"]);return jw=function(){return e},e}function Tw(){const e=Ow(['\n        <p class="moved-label">','</p>\n        <p class="moved-link"><a class="switch-chat" href="#">',"</a></p>"]);return Tw=function(){return e},e}function Ow(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var kw=(e,t)=>{const n=zd("This groupchat no longer exists");return Za(jw(),n,t?Za(Cw(),t):"",e?(e=>{const t=zd("The conversation has moved. Click below to enter.");return Za(Tw(),t,e)})(e):"")};function Nw(){const e=Mw(['<p class="disconnect-msg">',"</p>"]);return Nw=function(){return e},e}function Iw(){const e=Mw(['\n        <div class="alert alert-danger">\n            <h3 class="alert-heading disconnect-msg">',"</h3>\n            ","\n        </div>"]);return Iw=function(){return e},e}function Mw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Rw(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="chatroom-form-container muc-nickname-form">\n            <form class="converse-form chatroom-form converse-centered-form">\n                <fieldset class="form-group">\n                    <label>','</label>\n                    <p class="validation-message">','</p>\n                    <input type="text"\n                        required="required"\n                        name="nick"\n                        value="','"\n                        class="form-control ','"\n                        placeholder="','"/>\n                </fieldset>\n                <fieldset class="form-group">\n                    <input type="submit" class="btn btn-primary" name="join" value="','"/>\n                </fieldset>\n            </form>\n        </div>']);return Rw=function(){return e},e}const{Strophe:Dw,sizzle:Pw,$pres:Lw}=rl.env,zw=rl.env.utils,Fw=["owner"],Bw=["admin","ban","deop","destroy","member","op","revoke"],qw=["kick","mute","voice","modtools"],Hw=["nick"],Uw={deop:"participant",kick:"none",mute:"visitor",op:"moderator",voice:"participant"},$w={admin:"admin",ban:"outcast",member:"member",owner:"owner",revoke:"none"};var Ww={length:300,tagName:"div",className:"chatbox chatroom hidden",is_chatroom:!0,events:{"click .chatbox-navback":"showControlBox","click .hide-occupants":"hideOccupants","click .new-msgs-indicator":"viewUnreadMessages","click .occupant-nick":function(e){this.insertIntoTextArea(e.target.textContent)},"click .send-button":"onFormSubmitted","dragover .chat-textarea":"onDragOver","drop .chat-textarea":"onDrop","input .chat-textarea":"inputChanged","keydown .chat-textarea":"onKeyDown","keyup .chat-textarea":"onKeyUp","mousedown .dragresize-occupants-left":"onStartResizeOccupants","paste .chat-textarea":"onPaste","submit .muc-nickname-form":"submitNickname"},async initialize(){this.initDebounced(),this.listenTo(this.model,"change",Rc(()=>this.renderHeading(),250)),this.listenTo(this.model,"change:composing_spoiler",this.renderMessageForm),this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"change:hidden_occupants",this.onSidebarToggle),this.listenTo(this.model,"configurationNeeded",this.getAndRenderConfigurationForm),this.listenTo(this.model,"destroy",this.hide),this.listenTo(this.model,"show",this.show),this.listenTo(this.model.features,"change:moderated",this.renderBottomPanel),this.listenTo(this.model.features,"change:open",this.renderHeading),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.session,"change:connection_status",this.onConnectionStatusChanged),this.onMouseMove=this.onMouseMove.bind(this),this.onMouseUp=this.onMouseUp.bind(this),await this.render(),this.listenTo(this.model,"change:show_help_messages",this.renderHelpMessages),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"change",this.renderChatHistory),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"reset",this.renderChatHistory),this.listenTo(this.model.notifications,"change",this.renderNotifications),this.model.occupants.forEach(e=>this.onOccupantAdded(e)),this.listenTo(this.model.occupants,"add",this.onOccupantAdded),this.listenTo(this.model.occupants,"change",this.renderChatHistory),this.listenTo(this.model.occupants,"change:affiliation",this.onOccupantAffiliationChanged),this.listenTo(this.model.occupants,"change:role",this.onOccupantRoleChanged),this.listenTo(this.model.occupants,"change:show",this.showJoinOrLeaveNotification),this.listenTo(this.model.occupants,"remove",this.onOccupantRemoved),this.renderChatContent(),this.insertIntoDOM();const e=await Uc.api.user.settings.getModel();this.listenTo(e,"change:mucs_with_hidden_subject",this.renderHeading),this.onConnectionStatusChanged(),this.model.maybeShow(),this.scrollDown(),Vc.trigger("chatRoomViewInitialized",this)},async render(){const e=!this.shouldShowSidebar();var t;this.el.setAttribute("id",this.model.get("box_id")),Ya((t={sidebar_hidden:e,model:this.model,occupants:this.model.occupants,show_sidebar:!this.model.get("hidden_occupants")&&this.model.session.get("connection_status")===rl.ROOMSTATUS.ENTERED,markScrolled:e=>this.markScrolled(e),muc_show_logs_before_join:Vc.settings.get("muc_show_logs_before_join"),show_send_button:Uc.show_send_button},Za(hw(),t.show_send_button?"chat-content-sendbutton":"",t.markScrolled,t.sidebar_hidden?"hidden":"",t.occupants,t.model)),this.el),this.notifications=this.el.querySelector(".chat-content__notifications"),this.content=this.el.querySelector(".chat-content"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.help_container=this.el.querySelector(".chat-content__help"),this.renderBottomPanel(),Vc.settings.get("muc_show_logs_before_join")||this.model.session.get("connection_status")===rl.ROOMSTATUS.ENTERED||this.showSpinner(),await this.renderHeading(),!this.model.get("hidden")&&this.show()},getNotifications(){const e=this.model.notifications.toJSON(),t=Vc.settings.get("muc_show_info_messages").filter(e=>rl.MUC_ROLE_CHANGES_LIST.includes(e)),n=Vc.settings.get("muc_show_info_messages").filter(e=>rl.MUC_TRAFFIC_STATES_LIST.includes(e));return[...rl.CHAT_STATES,...n,...t].reduce((t,n)=>{const r=e[n];if(!(null==r?void 0:r.length))return t;const i=r.map(e=>{var t;return(null===(t=this.model.getOccupant(e))||void 0===t?void 0:t.getDisplayName())||e});if(1===i.length){if("composing"===n)return"".concat(t).concat(zd("%1$s is typing",i[0]),"\n");if("paused"===n)return"".concat(t).concat(zd("%1$s has stopped typing",i[0]),"\n");if(n===Uc.GONE)return"".concat(t).concat(zd("%1$s has gone away",i[0]),"\n");if("entered"===n)return"".concat(t).concat(zd("%1$s has entered the groupchat",i[0]),"\n");if("exited"===n)return"".concat(t).concat(zd("%1$s has left the groupchat",i[0]),"\n");if("op"===n)return"".concat(t).concat(zd("%1$s is now a moderator",i[0]),"\n");if("deop"===n)return"".concat(t).concat(zd("%1$s is no longer a moderator",i[0]),"\n");if("voice"===n)return"".concat(t).concat(zd("%1$s has been given a voice",i[0]),"\n");if("mute"===n)return"".concat(t).concat(zd("%1$s has been muted",i[0]),"\n")}else if(i.length>1){let e;if(i.length>3)e="".concat(Array.from(i).slice(0,2).join(", ")," and others");else{const t=i.pop();e=zd("%1$s and %2$s",i.join(", "),t)}if("composing"===n)return"".concat(t).concat(zd("%1$s are typing",e),"\n");if("paused"===n)return"".concat(t).concat(zd("%1$s have stopped typing",e),"\n");if(n===Uc.GONE)return"".concat(t).concat(zd("%1$s have gone away",e),"\n");if("entered"===n)return"".concat(t).concat(zd("%1$s have entered the groupchat",e),"\n");if("exited"===n)return"".concat(t).concat(zd("%1$s have left the groupchat",e),"\n");if("op"===n)return"".concat(t).concat(zd("%1$s are now moderators",i[0]),"\n");if("deop"===n)return"".concat(t).concat(zd("%1$s are no longer moderators",i[0]),"\n");if("voice"===n)return"".concat(t).concat(zd("%1$s have been given voices",i[0]),"\n");if("mute"===n)return"".concat(t).concat(zd("%1$s have been muted",i[0]),"\n")}return t},"")},getHelpMessages(){const e=Vc.settings.get("muc_disable_slash_commands"),t=Array.isArray(e)?e:[];return["<strong>/admin</strong>: ".concat(zd("Change user's affiliation to admin")),"<strong>/ban</strong>: ".concat(zd("Ban user by changing their affiliation to outcast")),"<strong>/clear</strong>: ".concat(zd("Clear the chat area")),"<strong>/close</strong>: ".concat(zd("Close this groupchat")),"<strong>/deop</strong>: ".concat(zd("Change user role to participant")),"<strong>/destroy</strong>: ".concat(zd("Remove this groupchat")),"<strong>/help</strong>: ".concat(zd("Show this menu")),"<strong>/kick</strong>: ".concat(zd("Kick user from groupchat")),"<strong>/me</strong>: ".concat(zd("Write in 3rd person")),"<strong>/member</strong>: ".concat(zd("Grant membership to a user")),"<strong>/modtools</strong>: ".concat(zd("Opens up the moderator tools GUI")),"<strong>/mute</strong>: ".concat(zd("Remove user's ability to post messages")),"<strong>/nick</strong>: ".concat(zd("Change your nickname")),"<strong>/op</strong>: ".concat(zd("Grant moderator role to user")),"<strong>/owner</strong>: ".concat(zd("Grant ownership of this groupchat")),"<strong>/register</strong>: ".concat(zd("Register your nickname")),"<strong>/revoke</strong>: ".concat(zd("Revoke the user's current affiliation")),"<strong>/subject</strong>: ".concat(zd("Set groupchat subject")),"<strong>/topic</strong>: ".concat(zd("Set groupchat subject (alias for /subject)")),"<strong>/voice</strong>: ".concat(zd("Allow muted user to post messages"))].filter(e=>t.every(t=>!e.startsWith(t+"<",9))).filter(e=>this.getAllowedCommands().some(t=>e.startsWith(t+"<",9)))},async renderHeading(){const e=await this.generateHeadingTemplate();Ya(e,this.el.querySelector(".chat-head-chatroom"))},renderBottomPanel(){const e=this.el.querySelector(".bottom-panel"),t=this.model.session.get("connection_status")===rl.ROOMSTATUS.ENTERED,n=t&&!(this.model.features.get("moderated")&&"visitor"===this.model.getOwnRole());Ya(Aw({can_edit:n,entered:t}),e),t&&n&&(this.renderMessageForm(),this.initMentionAutoComplete())},onStartResizeOccupants(e){this.resizing=!0,this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseup",this.onMouseUp);const t=this.el.querySelector("converse-muc-sidebar"),n=window.getComputedStyle(t);this.width=parseInt(n.width.replace(/px$/,""),10),this.prev_pageX=e.pageX},onMouseMove(e){if(this.resizing){e.preventDefault();const t=this.prev_pageX-e.pageX;this.resizeSidebarView(t,e.pageX),this.prev_pageX=e.pageX}},onMouseUp(e){if(this.resizing){e.preventDefault(),this.resizing=!1,this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseup",this.onMouseUp);const t=this.el.querySelector("converse-muc-sidebar").getBoundingClientRect(),n={occupants_width:this.calculateSidebarWidth(t,0)};Uc.connection.connected?this.model.save(n):this.model.set(n)}},resizeSidebarView(e,t){const n=this.el.querySelector("converse-muc-sidebar"),r=n.getBoundingClientRect();if(this.is_minimum)this.is_minimum=r.left<t;else if(this.is_maximum)this.is_maximum=r.left>t;else{const t=this.calculateSidebarWidth(r,e);n.style.flex="0 0 "+t+"px"}},calculateSidebarWidth(e,t){let n=e.width+t;const r=this.el.clientWidth;return n<.2*r?(n=.2*r,this.is_minimum=!0):n>.75*r?(n=.75*r,this.is_maximum=!0):r-n<250?(n=r-250,this.is_maximum=!0):(this.is_maximum=!1,this.is_minimum=!1),n},getAutoCompleteList(){return this.model.getAllKnownNicknames().map(e=>({label:e,value:"@".concat(e)}))},getAutoCompleteListItem(e,t){t=t.trim();const n=document.createElement("li");if(n.setAttribute("aria-selected","false"),Vc.settings.get("muc_mention_autocomplete_show_avatar")){const t=document.createElement("img");let r="data:"+Uc.DEFAULT_IMAGE_TYPE+";base64,"+Uc.DEFAULT_IMAGE;if(Uc.vcards){const t=Uc.vcards.findWhere({nickname:e});t&&(r="data:"+t.get("image_type")+";base64,"+t.get("image"))}t.setAttribute("src",r),t.setAttribute("width","22"),t.setAttribute("class","avatar avatar-autocomplete"),n.appendChild(t)}const r=new RegExp("("+t+")","ig");return(t?e.split(r):[e]).forEach(e=>{if(t&&e.match(r)){const t=document.createElement("mark");t.textContent=e,n.appendChild(t)}else n.appendChild(document.createTextNode(e))}),n},initMentionAutoComplete(){this.mention_auto_complete=new Uc.AutoComplete(this.el,{auto_first:!0,auto_evaluate:!1,min_chars:Vc.settings.get("muc_mention_autocomplete_min_chars"),match_current_word:!0,list:()=>this.getAutoCompleteList(),filter:"contains"==Vc.settings.get("muc_mention_autocomplete_filter")?Uc.FILTER_CONTAINS:Uc.FILTER_STARTSWITH,ac_triggers:["Tab","@"],include_triggers:[],item:this.getAutoCompleteListItem}),this.mention_auto_complete.on("suggestion-box-selectcomplete",()=>this.auto_completing=!1)},submitNickname(e){e.preventDefault();const t=e.target.nick.value.trim();t&&this.model.join(t)},onKeyDown(e){if(!this.mention_auto_complete.onKeyDown(e))return Uc.ChatBoxView.prototype.onKeyDown.call(this,e)},onKeyUp(e){return this.mention_auto_complete.evaluate(e),Uc.ChatBoxView.prototype.onKeyUp.call(this,e)},async onMessageRetractButtonClicked(e){const t=zd("Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.");if(e.mayBeRetracted()){const n=[zd("Are you sure you want to retract this message?")];Vc.settings.get("show_retraction_warning")&&(n[1]=t),await Vc.confirm(zd("Confirm"),n)&&this.model.retractOwnMessage(e)}else if(await e.mayBeModerated())if("me"===e.get("sender")){let n=[zd("Are you sure you want to retract this message?")];Vc.settings.get("show_retraction_warning")&&(n=[n[0],t,n[1]]),await Vc.confirm(zd("Confirm"),n)&&this.retractOtherMessage(e)}else{let n=[zd("You are about to retract this message."),zd("You may optionally include a message, explaining the reason for the retraction.")];Vc.settings.get("show_retraction_warning")&&(n=[n[0],t,n[1]]);const r=await Vc.prompt(zd("Message Retraction"),n,zd("Optional reason"));!1!==r&&this.retractOtherMessage(e,r)}else{const e=zd("Sorry, you're not allowed to retract this message");Vc.alert("error",zd("Error"),e)}},async retractOtherMessage(e,t){const n=await this.model.retractOtherMessage(e,t);if(null===n){const e=zd("A timeout occurred while trying to retract the message");Vc.alert("error",zd("Error"),e),zn(e,Dw.LogLevel.WARN)}else if(zw.isErrorStanza(n)){const e=zd("Sorry, you're not allowed to retract this message.");Vc.alert("error",zd("Error"),e),zn(e,Dw.LogLevel.WARN),zn(n,Dw.LogLevel.WARN)}},showModeratorToolsModal(e){if(!this.verifyRoles(["moderator"]))return;let t=Vc.modal.get($y.id);if(t)t.model.set("affiliation",e);else{const n=new qo({affiliation:e});t=Vc.modal.create($y,{model:n,_converse:Uc,chatroomview:this})}t.show()},showRoomDetailsModal(e){e.preventDefault(),Vc.modal.show(dw,{model:this.model},e)},showOccupantDetailsModal(e,t){e.preventDefault(),Vc.modal.show(Vy,{model:t.occupant},e)},showChatStateNotification(e){if("me"!==e.get("sender"))return Uc.ChatBoxView.prototype.showChatStateNotification.apply(this,arguments)},shouldShowSidebar(){return!this.model.get("hidden_occupants")&&this.model.session.get("connection_status")===rl.ROOMSTATUS.ENTERED},onSidebarToggle(){var e;this.renderToolbar(),null===(e=this.el.querySelector(".occupants"))||void 0===e||e.setVisibility()},onOccupantAffiliationChanged(e){e.get("jid")===Uc.bare_jid&&this.renderHeading()},onOccupantRoleChanged(e){e.get("jid")===Uc.bare_jid&&this.renderBottomPanel()},getHeadingButtons(e){const t=[];t.push({i18n_text:zd("Details"),i18n_title:zd("Show more information about this groupchat"),handler:e=>this.showRoomDetailsModal(e),a_class:"show-muc-details-modal",icon_class:"fa-info-circle",name:"details"}),"owner"===this.model.getOwnAffiliation()&&t.push({i18n_text:zd("Configure"),i18n_title:zd("Configure this groupchat"),handler:e=>this.getAndRenderConfigurationForm(e),a_class:"configure-chatroom-button",icon_class:"fa-wrench",name:"configure"}),this.model.invitesAllowed()&&t.push({i18n_text:zd("Invite"),i18n_title:zd("Invite someone to join this groupchat"),handler:e=>this.showInviteModal(e),a_class:"open-invite-modal",icon_class:"fa-user-plus",name:"invite"});const n=this.model.get("subject");if(n&&n.text&&t.push({i18n_text:zd(e?"Show topic":"Hide topic"),i18n_title:zd(e?"Show the topic message in the heading":"Hide the topic in the heading"),handler:e=>this.toggleTopic(e),a_class:"hide-topic",icon_class:"fa-minus-square",name:"toggle-topic"}),this.model.session.get("connection_status")===rl.ROOMSTATUS.ENTERED){const e=this.getAllowedCommands();e.includes("modtools")&&t.push({i18n_text:zd("Moderate"),i18n_title:zd("Moderate this groupchat"),handler:()=>this.showModeratorToolsModal(),a_class:"moderate-chatroom-button",icon_class:"fa-user-cog",name:"moderate"}),e.includes("destroy")&&t.push({i18n_text:zd("Destroy"),i18n_title:zd("Remove this groupchat"),handler:e=>this.destroy(e),a_class:"destroy-chatroom-button",icon_class:"fa-trash",name:"destroy"})}return Vc.settings.get("singleton")||t.push({i18n_text:zd("Leave"),i18n_title:zd("Leave and close this groupchat"),handler:async e=>{e.stopPropagation();const t=[zd("Are you sure you want to leave this groupchat?")];await Vc.confirm(zd("Confirm"),t)&&this.close(e)},a_class:"close-chatbox-button",standalone:"overlayed"===Vc.settings.get("view_mode"),icon_class:"fa-sign-out-alt",name:"signout"}),Uc.api.hook("getHeadingButtons",this,t)},async generateHeadingTemplate(){const e=await this.model.isSubjectHidden(),t=await this.getHeadingButtons(e),n=t.filter(e=>e.standalone),r=t.filter(e=>!e.standalone);return yw(Object.assign(this.model.toJSON(),{_converse:Uc,subject_hidden:e,dropdown_btns:r.map(e=>this.getHeadingDropdownItem(e)),standalone_btns:n.map(e=>this.getHeadingStandaloneButton(e)),title:this.model.getDisplayName()}))},toggleTopic(){this.model.toggleSubjectHiddenState()},showInviteModal(e){e.preventDefault(),Vc.modal.show(fy,{model:new qo,chatroomview:this},e)},afterShown(){zw.isPersistableModel(this.model)&&this.model.clearUnreadMsgCounter(),this.scrollDown()},onConnectionStatusChanged(){const e=this.model.session.get("connection_status");e===rl.ROOMSTATUS.NICKNAME_REQUIRED?this.renderNicknameForm():e===rl.ROOMSTATUS.PASSWORD_REQUIRED?this.renderPasswordForm():e===rl.ROOMSTATUS.CONNECTING?this.showSpinner():e===rl.ROOMSTATUS.ENTERED?(this.renderBottomPanel(),this.hideSpinner(),this.maybeFocus()):e===rl.ROOMSTATUS.DISCONNECTED?this.showDisconnectMessage():e===rl.ROOMSTATUS.DESTROYED&&this.showDestroyedMessage()},getToolbarOptions(){return Object.assign(Uc.ChatBoxView.prototype.getToolbarOptions.apply(this,arguments),{is_groupchat:!0,label_hide_occupants:zd("Hide the list of participants"),show_occupants_toggle:Uc.visible_toolbar_buttons.toggle_occupants})},async close(){return this.hide(),Uc.router.history.getFragment()==="converse/room?jid="+this.model.get("jid")&&Uc.router.navigate(""),await this.model.leave(),Uc.ChatBoxView.prototype.close.apply(this,arguments)},hideOccupants(e){e&&(e.preventDefault(),e.stopPropagation()),this.model.save({hidden_occupants:!0}),this.scrollDown()},verifyRoles(e,t,n=!0){if(!Array.isArray(e))throw new TypeError("roles must be an Array");if(!e.length)return!0;if(t=t||this.model.occupants.findWhere({jid:Uc.bare_jid})){const n=t.get("role");if(e.includes(n))return!0}if(n){const e=zd("Forbidden: you do not have the necessary role in order to do that.");this.model.createMessage({message:e,type:"error"})}return!1},verifyAffiliations(e,t,n=!0){if(!Array.isArray(e))throw new TypeError("affiliations must be an Array");if(!e.length)return!0;if(t=t||this.model.occupants.findWhere({jid:Uc.bare_jid})){const n=t.get("affiliation");if(e.includes(n))return!0}if(n){const e=zd("Forbidden: you do not have the necessary affiliation in order to do that.");this.model.createMessage({message:e,type:"error"})}return!1},validateRoleOrAffiliationChangeArgs(e,t){if(!t){const t=zd('Error: the "%1$s" command takes two arguments, the user\'s nickname and optionally a reason.',e);return this.model.createMessage({message:t,type:"error"}),!1}return!0},getNickOrJIDFromCommandArgs(e){if(zw.isValidJID(e.trim()))return e.trim();e.startsWith("@")||(e="@"+e);const[t,n]=this.model.parseTextForReferences(e);if(!n.length){const e=zd("Error: couldn't find a groupchat participant based on your arguments");return void this.model.createMessage({message:e,type:"error"})}if(n.length>1){const e=zd("Error: found multiple groupchat participant based on your arguments");return void this.model.createMessage({message:e,type:"error"})}const r=n.pop().value,i=e.split(r,2)[1];if(!i||i.startsWith(" "))return r;{const e=zd("Error: couldn't find a groupchat participant based on your arguments");this.model.createMessage({message:e,type:"error"})}},setAffiliation(e,t,n){const r=$w[e];if(!r)throw Error("ChatRoomView#setAffiliation called with invalid command: ".concat(e));if(!this.verifyAffiliations(n))return!1;if(!this.validateRoleOrAffiliationChangeArgs(e,t))return!1;const i=this.getNickOrJIDFromCommandArgs(t);if(!i)return!1;let o;const s=t.split(i,2)[1].trim(),a=this.model.getOccupant(i);if(a)o=a.get("jid");else{if(!zw.isValidJID(i)){const e=zd("Couldn't find a participant with that nickname. They might have left the groupchat.");return void this.model.createMessage({message:e,type:"error"})}o=i}const c={jid:o,reason:s};a&&Vc.settings.get("auto_register_muc_nickname")&&(c.nick=a.get("nick")),this.model.setAffiliation(r,[c]).then(()=>this.model.occupants.fetchMembers()).catch(e=>this.onCommandError(e))},getReason:e=>e.includes(",")?e.slice(e.indexOf(",")+1).trim():null,setRole(e,t,n=[],r=[]){const i=Uw[e];if(!i)throw Error("ChatRoomView#setRole called with invalid command: ".concat(e));if(!this.verifyAffiliations(n)||!this.verifyRoles(r))return!1;if(!this.validateRoleOrAffiliationChangeArgs(e,t))return!1;const o=this.getNickOrJIDFromCommandArgs(t);if(!o)return!1;const s=t.split(o,2)[1].trim(),a=this.model.getOccupant(o);return this.model.setRole(a,i,s,void 0,this.onCommandError.bind(this)),!0},onCommandError(e){zn.fatal(e);const t=zd("Sorry, an error happened while running the command.")+" "+zd("Check your browser's developer console for details.");this.model.createMessage({message:t,type:"error"})},getAllowedCommands(){let e=["clear","help","me","nick","register"];(this.model.config.get("changesubject")||["owner","admin"].includes(this.model.getOwnAffiliation()))&&(e=[...e,"subject","topic"]);const t=this.model.occupants.findWhere({jid:Uc.bare_jid});return this.verifyAffiliations(["owner"],t,!1)?e=e.concat(Fw).concat(Bw):this.verifyAffiliations(["admin"],t,!1)&&(e=e.concat(Bw)),this.verifyRoles(["moderator"],t,!1)?e=e.concat(qw).concat(Hw):this.verifyRoles(["visitor","participant","moderator"],t,!1)||(e=e.concat(Hw)),e.sort(),Array.isArray(Vc.settings.get("muc_disable_slash_commands"))?e.filter(e=>!Vc.settings.get("muc_disable_slash_commands").includes(e)):e},async destroy(){const e=[zd("Are you sure you want to destroy this groupchat?")];let t=[{name:"challenge",label:zd("Please enter the XMPP address of this groupchat to confirm"),challenge:this.model.get("jid"),placeholder:zd("name@example.org"),required:!0},{name:"reason",label:zd("Optional reason for destroying this groupchat"),placeholder:zd("Reason")},{name:"newjid",label:zd("Optional XMPP address for a new groupchat that replaces this one"),placeholder:zd("replacement@example.org")}];try{var n,r;t=await Vc.confirm(zd("Confirm"),e,t);const i=null===(n=t.filter(e=>"reason"===e.name).pop())||void 0===n?void 0:n.value,o=null===(r=t.filter(e=>"newjid"===e.name).pop())||void 0===r?void 0:r.value;return this.model.sendDestroyIQ(i,o).then(()=>this.close())}catch(e){zn.error(e)}},parseMessageForCommands(e){if(Vc.settings.get("muc_disable_slash_commands")&&!Array.isArray(Vc.settings.get("muc_disable_slash_commands")))return Uc.ChatBoxView.prototype.parseMessageForCommands.apply(this,arguments);const t=((e=e.replace(/^\s*/,"")).match(/^\/([a-zA-Z]*) ?/)||[""]).pop().toLowerCase();if(!t)return!1;const n=e.slice(("/"+t).length+1).trim();if(!this.getAllowedCommands().includes(t))return!1;switch(t){case"admin":this.setAffiliation(t,n,["owner"]);break;case"ban":this.setAffiliation(t,n,["admin","owner"]);break;case"modtools":this.showModeratorToolsModal(n);break;case"deop":this.setRole(t,n,["admin","owner"]);break;case"destroy":if(!this.verifyAffiliations(["owner"]))break;this.destroy().catch(e=>this.onCommandError(e));break;case"help":this.model.set({show_help_messages:!0});break;case"kick":case"mute":this.setRole(t,n,[],["moderator"]);break;case"member":this.setAffiliation(t,n,["admin","owner"]);break;case"nick":if(!this.verifyRoles(["visitor","participant","moderator"]))break;if(0===n.length){const e=zd('Your nickname is "%1$s"',this.model.get("nick"));this.model.createMessage({message:e,type:"error"})}else{const e=Dw.getBareJidFromJid(this.model.get("jid"));Vc.send(Lw({from:Uc.connection.jid,to:"".concat(e,"/").concat(n),id:zw.getUniqueId()}).tree())}break;case"owner":this.setAffiliation(t,n,["owner"]);break;case"op":this.setRole(t,n,["admin","owner"]);break;case"register":n.length>1?this.model.createMessage({message:zd("Error: invalid number of arguments"),type:"error"}):this.model.registerNickname().then(e=>{e&&this.model.createMessage({message:e,type:"error"})});break;case"revoke":this.setAffiliation(t,n,["admin","owner"]);break;case"topic":case"subject":this.model.setSubject(n);break;case"voice":this.setRole(t,n,[],["moderator"]);break;default:return Uc.ChatBoxView.prototype.parseMessageForCommands.apply(this,arguments)}return!0},renderConfigurationForm(e){if(this.hideChatRoomContents(),this.model.save("config_stanza",e.outerHTML),!this.config_form){this.config_form=new Uc.MUCConfigForm({model:this.model,chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.config_form.el)}zw.showElement(this.config_form.el)},renderNicknameForm(){const e=(e=>{const t=zd("Nickname"),n=zd("Enter groupchat"),r=Vc.settings.get("muc_show_logs_before_join")?zd("Choose a nickname to enter"):zd("Please choose your nickname");return Za(Rw(),r,e.nickname_validation_message,e.nick||"",e.nickname_validation_message?"error":"",t,n)})(this.model.toJSON());if(Vc.settings.get("muc_show_logs_before_join")){const t=this.el.querySelector(".muc-bottom-panel");Ya(e,t),zw.addClass("muc-bottom-panel--nickname",t)}else{const t=this.el.querySelector(".muc-nickname-form"),n=zw.getElementFromTemplateResult(e);if(t)Pw(".spinner",this.el).forEach(zw.removeElement),t.outerHTML=n.outerHTML;else{this.hideChatRoomContents(),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",n)}}zw.safeSave(this.model.session,{connection_status:rl.ROOMSTATUS.NICKNAME_REQUIRED})},closeForm(){Pw(".chatroom-form-container",this.el).forEach(e=>zw.addClass("hidden",e)),this.renderAfterTransition()},getAndRenderConfigurationForm(){this.config_form&&zw.isVisible(this.config_form.el)?this.closeForm():(this.showSpinner(),this.model.fetchRoomConfiguration().then(e=>this.renderConfigurationForm(e)).catch(e=>zn.error(e)))},hideChatRoomContents(){const e=this.el.querySelector(".chatroom-body");null!==e&&[].forEach.call(e.children,e=>e.classList.add("hidden"))},renderPasswordForm(){this.hideChatRoomContents();const e=this.model.get("password_validation_message");if(this.model.save("password_validation_message",void 0),this.password_form)this.password_form.model.set("validation_message",e);else{this.password_form=new Uc.MUCPasswordForm({model:new qo({validation_message:e}),chatroomview:this}),this.el.querySelector(".chatroom-body").insertAdjacentElement("beforeend",this.password_form.el)}zw.showElement(this.password_form.el),this.model.session.save("connection_status",rl.ROOMSTATUS.PASSWORD_REQUIRED)},showDestroyedMessage(){zw.hideElement(this.el.querySelector(".chat-area")),zw.hideElement(this.el.querySelector(".occupants")),Pw(".spinner",this.el).forEach(zw.removeElement);const e=this.model.get("destroyed_reason"),t=this.model.get("moved_jid");this.model.save({destroyed_reason:void 0,moved_jid:void 0});const n=this.el.querySelector(".disconnect-container");Ya(kw(t,e),n);const r=n.querySelector("a.switch-chat");r&&r.addEventListener("click",async e=>{e.preventDefault(),(await Vc.rooms.get(t,null,!0)).maybeShow(!0),this.model.destroy()}),zw.showElement(n)},showDisconnectMessage(){const e=this.model.get("disconnection_message");if(!e)return;zw.hideElement(this.el.querySelector(".chat-area")),zw.hideElement(this.el.querySelector(".occupants")),Pw(".spinner",this.el).forEach(zw.removeElement);const t=[e],n=this.model.get("disconnection_actor");n&&t.push(zd("This action was done by %1$s.",n));const r=this.model.get("disconnection_reason");r&&t.push(zd('The reason given is: "%1$s".',r)),this.model.save({disconnection_message:void 0,disconnection_reason:void 0,disconnection_actor:void 0});const i=this.el.querySelector(".disconnect-container");Ya((e=>Za(Iw(),e[0],e.slice(1).map(e=>Za(Nw(),e))))(t),i),zw.showElement(i)},onOccupantAdded(e){e.get("jid")===Uc.bare_jid&&(this.renderHeading(),this.renderBottomPanel())},getPreviousJoinOrLeaveNotification(e,t){const n=(new Date).toISOString().split("T")[0];for(;null!==e;){var r;if(!e.classList.contains("chat-info"))return;const i=e.getAttribute("data-isodate");if(i&&i.split("T")[0]!==n)return;const o=(null===(r=e)||void 0===r?void 0:r.dataset)||{};if(o.join===t||o.leave===t||o.leavejoin===t||o.joinleave===t)return e;e=e.previousElementSibling}},renderAfterTransition(){const e=this.model.session.get("connection_status");if(e==rl.ROOMSTATUS.NICKNAME_REQUIRED)this.renderNicknameForm();else if(e==rl.ROOMSTATUS.PASSWORD_REQUIRED)this.renderPasswordForm();else if(e==rl.ROOMSTATUS.ENTERED){var t;this.hideChatRoomContents(),zw.showElement(this.el.querySelector(".chat-area")),null===(t=this.el.querySelector(".occupants"))||void 0===t||t.setVisibility(),this.scrollDown()}},showSpinner(){Pw(".spinner",this.el).forEach(zw.removeElement),this.hideChatRoomContents(),this.el.querySelector(".chatroom-body").insertAdjacentElement("afterbegin",zw.getElementFromTemplateResult(fp()))},hideSpinner(){const e=this.el.querySelector(".spinner");return null!==e&&(zw.removeElement(e),this.renderAfterTransition()),this}},Gw={roomviews:{get(e){if(Array.isArray(e)){return Vc.chatviews.get(e).filter(e=>e.model.get("type")===Uc.CHATROOMS_TYPE)}{const t=Vc.chatviews.get(e);return t.model.get("type")===Uc.CHATROOMS_TYPE?t:null}},close(e){let t;return void 0===e?t=Uc.chatboxviews:"string"==typeof e?t=[Uc.chatboxviews.get(e)].filter(e=>e):Array.isArray(e)&&(t=e.map(e=>Uc.chatboxviews.get(e))),Promise.all(t.map(e=>e.is_chatroom&&e.model&&e.close()))}}};function Vw(){const e=Yw(['<div class="form-group">',"</div>"]);return Vw=function(){return e},e}function Jw(){const e=Yw(['<label class="roomid-policy-error">',"</label>"]);return Jw=function(){return e},e}function Xw(){const e=Yw(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="add-chatroom-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    <form class="converse-form add-chatroom">\n                        <div class="form-group">\n                            <label for="chatroom">',":</label>\n                            ",'\n                            <input type="text" required="required" name="chatroom" class="form-control roomjid-input" placeholder="','"/>\n                        </div>\n                        ',"\n                        ",'\n                        <input type="submit" class="btn btn-primary" name="join" value="','" ?disabled=',">\n                    </form>\n                </div>\n            </div>\n        </div>\n    "]);return Xw=function(){return e},e}function Qw(){const e=Yw(['\n        <div class="form-group" >\n            <label for="nickname">',':</label>\n            <input type="text" title="','" required="required" name="nickname" value="','" class="form-control"/>\n        </div>\n    ']);return Qw=function(){return e},e}function Yw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Kw=e=>{const t=zd("Join"),n=zd("Enter a new Groupchat");return Za(Xw(),n,mf,e.label_room_address,e.muc_roomid_policy_error_msg?Za(Jw(),e.muc_roomid_policy_error_msg):"",e.chatroom_placeholder,e.muc_roomid_policy_hint?Za(Vw(),Kp(Qp.a.filterXSS(e.muc_roomid_policy_hint,{whiteList:{b:[],br:[],em:[]}}))):"",e._converse.locked_muc_nickname?"":(e=>{const t=zd("Nickname"),n=zd("This field is required");return Za(Qw(),t,n,e.nick||"")})(e),t||"",e.muc_roomid_policy_error_msg)},Zw=n(24);const eS=rl.env.utils;var tS=df.extend({persistent:!0,id:"add-chatroom-modal",events:{"submit form.add-chatroom":"openChatRoom","keyup .roomjid-input":"checkRoomidPolicy","change .roomjid-input":"checkRoomidPolicy"},initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:muc_domain",this.render),this.muc_roomid_policy_error_msg=null},toHTML(){let e="";if(!Vc.settings.get("locked_muc_domain")){const t=this.model.get("muc_domain")||Vc.settings.get("muc_domain");e=t?"name@".concat(t):zd("name@conference.example.org")}return Kw(Object.assign(this.model.toJSON(),{_converse:Uc,label_room_address:Vc.settings.get("muc_domain")?zd("Groupchat name"):zd("Groupchat address"),chatroom_placeholder:e,muc_roomid_policy_error_msg:this.muc_roomid_policy_error_msg,muc_roomid_policy_hint:Vc.settings.get("muc_roomid_policy_hint")}))},afterRender(){this.el.addEventListener("shown.bs.modal",()=>{this.el.querySelector('input[name="chatroom"]').focus()},!1)},parseRoomDataFromEvent(e){const t=new FormData(e),n=t.get("chatroom");let r;if(Vc.settings.get("locked_muc_nickname")){if(r=Uc.getDefaultMUCNickname(),!r)throw new Error("Using locked_muc_nickname but no nickname found!")}else r=t.get("nickname").trim();return{jid:n,nick:r}},openChatRoom(e){e.preventDefault();const t=this.parseRoomDataFromEvent(e.target);let n;""===t.nick&&(t.nick=void 0),Vc.settings.get("locked_muc_domain")||Vc.settings.get("muc_domain")&&!eS.isValidJID(t.jid)?n="".concat(Zw.b.escapeNode(t.jid),"@").concat(Vc.settings.get("muc_domain")):(n=t.jid,this.model.setDomain(n)),Vc.rooms.open(n,Object.assign(t,{jid:n}),!0),this.modal.hide(),e.target.reset()},checkRoomidPolicy(){if(Vc.settings.get("muc_roomid_policy")&&Vc.settings.get("muc_domain")){let e=this.el.querySelector(".roomjid-input").value;!rl.locked_muc_domain&&eS.isValidJID(e)||(e="".concat(Zw.b.escapeNode(e),"@").concat(Vc.settings.get("muc_domain")));const t=Zw.b.getNodeFromJid(e),n=Zw.b.getDomainFromJid(e);Vc.settings.get("muc_domain")!==n||Vc.settings.get("muc_roomid_policy").test(t)?this.muc_roomid_policy_error_msg=null:this.muc_roomid_policy_error_msg=zd("Groupchat id is invalid."),this.render()}}});function nS(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="d-flex controlbox-padded">\n        <span class="w-100 controlbox-heading controlbox-heading--groupchats">','</span>\n        <a class="controlbox-heading__btn show-list-muc-modal fa fa-list-ul" title="','" data-toggle="modal" data-target="#muc-list-modal"></a>\n        <a class="controlbox-heading__btn show-add-muc-modal fa fa-plus" title="','" data-toggle="modal" data-target="#add-chatrooms-modal"></a>\n    </div>\n    <div class="list-container list-container--openrooms hidden"></div>\n    <div class="list-container list-container--bookmarks hidden"></div>']);return nS=function(){return e},e}function rS(){const e=cS(['<li class="list-group-item active">',"</li>"]);return rS=function(){return e},e}function iS(){const e=cS(['<li class="list-group-item"> '," </li>"]);return iS=function(){return e},e}function oS(){const e=cS(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="muc-list-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body d-flex flex-column">\n                    <span class="modal-alert"></span>\n                    ','\n                    <ul class="available-chatrooms list-group">\n                        ',"\n                        ","\n                        ",'\n                    </ul>\n                </div>\n                <div class="modal-footer">',"</div>\n            </div>\n        </div>\n    "]);return oS=function(){return e},e}function sS(){const e=cS(['\n        <li class="room-item list-group-item">\n            <div class="available-chatroom d-flex flex-row">\n                <a class="open-room available-room w-100"\n                @click=','\n                data-room-jid="','"\n                data-room-name="','"\n                title="','"\n                href="#">','</a>\n                <a class="right room-info icon-room-info"\n                @click=','\n                data-room-jid="','"\n                title="','"\n                href="#"></a>\n            </div>\n        </li>\n    ']);return sS=function(){return e},e}function aS(){const e=cS(['\n        <form class="converse-form list-chatrooms"\n            @submit=','>\n            <div class="form-group">\n                <label for="chatroom">',':</label>\n                <input type="text"\n                    @change=','\n                    value="','"\n                    required="required"\n                    name="server"\n                    class="form-control"\n                    placeholder="','"/>\n            </div>\n            <input type="submit" class="btn btn-primary" name="list" value="','"/>\n        </form>\n    ']);return aS=function(){return e},e}function cS(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var lS=e=>{const t=zd("Query for Groupchats");return Za(oS(),t,mf,e.show_form?(e=>{const t=zd("Show groupchats"),n=zd("Server address");return Za(aS(),e.submitForm,n,e.setDomainFromEvent,e.muc_domain||"",e.server_placeholder,t)})(e):"",e.loading_items?Za(iS(),fp()):"",e.feedback_text?Za(rS(),e.feedback_text):"",qp(e.items,e=>e.jid,t=>((e,t)=>{const n=zd("Show more information on this groupchat"),r=zd("Click to open this groupchat");return Za(sS(),e.openRoom,t.jid,t.name,r,t.name||t.jid,e.toggleRoomInfo,t.jid,n)})(e,t)),gf)},uS=n(179),dS=n.n(uS);const hS=rl.env.utils;function fS(e){const t=hS.ancestor(e.target,".room-item"),n=t.querySelector("div.room-info");n?(hS.slideIn(n).then(hS.removeElement),t.querySelector("a.room-info").classList.remove("selected")):(t.insertAdjacentElement("beforeend",hS.getElementFromTemplateResult(fp())),Vc.disco.info(e.target.getAttribute("data-room-jid"),null).then(e=>function(e,t){var n,r;e.querySelector("span.spinner").remove(),e.querySelector("a.room-info").classList.add("selected"),e.insertAdjacentHTML("beforeEnd",dS()({jid:t.getAttribute("from"),desc:null===(n=Kg(mr()('field[var="muc#roominfo_description"] value',t)))||void 0===n?void 0:n.textContent,occ:null===(r=Kg(mr()('field[var="muc#roominfo_occupants"] value',t)))||void 0===r?void 0:r.textContent,hidden:mr()('feature[var="muc_hidden"]',t).length,membersonly:mr()('feature[var="muc_membersonly"]',t).length,moderated:mr()('feature[var="muc_moderated"]',t).length,nonanonymous:mr()('feature[var="muc_nonanonymous"]',t).length,open:mr()('feature[var="muc_open"]',t).length,passwordprotected:mr()('feature[var="muc_passwordprotected"]',t).length,persistent:mr()('feature[var="muc_persistent"]',t).length,publicroom:mr()('feature[var="muc_publicroom"]',t).length,semianonymous:mr()('feature[var="muc_semianonymous"]',t).length,temporary:mr()('feature[var="muc_temporary"]',t).length,unmoderated:mr()('feature[var="muc_unmoderated"]',t).length,label_desc:zd("Description:"),label_jid:zd("Groupchat Address (JID):"),label_occ:zd("Participants:"),label_features:zd("Features:"),label_requires_auth:zd("Requires authentication"),label_hidden:zd("Hidden"),label_requires_invite:zd("Requires an invitation"),label_moderated:zd("Moderated"),label_non_anon:zd("Non-anonymous"),label_open_room:zd("Open"),label_permanent_room:zd("Permanent"),label_public:zd("Public"),label_semi_anon:zd("Semi-anonymous"),label_temp_room:zd("Temporary"),label_unmoderated:zd("Unmoderated")}))}(t,e)).catch(e=>zn.error(e)))}var pS=df.extend({id:"muc-list-modal",persistent:!0,initialize(){this.items=[],this.loading_items=!1,df.prototype.initialize.apply(this,arguments),Vc.settings.get("muc_domain")&&!this.model.get("muc_domain")&&this.model.save("muc_domain",Vc.settings.get("muc_domain")),this.listenTo(this.model,"change:muc_domain",this.onDomainChange),this.el.addEventListener("shown.bs.modal",()=>Vc.settings.get("locked_muc_domain")?this.updateRoomsList():this.el.querySelector('input[name="server"]').focus())},toHTML(){const e=this.model.get("muc_domain")||Vc.settings.get("muc_domain");return lS(Object.assign(this.model.toJSON(),{show_form:!Vc.settings.get("locked_muc_domain"),server_placeholder:e||zd("conference.example.org"),items:this.items,loading_items:this.loading_items,openRoom:e=>this.openRoom(e),setDomainFromEvent:e=>this.setDomainFromEvent(e),submitForm:e=>this.showRooms(e),toggleRoomInfo:e=>this.toggleRoomInfo(e)}))},openRoom(e){e.preventDefault();const t=e.target.getAttribute("data-room-jid"),n=e.target.getAttribute("data-room-name");this.modal.hide(),Vc.rooms.open(t,{name:n},!0)},toggleRoomInfo(e){e.preventDefault(),fS(e)},onDomainChange(){Vc.settings.get("auto_list_rooms")&&this.updateRoomsList()},onRoomsFound(e){this.loading_items=!1;const t=e?mr()("query item",e):[];return t.length?(this.model.set({feedback_text:zd("Groupchats found")},{silent:!0}),this.items=t.map(ps.getAttributes)):(this.items=[],this.model.set({feedback_text:zd("No groupchats found")},{silent:!0})),this.render(),!0},updateRoomsList(){const e=Object(Zw.a)({to:this.model.get("muc_domain"),from:Uc.connection.jid,type:"get"}).c("query",{xmlns:Zw.b.NS.DISCO_ITEMS});Vc.sendIQ(e).then(e=>this.onRoomsFound(e)).catch(()=>this.onRoomsFound())},showRooms(e){e.preventDefault(),this.loading_items=!0,this.render();const t=new FormData(e.target);this.model.setDomain(t.get("server")),this.updateRoomsList()},setDomainFromEvent(e){this.model.setDomain(e.target.value)},setNick(e){this.model.save({nick:e.target.value})}});const gS=rl.env.utils,mS=eh.extend({tagName:"div",className:"controlbox-section",id:"chatrooms",events:{"click a.controlbox-heading__btn.show-add-muc-modal":"showAddRoomModal","click a.controlbox-heading__btn.show-list-muc-modal":"showMUCListModal"},toHTML(){return e={heading_chatrooms:zd("Groupchats"),title_new_room:zd("Add a new groupchat"),title_list_rooms:zd("Query for groupchats")},Za(nS(),e.heading_chatrooms,e.title_list_rooms,e.title_new_room);var e},showAddRoomModal(e){Vc.modal.show(tS,{model:this.model},e)},showMUCListModal(e){Vc.modal.show(pS,{model:this.model},e)}}),vS={renderRoomsPanel(){if(this.roomspanel&&gS.isInDOM(this.roomspanel.el))return this.roomspanel;const e="converse.roomspanel".concat(Uc.bare_jid);return this.roomspanel=new Uc.RoomsPanel({model:new(Uc.RoomsPanelModel.extend({id:e,browserStorage:Uc.createStore(e)}))}),this.roomspanel.model.fetch(),this.el.querySelector(".controlbox-pane").insertAdjacentElement("beforeEnd",this.roomspanel.render().el),Vc.trigger("roomsPanelRendered"),this.roomspanel},getRoomsPanel(){return this.roomspanel&&gS.isInDOM(this.roomspanel.el)?this.roomspanel:this.renderRoomsPanel()}},{Strophe:_S}=rl.env;function bS(e,t){t.getRoomsPanel().model.save("muc_domain",_S.getDomainFromJid(e))}function yS(e){e.model.get("connected")&&(e.getRoomsPanel().model.get("muc_domain")||(void 0===Vc.settings.get("muc_domain")?function(e){function t(t){t&&t.get("var")===_S.NS.MUC&&t.entity.getIdentity("conference","text").then(n=>{n&&bS(t.get("from"),e)})}Vc.waitUntil("discoInitialized").then(()=>{Vc.listen.on("serviceDiscovered",t),Uc.disco_entities.each(e=>t(e.features.findWhere({var:_S.NS.MUC})))}).catch(e=>zn.error(e))}(e):bS(Vc.settings.get("muc_domain"),e)))}function wS(e){e.preventDefault(),Vc.rooms.open(e.target.href)}async function SS(e){const t=Uc.chatboxviews;if(!t.get(e.get("id"))&&e.get("type")===Uc.CHATROOMS_TYPE&&e.isValid())return await e.initialized,t.add(e.get("id"),new Uc.ChatRoomView({model:e}))}rl.plugins.add("converse-muc-views",{dependencies:["converse-autocomplete","converse-modal","converse-controlbox","converse-chatview"],overrides:{ControlBoxView:{renderControlBoxPane(){this.__super__.renderControlBoxPane.apply(this,arguments),Vc.settings.get("allow_muc")&&this.renderRoomsPanel()}}},initialize(){const{_converse:e}=this;Vc.promises.add(["roomsPanelRendered"]),Vc.settings.extend({auto_list_rooms:!1,cache_muc_messages:!0,locked_muc_nickname:!1,modtools_disable_query:[],modtools_disable_assign:!1,muc_disable_slash_commands:!1,muc_mention_autocomplete_filter:"contains",muc_mention_autocomplete_min_chars:0,muc_mention_autocomplete_show_avatar:!0,muc_roomid_policy:null,muc_roomid_policy_hint:null,roomconfig_whitelist:[],show_retraction_warning:!0,visible_toolbar_buttons:{toggle_occupants:!0}}),e.MUCConfigForm=sy,e.MUCPasswordForm=cy,e.ChatRoomView=e.ChatBoxView.extend(Ww),e.RoomsPanel=mS,e.ControlBoxView&&Object.assign(e.ControlBoxView.prototype,vS),Object.assign(e.api,Gw),Vc.listen.on("chatBoxViewsInitialized",()=>{e.chatboxviews.delegate("click","a.open-chatroom",wS),e.chatboxes.on("add",SS)}),Vc.listen.on("clearSession",()=>{const t=e.chatboxviews.get("controlbox");t&&t.roomspanel&&(t.roomspanel.model.destroy(),t.roomspanel.remove(),delete t.roomspanel)}),Vc.listen.on("controlBoxInitialized",e=>{Vc.settings.get("allow_muc")&&(yS(e),e.model.on("change:connected",()=>yS(e)))})}});var xS={className:"chatbox headlines hidden",events:{"click .close-chatbox-button":"close","click .toggle-chatbox-button":"minimize","keypress textarea.chat-textarea":"onKeyDown"},async initialize(){this.initDebounced(),this.model.disable_mam=!0,this.listenTo(this.model,"change:hidden",e=>e.get("hidden")?this.hide():this.show()),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"show",this.show),this.render(),this.listenTo(this.model.messages,"add",this.onMessageAdded),this.listenTo(this.model.messages,"remove",this.renderChatHistory),this.listenTo(this.model.messages,"rendered",this.maybeScrollDown),this.listenTo(this.model.messages,"reset",this.renderChatHistory),await this.model.messages.fetched,this.insertIntoDOM(),this.model.maybeShow(),this.scrollDown(),Vc.trigger("headlinesBoxViewInitialized",this)},render(){this.el.setAttribute("id",this.model.get("box_id"));const e=Qv(Object.assign(this.model.toJSON(),{info_close:"",label_personal_message:"",show_send_button:!1,show_toolbar:!1,unread_msgs:""}));return Ya(e,this.el),this.content=this.el.querySelector(".chat-content"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this.renderChatContent(),this.renderHeading(),this},getNotifications:()=>[],getHeadingButtons(){const e=[];return Vc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:zd("Close"),i18n_title:zd("Close these announcements"),icon_class:"fa-times",name:"close",standalone:"overlayed"===Vc.settings.get("view_mode")}),Uc.api.hook("getHeadingButtons",this,e)},renderMessageForm:function(){},afterShown:function(){}};function ES(){const e=CS(['\n    <div class="list-container list-container--headline ','">\n        <div class="items-list rooms-list headline-list">\n            ',"\n        </div>\n    </div>\n"]);return ES=function(){return e},e}function AS(){const e=CS(['\n    <div class="list-item controlbox-padded d-flex flex-row"\n        data-headline-jid="','">\n    <a class="list-item-link open-headline available-room w-100"\n        data-headline-jid="','"\n        title="','" href="#">',"</a>\n    </div>\n"]);return AS=function(){return e},e}function CS(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var jS=e=>Za(ES(),e.headlineboxes.length?"":"hidden",e.headlineboxes.map(t=>(e=>Za(AS(),e.headlinebox.get("jid"),e.headlinebox.get("jid"),e.open_title,e.headlinebox.get("jid")))(Object.assign({headlinebox:t},e))));function TS(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="d-flex controlbox-padded ','">\n        <span class="w-100 controlbox-heading controlbox-heading--headline">',"</span>\n    </div>\n    ","\n"]);return TS=function(){return e},e}const OS=rl.env.utils,kS=eh.extend({tagName:"div",className:"controlbox-section",id:"headline",events:{"click .open-headline":"openHeadline"},initialize(){this.listenTo(this.model,"add",this.renderIfHeadline),this.listenTo(this.model,"remove",this.renderIfHeadline),this.listenTo(this.model,"destroy",this.renderIfHeadline),this.render(),this.insertIntoDOM()},toHTML(){return e={heading_headline:zd("Announcements"),headlineboxes:this.model.filter(e=>e.get("type")===Uc.HEADLINES_TYPE),open_title:zd("Click to open this server message")},Za(TS(),e.headlineboxes.length?"":"hidden",e.heading_headline,jS(e));var e},renderIfHeadline(e){return e&&e.get("type")===Uc.HEADLINES_TYPE&&this.render()},openHeadline(e){e.preventDefault();const t=e.target.getAttribute("data-headline-jid");Uc.chatboxes.get(t).maybeShow(!0)},insertIntoDOM(){const e=Uc.chatboxviews.get("controlbox");e&&e.el.querySelector(".controlbox-pane").insertAdjacentElement("beforeEnd",this.el)}}),NS={renderHeadlinesPanel(){return this.headlinepanel&&OS.isInDOM(this.headlinepanel.el)||(this.headlinepanel=new Uc.HeadlinesPanel({model:Uc.chatboxes}),Vc.trigger("headlinesPanelRendered")),this.headlinepanel}};
 /**
  * @module converse-headlines-view
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const Qy=Yc.env.utils,Yy=gv.extend({className:"chatbox headlines",events:{"click .close-chatbox-button":"close","click .toggle-chatbox-button":"minimize","keypress textarea.chat-textarea":"onKeyDown"},initialize(){this.initDebounced(),this.model.disable_mam=!0,this.listenTo(this.model.messages,"add",this.renderChatHistory),this.listenTo(this.model,"show",this.show),this.listenTo(this.model,"destroy",this.hide),this.listenTo(this.model,"change:minimized",this.onMinimizedChanged),this.render(),this.renderHeading(),this.updateAfterMessagesFetched(),this.insertIntoDOM().hide(),this.model.maybeShow(),qc.trigger("headlinesBoxViewInitialized",this)},render(){this.el.setAttribute("id",this.model.get("box_id"));const e=Lm(Object.assign(this.model.toJSON(),{info_close:"",label_personal_message:"",show_send_button:!1,show_toolbar:!1,unread_msgs:""}));return Wa(e,this.el),this.content=this.el.querySelector(".chat-content"),this.msgs_container=this.el.querySelector(".chat-content__messages"),this},getNotifications:()=>[],getHeadingButtons(){const e=[];return qc.settings.get("singleton")||e.push({a_class:"close-chatbox-button",handler:e=>this.close(e),i18n_text:dd("Close"),i18n_title:dd("Close these announcements"),icon_class:"fa-times",name:"close",standalone:"overlayed"===qc.settings.get("view_mode")}),Lc.api.hook("getHeadingButtons",this,e)},renderMessageForm:function(){},afterShown:function(){}}),Ky=jd.extend({tagName:"div",className:"controlbox-section",id:"headline",events:{"click .open-headline":"openHeadline"},initialize(){this.listenTo(this.model,"add",this.renderIfHeadline),this.listenTo(this.model,"remove",this.renderIfHeadline),this.listenTo(this.model,"destroy",this.renderIfHeadline),this.render(),this.insertIntoDOM()},toHTML(){return e={heading_headline:dd("Announcements"),headlineboxes:this.model.filter(e=>e.get("type")===Lc.HEADLINES_TYPE),open_title:dd("Click to open this server message")},Ga(Xy(),e.headlineboxes.length?"":"hidden",e.heading_headline,Jy(e));var e},renderIfHeadline(e){return e&&e.get("type")===Lc.HEADLINES_TYPE&&this.render()},openHeadline(e){e.preventDefault();const t=e.target.getAttribute("data-headline-jid");Lc.chatboxes.get(t).maybeShow(!0)},insertIntoDOM(){const e=Lc.chatboxviews.get("controlbox");e&&e.el.querySelector(".controlbox-pane").insertAdjacentElement("beforeEnd",this.el)}});Yc.plugins.add("converse-headlines-view",{dependencies:["converse-headlines","converse-chatview"],overrides:{ControlBoxView:{renderControlBoxPane(){this.__super__.renderControlBoxPane.apply(this,arguments),this.renderHeadlinesPanel()}}},initialize(){const e={renderHeadlinesPanel(){return this.headlinepanel&&Qy.isInDOM(this.headlinepanel.el)||(this.headlinepanel=new Lc.HeadlinesPanel({model:Lc.chatboxes}),qc.trigger("headlinesPanelRendered")),this.headlinepanel}};Lc.ControlBoxView&&Object.assign(Lc.ControlBoxView.prototype,e),Lc.HeadlinesBoxView=Yy,Lc.HeadlinesPanel=Ky,qc.listen.on("chatBoxViewsInitialized",()=>{const e=Lc.chatboxviews;Lc.chatboxes.on("add",t=>{e.get(t.get("id"))||t.get("type")!==Lc.HEADLINES_TYPE||e.add(t.get("id"),new Lc.HeadlinesBoxView({model:t}))})})}});
+function IS(){const e=Uc.chatboxviews;Uc.chatboxes.on("add",t=>{e.get(t.get("id"))||t.get("type")!==Uc.HEADLINES_TYPE||e.add(t.get("id"),new Uc.HeadlinesBoxView({model:t}))})}rl.plugins.add("converse-headlines-view",{dependencies:["converse-headlines","converse-chatview"],overrides:{ControlBoxView:{renderControlBoxPane(){this.__super__.renderControlBoxPane.apply(this,arguments),this.renderHeadlinesPanel()}}},initialize(){Uc.ControlBoxView&&Object.assign(Uc.ControlBoxView.prototype,NS),Uc.HeadlinesBoxView=Uc.ChatBoxView.extend(xS),Uc.HeadlinesPanel=kS,Vc.listen.on("chatBoxViewsInitialized",IS)}});var MS=n(180),RS=n.n(MS);
 /**
  * @module converse-notification
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:Zy}=Yc.env,ew=Yc.env.utils,tw="Notification"in window;function nw(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n            <div class="suggestion-box suggestion-box__name">\n                <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n                <input type="text" name="','"\n                       autocomplete="off"\n                       @keydown=',"\n                       @keyup=",'\n                       class="form-control suggestion-box__input"\n                       placeholder="','"/>\n                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n            </div>\n        ']);return nw=function(){return e},e}Yc.plugins.add("converse-notification",{dependencies:["converse-chatboxes"],initialize(){qc.settings.extend({notify_all_room_messages:!1,show_desktop_notifications:!0,show_chat_state_notifications:!1,chatstate_notification_blacklist:[],play_sounds:!0,sounds_path:qc.settings.get("assets_path")+"/sounds/",notification_icon:"logo/conversejs-filled.svg",notification_delay:5e3,notify_nicknames_without_references:!1}),Lc.shouldNotifyOfGroupMessage=function(e){if(!(null==e?void 0:e.body))return!1;const t=e.from,n=e.from_muc,r=qc.settings.get("notify_all_room_messages"),i=Lc.chatboxes.get(n),s=Zy.getResourceFromJid(t),o=s&&Zy.unescapeNode(s)||"";let a=!1;const c=i.get("nick");qc.settings.get("notify_nicknames_without_references")&&(a=new RegExp("\\b".concat(c,"\\b")).test(e.body));const l=e.references.map(e=>e.value).includes(c),u=o!==c,d=!0===r||Array.isArray(r)&&r.includes(n)||l||a;return u&&!!d},Lc.isMessageToHiddenChat=function(e){var t,n;return null!==(t=null===(n=Lc.chatboxes.get(e.from))||void 0===n?void 0:n.isHidden())&&void 0!==t&&t},Lc.shouldNotifyOfMessage=function(e){const{attrs:t,stanza:n}=e;if(!t||null!==n.querySelector("forwarded"))return!1;if("groupchat"===t.type)return Lc.shouldNotifyOfGroupMessage(t);if(t.is_headline)return Lc.isMessageToHiddenChat(t);const r=Zy.getBareJidFromJid(t.from)===Lc.bare_jid;return!ew.isOnlyChatStateNotification(n)&&!ew.isOnlyMessageDeliveryReceipt(n)&&!r&&("all"===qc.settings.get("show_desktop_notifications")||Lc.isMessageToHiddenChat(t))},Lc.playSoundNotification=function(){if(qc.settings.get("play_sounds")&&void 0!==window.Audio){const e=new Audio(qc.settings.get("sounds_path")+"msg_received.ogg"),t=e.canPlayType("audio/ogg");if("probably"===t)return e.play();const n=new Audio(qc.settings.get("sounds_path")+"msg_received.mp3"),r=n.canPlayType("audio/mp3");"probably"===r?n.play():"maybe"===t?e.play():"maybe"===r&&n.play()}},Lc.areDesktopNotificationsEnabled=function(){return tw&&qc.settings.get("show_desktop_notifications")&&"granted"===Notification.permission},Lc.showMessageNotification=function(e){const{attrs:t}=e;if(t.is_error)return;if(!Lc.areDesktopNotificationsEnabled())return;let n,r;const i=t.from,s=Zy.getBareJidFromJid(i);if("headline"===t.type){if(s.includes("@")&&!qc.settings.get("allow_non_roster_messaging"))return;n=dd("Notification from %1$s",s)}else if(s.includes("@"))if("groupchat"===t.type)n=dd("%1$s says",Zy.getResourceFromJid(i));else{if(void 0===Lc.roster)return void Pn.error("Could not send notification, because roster is undefined");if(r=Lc.roster.get(s),void 0!==r)n=dd("%1$s says",r.getDisplayName());else{if(!qc.settings.get("allow_non_roster_messaging"))return;n=dd("%1$s says",s)}}else n=dd("Notification from %1$s",s);const o=t.is_encrypted?dd("Encrypted message received"):t.body;if(!o)return;const a=new Notification(n,{body:o,lang:Lc.locale,icon:qc.settings.get("notification_icon"),requireInteraction:!Lc.notification_delay});qc.settings.get("notification_delay")&&setTimeout(a.close.bind(a),qc.settings.get("notification_delay")),a.onclick=function(e){e.preventDefault(),window.focus(),Lc.chatboxes.get(s).maybeShow(!0)},a.onclick.bind(Lc)},Lc.showChatStateNotification=function(e){if(Lc.chatstate_notification_blacklist.includes(e.jid))return;const t=e.chat_status;let n=null;if("offline"===t?n=dd("has gone offline"):"away"===t?n=dd("has gone away"):"dnd"===t?n=dd("is busy"):"online"===t&&(n=dd("has come online")),null===n)return;const r=new Notification(e.getDisplayName(),{body:n,lang:Lc.locale,icon:Lc.notification_icon});setTimeout(r.close.bind(r),5e3)},Lc.showContactRequestNotification=function(e){const t=new Notification(e.getDisplayName(),{body:dd("wants to be your contact"),lang:Lc.locale,icon:Lc.notification_icon});setTimeout(t.close.bind(t),5e3)},Lc.showFeedbackNotification=function(e){if("error"===e.klass||"warn"===e.klass){const t=new Notification(e.subject,{body:e.message,lang:Lc.locale,icon:Lc.notification_icon});setTimeout(t.close.bind(t),5e3)}},Lc.handleChatStateNotification=function(e){Lc.areDesktopNotificationsEnabled()&&qc.settings.get("show_chat_state_notifications")&&Lc.showChatStateNotification(e)},Lc.handleMessageNotification=function(e){if(!Lc.shouldNotifyOfMessage(e))return!1;qc.trigger("messageNotification",e),Lc.playSoundNotification(),Lc.showMessageNotification(e)},Lc.handleContactRequestNotification=function(e){Lc.areDesktopNotificationsEnabled(!0)&&Lc.showContactRequestNotification(e)},Lc.handleFeedback=function(e){Lc.areDesktopNotificationsEnabled(!0)&&Lc.showFeedbackNotification(e)},Lc.requestPermission=function(){tw&&!["denied","granted"].includes(Notification.permission)&&Notification.requestPermission()},qc.listen.on("pluginsInitialized",(function(){qc.listen.on("contactRequest",Lc.handleContactRequestNotification),qc.listen.on("contactPresenceChanged",Lc.handleChatStateNotification),qc.listen.on("message",Lc.handleMessageNotification),qc.listen.on("feedback",Lc.handleFeedback),qc.listen.on("connected",Lc.requestPermission)}))}});function rw(){const e=lw(['\n            <fieldset class="form-group">\n                <ul class="list-group">\n                    <li class="list-group-item active">',":</li>\n                    ","\n                </ul>\n            </fieldset>"]);return rw=function(){return e},e}function iw(){const e=lw(['<div class="alert alert-','" role="alert">',"</div>"]);return iw=function(){return e},e}function sw(){const e=lw(["\n        ",'\n        <form class="converse-form" @submit=','>\n            <fieldset class="form-group">\n                <label>\n                    ','\n                    <p class="form-help">','</p>\n                    <converse-autocomplete\n                        .getAutoCompleteList="','"\n                        placeholder="','"\n                        name="jid"/>\n                </label>\n            </fieldset>\n            <fieldset class="form-group">\n                <input type="submit" class="btn btn-primary" value="','">\n            </fieldset>\n            ',"\n\n        </form>\n    "]);return sw=function(){return e},e}function ow(){const e=lw(['\n    <li class="room-item list-group-item">\n        <div class="available-chatroom d-flex flex-row">\n            <a class="open-room available-room w-100"\n               @click=','\n               data-command-node="','"\n               data-command-jid="','"\n               data-command-name="','"\n               title="','"\n               href="#">',"</a>\n        </div>\n        ","\n    </li>\n"]);return ow=function(){return e},e}function aw(){const e=lw(['<div class="alert alert-','" role="alert">',"</div>"]);return aw=function(){return e},e}function cw(){const e=lw(["\n        <form @submit=",">\n            ",'\n            <fieldset class="form-group">\n                <input type="hidden" name="command_node" value="','"/>\n                <input type="hidden" name="command_jid" value="','"/>\n\n                <p class="form-help">',"</p>\n                \x3c!-- Fields are generated internally, with xForm2webForm --\x3e\n                ",'\n            </fieldset>\n            <fieldset>\n                <input type="submit" class="btn btn-primary" value="','">\n                <input type="button" class="btn btn-secondary button-cancel" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return cw=function(){return e},e}function lw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-autocomplete",class extends uc{static get properties(){return{getAutoCompleteList:{type:Function},auto_evaluate:{type:Boolean},auto_first:{type:Boolean},filter:{type:String},include_triggers:{type:String},min_chars:{type:Number},name:{type:String},placeholder:{type:String},triggers:{type:String}}}constructor(){super(),this.auto_evaluate=!0,this.auto_first=!1,this.filter="contains",this.include_triggers="",this.match_current_word=!1,this.max_items=10,this.min_chars=1,this.triggers=""}render(){return Ga(nw(),this.name,this.onKeyDown,this.onKeyUp,this.placeholder)}firstUpdated(){this.auto_complete=new yd(this.firstElementChild,{ac_triggers:this.triggers.split(" "),auto_evaluate:this.auto_evaluate,auto_first:this.auto_first,filter:"contains"==this.filter?pd:gd,include_triggers:[],list:()=>this.getAutoCompleteList(),match_current_word:!0,max_items:this.max_items,min_chars:this.min_chars}),this.auto_complete.on("suggestion-box-selectcomplete",()=>this.auto_completing=!1)}onKeyDown(e){this.auto_complete.onKeyDown(e)}onKeyUp(e){this.auto_complete.evaluate(e)}});const{Strophe:uw,$iq:dw}=Yc.env,hw=Yc.env.utils,fw=(e,t)=>Ga(ow(),e.toggleCommandForm,t.node,t.jid,t.name,t.name,t.name||t.jid,t.node===e.showform?((e,t)=>{const n=dd("Hide"),r=dd("Execute");return Ga(cw(),e.runCommand,t.alert?Ga(aw(),t.alert_type,t.alert):"",t.node,t.jid,t.instructions,t.fields.map(e=>pp(e)),r,n,e.hideCommandForm)})(e,t):"");async function pw(){const e=[...await qc.rooms.get(),...await qc.contacts.get()];return[...new Set(e.map(e=>uw.getDomainFromJid(e.get("jid"))))]}function gw(){const e=vw(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="converse-modtools-modal-label">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body">\n                ','\n\n                <div class="tab-content">\n                    <div class="tab-pane tab-pane--columns ','"\n                         id="about-tabpanel" role="tabpanel" aria-labelledby="about-tab">\n\n                        <span class="modal-alert"></span>\n                        <br/>\n                        <div class="container">\n                            <h6 class="brand-heading">Converse</h6>\n                            <p class="brand-subtitle">','</p>\n                            <p class="brand-subtitle">','</p>\n                            <p class="brand-subtitle">','</p>\n                        </div>\n                    </div>\n\n                    <div class="tab-pane tab-pane--columns ','"\n                         id="commands-tabpanel"\n                         role="tabpanel"\n                         aria-labelledby="commands-tab">\n                        <converse-adhoc-commands/>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n']);return gw=function(){return e},e}function mw(){const e=vw(['\n        <ul class="nav nav-pills justify-content-center">\n            <li role="presentation" class="nav-item">\n                <a class="nav-link active" id="about-tab" href="#about-tabpanel" aria-controls="about-tabpanel" role="tab" data-toggle="tab" @click=',">",'</a>\n            </li>\n            <li role="presentation" class="nav-item">\n                <a class="nav-link" id="commands-tab" href="#commands-tabpanel" aria-controls="commands-tabpanel" role="tab" data-toggle="tab" @click=',">","</a>\n            </li>\n        </ul>\n    "]);return mw=function(){return e},e}function vw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-adhoc-commands",class extends uc{static get properties(){return{alert:{type:String},alert_type:{type:String},nonce:{type:String},showform:{type:String},view:{type:String}}}constructor(){super(),this.view="choose-service",this.showform="",this.commands=[]}render(){return(e=>{const t=dd("On which entity do you want to run commands?"),n=dd("Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them."),r=dd("Commands found"),i=dd("List available commands"),s=dd("XMPP Address"),o=dd("No commands found");return Ga(sw(),e.alert?Ga(iw(),e.alert_type,e.alert):"",e.fetchCommands,t,n,pw,s,i,"list-commands"===e.view?Ga(rw(),e.commands.length?r:o,e.commands.map(t=>fw(e,t))):"")})({alert:this.alert,alert_type:this.alert_type,commands:this.commands,fetchCommands:e=>this.fetchCommands(e),hideCommandForm:e=>this.hideCommandForm(e),runCommand:e=>this.runCommand(e),showform:this.showform,toggleCommandForm:e=>this.toggleCommandForm(e),view:this.view})}async fetchCommands(e){e.preventDefault(),delete this.alert_type,delete this.alert;const t=new FormData(e.target).get("jid").trim();let n;try{n=await qc.disco.supports(uw.NS.ADHOC,t)}catch(e){Pn.error(e)}if(n)try{this.commands=await qc.adhoc.getCommands(t),this.view="list-commands"}catch(e){return Pn.error(e),this.alert_type="danger",this.alert=dd("Sorry, an error occurred while looking for commands on that entity."),this.commands=[],void Pn.error(e)}else this.alert_type="danger",this.alert=dd("The specified entity doesn't support ad-hoc commands")}async toggleCommandForm(e){e.preventDefault();const t=e.target.getAttribute("data-command-node"),n=this.commands.filter(e=>e.node===t)[0];this.showform!==t&&await async function(e){const t=e.node,n=e.jid,r=dw({type:"set",to:n}).c("command",{xmlns:uw.NS.ADHOC,node:t,action:"execute"});try{var i;const t=await qc.sendIQ(r),n=ur()('command[xmlns="'.concat(uw.NS.ADHOC,'"]'),t).pop();e.sessionid=n.getAttribute("sessionid"),e.instructions=null===(i=ur()('x[type="form"][xmlns="jabber:x:data"] instructions',n).pop())||void 0===i?void 0:i.textContent,e.fields=ur()('x[type="form"][xmlns="jabber:x:data"] field',n).map(e=>hw.xForm2webForm(e,n))}catch(t){null===t?Pn.error("Error: timeout while trying to execute command for ".concat(n)):(Pn.error("Error while trying to execute command for ".concat(n)),Pn.error(t)),e.fields=[]}}(n),this.showform=t}hideCommandForm(e){e.preventDefault(),this.showform=""}async runCommand(e){e.preventDefault();const t=new FormData(e.target),n=t.get("command_jid").trim(),r=t.get("command_node").trim(),i=this.commands.filter(e=>e.node===r)[0],s=ur()(":input:not([type=button]):not([type=submit])",e.target).filter(e=>!["command_jid","command_node"].includes(e.getAttribute("name"))).map(hw.webForm2xForm).filter(e=>e),o=dw({to:n,type:"set"}).c("command",{sessionid:i.sessionid,node:i.node,xmlns:uw.NS.ADHOC}).c("x",{xmlns:uw.NS.XFORM,type:"submit"});let a;s.forEach(e=>o.cnode(e).up());try{a=await qc.sendIQ(o)}catch(e){i.alert_type="danger",i.alert=dd("Sorry, an error occurred while trying to execute the command. See the developer console for details"),Pn.error("Error while trying to execute an ad-hoc command"),Pn.error(e)}var c;a?i.alert=null===(c=a.querySelector("note"))||void 0===c?void 0:c.textContent:i.alert="Done";i.alert_type="primary",this.nonce=hw.getUniqueId()}});var _w=e=>{const t=dd("Settings"),n=dd("%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s",'<a target="_blank" rel="nofollow" href="https://conversejs.org">',"</a>",'<a target="_blank" rel="nofollow" href="https://opkode.com">'),r=dd("%1$s Translate %2$s it into your own language",'<a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">',"</a>"),i=qc.settings.get("show_client_info"),s=qc.settings.get("allow_adhoc_commands"),o=i&&s;return Ga(gw(),t,Bd,o?(e=>{const t=dd("About"),n=dd("Commands");return Ga(mw(),e.switchTab,t,e.switchTab,n)})(e):"",i?"active":"",e.version_name,pp(hp.a.filterXSS(n,{whiteList:{a:[]}})),pp(hp.a.filterXSS(r,{whiteList:{a:[]}})),!i&&s?"active":"")};let bw;var yw=Kd.extend({id:"converse-client-info-modal",initialize(e){bw=e._converse,Kd.prototype.initialize.apply(this,arguments)},toHTML(){return _w(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{version_name:bw.VERSION_NAME}))}});function ww(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="changeStatusModalLabel">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body">\n                <span class="modal-alert"></span>\n                <form class="converse-form set-xmpp-status" id="set-xmpp-status">\n                    <div class="form-group">\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-online" value="online" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-online">\n                                <span class="fa fa-circle chat-status chat-status--online"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-busy" value="dnd" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-busy">\n                                <span class="fa fa-minus-circle  chat-status chat-status--busy"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-away" value="away" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-away">\n                                <span class="fa fa-circle chat-status chat-status--away"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-xa" value="xa" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-xa">\n                                <span class="far fa-circle chat-status chat-status--xa"></span>','</label>\n                        </div>\n                    </div>\n                    <div class="form-group">\n                        <div class="btn-group w-100">\n                            <input name="status_message" type="text" class="form-control"\n                                value="','" placeholder="','"/>\n                            <span class="clear-input fa fa-times ','"></span>\n                        </div>\n                    </div>\n                    <button type="submit" class="btn btn-primary">',"</button>\n                </form>\n            </div>\n        </div>\n    </div>\n"]);return ww=function(){return e},e}function Sw(){const e=Aw(['<a class="controlbox-heading__btn logout fa fa-sign-out-alt align-self-center" title="','"></a>']);return Sw=function(){return e},e}function xw(){const e=Aw(['<a class="controlbox-heading__btn show-client-info fa fa-cog align-self-center" title="','" @click=',"></a>"]);return xw=function(){return e},e}function Ew(){const e=Aw(['\n    <div class="userinfo controlbox-padded">\n        <div class="controlbox-section profile d-flex">\n            <a class="show-profile" href="#">\n                <canvas class="avatar align-self-center" height="40" width="40"></canvas>\n            </a>\n            <span class="username w-100 align-self-center">',"</span>\n            ","\n            ",'\n        </div>\n        <div class="d-flex xmpp-status">\n            <a class="change-status" title="','" data-toggle="modal" data-target="#changeStatusModal">\n                <span class="',' w-100 align-self-center" data-value="','">\n                    <span class="\n                        ',"\n                        ","\n                        ","\n                        ","\n                        ",'"></span> ',"</span>\n            </a>\n        </div>\n    </div>\n"]);return Ew=function(){return e},e}function Aw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Cw(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n            <a class="change-avatar" @click=',' title="','">\n                ',"\n            </a>\n            <input @change=",' class="hidden" name="image" type="file"/>\n        ']);return Cw=function(){return e},e}const jw=dd("Your avatar image");function Tw(){const e=Pw(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="user-profile-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    ','\n                    <div class="tab-content">\n                        <div class="tab-pane active" id="profile-tabpanel" role="tabpanel" aria-labelledby="profile-tab">\n                            <form class="converse-form converse-form--modal profile-form" action="#">\n                                <div class="row">\n                                    <div class="col-auto">\n                                        <converse-image-picker image="','" width="','" height="','"></converse-image-picker>\n                                    </div>\n                                    <div class="col">\n                                        <div class="form-group">\n                                            <label class="col-form-label">',":</label>\n                                            <div>",'</div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-fullname" class="col-form-label">',':</label>\n                                    <input id="vcard-fullname" type="text" class="form-control" name="fn" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-nickname" class="col-form-label">',':</label>\n                                    <input id="vcard-nickname" type="text" class="form-control" name="nickname" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-url" class="col-form-label">',':</label>\n                                    <input id="vcard-url" type="url" class="form-control" name="url" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-email" class="col-form-label">',':</label>\n                                    <input id="vcard-email" type="email" class="form-control" name="email" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-role" class="col-form-label">',':</label>\n                                    <input id="vcard-role" type="text" class="form-control" name="role" value="','" aria-describedby="vcard-role-help"/>\n                                    <small id="vcard-role-help" class="form-text text-muted">','</small>\n                                </div>\n                                <hr/>\n                                <div class="form-group">\n                                    <button type="submit" class="save-form btn btn-primary">',"</button>\n                                </div>\n                            </form>\n                        </div>\n                        ","\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);return Tw=function(){return e},e}function Ow(){const e=Pw(['\n        <ul class="nav nav-pills justify-content-center">\n            <li role="presentation" class="nav-item">\n                <a class="nav-link active" id="profile-tab" href="#profile-tabpanel" aria-controls="profile-tabpanel" role="tab" data-toggle="tab">','</a>\n            </li>\n            <li role="presentation" class="nav-item">\n                <a class="nav-link" id="omemo-tab" href="#omemo-tabpanel" aria-controls="omemo-tabpanel" role="tab" data-toggle="tab">',"</a>\n            </li>\n        </ul>"]);return Ow=function(){return e},e}function kw(){const e=Pw(['\n        <div class="tab-pane" id="omemo-tabpanel" role="tabpanel" aria-labelledby="omemo-tab">\n            <form class="converse-form fingerprint-removal">\n                <ul class="list-group fingerprints">\n                    <li class="list-group-item active">','</li>\n                    <li class="list-group-item">\n                        ','\n                    </li>\n                </ul>\n                <div class="form-group">\n                    <button type="button" class="generate-bundle btn btn-danger">',"</button>\n                </div>\n                ","\n            </form>\n        </div>"]);return kw=function(){return e},e}function Nw(){const e=Pw(['\n        <ul class="list-group fingerprints">\n            <li class="list-group-item nopadding active">\n                <label>\n                    <input type="checkbox" class="select-all" title="','" aria-label="','"/>\n                    ',"\n                </label>\n            </li>\n            ",'\n        </ul>\n        <div class="form-group"><button type="submit" class="save-form btn btn-primary">',"</button></div>\n    "]);return Nw=function(){return e},e}function Iw(){const e=Pw(["\n    ","\n"]);return Iw=function(){return e},e}function Mw(){const e=Pw(['\n        <li class="fingerprint-removal-item list-group-item nopadding">\n            <label>\n            <input type="checkbox" value="','"\n                aria-label="','"/>\n            <span>',"</span>\n            </label>\n        </li>\n    "]);return Mw=function(){return e},e}function Rw(){const e=Pw(['\n        <li class="fingerprint-removal-item list-group-item nopadding">\n            <label>\n            <input type="checkbox" value="','"\n                aria-label="','"/>\n            <span class="fingerprint">',"</span>\n            </label>\n        </li>\n    "]);return Rw=function(){return e},e}function Dw(){const e=Pw(['\n    <span class="fingerprint">',"</span>"]);return Dw=function(){return e},e}function Pw(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}qc.elements.define("converse-image-picker",class extends uc{static get properties(){return{height:{type:Number},image:{type:String},width:{type:Number}}}render(){const e={height:this.height,image:this.image,width:this.width};return Ga(Cw(),this.openFileSelection,jw,yf(e),this.updateFilePreview)}openFileSelection(e){e.preventDefault(),this.querySelector('input[type="file"]').click()}updateFilePreview(e){const t=e.target.files[0],n=new FileReader;n.onloadend=()=>this.image=n.result,n.readAsDataURL(t)}});const Lw=Yc.env.utils,zw=e=>Ga(Iw(),e.device.get("bundle")&&e.device.get("bundle").fingerprint?(e=>{const t=dd("Checkbox for selecting the following fingerprint");return Ga(Rw(),e.device.get("id"),t,Lw.formatFingerprint(e.device.get("bundle").fingerprint))})(e):(e=>{const t=dd("Device without a fingerprint"),n=dd("Checkbox for selecting the following device");return Ga(Mw(),e.device.get("id"),n,t)})(e)),Fw=e=>{const t=dd("This device's OMEMO fingerprint"),n=dd("Generate new keys and fingerprint");return Ga(kw(),t,e.view.current_device&&e.view.current_device.get("bundle")&&e.view.current_device.get("bundle").fingerprint?(e=>Ga(Dw(),Lw.formatFingerprint(e.view.current_device.get("bundle").fingerprint)))(e):Tf(),n,e.view.other_devices.length?(e=>{const t=dd("Other OMEMO-enabled devices"),n=dd("Checkbox to select fingerprints of all other OMEMO devices"),r=dd("Remove checked devices and close"),i=dd("Select all");return Ga(Nw(),i,n,t,e.view.other_devices.map(t=>zw(Object.assign({device:t},e))),r)})(e):"")};
+const{Strophe:DS}=rl.env,PS=rl.env.utils,LS="Notification"in window;let zS;function FS(){if(Vc.settings.get("show_tab_notifications")){var e;zS=null!==(e=zS)&&void 0!==e?e:new rl.env.Favico({type:"circle",animation:"pop"});const t=Uc.chatboxes.models.reduce((e,t)=>e+(t.get("num_unread")||0),0);zS.badge(t)}}function BS(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="changeStatusModalLabel">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body">\n                <span class="modal-alert"></span>\n                <form class="converse-form set-xmpp-status" id="set-xmpp-status">\n                    <div class="form-group">\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-online" value="online" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-online">\n                                <span class="fa fa-circle chat-status chat-status--online"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-busy" value="dnd" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-busy">\n                                <span class="fa fa-minus-circle  chat-status chat-status--busy"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-away" value="away" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-away">\n                                <span class="fa fa-circle chat-status chat-status--away"></span>','</label>\n                        </div>\n                        <div class="custom-control custom-radio">\n                            <input ?checked=','\n                                type="radio" id="radio-xa" value="xa" name="chat_status" class="custom-control-input"/>\n                            <label class="custom-control-label" for="radio-xa">\n                                <span class="far fa-circle chat-status chat-status--xa"></span>','</label>\n                        </div>\n                    </div>\n                    <div class="form-group">\n                        <div class="btn-group w-100">\n                            <input name="status_message" type="text" class="form-control"\n                                value="','" placeholder="','"/>\n                            <span class="clear-input fa fa-times ','"></span>\n                        </div>\n                    </div>\n                    <button type="submit" class="btn btn-primary">',"</button>\n                </form>\n            </div>\n        </div>\n    </div>\n"]);return BS=function(){return e},e}rl.env.Favico=RS.a,rl.plugins.add("converse-notification",{dependencies:["converse-chatboxes"],initialize(){Vc.settings.extend({chatstate_notification_blacklist:[],notification_delay:5e3,notification_icon:"logo/conversejs-filled.svg",notify_all_room_messages:!1,notify_nicknames_without_references:!1,play_sounds:!0,show_chat_state_notifications:!1,show_desktop_notifications:!0,show_tab_notifications:!0,sounds_path:Vc.settings.get("assets_path")+"/sounds/"}),Uc.shouldNotifyOfGroupMessage=function(e){if(!(null==e?void 0:e.body))return!1;const t=e.from,n=e.from_muc,r=Vc.settings.get("notify_all_room_messages"),i=Uc.chatboxes.get(n),o=DS.getResourceFromJid(t),s=o&&DS.unescapeNode(o)||"";let a=!1;const c=i.get("nick");Vc.settings.get("notify_nicknames_without_references")&&(a=new RegExp("\\b".concat(c,"\\b")).test(e.body));const l=e.references.map(e=>e.value).includes(c),u=s!==c,d=!0===r||Array.isArray(r)&&r.includes(n)||l||a;return u&&!!d},Uc.isMessageToHiddenChat=function(e){var t,n;return null!==(t=null===(n=Uc.chatboxes.get(e.from))||void 0===n?void 0:n.isHidden())&&void 0!==t&&t},Uc.shouldNotifyOfMessage=function(e){const{attrs:t,stanza:n}=e;if(!t||null!==n.querySelector("forwarded"))return!1;if("groupchat"===t.type)return Uc.shouldNotifyOfGroupMessage(t);if(t.is_headline)return Uc.isMessageToHiddenChat(t);const r=DS.getBareJidFromJid(t.from)===Uc.bare_jid;return!PS.isOnlyChatStateNotification(n)&&!PS.isOnlyMessageDeliveryReceipt(n)&&!r&&("all"===Vc.settings.get("show_desktop_notifications")||Uc.isMessageToHiddenChat(t))},Uc.playSoundNotification=function(){if(Vc.settings.get("play_sounds")&&void 0!==window.Audio){const e=new Audio(Vc.settings.get("sounds_path")+"msg_received.ogg"),t=e.canPlayType("audio/ogg");if("probably"===t)return e.play();const n=new Audio(Vc.settings.get("sounds_path")+"msg_received.mp3"),r=n.canPlayType("audio/mp3");"probably"===r?n.play():"maybe"===t?e.play():"maybe"===r&&n.play()}},Uc.areDesktopNotificationsEnabled=function(){return LS&&Vc.settings.get("show_desktop_notifications")&&"granted"===Notification.permission},Uc.showMessageNotification=function(e){const{attrs:t}=e;if(t.is_error)return;if(!Uc.areDesktopNotificationsEnabled())return;let n,r;const i=t.from,o=DS.getBareJidFromJid(i);if("headline"===t.type){if(o.includes("@")&&!Vc.settings.get("allow_non_roster_messaging"))return;n=zd("Notification from %1$s",o)}else if(o.includes("@"))if("groupchat"===t.type)n=zd("%1$s says",DS.getResourceFromJid(i));else{if(void 0===Uc.roster)return void zn.error("Could not send notification, because roster is undefined");if(r=Uc.roster.get(o),void 0!==r)n=zd("%1$s says",r.getDisplayName());else{if(!Vc.settings.get("allow_non_roster_messaging"))return;n=zd("%1$s says",o)}}else n=zd("Notification from %1$s",o);const s=t.is_encrypted?zd("Encrypted message received"):t.body;if(!s)return;const a=new Notification(n,{body:s,lang:Uc.locale,icon:Vc.settings.get("notification_icon"),requireInteraction:!Uc.notification_delay});Vc.settings.get("notification_delay")&&setTimeout(a.close.bind(a),Vc.settings.get("notification_delay")),a.onclick=function(e){e.preventDefault(),window.focus(),Uc.chatboxes.get(o).maybeShow(!0)},a.onclick.bind(Uc)},Uc.showChatStateNotification=function(e){if(Uc.chatstate_notification_blacklist.includes(e.jid))return;const t=e.chat_status;let n=null;if("offline"===t?n=zd("has gone offline"):"away"===t?n=zd("has gone away"):"dnd"===t?n=zd("is busy"):"online"===t&&(n=zd("has come online")),null===n)return;const r=new Notification(e.getDisplayName(),{body:n,lang:Uc.locale,icon:Uc.notification_icon});setTimeout(r.close.bind(r),5e3)},Uc.showContactRequestNotification=function(e){const t=new Notification(e.getDisplayName(),{body:zd("wants to be your contact"),lang:Uc.locale,icon:Uc.notification_icon});setTimeout(t.close.bind(t),5e3)},Uc.showFeedbackNotification=function(e){if("error"===e.klass||"warn"===e.klass){const t=new Notification(e.subject,{body:e.message,lang:Uc.locale,icon:Uc.notification_icon});setTimeout(t.close.bind(t),5e3)}},Uc.handleChatStateNotification=function(e){Uc.areDesktopNotificationsEnabled()&&Vc.settings.get("show_chat_state_notifications")&&Uc.showChatStateNotification(e)},Uc.handleMessageNotification=function(e){if(!Uc.shouldNotifyOfMessage(e))return!1;Vc.trigger("messageNotification",e),Uc.playSoundNotification(),Uc.showMessageNotification(e)},Uc.handleContactRequestNotification=function(e){Uc.areDesktopNotificationsEnabled(!0)&&Uc.showContactRequestNotification(e)},Uc.handleFeedback=function(e){Uc.areDesktopNotificationsEnabled(!0)&&Uc.showFeedbackNotification(e)},Uc.requestPermission=function(){LS&&!["denied","granted"].includes(Notification.permission)&&Notification.requestPermission()},Vc.listen.on("clearSession",()=>zS=null),Vc.waitUntil("chatBoxesInitialized").then(()=>Uc.chatboxes.on("change:num_unread",FS)),Vc.listen.on("pluginsInitialized",(function(){Vc.listen.on("contactRequest",Uc.handleContactRequestNotification),Vc.listen.on("contactPresenceChanged",Uc.handleChatStateNotification),Vc.listen.on("message",Uc.handleMessageNotification),Vc.listen.on("feedback",Uc.handleFeedback),Vc.listen.on("connected",Uc.requestPermission)}))}});const qS=rl.env.utils,HS=df.extend({id:"modal-status-change",events:{"submit form#set-xmpp-status":"onFormSubmitted","click .clear-input":"clearStatusMessage"},toHTML(){return e=Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{label_away:zd("Away"),label_busy:zd("Busy"),label_cancel:zd("Cancel"),label_close:zd("Close"),label_custom_status:zd("Custom status"),label_offline:zd("Offline"),label_online:zd("Online"),label_save:zd("Save"),label_xa:zd("Away for long"),modal_title:zd("Change chat status"),placeholder_status_message:zd("Personal status message")}),Za(BS(),e.modal_title,mf,"online"===e.status,e.label_online,"busy"===e.status,e.label_busy,"away"===e.status,e.label_away,"xa"===e.status,e.label_xa,e.status_message||"",e.placeholder_status_message,e.status_message?"":"hidden",e.label_save);var e},afterRender(){this.el.addEventListener("shown.bs.modal",()=>{this.el.querySelector('input[name="status_message"]').focus()},!1)},clearStatusMessage(e){e&&e.preventDefault&&(e.preventDefault(),qS.hideElement(this.el.querySelector(".clear-input"))),this.el.querySelector('input[name="status_message"]').value=""},onFormSubmitted(e){e.preventDefault();const t=new FormData(e.target);this.model.save({status_message:t.get("status_message"),status:t.get("chat_status")}),this.modal.hide()}});Uc.ChatStatusModal=HS;function US(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n            <a class="change-avatar" @click=',' title="','">\n                ',"\n            </a>\n            <input @change=",' class="hidden" name="image" type="file"/>\n        ']);return US=function(){return e},e}const $S=zd("Your avatar image");function WS(){const e=ZS(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="user-profile-modal-label">',"</h5>\n                    ",'\n                </div>\n                <div class="modal-body">\n                    <span class="modal-alert"></span>\n                    ','\n                    <div class="tab-content">\n                        <div class="tab-pane active" id="profile-tabpanel" role="tabpanel" aria-labelledby="profile-tab">\n                            <form class="converse-form converse-form--modal profile-form" action="#">\n                                <div class="row">\n                                    <div class="col-auto">\n                                        <converse-image-picker image="','" width="','" height="','"></converse-image-picker>\n                                    </div>\n                                    <div class="col">\n                                        <div class="form-group">\n                                            <label class="col-form-label">',":</label>\n                                            <div>",'</div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-fullname" class="col-form-label">',':</label>\n                                    <input id="vcard-fullname" type="text" class="form-control" name="fn" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-nickname" class="col-form-label">',':</label>\n                                    <input id="vcard-nickname" type="text" class="form-control" name="nickname" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-url" class="col-form-label">',':</label>\n                                    <input id="vcard-url" type="url" class="form-control" name="url" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-email" class="col-form-label">',':</label>\n                                    <input id="vcard-email" type="email" class="form-control" name="email" value="','"/>\n                                </div>\n                                <div class="form-group">\n                                    <label for="vcard-role" class="col-form-label">',':</label>\n                                    <input id="vcard-role" type="text" class="form-control" name="role" value="','" aria-describedby="vcard-role-help"/>\n                                    <small id="vcard-role-help" class="form-text text-muted">','</small>\n                                </div>\n                                <hr/>\n                                <div class="form-group">\n                                    <button type="submit" class="save-form btn btn-primary">',"</button>\n                                </div>\n                            </form>\n                        </div>\n                        ","\n                    </div>\n                </div>\n            </div>\n        </div>\n    "]);return WS=function(){return e},e}function GS(){const e=ZS(['\n        <ul class="nav nav-pills justify-content-center">\n            <li role="presentation" class="nav-item">\n                <a class="nav-link active" id="profile-tab" href="#profile-tabpanel" aria-controls="profile-tabpanel" role="tab" data-toggle="tab">','</a>\n            </li>\n            <li role="presentation" class="nav-item">\n                <a class="nav-link" id="omemo-tab" href="#omemo-tabpanel" aria-controls="omemo-tabpanel" role="tab" data-toggle="tab">',"</a>\n            </li>\n        </ul>"]);return GS=function(){return e},e}function VS(){const e=ZS(['\n        <div class="tab-pane" id="omemo-tabpanel" role="tabpanel" aria-labelledby="omemo-tab">\n            <form class="converse-form fingerprint-removal">\n                <ul class="list-group fingerprints">\n                    <li class="list-group-item active">','</li>\n                    <li class="list-group-item">\n                        ','\n                    </li>\n                </ul>\n                <div class="form-group">\n                    <button type="button" class="generate-bundle btn btn-danger">',"</button>\n                </div>\n                ","\n            </form>\n        </div>"]);return VS=function(){return e},e}function JS(){const e=ZS(['\n        <ul class="list-group fingerprints">\n            <li class="list-group-item nopadding active">\n                <label>\n                    <input type="checkbox" class="select-all" title="','" aria-label="','"/>\n                    ',"\n                </label>\n            </li>\n            ",'\n        </ul>\n        <div class="form-group"><button type="submit" class="save-form btn btn-primary">',"</button></div>\n    "]);return JS=function(){return e},e}function XS(){const e=ZS(["\n    ","\n"]);return XS=function(){return e},e}function QS(){const e=ZS(['\n        <li class="fingerprint-removal-item list-group-item nopadding">\n            <label>\n            <input type="checkbox" value="','"\n                aria-label="','"/>\n            <span>',"</span>\n            </label>\n        </li>\n    "]);return QS=function(){return e},e}function YS(){const e=ZS(['\n        <li class="fingerprint-removal-item list-group-item nopadding">\n            <label>\n            <input type="checkbox" value="','"\n                aria-label="','"/>\n            <span class="fingerprint">',"</span>\n            </label>\n        </li>\n    "]);return YS=function(){return e},e}function KS(){const e=ZS(['\n    <span class="fingerprint">',"</span>"]);return KS=function(){return e},e}function ZS(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-image-picker",class extends mc{static get properties(){return{height:{type:Number},image:{type:String},width:{type:Number}}}render(){const e={height:this.height,image:this.image,width:this.width};return Za(US(),this.openFileSelection,$S,op(e),this.updateFilePreview)}openFileSelection(e){e.preventDefault(),this.querySelector('input[type="file"]').click()}updateFilePreview(e){const t=e.target.files[0],n=new FileReader;n.onloadend=()=>this.image=n.result,n.readAsDataURL(t)}});const ex=rl.env.utils,tx=e=>Za(XS(),e.device.get("bundle")&&e.device.get("bundle").fingerprint?(e=>{const t=zd("Checkbox for selecting the following fingerprint");return Za(YS(),e.device.get("id"),t,ex.formatFingerprint(e.device.get("bundle").fingerprint))})(e):(e=>{const t=zd("Device without a fingerprint"),n=zd("Checkbox for selecting the following device");return Za(QS(),e.device.get("id"),n,t)})(e)),nx=e=>{const t=zd("This device's OMEMO fingerprint"),n=zd("Generate new keys and fingerprint");return Za(VS(),t,e.view.current_device&&e.view.current_device.get("bundle")&&e.view.current_device.get("bundle").fingerprint?(e=>Za(KS(),ex.formatFingerprint(e.view.current_device.get("bundle").fingerprint)))(e):fp(),n,e.view.other_devices.length?(e=>{const t=zd("Other OMEMO-enabled devices"),n=zd("Checkbox to select fingerprints of all other OMEMO devices"),r=zd("Remove checked devices and close"),i=zd("Select all");return Za(JS(),i,n,t,e.view.other_devices.map(t=>tx(Object.assign({device:t},e))),r)})(e):"")};const rx=df.extend({id:"user-profile-modal",events:{"submit .profile-form":"onFormSubmitted"},initialize(){this.listenTo(this.model,"change",this.render),df.prototype.initialize.apply(this,arguments),Vc.trigger("profileModalInitialized",this.model)},toHTML(){return(e=>{const t=zd("Your Profile"),n=zd("Email"),r=zd("Full Name"),i=zd("XMPP Address (JID)"),o=zd("Nickname"),s=zd("Role"),a=zd("Save and close"),c=zd("Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages."),l=zd("URL"),u=zd("OMEMO"),d=zd("Profile"),h=Za(GS(),d,u);return Za(WS(),t,mf,Uc.pluggable.plugins["converse-omemo"].enabled(Uc)&&h||"",e.image,e.width,e.height,i,e.jid,r,e.fullname||"",o,e.nickname||"",l,e.url||"",n,e.email||"",s,e.role||"",c,a,Uc.pluggable.plugins["converse-omemo"].enabled(Uc)&&nx(e)||"")})(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),this.getAvatarData(),{view:this}))},getAvatarData(){return{height:128,width:128,image:"data:"+this.model.vcard.get("image_type")+";base64,"+this.model.vcard.get("image")}},afterRender(){this.tabs=mr()(".nav-item .nav-link",this.el).map(e=>new af.a.Tab(e))},async setVCard(e){try{await Vc.vcard.set(Uc.bare_jid,e)}catch(e){return zn.fatal(e),void this.alert([zd("Sorry, an error happened while trying to save your profile data."),zd("You can check your browser's developer console for any error output.")].join(" "))}this.modal.hide()},onFormSubmitted(e){e.preventDefault();const t=new FileReader,n=new FormData(e.target),r=n.get("image"),i={fn:n.get("fn"),nickname:n.get("nickname"),role:n.get("role"),email:n.get("email"),url:n.get("url")};r.size?(t.onloadend=()=>{Object.assign(i,{image:btoa(t.result),image_type:r.type}),this.setVCard(i)},t.readAsBinaryString(r)):(Object.assign(i,{image:this.model.vcard.get("image"),image_type:this.model.vcard.get("image_type")}),this.setVCard(i))}});Uc.ProfileModal=rx;function ix(){const e=ux(['\n            <fieldset class="form-group">\n                <ul class="list-group">\n                    <li class="list-group-item active">',":</li>\n                    ","\n                </ul>\n            </fieldset>"]);return ix=function(){return e},e}function ox(){const e=ux(['<div class="alert alert-','" role="alert">',"</div>"]);return ox=function(){return e},e}function sx(){const e=ux(["\n        ",'\n        <form class="converse-form" @submit=','>\n            <fieldset class="form-group">\n                <label>\n                    ','\n                    <p class="form-help">','</p>\n                    <converse-autocomplete\n                        .getAutoCompleteList="','"\n                        placeholder="','"\n                        name="jid"/>\n                </label>\n            </fieldset>\n            <fieldset class="form-group">\n                <input type="submit" class="btn btn-primary" value="','">\n            </fieldset>\n            ',"\n\n        </form>\n    "]);return sx=function(){return e},e}function ax(){const e=ux(['\n    <li class="room-item list-group-item">\n        <div class="available-chatroom d-flex flex-row">\n            <a class="open-room available-room w-100"\n               @click=','\n               data-command-node="','"\n               data-command-jid="','"\n               data-command-name="','"\n               title="','"\n               href="#">',"</a>\n        </div>\n        ","\n    </li>\n"]);return ax=function(){return e},e}function cx(){const e=ux(['<div class="alert alert-','" role="alert">',"</div>"]);return cx=function(){return e},e}function lx(){const e=ux(["\n        <form @submit=",">\n            ",'\n            <fieldset class="form-group">\n                <input type="hidden" name="command_node" value="','"/>\n                <input type="hidden" name="command_jid" value="','"/>\n\n                <p class="form-help">',"</p>\n                \x3c!-- Fields are generated internally, with xForm2webForm --\x3e\n                ",'\n            </fieldset>\n            <fieldset>\n                <input type="submit" class="btn btn-primary" value="','">\n                <input type="button" class="btn btn-secondary button-cancel" value="','" @click=',">\n            </fieldset>\n        </form>\n    "]);return lx=function(){return e},e}function ux(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}const{Strophe:dx,$iq:hx}=rl.env,fx=rl.env.utils,px=(e,t)=>Za(ax(),e.toggleCommandForm,t.node,t.jid,t.name,t.name,t.name||t.jid,t.node===e.showform?((e,t)=>{const n=zd("Hide"),r=zd("Execute");return Za(lx(),e.runCommand,t.alert?Za(cx(),t.alert_type,t.alert):"",t.node,t.jid,t.instructions,t.fields.map(e=>Kp(e)),r,n,e.hideCommandForm)})(e,t):"");async function gx(){const e=[...await Vc.rooms.get(),...await Vc.contacts.get()];return[...new Set(e.map(e=>dx.getDomainFromJid(e.get("jid"))))]}function mx(){const e=_x(['\n    <div class="modal-dialog" role="document">\n        <div class="modal-content">\n            <div class="modal-header">\n                <h5 class="modal-title" id="converse-modtools-modal-label">',"</h5>\n                ",'\n            </div>\n            <div class="modal-body">\n                ','\n\n                <div class="tab-content">\n                    <div class="tab-pane tab-pane--columns ','"\n                         id="about-tabpanel" role="tabpanel" aria-labelledby="about-tab">\n\n                        <span class="modal-alert"></span>\n                        <br/>\n                        <div class="container">\n                            <h6 class="brand-heading">Converse</h6>\n                            <p class="brand-subtitle">','</p>\n                            <p class="brand-subtitle">','</p>\n                            <p class="brand-subtitle">','</p>\n                        </div>\n                    </div>\n\n                    <div class="tab-pane tab-pane--columns ','"\n                         id="commands-tabpanel"\n                         role="tabpanel"\n                         aria-labelledby="commands-tab">\n                        <converse-adhoc-commands/>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n']);return mx=function(){return e},e}function vx(){const e=_x(['\n        <ul class="nav nav-pills justify-content-center">\n            <li role="presentation" class="nav-item">\n                <a class="nav-link active" id="about-tab" href="#about-tabpanel" aria-controls="about-tabpanel" role="tab" data-toggle="tab" @click=',">",'</a>\n            </li>\n            <li role="presentation" class="nav-item">\n                <a class="nav-link" id="commands-tab" href="#commands-tabpanel" aria-controls="commands-tabpanel" role="tab" data-toggle="tab" @click=',">","</a>\n            </li>\n        </ul>\n    "]);return vx=function(){return e},e}function _x(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}Vc.elements.define("converse-adhoc-commands",class extends mc{static get properties(){return{alert:{type:String},alert_type:{type:String},nonce:{type:String},showform:{type:String},view:{type:String}}}constructor(){super(),this.view="choose-service",this.showform="",this.commands=[]}render(){return(e=>{const t=zd("On which entity do you want to run commands?"),n=zd("Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them."),r=zd("Commands found"),i=zd("List available commands"),o=zd("XMPP Address"),s=zd("No commands found");return Za(sx(),e.alert?Za(ox(),e.alert_type,e.alert):"",e.fetchCommands,t,n,gx,o,i,"list-commands"===e.view?Za(ix(),e.commands.length?r:s,e.commands.map(t=>px(e,t))):"")})({alert:this.alert,alert_type:this.alert_type,commands:this.commands,fetchCommands:e=>this.fetchCommands(e),hideCommandForm:e=>this.hideCommandForm(e),runCommand:e=>this.runCommand(e),showform:this.showform,toggleCommandForm:e=>this.toggleCommandForm(e),view:this.view})}async fetchCommands(e){e.preventDefault(),delete this.alert_type,delete this.alert;const t=new FormData(e.target).get("jid").trim();let n;try{n=await Vc.disco.supports(dx.NS.ADHOC,t)}catch(e){zn.error(e)}if(n)try{this.commands=await Vc.adhoc.getCommands(t),this.view="list-commands"}catch(e){return zn.error(e),this.alert_type="danger",this.alert=zd("Sorry, an error occurred while looking for commands on that entity."),this.commands=[],void zn.error(e)}else this.alert_type="danger",this.alert=zd("The specified entity doesn't support ad-hoc commands")}async toggleCommandForm(e){e.preventDefault();const t=e.target.getAttribute("data-command-node"),n=this.commands.filter(e=>e.node===t)[0];this.showform!==t&&await async function(e){const t=e.node,n=e.jid,r=hx({type:"set",to:n}).c("command",{xmlns:dx.NS.ADHOC,node:t,action:"execute"});try{var i;const t=await Vc.sendIQ(r),n=mr()('command[xmlns="'.concat(dx.NS.ADHOC,'"]'),t).pop();e.sessionid=n.getAttribute("sessionid"),e.instructions=null===(i=mr()('x[type="form"][xmlns="jabber:x:data"] instructions',n).pop())||void 0===i?void 0:i.textContent,e.fields=mr()('x[type="form"][xmlns="jabber:x:data"] field',n).map(e=>fx.xForm2webForm(e,n))}catch(t){null===t?zn.error("Error: timeout while trying to execute command for ".concat(n)):(zn.error("Error while trying to execute command for ".concat(n)),zn.error(t)),e.fields=[]}}(n),this.showform=t}hideCommandForm(e){e.preventDefault(),this.showform=""}async runCommand(e){e.preventDefault();const t=new FormData(e.target),n=t.get("command_jid").trim(),r=t.get("command_node").trim(),i=this.commands.filter(e=>e.node===r)[0],o=mr()(":input:not([type=button]):not([type=submit])",e.target).filter(e=>!["command_jid","command_node"].includes(e.getAttribute("name"))).map(fx.webForm2xForm).filter(e=>e),s=hx({to:n,type:"set"}).c("command",{sessionid:i.sessionid,node:i.node,xmlns:dx.NS.ADHOC}).c("x",{xmlns:dx.NS.XFORM,type:"submit"});let a;o.forEach(e=>s.cnode(e).up());try{a=await Vc.sendIQ(s)}catch(e){i.alert_type="danger",i.alert=zd("Sorry, an error occurred while trying to execute the command. See the developer console for details"),zn.error("Error while trying to execute an ad-hoc command"),zn.error(e)}var c;a?i.alert=null===(c=a.querySelector("note"))||void 0===c?void 0:c.textContent:i.alert="Done";i.alert_type="primary",this.nonce=fx.getUniqueId()}});var bx=e=>{const t=zd("Settings"),n=zd("%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s",'<a target="_blank" rel="nofollow" href="https://conversejs.org">',"</a>",'<a target="_blank" rel="nofollow" href="https://opkode.com">'),r=zd("%1$s Translate %2$s it into your own language",'<a target="_blank" rel="nofollow" href="https://hosted.weblate.org/projects/conversejs/#languages">',"</a>"),i=Vc.settings.get("show_client_info"),o=Vc.settings.get("allow_adhoc_commands"),s=i&&o;return Za(mx(),t,mf,s?(e=>{const t=zd("About"),n=zd("Commands");return Za(vx(),e.switchTab,t,e.switchTab,n)})(e):"",i?"active":"",e.version_name,Kp(Qp.a.filterXSS(n,{whiteList:{a:[]}})),Kp(Qp.a.filterXSS(r,{whiteList:{a:[]}})),!i&&o?"active":"")};let yx;var wx=df.extend({id:"converse-client-info-modal",initialize(e){yx=e._converse,df.prototype.initialize.apply(this,arguments)},toHTML(){return bx(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{version_name:yx.VERSION_NAME}))}});function Sx(){const e=Ax(['<a class="controlbox-heading__btn logout fa fa-sign-out-alt align-self-center" title="','"></a>']);return Sx=function(){return e},e}function xx(){const e=Ax(['<a class="controlbox-heading__btn show-client-info fa fa-cog align-self-center" title="','" @click=',"></a>"]);return xx=function(){return e},e}function Ex(){const e=Ax(['\n    <div class="userinfo controlbox-padded">\n        <div class="controlbox-section profile d-flex">\n            <a class="show-profile" href="#">\n                <canvas class="avatar align-self-center" height="40" width="40"></canvas>\n            </a>\n            <span class="username w-100 align-self-center">',"</span>\n            ","\n            ",'\n        </div>\n        <div class="d-flex xmpp-status">\n            <a class="change-status" title="','" data-toggle="modal" data-target="#changeStatusModal">\n                <span class="',' w-100 align-self-center" data-value="','">\n                    <span class="\n                        ',"\n                        ","\n                        ","\n                        ","\n                        ",'"></span> ',"</span>\n            </a>\n        </div>\n    </div>\n"]);return Ex=function(){return e},e}function Ax(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
  * @module converse-profile
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const Bw=Yc.env.utils;Yc.plugins.add("converse-profile",{dependencies:["converse-status","converse-modal","converse-vcard","converse-chatboxviews"],initialize(){qc.settings.extend({allow_adhoc_commands:!0,show_client_info:!0}),Lc.ProfileModal=Kd.extend({id:"user-profile-modal",events:{"submit .profile-form":"onFormSubmitted"},initialize(){this.listenTo(this.model,"change",this.render),Kd.prototype.initialize.apply(this,arguments),qc.trigger("profileModalInitialized",this.model)},toHTML(){return(e=>{const t=dd("Your Profile"),n=dd("Email"),r=dd("Full Name"),i=dd("XMPP Address (JID)"),s=dd("Nickname"),o=dd("Role"),a=dd("Save and close"),c=dd("Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages."),l=dd("URL"),u=dd("OMEMO"),d=dd("Profile"),h=Ga(Ow(),d,u);return Ga(Tw(),t,Bd,Lc.pluggable.plugins["converse-omemo"].enabled(Lc)&&h,e.image,e.width,e.height,i,e.jid,r,e.fullname||"",s,e.nickname||"",l,e.url||"",n,e.email||"",o,e.role||"",c,a,Lc.pluggable.plugins["converse-omemo"].enabled(Lc)&&Fw(e))})(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),this.getAvatarData(),{view:this}))},getAvatarData(){return{height:128,width:128,image:"data:"+this.model.vcard.get("image_type")+";base64,"+this.model.vcard.get("image")}},afterRender(){this.tabs=ur()(".nav-item .nav-link",this.el).map(e=>new Rd.a.Tab(e))},async setVCard(e){try{await qc.vcard.set(Lc.bare_jid,e)}catch(e){return Pn.fatal(e),void this.alert([dd("Sorry, an error happened while trying to save your profile data."),dd("You can check your browser's developer console for any error output.")].join(" "))}this.modal.hide()},onFormSubmitted(e){e.preventDefault();const t=new FileReader,n=new FormData(e.target),r=n.get("image"),i={fn:n.get("fn"),nickname:n.get("nickname"),role:n.get("role"),email:n.get("email"),url:n.get("url")};r.size?(t.onloadend=()=>{Object.assign(i,{image:btoa(t.result),image_type:r.type}),this.setVCard(i)},t.readAsBinaryString(r)):(Object.assign(i,{image:this.model.vcard.get("image"),image_type:this.model.vcard.get("image_type")}),this.setVCard(i))}}),Lc.ChatStatusModal=Kd.extend({id:"modal-status-change",events:{"submit form#set-xmpp-status":"onFormSubmitted","click .clear-input":"clearStatusMessage"},toHTML(){return e=Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{label_away:dd("Away"),label_busy:dd("Busy"),label_cancel:dd("Cancel"),label_close:dd("Close"),label_custom_status:dd("Custom status"),label_offline:dd("Offline"),label_online:dd("Online"),label_save:dd("Save"),label_xa:dd("Away for long"),modal_title:dd("Change chat status"),placeholder_status_message:dd("Personal status message")}),Ga(ww(),e.modal_title,Bd,"online"===e.status,e.label_online,"busy"===e.status,e.label_busy,"away"===e.status,e.label_away,"xa"===e.status,e.label_xa,e.status_message||"",e.placeholder_status_message,e.status_message?"":"hidden",e.label_save);var e},afterRender(){this.el.addEventListener("shown.bs.modal",()=>{this.el.querySelector('input[name="status_message"]').focus()},!1)},clearStatusMessage(e){e&&e.preventDefault&&(e.preventDefault(),Bw.hideElement(this.el.querySelector(".clear-input"))),this.el.querySelector('input[name="status_message"]').value=""},onFormSubmitted(e){e.preventDefault();const t=new FormData(e.target);this.model.save({status_message:t.get("status_message"),status:t.get("chat_status")}),this.modal.hide()}}),Lc.XMPPStatusView=Lc.ViewWithAvatar.extend({tagName:"div",events:{"click a.show-profile":"showProfileModal","click a.change-status":"showStatusChangeModal","click .logout":"logOut"},initialize(){this.listenTo(this.model,"change",this.render),this.listenTo(this.model.vcard,"change",this.render)},toHTML(){const e=this.model.get("status")||"offline";return(e=>{const t=dd("Log out"),n=dd("Click to change your chat status"),r=dd("Show details about this chat client"),i=qc.settings.get("show_client_info")||qc.settings.get("allow_adhoc_commands");return Ga(Ew(),e.fullname,i?Ga(xw(),r,e.showUserSettingsModal):"",qc.settings.get("allow_logout")?Ga(Sw(),t):"",n,e.chat_status,e.chat_status,"online"===e.chat_status&&"fa fa-circle chat-status chat-status--online","dnd"===e.chat_status&&"fa fa-minus-circle chat-status chat-status--busy","away"===e.chat_status&&"fa fa-circle chat-status chat-status--away","xa"===e.chat_status&&"far fa-circle chat-status chat-status--xa ","offline"===e.chat_status&&"fa fa-circle chat-status chat-status--offline",e.status_message)})(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{chat_status:e,fullname:this.model.vcard.get("fullname")||Lc.bare_jid,showUserSettingsModal:e=>this.showUserSettingsModal(e),status_message:this.model.get("status_message")||dd("I am %1$s",this.getPrettyStatus(e))}))},afterRender(){this.renderAvatar()},showProfileModal(e){e.preventDefault(),void 0===this.profile_modal&&(this.profile_modal=new Lc.ProfileModal({model:this.model})),this.profile_modal.show(e)},showStatusChangeModal(e){e.preventDefault(),void 0===this.status_modal&&(this.status_modal=new Lc.ChatStatusModal({model:this.model})),this.status_modal.show(e)},showUserSettingsModal(e){e.preventDefault(),void 0===this.user_settings_modal&&(this.user_settings_modal=new yw({model:this.model,_converse:Lc})),this.user_settings_modal.show(e)},logOut(e){e.preventDefault(),!0===confirm(dd("Are you sure you want to log out?"))&&qc.user.logout()},getPrettyStatus:e=>"chat"===e?dd("online"):"dnd"===e?dd("busy"):"xa"===e?dd("away for long"):"away"===e?dd("away"):"offline"===e?dd("offline"):dd(e)||dd("online")}),qc.listen.on("controlBoxPaneInitialized",async e=>{await qc.waitUntil("VCardsInitialized"),Lc.xmppstatusview=new Lc.XMPPStatusView({model:Lc.xmppstatus}),e.el.insertAdjacentElement("afterBegin",Lc.xmppstatusview.render().el)})}});var qw=function(){var e=arguments.length;if(!e)return[];for(var t=Array(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return dt(ke(n)?it(n):[n],Cs(t,1))},Hw=Math.ceil,Uw=Math.max;var $w=function(e,t,n,r){for(var i=-1,s=Uw(Hw((t-e)/(n||1)),0),o=Array(s);s--;)o[r?s:++i]=e,e+=n;return o};var Ww=function(e){return function(t,n,r){return r&&"number"!=typeof r&&Sr(t,n,r)&&(n=r=void 0),t=oi(t),void 0===n?(n=t,t=0):n=oi(n),r=void 0===r?t<n?1:-1:oi(r),$w(t,n,r,e)}}();function Vw(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
+rl.plugins.add("converse-profile",{dependencies:["converse-status","converse-modal","converse-vcard","converse-chatboxviews"],initialize(){Vc.settings.extend({allow_adhoc_commands:!0,show_client_info:!0}),Uc.XMPPStatusView=Uc.ViewWithAvatar.extend({tagName:"div",events:{"click a.show-profile":"showProfileModal","click a.change-status":"showStatusChangeModal","click .logout":"logOut"},initialize(){this.listenTo(this.model,"change",this.render),this.listenTo(this.model.vcard,"change",this.render)},toHTML(){const e=this.model.get("status")||"offline";return(e=>{const t=zd("Log out"),n=zd("Click to change your chat status"),r=zd("Show details about this chat client"),i=Vc.settings.get("show_client_info")||Vc.settings.get("allow_adhoc_commands");return Za(Ex(),e.fullname,i?Za(xx(),r,e.showUserSettingsModal):"",Vc.settings.get("allow_logout")?Za(Sx(),t):"",n,e.chat_status,e.chat_status,"online"===e.chat_status&&"fa fa-circle chat-status chat-status--online","dnd"===e.chat_status&&"fa fa-minus-circle chat-status chat-status--busy","away"===e.chat_status&&"fa fa-circle chat-status chat-status--away","xa"===e.chat_status&&"far fa-circle chat-status chat-status--xa ","offline"===e.chat_status&&"fa fa-circle chat-status chat-status--offline",e.status_message)})(Object.assign(this.model.toJSON(),this.model.vcard.toJSON(),{chat_status:e,fullname:this.model.vcard.get("fullname")||Uc.bare_jid,showUserSettingsModal:e=>this.showUserSettingsModal(e),status_message:this.model.get("status_message")||zd("I am %1$s",this.getPrettyStatus(e))}))},afterRender(){this.renderAvatar()},showProfileModal(e){e.preventDefault(),Vc.modal.show(Uc.ProfileModal,{model:this.model},e)},showStatusChangeModal(e){e.preventDefault(),Vc.modal.show(Uc.ChatStatusModal,{model:this.model},e)},showUserSettingsModal(e){e.preventDefault(),Vc.modal.show(wx,{model:this.model,_converse:Uc},e)},logOut(e){e.preventDefault(),!0===confirm(zd("Are you sure you want to log out?"))&&Vc.user.logout()},getPrettyStatus:e=>"chat"===e?zd("online"):"dnd"===e?zd("busy"):"xa"===e?zd("away for long"):"away"===e?zd("away"):"offline"===e?zd("offline"):zd(e)||zd("online")}),Vc.listen.on("controlBoxPaneInitialized",async e=>{await Vc.waitUntil("VCardsInitialized"),Uc.xmppstatusview=new Uc.XMPPStatusView({model:Uc.xmppstatus}),e.el.insertAdjacentElement("afterBegin",Uc.xmppstatusview.render().el)})}});var Cx=function(){var e=arguments.length;if(!e)return[];for(var t=Array(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return dt(ke(n)?it(n):[n],Mo(t,1))},jx=Math.ceil,Tx=Math.max;var Ox=function(e,t,n,r){for(var i=-1,o=Tx(jx((t-e)/(n||1)),0),s=Array(o);o--;)s[r?o:++i]=e,e+=n;return s};var kx=function(e){return function(t,n,r){return r&&"number"!=typeof r&&Tr(t,n,r)&&(n=r=void 0),t=hi(t),void 0===n?(n=t,t=0):n=hi(n),r=void 0===r?t<n?1:-1:hi(r),Ox(t,n,r,e)}}();function Nx(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}
 /**
  * @module converse-omemo
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
- */(['\n        <button class="toggle-omemo"\n                title="','"\n                ?disabled=',"\n                @click=",'>\n        <converse-icon class="fa ','"\n                    path-prefix="','" size="1em"\n                    color="','"\n        ></converse-icon>\n        </button>']);return Vw=function(){return e},e}const{Strophe:Gw,sizzle:Jw,$build:Xw,$iq:Qw,$msg:Yw}=Yc.env,Kw=Yc.env.utils;Gw.addNamespace("OMEMO_DEVICELIST",Gw.NS.OMEMO+".devicelist"),Gw.addNamespace("OMEMO_VERIFICATION",Gw.NS.OMEMO+".verification"),Gw.addNamespace("OMEMO_WHITELISTED",Gw.NS.OMEMO+".whitelisted"),Gw.addNamespace("OMEMO_BUNDLES",Gw.NS.OMEMO+".bundles");const Zw={name:"AES-GCM",length:128};class eS extends Error{constructor(e,t){super(e,t),this.name="IQError",this.iq=t}}const tS=Yc.env.omemo={async encryptMessage(e){const t=crypto.getRandomValues(new window.Uint8Array(12)),n=await crypto.subtle.generateKey(Zw,!0,["encrypt","decrypt"]),r={name:"AES-GCM",iv:t,tagLength:128},i=await crypto.subtle.encrypt(r,n,Kw.stringToArrayBuffer(e)),s=i.byteLength-16,o=i.slice(0,s),a=i.slice(s),c=await crypto.subtle.exportKey("raw",n);return{key:c,tag:a,key_and_tag:Kw.appendArrayBuffer(c,a),payload:Kw.arrayBufferToBase64(o),iv:Kw.arrayBufferToBase64(t)}},async decryptMessage(e){const t=await crypto.subtle.importKey("raw",e.key,Zw,!0,["encrypt","decrypt"]),n=Kw.appendArrayBuffer(Kw.base64ToArrayBuffer(e.payload),e.tag),r={name:"AES-GCM",iv:Kw.base64ToArrayBuffer(e.iv),tagLength:128};return Kw.arrayBufferToString(await crypto.subtle.decrypt(r,t,n))}};function nS(e,t){const n=new libsignal.SignalProtocolAddress(e,t);return new window.libsignal.SessionCipher(Lc.omemo_store,n)}async function rS(e,t){const n=e.encrypted,r=Lc.devicelists.getDeviceList(e.from);await r._devices_promise;let i=r.get(n.device_id);if(i||(i=await r.devices.create({id:n.device_id,jid:e.from},{promise:!0})),n.payload){const e=t.slice(0,16),r=t.slice(16),s=await tS.decryptMessage(Object.assign(n,{key:e,tag:r}));return i.save("active",!0),s}}function iS(e){return"debug"===qc.settings.get("loglevel")?{error_text:dd("Sorry, could not decrypt a received OMEMO message due to an error.")+" ".concat(e.name," ").concat(e.message),error_type:"Decryption",is_ephemeral:!0,is_error:!0,type:"error"}:{}}function sS(e){const t=e.querySelector("signedPreKeyPublic"),n=e.querySelector("signedPreKeySignature"),r=Jw("prekeys > preKeyPublic",e).map(e=>({id:parseInt(e.getAttribute("preKeyId"),10),key:e.textContent}));return{identity_key:e.querySelector("identityKey").textContent.trim(),signed_prekey:{id:parseInt(t.getAttribute("signedPreKeyId"),10),public_key:t.textContent,signature:n.textContent},prekeys:r}}async function oS(e){var t;if(null===(t=e.get("bundle"))||void 0===t?void 0:t.fingerprint)return;const n=await e.getBundle();n.fingerprint=Kw.arrayBufferToHex(Kw.base64ToArrayBuffer(n.identity_key)),e.save("bundle",n),e.trigger("change:bundle")}async function aS(e){await qc.waitUntil("OMEMOInitialized");const t=Lc.devicelists.get(e)||Lc.devicelists.create({jid:e});return await t.fetchDevices(),t.devices}async function cS(e){if(!e.get("bundle"))return Pn.error("Could not build an OMEMO session for device ".concat(e.get("id")," because we don't have its bundle")),null;const t=new libsignal.SignalProtocolAddress(e.get("jid"),e.get("id")),n=await Lc.omemo_store.loadSession(t.toString());if(n)return n;try{return await async function(e){const t=new libsignal.SignalProtocolAddress(e.get("jid"),e.get("id")),n=new libsignal.SessionBuilder(Lc.omemo_store,t),r=e.getRandomPreKey(),i=await e.getBundle();return n.processPreKey({registrationId:parseInt(e.get("id"),10),identityKey:Kw.base64ToArrayBuffer(i.identity_key),signedPreKey:{keyId:i.signed_prekey.id,publicKey:Kw.base64ToArrayBuffer(i.signed_prekey.public_key),signature:Kw.base64ToArrayBuffer(i.signed_prekey.signature)},preKey:{keyId:r.id,publicKey:Kw.base64ToArrayBuffer(r.key)}})}(e)}catch(t){return Pn.error("Could not build an OMEMO session for device ".concat(e.get("id"))),Pn.error(t),null}}function lS(){Lc.connection.addHandler(e=>{try{Jw('event[xmlns="'.concat(Gw.NS.PUBSUB,'#event"]'),e).length&&(function(e){const t=Jw('items[node="'.concat(Gw.NS.OMEMO_DEVICELIST,'"]'),e).pop();if(!t)return;const n='item list[xmlns="'.concat(Gw.NS.OMEMO,'"] device'),r=Jw(n,t).map(e=>e.getAttribute("id")),i=e.getAttribute("from"),s=Lc.devicelists.getDeviceList(i),o=s.devices;Eo(o.pluck("id"),r).forEach(e=>{i===Lc.bare_jid&&e===Lc.omemo_store.get("device_id")||o.get(e).save("active",!1)}),r.forEach(e=>{const t=o.get(e);t?t.save("active",!0):o.create({id:e,jid:i})}),Kw.isSameBareJID(i,Lc.bare_jid)&&s.publishCurrentDevice(r)}(e),function(e){const t=Jw("items",e).pop();if(!t||!t.getAttribute("node").startsWith(Gw.NS.OMEMO_BUNDLES))return;const n=t.getAttribute("node").split(":")[1],r=e.getAttribute("from"),i=Jw("item > bundle",t).pop(),s=Lc.devicelists.getDeviceList(r);(s.devices.get(n)||s.devices.create({id:n,jid:r})).save({bundle:sS(i)})}(e))}catch(e){Pn.error(e.message)}return!0},null,"message","headline")}function uS(){if(void 0===Lc.omemo_store){const e="converse.omemosession-".concat(Lc.bare_jid);Lc.omemo_store=new Lc.OMEMOStore({id:e}),Lc.omemo_store.browserStorage=Lc.createStore(e)}return Lc.omemo_store.fetchSession()}async function dS(){await new Promise((e,t)=>Lc.devicelists.fetch({success:e,error:(e,n)=>t(n)}));let e=Lc.devicelists.get(Lc.bare_jid);return e?e.fetchDevices():e=await Lc.devicelists.create({jid:Lc.bare_jid},{promise:!0}),e._devices_promise}async function hS(){if(!Lc.config.get("trusted"))return;Lc.devicelists=new Lc.DeviceLists;const e="converse.devicelists-".concat(Lc.bare_jid);Lc.devicelists.browserStorage=Lc.createStore(e);try{await dS(),await uS(),await Lc.omemo_store.publishBundle()}catch(e){return Pn.error("Could not initialize OMEMO support"),void Pn.error(e)}qc.trigger("OMEMOInitialized")}async function fS(e){let t;e.get("type")===Lc.CHATROOMS_TYPE?(await qc.waitUntil("OMEMOInitialized"),t=e.features.get("nonanonymous")&&e.features.get("membersonly")):e.get("type")===Lc.PRIVATE_CHAT_TYPE&&(t=await Lc.contactHasOMEMOSupport(e.get("jid"))),e.set("omemo_supported",t),t&&qc.settings.get("omemo_default")&&e.set("omemo_active",!0)}function pS(e){e.stopPropagation(),e.preventDefault();const t=Kw.ancestor(e.target,"converse-chat-toolbar");if(!t.model.get("omemo_supported")){let e;return e=t.model.get("type")===Lc.CHATROOMS_TYPE?[dd("Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.")]:[dd("Cannot use end-to-end encryption because %1$s uses a client that doesn't support OMEMO.",t.model.contact.getDisplayName())],qc.alert("error",dd("Error"),e)}t.model.save({omemo_active:!t.model.get("omemo_active")})}function gS(e,t){const n=e.model;let r;if(n.get("type")===Lc.CHATROOMS_TYPE&&n.get("omemo_supported")){const e=dd("Messages are being sent in plaintext"),t=dd("Messages are sent encrypted");r=n.get("omemo_active")?t:e}else r=dd("This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages");return t.push(Ga(Vw(),r,!n.get("omemo_supported"),pS,n.get("omemo_active")?"fa-lock":"fa-unlock",qc.settings.get("assets_path"),n.get("omemo_active")?"var(--info-color)":"var(--error-color)")),t}Yc.plugins.add("converse-omemo",{enabled:e=>window.libsignal&&!e.api.settings.get("blacklisted_plugins").includes("converse-omemo")&&e.config.get("trusted"),dependencies:["converse-chatview","converse-pubsub","converse-profile"],overrides:{ProfileModal:{events:{"change input.select-all":"selectAll","click .generate-bundle":"generateOMEMODeviceBundle","submit .fingerprint-removal":"removeSelectedFingerprints"},initialize(){return this.debouncedRender=Tc(this.render,50),this.devicelist=Lc.devicelists.get(Lc.bare_jid),this.listenTo(this.devicelist.devices,"change:bundle",this.debouncedRender),this.listenTo(this.devicelist.devices,"reset",this.debouncedRender),this.listenTo(this.devicelist.devices,"reset",this.debouncedRender),this.listenTo(this.devicelist.devices,"remove",this.debouncedRender),this.listenTo(this.devicelist.devices,"add",this.debouncedRender),this.__super__.initialize.apply(this,arguments)},beforeRender(){const e=Lc.omemo_store.get("device_id");if(e&&(this.current_device=this.devicelist.devices.get(e)),this.other_devices=this.devicelist.devices.filter(t=>t.get("id")!==e),this.__super__.beforeRender)return this.__super__.beforeRender.apply(this,arguments)},selectAll(e){let t=Kw.ancestor(e.target,"li");for(;t;)t.querySelector('input[type="checkbox"]').checked=e.target.checked,t=t.nextElementSibling},removeSelectedFingerprints(e){e.preventDefault(),e.stopPropagation(),e.target.querySelector(".select-all").checked=!1;const t=Jw('.fingerprint-removal-item input[type="checkbox"]:checked',e.target).map(e=>e.value);this.devicelist.removeOwnDevices(t).then(this.modal.hide).catch(e=>{Pn.error(e),Lc.api.alert(Gw.LogLevel.ERROR,dd("Error"),[dd("Sorry, an error occurred while trying to remove the devices.")])})},generateOMEMODeviceBundle(e){e.preventDefault(),confirm(dd("Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device."))&&qc.omemo.bundle.generate()}},UserDetailsModal:{events:{"click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){const e=this.model.get("jid");return this.devicelist=Lc.devicelists.getDeviceList(e),this.listenTo(this.devicelist.devices,"change:bundle",this.render),this.listenTo(this.devicelist.devices,"change:trusted",this.render),this.listenTo(this.devicelist.devices,"remove",this.render),this.listenTo(this.devicelist.devices,"add",this.render),this.listenTo(this.devicelist.devices,"reset",this.render),this.__super__.initialize.apply(this,arguments)},toggleDeviceTrust(e){const t=e.target;this.devicelist.devices.get(t.getAttribute("name")).save("trusted",parseInt(t.value,10))}},ChatBox:{async sendMessage(e,t){if(this.get("omemo_active")&&e){const n=this.getOutgoingMessageAttributes(e,t);let r,i;n.is_encrypted=!0,n.plaintext=n.message;try{const e=await Lc.getBundlesAndBuildSessions(this);r=await this.createMessage(n),i=await Lc.createOMEMOMessageStanza(this,r,e)}catch(e){return this.handleMessageSendError(e),null}return Lc.api.send(i),r}return this.__super__.sendMessage.apply(this,arguments)}}},initialize(){qc.settings.extend({omemo_default:!1}),qc.promises.add(["OMEMOInitialized"]),Lc.NUM_PREKEYS=100;const e={encryptKey:(e,t)=>nS(t.get("jid"),t.get("id")).encrypt(e).then(e=>({payload:e,device:t})),handleMessageSendError(e){if("IQError"===e.name){this.save("omemo_supported",!1);const t=[];Jw('presence-subscription-required[xmlns="'.concat(Gw.NS.PUBSUB_ERROR,'"]'),e.iq).length?t.push(dd("Sorry, we're unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information",e.iq.getAttribute("from"))):Jw('remote-server-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]',e.iq).length?t.push(dd("Sorry, we're unable to send an encrypted message because the remote server for %1$s could not be found",e.iq.getAttribute("from"))):(t.push(dd("Unable to send an encrypted message due to an unexpected error.")),t.push(e.iq.outerHTML)),qc.alert("error",dd("Error"),t),Pn.error(e)}else{if(!e.user_facing)throw e;qc.alert("error",dd("Error"),[e.message]),Pn.error(e)}}};function t(e,t){return t.is_encrypted&&t.encrypted.key?!0===t.encrypted.prekey?async function(e){const t=nS(e.from,parseInt(e.encrypted.device_id,10)),n=Kw.base64ToArrayBuffer(e.encrypted.key);let r;try{r=await t.decryptPreKeyWhisperMessage(n,"binary")}catch(t){return Pn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,iS(t))}try{const t=await rS(e,r);return await Lc.omemo_store.generateMissingPreKeys(),await Lc.omemo_store.publishBundle(),t?Object.assign(e,{plaintext:t}):Object.assign(e,{is_only_key:!0})}catch(t){return Pn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,iS(t))}}(t):async function(e){const t=e.from_muc?e.from_real_jid:e.from;t||Object.assign(e,{error_text:dd("Sorry, could not decrypt a received OMEMO because we don't have the JID for that user."),error_type:"Decryption",is_ephemeral:!1,is_error:!0,type:"error"});const n=nS(t,parseInt(e.encrypted.device_id,10)),r=Kw.base64ToArrayBuffer(e.encrypted.key);try{const t=await n.decryptWhisperMessage(r,"binary"),i=await rS(e,t);return Object.assign(e,{plaintext:i})}catch(t){return Pn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,iS(t))}}(t):t}Object.assign(Lc.ChatBox.prototype,e),Lc.generateFingerprints=async function(e){const t=await aS(e);return Promise.all(t.map(e=>oS(e)))},Lc.getDeviceForContact=function(e,t){return aS(e).then(e=>e.get(t))},Lc.contactHasOMEMOSupport=async function(e){return(await aS(e)).length>0},Lc.getBundlesAndBuildSessions=async function(e){const t=dd("Sorry, no devices found to which we can send an OMEMO encrypted message.");let n;if(e.get("type")===Lc.CHATROOMS_TYPE){const t=await Promise.all(e.occupants.map(e=>aS(e.get("jid"))));n=t.reduce((e,t)=>qw(e,t.models),[])}else if(e.get("type")===Lc.PRIVATE_CHAT_TYPE){const r=await aS(e.get("jid"));if(0===r.length){const e=new Error(t);throw e.user_facing=!0,e}const i=Lc.devicelists.get(Lc.bare_jid).devices;n=[...i.models,...r.models]}const r=Lc.omemo_store.get("device_id");n=n.filter(e=>e.get("id")!==r),await Promise.all(n.map(e=>e.getBundle()));const i=n.filter(e=>e).map(e=>cS(e));if(await Promise.all(i),i.includes(null)&&(n=n.filter(e=>i[n.indexOf(e)]),0===n.length)){const e=new Error(t);throw e.user_facing=!0,e}return n},Lc.createOMEMOMessageStanza=function(e,t,n){const r=dd("This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo");if(!t.get("message"))throw new Error("No message body to encrypt!");const i=Yw({from:Lc.connection.jid,to:e.get("jid"),type:e.get("message_type"),id:t.get("msgid")}).c("body").t(r).up();return"chat"===t.get("type")&&i.c("request",{xmlns:Gw.NS.RECEIPTS}).up(),i.c("encrypted",{xmlns:Gw.NS.OMEMO}).c("header",{sid:Lc.omemo_store.get("device_id")}),tS.encryptMessage(t.get("message")).then(t=>{const r=n.filter(e=>-1!=e.get("trusted")&&e.get("active")).map(n=>e.encryptKey(t.key_and_tag,n));return Promise.all(r).then(e=>function(e,t,n){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const i=t[r].payload,s=t[r].device,o=3==parseInt(i.type,10);e.c("key",{rid:s.get("id")}).t(btoa(i.body)),o&&e.attrs({prekey:o}),e.up(),r==t.length-1&&e.c("iv").t(n).up().up()}return Promise.resolve(e)}(i,e,t.iv)).then(e=>(e.c("payload").t(t.payload).up().up(),e.c("store",{xmlns:Gw.NS.HINTS}),e))})},Lc.OMEMOStore=Rs.extend({Direction:{SENDING:1,RECEIVING:2},getIdentityKeyPair(){const e=this.get("identity_keypair");return Promise.resolve({privKey:Kw.base64ToArrayBuffer(e.privKey),pubKey:Kw.base64ToArrayBuffer(e.pubKey)})},getLocalRegistrationId(){return Promise.resolve(parseInt(this.get("device_id"),10))},isTrustedIdentity(e,t,n){if(null==e)throw new Error("Can't check identity key for invalid key");if(!(t instanceof ArrayBuffer))throw new Error("Expected identity_key to be an ArrayBuffer");const r=this.get("identity_key"+e);return void 0===r?Promise.resolve(!0):Promise.resolve(Kw.arrayBufferToBase64(t)===r)},loadIdentityKey(e){if(null==e)throw new Error("Can't load identity_key for invalid identifier");return Promise.resolve(Kw.base64ToArrayBuffer(this.get("identity_key"+e)))},saveIdentity(e,t){if(null==e)throw new Error("Can't save identity_key for invalid identifier");const n=new libsignal.SignalProtocolAddress.fromString(e),r=this.get("identity_key"+n.getName()),i=Kw.arrayBufferToBase64(t);return this.save("identity_key"+n.getName(),i),r&&i!==r?Promise.resolve(!0):Promise.resolve(!1)},getPreKeys(){return this.get("prekeys")||{}},loadPreKey(e){const t=this.getPreKeys()[e];return t?Promise.resolve({privKey:Kw.base64ToArrayBuffer(t.privKey),pubKey:Kw.base64ToArrayBuffer(t.pubKey)}):Promise.resolve()},storePreKey(e,t){const n={};return n[e]={pubKey:Kw.arrayBufferToBase64(t.pubKey),privKey:Kw.arrayBufferToBase64(t.privKey)},this.save("prekeys",Object.assign(this.getPreKeys(),n)),Promise.resolve()},removePreKey(e){return this.save("prekeys",Os(this.getPreKeys(),e)),Promise.resolve()},loadSignedPreKey(e){const t=this.get("signed_prekey");return t?Promise.resolve({privKey:Kw.base64ToArrayBuffer(t.privKey),pubKey:Kw.base64ToArrayBuffer(t.pubKey)}):Promise.resolve()},storeSignedPreKey(e){if("object"!=typeof e)throw new Error("storeSignedPreKey: expected an object");return this.save("signed_prekey",{id:e.keyId,privKey:Kw.arrayBufferToBase64(e.keyPair.privKey),pubKey:Kw.arrayBufferToBase64(e.keyPair.pubKey),signature:Kw.arrayBufferToBase64(e.signature)}),Promise.resolve()},removeSignedPreKey(e){return this.get("signed_prekey").id===e&&(this.unset("signed_prekey"),this.save()),Promise.resolve()},loadSession(e){return Promise.resolve(this.get("session"+e))},storeSession(e,t){return Promise.resolve(this.save("session"+e,t))},removeSession(e){return Promise.resolve(this.unset("session"+e))},removeAllSessions(e){const t=Object.keys(this.attributes).filter(t=>!!t.startsWith("session"+e)&&t),n={};return t.forEach(e=>{n[e]=void 0}),this.save(n),Promise.resolve()},publishBundle(){const e=this.get("signed_prekey"),t="".concat(Gw.NS.OMEMO_BUNDLES,":").concat(this.get("device_id")),n=Xw("item").c("bundle",{xmlns:Gw.NS.OMEMO}).c("signedPreKeyPublic",{signedPreKeyId:e.id}).t(e.pubKey).up().c("signedPreKeySignature").t(e.signature).up().c("identityKey").t(this.get("identity_keypair").pubKey).up().c("prekeys");Object.values(this.get("prekeys")).forEach((e,t)=>n.c("preKeyPublic",{preKeyId:t}).t(e.pubKey).up());return qc.pubsub.publish(null,t,n,{"pubsub#access_model":"open"},!1)},async generateMissingPreKeys(){const e=Eo(kd(Ww(0,Lc.NUM_PREKEYS),Number.prototype.toString),Object.keys(this.getPreKeys()));if(e.length<1)return Pn.warn("No missing prekeys to generate for our own device"),Promise.resolve();(await Promise.all(e.map(e=>libsignal.KeyHelper.generatePreKey(parseInt(e,10))))).forEach(e=>this.storePreKey(e.keyId,e.keyPair));const t=Object.keys(this.getPreKeys()).map(e=>({id:e.keyId,key:Kw.arrayBufferToBase64(e.pubKey)})),n=Lc.devicelists.get(Lc.bare_jid).devices.get(this.get("device_id")),r=await n.getBundle();n.save("bundle",Object.assign(r,{prekeys:t}))},async generateBundle(){const e=await libsignal.KeyHelper.generateIdentityKeyPair(),t={},n=Kw.arrayBufferToBase64(e.pubKey),r=function(){const e=Lc.devicelists.get(Lc.bare_jid).devices.pluck("id");let t=libsignal.KeyHelper.generateRegistrationId(),n=0;for(;e.includes(t);)if(t=libsignal.KeyHelper.generateRegistrationId(),n++,10===n)throw new Error("Unable to generate a unique device ID");return t.toString()}();t.identity_key=n,t.device_id=r,this.save({device_id:r,identity_keypair:{privKey:Kw.arrayBufferToBase64(e.privKey),pubKey:n},identity_key:n});const i=await libsignal.KeyHelper.generateSignedPreKey(e,0);Lc.omemo_store.storeSignedPreKey(i),t.signed_prekey={id:i.keyId,public_key:Kw.arrayBufferToBase64(i.keyPair.privKey),signature:Kw.arrayBufferToBase64(i.signature)};const s=await Promise.all(Ww(0,Lc.NUM_PREKEYS).map(e=>libsignal.KeyHelper.generatePreKey(e)));s.forEach(e=>Lc.omemo_store.storePreKey(e.keyId,e.keyPair));const o=Lc.devicelists.get(Lc.bare_jid),a=await o.devices.create({id:t.device_id,jid:Lc.bare_jid},{promise:!0}),c=s.map(e=>({id:e.keyId,key:Kw.arrayBufferToBase64(e.keyPair.pubKey)}));t.prekeys=c,a.save("bundle",t)},fetchSession(){return void 0===this._setup_promise&&(this._setup_promise=new Promise((e,t)=>{this.fetch({success:()=>{Lc.omemo_store.get("device_id")?e():this.generateBundle().then(e).catch(t)},error:(n,r)=>{Pn.warn("Could not fetch OMEMO session from cache, we'll generate a new one."),Pn.warn(r),this.generateBundle().then(e).catch(t)}})})),this._setup_promise}}),Lc.Device=Rs.extend({defaults:{trusted:0,active:!0},getRandomPreKey(){const e=this.get("bundle");return e.prekeys[Kw.getRandomInt(e.prekeys.length)]},async fetchBundleFromServer(){const e=Qw({type:"get",from:Lc.bare_jid,to:this.get("jid")}).c("pubsub",{xmlns:Gw.NS.PUBSUB}).c("items",{node:"".concat(Gw.NS.OMEMO_BUNDLES,":").concat(this.get("id"))});let t;try{t=await qc.sendIQ(e)}catch(t){return Pn.error("Could not fetch bundle for device ".concat(this.get("id")," from ").concat(this.get("jid"))),Pn.error(t),null}if(t.querySelector("error"))throw new eS("Could not fetch bundle",t);const n=Jw('items[node="'.concat(Gw.NS.OMEMO_BUNDLES,":").concat(this.get("id"),'"]'),t).pop(),r=sS(Jw('bundle[xmlns="'.concat(Gw.NS.OMEMO,'"]'),n).pop());return this.save("bundle",r),r},getBundle(){return this.get("bundle")?Promise.resolve(this.get("bundle"),this):this.fetchBundleFromServer()}}),Lc.Devices=Yo.extend({model:Lc.Device}),Lc.DeviceList=Rs.extend({idAttribute:"jid",initialize(){this.devices=new Lc.Devices;const e="converse.devicelist-".concat(Lc.bare_jid,"-").concat(this.get("jid"));this.devices.browserStorage=Lc.createStore(e),this.fetchDevices()},async onDevicesFound(e){if(0===e.length){let e;try{e=await this.fetchDevicesFromServer()}catch(e){null===e?Pn.error("Timeout error while fetching devices for ".concat(this.get("jid"))):(Pn.error("Could not fetch devices for ".concat(this.get("jid"))),Pn.error(e)),this.destroy()}this.get("jid")===Lc.bare_jid&&await this.publishCurrentDevice(e)}},fetchDevices(){return void 0===this._devices_promise&&(this._devices_promise=new Promise(e=>{this.devices.fetch({success:t=>e(this.onDevicesFound(t)),error:(t,n)=>{Pn.error(n),e()}})})),this._devices_promise},async getOwnDeviceId(){let e=Lc.omemo_store.get("device_id");return this.devices.findWhere({id:e})||(await Lc.omemo_store.generateBundle(),e=Lc.omemo_store.get("device_id")),e},async publishCurrentDevice(e){if(this.get("jid")===Lc.bare_jid){if(await uS(),Lc.omemo_store)return e.includes(await this.getOwnDeviceId())?void 0:this.publishDevices();Pn.warn("publishCurrentDevice: omemo_store is not defined, likely a timing issue")}},async fetchDevicesFromServer(){const e=Qw({type:"get",from:Lc.bare_jid,to:this.get("jid")}).c("pubsub",{xmlns:Gw.NS.PUBSUB}).c("items",{node:Gw.NS.OMEMO_DEVICELIST});let t;try{t=await qc.sendIQ(e)}catch(e){return Pn.error(e),[]}const n='list[xmlns="'.concat(Gw.NS.OMEMO,'"] device'),r=Jw(n,t).map(e=>e.getAttribute("id"));return await Promise.all(r.map(e=>this.devices.create({id:e,jid:this.get("jid")},{promise:!0}))),r},publishDevices(){const e=Xw("item",{id:"current"}).c("list",{xmlns:Gw.NS.OMEMO});this.devices.filter(e=>e.get("active")).forEach(t=>e.c("device",{id:t.get("id")}).up());return qc.pubsub.publish(null,Gw.NS.OMEMO_DEVICELIST,e,{"pubsub#access_model":"open"},!1)},removeOwnDevices(e){if(this.get("jid")!==Lc.bare_jid)throw new Error("Cannot remove devices from someone else's device list");return e.forEach(e=>this.devices.get(e).destroy()),this.publishDevices()}}),Lc.DeviceLists=Yo.extend({model:Lc.DeviceList,getDeviceList(e){return this.get(e)||this.create({jid:e})}}),qc.listen.on("parseMessage",t),qc.listen.on("parseMUCMessage",t),qc.waitUntil("chatBoxesInitialized").then(()=>Lc.chatboxes.on("add",e=>{fS(e),e.get("type")===Lc.CHATROOMS_TYPE&&(e.occupants.on("add",t=>async function(e,t){if(!t.isSelf()&&e.features.get("nonanonymous")&&e.features.get("membersonly")&&e.get("omemo_active")){await Lc.contactHasOMEMOSupport(t.get("jid"))||(e.createMessage({message:dd("%1$s doesn't appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.",t.get("nick")),type:"error"}),e.save({omemo_active:!1,omemo_supported:!1}))}}(e,t)),e.features.on("change",()=>fS(e)))}));const n=e=>{e.listenTo(e.model.messages,"add",t=>{t.get("is_encrypted")&&!t.get("is_error")&&e.model.save("omemo_supported",!0)}),e.listenTo(e.model,"change:omemo_supported",()=>{var t;!e.model.get("omemo_supported")&&e.model.get("omemo_active")?e.model.set("omemo_active",!1):null===(t=e.el.querySelector("converse-chat-toolbar"))||void 0===t||t.requestUpdate()}),e.listenTo(e.model,"change:omemo_active",()=>{e.el.querySelector("converse-chat-toolbar").requestUpdate()})};qc.listen.on("chatBoxViewInitialized",n),qc.listen.on("chatRoomViewInitialized",n),qc.listen.on("connected",lS),qc.listen.on("getToolbarButtons",gS),qc.listen.on("statusInitialized",hS),qc.listen.on("addClientFeatures",()=>qc.disco.own.features.add("".concat(Gw.NS.OMEMO_DEVICELIST,"+notify"))),qc.listen.on("userDetailsModalInitialized",e=>{const t=e.get("jid");Lc.generateFingerprints(t).catch(e=>Pn.error(e))}),qc.listen.on("profileModalInitialized",()=>{Lc.generateFingerprints(Lc.bare_jid).catch(e=>Pn.error(e))}),qc.listen.on("afterTearDown",()=>delete Lc.omemo_store),qc.listen.on("clearSession",()=>{Lc.shouldClearCache()&&Lc.devicelists&&(Lc.devicelists.clearStore(),delete Lc.devicelists)}),Object.assign(Lc.api,{omemo:{bundle:{generate:async()=>{const e=Lc.devicelists.get(Lc.bare_jid),t=Lc.omemo_store.get("device_id");if(t){const n=e.devices.get(t);Lc.omemo_store.unset(t),n&&await new Promise(e=>n.destroy({success:e,error:e})),e.devices.trigger("remove")}await Lc.omemo_store.generateBundle(),await e.publishDevices();const n=oS(e.devices.get(Lc.omemo_store.get("device_id")));return await Lc.omemo_store.publishBundle(),n}}}})}});
+ */(['\n        <button class="toggle-omemo"\n                title="','"\n                ?disabled=',"\n                @click=",'>\n        <converse-icon class="fa ','"\n                    path-prefix="','" size="1em"\n                    color="','"\n        ></converse-icon>\n        </button>']);return Nx=function(){return e},e}const{Strophe:Ix,sizzle:Mx,$build:Rx,$iq:Dx,$msg:Px}=rl.env,Lx=rl.env.utils;Ix.addNamespace("OMEMO_DEVICELIST",Ix.NS.OMEMO+".devicelist"),Ix.addNamespace("OMEMO_VERIFICATION",Ix.NS.OMEMO+".verification"),Ix.addNamespace("OMEMO_WHITELISTED",Ix.NS.OMEMO+".whitelisted"),Ix.addNamespace("OMEMO_BUNDLES",Ix.NS.OMEMO+".bundles");const zx={name:"AES-GCM",length:128};class Fx extends Error{constructor(e,t){super(e,t),this.name="IQError",this.iq=t}}function Bx(e,t){return t.is_encrypted&&t.encrypted.key?!0===t.encrypted.prekey?async function(e){const t=$x(e.from,parseInt(e.encrypted.device_id,10)),n=Lx.base64ToArrayBuffer(e.encrypted.key);let r;try{r=await t.decryptPreKeyWhisperMessage(n,"binary")}catch(t){return zn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,Gx(t))}try{const t=await Wx(e,r);return await Uc.omemo_store.generateMissingPreKeys(),await Uc.omemo_store.publishBundle(),t?Object.assign(e,{plaintext:t}):Object.assign(e,{is_only_key:!0})}catch(t){return zn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,Gx(t))}}(t):async function(e){const t=e.from_muc?e.from_real_jid:e.from;t||Object.assign(e,{error_text:zd("Sorry, could not decrypt a received OMEMO because we don't have the JID for that user."),error_type:"Decryption",is_ephemeral:!1,is_error:!0,type:"error"});const n=$x(t,parseInt(e.encrypted.device_id,10)),r=Lx.base64ToArrayBuffer(e.encrypted.key);try{const t=await n.decryptWhisperMessage(r,"binary"),i=await Wx(e,t);return Object.assign(e,{plaintext:i})}catch(t){return zn.error("".concat(t.name," ").concat(t.message)),Object.assign(e,Gx(t))}}(t):t}function qx(){Uc.chatboxes.on("add",e=>{tE(e),e.get("type")===Uc.CHATROOMS_TYPE&&(e.occupants.on("add",t=>async function(e,t){if(t.isSelf()||!e.features.get("nonanonymous")||!e.features.get("membersonly"))return;if(e.get("omemo_active")){await Uc.contactHasOMEMOSupport(t.get("jid"))||(e.createMessage({message:zd("%1$s doesn't appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.",t.get("nick")),type:"error"}),e.save({omemo_active:!1,omemo_supported:!1}))}}(e,t)),e.features.on("change",()=>tE(e)))})}function Hx(e){e.listenTo(e.model.messages,"add",t=>{t.get("is_encrypted")&&!t.get("is_error")&&e.model.save("omemo_supported",!0)}),e.listenTo(e.model,"change:omemo_supported",()=>{var t;!e.model.get("omemo_supported")&&e.model.get("omemo_active")?e.model.set("omemo_active",!1):null===(t=e.el.querySelector("converse-chat-toolbar"))||void 0===t||t.requestUpdate()}),e.listenTo(e.model,"change:omemo_active",()=>{e.el.querySelector("converse-chat-toolbar").requestUpdate()})}const Ux=rl.env.omemo={async encryptMessage(e){const t=crypto.getRandomValues(new window.Uint8Array(12)),n=await crypto.subtle.generateKey(zx,!0,["encrypt","decrypt"]),r={name:"AES-GCM",iv:t,tagLength:128},i=await crypto.subtle.encrypt(r,n,Lx.stringToArrayBuffer(e)),o=i.byteLength-16,s=i.slice(0,o),a=i.slice(o),c=await crypto.subtle.exportKey("raw",n);return{key:c,tag:a,key_and_tag:Lx.appendArrayBuffer(c,a),payload:Lx.arrayBufferToBase64(s),iv:Lx.arrayBufferToBase64(t)}},async decryptMessage(e){const t=await crypto.subtle.importKey("raw",e.key,zx,!0,["encrypt","decrypt"]),n=Lx.appendArrayBuffer(Lx.base64ToArrayBuffer(e.payload),e.tag),r={name:"AES-GCM",iv:Lx.base64ToArrayBuffer(e.iv),tagLength:128};return Lx.arrayBufferToString(await crypto.subtle.decrypt(r,t,n))}};function $x(e,t){const n=new libsignal.SignalProtocolAddress(e,t);return new window.libsignal.SessionCipher(Uc.omemo_store,n)}async function Wx(e,t){const n=e.encrypted,r=Uc.devicelists.getDeviceList(e.from);await r._devices_promise;let i=r.get(n.device_id);if(i||(i=await r.devices.create({id:n.device_id,jid:e.from},{promise:!0})),n.payload){const e=t.slice(0,16),r=t.slice(16),o=await Ux.decryptMessage(Object.assign(n,{key:e,tag:r}));return i.save("active",!0),o}}function Gx(e){return"debug"===Vc.settings.get("loglevel")?{error_text:zd("Sorry, could not decrypt a received OMEMO message due to an error.")+" ".concat(e.name," ").concat(e.message),error_type:"Decryption",is_ephemeral:!0,is_error:!0,type:"error"}:{}}function Vx(e){const t=e.querySelector("signedPreKeyPublic"),n=e.querySelector("signedPreKeySignature"),r=Mx("prekeys > preKeyPublic",e).map(e=>({id:parseInt(e.getAttribute("preKeyId"),10),key:e.textContent}));return{identity_key:e.querySelector("identityKey").textContent.trim(),signed_prekey:{id:parseInt(t.getAttribute("signedPreKeyId"),10),public_key:t.textContent,signature:n.textContent},prekeys:r}}async function Jx(e){var t;if(null===(t=e.get("bundle"))||void 0===t?void 0:t.fingerprint)return;const n=await e.getBundle();n.fingerprint=Lx.arrayBufferToHex(Lx.base64ToArrayBuffer(n.identity_key)),e.save("bundle",n),e.trigger("change:bundle")}async function Xx(e){await Vc.waitUntil("OMEMOInitialized");const t=Uc.devicelists.get(e)||Uc.devicelists.create({jid:e});return await t.fetchDevices(),t.devices}async function Qx(e){if(!e.get("bundle"))return zn.error("Could not build an OMEMO session for device ".concat(e.get("id")," because we don't have its bundle")),null;const t=new libsignal.SignalProtocolAddress(e.get("jid"),e.get("id")),n=await Uc.omemo_store.loadSession(t.toString());if(n)return n;try{return await async function(e){const t=new libsignal.SignalProtocolAddress(e.get("jid"),e.get("id")),n=new libsignal.SessionBuilder(Uc.omemo_store,t),r=e.getRandomPreKey(),i=await e.getBundle();return n.processPreKey({registrationId:parseInt(e.get("id"),10),identityKey:Lx.base64ToArrayBuffer(i.identity_key),signedPreKey:{keyId:i.signed_prekey.id,publicKey:Lx.base64ToArrayBuffer(i.signed_prekey.public_key),signature:Lx.base64ToArrayBuffer(i.signed_prekey.signature)},preKey:{keyId:r.id,publicKey:Lx.base64ToArrayBuffer(r.key)}})}(e)}catch(t){return zn.error("Could not build an OMEMO session for device ".concat(e.get("id"))),zn.error(t),null}}function Yx(){Uc.connection.addHandler(e=>{try{Mx('event[xmlns="'.concat(Ix.NS.PUBSUB,'#event"]'),e).length&&(function(e){const t=Mx('items[node="'.concat(Ix.NS.OMEMO_DEVICELIST,'"]'),e).pop();if(!t)return;const n='item list[xmlns="'.concat(Ix.NS.OMEMO,'"] device'),r=Mx(n,t).map(e=>e.getAttribute("id")),i=e.getAttribute("from"),o=Uc.devicelists.getDeviceList(i),s=o.devices;ks(s.pluck("id"),r).forEach(e=>{i===Uc.bare_jid&&e===Uc.omemo_store.get("device_id")||s.get(e).save("active",!1)}),r.forEach(e=>{const t=s.get(e);t?t.save("active",!0):s.create({id:e,jid:i})}),Lx.isSameBareJID(i,Uc.bare_jid)&&o.publishCurrentDevice(r)}(e),function(e){const t=Mx("items",e).pop();if(!t||!t.getAttribute("node").startsWith(Ix.NS.OMEMO_BUNDLES))return;const n=t.getAttribute("node").split(":")[1],r=e.getAttribute("from"),i=Mx("item > bundle",t).pop(),o=Uc.devicelists.getDeviceList(r);(o.devices.get(n)||o.devices.create({id:n,jid:r})).save({bundle:Vx(i)})}(e))}catch(e){zn.error(e.message)}return!0},null,"message","headline")}function Kx(){if(void 0===Uc.omemo_store){const e="converse.omemosession-".concat(Uc.bare_jid);Uc.omemo_store=new Uc.OMEMOStore({id:e}),Uc.omemo_store.browserStorage=Uc.createStore(e)}return Uc.omemo_store.fetchSession()}async function Zx(){await new Promise((e,t)=>Uc.devicelists.fetch({success:e,error:(e,n)=>t(n)}));let e=Uc.devicelists.get(Uc.bare_jid);return e?e.fetchDevices():e=await Uc.devicelists.create({jid:Uc.bare_jid},{promise:!0}),e._devices_promise}async function eE(){if(!Uc.config.get("trusted")||Vc.settings.get("clear_cache_on_logout"))return void zn.warn("Not initializing OMEMO, since this browser is not trusted or clear_cache_on_logout is set to true");Uc.devicelists=new Uc.DeviceLists;const e="converse.devicelists-".concat(Uc.bare_jid);Uc.devicelists.browserStorage=Uc.createStore(e);try{await Zx(),await Kx(),await Uc.omemo_store.publishBundle()}catch(e){return zn.error("Could not initialize OMEMO support"),void zn.error(e)}Vc.trigger("OMEMOInitialized")}async function tE(e){let t;e.get("type")===Uc.CHATROOMS_TYPE?(await Vc.waitUntil("OMEMOInitialized"),t=e.features.get("nonanonymous")&&e.features.get("membersonly")):e.get("type")===Uc.PRIVATE_CHAT_TYPE&&(t=await Uc.contactHasOMEMOSupport(e.get("jid"))),e.set("omemo_supported",t),t&&Vc.settings.get("omemo_default")&&e.set("omemo_active",!0)}function nE(e){e.stopPropagation(),e.preventDefault();const t=Lx.ancestor(e.target,"converse-chat-toolbar");if(!t.model.get("omemo_supported")){let e;return e=t.model.get("type")===Uc.CHATROOMS_TYPE?[zd("Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.")]:[zd("Cannot use end-to-end encryption because %1$s uses a client that doesn't support OMEMO.",t.model.contact.getDisplayName())],Vc.alert("error",zd("Error"),e)}t.model.save({omemo_active:!t.model.get("omemo_active")})}function rE(e,t){const n=e.model;let r;if(n.get("type")===Uc.CHATROOMS_TYPE&&n.get("omemo_supported")){const e=zd("Messages are being sent in plaintext"),t=zd("Messages are sent encrypted");r=n.get("omemo_active")?t:e}else r=zd("This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages");return t.push(Za(Nx(),r,!n.get("omemo_supported"),nE,n.get("omemo_active")?"fa-lock":"fa-unlock",Vc.settings.get("assets_path"),n.get("omemo_active")?"var(--info-color)":"var(--error-color)")),t}const iE={encryptKey:(e,t)=>$x(t.get("jid"),t.get("id")).encrypt(e).then(e=>({payload:e,device:t})),handleMessageSendError(e){if("IQError"===e.name){this.save("omemo_supported",!1);const t=[];Mx('presence-subscription-required[xmlns="'.concat(Ix.NS.PUBSUB_ERROR,'"]'),e.iq).length?t.push(zd("Sorry, we're unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information",e.iq.getAttribute("from"))):Mx('remote-server-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]',e.iq).length?t.push(zd("Sorry, we're unable to send an encrypted message because the remote server for %1$s could not be found",e.iq.getAttribute("from"))):(t.push(zd("Unable to send an encrypted message due to an unexpected error.")),t.push(e.iq.outerHTML)),Vc.alert("error",zd("Error"),t),zn.error(e)}else{if(!e.user_facing)throw e;Vc.alert("error",zd("Error"),[e.message]),zn.error(e)}}};rl.plugins.add("converse-omemo",{enabled:e=>window.libsignal&&e.config.get("trusted")&&!Vc.settings.get("clear_cache_on_logout")&&!e.api.settings.get("blacklisted_plugins").includes("converse-omemo"),dependencies:["converse-chatview","converse-pubsub","converse-profile"],overrides:{ProfileModal:{events:{"change input.select-all":"selectAll","click .generate-bundle":"generateOMEMODeviceBundle","submit .fingerprint-removal":"removeSelectedFingerprints"},initialize(){return this.debouncedRender=Rc(this.render,50),this.devicelist=Uc.devicelists.get(Uc.bare_jid),this.listenTo(this.devicelist.devices,"change:bundle",this.debouncedRender),this.listenTo(this.devicelist.devices,"reset",this.debouncedRender),this.listenTo(this.devicelist.devices,"reset",this.debouncedRender),this.listenTo(this.devicelist.devices,"remove",this.debouncedRender),this.listenTo(this.devicelist.devices,"add",this.debouncedRender),this.__super__.initialize.apply(this,arguments)},beforeRender(){const e=Uc.omemo_store.get("device_id");if(e&&(this.current_device=this.devicelist.devices.get(e)),this.other_devices=this.devicelist.devices.filter(t=>t.get("id")!==e),this.__super__.beforeRender)return this.__super__.beforeRender.apply(this,arguments)},selectAll(e){let t=Lx.ancestor(e.target,"li");for(;t;)t.querySelector('input[type="checkbox"]').checked=e.target.checked,t=t.nextElementSibling},removeSelectedFingerprints(e){e.preventDefault(),e.stopPropagation(),e.target.querySelector(".select-all").checked=!1;const t=Mx('.fingerprint-removal-item input[type="checkbox"]:checked',e.target).map(e=>e.value);this.devicelist.removeOwnDevices(t).then(this.modal.hide).catch(e=>{zn.error(e),Uc.api.alert(Ix.LogLevel.ERROR,zd("Error"),[zd("Sorry, an error occurred while trying to remove the devices.")])})},generateOMEMODeviceBundle(e){e.preventDefault(),confirm(zd("Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device."))&&Vc.omemo.bundle.generate()}},UserDetailsModal:{events:{"click .fingerprint-trust .btn input":"toggleDeviceTrust"},initialize(){const e=this.model.get("jid");return this.devicelist=Uc.devicelists.getDeviceList(e),this.listenTo(this.devicelist.devices,"change:bundle",this.render),this.listenTo(this.devicelist.devices,"change:trusted",this.render),this.listenTo(this.devicelist.devices,"remove",this.render),this.listenTo(this.devicelist.devices,"add",this.render),this.listenTo(this.devicelist.devices,"reset",this.render),this.__super__.initialize.apply(this,arguments)},toggleDeviceTrust(e){const t=e.target;this.devicelist.devices.get(t.getAttribute("name")).save("trusted",parseInt(t.value,10))}},ChatBox:{async sendMessage(e,t){if(this.get("omemo_active")&&e){const n=this.getOutgoingMessageAttributes(e,t);let r,i;n.is_encrypted=!0,n.plaintext=n.message;try{const e=await Uc.getBundlesAndBuildSessions(this);r=await this.createMessage(n),i=await Uc.createOMEMOMessageStanza(this,r,e)}catch(e){return this.handleMessageSendError(e),null}return Uc.api.send(i),r}return this.__super__.sendMessage.apply(this,arguments)}}},initialize(){Vc.settings.extend({omemo_default:!1}),Vc.promises.add(["OMEMOInitialized"]),Uc.NUM_PREKEYS=100,Object.assign(Uc.ChatBox.prototype,iE),Uc.generateFingerprints=async function(e){const t=await Xx(e);return Promise.all(t.map(e=>Jx(e)))},Uc.getDeviceForContact=function(e,t){return Xx(e).then(e=>e.get(t))},Uc.contactHasOMEMOSupport=async function(e){return(await Xx(e)).length>0},Uc.getBundlesAndBuildSessions=async function(e){const t=zd("Sorry, no devices found to which we can send an OMEMO encrypted message.");let n;if(e.get("type")===Uc.CHATROOMS_TYPE){const t=await Promise.all(e.occupants.map(e=>Xx(e.get("jid"))));n=t.reduce((e,t)=>Cx(e,t.models),[])}else if(e.get("type")===Uc.PRIVATE_CHAT_TYPE){const r=await Xx(e.get("jid"));if(0===r.length){const e=new Error(t);throw e.user_facing=!0,e}const i=Uc.devicelists.get(Uc.bare_jid).devices;n=[...i.models,...r.models]}const r=Uc.omemo_store.get("device_id");n=n.filter(e=>e.get("id")!==r),await Promise.all(n.map(e=>e.getBundle()));const i=n.filter(e=>e).map(e=>Qx(e));if(await Promise.all(i),i.includes(null)&&(n=n.filter(e=>i[n.indexOf(e)]),0===n.length)){const e=new Error(t);throw e.user_facing=!0,e}return n},Uc.createOMEMOMessageStanza=function(e,t,n){const r=zd("This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo");if(!t.get("message"))throw new Error("No message body to encrypt!");const i=Px({from:Uc.connection.jid,to:e.get("jid"),type:e.get("message_type"),id:t.get("msgid")}).c("body").t(r).up();return"chat"===t.get("type")&&i.c("request",{xmlns:Ix.NS.RECEIPTS}).up(),i.c("encrypted",{xmlns:Ix.NS.OMEMO}).c("header",{sid:Uc.omemo_store.get("device_id")}),Ux.encryptMessage(t.get("message")).then(t=>{const r=n.filter(e=>-1!=e.get("trusted")&&e.get("active")).map(n=>e.encryptKey(t.key_and_tag,n));return Promise.all(r).then(e=>function(e,t,n){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const i=t[r].payload,o=t[r].device,s=3==parseInt(i.type,10);e.c("key",{rid:o.get("id")}).t(btoa(i.body)),s&&e.attrs({prekey:s}),e.up(),r==t.length-1&&e.c("iv").t(n).up().up()}return Promise.resolve(e)}(i,e,t.iv)).then(e=>(e.c("payload").t(t.payload).up().up(),e.c("store",{xmlns:Ix.NS.HINTS}),e))})},Uc.OMEMOStore=qo.extend({Direction:{SENDING:1,RECEIVING:2},getIdentityKeyPair(){const e=this.get("identity_keypair");return Promise.resolve({privKey:Lx.base64ToArrayBuffer(e.privKey),pubKey:Lx.base64ToArrayBuffer(e.pubKey)})},getLocalRegistrationId(){return Promise.resolve(parseInt(this.get("device_id"),10))},isTrustedIdentity(e,t,n){if(null==e)throw new Error("Can't check identity key for invalid key");if(!(t instanceof ArrayBuffer))throw new Error("Expected identity_key to be an ArrayBuffer");const r=this.get("identity_key"+e);return void 0===r?Promise.resolve(!0):Promise.resolve(Lx.arrayBufferToBase64(t)===r)},loadIdentityKey(e){if(null==e)throw new Error("Can't load identity_key for invalid identifier");return Promise.resolve(Lx.base64ToArrayBuffer(this.get("identity_key"+e)))},saveIdentity(e,t){if(null==e)throw new Error("Can't save identity_key for invalid identifier");const n=new libsignal.SignalProtocolAddress.fromString(e),r=this.get("identity_key"+n.getName()),i=Lx.arrayBufferToBase64(t);return this.save("identity_key"+n.getName(),i),r&&i!==r?Promise.resolve(!0):Promise.resolve(!1)},getPreKeys(){return this.get("prekeys")||{}},loadPreKey(e){const t=this.getPreKeys()[e];return t?Promise.resolve({privKey:Lx.base64ToArrayBuffer(t.privKey),pubKey:Lx.base64ToArrayBuffer(t.pubKey)}):Promise.resolve()},storePreKey(e,t){const n={};return n[e]={pubKey:Lx.arrayBufferToBase64(t.pubKey),privKey:Lx.arrayBufferToBase64(t.privKey)},this.save("prekeys",Object.assign(this.getPreKeys(),n)),Promise.resolve()},removePreKey(e){return this.save("prekeys",Po(this.getPreKeys(),e)),Promise.resolve()},loadSignedPreKey(e){const t=this.get("signed_prekey");return t?Promise.resolve({privKey:Lx.base64ToArrayBuffer(t.privKey),pubKey:Lx.base64ToArrayBuffer(t.pubKey)}):Promise.resolve()},storeSignedPreKey(e){if("object"!=typeof e)throw new Error("storeSignedPreKey: expected an object");return this.save("signed_prekey",{id:e.keyId,privKey:Lx.arrayBufferToBase64(e.keyPair.privKey),pubKey:Lx.arrayBufferToBase64(e.keyPair.pubKey),signature:Lx.arrayBufferToBase64(e.signature)}),Promise.resolve()},removeSignedPreKey(e){return this.get("signed_prekey").id===e&&(this.unset("signed_prekey"),this.save()),Promise.resolve()},loadSession(e){return Promise.resolve(this.get("session"+e))},storeSession(e,t){return Promise.resolve(this.save("session"+e,t))},removeSession(e){return Promise.resolve(this.unset("session"+e))},removeAllSessions(e){const t=Object.keys(this.attributes).filter(t=>!!t.startsWith("session"+e)&&t),n={};return t.forEach(e=>{n[e]=void 0}),this.save(n),Promise.resolve()},publishBundle(){const e=this.get("signed_prekey"),t="".concat(Ix.NS.OMEMO_BUNDLES,":").concat(this.get("device_id")),n=Rx("item").c("bundle",{xmlns:Ix.NS.OMEMO}).c("signedPreKeyPublic",{signedPreKeyId:e.id}).t(e.pubKey).up().c("signedPreKeySignature").t(e.signature).up().c("identityKey").t(this.get("identity_keypair").pubKey).up().c("prekeys");Object.values(this.get("prekeys")).forEach((e,t)=>n.c("preKeyPublic",{preKeyId:t}).t(e.pubKey).up());return Vc.pubsub.publish(null,t,n,{"pubsub#access_model":"open"},!1)},async generateMissingPreKeys(){const e=ks(rh(kx(0,Uc.NUM_PREKEYS),Number.prototype.toString),Object.keys(this.getPreKeys()));if(e.length<1)return zn.warn("No missing prekeys to generate for our own device"),Promise.resolve();(await Promise.all(e.map(e=>libsignal.KeyHelper.generatePreKey(parseInt(e,10))))).forEach(e=>this.storePreKey(e.keyId,e.keyPair));const t=Object.keys(this.getPreKeys()).map(e=>({id:e.keyId,key:Lx.arrayBufferToBase64(e.pubKey)})),n=Uc.devicelists.get(Uc.bare_jid).devices.get(this.get("device_id")),r=await n.getBundle();n.save("bundle",Object.assign(r,{prekeys:t}))},async generateBundle(){const e=await libsignal.KeyHelper.generateIdentityKeyPair(),t={},n=Lx.arrayBufferToBase64(e.pubKey),r=function(){const e=Uc.devicelists.get(Uc.bare_jid).devices.pluck("id");let t=libsignal.KeyHelper.generateRegistrationId(),n=0;for(;e.includes(t);)if(t=libsignal.KeyHelper.generateRegistrationId(),n++,10===n)throw new Error("Unable to generate a unique device ID");return t.toString()}();t.identity_key=n,t.device_id=r,this.save({device_id:r,identity_keypair:{privKey:Lx.arrayBufferToBase64(e.privKey),pubKey:n},identity_key:n});const i=await libsignal.KeyHelper.generateSignedPreKey(e,0);Uc.omemo_store.storeSignedPreKey(i),t.signed_prekey={id:i.keyId,public_key:Lx.arrayBufferToBase64(i.keyPair.privKey),signature:Lx.arrayBufferToBase64(i.signature)};const o=await Promise.all(kx(0,Uc.NUM_PREKEYS).map(e=>libsignal.KeyHelper.generatePreKey(e)));o.forEach(e=>Uc.omemo_store.storePreKey(e.keyId,e.keyPair));const s=Uc.devicelists.get(Uc.bare_jid),a=await s.devices.create({id:t.device_id,jid:Uc.bare_jid},{promise:!0}),c=o.map(e=>({id:e.keyId,key:Lx.arrayBufferToBase64(e.keyPair.pubKey)}));t.prekeys=c,a.save("bundle",t)},fetchSession(){return void 0===this._setup_promise&&(this._setup_promise=new Promise((e,t)=>{this.fetch({success:()=>{Uc.omemo_store.get("device_id")?e():this.generateBundle().then(e).catch(t)},error:(n,r)=>{zn.warn("Could not fetch OMEMO session from cache, we'll generate a new one."),zn.warn(r),this.generateBundle().then(e).catch(t)}})})),this._setup_promise}}),Uc.Device=qo.extend({defaults:{trusted:0,active:!0},getRandomPreKey(){const e=this.get("bundle");return e.prekeys[Lx.getRandomInt(e.prekeys.length)]},async fetchBundleFromServer(){const e=Dx({type:"get",from:Uc.bare_jid,to:this.get("jid")}).c("pubsub",{xmlns:Ix.NS.PUBSUB}).c("items",{node:"".concat(Ix.NS.OMEMO_BUNDLES,":").concat(this.get("id"))});let t;try{t=await Vc.sendIQ(e)}catch(t){return zn.error("Could not fetch bundle for device ".concat(this.get("id")," from ").concat(this.get("jid"))),zn.error(t),null}if(t.querySelector("error"))throw new Fx("Could not fetch bundle",t);const n=Mx('items[node="'.concat(Ix.NS.OMEMO_BUNDLES,":").concat(this.get("id"),'"]'),t).pop(),r=Vx(Mx('bundle[xmlns="'.concat(Ix.NS.OMEMO,'"]'),n).pop());return this.save("bundle",r),r},getBundle(){return this.get("bundle")?Promise.resolve(this.get("bundle"),this):this.fetchBundleFromServer()}}),Uc.Devices=ra.extend({model:Uc.Device}),Uc.DeviceList=qo.extend({idAttribute:"jid",initialize(){this.devices=new Uc.Devices;const e="converse.devicelist-".concat(Uc.bare_jid,"-").concat(this.get("jid"));this.devices.browserStorage=Uc.createStore(e),this.fetchDevices()},async onDevicesFound(e){if(0===e.length){let e;try{e=await this.fetchDevicesFromServer()}catch(e){null===e?zn.error("Timeout error while fetching devices for ".concat(this.get("jid"))):(zn.error("Could not fetch devices for ".concat(this.get("jid"))),zn.error(e)),this.destroy()}this.get("jid")===Uc.bare_jid&&await this.publishCurrentDevice(e)}},fetchDevices(){return void 0===this._devices_promise&&(this._devices_promise=new Promise(e=>{this.devices.fetch({success:t=>e(this.onDevicesFound(t)),error:(t,n)=>{zn.error(n),e()}})})),this._devices_promise},async getOwnDeviceId(){let e=Uc.omemo_store.get("device_id");return this.devices.findWhere({id:e})||(await Uc.omemo_store.generateBundle(),e=Uc.omemo_store.get("device_id")),e},async publishCurrentDevice(e){if(this.get("jid")===Uc.bare_jid){if(await Kx(),Uc.omemo_store)return e.includes(await this.getOwnDeviceId())?void 0:this.publishDevices();zn.warn("publishCurrentDevice: omemo_store is not defined, likely a timing issue")}},async fetchDevicesFromServer(){const e=Dx({type:"get",from:Uc.bare_jid,to:this.get("jid")}).c("pubsub",{xmlns:Ix.NS.PUBSUB}).c("items",{node:Ix.NS.OMEMO_DEVICELIST});let t;try{t=await Vc.sendIQ(e)}catch(e){return zn.error(e),[]}const n='list[xmlns="'.concat(Ix.NS.OMEMO,'"] device'),r=Mx(n,t).map(e=>e.getAttribute("id"));return await Promise.all(r.map(e=>this.devices.create({id:e,jid:this.get("jid")},{promise:!0}))),r},publishDevices(){const e=Rx("item",{id:"current"}).c("list",{xmlns:Ix.NS.OMEMO});this.devices.filter(e=>e.get("active")).forEach(t=>e.c("device",{id:t.get("id")}).up());return Vc.pubsub.publish(null,Ix.NS.OMEMO_DEVICELIST,e,{"pubsub#access_model":"open"},!1)},removeOwnDevices(e){if(this.get("jid")!==Uc.bare_jid)throw new Error("Cannot remove devices from someone else's device list");return e.forEach(e=>this.devices.get(e).destroy()),this.publishDevices()}}),Uc.DeviceLists=ra.extend({model:Uc.DeviceList,getDeviceList(e){return this.get(e)||this.create({jid:e})}}),Vc.waitUntil("chatBoxesInitialized").then(qx),Vc.listen.on("parseMessage",Bx),Vc.listen.on("parseMUCMessage",Bx),Vc.listen.on("chatBoxViewInitialized",Hx),Vc.listen.on("chatRoomViewInitialized",Hx),Vc.listen.on("connected",Yx),Vc.listen.on("getToolbarButtons",rE),Vc.listen.on("statusInitialized",eE),Vc.listen.on("addClientFeatures",()=>Vc.disco.own.features.add("".concat(Ix.NS.OMEMO_DEVICELIST,"+notify"))),Vc.listen.on("userDetailsModalInitialized",e=>{const t=e.get("jid");Uc.generateFingerprints(t).catch(e=>zn.error(e))}),Vc.listen.on("profileModalInitialized",()=>{Uc.generateFingerprints(Uc.bare_jid).catch(e=>zn.error(e))}),Vc.listen.on("afterTearDown",()=>delete Uc.omemo_store),Vc.listen.on("clearSession",()=>{Uc.shouldClearCache()&&Uc.devicelists&&(Uc.devicelists.clearStore(),delete Uc.devicelists)}),Object.assign(Uc.api,{omemo:{bundle:{generate:async()=>{const e=Uc.devicelists.get(Uc.bare_jid),t=Uc.omemo_store.get("device_id");if(t){const n=e.devices.get(t);Uc.omemo_store.unset(t),n&&await new Promise(e=>n.destroy({success:e,error:e})),e.devices.trigger("remove")}await Uc.omemo_store.generateBundle(),await e.publishDevices();const n=Jx(e.devices.get(Uc.omemo_store.get("device_id")));return await Uc.omemo_store.publishBundle(),n}}}})}});
 /**
  * @module converse-push
  * @description
@@ -551,7 +559,7 @@ const Bw=Yc.env.utils;Yc.plugins.add("converse-profile",{dependencies:["converse
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:mS,$iq:vS}=Yc.env;mS.addNamespace("PUSH","urn:xmpp:push:0"),Yc.plugins.add("converse-push",{initialize(){async function e(e){e=e||Lc.bare_jid;const t=Lc.session.get("push_enabled")||[];if(t.includes(e))return;const n=qc.settings.get("push_app_servers").filter(e=>!e.disable),r=qc.settings.get("push_app_servers").filter(e=>e.disable),i=n.map(t=>async function(e,t){if(!t.jid||!t.node)return;if(!await qc.disco.getIdentity("pubsub","push",t.jid))return Pn.warn('Not enabling push the service "'.concat(t.jid,"\", it doesn't have the right disco identtiy."));const n=await Promise.all([qc.disco.supports(mS.NS.PUSH,t.jid),qc.disco.supports(mS.NS.PUSH,e)]);if(!n[0]&&!n[1])return void Pn.warn('Not enabling push app server "'.concat(t.jid,'", no disco support from your server.'));const r=vS({type:"set"});return e!==Lc.bare_jid&&r.attrs({to:e}),r.c("enable",{xmlns:mS.NS.PUSH,jid:t.jid,node:t.node}),t.secret&&r.c("x",{xmlns:mS.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE"}).c("value").t("".concat(mS.NS.PUBSUB,"#publish-options")).up().up().c("field",{var:"secret"}).c("value").t(t.secret),qc.sendIQ(r)}(e,t)),s=r.map(t=>async function(e,t){if(!t.jid)return;if(!await qc.disco.supports(mS.NS.PUSH,e||Lc.bare_jid))return void Pn.warn('Not disabling push app server "'.concat(t.jid,'", no disco support from your server.'));const n=vS({type:"set"});e!==Lc.bare_jid&&n.attrs({to:e}),n.c("disable",{xmlns:mS.NS.PUSH,jid:t.jid}),t.node&&n.attrs({node:t.node}),qc.sendIQ(n).catch(e=>{Pn.error("Could not disable push app server for ".concat(t.jid)),Pn.error(e)})}(e,t));try{await Promise.all(i.concat(s))}catch(e){Pn.error("Could not enable or disable push App Server"),e&&Pn.error(e)}finally{t.push(e)}Lc.session.save("push_enabled",t)}function t(t){t.get("type")==Lc.CHATROOMS_TYPE&&e(mS.getDomainFromJid(t.get("jid")))}qc.settings.extend({push_app_servers:[],enable_muc_push:!1}),qc.listen.on("statusInitialized",()=>e()),qc.settings.get("enable_muc_push")&&qc.listen.on("chatBoxesInitialized",()=>Lc.chatboxes.on("add",t))}});var _S=n(139),bS=n.n(_S),yS=n(140),wS=n.n(yS),SS=n(141),xS=n.n(SS);
+const{Strophe:oE,$iq:sE}=rl.env;oE.addNamespace("PUSH","urn:xmpp:push:0"),rl.plugins.add("converse-push",{initialize(){async function e(e){e=e||Uc.bare_jid;const t=Uc.session.get("push_enabled")||[];if(t.includes(e))return;const n=Vc.settings.get("push_app_servers").filter(e=>!e.disable),r=Vc.settings.get("push_app_servers").filter(e=>e.disable),i=n.map(t=>async function(e,t){if(!t.jid||!t.node)return;if(!await Vc.disco.getIdentity("pubsub","push",t.jid))return zn.warn('Not enabling push the service "'.concat(t.jid,"\", it doesn't have the right disco identtiy."));const n=await Promise.all([Vc.disco.supports(oE.NS.PUSH,t.jid),Vc.disco.supports(oE.NS.PUSH,e)]);if(!n[0]&&!n[1])return void zn.warn('Not enabling push app server "'.concat(t.jid,'", no disco support from your server.'));const r=sE({type:"set"});return e!==Uc.bare_jid&&r.attrs({to:e}),r.c("enable",{xmlns:oE.NS.PUSH,jid:t.jid,node:t.node}),t.secret&&r.c("x",{xmlns:oE.NS.XFORM,type:"submit"}).c("field",{var:"FORM_TYPE"}).c("value").t("".concat(oE.NS.PUBSUB,"#publish-options")).up().up().c("field",{var:"secret"}).c("value").t(t.secret),Vc.sendIQ(r)}(e,t)),o=r.map(t=>async function(e,t){if(!t.jid)return;if(!await Vc.disco.supports(oE.NS.PUSH,e||Uc.bare_jid))return void zn.warn('Not disabling push app server "'.concat(t.jid,'", no disco support from your server.'));const n=sE({type:"set"});e!==Uc.bare_jid&&n.attrs({to:e}),n.c("disable",{xmlns:oE.NS.PUSH,jid:t.jid}),t.node&&n.attrs({node:t.node}),Vc.sendIQ(n).catch(e=>{zn.error("Could not disable push app server for ".concat(t.jid)),zn.error(e)})}(e,t));try{await Promise.all(i.concat(o))}catch(e){zn.error("Could not enable or disable push App Server"),e&&zn.error(e)}finally{t.push(e)}Uc.session.save("push_enabled",t)}function t(t){t.get("type")==Uc.CHATROOMS_TYPE&&e(oE.getDomainFromJid(t.get("jid")))}Vc.settings.extend({push_app_servers:[],enable_muc_push:!1}),Vc.listen.on("statusInitialized",()=>e()),Vc.settings.get("enable_muc_push")&&Vc.listen.on("chatBoxesInitialized",()=>Uc.chatboxes.on("add",t))}});var aE=n(181),cE=n.n(aE),lE=n(182),uE=n.n(lE),dE=n(183),hE=n.n(dE);
 /**
  * @module converse-register
  * @description
@@ -560,7 +568,7 @@ const{Strophe:mS,$iq:vS}=Yc.env;mS.addNamespace("PUSH","urn:xmpp:push:0"),Yc.plu
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:ES,sizzle:AS,$iq:CS}=Yc.env,jS=Yc.env.utils;ES.addNamespace("REGISTER","jabber:iq:register");const TS=Object.keys(ES.Status).reduce((e,t)=>Math.max(e,ES.Status[t]),0);function OS(){const e=RS(['\n        <div class="list-container list-container--openrooms ','">\n            <a class="list-toggle open-rooms-toggle controlbox-padded" title="','" @click=','>\n            <span class="fa ','"></span> ','</a>\n            <div class="items-list rooms-list open-rooms-list ','">\n                ',"\n            </div>\n        </div>"]);return OS=function(){return e},e}function kS(){const e=RS(['\n        <div class="list-item controlbox-padded available-chatroom d-flex flex-row '," ",'"\n            data-room-jid="','">\n\n            ','\n            <a class="list-item-link open-room available-room w-100"\n            data-room-jid="','"\n            title="','"\n            @click=',">","</a>\n\n            ",'\n\n            <a class="list-item-action room-info fa fa-info-circle"\n            data-room-jid="','"\n            title="','"\n            @click=','></a>\n\n            <a class="list-item-action fa fa-sign-out-alt close-room"\n            data-room-jid="','"\n            data-room-name="','"\n            title="','"\n            @click=',"></a>\n        </div>"]);return kS=function(){return e},e}function NS(){const e=RS(['<span class="list-item-badge badge badge--muc msgs-indicator">',"</span>"]);return NS=function(){return e},e}function IS(){const e=RS(['\n            <a class="list-item-action fa fa-bookmark add-bookmark"\n               data-room-jid="','"\n               data-bookmark-name="','"\n               @click=','\n               title="','"></a>']);return IS=function(){return e},e}function MS(){const e=RS(['\n            <a class="list-item-action fa fa-bookmark remove-bookmark button-on"\n               data-room-jid="','"\n               data-bookmark-name="','"\n               @click=','\n               title="','"></a>']);return MS=function(){return e},e}function RS(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}ES.Status.REGIFAIL=TS+1,ES.Status.REGISTERED=TS+2,ES.Status.CONFLICT=TS+3,ES.Status.NOTACCEPTABLE=TS+5,Yc.plugins.add("converse-register",{enabled:()=>!0,overrides:{ControlBoxView:{renderLoginPanel(){return this.__super__.renderLoginPanel.apply(this,arguments),this.renderRegistrationPanel(),this}}},initialize(){function e(e){qc.waitUntil("controlBoxInitialized").then(()=>{Lc.chatboxes.get("controlbox").set({"active-form":e})}).catch(e=>Pn.fatal(e))}Lc.CONNECTION_STATUS[ES.Status.REGIFAIL]="REGIFAIL",Lc.CONNECTION_STATUS[ES.Status.REGISTERED]="REGISTERED",Lc.CONNECTION_STATUS[ES.Status.CONFLICT]="CONFLICT",Lc.CONNECTION_STATUS[ES.Status.NOTACCEPTABLE]="NOTACCEPTABLE",qc.settings.extend({allow_registration:!0,domain_placeholder:dd(" e.g. conversejs.org"),providers_link:"https://compliance.conversations.im/",registration_domain:""}),Object.assign(Lc.ControlBoxView.prototype,{showLoginOrRegisterForm(){this.registerpanel&&("register"==this.model.get("active-form")?(this.loginpanel.el.classList.add("hidden"),this.registerpanel.el.classList.remove("hidden")):(this.loginpanel.el.classList.remove("hidden"),this.registerpanel.el.classList.add("hidden")))},renderRegistrationPanel(){if(qc.settings.get("allow_registration")){this.registerpanel=new Lc.RegisterPanel({model:this.model}),this.registerpanel.render(),this.registerpanel.el.classList.add("hidden");const e=this.el.querySelector("#converse-login-panel");e&&e.insertAdjacentElement("afterend",this.registerpanel.el),this.showLoginOrRegisterForm()}return this}}),Lc.router.route("converse/login",()=>e("login")),Lc.router.route("converse/register",()=>e("register")),Lc.RegisterPanel=jd.extend({tagName:"div",id:"converse-register-panel",className:"controlbox-pane fade-in",events:{"submit form#converse-register":"onFormSubmission","click .button-cancel":"renderProviderChoiceForm"},initialize(){this.reset(),qc.listen.on("connectionInitialized",()=>this.registerHooks())},render(){return this.model.set("registration_form_rendered",!1),this.el.innerHTML=bS()({__:dd,default_domain:qc.settings.get("registration_domain"),label_register:dd("Fetch registration form"),help_providers:dd("Tip: A list of public XMPP providers is available"),help_providers_link:dd("here"),href_providers:qc.settings.get("providers_link"),domain_placeholder:qc.settings.get("domain_placeholder")}),qc.settings.get("registration_domain")&&this.fetchRegistrationForm(qc.settings.get("registration_domain")),this},registerHooks(){const e=Lc.connection,t=e._connect_cb.bind(e);e._connect_cb=(e,n,r)=>{this._registering?this.getRegistrationFields(e,n)&&(this._registering=!1):t(e,n,r)}},getRegistrationFields(e,t){const n=Lc.connection;n.connected=!0;const r=n._proto._reqToData(e);if(!r)return;if(n._proto._connect_cb(r)===ES.Status.CONNFAIL)return this.showValidationError(dd("Sorry, we're unable to connect to your chosen provider.")),!1;const i=r.getElementsByTagName("register"),s=r.getElementsByTagName("mechanism");if(0===i.length&&0===s.length)return n._proto._no_auth_received(t),!1;if(0===i.length)return n._changeConnectStatus(ES.Status.REGIFAIL),this.showValidationError(dd("Sorry, the given provider does not support in band account registration. Please try with a different provider.")),!0;n._addSysHandler(this.onRegistrationFields.bind(this),null,"iq",null,null);const o=CS({type:"get"}).c("query",{xmlns:ES.NS.REGISTER}).tree();return o.setAttribute("id",n.getUniqueId("sendIQ")),n.send(o),n.connected=!1,!0},onRegistrationFields(e){return"error"===e.getAttribute("type")?(Lc.connection._changeConnectStatus(ES.Status.REGIFAIL,dd('Something went wrong while establishing a connection with "%1$s". Are you sure it exists?',this.domain)),!1):1!==e.getElementsByTagName("query").length?(Lc.connection._changeConnectStatus(ES.Status.REGIFAIL,"unknown"),!1):(this.setFields(e),this.model.get("registration_form_rendered")||this.renderRegistrationForm(e),!1)},reset(e){const t={fields:{},urls:[],title:"",instructions:"",registered:!1,_registering:!1,domain:null,form_type:null};Object.assign(this,t),e&&Object.assign(this,Ms(e,Object.keys(t)))},onFormSubmission(e){e&&e.preventDefault&&e.preventDefault(),null===e.target.querySelector("input[name=domain]")?this.submitRegistrationForm(e.target):this.onProviderChosen(e.target)},onProviderChosen(e){const t=e.querySelector("input[name=domain]"),n=null==t?void 0:t.value;n?(e.querySelector("input[type=submit]").classList.add("hidden"),this.fetchRegistrationForm(n.trim())):t.classList.add("error")},async fetchRegistrationForm(e){var t;return this.model.get("registration_form_rendered")||this.renderRegistrationRequest(),this.reset({domain:ES.getDomainFromJid(e),_registering:!0}),await Lc.initConnection(this.domain),null===(t=Lc.connection)||void 0===t||t.connect(this.domain,"",e=>this.onConnectStatusChanged(e)),!1},renderRegistrationRequest(){this.clearRegistrationForm().insertAdjacentHTML("beforeend",xS()({__:Lc.__,cancel:qc.settings.get("registration_domain")}))},giveFeedback(e,t){let n=this.el.querySelector(".reg-feedback");null!==n&&n.parentNode.removeChild(n);const r=this.el.querySelector("form");r.insertAdjacentHTML("afterbegin",'<span class="reg-feedback"></span>'),n=r.querySelector(".reg-feedback"),n.textContent=e,t&&n.classList.add(t)},clearRegistrationForm(){const e=this.el.querySelector("form");return e.innerHTML="",this.model.set("registration_form_rendered",!1),e},showSpinner(){const e=this.el.querySelector("form");return Wa(Tf(),e),this.model.set("registration_form_rendered",!1),this},onConnectStatusChanged(e){Pn.debug("converse-register: onConnectStatusChanged"),[ES.Status.DISCONNECTED,ES.Status.CONNFAIL,ES.Status.REGIFAIL,ES.Status.NOTACCEPTABLE,ES.Status.CONFLICT].includes(e)?(Pn.error("Problem during registration: Strophe.Status is ".concat(Lc.CONNECTION_STATUS[e])),this.abortRegistration()):e===ES.Status.REGISTERED&&(Pn.debug("Registered successfully."),Lc.connection.reset(),this.showSpinner(),["converse/login","converse/register"].includes(Lc.router.history.getFragment())&&Lc.router.navigate("",{replace:!0}),this.fields.password&&this.fields.username?(Lc.connection.connect(this.fields.username.toLowerCase()+"@"+this.domain.toLowerCase(),this.fields.password,Lc.onConnectStatusChanged),this.giveFeedback(dd("Now logging you in"),"info")):(Lc.chatboxviews.get("controlbox").renderLoginPanel(),Lc.giveFeedback(dd("Registered successfully"))),this.reset())},renderLegacyRegistrationForm(e){Object.keys(this.fields).forEach(t=>{"username"===t?e.insertAdjacentHTML("beforeend",Mh()({domain:" @".concat(this.domain),name:t,type:"text",label:t,value:"",required:!0})):e.insertAdjacentHTML("beforeend",Ah()({label:t,name:t,placeholder:t,required:!0,type:"password"===t||"email"===t?t:"text",value:""}))}),this.urls.forEach(t=>e.insertAdjacentHTML("afterend",'<a target="blank" rel="noopener" href="'+t+'">'+t+"</a>"))},renderRegistrationForm(e){const t=this.el.querySelector("form");t.innerHTML=wS()({__:dd,domain:this.domain,title:this.title,instructions:this.instructions,registration_domain:qc.settings.get("registration_domain")});const n=t.querySelector("fieldset.buttons");"xform"===this.form_type?e.querySelectorAll("field").forEach(t=>{n.insertAdjacentHTML("beforebegin",Fl.xForm2webForm(t,e,{domain:this.domain}))}):this.renderLegacyRegistrationForm(t),this.fields||t.querySelector(".button-primary").classList.add("hidden"),t.classList.remove("hidden"),this.model.set("registration_form_rendered",!0)},showValidationError(e){const t=this.el.querySelector("form");let n=t.querySelector(".form-errors");if(null===n){n='<div class="form-errors hidden"></div>';const e=t.querySelector("p.instructions");null===e?t.insertAdjacentHTML("afterbegin",n):e.insertAdjacentHTML("afterend",n),n=t.querySelector(".form-errors")}else n.innerHTML="";n.insertAdjacentHTML("beforeend",'<p class="form-help error">'+e+"</p>"),n.classList.remove("hidden")},reportErrors(e){const t=e.querySelectorAll("error");if(t.forEach(e=>this.showValidationError(e.textContent)),!t.length){const e=dd("The provider rejected your registration attempt. Please check the values you entered for correctness.");this.showValidationError(e)}},renderProviderChoiceForm(e){e&&e.preventDefault&&e.preventDefault(),Lc.connection._proto._abortAllRequests(),Lc.connection.reset(),this.render()},abortRegistration(){Lc.connection._proto._abortAllRequests(),Lc.connection.reset(),this.model.get("registration_form_rendered")?qc.settings.get("registration_domain")&&this.model.get("registration_form_rendered")&&this.fetchRegistrationForm(qc.settings.get("registration_domain")):this.render()},submitRegistrationForm(e){if(Array.from(this.el.querySelectorAll("input.required")).reduce((e,t)=>""===t.value?(t.classList.add("error"),e+1):e,0))return;const t=AS(":input:not([type=button]):not([type=submit])",e),n=CS({type:"set",id:jS.getUniqueId()}).c("query",{xmlns:ES.NS.REGISTER});if("xform"===this.form_type){n.c("x",{xmlns:ES.NS.XFORM,type:"submit"}),t.map(e=>Fl.webForm2xForm(e)).filter(e=>e).forEach(e=>n.cnode(e).up())}else t.forEach(e=>n.c(e.getAttribute("name"),{},e.value));Lc.connection._addSysHandler(this._onRegisterIQ.bind(this),null,"iq",null,null),Lc.connection.send(n),this.setFields(n.tree())},setFields(e){const t=e.querySelector("query"),n=AS('x[xmlns="'.concat(ES.NS.XFORM,'"]'),t);n.length>0?this._setFieldsFromXForm(n.pop()):this._setFieldsFromLegacy(t)},_setFieldsFromLegacy(e){[].forEach.call(e.children,e=>{"instructions"!==e.tagName.toLowerCase()?"x"!==e.tagName.toLowerCase()?this.fields[e.tagName.toLowerCase()]=ES.getText(e):"jabber:x:oob"===e.getAttribute("xmlns")&&this.urls.concat(AS("url",e).map(e=>e.textContent)):this.instructions=ES.getText(e)}),this.form_type="legacy"},_setFieldsFromXForm(e){var t,n;this.title=null===(t=e.querySelector("title"))||void 0===t?void 0:t.textContent,this.instructions=null===(n=e.querySelector("instructions"))||void 0===n?void 0:n.textContent,e.querySelectorAll("field").forEach(e=>{const t=e.getAttribute("var");var n,r;t?this.fields[t.toLowerCase()]=null!==(n=null===(r=e.querySelector("value"))||void 0===r?void 0:r.textContent)&&void 0!==n?n:"":Pn.warn("Found field we couldn't parse")}),this.form_type="xform"},_onRegisterIQ(e){if("error"===e.getAttribute("type")){Pn.error("Registration failed."),this.reportErrors(e);let t=e.getElementsByTagName("error");if(1!==t.length)return Lc.connection._changeConnectStatus(ES.Status.REGIFAIL,"unknown"),!1;t=t[0].firstElementChild.tagName.toLowerCase(),"conflict"===t?Lc.connection._changeConnectStatus(ES.Status.CONFLICT,t):"not-acceptable"===t?Lc.connection._changeConnectStatus(ES.Status.NOTACCEPTABLE,t):Lc.connection._changeConnectStatus(ES.Status.REGIFAIL,t)}else Lc.connection._changeConnectStatus(ES.Status.REGISTERED,null);return!1}}),qc.listen.on("controlBoxInitialized",e=>{e.model.on("change:active-form",e.showLoginOrRegisterForm,e)})}});const DS=e=>{const t=dd("Leave this groupchat");return Ga(kS(),e.currently_open(e.room)?"open":"",e.room.get("num_unread_general")?"unread-msgs":"",e.room.get("jid"),e.room.get("num_unread")?(e=>Ga(NS(),e.room.get("num_unread")))(e):"",e.room.get("jid"),dd("Click to open this groupchat"),e.openRoom,e.room.getDisplayName(),e.allow_bookmarks?(e=>{const t=dd("Bookmark this groupchat"),n=dd("Unbookmark this groupchat");return e.bookmarked?Ga(MS(),e.room.get("jid"),e.room.getDisplayName(),e.removeBookmark,e.bookmarked?n:t):Ga(IS(),e.room.get("jid"),e.room.getDisplayName(),e.addBookmark,e.bookmarked?n:t)})(e):"",e.room.get("jid"),dd("Show more information on this groupchat"),e.showRoomDetailsModal,e.room.get("jid"),e.room.getDisplayName(),t,e.closeRoom)};
+const{Strophe:fE,sizzle:pE,$iq:gE}=rl.env,mE=rl.env.utils;fE.addNamespace("REGISTER","jabber:iq:register");const vE=Object.keys(fE.Status).reduce((e,t)=>Math.max(e,fE.Status[t]),0);function _E(){const e=xE(['\n        <div class="list-container list-container--openrooms ','">\n            <a class="list-toggle open-rooms-toggle controlbox-padded" title="','" @click=','>\n            <span class="fa ','"></span> ','</a>\n            <div class="items-list rooms-list open-rooms-list ','">\n                ',"\n            </div>\n        </div>"]);return _E=function(){return e},e}function bE(){const e=xE(['\n        <div class="list-item controlbox-padded available-chatroom d-flex flex-row '," ",'"\n            data-room-jid="','">\n\n            ','\n            <a class="list-item-link open-room available-room w-100"\n            data-room-jid="','"\n            title="','"\n            @click=',">","</a>\n\n            ",'\n\n            <a class="list-item-action room-info fa fa-info-circle"\n            data-room-jid="','"\n            title="','"\n            @click=','></a>\n\n            <a class="list-item-action fa fa-sign-out-alt close-room"\n            data-room-jid="','"\n            data-room-name="','"\n            title="','"\n            @click=',"></a>\n        </div>"]);return bE=function(){return e},e}function yE(){const e=xE(['<span class="list-item-badge badge badge--muc msgs-indicator">',"</span>"]);return yE=function(){return e},e}function wE(){const e=xE(['\n            <a class="list-item-action fa fa-bookmark add-bookmark"\n               data-room-jid="','"\n               data-bookmark-name="','"\n               @click=','\n               title="','"></a>']);return wE=function(){return e},e}function SE(){const e=xE(['\n            <a class="list-item-action fa fa-bookmark remove-bookmark button-on"\n               data-room-jid="','"\n               data-bookmark-name="','"\n               @click=','\n               title="','"></a>']);return SE=function(){return e},e}function xE(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}fE.Status.REGIFAIL=vE+1,fE.Status.REGISTERED=vE+2,fE.Status.CONFLICT=vE+3,fE.Status.NOTACCEPTABLE=vE+5,rl.plugins.add("converse-register",{enabled:()=>!0,overrides:{ControlBoxView:{renderLoginPanel(){return this.__super__.renderLoginPanel.apply(this,arguments),this.renderRegistrationPanel(),this}}},initialize(){function e(e){Vc.waitUntil("controlBoxInitialized").then(()=>{Uc.chatboxes.get("controlbox").set({"active-form":e})}).catch(e=>zn.fatal(e))}Uc.CONNECTION_STATUS[fE.Status.REGIFAIL]="REGIFAIL",Uc.CONNECTION_STATUS[fE.Status.REGISTERED]="REGISTERED",Uc.CONNECTION_STATUS[fE.Status.CONFLICT]="CONFLICT",Uc.CONNECTION_STATUS[fE.Status.NOTACCEPTABLE]="NOTACCEPTABLE",Vc.settings.extend({allow_registration:!0,domain_placeholder:zd(" e.g. conversejs.org"),providers_link:"https://compliance.conversations.im/",registration_domain:""}),Object.assign(Uc.ControlBoxView.prototype,{showLoginOrRegisterForm(){this.registerpanel&&("register"==this.model.get("active-form")?(this.loginpanel.el.classList.add("hidden"),this.registerpanel.el.classList.remove("hidden")):(this.loginpanel.el.classList.remove("hidden"),this.registerpanel.el.classList.add("hidden")))},renderRegistrationPanel(){if(Vc.settings.get("allow_registration")){this.registerpanel=new Uc.RegisterPanel({model:this.model}),this.registerpanel.render(),this.registerpanel.el.classList.add("hidden");const e=this.el.querySelector("#converse-login-panel");e&&e.insertAdjacentElement("afterend",this.registerpanel.el),this.showLoginOrRegisterForm()}return this}}),Uc.router.route("converse/login",()=>e("login")),Uc.router.route("converse/register",()=>e("register")),Uc.RegisterPanel=eh.extend({tagName:"div",id:"converse-register-panel",className:"controlbox-pane fade-in",events:{"submit form#converse-register":"onFormSubmission","click .button-cancel":"renderProviderChoiceForm"},initialize(){this.reset(),Vc.listen.on("connectionInitialized",()=>this.registerHooks())},render(){return this.model.set("registration_form_rendered",!1),this.el.innerHTML=cE()({__:zd,default_domain:Vc.settings.get("registration_domain"),label_register:zd("Fetch registration form"),help_providers:zd("Tip: A list of public XMPP providers is available"),help_providers_link:zd("here"),href_providers:Vc.settings.get("providers_link"),domain_placeholder:Vc.settings.get("domain_placeholder")}),Vc.settings.get("registration_domain")&&this.fetchRegistrationForm(Vc.settings.get("registration_domain")),this},registerHooks(){const e=Uc.connection,t=e._connect_cb.bind(e);e._connect_cb=(e,n,r)=>{this._registering?this.getRegistrationFields(e,n)&&(this._registering=!1):t(e,n,r)}},getRegistrationFields(e,t){const n=Uc.connection;n.connected=!0;const r=n._proto._reqToData(e);if(!r)return;if(n._proto._connect_cb(r)===fE.Status.CONNFAIL)return this.showValidationError(zd("Sorry, we're unable to connect to your chosen provider.")),!1;const i=r.getElementsByTagName("register"),o=r.getElementsByTagName("mechanism");if(0===i.length&&0===o.length)return n._proto._no_auth_received(t),!1;if(0===i.length)return n._changeConnectStatus(fE.Status.REGIFAIL),this.showValidationError(zd("Sorry, the given provider does not support in band account registration. Please try with a different provider.")),!0;n._addSysHandler(this.onRegistrationFields.bind(this),null,"iq",null,null);const s=gE({type:"get"}).c("query",{xmlns:fE.NS.REGISTER}).tree();return s.setAttribute("id",n.getUniqueId("sendIQ")),n.send(s),n.connected=!1,!0},onRegistrationFields(e){return"error"===e.getAttribute("type")?(Uc.connection._changeConnectStatus(fE.Status.REGIFAIL,zd('Something went wrong while establishing a connection with "%1$s". Are you sure it exists?',this.domain)),!1):1!==e.getElementsByTagName("query").length?(Uc.connection._changeConnectStatus(fE.Status.REGIFAIL,"unknown"),!1):(this.setFields(e),this.model.get("registration_form_rendered")||this.renderRegistrationForm(e),!1)},reset(e){const t={fields:{},urls:[],title:"",instructions:"",registered:!1,_registering:!1,domain:null,form_type:null};Object.assign(this,t),e&&Object.assign(this,Bo(e,Object.keys(t)))},onFormSubmission(e){e&&e.preventDefault&&e.preventDefault(),null===e.target.querySelector("input[name=domain]")?this.submitRegistrationForm(e.target):this.onProviderChosen(e.target)},onProviderChosen(e){const t=e.querySelector("input[name=domain]"),n=null==t?void 0:t.value;n?(e.querySelector("input[type=submit]").classList.add("hidden"),this.fetchRegistrationForm(n.trim())):t.classList.add("error")},async fetchRegistrationForm(e){var t;return this.model.get("registration_form_rendered")||this.renderRegistrationRequest(),this.reset({domain:fE.getDomainFromJid(e),_registering:!0}),await Uc.initConnection(this.domain),null===(t=Uc.connection)||void 0===t||t.connect(this.domain,"",e=>this.onConnectStatusChanged(e)),!1},renderRegistrationRequest(){this.clearRegistrationForm().insertAdjacentHTML("beforeend",hE()({__:Uc.__,cancel:Vc.settings.get("registration_domain")}))},giveFeedback(e,t){let n=this.el.querySelector(".reg-feedback");null!==n&&n.parentNode.removeChild(n);const r=this.el.querySelector("form");r.insertAdjacentHTML("afterbegin",'<span class="reg-feedback"></span>'),n=r.querySelector(".reg-feedback"),n.textContent=e,t&&n.classList.add(t)},clearRegistrationForm(){const e=this.el.querySelector("form");return e.innerHTML="",this.model.set("registration_form_rendered",!1),e},showSpinner(){const e=this.el.querySelector("form");return Ya(fp(),e),this.model.set("registration_form_rendered",!1),this},onConnectStatusChanged(e){zn.debug("converse-register: onConnectStatusChanged"),[fE.Status.DISCONNECTED,fE.Status.CONNFAIL,fE.Status.REGIFAIL,fE.Status.NOTACCEPTABLE,fE.Status.CONFLICT].includes(e)?(zn.error("Problem during registration: Strophe.Status is ".concat(Uc.CONNECTION_STATUS[e])),this.abortRegistration()):e===fE.Status.REGISTERED&&(zn.debug("Registered successfully."),Uc.connection.reset(),this.showSpinner(),["converse/login","converse/register"].includes(Uc.router.history.getFragment())&&Uc.router.navigate("",{replace:!0}),this.fields.password&&this.fields.username?(Uc.connection.connect(this.fields.username.toLowerCase()+"@"+this.domain.toLowerCase(),this.fields.password,Uc.onConnectStatusChanged),this.giveFeedback(zd("Now logging you in"),"info")):(Uc.chatboxviews.get("controlbox").renderLoginPanel(),Uc.giveFeedback(zd("Registered successfully"))),this.reset())},renderLegacyRegistrationForm(e){Object.keys(this.fields).forEach(t=>{"username"===t?e.insertAdjacentHTML("beforeend",Eh()({domain:" @".concat(this.domain),name:t,type:"text",label:t,value:"",required:!0})):e.insertAdjacentHTML("beforeend",mh()({label:t,name:t,placeholder:t,required:!0,type:"password"===t||"email"===t?t:"text",value:""}))}),this.urls.forEach(t=>e.insertAdjacentHTML("afterend",'<a target="blank" rel="noopener" href="'+t+'">'+t+"</a>"))},renderRegistrationForm(e){const t=this.el.querySelector("form");t.innerHTML=uE()({__:zd,domain:this.domain,title:this.title,instructions:this.instructions,registration_domain:Vc.settings.get("registration_domain")});const n=t.querySelector("fieldset.buttons");"xform"===this.form_type?e.querySelectorAll("field").forEach(t=>{n.insertAdjacentHTML("beforebegin",Kl.xForm2webForm(t,e,{domain:this.domain}))}):this.renderLegacyRegistrationForm(t),this.fields||t.querySelector(".button-primary").classList.add("hidden"),t.classList.remove("hidden"),this.model.set("registration_form_rendered",!0)},showValidationError(e){const t=this.el.querySelector("form");let n=t.querySelector(".form-errors");if(null===n){n='<div class="form-errors hidden"></div>';const e=t.querySelector("p.instructions");null===e?t.insertAdjacentHTML("afterbegin",n):e.insertAdjacentHTML("afterend",n),n=t.querySelector(".form-errors")}else n.innerHTML="";n.insertAdjacentHTML("beforeend",'<p class="form-help error">'+e+"</p>"),n.classList.remove("hidden")},reportErrors(e){const t=e.querySelectorAll("error");if(t.forEach(e=>this.showValidationError(e.textContent)),!t.length){const e=zd("The provider rejected your registration attempt. Please check the values you entered for correctness.");this.showValidationError(e)}},renderProviderChoiceForm(e){e&&e.preventDefault&&e.preventDefault(),Uc.connection._proto._abortAllRequests(),Uc.connection.reset(),this.render()},abortRegistration(){Uc.connection._proto._abortAllRequests(),Uc.connection.reset(),this.model.get("registration_form_rendered")?Vc.settings.get("registration_domain")&&this.model.get("registration_form_rendered")&&this.fetchRegistrationForm(Vc.settings.get("registration_domain")):this.render()},submitRegistrationForm(e){if(Array.from(this.el.querySelectorAll("input.required")).reduce((e,t)=>""===t.value?(t.classList.add("error"),e+1):e,0))return;const t=pE(":input:not([type=button]):not([type=submit])",e),n=gE({type:"set",id:mE.getUniqueId()}).c("query",{xmlns:fE.NS.REGISTER});if("xform"===this.form_type){n.c("x",{xmlns:fE.NS.XFORM,type:"submit"}),t.map(e=>Kl.webForm2xForm(e)).filter(e=>e).forEach(e=>n.cnode(e).up())}else t.forEach(e=>n.c(e.getAttribute("name"),{},e.value));Uc.connection._addSysHandler(this._onRegisterIQ.bind(this),null,"iq",null,null),Uc.connection.send(n),this.setFields(n.tree())},setFields(e){const t=e.querySelector("query"),n=pE('x[xmlns="'.concat(fE.NS.XFORM,'"]'),t);n.length>0?this._setFieldsFromXForm(n.pop()):this._setFieldsFromLegacy(t)},_setFieldsFromLegacy(e){[].forEach.call(e.children,e=>{"instructions"!==e.tagName.toLowerCase()?"x"!==e.tagName.toLowerCase()?this.fields[e.tagName.toLowerCase()]=fE.getText(e):"jabber:x:oob"===e.getAttribute("xmlns")&&this.urls.concat(pE("url",e).map(e=>e.textContent)):this.instructions=fE.getText(e)}),this.form_type="legacy"},_setFieldsFromXForm(e){var t,n;this.title=null===(t=e.querySelector("title"))||void 0===t?void 0:t.textContent,this.instructions=null===(n=e.querySelector("instructions"))||void 0===n?void 0:n.textContent,e.querySelectorAll("field").forEach(e=>{const t=e.getAttribute("var");var n,r;t?this.fields[t.toLowerCase()]=null!==(n=null===(r=e.querySelector("value"))||void 0===r?void 0:r.textContent)&&void 0!==n?n:"":zn.warn("Found field we couldn't parse")}),this.form_type="xform"},_onRegisterIQ(e){if("error"===e.getAttribute("type")){zn.error("Registration failed."),this.reportErrors(e);let t=e.getElementsByTagName("error");if(1!==t.length)return Uc.connection._changeConnectStatus(fE.Status.REGIFAIL,"unknown"),!1;t=t[0].firstElementChild.tagName.toLowerCase(),"conflict"===t?Uc.connection._changeConnectStatus(fE.Status.CONFLICT,t):"not-acceptable"===t?Uc.connection._changeConnectStatus(fE.Status.NOTACCEPTABLE,t):Uc.connection._changeConnectStatus(fE.Status.REGIFAIL,t)}else Uc.connection._changeConnectStatus(fE.Status.REGISTERED,null);return!1}}),Vc.listen.on("controlBoxInitialized",e=>{e.model.on("change:active-form",e.showLoginOrRegisterForm,e)})}});const EE=e=>{const t=zd("Leave this groupchat");return Za(bE(),e.currently_open(e.room)?"open":"",e.room.get("num_unread_general")?"unread-msgs":"",e.room.get("jid"),e.room.get("num_unread")?(e=>Za(yE(),e.room.get("num_unread")))(e):"",e.room.get("jid"),zd("Click to open this groupchat"),e.openRoom,e.room.getDisplayName(),e.allow_bookmarks?(e=>{const t=zd("Bookmark this groupchat"),n=zd("Unbookmark this groupchat");return e.bookmarked?Za(SE(),e.room.get("jid"),e.room.getDisplayName(),e.removeBookmark,e.bookmarked?n:t):Za(wE(),e.room.get("jid"),e.room.getDisplayName(),e.addBookmark,e.bookmarked?n:t)})(e):"",e.room.get("jid"),zd("Show more information on this groupchat"),e.showRoomDetailsModal,e.room.get("jid"),e.room.getDisplayName(),t,e.closeRoom)};
 /**
  * @module converse-roomslist
  * @description
@@ -569,16 +577,16 @@ const{Strophe:ES,sizzle:AS,$iq:CS}=Yc.env,jS=Yc.env.utils;ES.addNamespace("REGIS
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:PS}=Yc.env,LS=Yc.env.utils;function zS(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="addContactModalLabel">',"</h5>\n                    ",'\n                </div>\n                <form class="converse-form add-xmpp-contact">\n                    <div class="modal-body">\n                        <span class="modal-alert"></span>\n                        <div class="form-group add-xmpp-contact__jid">\n                            <label class="clearfix" for="jid">',':</label>\n                            <div class="suggestion-box suggestion-box__jid">\n                                <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n                                <input type="text" name="jid" ?required=','\n                                    value="','"\n                                    class="form-control suggestion-box__input"\n                                    placeholder="','"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                            </div>\n                        </div>\n                        <div class="form-group add-xmpp-contact__name">\n                            <label class="clearfix" for="name">',':</label>\n                            <div class="suggestion-box suggestion-box__name">\n                                <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n                                <input type="text" name="name" value="','"\n                                    class="form-control suggestion-box__input"\n                                    placeholder="','"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                            </div>\n                        </div>\n                        <div class="form-group">\n                            <div class="invalid-feedback">','</div>\n                        </div>\n                        <button type="submit" class="btn btn-primary">',"</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    "]);return zS=function(){return e},e}Yc.plugins.add("converse-roomslist",{dependencies:["converse-singleton","converse-controlbox","converse-muc","converse-bookmarks"],initialize(){qc.promises.add("roomsListInitialized"),Lc.RoomsList=Rs.extend({defaults:{"toggle-state":Lc.OPENED}}),Lc.RoomsListView=jd.extend({tagName:"span",initialize(){this.listenTo(this.model,"add",this.renderIfChatRoom),this.listenTo(this.model,"remove",this.renderIfChatRoom),this.listenTo(this.model,"destroy",this.renderIfChatRoom),this.listenTo(this.model,"change",this.renderIfRelevantChange);const e="converse.roomslist".concat(Lc.bare_jid);this.list_model=new Lc.RoomsList({id:e}),this.list_model.browserStorage=Lc.createStore(e),this.list_model.fetch(),this.render(),this.insertIntoControlBox()},renderIfChatRoom(e){LS.isChatRoom(e)&&this.render()},renderIfRelevantChange(e){const t=["bookmarked","hidden","name","num_unread","num_unread_general"],n=e.changed||{};LS.isChatRoom(e)&&Object.keys(n).filter(e=>t.includes(e)).length&&this.render()},toHTML(){return(e=>{const t=dd("Click to toggle the list of open groupchats");return Ga(OS(),e.rooms.length?"":"hidden",t,e.toggleRoomsList,e.toggle_state===e._converse.OPENED?"fa-caret-down":"fa-caret-right",dd("Open Groupchats"),e.collapsed&&"collapsed",e.rooms.map(t=>DS(Object.assign({room:t},e))))})({_converse:Lc,addBookmark:e=>this.addBookmark(e),allow_bookmarks:Lc.allow_bookmarks&&Lc.bookmarks,closeRoom:e=>this.closeRoom(e),collapsed:this.list_model.get("toggle-state")!==Lc.OPENED,currently_open:e=>Lc.isUniView()&&!e.get("hidden"),openRoom:e=>this.openRoom(e),removeBookmark:e=>this.removeBookmark(e),rooms:this.model.filter(e=>e.get("type")===Lc.CHATROOMS_TYPE),showRoomDetailsModal:e=>this.showRoomDetailsModal(e),toggleRoomsList:e=>this.toggleRoomsList(e),toggle_state:this.list_model.get("toggle-state")})},insertIntoControlBox(){const e=Lc.chatboxviews.get("controlbox");if(void 0!==e&&!LS.rootContains(Lc.root,this.el)){const t=e.el.querySelector(".list-container--openrooms");t&&t.parentNode.replaceChild(this.el,t)}},showRoomDetailsModal(e){const t=e.target.getAttribute("data-room-jid"),n=Lc.chatboxes.get(t);e.preventDefault(),void 0===n.room_details_modal&&(n.room_details_modal=new Jb({model:n})),n.room_details_modal.show(e)},async openRoom(e){e.preventDefault();const t=e.target.textContent,n=e.target.getAttribute("data-room-jid"),r={name:t||PS.unescapeNode(PS.getNodeFromJid(n))||n};await qc.rooms.open(n,r,!0),qc.chatviews.get(n).maybeFocus()},closeRoom(e){e.preventDefault();const t=e.target.getAttribute("data-room-name"),n=e.target.getAttribute("data-room-jid");confirm(dd("Are you sure you want to leave the groupchat %1$s?",t))&&Lc.chatboxviews.get(n).close()},removeBookmark:Lc.removeBookmarkViaEvent,addBookmark:Lc.addBookmarkViaEvent,toggleRoomsList(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");t.classList.contains("fa-caret-down")?LS.slideIn(this.el.querySelector(".open-rooms-list")).then(()=>{this.list_model.save({"toggle-state":Lc.CLOSED}),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")}):LS.slideOut(this.el.querySelector(".open-rooms-list")).then(()=>{this.list_model.save({"toggle-state":Lc.OPENED}),t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down")})}});const e=function(){Lc.rooms_list_view=new Lc.RoomsListView({model:Lc.chatboxes}),qc.trigger("roomsListInitialized")};qc.listen.on("connected",async()=>{Lc.allow_bookmarks?await qc.waitUntil("bookmarksInitialized"):await Promise.all([qc.waitUntil("chatBoxesFetched"),qc.waitUntil("roomsPanelRendered")]),e()}),qc.listen.on("reconnected",e)}});var FS=n(142),BS=n.n(FS),qS=n(143),HS=n.n(qS),US=n(144),$S=n.n(US),WS=n(145),VS=n.n(WS);function GS(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <form class="controlbox-padded roster-filter-form input-button-group ','"\n          @submit=','>\n        <div class="form-inline flex-nowrap">\n            <div class="filter-by d-flex flex-nowrap">\n                <span @click=',' class="fa fa-user ','" data-type="contacts" title="','"></span>\n                <span @click=',' class="fa fa-users ','" data-type="groups" title="','"></span>\n                <span @click=',' class="fa fa-circle ','" data-type="state" title="','"></span>\n            </div>\n            <div class="btn-group">\n                <input .value="','"\n                       @keydown=','\n                       class="roster-filter form-control ','"\n                       placeholder="','"/>\n                <span class="clear-input fa fa-times ','"\n                      @click=','>\n                </span>\n            </div>\n            <select class="form-control state-type ','"\n                    @change=','>\n                <option value="">',"</option>\n                <option ?selected=",' value="unread_messages">',"</option>\n                <option ?selected=",' value="online">',"</option>\n                <option ?selected=",' value="chat">',"</option>\n                <option ?selected=",' value="dnd">',"</option>\n                <option ?selected=",' value="away">',"</option>\n                <option ?selected=",' value="xa">',"</option>\n                <option ?selected=",' value="offline">',"</option>\n            </select>\n        </div>\n    </form>\n"]);return GS=function(){return e},e}var JS=n(146),XS=n.n(JS);
+const{Strophe:AE}=rl.env,CE=rl.env.utils;function jE(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n        <div class="modal-dialog" role="document">\n            <div class="modal-content">\n                <div class="modal-header">\n                    <h5 class="modal-title" id="addContactModalLabel">',"</h5>\n                    ",'\n                </div>\n                <form class="converse-form add-xmpp-contact">\n                    <div class="modal-body">\n                        <span class="modal-alert"></span>\n                        <div class="form-group add-xmpp-contact__jid">\n                            <label class="clearfix" for="jid">',':</label>\n                            <div class="suggestion-box suggestion-box__jid">\n                                <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n                                <input type="text" name="jid" ?required=','\n                                    value="','"\n                                    class="form-control suggestion-box__input"\n                                    placeholder="','"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                            </div>\n                        </div>\n                        <div class="form-group add-xmpp-contact__name">\n                            <label class="clearfix" for="name">',':</label>\n                            <div class="suggestion-box suggestion-box__name">\n                                <ul class="suggestion-box__results suggestion-box__results--above" hidden=""></ul>\n                                <input type="text" name="name" value="','"\n                                    class="form-control suggestion-box__input"\n                                    placeholder="','"/>\n                                <span class="suggestion-box__additions visually-hidden" role="status" aria-live="assertive" aria-relevant="additions"></span>\n                            </div>\n                        </div>\n                        <div class="form-group">\n                            <div class="invalid-feedback">','</div>\n                        </div>\n                        <button type="submit" class="btn btn-primary">',"</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n    "]);return jE=function(){return e},e}rl.plugins.add("converse-roomslist",{dependencies:["converse-singleton","converse-controlbox","converse-muc","converse-bookmarks"],initialize(){Vc.promises.add("roomsListInitialized"),Uc.RoomsList=qo.extend({defaults:{"toggle-state":Uc.OPENED}}),Uc.RoomsListView=eh.extend({tagName:"span",initialize(){this.listenTo(this.model,"add",this.renderIfChatRoom),this.listenTo(this.model,"remove",this.renderIfChatRoom),this.listenTo(this.model,"destroy",this.renderIfChatRoom),this.listenTo(this.model,"change",this.renderIfRelevantChange);const e="converse.roomslist".concat(Uc.bare_jid);this.list_model=new Uc.RoomsList({id:e}),this.list_model.browserStorage=Uc.createStore(e),this.list_model.fetch(),this.render(),this.insertIntoControlBox()},renderIfChatRoom(e){CE.isChatRoom(e)&&this.render()},renderIfRelevantChange(e){const t=["bookmarked","hidden","name","num_unread","num_unread_general"],n=e.changed||{};CE.isChatRoom(e)&&Object.keys(n).filter(e=>t.includes(e)).length&&this.render()},toHTML(){return(e=>{const t=zd("Click to toggle the list of open groupchats");return Za(_E(),e.rooms.length?"":"hidden",t,e.toggleRoomsList,e.toggle_state===e._converse.OPENED?"fa-caret-down":"fa-caret-right",zd("Open Groupchats"),e.collapsed&&"collapsed",e.rooms.map(t=>EE(Object.assign({room:t},e))))})({_converse:Uc,addBookmark:e=>this.addBookmark(e),allow_bookmarks:Uc.allow_bookmarks&&Uc.bookmarks,closeRoom:e=>this.closeRoom(e),collapsed:this.list_model.get("toggle-state")!==Uc.OPENED,currently_open:e=>Uc.isUniView()&&!e.get("hidden"),openRoom:e=>this.openRoom(e),removeBookmark:e=>this.removeBookmark(e),rooms:this.model.filter(e=>e.get("type")===Uc.CHATROOMS_TYPE),showRoomDetailsModal:e=>this.showRoomDetailsModal(e),toggleRoomsList:e=>this.toggleRoomsList(e),toggle_state:this.list_model.get("toggle-state")})},insertIntoControlBox(){const e=Uc.chatboxviews.get("controlbox");if(void 0!==e&&!CE.rootContains(Uc.root,this.el)){const t=e.el.querySelector(".list-container--openrooms");t&&t.parentNode.replaceChild(this.el,t)}},showRoomDetailsModal(e){const t=e.target.getAttribute("data-room-jid"),n=Uc.chatboxes.get(t);e.preventDefault(),Vc.modal.show(dw,{model:n},e)},async openRoom(e){e.preventDefault();const t=e.target.textContent,n=e.target.getAttribute("data-room-jid"),r={name:t||AE.unescapeNode(AE.getNodeFromJid(n))||n};await Vc.rooms.open(n,r,!0),Vc.chatviews.get(n).maybeFocus()},closeRoom(e){e.preventDefault();const t=e.target.getAttribute("data-room-name"),n=e.target.getAttribute("data-room-jid");confirm(zd("Are you sure you want to leave the groupchat %1$s?",t))&&Uc.chatboxviews.get(n).close()},removeBookmark:Uc.removeBookmarkViaEvent,addBookmark:Uc.addBookmarkViaEvent,toggleRoomsList(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");t.classList.contains("fa-caret-down")?CE.slideIn(this.el.querySelector(".open-rooms-list")).then(()=>{this.list_model.save({"toggle-state":Uc.CLOSED}),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")}):CE.slideOut(this.el.querySelector(".open-rooms-list")).then(()=>{this.list_model.save({"toggle-state":Uc.OPENED}),t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down")})}});const e=function(){Uc.rooms_list_view=new Uc.RoomsListView({model:Uc.chatboxes}),Vc.trigger("roomsListInitialized")};Vc.listen.on("connected",async()=>{Uc.allow_bookmarks?await Vc.waitUntil("bookmarksInitialized"):await Promise.all([Vc.waitUntil("chatBoxesFetched"),Vc.waitUntil("roomsPanelRendered")]),e()}),Vc.listen.on("reconnected",e)}});const{Strophe:TE}=rl.env,OE=rl.env.utils,kE=df.extend({id:"add-contact-modal",events:{"submit form":"addContactFromForm"},initialize(){df.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render)},toHTML(){const e=Vc.settings.get("xhr_user_search_url")?zd("Contact name"):zd("Optional nickname");return(e=>{const t=zd("name@example.org"),n=zd("Add"),r=zd("Please enter a valid XMPP address"),i=zd("Add a Contact"),o=zd("XMPP Address"),s=zd("Nickname");return Za(jE(),i,mf,o,!e._converse.xhr_user_search_url,e.jid||"",t,s,e.nickname||"",s,r,n)})(Object.assign(this.model.toJSON(),{_converse:Uc,label_nickname:e}))},afterRender(){"string"==typeof Vc.settings.get("xhr_user_search_url")?this.initXHRAutoComplete():this.initJIDAutoComplete();const e=this.el.querySelector('input[name="jid"]');this.el.addEventListener("shown.bs.modal",()=>e.focus(),!1)},initJIDAutoComplete(){if(!Vc.settings.get("autocomplete_add_contact"))return;const e=this.el.querySelector(".suggestion-box__jid").parentElement;this.jid_auto_complete=new Uc.AutoComplete(e,{data:(e,t)=>"".concat(t.slice(0,t.indexOf("@")),"@").concat(e),filter:Uc.FILTER_STARTSWITH,list:[...new Set(Uc.roster.map(e=>TE.getDomainFromJid(e.get("jid"))))]})},initXHRAutoComplete(){if(!Vc.settings.get("autocomplete_add_contact"))return this.initXHRFetch();const e=this.el.querySelector(".suggestion-box__name").parentElement;this.name_auto_complete=new Uc.AutoComplete(e,{auto_evaluate:!1,filter:Uc.FILTER_STARTSWITH,list:[]});const t=new window.XMLHttpRequest;t.onload=()=>{if(t.responseText){const e=t.responseText;this.name_auto_complete.list=JSON.parse(e).map(e=>({label:e.fullname||e.jid,value:e.jid})),this.name_auto_complete.auto_completing=!0,this.name_auto_complete.evaluate()}};const n=this.el.querySelector('input[name="name"]');n.addEventListener("input",Rc(()=>{t.open("GET","".concat(Vc.settings.get("xhr_user_search_url"),"q=").concat(encodeURIComponent(n.value)),!0),t.send()},300)),this.name_auto_complete.on("suggestion-box-selectcomplete",e=>{this.el.querySelector('input[name="name"]').value=e.text.label,this.el.querySelector('input[name="jid"]').value=e.text.value})},initXHRFetch(){this.xhr=new window.XMLHttpRequest,this.xhr.onload=()=>{if(this.xhr.responseText){const e=this.xhr.responseText,t=JSON.parse(e).map(e=>({label:e.fullname||e.jid,value:e.jid}));if(1!==t.length){const e=this.el.querySelector(".invalid-feedback");return e.textContent=zd("Sorry, could not find a contact with that name"),void OE.addClass("d-block",e)}const n=t[0].value;if(this.validateSubmission(n)){const e=this.el.querySelector("form"),r=t[0].label;this.afterSubmission(e,n,r)}}}},validateSubmission(e){const t=this.el.querySelector(".invalid-feedback");return!e||Ho(e.split("@")).length<2?(OE.addClass("is-invalid",this.el.querySelector('input[name="jid"]')),OE.addClass("d-block",t),!1):Uc.roster.get(TE.getBareJidFromJid(e))?(t.textContent=zd("This contact has already been added"),OE.addClass("d-block",t),!1):(OE.removeClass("d-block",t),!0)},afterSubmission(e,t,n){Uc.roster.addAndSubscribe(t,n),this.model.clear(),this.modal.hide()},addContactFromForm(e){e.preventDefault();const t=new FormData(e.target),n=(t.get("jid")||"").trim();if(!n&&"string"==typeof Vc.settings.get("xhr_user_search_url")){const e=this.el.querySelector('input[name="name"]');return this.xhr.open("GET","".concat(Vc.settings.get("xhr_user_search_url"),"q=").concat(encodeURIComponent(e.value)),!0),void this.xhr.send()}this.validateSubmission(n)&&this.afterSubmission(e.target,n,t.get("name"))}});Uc.AddContactModal=kE;var NE=n(184),IE=n.n(NE),ME=n(185),RE=n.n(ME),DE=n(186),PE=n.n(DE),LE=n(187),zE=n.n(LE);function FE(){const e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n    <form class="controlbox-padded roster-filter-form input-button-group ','"\n          @submit=','>\n        <div class="form-inline flex-nowrap">\n            <div class="filter-by d-flex flex-nowrap">\n                <span @click=',' class="fa fa-user ','" data-type="contacts" title="','"></span>\n                <span @click=',' class="fa fa-users ','" data-type="groups" title="','"></span>\n                <span @click=',' class="fa fa-circle ','" data-type="state" title="','"></span>\n            </div>\n            <div class="btn-group">\n                <input .value="','"\n                       @keydown=','\n                       class="roster-filter form-control ','"\n                       placeholder="','"/>\n                <span class="clear-input fa fa-times ','"\n                      @click=','>\n                </span>\n            </div>\n            <select class="form-control state-type ','"\n                    @change=','>\n                <option value="">',"</option>\n                <option ?selected=",' value="unread_messages">',"</option>\n                <option ?selected=",' value="online">',"</option>\n                <option ?selected=",' value="chat">',"</option>\n                <option ?selected=",' value="dnd">',"</option>\n                <option ?selected=",' value="away">',"</option>\n                <option ?selected=",' value="xa">',"</option>\n                <option ?selected=",' value="offline">',"</option>\n            </select>\n        </div>\n    </form>\n"]);return FE=function(){return e},e}var BE=n(188),qE=n.n(BE);
 /**
  * @module converse-rosterview
  * @copyright 2020, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-const{Strophe:QS}=Yc.env,YS=Yc.env.utils;Yc.plugins.add("converse-rosterview",{dependencies:["converse-roster","converse-modal","converse-chatboxviews"],initialize(){qc.settings.extend({autocomplete_add_contact:!0,allow_chat_pending_contacts:!0,allow_contact_removal:!0,hide_offline_users:!1,roster_groups:!0,xhr_user_search_url:null}),qc.promises.add("rosterViewInitialized");const e={dnd:dd("This contact is busy"),online:dd("This contact is online"),offline:dd("This contact is offline"),unavailable:dd("This contact is unavailable"),xa:dd("This contact is away for an extended period"),away:dd("This contact is away")};function t(){qc.settings.get("authentication")!==Lc.ANONYMOUS&&(Lc.rosterview=new Lc.RosterView({model:Lc.rostergroups}),Lc.rosterview.render(),qc.trigger("rosterViewInitialized"))}Lc.AddContactModal=Kd.extend({id:"add-contact-modal",events:{"submit form":"addContactFromForm"},initialize(){Kd.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change",this.render)},toHTML(){const e=qc.settings.get("xhr_user_search_url")?dd("Contact name"):dd("Optional nickname");return(e=>{const t=dd("name@example.org"),n=dd("Add"),r=dd("Please enter a valid XMPP address"),i=dd("Add a Contact"),s=dd("XMPP Address"),o=dd("Nickname");return Ga(zS(),i,Bd,s,!e._converse.xhr_user_search_url,e.jid||"",t,o,e.nickname||"",o,r,n)})(Object.assign(this.model.toJSON(),{_converse:Lc,label_nickname:e}))},afterRender(){"string"==typeof qc.settings.get("xhr_user_search_url")?this.initXHRAutoComplete():this.initJIDAutoComplete();const e=this.el.querySelector('input[name="jid"]');this.el.addEventListener("shown.bs.modal",()=>e.focus(),!1)},initJIDAutoComplete(){if(!qc.settings.get("autocomplete_add_contact"))return;const e=this.el.querySelector(".suggestion-box__jid").parentElement;this.jid_auto_complete=new Lc.AutoComplete(e,{data:(e,t)=>"".concat(t.slice(0,t.indexOf("@")),"@").concat(e),filter:Lc.FILTER_STARTSWITH,list:[...new Set(Lc.roster.map(e=>QS.getDomainFromJid(e.get("jid"))))]})},initXHRAutoComplete(){if(!qc.settings.get("autocomplete_add_contact"))return this.initXHRFetch();const e=this.el.querySelector(".suggestion-box__name").parentElement;this.name_auto_complete=new Lc.AutoComplete(e,{auto_evaluate:!1,filter:Lc.FILTER_STARTSWITH,list:[]});const t=new window.XMLHttpRequest;t.onload=()=>{if(t.responseText){const e=t.responseText;this.name_auto_complete.list=JSON.parse(e).map(e=>({label:e.fullname||e.jid,value:e.jid})),this.name_auto_complete.auto_completing=!0,this.name_auto_complete.evaluate()}};const n=this.el.querySelector('input[name="name"]');n.addEventListener("input",Tc(()=>{t.open("GET","".concat(qc.settings.get("xhr_user_search_url"),"q=").concat(encodeURIComponent(n.value)),!0),t.send()},300)),this.name_auto_complete.on("suggestion-box-selectcomplete",e=>{this.el.querySelector('input[name="name"]').value=e.text.label,this.el.querySelector('input[name="jid"]').value=e.text.value})},initXHRFetch(){this.xhr=new window.XMLHttpRequest,this.xhr.onload=()=>{if(this.xhr.responseText){const e=this.xhr.responseText,t=JSON.parse(e).map(e=>({label:e.fullname||e.jid,value:e.jid}));if(1!==t.length){const e=this.el.querySelector(".invalid-feedback");return e.textContent=dd("Sorry, could not find a contact with that name"),void YS.addClass("d-block",e)}const n=t[0].value;if(this.validateSubmission(n)){const e=this.el.querySelector("form"),r=t[0].label;this.afterSubmission(e,n,r)}}}},validateSubmission(e){const t=this.el.querySelector(".invalid-feedback");return!e||Ds(e.split("@")).length<2?(YS.addClass("is-invalid",this.el.querySelector('input[name="jid"]')),YS.addClass("d-block",t),!1):Lc.roster.get(QS.getBareJidFromJid(e))?(t.textContent=dd("This contact has already been added"),YS.addClass("d-block",t),!1):(YS.removeClass("d-block",t),!0)},afterSubmission(e,t,n){Lc.roster.addAndSubscribe(t,n),this.model.clear(),this.modal.hide()},addContactFromForm(e){e.preventDefault();const t=new FormData(e.target),n=(t.get("jid")||"").trim();if(!n&&"string"==typeof qc.settings.get("xhr_user_search_url")){const e=this.el.querySelector('input[name="name"]');return this.xhr.open("GET","".concat(qc.settings.get("xhr_user_search_url"),"q=").concat(encodeURIComponent(e.value)),!0),void this.xhr.send()}this.validateSubmission(n)&&this.afterSubmission(e.target,n,t.get("name"))}}),Lc.RosterFilter=Rs.extend({initialize(){this.set({filter_text:"",filter_type:"contacts",chat_state:"online"})}}),Lc.RosterFilterView=jd.extend({tagName:"span",initialize(){this.listenTo(this.model,"change:filter_type",this.render),this.listenTo(this.model,"change:filter_text",this.render)},toHTML(){return e=Object.assign(this.model.toJSON(),{visible:this.shouldBeVisible(),placeholder:dd("Filter"),title_contact_filter:dd("Filter by contact name"),title_group_filter:dd("Filter by group name"),title_status_filter:dd("Filter by status"),label_any:dd("Any"),label_unread_messages:dd("Unread"),label_online:dd("Online"),label_chatty:dd("Chatty"),label_busy:dd("Busy"),label_away:dd("Away"),label_xa:dd("Extended Away"),label_offline:dd("Offline"),changeChatStateFilter:e=>this.changeChatStateFilter(e),changeTypeFilter:e=>this.changeTypeFilter(e),clearFilter:e=>this.clearFilter(e),liveFilter:e=>this.liveFilter(e),submitFilter:e=>this.submitFilter(e)}),Ga(GS(),e.visible?"fade-in":"hidden",e.submitFilter,e.changeTypeFilter,"contacts"===e.filter_type?"selected":"",e.title_contact_filter,e.changeTypeFilter,"groups"===e.filter_type?"selected":"",e.title_group_filter,e.changeTypeFilter,"state"===e.filter_type?"selected":"",e.title_status_filter,e.filter_text||"",e.liveFilter,"state"===e.filter_type?"hidden":"",e.placeholder,e.filter_text&&"state"!==e.filter_type?"":"hidden",e.clearFilter,"state"!==e.filter_type?"hidden":"",e.changeChatStateFilter,e.label_any,"unread_messages"===e.chat_state,e.label_unread_messages,"online"===e.chat_state,e.label_online,"chat"===e.chat_state,e.label_chatty,"dnd"===e.chat_state,e.label_busy,"away"===e.chat_state,e.label_away,"xa"===e.chat_state,e.label_xa,"offline"===e.chat_state,e.label_offline);var e},changeChatStateFilter(e){e&&e.preventDefault(),this.model.save({chat_state:this.el.querySelector(".state-type").value})},changeTypeFilter(e){e&&e.preventDefault();const t=e.target.dataset.type;"state"===t?this.model.save({filter_type:t,chat_state:this.el.querySelector(".state-type").value}):this.model.save({filter_type:t,filter_text:this.el.querySelector(".roster-filter").value})},liveFilter:Tc((function(){this.model.save({filter_text:this.el.querySelector(".roster-filter").value})}),250),submitFilter(e){e&&e.preventDefault(),this.liveFilter()},isActive(){return"state"===this.model.get("filter_type")||this.model.get("filter_text")},shouldBeVisible(){return Lc.roster&&Lc.roster.length>=5||this.isActive()},clearFilter(e){e&&e.preventDefault(),this.model.save({filter_text:""})}}),Lc.RosterContactView=Lc.ViewWithAvatar.extend({tagName:"li",className:"list-item d-flex hidden controlbox-padded",events:{"click .accept-xmpp-request":"acceptRequest","click .decline-xmpp-request":"declineRequest","click .open-chat":"openChat","click .remove-xmpp-contact":"removeContact"},async initialize(){await this.model.initialized,this.debouncedRender=Tc(this.render,50),this.listenTo(this.model,"change",this.debouncedRender),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"highlight",this.highlight),this.listenTo(this.model,"remove",this.remove),this.listenTo(this.model,"vcard:change",this.debouncedRender),this.listenTo(this.model.presence,"change:show",this.debouncedRender),this.render()},render(){if(!this.mayBeShown())return YS.hideElement(this.el),this;const t=this.model.get("ask"),n=this.model.presence.get("show"),r=this.model.get("requesting"),i=this.model.get("subscription"),s=this.model.get("jid");if(["current-xmpp-contact","pending-xmpp-contact","requesting-xmpp-contact"].concat(Object.keys(e)).forEach(e=>YS.removeClass(e,this.el)),this.el.classList.add(n),this.el.setAttribute("data-status",n),this.highlight(),Lc.isUniView()){const e=Lc.chatboxes.get(this.model.get("jid"));e&&(e.get("hidden")?this.el.classList.remove("open"):this.el.classList.add("open"))}if("subscribe"===t||"from"===i){const e=this.model.getDisplayName();this.el.classList.add("pending-xmpp-contact"),this.el.innerHTML=HS()(Object.assign(this.model.toJSON(),{display_name:e,desc_remove:dd("Click to remove %1$s as a contact",e),allow_chat_pending_contacts:qc.settings.get("allow_chat_pending_contacts")}))}else if(!0===r){const e=this.model.getDisplayName();this.el.classList.add("requesting-xmpp-contact"),this.el.innerHTML=$S()(Object.assign(this.model.toJSON(),{display_name:e,desc_accept:dd("Click to accept the contact request from %1$s",e),desc_decline:dd("Click to decline the contact request from %1$s",e),allow_chat_pending_contacts:qc.settings.get("allow_chat_pending_contacts")}))}else("both"===i||"to"===i||Lc.rosterview.isSelf(s))&&(this.el.classList.add("current-xmpp-contact"),this.el.classList.remove(Am(["both","to"],i)[0]),this.el.classList.add(i),this.renderRosterItem(this.model));return this},highlight(){if(Lc.isUniView()){const e=Lc.chatboxes.get(this.model.get("jid"));e&&e.get("hidden")||!e?this.el.classList.remove("open"):this.el.classList.add("open")}},renderRosterItem(t){const n=t.presence.get("show")||"offline";let r;r="online"===n?"fa fa-circle chat-status chat-status--online":"away"===n?"fa fa-circle chat-status chat-status--away":"xa"===n?"far fa-circle chat-status chat-status-xa":"dnd"===n?"fa fa-minus-circle chat-status chat-status--busy":"fa fa-times-circle chat-status chat-status--offline";const i=t.getDisplayName();return this.el.innerHTML=XS()(Object.assign(t.toJSON(),{show:n,display_name:i,status_icon:r,desc_status:e[n],desc_chat:dd("Click to chat with %1$s (XMPP address: %2$s)",i,t.get("jid")),desc_remove:dd("Click to remove %1$s as a contact",i),allow_contact_removal:qc.settings.get("allow_contact_removal"),num_unread:t.get("num_unread")||0,classes:""})),this.renderAvatar(),this},mayBeShown(){const e=this.model.presence.get("show");return!qc.settings.get("hide_offline_users")||"offline"!==e||("subscribe"===this.model.get("ask")||"from"===this.model.get("subscription")||!0===this.model.get("requesting"))},openChat(e){e&&e.preventDefault&&e.preventDefault(),this.model.openChat()},async removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),qc.settings.get("allow_contact_removal")&&confirm(dd("Are you sure you want to remove this contact?")))try{await this.model.removeFromRoster(),this.remove(),this.model.collection&&this.model.destroy()}catch(e){Pn.error(e),qc.alert("error",dd("Error"),[dd("Sorry, there was an error while trying to remove %1$s as a contact.",this.model.getDisplayName())])}},async acceptRequest(e){e&&e.preventDefault&&e.preventDefault(),await Lc.roster.sendContactAddIQ(this.model.get("jid"),this.model.getFullname(),[]),this.model.authorize().subscribe()},declineRequest(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(dd("Are you sure you want to decline this contact request?"))&&this.model.unauthorize().destroy(),this}}),Lc.RosterGroupView=Tm.extend({tagName:"div",className:"roster-group hidden",events:{"click a.group-toggle":"toggle"},sortImmediatelyOnAdd:!0,ItemView:Lc.RosterContactView,listItems:"model.contacts",listSelector:".roster-group-contacts",sortEvent:"presenceChanged",initialize(){Tm.prototype.initialize.apply(this,arguments),this.model.get("name")===Lc.HEADER_UNREAD&&this.listenTo(this.model.contacts,"change:num_unread",e=>!this.model.get("unread_messages")&&this.removeContact(e)),this.model.get("name")===Lc.HEADER_REQUESTING_CONTACTS&&this.listenTo(this.model.contacts,"change:requesting",e=>!e.get("requesting")&&this.removeContact(e)),this.model.get("name")===Lc.HEADER_PENDING_CONTACTS&&this.listenTo(this.model.contacts,"change:subscription",e=>"from"!==e.get("subscription")&&this.removeContact(e)),this.listenTo(this.model.contacts,"remove",this.onRemove),this.listenTo(Lc.roster,"change:groups",this.onContactGroupChange),Lc.rosterview.on("rosterContactsFetchedAndProcessed",()=>this.sortAndPositionAllItems())},render(){return this.el.setAttribute("data-group",this.model.get("name")),this.el.innerHTML=BS()({label_group:this.model.get("name"),desc_group_toggle:this.model.get("description"),toggle_state:this.model.get("state"),_converse:Lc}),this.contacts_el=this.el.querySelector(".roster-group-contacts"),this},show(){return YS.showElement(this.el),this.model.get("state")===Lc.OPENED&&Object.values(this.getAll()).filter(e=>e.mayBeShown()).forEach(e=>YS.showElement(e.el)),this},collapse(){return YS.slideIn(this.contacts_el)},filterOutContacts(e=[]){let t=0;this.model.contacts.forEach(n=>{const r=this.get(n.get("id"));e.includes(n)?YS.hideElement(r.el):r.mayBeShown()&&(YS.showElement(r.el),t+=1)}),t?YS.showElement(this.el):YS.hideElement(this.el)},getFilterMatches(e,t){if(0===e.length)return[];e=e.toLowerCase();const n=this.model.contacts;if("state"===t){return[Lc.HEADER_REQUESTING_CONTACTS,Lc.HEADER_UNREAD].includes(this.model.get("name"))?[]:"unread_messages"===e?n.filter({num_unread:0}):"online"===e?n.filter(e=>["offline","unavailable"].includes(e.presence.get("show"))):n.filter(t=>!t.presence.get("show").includes(e))}return n.filter(t=>!t.getFilterCriteria().includes(e))},filter(e,t){null==e&&(e="state"===(t=t||Lc.rosterview.filter_view.model.get("filter_type"))?Lc.rosterview.filter_view.model.get("chat_state"):Lc.rosterview.filter_view.model.get("filter_text")),this.filterOutContacts(this.getFilterMatches(e,t))},async toggle(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");YS.hasClass("fa-caret-down",t)?(this.model.save({state:Lc.CLOSED}),await this.collapse(),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")):(t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down"),this.model.save({state:Lc.OPENED}),this.filter(),YS.showElement(this.el),YS.slideOut(this.contacts_el))},onContactGroupChange(e){const t=e.get("groups").includes(this.model.get("name")),n=e.get("id"),r=!this.get(n);t&&!r?this.items.trigger("add",e):t||this.removeContact(e)},removeContact(e){this.model.contacts.remove(e,{silent:!0}),this.onRemove(e)},onRemove(e){this.remove(e.get("jid")),0===this.model.contacts.length&&this.remove()}}),Lc.RosterView=Tm.extend({tagName:"div",id:"converse-roster",className:"controlbox-section",ItemView:Lc.RosterGroupView,listItems:"model",listSelector:".roster-contacts",sortEvent:null,subviewIndex:"name",sortImmediatelyOnAdd:!0,events:{"click a.controlbox-heading__btn.add-contact":"showAddContactModal","click a.controlbox-heading__btn.sync-contacts":"syncContacts"},initialize(){Tm.prototype.initialize.apply(this,arguments),this.listenTo(Lc.roster,"add",this.onContactAdded),this.listenTo(Lc.roster,"change:groups",this.onContactAdded),this.listenTo(Lc.roster,"change",this.onContactChange),this.listenTo(Lc.roster,"destroy",this.update),this.listenTo(Lc.roster,"remove",this.update),Lc.presences.on("change:show",()=>{this.update(),this.updateFilter()}),this.listenTo(this.model,"reset",this.reset),qc.listen.on("rosterGroupsFetched",this.sortAndPositionAllItems.bind(this)),qc.listen.on("rosterContactsFetched",()=>{Lc.roster.each(e=>this.addRosterContact(e,{silent:!0})),this.update(),this.updateFilter(),this.trigger("rosterContactsFetchedAndProcessed")}),this.createRosterFilter()},render(){this.el.innerHTML=VS()({allow_contact_requests:Lc.allow_contact_requests,heading_contacts:dd("Contacts"),title_add_contact:dd("Add a contact"),title_sync_contacts:dd("Re-sync your contacts")});const e=this.el.querySelector(".roster-filter-form");return this.el.replaceChild(this.filter_view.render().el,e),this.roster_el=this.el.querySelector(".roster-contacts"),this},showAddContactModal(e){void 0===this.add_contact_modal&&(this.add_contact_modal=new Lc.AddContactModal({model:new Rs})),this.add_contact_modal.show(e)},createRosterFilter(){const e=new Lc.RosterFilter;e.id="_converse.rosterfilter-".concat(Lc.bare_jid),e.browserStorage=Lc.createStore(e.id),this.filter_view=new Lc.RosterFilterView({model:e}),this.listenTo(this.filter_view.model,"change",this.updateFilter),this.filter_view.model.fetch()},updateFilter:Tc((function(){const e=this.filter_view.model.get("filter_type");"state"===e?this.filter(this.filter_view.model.get("chat_state"),e):this.filter(this.filter_view.model.get("filter_text"),e)}),100),update(){return YS.isVisible(this.roster_el)||YS.showElement(this.roster_el),this.filter_view.render(),this},filter(e,t){const n=Object.values(this.getAll());n.forEach(e=>e.model.contacts.length>0&&e.show().filter("")),e=e.toLowerCase(),"groups"===t?n.forEach(t=>{t.model.get("name").toLowerCase().includes(e)?t.model.contacts.length>0&&YS.slideOut(t.el):YS.slideIn(t.el)}):n.forEach(n=>n.filter(e,t))},async syncContacts(e){e.preventDefault(),YS.addClass("fa-spin",e.target),Lc.roster.data.save("version",null),await Lc.roster.fetchFromServer(),qc.user.presence.send(),YS.removeClass("fa-spin",e.target)},reset(){return this.removeAll(),this.render().update(),this},onContactAdded(e){this.addRosterContact(e),this.update(),this.updateFilter()},onContactChange(e){this.update(),Ur(e.changed,"subscription")&&("from"===e.changed.subscription?this.addContactToGroup(e,Lc.HEADER_PENDING_CONTACTS):["both","to"].includes(e.get("subscription"))&&this.addExistingContact(e)),Ur(e.changed,"num_unread")&&e.get("num_unread")&&this.addContactToGroup(e,Lc.HEADER_UNREAD),Ur(e.changed,"ask")&&"subscribe"===e.changed.ask&&this.addContactToGroup(e,Lc.HEADER_PENDING_CONTACTS),Ur(e.changed,"subscription")&&"true"===e.changed.requesting&&this.addContactToGroup(e,Lc.HEADER_REQUESTING_CONTACTS),this.updateFilter()},getGroup(e){const t=this.get(e);return t?t.model:this.model.create({name:e})},addContactToGroup(e,t,n){this.getGroup(t).contacts.add(e,n),this.sortAndPositionAllItems()},addExistingContact(e,t){let n;qc.settings.get("roster_groups")?(n=e.get("groups"),n=0===n.length?[Lc.HEADER_UNGROUPED]:n):n=[Lc.HEADER_CURRENT_CONTACTS],e.get("num_unread")&&n.push(Lc.HEADER_UNREAD),n.forEach(n=>this.addContactToGroup(e,n,t))},isSelf:e=>YS.isSameBareJID(e,Lc.connection.jid),addRosterContact(e,t){const n=e.get("jid");if("both"===e.get("subscription")||"to"===e.get("subscription")||this.isSelf(n))this.addExistingContact(e,t);else{if(!Lc.allow_contact_requests)return void Pn.debug("Not adding requesting or pending contact ".concat(n," ")+"because allow_contact_requests is false");"subscribe"===e.get("ask")||"from"===e.get("subscription")?this.addContactToGroup(e,Lc.HEADER_PENDING_CONTACTS,t):!0===e.get("requesting")&&this.addContactToGroup(e,Lc.HEADER_REQUESTING_CONTACTS,t)}return this}}),qc.listen.on("chatBoxesInitialized",()=>{function e(e){const t=Lc.roster&&Lc.roster.findWhere({jid:e.get("jid")});void 0!==t&&t.trigger("highlight")}Lc.chatboxes.on("destroy",t=>e(t)),Lc.chatboxes.on("change:hidden",t=>e(t))}),qc.listen.on("controlBoxInitialized",e=>{function t(){e.model.get("connected")&&qc.settings.get("authentication")!==Lc.ANONYMOUS&&qc.waitUntil("rosterViewInitialized").then(()=>e.controlbox_pane.el.insertAdjacentElement("beforeEnd",Lc.rosterview.el)).catch(e=>Pn.fatal(e))}t(),e.model.on("change:connected",t)}),qc.listen.on("rosterInitialized",t),qc.listen.on("rosterReadyAfterReconnection",t),qc.listen.on("afterTearDown",()=>{Yc.rosterview&&(Yc.rosterview.model.off().reset(),Yc.rosterview.each(e=>e.removeAll().remove()),Yc.rosterview.removeAll().remove(),delete Yc.rosterview)})}});n(413);
+const HE=rl.env.utils;rl.plugins.add("converse-rosterview",{dependencies:["converse-roster","converse-modal","converse-chatboxviews"],initialize(){Vc.settings.extend({autocomplete_add_contact:!0,allow_chat_pending_contacts:!0,allow_contact_removal:!0,hide_offline_users:!1,roster_groups:!0,xhr_user_search_url:null}),Vc.promises.add("rosterViewInitialized");const e={dnd:zd("This contact is busy"),online:zd("This contact is online"),offline:zd("This contact is offline"),unavailable:zd("This contact is unavailable"),xa:zd("This contact is away for an extended period"),away:zd("This contact is away")};function t(){Vc.settings.get("authentication")!==Uc.ANONYMOUS&&(Uc.rosterview=new Uc.RosterView({model:Uc.rostergroups}),Uc.rosterview.render(),Vc.trigger("rosterViewInitialized"))}Uc.RosterFilter=qo.extend({initialize(){this.set({filter_text:"",filter_type:"contacts",chat_state:"online"})}}),Uc.RosterFilterView=eh.extend({tagName:"span",initialize(){this.listenTo(this.model,"change:filter_type",this.render),this.listenTo(this.model,"change:filter_text",this.render)},toHTML(){return e=Object.assign(this.model.toJSON(),{visible:this.shouldBeVisible(),placeholder:zd("Filter"),title_contact_filter:zd("Filter by contact name"),title_group_filter:zd("Filter by group name"),title_status_filter:zd("Filter by status"),label_any:zd("Any"),label_unread_messages:zd("Unread"),label_online:zd("Online"),label_chatty:zd("Chatty"),label_busy:zd("Busy"),label_away:zd("Away"),label_xa:zd("Extended Away"),label_offline:zd("Offline"),changeChatStateFilter:e=>this.changeChatStateFilter(e),changeTypeFilter:e=>this.changeTypeFilter(e),clearFilter:e=>this.clearFilter(e),liveFilter:e=>this.liveFilter(e),submitFilter:e=>this.submitFilter(e)}),Za(FE(),e.visible?"fade-in":"hidden",e.submitFilter,e.changeTypeFilter,"contacts"===e.filter_type?"selected":"",e.title_contact_filter,e.changeTypeFilter,"groups"===e.filter_type?"selected":"",e.title_group_filter,e.changeTypeFilter,"state"===e.filter_type?"selected":"",e.title_status_filter,e.filter_text||"",e.liveFilter,"state"===e.filter_type?"hidden":"",e.placeholder,e.filter_text&&"state"!==e.filter_type?"":"hidden",e.clearFilter,"state"!==e.filter_type?"hidden":"",e.changeChatStateFilter,e.label_any,"unread_messages"===e.chat_state,e.label_unread_messages,"online"===e.chat_state,e.label_online,"chat"===e.chat_state,e.label_chatty,"dnd"===e.chat_state,e.label_busy,"away"===e.chat_state,e.label_away,"xa"===e.chat_state,e.label_xa,"offline"===e.chat_state,e.label_offline);var e},changeChatStateFilter(e){e&&e.preventDefault(),this.model.save({chat_state:this.el.querySelector(".state-type").value})},changeTypeFilter(e){e&&e.preventDefault();const t=e.target.dataset.type;"state"===t?this.model.save({filter_type:t,chat_state:this.el.querySelector(".state-type").value}):this.model.save({filter_type:t,filter_text:this.el.querySelector(".roster-filter").value})},liveFilter:Rc((function(){this.model.save({filter_text:this.el.querySelector(".roster-filter").value})}),250),submitFilter(e){e&&e.preventDefault(),this.liveFilter()},isActive(){return"state"===this.model.get("filter_type")||this.model.get("filter_text")},shouldBeVisible(){return Uc.roster&&Uc.roster.length>=5||this.isActive()},clearFilter(e){e&&e.preventDefault(),this.model.save({filter_text:""})}}),Uc.RosterContactView=Uc.ViewWithAvatar.extend({tagName:"li",className:"list-item d-flex hidden controlbox-padded",events:{"click .accept-xmpp-request":"acceptRequest","click .decline-xmpp-request":"declineRequest","click .open-chat":"openChat","click .remove-xmpp-contact":"removeContact"},async initialize(){await this.model.initialized,this.debouncedRender=Rc(this.render,50),this.listenTo(this.model,"change",this.debouncedRender),this.listenTo(this.model,"destroy",this.remove),this.listenTo(this.model,"highlight",this.highlight),this.listenTo(this.model,"remove",this.remove),this.listenTo(this.model,"vcard:change",this.debouncedRender),this.listenTo(this.model.presence,"change:show",this.debouncedRender),this.render()},render(){if(!this.mayBeShown())return HE.hideElement(this.el),this;const t=this.model.get("ask"),n=this.model.presence.get("show"),r=this.model.get("requesting"),i=this.model.get("subscription"),o=this.model.get("jid");if(["current-xmpp-contact","pending-xmpp-contact","requesting-xmpp-contact"].concat(Object.keys(e)).forEach(e=>HE.removeClass(e,this.el)),this.el.classList.add(n),this.el.setAttribute("data-status",n),this.highlight(),Uc.isUniView()){const e=Uc.chatboxes.get(this.model.get("jid"));e&&(e.get("hidden")?this.el.classList.remove("open"):this.el.classList.add("open"))}if("subscribe"===t||"from"===i){const e=this.model.getDisplayName();this.el.classList.add("pending-xmpp-contact"),this.el.innerHTML=RE()(Object.assign(this.model.toJSON(),{display_name:e,desc_remove:zd("Click to remove %1$s as a contact",e),allow_chat_pending_contacts:Vc.settings.get("allow_chat_pending_contacts")}))}else if(!0===r){const e=this.model.getDisplayName();this.el.classList.add("requesting-xmpp-contact"),this.el.innerHTML=PE()(Object.assign(this.model.toJSON(),{display_name:e,desc_accept:zd("Click to accept the contact request from %1$s",e),desc_decline:zd("Click to decline the contact request from %1$s",e),allow_chat_pending_contacts:Vc.settings.get("allow_chat_pending_contacts")}))}else("both"===i||"to"===i||Uc.rosterview.isSelf(o))&&(this.el.classList.add("current-xmpp-contact"),this.el.classList.remove(dv(["both","to"],i)[0]),this.el.classList.add(i),this.renderRosterItem(this.model));return this},highlight(){if(Uc.isUniView()){const e=Uc.chatboxes.get(this.model.get("jid"));e&&e.get("hidden")||!e?this.el.classList.remove("open"):this.el.classList.add("open")}},renderRosterItem(t){const n=t.presence.get("show")||"offline";let r;r="online"===n?"fa fa-circle chat-status chat-status--online":"away"===n?"fa fa-circle chat-status chat-status--away":"xa"===n?"far fa-circle chat-status chat-status-xa":"dnd"===n?"fa fa-minus-circle chat-status chat-status--busy":"fa fa-times-circle chat-status chat-status--offline";const i=t.getDisplayName();return this.el.innerHTML=qE()(Object.assign(t.toJSON(),{show:n,display_name:i,status_icon:r,desc_status:e[n],desc_chat:zd("Click to chat with %1$s (XMPP address: %2$s)",i,t.get("jid")),desc_remove:zd("Click to remove %1$s as a contact",i),allow_contact_removal:Vc.settings.get("allow_contact_removal"),num_unread:t.get("num_unread")||0,classes:""})),this.renderAvatar(),this},mayBeShown(){const e=this.model.presence.get("show");return!Vc.settings.get("hide_offline_users")||"offline"!==e||("subscribe"===this.model.get("ask")||"from"===this.model.get("subscription")||!0===this.model.get("requesting"))},openChat(e){e&&e.preventDefault&&e.preventDefault(),this.model.openChat()},async removeContact(e){if(e&&e.preventDefault&&e.preventDefault(),Vc.settings.get("allow_contact_removal")&&confirm(zd("Are you sure you want to remove this contact?")))try{await this.model.removeFromRoster(),this.remove(),this.model.collection&&this.model.destroy()}catch(e){zn.error(e),Vc.alert("error",zd("Error"),[zd("Sorry, there was an error while trying to remove %1$s as a contact.",this.model.getDisplayName())])}},async acceptRequest(e){e&&e.preventDefault&&e.preventDefault(),await Uc.roster.sendContactAddIQ(this.model.get("jid"),this.model.getFullname(),[]),this.model.authorize().subscribe()},declineRequest(e){return e&&e.preventDefault&&e.preventDefault(),!0===confirm(zd("Are you sure you want to decline this contact request?"))&&this.model.unauthorize().destroy(),this}}),Uc.RosterGroupView=pv.extend({tagName:"div",className:"roster-group hidden",events:{"click a.group-toggle":"toggle"},sortImmediatelyOnAdd:!0,ItemView:Uc.RosterContactView,listItems:"model.contacts",listSelector:".roster-group-contacts",sortEvent:"presenceChanged",initialize(){pv.prototype.initialize.apply(this,arguments),this.model.get("name")===Uc.HEADER_UNREAD&&this.listenTo(this.model.contacts,"change:num_unread",e=>!this.model.get("unread_messages")&&this.removeContact(e)),this.model.get("name")===Uc.HEADER_REQUESTING_CONTACTS&&this.listenTo(this.model.contacts,"change:requesting",e=>!e.get("requesting")&&this.removeContact(e)),this.model.get("name")===Uc.HEADER_PENDING_CONTACTS&&this.listenTo(this.model.contacts,"change:subscription",e=>"from"!==e.get("subscription")&&this.removeContact(e)),this.listenTo(this.model.contacts,"remove",this.onRemove),this.listenTo(Uc.roster,"change:groups",this.onContactGroupChange),Uc.rosterview.on("rosterContactsFetchedAndProcessed",()=>this.sortAndPositionAllItems())},render(){return this.el.setAttribute("data-group",this.model.get("name")),this.el.innerHTML=IE()({label_group:this.model.get("name"),desc_group_toggle:this.model.get("description"),toggle_state:this.model.get("state"),_converse:Uc}),this.contacts_el=this.el.querySelector(".roster-group-contacts"),this},show(){return HE.showElement(this.el),this.model.get("state")===Uc.OPENED&&Object.values(this.getAll()).filter(e=>e.mayBeShown()).forEach(e=>HE.showElement(e.el)),this},collapse(){return HE.slideIn(this.contacts_el)},filterOutContacts(e=[]){let t=0;this.model.contacts.forEach(n=>{const r=this.get(n.get("id"));e.includes(n)?HE.hideElement(r.el):r.mayBeShown()&&(HE.showElement(r.el),t+=1)}),t?HE.showElement(this.el):HE.hideElement(this.el)},getFilterMatches(e,t){if(0===e.length)return[];e=e.toLowerCase();const n=this.model.contacts;if("state"===t){return[Uc.HEADER_REQUESTING_CONTACTS,Uc.HEADER_UNREAD].includes(this.model.get("name"))?[]:"unread_messages"===e?n.filter({num_unread:0}):"online"===e?n.filter(e=>["offline","unavailable"].includes(e.presence.get("show"))):n.filter(t=>!t.presence.get("show").includes(e))}return n.filter(t=>!t.getFilterCriteria().includes(e))},filter(e,t){null==e&&(e="state"===(t=t||Uc.rosterview.filter_view.model.get("filter_type"))?Uc.rosterview.filter_view.model.get("chat_state"):Uc.rosterview.filter_view.model.get("filter_text")),this.filterOutContacts(this.getFilterMatches(e,t))},async toggle(e){e&&e.preventDefault&&e.preventDefault();const t=e.target.matches(".fa")?e.target:e.target.querySelector(".fa");HE.hasClass("fa-caret-down",t)?(this.model.save({state:Uc.CLOSED}),await this.collapse(),t.classList.remove("fa-caret-down"),t.classList.add("fa-caret-right")):(t.classList.remove("fa-caret-right"),t.classList.add("fa-caret-down"),this.model.save({state:Uc.OPENED}),this.filter(),HE.showElement(this.el),HE.slideOut(this.contacts_el))},onContactGroupChange(e){const t=e.get("groups").includes(this.model.get("name")),n=e.get("id"),r=!this.get(n);t&&!r?this.items.trigger("add",e):t||this.removeContact(e)},removeContact(e){this.model.contacts.remove(e,{silent:!0}),this.onRemove(e)},onRemove(e){this.remove(e.get("jid")),0===this.model.contacts.length&&this.remove()}}),Uc.RosterView=pv.extend({tagName:"div",id:"converse-roster",className:"controlbox-section",ItemView:Uc.RosterGroupView,listItems:"model",listSelector:".roster-contacts",sortEvent:null,subviewIndex:"name",sortImmediatelyOnAdd:!0,events:{"click a.controlbox-heading__btn.add-contact":"showAddContactModal","click a.controlbox-heading__btn.sync-contacts":"syncContacts"},initialize(){pv.prototype.initialize.apply(this,arguments),this.listenTo(Uc.roster,"add",this.onContactAdded),this.listenTo(Uc.roster,"change:groups",this.onContactAdded),this.listenTo(Uc.roster,"change",this.onContactChange),this.listenTo(Uc.roster,"destroy",this.update),this.listenTo(Uc.roster,"remove",this.update),Uc.presences.on("change:show",()=>{this.update(),this.updateFilter()}),this.listenTo(this.model,"reset",this.reset),Vc.listen.on("rosterGroupsFetched",this.sortAndPositionAllItems.bind(this)),Vc.listen.on("rosterContactsFetched",()=>{Uc.roster.each(e=>this.addRosterContact(e,{silent:!0})),this.update(),this.updateFilter(),this.trigger("rosterContactsFetchedAndProcessed")}),this.createRosterFilter()},render(){this.el.innerHTML=zE()({allow_contact_requests:Uc.allow_contact_requests,heading_contacts:zd("Contacts"),title_add_contact:zd("Add a contact"),title_sync_contacts:zd("Re-sync your contacts")});const e=this.el.querySelector(".roster-filter-form");return this.el.replaceChild(this.filter_view.render().el,e),this.roster_el=this.el.querySelector(".roster-contacts"),this},showAddContactModal(e){Vc.modal.show(Uc.AddContactModal,{model:new qo},e)},createRosterFilter(){const e=new Uc.RosterFilter;e.id="_converse.rosterfilter-".concat(Uc.bare_jid),e.browserStorage=Uc.createStore(e.id),this.filter_view=new Uc.RosterFilterView({model:e}),this.listenTo(this.filter_view.model,"change",this.updateFilter),this.filter_view.model.fetch()},updateFilter:Rc((function(){const e=this.filter_view.model.get("filter_type");"state"===e?this.filter(this.filter_view.model.get("chat_state"),e):this.filter(this.filter_view.model.get("filter_text"),e)}),100),update(){return HE.isVisible(this.roster_el)||HE.showElement(this.roster_el),this.filter_view.render(),this},filter(e,t){const n=Object.values(this.getAll());n.forEach(e=>e.model.contacts.length>0&&e.show().filter("")),e=e.toLowerCase(),"groups"===t?n.forEach(t=>{t.model.get("name").toLowerCase().includes(e)?t.model.contacts.length>0&&HE.slideOut(t.el):HE.slideIn(t.el)}):n.forEach(n=>n.filter(e,t))},async syncContacts(e){e.preventDefault(),HE.addClass("fa-spin",e.target),Uc.roster.data.save("version",null),await Uc.roster.fetchFromServer(),Vc.user.presence.send(),HE.removeClass("fa-spin",e.target)},reset(){return this.removeAll(),this.render().update(),this},onContactAdded(e){this.addRosterContact(e),this.update(),this.updateFilter()},onContactChange(e){this.update(),Xr(e.changed,"subscription")&&("from"===e.changed.subscription?this.addContactToGroup(e,Uc.HEADER_PENDING_CONTACTS):["both","to"].includes(e.get("subscription"))&&this.addExistingContact(e)),Xr(e.changed,"num_unread")&&e.get("num_unread")&&this.addContactToGroup(e,Uc.HEADER_UNREAD),Xr(e.changed,"ask")&&"subscribe"===e.changed.ask&&this.addContactToGroup(e,Uc.HEADER_PENDING_CONTACTS),Xr(e.changed,"subscription")&&"true"===e.changed.requesting&&this.addContactToGroup(e,Uc.HEADER_REQUESTING_CONTACTS),this.updateFilter()},getGroup(e){const t=this.get(e);return t?t.model:this.model.create({name:e})},addContactToGroup(e,t,n){this.getGroup(t).contacts.add(e,n),this.sortAndPositionAllItems()},addExistingContact(e,t){let n;Vc.settings.get("roster_groups")?(n=e.get("groups"),n=0===n.length?[Uc.HEADER_UNGROUPED]:n):n=[Uc.HEADER_CURRENT_CONTACTS],e.get("num_unread")&&n.push(Uc.HEADER_UNREAD),n.forEach(n=>this.addContactToGroup(e,n,t))},isSelf:e=>HE.isSameBareJID(e,Uc.connection.jid),addRosterContact(e,t){const n=e.get("jid");if("both"===e.get("subscription")||"to"===e.get("subscription")||this.isSelf(n))this.addExistingContact(e,t);else{if(!Uc.allow_contact_requests)return void zn.debug("Not adding requesting or pending contact ".concat(n," ")+"because allow_contact_requests is false");"subscribe"===e.get("ask")||"from"===e.get("subscription")?this.addContactToGroup(e,Uc.HEADER_PENDING_CONTACTS,t):!0===e.get("requesting")&&this.addContactToGroup(e,Uc.HEADER_REQUESTING_CONTACTS,t)}return this}}),Vc.listen.on("chatBoxesInitialized",()=>{function e(e){const t=Uc.roster&&Uc.roster.findWhere({jid:e.get("jid")});void 0!==t&&t.trigger("highlight")}Uc.chatboxes.on("destroy",t=>e(t)),Uc.chatboxes.on("change:hidden",t=>e(t))}),Vc.listen.on("controlBoxInitialized",e=>{function t(){e.model.get("connected")&&Vc.settings.get("authentication")!==Uc.ANONYMOUS&&Vc.waitUntil("rosterViewInitialized").then(()=>e.controlbox_pane.el.insertAdjacentElement("beforeEnd",Uc.rosterview.el)).catch(e=>zn.fatal(e))}t(),e.model.on("change:connected",t)}),Vc.listen.on("rosterInitialized",t),Vc.listen.on("rosterReadyAfterReconnection",t),Vc.listen.on("afterTearDown",()=>{rl.rosterview&&(rl.rosterview.model.off().reset(),rl.rosterview.each(e=>e.removeAll().remove()),rl.rosterview.removeAll().remove(),delete rl.rosterview)})}});n(501);
 /**
  * @description Converse.js (A browser based XMPP chat client)
  * @copyright 2020, The Converse developers
  * @license Mozilla Public License (MPLv2)
- */const KS=["converse-autocomplete","converse-bookmark-views","converse-chatboxviews","converse-chatview","converse-controlbox","converse-dragresize","converse-fullscreen","converse-mam-views","converse-minimize","converse-modal","converse-muc-views","converse-headlines-view","converse-notification","converse-omemo","converse-profile","converse-push","converse-register","converse-roomslist","converse-rosterview","converse-singleton"];i.a.templateSettings={escape:/\{\{\{([\s\S]+?)\}\}\}/g,evaluate:/\{\[([\s\S]+?)\]\}/g,interpolate:/\{\{([\s\S]+?)\}\}/g,imports:{_:i.a}},Yc.env._=i.a;const ZS=Yc.initialize;Yc.initialize=function(e,t){return Array.isArray(e.whitelisted_plugins)?e.whitelisted_plugins=e.whitelisted_plugins.concat(KS):e.whitelisted_plugins=KS,ZS(e,t)};t.default=Yc}]);
+ */const UE=["converse-autocomplete","converse-bookmark-views","converse-chatboxviews","converse-chatview","converse-controlbox","converse-dragresize","converse-fullscreen","converse-mam-views","converse-minimize","converse-modal","converse-muc-views","converse-headlines-view","converse-notification","converse-omemo","converse-profile","converse-push","converse-register","converse-roomslist","converse-rosterview","converse-singleton"];i.a.templateSettings={escape:/\{\{\{([\s\S]+?)\}\}\}/g,evaluate:/\{\[([\s\S]+?)\]\}/g,interpolate:/\{\{([\s\S]+?)\}\}/g,imports:{_:i.a}},rl.env._=i.a;const $E=rl.initialize;rl.initialize=function(e,t){return Array.isArray(e.whitelisted_plugins)?e.whitelisted_plugins=e.whitelisted_plugins.concat(UE):e.whitelisted_plugins=UE,$E(e,t)};t.default=rl}]);
 //# sourceMappingURL=converse.min.js.map
\ No newline at end of file
diff --git a/src/conversejs/emojis.js b/src/conversejs/emojis.js
index 212365c82bb04d82a1ffd5af1972b315c67d1a15..f6a0d30d7f8ba12e5d4b9e4433e831fb36bc77c6 100644
--- a/src/conversejs/emojis.js
+++ b/src/conversejs/emojis.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{458:function(n){n.exports=JSON.parse('{"custom":{":converse:":{"sn":":converse:","url":"/dist/images/custom_emojis/converse.png","c":"custom"},":xmpp:":{"sn":":xmpp:","url":"/dist/images/custom_emojis/xmpp.png","c":"custom"}},"smileys":{":smiley:":{"sn":":smiley:","cp":"1f603","sns":[],"c":"smileys"},":smile:":{"sn":":smile:","cp":"1f604","sns":[],"c":"smileys"},":grin:":{"sn":":grin:","cp":"1f601","sns":[],"c":"smileys"},":grinning:":{"sn":":grinning:","cp":"1f600","sns":[],"c":"smileys"},":joy:":{"sn":":joy:","cp":"1f602","sns":[],"c":"smileys"},":confused:":{"sn":":confused:","cp":"1f615","sns":[],"c":"smileys"},":face_with_raised_eyebrow:":{"sn":":face_with_raised_eyebrow:","cp":"1f928","sns":[],"c":"smileys"},":angry:":{"sn":":angry:","cp":"1f620","sns":[],"c":"smileys"},":anguished:":{"sn":":anguished:","cp":"1f627","sns":[],"c":"smileys"},":astonished:":{"sn":":astonished:","cp":"1f632","sns":[],"c":"smileys"},":blush:":{"sn":":blush:","cp":"1f60a","sns":[],"c":"smileys"},":thinking:":{"sn":":thinking:","cp":"1f914","sns":[":thinking_face:"],"c":"smileys"},":cold_sweat:":{"sn":":cold_sweat:","cp":"1f630","sns":[],"c":"smileys"},":confounded:":{"sn":":confounded:","cp":"1f616","sns":[],"c":"smileys"},":crazy_face:":{"sn":":crazy_face:","cp":"1f92a","sns":[],"c":"smileys"},":cry:":{"sn":":cry:","cp":"1f622","sns":[],"c":"smileys"},":disappointed:":{"sn":":disappointed:","cp":"1f61e","sns":[],"c":"smileys"},":disappointed_relieved:":{"sn":":disappointed_relieved:","cp":"1f625","sns":[],"c":"smileys"},":dizzy_face:":{"sn":":dizzy_face:","cp":"1f635","sns":[],"c":"smileys"},":drooling_face:":{"sn":":drooling_face:","cp":"1f924","sns":[":drool:"],"c":"smileys"},":exploding_head:":{"sn":":exploding_head:","cp":"1f92f","sns":[],"c":"smileys"},":expressionless:":{"sn":":expressionless:","cp":"1f611","sns":[],"c":"smileys"},":face_vomiting:":{"sn":":face_vomiting:","cp":"1f92e","sns":[],"c":"smileys"},":face_with_hand_over_mouth:":{"sn":":face_with_hand_over_mouth:","cp":"1f92d","sns":[],"c":"smileys"},":face_with_monocle:":{"sn":":face_with_monocle:","cp":"1f9d0","sns":[],"c":"smileys"},":fearful:":{"sn":":fearful:","cp":"1f628","sns":[],"c":"smileys"},":flushed:":{"sn":":flushed:","cp":"1f633","sns":[],"c":"smileys"},":frowning:":{"sn":":frowning:","cp":"1f626","sns":[],"c":"smileys"},":grimacing:":{"sn":":grimacing:","cp":"1f62c","sns":[],"c":"smileys"},":head_bandage:":{"sn":":head_bandage:","cp":"1f915","sns":[":face_with_head_bandage:"],"c":"smileys"},":heart_eyes:":{"sn":":heart_eyes:","cp":"1f60d","sns":[],"c":"smileys"},":hugging:":{"sn":":hugging:","cp":"1f917","sns":[":hugging_face:"],"c":"smileys"},":hushed:":{"sn":":hushed:","cp":"1f62f","sns":[],"c":"smileys"},":innocent:":{"sn":":innocent:","cp":"1f607","sns":[],"c":"smileys"},":kissing:":{"sn":":kissing:","cp":"1f617","sns":[],"c":"smileys"},":kissing_closed_eyes:":{"sn":":kissing_closed_eyes:","cp":"1f61a","sns":[],"c":"smileys"},":kissing_heart:":{"sn":":kissing_heart:","cp":"1f618","sns":[],"c":"smileys"},":kissing_smiling_eyes:":{"sn":":kissing_smiling_eyes:","cp":"1f619","sns":[],"c":"smileys"},":laughing:":{"sn":":laughing:","cp":"1f606","sns":[":satisfied:"],"c":"smileys"},":lying_face:":{"sn":":lying_face:","cp":"1f925","sns":[":liar:"],"c":"smileys"},":mask:":{"sn":":mask:","cp":"1f637","sns":[],"c":"smileys"},":money_mouth:":{"sn":":money_mouth:","cp":"1f911","sns":[":money_mouth_face:"],"c":"smileys"},":nauseated_face:":{"sn":":nauseated_face:","cp":"1f922","sns":[":sick:"],"c":"smileys"},":nerd:":{"sn":":nerd:","cp":"1f913","sns":[":nerd_face:"],"c":"smileys"},":neutral_face:":{"sn":":neutral_face:","cp":"1f610","sns":[],"c":"smileys"},":no_mouth:":{"sn":":no_mouth:","cp":"1f636","sns":[],"c":"smileys"},":open_mouth:":{"sn":":open_mouth:","cp":"1f62e","sns":[],"c":"smileys"},":pensive:":{"sn":":pensive:","cp":"1f614","sns":[],"c":"smileys"},":persevere:":{"sn":":persevere:","cp":"1f623","sns":[],"c":"smileys"},":rage:":{"sn":":rage:","cp":"1f621","sns":[],"c":"smileys"},":face_with_symbols_over_mouth:":{"sn":":face_with_symbols_over_mouth:","cp":"1f92c","sns":[],"c":"smileys"},":relieved:":{"sn":":relieved:","cp":"1f60c","sns":[],"c":"smileys"},":rofl:":{"sn":":rofl:","cp":"1f923","sns":[":rolling_on_the_floor_laughing:"],"c":"smileys"},":rolling_eyes:":{"sn":":rolling_eyes:","cp":"1f644","sns":[":face_with_rolling_eyes:"],"c":"smileys"},":scream:":{"sn":":scream:","cp":"1f631","sns":[],"c":"smileys"},":shushing_face:":{"sn":":shushing_face:","cp":"1f92b","sns":[],"c":"smileys"},":sleeping:":{"sn":":sleeping:","cp":"1f634","sns":[],"c":"smileys"},":sleepy:":{"sn":":sleepy:","cp":"1f62a","sns":[],"c":"smileys"},":slight_frown:":{"sn":":slight_frown:","cp":"1f641","sns":[":slightly_frowning_face:"],"c":"smileys"},":slight_smile:":{"sn":":slight_smile:","cp":"1f642","sns":[":slightly_smiling_face:"],"c":"smileys"},":smirk:":{"sn":":smirk:","cp":"1f60f","sns":[],"c":"smileys"},":sneezing_face:":{"sn":":sneezing_face:","cp":"1f927","sns":[":sneeze:"],"c":"smileys"},":sob:":{"sn":":sob:","cp":"1f62d","sns":[],"c":"smileys"},":star_struck:":{"sn":":star_struck:","cp":"1f929","sns":[],"c":"smileys"},":stuck_out_tongue:":{"sn":":stuck_out_tongue:","cp":"1f61b","sns":[],"c":"smileys"},":stuck_out_tongue_closed_eyes:":{"sn":":stuck_out_tongue_closed_eyes:","cp":"1f61d","sns":[],"c":"smileys"},":stuck_out_tongue_winking_eye:":{"sn":":stuck_out_tongue_winking_eye:","cp":"1f61c","sns":[],"c":"smileys"},":sunglasses:":{"sn":":sunglasses:","cp":"1f60e","sns":[],"c":"smileys"},":sweat:":{"sn":":sweat:","cp":"1f613","sns":[],"c":"smileys"},":sweat_smile:":{"sn":":sweat_smile:","cp":"1f605","sns":[],"c":"smileys"},":thermometer_face:":{"sn":":thermometer_face:","cp":"1f912","sns":[":face_with_thermometer:"],"c":"smileys"},":tired_face:":{"sn":":tired_face:","cp":"1f62b","sns":[],"c":"smileys"},":triumph:":{"sn":":triumph:","cp":"1f624","sns":[],"c":"smileys"},":unamused:":{"sn":":unamused:","cp":"1f612","sns":[],"c":"smileys"},":upside_down:":{"sn":":upside_down:","cp":"1f643","sns":[":upside_down_face:"],"c":"smileys"},":weary:":{"sn":":weary:","cp":"1f629","sns":[],"c":"smileys"},":wink:":{"sn":":wink:","cp":"1f609","sns":[],"c":"smileys"},":worried:":{"sn":":worried:","cp":"1f61f","sns":[],"c":"smileys"},":yum:":{"sn":":yum:","cp":"1f60b","sns":[],"c":"smileys"},":zipper_mouth:":{"sn":":zipper_mouth:","cp":"1f910","sns":[":zipper_mouth_face:"],"c":"smileys"},":cowboy:":{"sn":":cowboy:","cp":"1f920","sns":[":face_with_cowboy_hat:"],"c":"smileys"},":joy_cat:":{"sn":":joy_cat:","cp":"1f639","sns":[],"c":"smileys"},":crying_cat_face:":{"sn":":crying_cat_face:","cp":"1f63f","sns":[],"c":"smileys"},":kissing_cat:":{"sn":":kissing_cat:","cp":"1f63d","sns":[],"c":"smileys"},":pouting_cat:":{"sn":":pouting_cat:","cp":"1f63e","sns":[],"c":"smileys"},":scream_cat:":{"sn":":scream_cat:","cp":"1f640","sns":[],"c":"smileys"},":smile_cat:":{"sn":":smile_cat:","cp":"1f638","sns":[],"c":"smileys"},":smiley_cat:":{"sn":":smiley_cat:","cp":"1f63a","sns":[],"c":"smileys"},":smirk_cat:":{"sn":":smirk_cat:","cp":"1f63c","sns":[],"c":"smileys"},":heart_eyes_cat:":{"sn":":heart_eyes_cat:","cp":"1f63b","sns":[],"c":"smileys"},":poop:":{"sn":":poop:","cp":"1f4a9","sns":[":shit:",":hankey:",":poo:"],"c":"smileys"},":robot:":{"sn":":robot:","cp":"1f916","sns":[":robot_face:"],"c":"smileys"},":skull:":{"sn":":skull:","cp":"1f480","sns":[":skeleton:"],"c":"smileys"},":jack_o_lantern:":{"sn":":jack_o_lantern:","cp":"1f383","sns":[],"c":"smileys"},":alien:":{"sn":":alien:","cp":"1f47d","sns":[],"c":"smileys"},":clown:":{"sn":":clown:","cp":"1f921","sns":[":clown_face:"],"c":"smileys"},":japanese_goblin:":{"sn":":japanese_goblin:","cp":"1f47a","sns":[],"c":"smileys"},":japanese_ogre:":{"sn":":japanese_ogre:","cp":"1f479","sns":[],"c":"smileys"},":imp:":{"sn":":imp:","cp":"1f47f","sns":[],"c":"smileys"},":smiling_imp:":{"sn":":smiling_imp:","cp":"1f608","sns":[],"c":"smileys"}},"people":{":ok_hand:":{"sn":":ok_hand:","cp":"1f44c","sns":[],"c":"people"},":ok_hand_tone1:":{"sn":":ok_hand_tone1:","cp":"1f44c-1f3fb","sns":[],"c":"people"},":ok_hand_tone2:":{"sn":":ok_hand_tone2:","cp":"1f44c-1f3fc","sns":[],"c":"people"},":ok_hand_tone3:":{"sn":":ok_hand_tone3:","cp":"1f44c-1f3fd","sns":[],"c":"people"},":ok_hand_tone4:":{"sn":":ok_hand_tone4:","cp":"1f44c-1f3fe","sns":[],"c":"people"},":ok_hand_tone5:":{"sn":":ok_hand_tone5:","cp":"1f44c-1f3ff","sns":[],"c":"people"},":thumbsdown:":{"sn":":thumbsdown:","cp":"1f44e","sns":[":-1:",":thumbdown:"],"c":"people"},":thumbsdown_tone1:":{"sn":":thumbsdown_tone1:","cp":"1f44e-1f3fb","sns":[":-1_tone1:",":thumbdown_tone1:"],"c":"people"},":thumbsdown_tone2:":{"sn":":thumbsdown_tone2:","cp":"1f44e-1f3fc","sns":[":-1_tone2:",":thumbdown_tone2:"],"c":"people"},":thumbsdown_tone3:":{"sn":":thumbsdown_tone3:","cp":"1f44e-1f3fd","sns":[":-1_tone3:",":thumbdown_tone3:"],"c":"people"},":thumbsdown_tone4:":{"sn":":thumbsdown_tone4:","cp":"1f44e-1f3fe","sns":[":-1_tone4:",":thumbdown_tone4:"],"c":"people"},":thumbsdown_tone5:":{"sn":":thumbsdown_tone5:","cp":"1f44e-1f3ff","sns":[":-1_tone5:",":thumbdown_tone5:"],"c":"people"},":thumbsup:":{"sn":":thumbsup:","cp":"1f44d","sns":[":+1:",":thumbup:"],"c":"people"},":thumbsup_tone1:":{"sn":":thumbsup_tone1:","cp":"1f44d-1f3fb","sns":[":+1_tone1:",":thumbup_tone1:"],"c":"people"},":thumbsup_tone2:":{"sn":":thumbsup_tone2:","cp":"1f44d-1f3fc","sns":[":+1_tone2:",":thumbup_tone2:"],"c":"people"},":thumbsup_tone3:":{"sn":":thumbsup_tone3:","cp":"1f44d-1f3fd","sns":[":+1_tone3:",":thumbup_tone3:"],"c":"people"},":thumbsup_tone4:":{"sn":":thumbsup_tone4:","cp":"1f44d-1f3fe","sns":[":+1_tone4:",":thumbup_tone4:"],"c":"people"},":thumbsup_tone5:":{"sn":":thumbsup_tone5:","cp":"1f44d-1f3ff","sns":[":+1_tone5:",":thumbup_tone5:"],"c":"people"},":wave:":{"sn":":wave:","cp":"1f44b","sns":[],"c":"people"},":wave_tone1:":{"sn":":wave_tone1:","cp":"1f44b-1f3fb","sns":[],"c":"people"},":wave_tone2:":{"sn":":wave_tone2:","cp":"1f44b-1f3fc","sns":[],"c":"people"},":wave_tone3:":{"sn":":wave_tone3:","cp":"1f44b-1f3fd","sns":[],"c":"people"},":wave_tone4:":{"sn":":wave_tone4:","cp":"1f44b-1f3fe","sns":[],"c":"people"},":wave_tone5:":{"sn":":wave_tone5:","cp":"1f44b-1f3ff","sns":[],"c":"people"},":call_me:":{"sn":":call_me:","cp":"1f919","sns":[":call_me_hand:"],"c":"people"},":call_me_tone1:":{"sn":":call_me_tone1:","cp":"1f919-1f3fb","sns":[":call_me_hand_tone1:"],"c":"people"},":call_me_tone2:":{"sn":":call_me_tone2:","cp":"1f919-1f3fc","sns":[":call_me_hand_tone2:"],"c":"people"},":call_me_tone3:":{"sn":":call_me_tone3:","cp":"1f919-1f3fd","sns":[":call_me_hand_tone3:"],"c":"people"},":call_me_tone4:":{"sn":":call_me_tone4:","cp":"1f919-1f3fe","sns":[":call_me_hand_tone4:"],"c":"people"},":call_me_tone5:":{"sn":":call_me_tone5:","cp":"1f919-1f3ff","sns":[":call_me_hand_tone5:"],"c":"people"},":clap:":{"sn":":clap:","cp":"1f44f","sns":[],"c":"people"},":clap_tone1:":{"sn":":clap_tone1:","cp":"1f44f-1f3fb","sns":[],"c":"people"},":clap_tone2:":{"sn":":clap_tone2:","cp":"1f44f-1f3fc","sns":[],"c":"people"},":clap_tone3:":{"sn":":clap_tone3:","cp":"1f44f-1f3fd","sns":[],"c":"people"},":clap_tone4:":{"sn":":clap_tone4:","cp":"1f44f-1f3fe","sns":[],"c":"people"},":clap_tone5:":{"sn":":clap_tone5:","cp":"1f44f-1f3ff","sns":[],"c":"people"},":hand_splayed:":{"sn":":hand_splayed:","cp":"1f590","sns":[":raised_hand_with_fingers_splayed:"],"c":"people"},":hand_splayed_tone1:":{"sn":":hand_splayed_tone1:","cp":"1f590-1f3fb","sns":[":raised_hand_with_fingers_splayed_tone1:"],"c":"people"},":hand_splayed_tone2:":{"sn":":hand_splayed_tone2:","cp":"1f590-1f3fc","sns":[":raised_hand_with_fingers_splayed_tone2:"],"c":"people"},":hand_splayed_tone3:":{"sn":":hand_splayed_tone3:","cp":"1f590-1f3fd","sns":[":raised_hand_with_fingers_splayed_tone3:"],"c":"people"},":hand_splayed_tone4:":{"sn":":hand_splayed_tone4:","cp":"1f590-1f3fe","sns":[":raised_hand_with_fingers_splayed_tone4:"],"c":"people"},":hand_splayed_tone5:":{"sn":":hand_splayed_tone5:","cp":"1f590-1f3ff","sns":[":raised_hand_with_fingers_splayed_tone5:"],"c":"people"},":love_you_gesture:":{"sn":":love_you_gesture:","cp":"1f91f","sns":[],"c":"people"},":love_you_gesture_tone1:":{"sn":":love_you_gesture_tone1:","cp":"1f91f-1f3fb","sns":[":love_you_gesture_light_skin_tone:"],"c":"people"},":love_you_gesture_tone2:":{"sn":":love_you_gesture_tone2:","cp":"1f91f-1f3fc","sns":[":love_you_gesture_medium_light_skin_tone:"],"c":"people"},":love_you_gesture_tone3:":{"sn":":love_you_gesture_tone3:","cp":"1f91f-1f3fd","sns":[":love_you_gesture_medium_skin_tone:"],"c":"people"},":love_you_gesture_tone4:":{"sn":":love_you_gesture_tone4:","cp":"1f91f-1f3fe","sns":[":love_you_gesture_medium_dark_skin_tone:"],"c":"people"},":love_you_gesture_tone5:":{"sn":":love_you_gesture_tone5:","cp":"1f91f-1f3ff","sns":[":love_you_gesture_dark_skin_tone:"],"c":"people"},":right_facing_fist:":{"sn":":right_facing_fist:","cp":"1f91c","sns":[":right_fist:"],"c":"people"},":right_facing_fist_tone1:":{"sn":":right_facing_fist_tone1:","cp":"1f91c-1f3fb","sns":[":right_fist_tone1:"],"c":"people"},":right_facing_fist_tone2:":{"sn":":right_facing_fist_tone2:","cp":"1f91c-1f3fc","sns":[":right_fist_tone2:"],"c":"people"},":right_facing_fist_tone3:":{"sn":":right_facing_fist_tone3:","cp":"1f91c-1f3fd","sns":[":right_fist_tone3:"],"c":"people"},":right_facing_fist_tone4:":{"sn":":right_facing_fist_tone4:","cp":"1f91c-1f3fe","sns":[":right_fist_tone4:"],"c":"people"},":right_facing_fist_tone5:":{"sn":":right_facing_fist_tone5:","cp":"1f91c-1f3ff","sns":[":right_fist_tone5:"],"c":"people"},":left_facing_fist:":{"sn":":left_facing_fist:","cp":"1f91b","sns":[":left_fist:"],"c":"people"},":left_facing_fist_tone1:":{"sn":":left_facing_fist_tone1:","cp":"1f91b-1f3fb","sns":[":left_fist_tone1:"],"c":"people"},":left_facing_fist_tone2:":{"sn":":left_facing_fist_tone2:","cp":"1f91b-1f3fc","sns":[":left_fist_tone2:"],"c":"people"},":left_facing_fist_tone3:":{"sn":":left_facing_fist_tone3:","cp":"1f91b-1f3fd","sns":[":left_fist_tone3:"],"c":"people"},":left_facing_fist_tone4:":{"sn":":left_facing_fist_tone4:","cp":"1f91b-1f3fe","sns":[":left_fist_tone4:"],"c":"people"},":left_facing_fist_tone5:":{"sn":":left_facing_fist_tone5:","cp":"1f91b-1f3ff","sns":[":left_fist_tone5:"],"c":"people"},":muscle:":{"sn":":muscle:","cp":"1f4aa","sns":[],"c":"people"},":muscle_tone1:":{"sn":":muscle_tone1:","cp":"1f4aa-1f3fb","sns":[],"c":"people"},":muscle_tone2:":{"sn":":muscle_tone2:","cp":"1f4aa-1f3fc","sns":[],"c":"people"},":muscle_tone3:":{"sn":":muscle_tone3:","cp":"1f4aa-1f3fd","sns":[],"c":"people"},":muscle_tone4:":{"sn":":muscle_tone4:","cp":"1f4aa-1f3fe","sns":[],"c":"people"},":muscle_tone5:":{"sn":":muscle_tone5:","cp":"1f4aa-1f3ff","sns":[],"c":"people"},":fingers_crossed:":{"sn":":fingers_crossed:","cp":"1f91e","sns":[":hand_with_index_and_middle_finger_crossed:"],"c":"people"},":fingers_crossed_tone1:":{"sn":":fingers_crossed_tone1:","cp":"1f91e-1f3fb","sns":[":hand_with_index_and_middle_fingers_crossed_tone1:"],"c":"people"},":fingers_crossed_tone2:":{"sn":":fingers_crossed_tone2:","cp":"1f91e-1f3fc","sns":[":hand_with_index_and_middle_fingers_crossed_tone2:"],"c":"people"},":fingers_crossed_tone3:":{"sn":":fingers_crossed_tone3:","cp":"1f91e-1f3fd","sns":[":hand_with_index_and_middle_fingers_crossed_tone3:"],"c":"people"},":fingers_crossed_tone4:":{"sn":":fingers_crossed_tone4:","cp":"1f91e-1f3fe","sns":[":hand_with_index_and_middle_fingers_crossed_tone4:"],"c":"people"},":fingers_crossed_tone5:":{"sn":":fingers_crossed_tone5:","cp":"1f91e-1f3ff","sns":[":hand_with_index_and_middle_fingers_crossed_tone5:"],"c":"people"},":fist:":{"sn":":fist:","cp":"270a","sns":[],"c":"people"},":fist_tone1:":{"sn":":fist_tone1:","cp":"270a-1f3fb","sns":[],"c":"people"},":fist_tone2:":{"sn":":fist_tone2:","cp":"270a-1f3fc","sns":[],"c":"people"},":fist_tone3:":{"sn":":fist_tone3:","cp":"270a-1f3fd","sns":[],"c":"people"},":fist_tone4:":{"sn":":fist_tone4:","cp":"270a-1f3fe","sns":[],"c":"people"},":fist_tone5:":{"sn":":fist_tone5:","cp":"270a-1f3ff","sns":[],"c":"people"},":punch:":{"sn":":punch:","cp":"1f44a","sns":[],"c":"people"},":punch_tone1:":{"sn":":punch_tone1:","cp":"1f44a-1f3fb","sns":[],"c":"people"},":punch_tone2:":{"sn":":punch_tone2:","cp":"1f44a-1f3fc","sns":[],"c":"people"},":punch_tone3:":{"sn":":punch_tone3:","cp":"1f44a-1f3fd","sns":[],"c":"people"},":punch_tone4:":{"sn":":punch_tone4:","cp":"1f44a-1f3fe","sns":[],"c":"people"},":punch_tone5:":{"sn":":punch_tone5:","cp":"1f44a-1f3ff","sns":[],"c":"people"},":raised_back_of_hand:":{"sn":":raised_back_of_hand:","cp":"1f91a","sns":[":back_of_hand:"],"c":"people"},":raised_back_of_hand_tone1:":{"sn":":raised_back_of_hand_tone1:","cp":"1f91a-1f3fb","sns":[":back_of_hand_tone1:"],"c":"people"},":raised_back_of_hand_tone2:":{"sn":":raised_back_of_hand_tone2:","cp":"1f91a-1f3fc","sns":[":back_of_hand_tone2:"],"c":"people"},":raised_back_of_hand_tone3:":{"sn":":raised_back_of_hand_tone3:","cp":"1f91a-1f3fd","sns":[":back_of_hand_tone3:"],"c":"people"},":raised_back_of_hand_tone4:":{"sn":":raised_back_of_hand_tone4:","cp":"1f91a-1f3fe","sns":[":back_of_hand_tone4:"],"c":"people"},":raised_back_of_hand_tone5:":{"sn":":raised_back_of_hand_tone5:","cp":"1f91a-1f3ff","sns":[":back_of_hand_tone5:"],"c":"people"},":raised_hand:":{"sn":":raised_hand:","cp":"270b","sns":[],"c":"people"},":raised_hand_tone1:":{"sn":":raised_hand_tone1:","cp":"270b-1f3fb","sns":[],"c":"people"},":raised_hand_tone2:":{"sn":":raised_hand_tone2:","cp":"270b-1f3fc","sns":[],"c":"people"},":raised_hand_tone3:":{"sn":":raised_hand_tone3:","cp":"270b-1f3fd","sns":[],"c":"people"},":raised_hand_tone4:":{"sn":":raised_hand_tone4:","cp":"270b-1f3fe","sns":[],"c":"people"},":raised_hand_tone5:":{"sn":":raised_hand_tone5:","cp":"270b-1f3ff","sns":[],"c":"people"},":raised_hands:":{"sn":":raised_hands:","cp":"1f64c","sns":[],"c":"people"},":raised_hands_tone1:":{"sn":":raised_hands_tone1:","cp":"1f64c-1f3fb","sns":[],"c":"people"},":raised_hands_tone2:":{"sn":":raised_hands_tone2:","cp":"1f64c-1f3fc","sns":[],"c":"people"},":raised_hands_tone3:":{"sn":":raised_hands_tone3:","cp":"1f64c-1f3fd","sns":[],"c":"people"},":raised_hands_tone4:":{"sn":":raised_hands_tone4:","cp":"1f64c-1f3fe","sns":[],"c":"people"},":raised_hands_tone5:":{"sn":":raised_hands_tone5:","cp":"1f64c-1f3ff","sns":[],"c":"people"},":open_hands:":{"sn":":open_hands:","cp":"1f450","sns":[],"c":"people"},":open_hands_tone1:":{"sn":":open_hands_tone1:","cp":"1f450-1f3fb","sns":[],"c":"people"},":open_hands_tone2:":{"sn":":open_hands_tone2:","cp":"1f450-1f3fc","sns":[],"c":"people"},":open_hands_tone3:":{"sn":":open_hands_tone3:","cp":"1f450-1f3fd","sns":[],"c":"people"},":open_hands_tone4:":{"sn":":open_hands_tone4:","cp":"1f450-1f3fe","sns":[],"c":"people"},":open_hands_tone5:":{"sn":":open_hands_tone5:","cp":"1f450-1f3ff","sns":[],"c":"people"},":palms_up_together:":{"sn":":palms_up_together:","cp":"1f932","sns":[],"c":"people"},":palms_up_together_tone1:":{"sn":":palms_up_together_tone1:","cp":"1f932-1f3fb","sns":[":palms_up_together_light_skin_tone:"],"c":"people"},":palms_up_together_tone2:":{"sn":":palms_up_together_tone2:","cp":"1f932-1f3fc","sns":[":palms_up_together_medium_light_skin_tone:"],"c":"people"},":palms_up_together_tone3:":{"sn":":palms_up_together_tone3:","cp":"1f932-1f3fd","sns":[":palms_up_together_medium_skin_tone:"],"c":"people"},":palms_up_together_tone4:":{"sn":":palms_up_together_tone4:","cp":"1f932-1f3fe","sns":[":palms_up_together_medium_dark_skin_tone:"],"c":"people"},":palms_up_together_tone5:":{"sn":":palms_up_together_tone5:","cp":"1f932-1f3ff","sns":[":palms_up_together_dark_skin_tone:"],"c":"people"},":point_down:":{"sn":":point_down:","cp":"1f447","sns":[],"c":"people"},":point_down_tone1:":{"sn":":point_down_tone1:","cp":"1f447-1f3fb","sns":[],"c":"people"},":point_down_tone2:":{"sn":":point_down_tone2:","cp":"1f447-1f3fc","sns":[],"c":"people"},":point_down_tone3:":{"sn":":point_down_tone3:","cp":"1f447-1f3fd","sns":[],"c":"people"},":point_down_tone4:":{"sn":":point_down_tone4:","cp":"1f447-1f3fe","sns":[],"c":"people"},":point_down_tone5:":{"sn":":point_down_tone5:","cp":"1f447-1f3ff","sns":[],"c":"people"},":point_left:":{"sn":":point_left:","cp":"1f448","sns":[],"c":"people"},":point_left_tone1:":{"sn":":point_left_tone1:","cp":"1f448-1f3fb","sns":[],"c":"people"},":point_left_tone2:":{"sn":":point_left_tone2:","cp":"1f448-1f3fc","sns":[],"c":"people"},":point_left_tone3:":{"sn":":point_left_tone3:","cp":"1f448-1f3fd","sns":[],"c":"people"},":point_left_tone4:":{"sn":":point_left_tone4:","cp":"1f448-1f3fe","sns":[],"c":"people"},":point_left_tone5:":{"sn":":point_left_tone5:","cp":"1f448-1f3ff","sns":[],"c":"people"},":point_right:":{"sn":":point_right:","cp":"1f449","sns":[],"c":"people"},":point_right_tone1:":{"sn":":point_right_tone1:","cp":"1f449-1f3fb","sns":[],"c":"people"},":point_right_tone2:":{"sn":":point_right_tone2:","cp":"1f449-1f3fc","sns":[],"c":"people"},":point_right_tone3:":{"sn":":point_right_tone3:","cp":"1f449-1f3fd","sns":[],"c":"people"},":point_right_tone4:":{"sn":":point_right_tone4:","cp":"1f449-1f3fe","sns":[],"c":"people"},":point_right_tone5:":{"sn":":point_right_tone5:","cp":"1f449-1f3ff","sns":[],"c":"people"},":point_up:":{"sn":":point_up:","cp":"261d","sns":[],"c":"people"},":point_up_2:":{"sn":":point_up_2:","cp":"1f446","sns":[],"c":"people"},":point_up_2_tone1:":{"sn":":point_up_2_tone1:","cp":"1f446-1f3fb","sns":[],"c":"people"},":point_up_2_tone2:":{"sn":":point_up_2_tone2:","cp":"1f446-1f3fc","sns":[],"c":"people"},":point_up_2_tone3:":{"sn":":point_up_2_tone3:","cp":"1f446-1f3fd","sns":[],"c":"people"},":point_up_2_tone4:":{"sn":":point_up_2_tone4:","cp":"1f446-1f3fe","sns":[],"c":"people"},":point_up_2_tone5:":{"sn":":point_up_2_tone5:","cp":"1f446-1f3ff","sns":[],"c":"people"},":point_up_tone1:":{"sn":":point_up_tone1:","cp":"261d-1f3fb","sns":[],"c":"people"},":point_up_tone2:":{"sn":":point_up_tone2:","cp":"261d-1f3fc","sns":[],"c":"people"},":point_up_tone3:":{"sn":":point_up_tone3:","cp":"261d-1f3fd","sns":[],"c":"people"},":point_up_tone4:":{"sn":":point_up_tone4:","cp":"261d-1f3fe","sns":[],"c":"people"},":point_up_tone5:":{"sn":":point_up_tone5:","cp":"261d-1f3ff","sns":[],"c":"people"},":v:":{"sn":":v:","cp":"270c","sns":[],"c":"people"},":v_tone1:":{"sn":":v_tone1:","cp":"270c-1f3fb","sns":[],"c":"people"},":v_tone2:":{"sn":":v_tone2:","cp":"270c-1f3fc","sns":[],"c":"people"},":v_tone3:":{"sn":":v_tone3:","cp":"270c-1f3fd","sns":[],"c":"people"},":v_tone4:":{"sn":":v_tone4:","cp":"270c-1f3fe","sns":[],"c":"people"},":v_tone5:":{"sn":":v_tone5:","cp":"270c-1f3ff","sns":[],"c":"people"},":vulcan:":{"sn":":vulcan:","cp":"1f596","sns":[":raised_hand_with_part_between_middle_and_ring_fingers:"],"c":"people"},":vulcan_tone1:":{"sn":":vulcan_tone1:","cp":"1f596-1f3fb","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone1:"],"c":"people"},":vulcan_tone2:":{"sn":":vulcan_tone2:","cp":"1f596-1f3fc","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone2:"],"c":"people"},":vulcan_tone3:":{"sn":":vulcan_tone3:","cp":"1f596-1f3fd","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone3:"],"c":"people"},":vulcan_tone4:":{"sn":":vulcan_tone4:","cp":"1f596-1f3fe","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone4:"],"c":"people"},":vulcan_tone5:":{"sn":":vulcan_tone5:","cp":"1f596-1f3ff","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone5:"],"c":"people"},":metal:":{"sn":":metal:","cp":"1f918","sns":[":sign_of_the_horns:"],"c":"people"},":metal_tone1:":{"sn":":metal_tone1:","cp":"1f918-1f3fb","sns":[":sign_of_the_horns_tone1:"],"c":"people"},":metal_tone2:":{"sn":":metal_tone2:","cp":"1f918-1f3fc","sns":[":sign_of_the_horns_tone2:"],"c":"people"},":metal_tone3:":{"sn":":metal_tone3:","cp":"1f918-1f3fd","sns":[":sign_of_the_horns_tone3:"],"c":"people"},":metal_tone4:":{"sn":":metal_tone4:","cp":"1f918-1f3fe","sns":[":sign_of_the_horns_tone4:"],"c":"people"},":metal_tone5:":{"sn":":metal_tone5:","cp":"1f918-1f3ff","sns":[":sign_of_the_horns_tone5:"],"c":"people"},":middle_finger:":{"sn":":middle_finger:","cp":"1f595","sns":[":reversed_hand_with_middle_finger_extended:"],"c":"people"},":middle_finger_tone1:":{"sn":":middle_finger_tone1:","cp":"1f595-1f3fb","sns":[":reversed_hand_with_middle_finger_extended_tone1:"],"c":"people"},":middle_finger_tone2:":{"sn":":middle_finger_tone2:","cp":"1f595-1f3fc","sns":[":reversed_hand_with_middle_finger_extended_tone2:"],"c":"people"},":middle_finger_tone3:":{"sn":":middle_finger_tone3:","cp":"1f595-1f3fd","sns":[":reversed_hand_with_middle_finger_extended_tone3:"],"c":"people"},":middle_finger_tone4:":{"sn":":middle_finger_tone4:","cp":"1f595-1f3fe","sns":[":reversed_hand_with_middle_finger_extended_tone4:"],"c":"people"},":middle_finger_tone5:":{"sn":":middle_finger_tone5:","cp":"1f595-1f3ff","sns":[":reversed_hand_with_middle_finger_extended_tone5:"],"c":"people"},":pray:":{"sn":":pray:","cp":"1f64f","sns":[],"c":"people"},":pray_tone1:":{"sn":":pray_tone1:","cp":"1f64f-1f3fb","sns":[],"c":"people"},":pray_tone2:":{"sn":":pray_tone2:","cp":"1f64f-1f3fc","sns":[],"c":"people"},":pray_tone3:":{"sn":":pray_tone3:","cp":"1f64f-1f3fd","sns":[],"c":"people"},":pray_tone4:":{"sn":":pray_tone4:","cp":"1f64f-1f3fe","sns":[],"c":"people"},":pray_tone5:":{"sn":":pray_tone5:","cp":"1f64f-1f3ff","sns":[],"c":"people"},":handshake:":{"sn":":handshake:","cp":"1f91d","sns":[":shaking_hands:"],"c":"people"},":handshake_tone1:":{"sn":":handshake_tone1:","cp":"1f91d-1f3fb","sns":[],"c":"people"},":handshake_tone2:":{"sn":":handshake_tone2:","cp":"1f91d-1f3fc","sns":[],"c":"people"},":handshake_tone3:":{"sn":":handshake_tone3:","cp":"1f91d-1f3fd","sns":[],"c":"people"},":handshake_tone4:":{"sn":":handshake_tone4:","cp":"1f91d-1f3fe","sns":[],"c":"people"},":handshake_tone5:":{"sn":":handshake_tone5:","cp":"1f91d-1f3ff","sns":[],"c":"people"},":writing_hand:":{"sn":":writing_hand:","cp":"270d","sns":[],"c":"people"},":writing_hand_tone1:":{"sn":":writing_hand_tone1:","cp":"270d-1f3fb","sns":[],"c":"people"},":writing_hand_tone2:":{"sn":":writing_hand_tone2:","cp":"270d-1f3fc","sns":[],"c":"people"},":writing_hand_tone3:":{"sn":":writing_hand_tone3:","cp":"270d-1f3fd","sns":[],"c":"people"},":writing_hand_tone4:":{"sn":":writing_hand_tone4:","cp":"270d-1f3fe","sns":[],"c":"people"},":writing_hand_tone5:":{"sn":":writing_hand_tone5:","cp":"270d-1f3ff","sns":[],"c":"people"},":selfie:":{"sn":":selfie:","cp":"1f933","sns":[],"c":"people"},":selfie_tone1:":{"sn":":selfie_tone1:","cp":"1f933-1f3fb","sns":[],"c":"people"},":selfie_tone2:":{"sn":":selfie_tone2:","cp":"1f933-1f3fc","sns":[],"c":"people"},":selfie_tone3:":{"sn":":selfie_tone3:","cp":"1f933-1f3fd","sns":[],"c":"people"},":selfie_tone4:":{"sn":":selfie_tone4:","cp":"1f933-1f3fe","sns":[],"c":"people"},":selfie_tone5:":{"sn":":selfie_tone5:","cp":"1f933-1f3ff","sns":[],"c":"people"},":nail_care:":{"sn":":nail_care:","cp":"1f485","sns":[],"c":"people"},":nail_care_tone1:":{"sn":":nail_care_tone1:","cp":"1f485-1f3fb","sns":[],"c":"people"},":nail_care_tone2:":{"sn":":nail_care_tone2:","cp":"1f485-1f3fc","sns":[],"c":"people"},":nail_care_tone3:":{"sn":":nail_care_tone3:","cp":"1f485-1f3fd","sns":[],"c":"people"},":nail_care_tone4:":{"sn":":nail_care_tone4:","cp":"1f485-1f3fe","sns":[],"c":"people"},":nail_care_tone5:":{"sn":":nail_care_tone5:","cp":"1f485-1f3ff","sns":[],"c":"people"},":adult:":{"sn":":adult:","cp":"1f9d1","sns":[],"c":"people"},":adult_tone1:":{"sn":":adult_tone1:","cp":"1f9d1-1f3fb","sns":[":adult_light_skin_tone:"],"c":"people"},":adult_tone2:":{"sn":":adult_tone2:","cp":"1f9d1-1f3fc","sns":[":adult_medium_light_skin_tone:"],"c":"people"},":adult_tone3:":{"sn":":adult_tone3:","cp":"1f9d1-1f3fd","sns":[":adult_medium_skin_tone:"],"c":"people"},":adult_tone4:":{"sn":":adult_tone4:","cp":"1f9d1-1f3fe","sns":[":adult_medium_dark_skin_tone:"],"c":"people"},":adult_tone5:":{"sn":":adult_tone5:","cp":"1f9d1-1f3ff","sns":[":adult_dark_skin_tone:"],"c":"people"},":angel:":{"sn":":angel:","cp":"1f47c","sns":[],"c":"people"},":angel_tone1:":{"sn":":angel_tone1:","cp":"1f47c-1f3fb","sns":[],"c":"people"},":angel_tone2:":{"sn":":angel_tone2:","cp":"1f47c-1f3fc","sns":[],"c":"people"},":angel_tone3:":{"sn":":angel_tone3:","cp":"1f47c-1f3fd","sns":[],"c":"people"},":angel_tone4:":{"sn":":angel_tone4:","cp":"1f47c-1f3fe","sns":[],"c":"people"},":angel_tone5:":{"sn":":angel_tone5:","cp":"1f47c-1f3ff","sns":[],"c":"people"},":baby:":{"sn":":baby:","cp":"1f476","sns":[],"c":"people"},":baby_tone1:":{"sn":":baby_tone1:","cp":"1f476-1f3fb","sns":[],"c":"people"},":baby_tone2:":{"sn":":baby_tone2:","cp":"1f476-1f3fc","sns":[],"c":"people"},":baby_tone3:":{"sn":":baby_tone3:","cp":"1f476-1f3fd","sns":[],"c":"people"},":baby_tone4:":{"sn":":baby_tone4:","cp":"1f476-1f3fe","sns":[],"c":"people"},":baby_tone5:":{"sn":":baby_tone5:","cp":"1f476-1f3ff","sns":[],"c":"people"},":bearded_person:":{"sn":":bearded_person:","cp":"1f9d4","sns":[],"c":"people"},":bearded_person_tone1:":{"sn":":bearded_person_tone1:","cp":"1f9d4-1f3fb","sns":[":bearded_person_light_skin_tone:"],"c":"people"},":bearded_person_tone2:":{"sn":":bearded_person_tone2:","cp":"1f9d4-1f3fc","sns":[":bearded_person_medium_light_skin_tone:"],"c":"people"},":bearded_person_tone3:":{"sn":":bearded_person_tone3:","cp":"1f9d4-1f3fd","sns":[":bearded_person_medium_skin_tone:"],"c":"people"},":bearded_person_tone4:":{"sn":":bearded_person_tone4:","cp":"1f9d4-1f3fe","sns":[":bearded_person_medium_dark_skin_tone:"],"c":"people"},":bearded_person_tone5:":{"sn":":bearded_person_tone5:","cp":"1f9d4-1f3ff","sns":[":bearded_person_dark_skin_tone:"],"c":"people"},":blond-haired_man:":{"sn":":blond-haired_man:","cp":"1f471-200d-2642-fe0f","sns":[],"c":"people"},":blond-haired_man_tone1:":{"sn":":blond-haired_man_tone1:","cp":"1f471-1f3fb-200d-2642-fe0f","sns":[":blond-haired_man_light_skin_tone:"],"c":"people"},":blond-haired_man_tone2:":{"sn":":blond-haired_man_tone2:","cp":"1f471-1f3fc-200d-2642-fe0f","sns":[":blond-haired_man_medium_light_skin_tone:"],"c":"people"},":blond-haired_man_tone3:":{"sn":":blond-haired_man_tone3:","cp":"1f471-1f3fd-200d-2642-fe0f","sns":[":blond-haired_man_medium_skin_tone:"],"c":"people"},":blond-haired_man_tone4:":{"sn":":blond-haired_man_tone4:","cp":"1f471-1f3fe-200d-2642-fe0f","sns":[":blond-haired_man_medium_dark_skin_tone:"],"c":"people"},":blond-haired_man_tone5:":{"sn":":blond-haired_man_tone5:","cp":"1f471-1f3ff-200d-2642-fe0f","sns":[":blond-haired_man_dark_skin_tone:"],"c":"people"},":blond-haired_woman:":{"sn":":blond-haired_woman:","cp":"1f471-200d-2640-fe0f","sns":[],"c":"people"},":blond-haired_woman_tone1:":{"sn":":blond-haired_woman_tone1:","cp":"1f471-1f3fb-200d-2640-fe0f","sns":[":blond-haired_woman_light_skin_tone:"],"c":"people"},":blond-haired_woman_tone2:":{"sn":":blond-haired_woman_tone2:","cp":"1f471-1f3fc-200d-2640-fe0f","sns":[":blond-haired_woman_medium_light_skin_tone:"],"c":"people"},":blond-haired_woman_tone3:":{"sn":":blond-haired_woman_tone3:","cp":"1f471-1f3fd-200d-2640-fe0f","sns":[":blond-haired_woman_medium_skin_tone:"],"c":"people"},":blond-haired_woman_tone4:":{"sn":":blond-haired_woman_tone4:","cp":"1f471-1f3fe-200d-2640-fe0f","sns":[":blond-haired_woman_medium_dark_skin_tone:"],"c":"people"},":blond-haired_woman_tone5:":{"sn":":blond-haired_woman_tone5:","cp":"1f471-1f3ff-200d-2640-fe0f","sns":[":blond-haired_woman_dark_skin_tone:"],"c":"people"},":blond_haired_person:":{"sn":":blond_haired_person:","cp":"1f471","sns":[":person_with_blond_hair:"],"c":"people"},":blond_haired_person_tone1:":{"sn":":blond_haired_person_tone1:","cp":"1f471-1f3fb","sns":[":person_with_blond_hair_tone1:"],"c":"people"},":blond_haired_person_tone2:":{"sn":":blond_haired_person_tone2:","cp":"1f471-1f3fc","sns":[":person_with_blond_hair_tone2:"],"c":"people"},":blond_haired_person_tone3:":{"sn":":blond_haired_person_tone3:","cp":"1f471-1f3fd","sns":[":person_with_blond_hair_tone3:"],"c":"people"},":blond_haired_person_tone4:":{"sn":":blond_haired_person_tone4:","cp":"1f471-1f3fe","sns":[":person_with_blond_hair_tone4:"],"c":"people"},":blond_haired_person_tone5:":{"sn":":blond_haired_person_tone5:","cp":"1f471-1f3ff","sns":[":person_with_blond_hair_tone5:"],"c":"people"},":boy:":{"sn":":boy:","cp":"1f466","sns":[],"c":"people"},":boy_tone1:":{"sn":":boy_tone1:","cp":"1f466-1f3fb","sns":[],"c":"people"},":boy_tone2:":{"sn":":boy_tone2:","cp":"1f466-1f3fc","sns":[],"c":"people"},":boy_tone3:":{"sn":":boy_tone3:","cp":"1f466-1f3fd","sns":[],"c":"people"},":boy_tone4:":{"sn":":boy_tone4:","cp":"1f466-1f3fe","sns":[],"c":"people"},":boy_tone5:":{"sn":":boy_tone5:","cp":"1f466-1f3ff","sns":[],"c":"people"},":brain:":{"sn":":brain:","cp":"1f9e0","sns":[],"c":"people"},":breast_feeding:":{"sn":":breast_feeding:","cp":"1f931","sns":[],"c":"people"},":breast_feeding_tone1:":{"sn":":breast_feeding_tone1:","cp":"1f931-1f3fb","sns":[":breast_feeding_light_skin_tone:"],"c":"people"},":breast_feeding_tone2:":{"sn":":breast_feeding_tone2:","cp":"1f931-1f3fc","sns":[":breast_feeding_medium_light_skin_tone:"],"c":"people"},":breast_feeding_tone3:":{"sn":":breast_feeding_tone3:","cp":"1f931-1f3fd","sns":[":breast_feeding_medium_skin_tone:"],"c":"people"},":breast_feeding_tone4:":{"sn":":breast_feeding_tone4:","cp":"1f931-1f3fe","sns":[":breast_feeding_medium_dark_skin_tone:"],"c":"people"},":breast_feeding_tone5:":{"sn":":breast_feeding_tone5:","cp":"1f931-1f3ff","sns":[":breast_feeding_dark_skin_tone:"],"c":"people"},":bride_with_veil:":{"sn":":bride_with_veil:","cp":"1f470","sns":[],"c":"people"},":bride_with_veil_tone1:":{"sn":":bride_with_veil_tone1:","cp":"1f470-1f3fb","sns":[],"c":"people"},":bride_with_veil_tone2:":{"sn":":bride_with_veil_tone2:","cp":"1f470-1f3fc","sns":[],"c":"people"},":bride_with_veil_tone3:":{"sn":":bride_with_veil_tone3:","cp":"1f470-1f3fd","sns":[],"c":"people"},":bride_with_veil_tone4:":{"sn":":bride_with_veil_tone4:","cp":"1f470-1f3fe","sns":[],"c":"people"},":bride_with_veil_tone5:":{"sn":":bride_with_veil_tone5:","cp":"1f470-1f3ff","sns":[],"c":"people"},":bust_in_silhouette:":{"sn":":bust_in_silhouette:","cp":"1f464","sns":[],"c":"people"},":busts_in_silhouette:":{"sn":":busts_in_silhouette:","cp":"1f465","sns":[],"c":"people"},":child:":{"sn":":child:","cp":"1f9d2","sns":[],"c":"people"},":child_tone1:":{"sn":":child_tone1:","cp":"1f9d2-1f3fb","sns":[":child_light_skin_tone:"],"c":"people"},":child_tone2:":{"sn":":child_tone2:","cp":"1f9d2-1f3fc","sns":[":child_medium_light_skin_tone:"],"c":"people"},":child_tone3:":{"sn":":child_tone3:","cp":"1f9d2-1f3fd","sns":[":child_medium_skin_tone:"],"c":"people"},":child_tone4:":{"sn":":child_tone4:","cp":"1f9d2-1f3fe","sns":[":child_medium_dark_skin_tone:"],"c":"people"},":child_tone5:":{"sn":":child_tone5:","cp":"1f9d2-1f3ff","sns":[":child_dark_skin_tone:"],"c":"people"},":construction_worker:":{"sn":":construction_worker:","cp":"1f477","sns":[],"c":"people"},":construction_worker_tone1:":{"sn":":construction_worker_tone1:","cp":"1f477-1f3fb","sns":[],"c":"people"},":construction_worker_tone2:":{"sn":":construction_worker_tone2:","cp":"1f477-1f3fc","sns":[],"c":"people"},":construction_worker_tone3:":{"sn":":construction_worker_tone3:","cp":"1f477-1f3fd","sns":[],"c":"people"},":construction_worker_tone4:":{"sn":":construction_worker_tone4:","cp":"1f477-1f3fe","sns":[],"c":"people"},":construction_worker_tone5:":{"sn":":construction_worker_tone5:","cp":"1f477-1f3ff","sns":[],"c":"people"},":couple:":{"sn":":couple:","cp":"1f46b","sns":[],"c":"people"},":couple_mm:":{"sn":":couple_mm:","cp":"1f468-200d-2764-fe0f-200d-1f468","sns":[":couple_with_heart_mm:"],"c":"people"},":couple_with_heart:":{"sn":":couple_with_heart:","cp":"1f491","sns":[],"c":"people"},":couple_with_heart_woman_man:":{"sn":":couple_with_heart_woman_man:","cp":"1f469-200d-2764-fe0f-200d-1f468","sns":[],"c":"people"},":couple_ww:":{"sn":":couple_ww:","cp":"1f469-200d-2764-fe0f-200d-1f469","sns":[":couple_with_heart_ww:"],"c":"people"},":couplekiss:":{"sn":":couplekiss:","cp":"1f48f","sns":[],"c":"people"},":dancer:":{"sn":":dancer:","cp":"1f483","sns":[],"c":"people"},":dancer_tone1:":{"sn":":dancer_tone1:","cp":"1f483-1f3fb","sns":[],"c":"people"},":dancer_tone2:":{"sn":":dancer_tone2:","cp":"1f483-1f3fc","sns":[],"c":"people"},":dancer_tone3:":{"sn":":dancer_tone3:","cp":"1f483-1f3fd","sns":[],"c":"people"},":dancer_tone4:":{"sn":":dancer_tone4:","cp":"1f483-1f3fe","sns":[],"c":"people"},":dancer_tone5:":{"sn":":dancer_tone5:","cp":"1f483-1f3ff","sns":[],"c":"people"},":detective:":{"sn":":detective:","cp":"1f575","sns":[":spy:",":sleuth_or_spy:"],"c":"people"},":detective_tone1:":{"sn":":detective_tone1:","cp":"1f575-1f3fb","sns":[":spy_tone1:",":sleuth_or_spy_tone1:"],"c":"people"},":detective_tone2:":{"sn":":detective_tone2:","cp":"1f575-1f3fc","sns":[":spy_tone2:",":sleuth_or_spy_tone2:"],"c":"people"},":detective_tone3:":{"sn":":detective_tone3:","cp":"1f575-1f3fd","sns":[":spy_tone3:",":sleuth_or_spy_tone3:"],"c":"people"},":detective_tone4:":{"sn":":detective_tone4:","cp":"1f575-1f3fe","sns":[":spy_tone4:",":sleuth_or_spy_tone4:"],"c":"people"},":detective_tone5:":{"sn":":detective_tone5:","cp":"1f575-1f3ff","sns":[":spy_tone5:",":sleuth_or_spy_tone5:"],"c":"people"},":ear:":{"sn":":ear:","cp":"1f442","sns":[],"c":"people"},":ear_tone1:":{"sn":":ear_tone1:","cp":"1f442-1f3fb","sns":[],"c":"people"},":ear_tone2:":{"sn":":ear_tone2:","cp":"1f442-1f3fc","sns":[],"c":"people"},":ear_tone3:":{"sn":":ear_tone3:","cp":"1f442-1f3fd","sns":[],"c":"people"},":ear_tone4:":{"sn":":ear_tone4:","cp":"1f442-1f3fe","sns":[],"c":"people"},":ear_tone5:":{"sn":":ear_tone5:","cp":"1f442-1f3ff","sns":[],"c":"people"},":elf:":{"sn":":elf:","cp":"1f9dd","sns":[],"c":"people"},":elf_tone1:":{"sn":":elf_tone1:","cp":"1f9dd-1f3fb","sns":[":elf_light_skin_tone:"],"c":"people"},":elf_tone2:":{"sn":":elf_tone2:","cp":"1f9dd-1f3fc","sns":[":elf_medium_light_skin_tone:"],"c":"people"},":elf_tone3:":{"sn":":elf_tone3:","cp":"1f9dd-1f3fd","sns":[":elf_medium_skin_tone:"],"c":"people"},":elf_tone4:":{"sn":":elf_tone4:","cp":"1f9dd-1f3fe","sns":[":elf_medium_dark_skin_tone:"],"c":"people"},":elf_tone5:":{"sn":":elf_tone5:","cp":"1f9dd-1f3ff","sns":[":elf_dark_skin_tone:"],"c":"people"},":eye:":{"sn":":eye:","cp":"1f441-fe0f","sns":[],"c":"people"},":eyes:":{"sn":":eyes:","cp":"1f440","sns":[],"c":"people"},":fairy:":{"sn":":fairy:","cp":"1f9da","sns":[],"c":"people"},":fairy_tone1:":{"sn":":fairy_tone1:","cp":"1f9da-1f3fb","sns":[":fairy_light_skin_tone:"],"c":"people"},":fairy_tone2:":{"sn":":fairy_tone2:","cp":"1f9da-1f3fc","sns":[":fairy_medium_light_skin_tone:"],"c":"people"},":fairy_tone3:":{"sn":":fairy_tone3:","cp":"1f9da-1f3fd","sns":[":fairy_medium_skin_tone:"],"c":"people"},":fairy_tone4:":{"sn":":fairy_tone4:","cp":"1f9da-1f3fe","sns":[":fairy_medium_dark_skin_tone:"],"c":"people"},":fairy_tone5:":{"sn":":fairy_tone5:","cp":"1f9da-1f3ff","sns":[":fairy_dark_skin_tone:"],"c":"people"},":family:":{"sn":":family:","cp":"1f46a","sns":[],"c":"people"},":family_man_boy:":{"sn":":family_man_boy:","cp":"1f468-200d-1f466","sns":[],"c":"people"},":family_man_boy_boy:":{"sn":":family_man_boy_boy:","cp":"1f468-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_man_girl:":{"sn":":family_man_girl:","cp":"1f468-200d-1f467","sns":[],"c":"people"},":family_man_girl_boy:":{"sn":":family_man_girl_boy:","cp":"1f468-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_man_girl_girl:":{"sn":":family_man_girl_girl:","cp":"1f468-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_man_woman_boy:":{"sn":":family_man_woman_boy:","cp":"1f468-200d-1f469-200d-1f466","sns":[],"c":"people"},":family_mmb:":{"sn":":family_mmb:","cp":"1f468-200d-1f468-200d-1f466","sns":[],"c":"people"},":family_mmbb:":{"sn":":family_mmbb:","cp":"1f468-200d-1f468-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_mmg:":{"sn":":family_mmg:","cp":"1f468-200d-1f468-200d-1f467","sns":[],"c":"people"},":family_mmgb:":{"sn":":family_mmgb:","cp":"1f468-200d-1f468-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_mmgg:":{"sn":":family_mmgg:","cp":"1f468-200d-1f468-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_mwbb:":{"sn":":family_mwbb:","cp":"1f468-200d-1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_mwg:":{"sn":":family_mwg:","cp":"1f468-200d-1f469-200d-1f467","sns":[],"c":"people"},":family_mwgb:":{"sn":":family_mwgb:","cp":"1f468-200d-1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_mwgg:":{"sn":":family_mwgg:","cp":"1f468-200d-1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_woman_boy:":{"sn":":family_woman_boy:","cp":"1f469-200d-1f466","sns":[],"c":"people"},":family_woman_boy_boy:":{"sn":":family_woman_boy_boy:","cp":"1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_woman_girl:":{"sn":":family_woman_girl:","cp":"1f469-200d-1f467","sns":[],"c":"people"},":family_woman_girl_boy:":{"sn":":family_woman_girl_boy:","cp":"1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_woman_girl_girl:":{"sn":":family_woman_girl_girl:","cp":"1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_wwb:":{"sn":":family_wwb:","cp":"1f469-200d-1f469-200d-1f466","sns":[],"c":"people"},":family_wwbb:":{"sn":":family_wwbb:","cp":"1f469-200d-1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_wwg:":{"sn":":family_wwg:","cp":"1f469-200d-1f469-200d-1f467","sns":[],"c":"people"},":family_wwgb:":{"sn":":family_wwgb:","cp":"1f469-200d-1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_wwgg:":{"sn":":family_wwgg:","cp":"1f469-200d-1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":footprints:":{"sn":":footprints:","cp":"1f463","sns":[],"c":"people"},":frowning2:":{"sn":":frowning2:","cp":"2639","sns":[":white_frowning_face:"],"c":"people"},":genie:":{"sn":":genie:","cp":"1f9de","sns":[],"c":"people"},":ghost:":{"sn":":ghost:","cp":"1f47b","sns":[],"c":"people"},":girl:":{"sn":":girl:","cp":"1f467","sns":[],"c":"people"},":girl_tone1:":{"sn":":girl_tone1:","cp":"1f467-1f3fb","sns":[],"c":"people"},":girl_tone2:":{"sn":":girl_tone2:","cp":"1f467-1f3fc","sns":[],"c":"people"},":girl_tone3:":{"sn":":girl_tone3:","cp":"1f467-1f3fd","sns":[],"c":"people"},":girl_tone4:":{"sn":":girl_tone4:","cp":"1f467-1f3fe","sns":[],"c":"people"},":girl_tone5:":{"sn":":girl_tone5:","cp":"1f467-1f3ff","sns":[],"c":"people"},":guard:":{"sn":":guard:","cp":"1f482","sns":[":guardsman:"],"c":"people"},":guard_tone1:":{"sn":":guard_tone1:","cp":"1f482-1f3fb","sns":[":guardsman_tone1:"],"c":"people"},":guard_tone2:":{"sn":":guard_tone2:","cp":"1f482-1f3fc","sns":[":guardsman_tone2:"],"c":"people"},":guard_tone3:":{"sn":":guard_tone3:","cp":"1f482-1f3fd","sns":[":guardsman_tone3:"],"c":"people"},":guard_tone4:":{"sn":":guard_tone4:","cp":"1f482-1f3fe","sns":[":guardsman_tone4:"],"c":"people"},":guard_tone5:":{"sn":":guard_tone5:","cp":"1f482-1f3ff","sns":[":guardsman_tone5:"],"c":"people"},":helmet_with_cross:":{"sn":":helmet_with_cross:","cp":"26d1","sns":[":helmet_with_white_cross:"],"c":"people"},":kiss:":{"sn":":kiss:","cp":"1f48b","sns":[],"c":"people"},":kiss_mm:":{"sn":":kiss_mm:","cp":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","sns":[":couplekiss_mm:"],"c":"people"},":kiss_woman_man:":{"sn":":kiss_woman_man:","cp":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","sns":[],"c":"people"},":kiss_ww:":{"sn":":kiss_ww:","cp":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","sns":[":couplekiss_ww:"],"c":"people"},":levitate:":{"sn":":levitate:","cp":"1f574","sns":[":man_in_business_suit_levitating:"],"c":"people"},":levitate_tone1:":{"sn":":levitate_tone1:","cp":"1f574-1f3fb","sns":[":man_in_business_suit_levitating_tone1:",":man_in_business_suit_levitating_light_skin_tone:"],"c":"people"},":levitate_tone2:":{"sn":":levitate_tone2:","cp":"1f574-1f3fc","sns":[":man_in_business_suit_levitating_tone2:",":man_in_business_suit_levitating_medium_light_skin_tone:"],"c":"people"},":levitate_tone3:":{"sn":":levitate_tone3:","cp":"1f574-1f3fd","sns":[":man_in_business_suit_levitating_tone3:",":man_in_business_suit_levitating_medium_skin_tone:"],"c":"people"},":levitate_tone4:":{"sn":":levitate_tone4:","cp":"1f574-1f3fe","sns":[":man_in_business_suit_levitating_tone4:",":man_in_business_suit_levitating_medium_dark_skin_tone:"],"c":"people"},":levitate_tone5:":{"sn":":levitate_tone5:","cp":"1f574-1f3ff","sns":[":man_in_business_suit_levitating_tone5:",":man_in_business_suit_levitating_dark_skin_tone:"],"c":"people"},":lips:":{"sn":":lips:","cp":"1f444","sns":[],"c":"people"},":mage:":{"sn":":mage:","cp":"1f9d9","sns":[],"c":"people"},":mage_tone1:":{"sn":":mage_tone1:","cp":"1f9d9-1f3fb","sns":[":mage_light_skin_tone:"],"c":"people"},":mage_tone2:":{"sn":":mage_tone2:","cp":"1f9d9-1f3fc","sns":[":mage_medium_light_skin_tone:"],"c":"people"},":mage_tone3:":{"sn":":mage_tone3:","cp":"1f9d9-1f3fd","sns":[":mage_medium_skin_tone:"],"c":"people"},":mage_tone4:":{"sn":":mage_tone4:","cp":"1f9d9-1f3fe","sns":[":mage_medium_dark_skin_tone:"],"c":"people"},":mage_tone5:":{"sn":":mage_tone5:","cp":"1f9d9-1f3ff","sns":[":mage_dark_skin_tone:"],"c":"people"},":man:":{"sn":":man:","cp":"1f468","sns":[],"c":"people"},":man_artist:":{"sn":":man_artist:","cp":"1f468-200d-1f3a8","sns":[],"c":"people"},":man_artist_tone1:":{"sn":":man_artist_tone1:","cp":"1f468-1f3fb-200d-1f3a8","sns":[":man_artist_light_skin_tone:"],"c":"people"},":man_artist_tone2:":{"sn":":man_artist_tone2:","cp":"1f468-1f3fc-200d-1f3a8","sns":[":man_artist_medium_light_skin_tone:"],"c":"people"},":man_artist_tone3:":{"sn":":man_artist_tone3:","cp":"1f468-1f3fd-200d-1f3a8","sns":[":man_artist_medium_skin_tone:"],"c":"people"},":man_artist_tone4:":{"sn":":man_artist_tone4:","cp":"1f468-1f3fe-200d-1f3a8","sns":[":man_artist_medium_dark_skin_tone:"],"c":"people"},":man_artist_tone5:":{"sn":":man_artist_tone5:","cp":"1f468-1f3ff-200d-1f3a8","sns":[":man_artist_dark_skin_tone:"],"c":"people"},":man_astronaut:":{"sn":":man_astronaut:","cp":"1f468-200d-1f680","sns":[],"c":"people"},":man_astronaut_tone1:":{"sn":":man_astronaut_tone1:","cp":"1f468-1f3fb-200d-1f680","sns":[":man_astronaut_light_skin_tone:"],"c":"people"},":man_astronaut_tone2:":{"sn":":man_astronaut_tone2:","cp":"1f468-1f3fc-200d-1f680","sns":[":man_astronaut_medium_light_skin_tone:"],"c":"people"},":man_astronaut_tone3:":{"sn":":man_astronaut_tone3:","cp":"1f468-1f3fd-200d-1f680","sns":[":man_astronaut_medium_skin_tone:"],"c":"people"},":man_astronaut_tone4:":{"sn":":man_astronaut_tone4:","cp":"1f468-1f3fe-200d-1f680","sns":[":man_astronaut_medium_dark_skin_tone:"],"c":"people"},":man_astronaut_tone5:":{"sn":":man_astronaut_tone5:","cp":"1f468-1f3ff-200d-1f680","sns":[":man_astronaut_dark_skin_tone:"],"c":"people"},":man_bowing:":{"sn":":man_bowing:","cp":"1f647-200d-2642-fe0f","sns":[],"c":"people"},":man_bowing_tone1:":{"sn":":man_bowing_tone1:","cp":"1f647-1f3fb-200d-2642-fe0f","sns":[":man_bowing_light_skin_tone:"],"c":"people"},":man_bowing_tone2:":{"sn":":man_bowing_tone2:","cp":"1f647-1f3fc-200d-2642-fe0f","sns":[":man_bowing_medium_light_skin_tone:"],"c":"people"},":man_bowing_tone3:":{"sn":":man_bowing_tone3:","cp":"1f647-1f3fd-200d-2642-fe0f","sns":[":man_bowing_medium_skin_tone:"],"c":"people"},":man_bowing_tone4:":{"sn":":man_bowing_tone4:","cp":"1f647-1f3fe-200d-2642-fe0f","sns":[":man_bowing_medium_dark_skin_tone:"],"c":"people"},":man_bowing_tone5:":{"sn":":man_bowing_tone5:","cp":"1f647-1f3ff-200d-2642-fe0f","sns":[":man_bowing_dark_skin_tone:"],"c":"people"},":man_construction_worker:":{"sn":":man_construction_worker:","cp":"1f477-200d-2642-fe0f","sns":[],"c":"people"},":man_construction_worker_tone1:":{"sn":":man_construction_worker_tone1:","cp":"1f477-1f3fb-200d-2642-fe0f","sns":[":man_construction_worker_light_skin_tone:"],"c":"people"},":man_construction_worker_tone2:":{"sn":":man_construction_worker_tone2:","cp":"1f477-1f3fc-200d-2642-fe0f","sns":[":man_construction_worker_medium_light_skin_tone:"],"c":"people"},":man_construction_worker_tone3:":{"sn":":man_construction_worker_tone3:","cp":"1f477-1f3fd-200d-2642-fe0f","sns":[":man_construction_worker_medium_skin_tone:"],"c":"people"},":man_construction_worker_tone4:":{"sn":":man_construction_worker_tone4:","cp":"1f477-1f3fe-200d-2642-fe0f","sns":[":man_construction_worker_medium_dark_skin_tone:"],"c":"people"},":man_construction_worker_tone5:":{"sn":":man_construction_worker_tone5:","cp":"1f477-1f3ff-200d-2642-fe0f","sns":[":man_construction_worker_dark_skin_tone:"],"c":"people"},":man_cook:":{"sn":":man_cook:","cp":"1f468-200d-1f373","sns":[],"c":"people"},":man_cook_tone1:":{"sn":":man_cook_tone1:","cp":"1f468-1f3fb-200d-1f373","sns":[":man_cook_light_skin_tone:"],"c":"people"},":man_cook_tone2:":{"sn":":man_cook_tone2:","cp":"1f468-1f3fc-200d-1f373","sns":[":man_cook_medium_light_skin_tone:"],"c":"people"},":man_cook_tone3:":{"sn":":man_cook_tone3:","cp":"1f468-1f3fd-200d-1f373","sns":[":man_cook_medium_skin_tone:"],"c":"people"},":man_cook_tone4:":{"sn":":man_cook_tone4:","cp":"1f468-1f3fe-200d-1f373","sns":[":man_cook_medium_dark_skin_tone:"],"c":"people"},":man_cook_tone5:":{"sn":":man_cook_tone5:","cp":"1f468-1f3ff-200d-1f373","sns":[":man_cook_dark_skin_tone:"],"c":"people"},":man_dancing:":{"sn":":man_dancing:","cp":"1f57a","sns":[":male_dancer:"],"c":"people"},":man_dancing_tone1:":{"sn":":man_dancing_tone1:","cp":"1f57a-1f3fb","sns":[":male_dancer_tone1:"],"c":"people"},":man_dancing_tone2:":{"sn":":man_dancing_tone2:","cp":"1f57a-1f3fc","sns":[":male_dancer_tone2:"],"c":"people"},":man_dancing_tone3:":{"sn":":man_dancing_tone3:","cp":"1f57a-1f3fd","sns":[":male_dancer_tone3:"],"c":"people"},":man_dancing_tone4:":{"sn":":man_dancing_tone4:","cp":"1f57a-1f3fe","sns":[":male_dancer_tone4:"],"c":"people"},":man_dancing_tone5:":{"sn":":man_dancing_tone5:","cp":"1f57a-1f3ff","sns":[":male_dancer_tone5:"],"c":"people"},":man_detective:":{"sn":":man_detective:","cp":"1f575-fe0f-200d-2642-fe0f","sns":[],"c":"people"},":man_detective_tone1:":{"sn":":man_detective_tone1:","cp":"1f575-1f3fb-200d-2642-fe0f","sns":[":man_detective_light_skin_tone:"],"c":"people"},":man_detective_tone2:":{"sn":":man_detective_tone2:","cp":"1f575-1f3fc-200d-2642-fe0f","sns":[":man_detective_medium_light_skin_tone:"],"c":"people"},":man_detective_tone3:":{"sn":":man_detective_tone3:","cp":"1f575-1f3fd-200d-2642-fe0f","sns":[":man_detective_medium_skin_tone:"],"c":"people"},":man_detective_tone4:":{"sn":":man_detective_tone4:","cp":"1f575-1f3fe-200d-2642-fe0f","sns":[":man_detective_medium_dark_skin_tone:"],"c":"people"},":man_detective_tone5:":{"sn":":man_detective_tone5:","cp":"1f575-1f3ff-200d-2642-fe0f","sns":[":man_detective_dark_skin_tone:"],"c":"people"},":man_elf:":{"sn":":man_elf:","cp":"1f9dd-200d-2642-fe0f","sns":[],"c":"people"},":man_elf_tone1:":{"sn":":man_elf_tone1:","cp":"1f9dd-1f3fb-200d-2642-fe0f","sns":[":man_elf_light_skin_tone:"],"c":"people"},":man_elf_tone2:":{"sn":":man_elf_tone2:","cp":"1f9dd-1f3fc-200d-2642-fe0f","sns":[":man_elf_medium_light_skin_tone:"],"c":"people"},":man_elf_tone3:":{"sn":":man_elf_tone3:","cp":"1f9dd-1f3fd-200d-2642-fe0f","sns":[":man_elf_medium_skin_tone:"],"c":"people"},":man_elf_tone4:":{"sn":":man_elf_tone4:","cp":"1f9dd-1f3fe-200d-2642-fe0f","sns":[":man_elf_medium_dark_skin_tone:"],"c":"people"},":man_elf_tone5:":{"sn":":man_elf_tone5:","cp":"1f9dd-1f3ff-200d-2642-fe0f","sns":[":man_elf_dark_skin_tone:"],"c":"people"},":man_facepalming:":{"sn":":man_facepalming:","cp":"1f926-200d-2642-fe0f","sns":[],"c":"people"},":man_facepalming_tone1:":{"sn":":man_facepalming_tone1:","cp":"1f926-1f3fb-200d-2642-fe0f","sns":[":man_facepalming_light_skin_tone:"],"c":"people"},":man_facepalming_tone2:":{"sn":":man_facepalming_tone2:","cp":"1f926-1f3fc-200d-2642-fe0f","sns":[":man_facepalming_medium_light_skin_tone:"],"c":"people"},":man_facepalming_tone3:":{"sn":":man_facepalming_tone3:","cp":"1f926-1f3fd-200d-2642-fe0f","sns":[":man_facepalming_medium_skin_tone:"],"c":"people"},":man_facepalming_tone4:":{"sn":":man_facepalming_tone4:","cp":"1f926-1f3fe-200d-2642-fe0f","sns":[":man_facepalming_medium_dark_skin_tone:"],"c":"people"},":man_facepalming_tone5:":{"sn":":man_facepalming_tone5:","cp":"1f926-1f3ff-200d-2642-fe0f","sns":[":man_facepalming_dark_skin_tone:"],"c":"people"},":man_factory_worker:":{"sn":":man_factory_worker:","cp":"1f468-200d-1f3ed","sns":[],"c":"people"},":man_factory_worker_tone1:":{"sn":":man_factory_worker_tone1:","cp":"1f468-1f3fb-200d-1f3ed","sns":[":man_factory_worker_light_skin_tone:"],"c":"people"},":man_factory_worker_tone2:":{"sn":":man_factory_worker_tone2:","cp":"1f468-1f3fc-200d-1f3ed","sns":[":man_factory_worker_medium_light_skin_tone:"],"c":"people"},":man_factory_worker_tone3:":{"sn":":man_factory_worker_tone3:","cp":"1f468-1f3fd-200d-1f3ed","sns":[":man_factory_worker_medium_skin_tone:"],"c":"people"},":man_factory_worker_tone4:":{"sn":":man_factory_worker_tone4:","cp":"1f468-1f3fe-200d-1f3ed","sns":[":man_factory_worker_medium_dark_skin_tone:"],"c":"people"},":man_factory_worker_tone5:":{"sn":":man_factory_worker_tone5:","cp":"1f468-1f3ff-200d-1f3ed","sns":[":man_factory_worker_dark_skin_tone:"],"c":"people"},":man_fairy:":{"sn":":man_fairy:","cp":"1f9da-200d-2642-fe0f","sns":[],"c":"people"},":man_fairy_tone1:":{"sn":":man_fairy_tone1:","cp":"1f9da-1f3fb-200d-2642-fe0f","sns":[":man_fairy_light_skin_tone:"],"c":"people"},":man_fairy_tone2:":{"sn":":man_fairy_tone2:","cp":"1f9da-1f3fc-200d-2642-fe0f","sns":[":man_fairy_medium_light_skin_tone:"],"c":"people"},":man_fairy_tone3:":{"sn":":man_fairy_tone3:","cp":"1f9da-1f3fd-200d-2642-fe0f","sns":[":man_fairy_medium_skin_tone:"],"c":"people"},":man_fairy_tone4:":{"sn":":man_fairy_tone4:","cp":"1f9da-1f3fe-200d-2642-fe0f","sns":[":man_fairy_medium_dark_skin_tone:"],"c":"people"},":man_fairy_tone5:":{"sn":":man_fairy_tone5:","cp":"1f9da-1f3ff-200d-2642-fe0f","sns":[":man_fairy_dark_skin_tone:"],"c":"people"},":man_farmer:":{"sn":":man_farmer:","cp":"1f468-200d-1f33e","sns":[],"c":"people"},":man_farmer_tone1:":{"sn":":man_farmer_tone1:","cp":"1f468-1f3fb-200d-1f33e","sns":[":man_farmer_light_skin_tone:"],"c":"people"},":man_farmer_tone2:":{"sn":":man_farmer_tone2:","cp":"1f468-1f3fc-200d-1f33e","sns":[":man_farmer_medium_light_skin_tone:"],"c":"people"},":man_farmer_tone3:":{"sn":":man_farmer_tone3:","cp":"1f468-1f3fd-200d-1f33e","sns":[":man_farmer_medium_skin_tone:"],"c":"people"},":man_farmer_tone4:":{"sn":":man_farmer_tone4:","cp":"1f468-1f3fe-200d-1f33e","sns":[":man_farmer_medium_dark_skin_tone:"],"c":"people"},":man_farmer_tone5:":{"sn":":man_farmer_tone5:","cp":"1f468-1f3ff-200d-1f33e","sns":[":man_farmer_dark_skin_tone:"],"c":"people"},":man_firefighter:":{"sn":":man_firefighter:","cp":"1f468-200d-1f692","sns":[],"c":"people"},":man_firefighter_tone1:":{"sn":":man_firefighter_tone1:","cp":"1f468-1f3fb-200d-1f692","sns":[":man_firefighter_light_skin_tone:"],"c":"people"},":man_firefighter_tone2:":{"sn":":man_firefighter_tone2:","cp":"1f468-1f3fc-200d-1f692","sns":[":man_firefighter_medium_light_skin_tone:"],"c":"people"},":man_firefighter_tone3:":{"sn":":man_firefighter_tone3:","cp":"1f468-1f3fd-200d-1f692","sns":[":man_firefighter_medium_skin_tone:"],"c":"people"},":man_firefighter_tone4:":{"sn":":man_firefighter_tone4:","cp":"1f468-1f3fe-200d-1f692","sns":[":man_firefighter_medium_dark_skin_tone:"],"c":"people"},":man_firefighter_tone5:":{"sn":":man_firefighter_tone5:","cp":"1f468-1f3ff-200d-1f692","sns":[":man_firefighter_dark_skin_tone:"],"c":"people"},":man_frowning:":{"sn":":man_frowning:","cp":"1f64d-200d-2642-fe0f","sns":[],"c":"people"},":man_frowning_tone1:":{"sn":":man_frowning_tone1:","cp":"1f64d-1f3fb-200d-2642-fe0f","sns":[":man_frowning_light_skin_tone:"],"c":"people"},":man_frowning_tone2:":{"sn":":man_frowning_tone2:","cp":"1f64d-1f3fc-200d-2642-fe0f","sns":[":man_frowning_medium_light_skin_tone:"],"c":"people"},":man_frowning_tone3:":{"sn":":man_frowning_tone3:","cp":"1f64d-1f3fd-200d-2642-fe0f","sns":[":man_frowning_medium_skin_tone:"],"c":"people"},":man_frowning_tone4:":{"sn":":man_frowning_tone4:","cp":"1f64d-1f3fe-200d-2642-fe0f","sns":[":man_frowning_medium_dark_skin_tone:"],"c":"people"},":man_frowning_tone5:":{"sn":":man_frowning_tone5:","cp":"1f64d-1f3ff-200d-2642-fe0f","sns":[":man_frowning_dark_skin_tone:"],"c":"people"},":man_genie:":{"sn":":man_genie:","cp":"1f9de-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_no:":{"sn":":man_gesturing_no:","cp":"1f645-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_no_tone1:":{"sn":":man_gesturing_no_tone1:","cp":"1f645-1f3fb-200d-2642-fe0f","sns":[":man_gesturing_no_light_skin_tone:"],"c":"people"},":man_gesturing_no_tone2:":{"sn":":man_gesturing_no_tone2:","cp":"1f645-1f3fc-200d-2642-fe0f","sns":[":man_gesturing_no_medium_light_skin_tone:"],"c":"people"},":man_gesturing_no_tone3:":{"sn":":man_gesturing_no_tone3:","cp":"1f645-1f3fd-200d-2642-fe0f","sns":[":man_gesturing_no_medium_skin_tone:"],"c":"people"},":man_gesturing_no_tone4:":{"sn":":man_gesturing_no_tone4:","cp":"1f645-1f3fe-200d-2642-fe0f","sns":[":man_gesturing_no_medium_dark_skin_tone:"],"c":"people"},":man_gesturing_no_tone5:":{"sn":":man_gesturing_no_tone5:","cp":"1f645-1f3ff-200d-2642-fe0f","sns":[":man_gesturing_no_dark_skin_tone:"],"c":"people"},":man_gesturing_ok:":{"sn":":man_gesturing_ok:","cp":"1f646-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_ok_tone1:":{"sn":":man_gesturing_ok_tone1:","cp":"1f646-1f3fb-200d-2642-fe0f","sns":[":man_gesturing_ok_light_skin_tone:"],"c":"people"},":man_gesturing_ok_tone2:":{"sn":":man_gesturing_ok_tone2:","cp":"1f646-1f3fc-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_light_skin_tone:"],"c":"people"},":man_gesturing_ok_tone3:":{"sn":":man_gesturing_ok_tone3:","cp":"1f646-1f3fd-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_skin_tone:"],"c":"people"},":man_gesturing_ok_tone4:":{"sn":":man_gesturing_ok_tone4:","cp":"1f646-1f3fe-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_dark_skin_tone:"],"c":"people"},":man_gesturing_ok_tone5:":{"sn":":man_gesturing_ok_tone5:","cp":"1f646-1f3ff-200d-2642-fe0f","sns":[":man_gesturing_ok_dark_skin_tone:"],"c":"people"},":man_getting_face_massage:":{"sn":":man_getting_face_massage:","cp":"1f486-200d-2642-fe0f","sns":[],"c":"people"},":man_getting_face_massage_tone1:":{"sn":":man_getting_face_massage_tone1:","cp":"1f486-1f3fb-200d-2642-fe0f","sns":[":man_getting_face_massage_light_skin_tone:"],"c":"people"},":man_getting_face_massage_tone2:":{"sn":":man_getting_face_massage_tone2:","cp":"1f486-1f3fc-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_light_skin_tone:"],"c":"people"},":man_getting_face_massage_tone3:":{"sn":":man_getting_face_massage_tone3:","cp":"1f486-1f3fd-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_skin_tone:"],"c":"people"},":man_getting_face_massage_tone4:":{"sn":":man_getting_face_massage_tone4:","cp":"1f486-1f3fe-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_dark_skin_tone:"],"c":"people"},":man_getting_face_massage_tone5:":{"sn":":man_getting_face_massage_tone5:","cp":"1f486-1f3ff-200d-2642-fe0f","sns":[":man_getting_face_massage_dark_skin_tone:"],"c":"people"},":man_getting_haircut:":{"sn":":man_getting_haircut:","cp":"1f487-200d-2642-fe0f","sns":[],"c":"people"},":man_getting_haircut_tone1:":{"sn":":man_getting_haircut_tone1:","cp":"1f487-1f3fb-200d-2642-fe0f","sns":[":man_getting_haircut_light_skin_tone:"],"c":"people"},":man_getting_haircut_tone2:":{"sn":":man_getting_haircut_tone2:","cp":"1f487-1f3fc-200d-2642-fe0f","sns":[":man_getting_haircut_medium_light_skin_tone:"],"c":"people"},":man_getting_haircut_tone3:":{"sn":":man_getting_haircut_tone3:","cp":"1f487-1f3fd-200d-2642-fe0f","sns":[":man_getting_haircut_medium_skin_tone:"],"c":"people"},":man_getting_haircut_tone4:":{"sn":":man_getting_haircut_tone4:","cp":"1f487-1f3fe-200d-2642-fe0f","sns":[":man_getting_haircut_medium_dark_skin_tone:"],"c":"people"},":man_getting_haircut_tone5:":{"sn":":man_getting_haircut_tone5:","cp":"1f487-1f3ff-200d-2642-fe0f","sns":[":man_getting_haircut_dark_skin_tone:"],"c":"people"},":man_guard:":{"sn":":man_guard:","cp":"1f482-200d-2642-fe0f","sns":[],"c":"people"},":man_guard_tone1:":{"sn":":man_guard_tone1:","cp":"1f482-1f3fb-200d-2642-fe0f","sns":[":man_guard_light_skin_tone:"],"c":"people"},":man_guard_tone2:":{"sn":":man_guard_tone2:","cp":"1f482-1f3fc-200d-2642-fe0f","sns":[":man_guard_medium_light_skin_tone:"],"c":"people"},":man_guard_tone3:":{"sn":":man_guard_tone3:","cp":"1f482-1f3fd-200d-2642-fe0f","sns":[":man_guard_medium_skin_tone:"],"c":"people"},":man_guard_tone4:":{"sn":":man_guard_tone4:","cp":"1f482-1f3fe-200d-2642-fe0f","sns":[":man_guard_medium_dark_skin_tone:"],"c":"people"},":man_guard_tone5:":{"sn":":man_guard_tone5:","cp":"1f482-1f3ff-200d-2642-fe0f","sns":[":man_guard_dark_skin_tone:"],"c":"people"},":man_health_worker:":{"sn":":man_health_worker:","cp":"1f468-200d-2695-fe0f","sns":[],"c":"people"},":man_health_worker_tone1:":{"sn":":man_health_worker_tone1:","cp":"1f468-1f3fb-200d-2695-fe0f","sns":[":man_health_worker_light_skin_tone:"],"c":"people"},":man_health_worker_tone2:":{"sn":":man_health_worker_tone2:","cp":"1f468-1f3fc-200d-2695-fe0f","sns":[":man_health_worker_medium_light_skin_tone:"],"c":"people"},":man_health_worker_tone3:":{"sn":":man_health_worker_tone3:","cp":"1f468-1f3fd-200d-2695-fe0f","sns":[":man_health_worker_medium_skin_tone:"],"c":"people"},":man_health_worker_tone4:":{"sn":":man_health_worker_tone4:","cp":"1f468-1f3fe-200d-2695-fe0f","sns":[":man_health_worker_medium_dark_skin_tone:"],"c":"people"},":man_health_worker_tone5:":{"sn":":man_health_worker_tone5:","cp":"1f468-1f3ff-200d-2695-fe0f","sns":[":man_health_worker_dark_skin_tone:"],"c":"people"},":man_in_steamy_room:":{"sn":":man_in_steamy_room:","cp":"1f9d6-200d-2642-fe0f","sns":[],"c":"people"},":man_in_steamy_room_tone1:":{"sn":":man_in_steamy_room_tone1:","cp":"1f9d6-1f3fb-200d-2642-fe0f","sns":[":man_in_steamy_room_light_skin_tone:"],"c":"people"},":man_in_steamy_room_tone2:":{"sn":":man_in_steamy_room_tone2:","cp":"1f9d6-1f3fc-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":man_in_steamy_room_tone3:":{"sn":":man_in_steamy_room_tone3:","cp":"1f9d6-1f3fd-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_skin_tone:"],"c":"people"},":man_in_steamy_room_tone4:":{"sn":":man_in_steamy_room_tone4:","cp":"1f9d6-1f3fe-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":man_in_steamy_room_tone5:":{"sn":":man_in_steamy_room_tone5:","cp":"1f9d6-1f3ff-200d-2642-fe0f","sns":[":man_in_steamy_room_dark_skin_tone:"],"c":"people"},":man_in_tuxedo:":{"sn":":man_in_tuxedo:","cp":"1f935","sns":[],"c":"people"},":man_in_tuxedo_tone1:":{"sn":":man_in_tuxedo_tone1:","cp":"1f935-1f3fb","sns":[":tuxedo_tone1:"],"c":"people"},":man_in_tuxedo_tone2:":{"sn":":man_in_tuxedo_tone2:","cp":"1f935-1f3fc","sns":[":tuxedo_tone2:"],"c":"people"},":man_in_tuxedo_tone3:":{"sn":":man_in_tuxedo_tone3:","cp":"1f935-1f3fd","sns":[":tuxedo_tone3:"],"c":"people"},":man_in_tuxedo_tone4:":{"sn":":man_in_tuxedo_tone4:","cp":"1f935-1f3fe","sns":[":tuxedo_tone4:"],"c":"people"},":man_in_tuxedo_tone5:":{"sn":":man_in_tuxedo_tone5:","cp":"1f935-1f3ff","sns":[":tuxedo_tone5:"],"c":"people"},":man_judge:":{"sn":":man_judge:","cp":"1f468-200d-2696-fe0f","sns":[],"c":"people"},":man_judge_tone1:":{"sn":":man_judge_tone1:","cp":"1f468-1f3fb-200d-2696-fe0f","sns":[":man_judge_light_skin_tone:"],"c":"people"},":man_judge_tone2:":{"sn":":man_judge_tone2:","cp":"1f468-1f3fc-200d-2696-fe0f","sns":[":man_judge_medium_light_skin_tone:"],"c":"people"},":man_judge_tone3:":{"sn":":man_judge_tone3:","cp":"1f468-1f3fd-200d-2696-fe0f","sns":[":man_judge_medium_skin_tone:"],"c":"people"},":man_judge_tone4:":{"sn":":man_judge_tone4:","cp":"1f468-1f3fe-200d-2696-fe0f","sns":[":man_judge_medium_dark_skin_tone:"],"c":"people"},":man_judge_tone5:":{"sn":":man_judge_tone5:","cp":"1f468-1f3ff-200d-2696-fe0f","sns":[":man_judge_dark_skin_tone:"],"c":"people"},":man_mage:":{"sn":":man_mage:","cp":"1f9d9-200d-2642-fe0f","sns":[],"c":"people"},":man_mage_tone1:":{"sn":":man_mage_tone1:","cp":"1f9d9-1f3fb-200d-2642-fe0f","sns":[":man_mage_light_skin_tone:"],"c":"people"},":man_mage_tone2:":{"sn":":man_mage_tone2:","cp":"1f9d9-1f3fc-200d-2642-fe0f","sns":[":man_mage_medium_light_skin_tone:"],"c":"people"},":man_mage_tone3:":{"sn":":man_mage_tone3:","cp":"1f9d9-1f3fd-200d-2642-fe0f","sns":[":man_mage_medium_skin_tone:"],"c":"people"},":man_mage_tone4:":{"sn":":man_mage_tone4:","cp":"1f9d9-1f3fe-200d-2642-fe0f","sns":[":man_mage_medium_dark_skin_tone:"],"c":"people"},":man_mage_tone5:":{"sn":":man_mage_tone5:","cp":"1f9d9-1f3ff-200d-2642-fe0f","sns":[":man_mage_dark_skin_tone:"],"c":"people"},":man_mechanic:":{"sn":":man_mechanic:","cp":"1f468-200d-1f527","sns":[],"c":"people"},":man_mechanic_tone1:":{"sn":":man_mechanic_tone1:","cp":"1f468-1f3fb-200d-1f527","sns":[":man_mechanic_light_skin_tone:"],"c":"people"},":man_mechanic_tone2:":{"sn":":man_mechanic_tone2:","cp":"1f468-1f3fc-200d-1f527","sns":[":man_mechanic_medium_light_skin_tone:"],"c":"people"},":man_mechanic_tone3:":{"sn":":man_mechanic_tone3:","cp":"1f468-1f3fd-200d-1f527","sns":[":man_mechanic_medium_skin_tone:"],"c":"people"},":man_mechanic_tone4:":{"sn":":man_mechanic_tone4:","cp":"1f468-1f3fe-200d-1f527","sns":[":man_mechanic_medium_dark_skin_tone:"],"c":"people"},":man_mechanic_tone5:":{"sn":":man_mechanic_tone5:","cp":"1f468-1f3ff-200d-1f527","sns":[":man_mechanic_dark_skin_tone:"],"c":"people"},":man_office_worker:":{"sn":":man_office_worker:","cp":"1f468-200d-1f4bc","sns":[],"c":"people"},":man_office_worker_tone1:":{"sn":":man_office_worker_tone1:","cp":"1f468-1f3fb-200d-1f4bc","sns":[":man_office_worker_light_skin_tone:"],"c":"people"},":man_office_worker_tone2:":{"sn":":man_office_worker_tone2:","cp":"1f468-1f3fc-200d-1f4bc","sns":[":man_office_worker_medium_light_skin_tone:"],"c":"people"},":man_office_worker_tone3:":{"sn":":man_office_worker_tone3:","cp":"1f468-1f3fd-200d-1f4bc","sns":[":man_office_worker_medium_skin_tone:"],"c":"people"},":man_office_worker_tone4:":{"sn":":man_office_worker_tone4:","cp":"1f468-1f3fe-200d-1f4bc","sns":[":man_office_worker_medium_dark_skin_tone:"],"c":"people"},":man_office_worker_tone5:":{"sn":":man_office_worker_tone5:","cp":"1f468-1f3ff-200d-1f4bc","sns":[":man_office_worker_dark_skin_tone:"],"c":"people"},":man_pilot:":{"sn":":man_pilot:","cp":"1f468-200d-2708-fe0f","sns":[],"c":"people"},":man_pilot_tone1:":{"sn":":man_pilot_tone1:","cp":"1f468-1f3fb-200d-2708-fe0f","sns":[":man_pilot_light_skin_tone:"],"c":"people"},":man_pilot_tone2:":{"sn":":man_pilot_tone2:","cp":"1f468-1f3fc-200d-2708-fe0f","sns":[":man_pilot_medium_light_skin_tone:"],"c":"people"},":man_pilot_tone3:":{"sn":":man_pilot_tone3:","cp":"1f468-1f3fd-200d-2708-fe0f","sns":[":man_pilot_medium_skin_tone:"],"c":"people"},":man_pilot_tone4:":{"sn":":man_pilot_tone4:","cp":"1f468-1f3fe-200d-2708-fe0f","sns":[":man_pilot_medium_dark_skin_tone:"],"c":"people"},":man_pilot_tone5:":{"sn":":man_pilot_tone5:","cp":"1f468-1f3ff-200d-2708-fe0f","sns":[":man_pilot_dark_skin_tone:"],"c":"people"},":man_police_officer:":{"sn":":man_police_officer:","cp":"1f46e-200d-2642-fe0f","sns":[],"c":"people"},":man_police_officer_tone1:":{"sn":":man_police_officer_tone1:","cp":"1f46e-1f3fb-200d-2642-fe0f","sns":[":man_police_officer_light_skin_tone:"],"c":"people"},":man_police_officer_tone2:":{"sn":":man_police_officer_tone2:","cp":"1f46e-1f3fc-200d-2642-fe0f","sns":[":man_police_officer_medium_light_skin_tone:"],"c":"people"},":man_police_officer_tone3:":{"sn":":man_police_officer_tone3:","cp":"1f46e-1f3fd-200d-2642-fe0f","sns":[":man_police_officer_medium_skin_tone:"],"c":"people"},":man_police_officer_tone4:":{"sn":":man_police_officer_tone4:","cp":"1f46e-1f3fe-200d-2642-fe0f","sns":[":man_police_officer_medium_dark_skin_tone:"],"c":"people"},":man_police_officer_tone5:":{"sn":":man_police_officer_tone5:","cp":"1f46e-1f3ff-200d-2642-fe0f","sns":[":man_police_officer_dark_skin_tone:"],"c":"people"},":man_pouting:":{"sn":":man_pouting:","cp":"1f64e-200d-2642-fe0f","sns":[],"c":"people"},":man_pouting_tone1:":{"sn":":man_pouting_tone1:","cp":"1f64e-1f3fb-200d-2642-fe0f","sns":[":man_pouting_light_skin_tone:"],"c":"people"},":man_pouting_tone2:":{"sn":":man_pouting_tone2:","cp":"1f64e-1f3fc-200d-2642-fe0f","sns":[":man_pouting_medium_light_skin_tone:"],"c":"people"},":man_pouting_tone3:":{"sn":":man_pouting_tone3:","cp":"1f64e-1f3fd-200d-2642-fe0f","sns":[":man_pouting_medium_skin_tone:"],"c":"people"},":man_pouting_tone4:":{"sn":":man_pouting_tone4:","cp":"1f64e-1f3fe-200d-2642-fe0f","sns":[":man_pouting_medium_dark_skin_tone:"],"c":"people"},":man_pouting_tone5:":{"sn":":man_pouting_tone5:","cp":"1f64e-1f3ff-200d-2642-fe0f","sns":[":man_pouting_dark_skin_tone:"],"c":"people"},":man_raising_hand:":{"sn":":man_raising_hand:","cp":"1f64b-200d-2642-fe0f","sns":[],"c":"people"},":man_raising_hand_tone1:":{"sn":":man_raising_hand_tone1:","cp":"1f64b-1f3fb-200d-2642-fe0f","sns":[":man_raising_hand_light_skin_tone:"],"c":"people"},":man_raising_hand_tone2:":{"sn":":man_raising_hand_tone2:","cp":"1f64b-1f3fc-200d-2642-fe0f","sns":[":man_raising_hand_medium_light_skin_tone:"],"c":"people"},":man_raising_hand_tone3:":{"sn":":man_raising_hand_tone3:","cp":"1f64b-1f3fd-200d-2642-fe0f","sns":[":man_raising_hand_medium_skin_tone:"],"c":"people"},":man_raising_hand_tone4:":{"sn":":man_raising_hand_tone4:","cp":"1f64b-1f3fe-200d-2642-fe0f","sns":[":man_raising_hand_medium_dark_skin_tone:"],"c":"people"},":man_raising_hand_tone5:":{"sn":":man_raising_hand_tone5:","cp":"1f64b-1f3ff-200d-2642-fe0f","sns":[":man_raising_hand_dark_skin_tone:"],"c":"people"},":man_running:":{"sn":":man_running:","cp":"1f3c3-200d-2642-fe0f","sns":[],"c":"people"},":man_running_tone1:":{"sn":":man_running_tone1:","cp":"1f3c3-1f3fb-200d-2642-fe0f","sns":[":man_running_light_skin_tone:"],"c":"people"},":man_running_tone2:":{"sn":":man_running_tone2:","cp":"1f3c3-1f3fc-200d-2642-fe0f","sns":[":man_running_medium_light_skin_tone:"],"c":"people"},":man_running_tone3:":{"sn":":man_running_tone3:","cp":"1f3c3-1f3fd-200d-2642-fe0f","sns":[":man_running_medium_skin_tone:"],"c":"people"},":man_running_tone4:":{"sn":":man_running_tone4:","cp":"1f3c3-1f3fe-200d-2642-fe0f","sns":[":man_running_medium_dark_skin_tone:"],"c":"people"},":man_running_tone5:":{"sn":":man_running_tone5:","cp":"1f3c3-1f3ff-200d-2642-fe0f","sns":[":man_running_dark_skin_tone:"],"c":"people"},":man_scientist:":{"sn":":man_scientist:","cp":"1f468-200d-1f52c","sns":[],"c":"people"},":man_scientist_tone1:":{"sn":":man_scientist_tone1:","cp":"1f468-1f3fb-200d-1f52c","sns":[":man_scientist_light_skin_tone:"],"c":"people"},":man_scientist_tone2:":{"sn":":man_scientist_tone2:","cp":"1f468-1f3fc-200d-1f52c","sns":[":man_scientist_medium_light_skin_tone:"],"c":"people"},":man_scientist_tone3:":{"sn":":man_scientist_tone3:","cp":"1f468-1f3fd-200d-1f52c","sns":[":man_scientist_medium_skin_tone:"],"c":"people"},":man_scientist_tone4:":{"sn":":man_scientist_tone4:","cp":"1f468-1f3fe-200d-1f52c","sns":[":man_scientist_medium_dark_skin_tone:"],"c":"people"},":man_scientist_tone5:":{"sn":":man_scientist_tone5:","cp":"1f468-1f3ff-200d-1f52c","sns":[":man_scientist_dark_skin_tone:"],"c":"people"},":man_shrugging:":{"sn":":man_shrugging:","cp":"1f937-200d-2642-fe0f","sns":[],"c":"people"},":man_shrugging_tone1:":{"sn":":man_shrugging_tone1:","cp":"1f937-1f3fb-200d-2642-fe0f","sns":[":man_shrugging_light_skin_tone:"],"c":"people"},":man_shrugging_tone2:":{"sn":":man_shrugging_tone2:","cp":"1f937-1f3fc-200d-2642-fe0f","sns":[":man_shrugging_medium_light_skin_tone:"],"c":"people"},":man_shrugging_tone3:":{"sn":":man_shrugging_tone3:","cp":"1f937-1f3fd-200d-2642-fe0f","sns":[":man_shrugging_medium_skin_tone:"],"c":"people"},":man_shrugging_tone4:":{"sn":":man_shrugging_tone4:","cp":"1f937-1f3fe-200d-2642-fe0f","sns":[":man_shrugging_medium_dark_skin_tone:"],"c":"people"},":man_shrugging_tone5:":{"sn":":man_shrugging_tone5:","cp":"1f937-1f3ff-200d-2642-fe0f","sns":[":man_shrugging_dark_skin_tone:"],"c":"people"},":man_singer:":{"sn":":man_singer:","cp":"1f468-200d-1f3a4","sns":[],"c":"people"},":man_singer_tone1:":{"sn":":man_singer_tone1:","cp":"1f468-1f3fb-200d-1f3a4","sns":[":man_singer_light_skin_tone:"],"c":"people"},":man_singer_tone2:":{"sn":":man_singer_tone2:","cp":"1f468-1f3fc-200d-1f3a4","sns":[":man_singer_medium_light_skin_tone:"],"c":"people"},":man_singer_tone3:":{"sn":":man_singer_tone3:","cp":"1f468-1f3fd-200d-1f3a4","sns":[":man_singer_medium_skin_tone:"],"c":"people"},":man_singer_tone4:":{"sn":":man_singer_tone4:","cp":"1f468-1f3fe-200d-1f3a4","sns":[":man_singer_medium_dark_skin_tone:"],"c":"people"},":man_singer_tone5:":{"sn":":man_singer_tone5:","cp":"1f468-1f3ff-200d-1f3a4","sns":[":man_singer_dark_skin_tone:"],"c":"people"},":man_student:":{"sn":":man_student:","cp":"1f468-200d-1f393","sns":[],"c":"people"},":man_student_tone1:":{"sn":":man_student_tone1:","cp":"1f468-1f3fb-200d-1f393","sns":[":man_student_light_skin_tone:"],"c":"people"},":man_student_tone2:":{"sn":":man_student_tone2:","cp":"1f468-1f3fc-200d-1f393","sns":[":man_student_medium_light_skin_tone:"],"c":"people"},":man_student_tone3:":{"sn":":man_student_tone3:","cp":"1f468-1f3fd-200d-1f393","sns":[":man_student_medium_skin_tone:"],"c":"people"},":man_student_tone4:":{"sn":":man_student_tone4:","cp":"1f468-1f3fe-200d-1f393","sns":[":man_student_medium_dark_skin_tone:"],"c":"people"},":man_student_tone5:":{"sn":":man_student_tone5:","cp":"1f468-1f3ff-200d-1f393","sns":[":man_student_dark_skin_tone:"],"c":"people"},":man_teacher:":{"sn":":man_teacher:","cp":"1f468-200d-1f3eb","sns":[],"c":"people"},":man_teacher_tone1:":{"sn":":man_teacher_tone1:","cp":"1f468-1f3fb-200d-1f3eb","sns":[":man_teacher_light_skin_tone:"],"c":"people"},":man_teacher_tone2:":{"sn":":man_teacher_tone2:","cp":"1f468-1f3fc-200d-1f3eb","sns":[":man_teacher_medium_light_skin_tone:"],"c":"people"},":man_teacher_tone3:":{"sn":":man_teacher_tone3:","cp":"1f468-1f3fd-200d-1f3eb","sns":[":man_teacher_medium_skin_tone:"],"c":"people"},":man_teacher_tone4:":{"sn":":man_teacher_tone4:","cp":"1f468-1f3fe-200d-1f3eb","sns":[":man_teacher_medium_dark_skin_tone:"],"c":"people"},":man_teacher_tone5:":{"sn":":man_teacher_tone5:","cp":"1f468-1f3ff-200d-1f3eb","sns":[":man_teacher_dark_skin_tone:"],"c":"people"},":man_technologist:":{"sn":":man_technologist:","cp":"1f468-200d-1f4bb","sns":[],"c":"people"},":man_technologist_tone1:":{"sn":":man_technologist_tone1:","cp":"1f468-1f3fb-200d-1f4bb","sns":[":man_technologist_light_skin_tone:"],"c":"people"},":man_technologist_tone2:":{"sn":":man_technologist_tone2:","cp":"1f468-1f3fc-200d-1f4bb","sns":[":man_technologist_medium_light_skin_tone:"],"c":"people"},":man_technologist_tone3:":{"sn":":man_technologist_tone3:","cp":"1f468-1f3fd-200d-1f4bb","sns":[":man_technologist_medium_skin_tone:"],"c":"people"},":man_technologist_tone4:":{"sn":":man_technologist_tone4:","cp":"1f468-1f3fe-200d-1f4bb","sns":[":man_technologist_medium_dark_skin_tone:"],"c":"people"},":man_technologist_tone5:":{"sn":":man_technologist_tone5:","cp":"1f468-1f3ff-200d-1f4bb","sns":[":man_technologist_dark_skin_tone:"],"c":"people"},":man_tipping_hand:":{"sn":":man_tipping_hand:","cp":"1f481-200d-2642-fe0f","sns":[],"c":"people"},":man_tipping_hand_tone1:":{"sn":":man_tipping_hand_tone1:","cp":"1f481-1f3fb-200d-2642-fe0f","sns":[":man_tipping_hand_light_skin_tone:"],"c":"people"},":man_tipping_hand_tone2:":{"sn":":man_tipping_hand_tone2:","cp":"1f481-1f3fc-200d-2642-fe0f","sns":[":man_tipping_hand_medium_light_skin_tone:"],"c":"people"},":man_tipping_hand_tone3:":{"sn":":man_tipping_hand_tone3:","cp":"1f481-1f3fd-200d-2642-fe0f","sns":[":man_tipping_hand_medium_skin_tone:"],"c":"people"},":man_tipping_hand_tone4:":{"sn":":man_tipping_hand_tone4:","cp":"1f481-1f3fe-200d-2642-fe0f","sns":[":man_tipping_hand_medium_dark_skin_tone:"],"c":"people"},":man_tipping_hand_tone5:":{"sn":":man_tipping_hand_tone5:","cp":"1f481-1f3ff-200d-2642-fe0f","sns":[":man_tipping_hand_dark_skin_tone:"],"c":"people"},":man_tone1:":{"sn":":man_tone1:","cp":"1f468-1f3fb","sns":[],"c":"people"},":man_tone2:":{"sn":":man_tone2:","cp":"1f468-1f3fc","sns":[],"c":"people"},":man_tone3:":{"sn":":man_tone3:","cp":"1f468-1f3fd","sns":[],"c":"people"},":man_tone4:":{"sn":":man_tone4:","cp":"1f468-1f3fe","sns":[],"c":"people"},":man_tone5:":{"sn":":man_tone5:","cp":"1f468-1f3ff","sns":[],"c":"people"},":man_vampire:":{"sn":":man_vampire:","cp":"1f9db-200d-2642-fe0f","sns":[],"c":"people"},":man_vampire_tone1:":{"sn":":man_vampire_tone1:","cp":"1f9db-1f3fb-200d-2642-fe0f","sns":[":man_vampire_light_skin_tone:"],"c":"people"},":man_vampire_tone2:":{"sn":":man_vampire_tone2:","cp":"1f9db-1f3fc-200d-2642-fe0f","sns":[":man_vampire_medium_light_skin_tone:"],"c":"people"},":man_vampire_tone3:":{"sn":":man_vampire_tone3:","cp":"1f9db-1f3fd-200d-2642-fe0f","sns":[":man_vampire_medium_skin_tone:"],"c":"people"},":man_vampire_tone4:":{"sn":":man_vampire_tone4:","cp":"1f9db-1f3fe-200d-2642-fe0f","sns":[":man_vampire_medium_dark_skin_tone:"],"c":"people"},":man_vampire_tone5:":{"sn":":man_vampire_tone5:","cp":"1f9db-1f3ff-200d-2642-fe0f","sns":[":man_vampire_dark_skin_tone:"],"c":"people"},":man_walking:":{"sn":":man_walking:","cp":"1f6b6-200d-2642-fe0f","sns":[],"c":"people"},":man_walking_tone1:":{"sn":":man_walking_tone1:","cp":"1f6b6-1f3fb-200d-2642-fe0f","sns":[":man_walking_light_skin_tone:"],"c":"people"},":man_walking_tone2:":{"sn":":man_walking_tone2:","cp":"1f6b6-1f3fc-200d-2642-fe0f","sns":[":man_walking_medium_light_skin_tone:"],"c":"people"},":man_walking_tone3:":{"sn":":man_walking_tone3:","cp":"1f6b6-1f3fd-200d-2642-fe0f","sns":[":man_walking_medium_skin_tone:"],"c":"people"},":man_walking_tone4:":{"sn":":man_walking_tone4:","cp":"1f6b6-1f3fe-200d-2642-fe0f","sns":[":man_walking_medium_dark_skin_tone:"],"c":"people"},":man_walking_tone5:":{"sn":":man_walking_tone5:","cp":"1f6b6-1f3ff-200d-2642-fe0f","sns":[":man_walking_dark_skin_tone:"],"c":"people"},":man_wearing_turban:":{"sn":":man_wearing_turban:","cp":"1f473-200d-2642-fe0f","sns":[],"c":"people"},":man_wearing_turban_tone1:":{"sn":":man_wearing_turban_tone1:","cp":"1f473-1f3fb-200d-2642-fe0f","sns":[":man_wearing_turban_light_skin_tone:"],"c":"people"},":man_wearing_turban_tone2:":{"sn":":man_wearing_turban_tone2:","cp":"1f473-1f3fc-200d-2642-fe0f","sns":[":man_wearing_turban_medium_light_skin_tone:"],"c":"people"},":man_wearing_turban_tone3:":{"sn":":man_wearing_turban_tone3:","cp":"1f473-1f3fd-200d-2642-fe0f","sns":[":man_wearing_turban_medium_skin_tone:"],"c":"people"},":man_wearing_turban_tone4:":{"sn":":man_wearing_turban_tone4:","cp":"1f473-1f3fe-200d-2642-fe0f","sns":[":man_wearing_turban_medium_dark_skin_tone:"],"c":"people"},":man_wearing_turban_tone5:":{"sn":":man_wearing_turban_tone5:","cp":"1f473-1f3ff-200d-2642-fe0f","sns":[":man_wearing_turban_dark_skin_tone:"],"c":"people"},":man_with_chinese_cap:":{"sn":":man_with_chinese_cap:","cp":"1f472","sns":[":man_with_gua_pi_mao:"],"c":"people"},":man_with_chinese_cap_tone1:":{"sn":":man_with_chinese_cap_tone1:","cp":"1f472-1f3fb","sns":[":man_with_gua_pi_mao_tone1:"],"c":"people"},":man_with_chinese_cap_tone2:":{"sn":":man_with_chinese_cap_tone2:","cp":"1f472-1f3fc","sns":[":man_with_gua_pi_mao_tone2:"],"c":"people"},":man_with_chinese_cap_tone3:":{"sn":":man_with_chinese_cap_tone3:","cp":"1f472-1f3fd","sns":[":man_with_gua_pi_mao_tone3:"],"c":"people"},":man_with_chinese_cap_tone4:":{"sn":":man_with_chinese_cap_tone4:","cp":"1f472-1f3fe","sns":[":man_with_gua_pi_mao_tone4:"],"c":"people"},":man_with_chinese_cap_tone5:":{"sn":":man_with_chinese_cap_tone5:","cp":"1f472-1f3ff","sns":[":man_with_gua_pi_mao_tone5:"],"c":"people"},":man_zombie:":{"sn":":man_zombie:","cp":"1f9df-200d-2642-fe0f","sns":[],"c":"people"},":men_with_bunny_ears_partying:":{"sn":":men_with_bunny_ears_partying:","cp":"1f46f-200d-2642-fe0f","sns":[],"c":"people"},":mermaid:":{"sn":":mermaid:","cp":"1f9dc-200d-2640-fe0f","sns":[],"c":"people"},":mermaid_tone1:":{"sn":":mermaid_tone1:","cp":"1f9dc-1f3fb-200d-2640-fe0f","sns":[":mermaid_light_skin_tone:"],"c":"people"},":mermaid_tone2:":{"sn":":mermaid_tone2:","cp":"1f9dc-1f3fc-200d-2640-fe0f","sns":[":mermaid_medium_light_skin_tone:"],"c":"people"},":mermaid_tone3:":{"sn":":mermaid_tone3:","cp":"1f9dc-1f3fd-200d-2640-fe0f","sns":[":mermaid_medium_skin_tone:"],"c":"people"},":mermaid_tone4:":{"sn":":mermaid_tone4:","cp":"1f9dc-1f3fe-200d-2640-fe0f","sns":[":mermaid_medium_dark_skin_tone:"],"c":"people"},":mermaid_tone5:":{"sn":":mermaid_tone5:","cp":"1f9dc-1f3ff-200d-2640-fe0f","sns":[":mermaid_dark_skin_tone:"],"c":"people"},":merman:":{"sn":":merman:","cp":"1f9dc-200d-2642-fe0f","sns":[],"c":"people"},":merman_tone1:":{"sn":":merman_tone1:","cp":"1f9dc-1f3fb-200d-2642-fe0f","sns":[":merman_light_skin_tone:"],"c":"people"},":merman_tone2:":{"sn":":merman_tone2:","cp":"1f9dc-1f3fc-200d-2642-fe0f","sns":[":merman_medium_light_skin_tone:"],"c":"people"},":merman_tone3:":{"sn":":merman_tone3:","cp":"1f9dc-1f3fd-200d-2642-fe0f","sns":[":merman_medium_skin_tone:"],"c":"people"},":merman_tone4:":{"sn":":merman_tone4:","cp":"1f9dc-1f3fe-200d-2642-fe0f","sns":[":merman_medium_dark_skin_tone:"],"c":"people"},":merman_tone5:":{"sn":":merman_tone5:","cp":"1f9dc-1f3ff-200d-2642-fe0f","sns":[":merman_dark_skin_tone:"],"c":"people"},":merperson:":{"sn":":merperson:","cp":"1f9dc","sns":[],"c":"people"},":merperson_tone1:":{"sn":":merperson_tone1:","cp":"1f9dc-1f3fb","sns":[":merperson_light_skin_tone:"],"c":"people"},":merperson_tone2:":{"sn":":merperson_tone2:","cp":"1f9dc-1f3fc","sns":[":merperson_medium_light_skin_tone:"],"c":"people"},":merperson_tone3:":{"sn":":merperson_tone3:","cp":"1f9dc-1f3fd","sns":[":merperson_medium_skin_tone:"],"c":"people"},":merperson_tone4:":{"sn":":merperson_tone4:","cp":"1f9dc-1f3fe","sns":[":merperson_medium_dark_skin_tone:"],"c":"people"},":merperson_tone5:":{"sn":":merperson_tone5:","cp":"1f9dc-1f3ff","sns":[":merperson_dark_skin_tone:"],"c":"people"},":santa:":{"sn":":santa:","cp":"1f385","sns":[],"c":"people"},":santa_tone1:":{"sn":":santa_tone1:","cp":"1f385-1f3fb","sns":[],"c":"people"},":santa_tone2:":{"sn":":santa_tone2:","cp":"1f385-1f3fc","sns":[],"c":"people"},":santa_tone3:":{"sn":":santa_tone3:","cp":"1f385-1f3fd","sns":[],"c":"people"},":santa_tone4:":{"sn":":santa_tone4:","cp":"1f385-1f3fe","sns":[],"c":"people"},":santa_tone5:":{"sn":":santa_tone5:","cp":"1f385-1f3ff","sns":[],"c":"people"},":mrs_claus:":{"sn":":mrs_claus:","cp":"1f936","sns":[":mother_christmas:"],"c":"people"},":mrs_claus_tone1:":{"sn":":mrs_claus_tone1:","cp":"1f936-1f3fb","sns":[":mother_christmas_tone1:"],"c":"people"},":mrs_claus_tone2:":{"sn":":mrs_claus_tone2:","cp":"1f936-1f3fc","sns":[":mother_christmas_tone2:"],"c":"people"},":mrs_claus_tone3:":{"sn":":mrs_claus_tone3:","cp":"1f936-1f3fd","sns":[":mother_christmas_tone3:"],"c":"people"},":mrs_claus_tone4:":{"sn":":mrs_claus_tone4:","cp":"1f936-1f3fe","sns":[":mother_christmas_tone4:"],"c":"people"},":mrs_claus_tone5:":{"sn":":mrs_claus_tone5:","cp":"1f936-1f3ff","sns":[":mother_christmas_tone5:"],"c":"people"},":nose:":{"sn":":nose:","cp":"1f443","sns":[],"c":"people"},":nose_tone1:":{"sn":":nose_tone1:","cp":"1f443-1f3fb","sns":[],"c":"people"},":nose_tone2:":{"sn":":nose_tone2:","cp":"1f443-1f3fc","sns":[],"c":"people"},":nose_tone3:":{"sn":":nose_tone3:","cp":"1f443-1f3fd","sns":[],"c":"people"},":nose_tone4:":{"sn":":nose_tone4:","cp":"1f443-1f3fe","sns":[],"c":"people"},":nose_tone5:":{"sn":":nose_tone5:","cp":"1f443-1f3ff","sns":[],"c":"people"},":older_adult:":{"sn":":older_adult:","cp":"1f9d3","sns":[],"c":"people"},":older_adult_tone1:":{"sn":":older_adult_tone1:","cp":"1f9d3-1f3fb","sns":[":older_adult_light_skin_tone:"],"c":"people"},":older_adult_tone2:":{"sn":":older_adult_tone2:","cp":"1f9d3-1f3fc","sns":[":older_adult_medium_light_skin_tone:"],"c":"people"},":older_adult_tone3:":{"sn":":older_adult_tone3:","cp":"1f9d3-1f3fd","sns":[":older_adult_medium_skin_tone:"],"c":"people"},":older_adult_tone4:":{"sn":":older_adult_tone4:","cp":"1f9d3-1f3fe","sns":[":older_adult_medium_dark_skin_tone:"],"c":"people"},":older_adult_tone5:":{"sn":":older_adult_tone5:","cp":"1f9d3-1f3ff","sns":[":older_adult_dark_skin_tone:"],"c":"people"},":older_man:":{"sn":":older_man:","cp":"1f474","sns":[],"c":"people"},":older_man_tone1:":{"sn":":older_man_tone1:","cp":"1f474-1f3fb","sns":[],"c":"people"},":older_man_tone2:":{"sn":":older_man_tone2:","cp":"1f474-1f3fc","sns":[],"c":"people"},":older_man_tone3:":{"sn":":older_man_tone3:","cp":"1f474-1f3fd","sns":[],"c":"people"},":older_man_tone4:":{"sn":":older_man_tone4:","cp":"1f474-1f3fe","sns":[],"c":"people"},":older_man_tone5:":{"sn":":older_man_tone5:","cp":"1f474-1f3ff","sns":[],"c":"people"},":older_woman:":{"sn":":older_woman:","cp":"1f475","sns":[":grandma:"],"c":"people"},":older_woman_tone1:":{"sn":":older_woman_tone1:","cp":"1f475-1f3fb","sns":[":grandma_tone1:"],"c":"people"},":older_woman_tone2:":{"sn":":older_woman_tone2:","cp":"1f475-1f3fc","sns":[":grandma_tone2:"],"c":"people"},":older_woman_tone3:":{"sn":":older_woman_tone3:","cp":"1f475-1f3fd","sns":[":grandma_tone3:"],"c":"people"},":older_woman_tone4:":{"sn":":older_woman_tone4:","cp":"1f475-1f3fe","sns":[":grandma_tone4:"],"c":"people"},":older_woman_tone5:":{"sn":":older_woman_tone5:","cp":"1f475-1f3ff","sns":[":grandma_tone5:"],"c":"people"},":people_with_bunny_ears_partying:":{"sn":":people_with_bunny_ears_partying:","cp":"1f46f","sns":[":dancers:"],"c":"people"},":person_bowing:":{"sn":":person_bowing:","cp":"1f647","sns":[":bow:"],"c":"people"},":person_bowing_tone1:":{"sn":":person_bowing_tone1:","cp":"1f647-1f3fb","sns":[":bow_tone1:"],"c":"people"},":person_bowing_tone2:":{"sn":":person_bowing_tone2:","cp":"1f647-1f3fc","sns":[":bow_tone2:"],"c":"people"},":person_bowing_tone3:":{"sn":":person_bowing_tone3:","cp":"1f647-1f3fd","sns":[":bow_tone3:"],"c":"people"},":person_bowing_tone4:":{"sn":":person_bowing_tone4:","cp":"1f647-1f3fe","sns":[":bow_tone4:"],"c":"people"},":person_bowing_tone5:":{"sn":":person_bowing_tone5:","cp":"1f647-1f3ff","sns":[":bow_tone5:"],"c":"people"},":person_facepalming:":{"sn":":person_facepalming:","cp":"1f926","sns":[":face_palm:",":facepalm:"],"c":"people"},":person_facepalming_tone1:":{"sn":":person_facepalming_tone1:","cp":"1f926-1f3fb","sns":[":face_palm_tone1:",":facepalm_tone1:"],"c":"people"},":person_facepalming_tone2:":{"sn":":person_facepalming_tone2:","cp":"1f926-1f3fc","sns":[":face_palm_tone2:",":facepalm_tone2:"],"c":"people"},":person_facepalming_tone3:":{"sn":":person_facepalming_tone3:","cp":"1f926-1f3fd","sns":[":face_palm_tone3:",":facepalm_tone3:"],"c":"people"},":person_facepalming_tone4:":{"sn":":person_facepalming_tone4:","cp":"1f926-1f3fe","sns":[":face_palm_tone4:",":facepalm_tone4:"],"c":"people"},":person_facepalming_tone5:":{"sn":":person_facepalming_tone5:","cp":"1f926-1f3ff","sns":[":face_palm_tone5:",":facepalm_tone5:"],"c":"people"},":person_frowning:":{"sn":":person_frowning:","cp":"1f64d","sns":[],"c":"people"},":person_frowning_tone1:":{"sn":":person_frowning_tone1:","cp":"1f64d-1f3fb","sns":[],"c":"people"},":person_frowning_tone2:":{"sn":":person_frowning_tone2:","cp":"1f64d-1f3fc","sns":[],"c":"people"},":person_frowning_tone3:":{"sn":":person_frowning_tone3:","cp":"1f64d-1f3fd","sns":[],"c":"people"},":person_frowning_tone4:":{"sn":":person_frowning_tone4:","cp":"1f64d-1f3fe","sns":[],"c":"people"},":person_frowning_tone5:":{"sn":":person_frowning_tone5:","cp":"1f64d-1f3ff","sns":[],"c":"people"},":person_gesturing_no:":{"sn":":person_gesturing_no:","cp":"1f645","sns":[":no_good:"],"c":"people"},":person_gesturing_no_tone1:":{"sn":":person_gesturing_no_tone1:","cp":"1f645-1f3fb","sns":[":no_good_tone1:"],"c":"people"},":person_gesturing_no_tone2:":{"sn":":person_gesturing_no_tone2:","cp":"1f645-1f3fc","sns":[":no_good_tone2:"],"c":"people"},":person_gesturing_no_tone3:":{"sn":":person_gesturing_no_tone3:","cp":"1f645-1f3fd","sns":[":no_good_tone3:"],"c":"people"},":person_gesturing_no_tone4:":{"sn":":person_gesturing_no_tone4:","cp":"1f645-1f3fe","sns":[":no_good_tone4:"],"c":"people"},":person_gesturing_no_tone5:":{"sn":":person_gesturing_no_tone5:","cp":"1f645-1f3ff","sns":[":no_good_tone5:"],"c":"people"},":person_gesturing_ok:":{"sn":":person_gesturing_ok:","cp":"1f646","sns":[":ok_woman:"],"c":"people"},":person_gesturing_ok_tone1:":{"sn":":person_gesturing_ok_tone1:","cp":"1f646-1f3fb","sns":[":ok_woman_tone1:"],"c":"people"},":person_gesturing_ok_tone2:":{"sn":":person_gesturing_ok_tone2:","cp":"1f646-1f3fc","sns":[":ok_woman_tone2:"],"c":"people"},":person_gesturing_ok_tone3:":{"sn":":person_gesturing_ok_tone3:","cp":"1f646-1f3fd","sns":[":ok_woman_tone3:"],"c":"people"},":person_gesturing_ok_tone4:":{"sn":":person_gesturing_ok_tone4:","cp":"1f646-1f3fe","sns":[":ok_woman_tone4:"],"c":"people"},":person_gesturing_ok_tone5:":{"sn":":person_gesturing_ok_tone5:","cp":"1f646-1f3ff","sns":[":ok_woman_tone5:"],"c":"people"},":person_getting_haircut:":{"sn":":person_getting_haircut:","cp":"1f487","sns":[":haircut:"],"c":"people"},":person_getting_haircut_tone1:":{"sn":":person_getting_haircut_tone1:","cp":"1f487-1f3fb","sns":[":haircut_tone1:"],"c":"people"},":person_getting_haircut_tone2:":{"sn":":person_getting_haircut_tone2:","cp":"1f487-1f3fc","sns":[":haircut_tone2:"],"c":"people"},":person_getting_haircut_tone3:":{"sn":":person_getting_haircut_tone3:","cp":"1f487-1f3fd","sns":[":haircut_tone3:"],"c":"people"},":person_getting_haircut_tone4:":{"sn":":person_getting_haircut_tone4:","cp":"1f487-1f3fe","sns":[":haircut_tone4:"],"c":"people"},":person_getting_haircut_tone5:":{"sn":":person_getting_haircut_tone5:","cp":"1f487-1f3ff","sns":[":haircut_tone5:"],"c":"people"},":person_getting_massage:":{"sn":":person_getting_massage:","cp":"1f486","sns":[":massage:"],"c":"people"},":person_getting_massage_tone1:":{"sn":":person_getting_massage_tone1:","cp":"1f486-1f3fb","sns":[":massage_tone1:"],"c":"people"},":person_getting_massage_tone2:":{"sn":":person_getting_massage_tone2:","cp":"1f486-1f3fc","sns":[":massage_tone2:"],"c":"people"},":person_getting_massage_tone3:":{"sn":":person_getting_massage_tone3:","cp":"1f486-1f3fd","sns":[":massage_tone3:"],"c":"people"},":person_getting_massage_tone4:":{"sn":":person_getting_massage_tone4:","cp":"1f486-1f3fe","sns":[":massage_tone4:"],"c":"people"},":person_getting_massage_tone5:":{"sn":":person_getting_massage_tone5:","cp":"1f486-1f3ff","sns":[":massage_tone5:"],"c":"people"},":person_in_steamy_room:":{"sn":":person_in_steamy_room:","cp":"1f9d6","sns":[],"c":"people"},":person_in_steamy_room_tone1:":{"sn":":person_in_steamy_room_tone1:","cp":"1f9d6-1f3fb","sns":[":person_in_steamy_room_light_skin_tone:"],"c":"people"},":person_in_steamy_room_tone2:":{"sn":":person_in_steamy_room_tone2:","cp":"1f9d6-1f3fc","sns":[":person_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":person_in_steamy_room_tone3:":{"sn":":person_in_steamy_room_tone3:","cp":"1f9d6-1f3fd","sns":[":person_in_steamy_room_medium_skin_tone:"],"c":"people"},":person_in_steamy_room_tone4:":{"sn":":person_in_steamy_room_tone4:","cp":"1f9d6-1f3fe","sns":[":person_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":person_in_steamy_room_tone5:":{"sn":":person_in_steamy_room_tone5:","cp":"1f9d6-1f3ff","sns":[":person_in_steamy_room_dark_skin_tone:"],"c":"people"},":person_pouting:":{"sn":":person_pouting:","cp":"1f64e","sns":[":person_with_pouting_face:"],"c":"people"},":person_pouting_tone1:":{"sn":":person_pouting_tone1:","cp":"1f64e-1f3fb","sns":[":person_with_pouting_face_tone1:"],"c":"people"},":person_pouting_tone2:":{"sn":":person_pouting_tone2:","cp":"1f64e-1f3fc","sns":[":person_with_pouting_face_tone2:"],"c":"people"},":person_pouting_tone3:":{"sn":":person_pouting_tone3:","cp":"1f64e-1f3fd","sns":[":person_with_pouting_face_tone3:"],"c":"people"},":person_pouting_tone4:":{"sn":":person_pouting_tone4:","cp":"1f64e-1f3fe","sns":[":person_with_pouting_face_tone4:"],"c":"people"},":person_pouting_tone5:":{"sn":":person_pouting_tone5:","cp":"1f64e-1f3ff","sns":[":person_with_pouting_face_tone5:"],"c":"people"},":person_raising_hand:":{"sn":":person_raising_hand:","cp":"1f64b","sns":[":raising_hand:"],"c":"people"},":person_raising_hand_tone1:":{"sn":":person_raising_hand_tone1:","cp":"1f64b-1f3fb","sns":[":raising_hand_tone1:"],"c":"people"},":person_raising_hand_tone2:":{"sn":":person_raising_hand_tone2:","cp":"1f64b-1f3fc","sns":[":raising_hand_tone2:"],"c":"people"},":person_raising_hand_tone3:":{"sn":":person_raising_hand_tone3:","cp":"1f64b-1f3fd","sns":[":raising_hand_tone3:"],"c":"people"},":person_raising_hand_tone4:":{"sn":":person_raising_hand_tone4:","cp":"1f64b-1f3fe","sns":[":raising_hand_tone4:"],"c":"people"},":person_raising_hand_tone5:":{"sn":":person_raising_hand_tone5:","cp":"1f64b-1f3ff","sns":[":raising_hand_tone5:"],"c":"people"},":person_running:":{"sn":":person_running:","cp":"1f3c3","sns":[":runner:"],"c":"people"},":person_running_tone1:":{"sn":":person_running_tone1:","cp":"1f3c3-1f3fb","sns":[":runner_tone1:"],"c":"people"},":person_running_tone2:":{"sn":":person_running_tone2:","cp":"1f3c3-1f3fc","sns":[":runner_tone2:"],"c":"people"},":person_running_tone3:":{"sn":":person_running_tone3:","cp":"1f3c3-1f3fd","sns":[":runner_tone3:"],"c":"people"},":person_running_tone4:":{"sn":":person_running_tone4:","cp":"1f3c3-1f3fe","sns":[":runner_tone4:"],"c":"people"},":person_running_tone5:":{"sn":":person_running_tone5:","cp":"1f3c3-1f3ff","sns":[":runner_tone5:"],"c":"people"},":person_shrugging:":{"sn":":person_shrugging:","cp":"1f937","sns":[":shrug:"],"c":"people"},":person_shrugging_tone1:":{"sn":":person_shrugging_tone1:","cp":"1f937-1f3fb","sns":[":shrug_tone1:"],"c":"people"},":person_shrugging_tone2:":{"sn":":person_shrugging_tone2:","cp":"1f937-1f3fc","sns":[":shrug_tone2:"],"c":"people"},":person_shrugging_tone3:":{"sn":":person_shrugging_tone3:","cp":"1f937-1f3fd","sns":[":shrug_tone3:"],"c":"people"},":person_shrugging_tone4:":{"sn":":person_shrugging_tone4:","cp":"1f937-1f3fe","sns":[":shrug_tone4:"],"c":"people"},":person_shrugging_tone5:":{"sn":":person_shrugging_tone5:","cp":"1f937-1f3ff","sns":[":shrug_tone5:"],"c":"people"},":person_tipping_hand:":{"sn":":person_tipping_hand:","cp":"1f481","sns":[":information_desk_person:"],"c":"people"},":person_tipping_hand_tone1:":{"sn":":person_tipping_hand_tone1:","cp":"1f481-1f3fb","sns":[":information_desk_person_tone1:"],"c":"people"},":person_tipping_hand_tone2:":{"sn":":person_tipping_hand_tone2:","cp":"1f481-1f3fc","sns":[":information_desk_person_tone2:"],"c":"people"},":person_tipping_hand_tone3:":{"sn":":person_tipping_hand_tone3:","cp":"1f481-1f3fd","sns":[":information_desk_person_tone3:"],"c":"people"},":person_tipping_hand_tone4:":{"sn":":person_tipping_hand_tone4:","cp":"1f481-1f3fe","sns":[":information_desk_person_tone4:"],"c":"people"},":person_tipping_hand_tone5:":{"sn":":person_tipping_hand_tone5:","cp":"1f481-1f3ff","sns":[":information_desk_person_tone5:"],"c":"people"},":person_walking:":{"sn":":person_walking:","cp":"1f6b6","sns":[":walking:"],"c":"people"},":person_walking_tone1:":{"sn":":person_walking_tone1:","cp":"1f6b6-1f3fb","sns":[":walking_tone1:"],"c":"people"},":person_walking_tone2:":{"sn":":person_walking_tone2:","cp":"1f6b6-1f3fc","sns":[":walking_tone2:"],"c":"people"},":person_walking_tone3:":{"sn":":person_walking_tone3:","cp":"1f6b6-1f3fd","sns":[":walking_tone3:"],"c":"people"},":person_walking_tone4:":{"sn":":person_walking_tone4:","cp":"1f6b6-1f3fe","sns":[":walking_tone4:"],"c":"people"},":person_walking_tone5:":{"sn":":person_walking_tone5:","cp":"1f6b6-1f3ff","sns":[":walking_tone5:"],"c":"people"},":person_wearing_turban:":{"sn":":person_wearing_turban:","cp":"1f473","sns":[":man_with_turban:"],"c":"people"},":person_wearing_turban_tone1:":{"sn":":person_wearing_turban_tone1:","cp":"1f473-1f3fb","sns":[":man_with_turban_tone1:"],"c":"people"},":person_wearing_turban_tone2:":{"sn":":person_wearing_turban_tone2:","cp":"1f473-1f3fc","sns":[":man_with_turban_tone2:"],"c":"people"},":person_wearing_turban_tone3:":{"sn":":person_wearing_turban_tone3:","cp":"1f473-1f3fd","sns":[":man_with_turban_tone3:"],"c":"people"},":person_wearing_turban_tone4:":{"sn":":person_wearing_turban_tone4:","cp":"1f473-1f3fe","sns":[":man_with_turban_tone4:"],"c":"people"},":person_wearing_turban_tone5:":{"sn":":person_wearing_turban_tone5:","cp":"1f473-1f3ff","sns":[":man_with_turban_tone5:"],"c":"people"},":police_officer:":{"sn":":police_officer:","cp":"1f46e","sns":[":cop:"],"c":"people"},":police_officer_tone1:":{"sn":":police_officer_tone1:","cp":"1f46e-1f3fb","sns":[":cop_tone1:"],"c":"people"},":police_officer_tone2:":{"sn":":police_officer_tone2:","cp":"1f46e-1f3fc","sns":[":cop_tone2:"],"c":"people"},":police_officer_tone3:":{"sn":":police_officer_tone3:","cp":"1f46e-1f3fd","sns":[":cop_tone3:"],"c":"people"},":police_officer_tone4:":{"sn":":police_officer_tone4:","cp":"1f46e-1f3fe","sns":[":cop_tone4:"],"c":"people"},":police_officer_tone5:":{"sn":":police_officer_tone5:","cp":"1f46e-1f3ff","sns":[":cop_tone5:"],"c":"people"},":pregnant_woman:":{"sn":":pregnant_woman:","cp":"1f930","sns":[":expecting_woman:"],"c":"people"},":pregnant_woman_tone1:":{"sn":":pregnant_woman_tone1:","cp":"1f930-1f3fb","sns":[":expecting_woman_tone1:"],"c":"people"},":pregnant_woman_tone2:":{"sn":":pregnant_woman_tone2:","cp":"1f930-1f3fc","sns":[":expecting_woman_tone2:"],"c":"people"},":pregnant_woman_tone3:":{"sn":":pregnant_woman_tone3:","cp":"1f930-1f3fd","sns":[":expecting_woman_tone3:"],"c":"people"},":pregnant_woman_tone4:":{"sn":":pregnant_woman_tone4:","cp":"1f930-1f3fe","sns":[":expecting_woman_tone4:"],"c":"people"},":pregnant_woman_tone5:":{"sn":":pregnant_woman_tone5:","cp":"1f930-1f3ff","sns":[":expecting_woman_tone5:"],"c":"people"},":prince:":{"sn":":prince:","cp":"1f934","sns":[],"c":"people"},":prince_tone1:":{"sn":":prince_tone1:","cp":"1f934-1f3fb","sns":[],"c":"people"},":prince_tone2:":{"sn":":prince_tone2:","cp":"1f934-1f3fc","sns":[],"c":"people"},":prince_tone3:":{"sn":":prince_tone3:","cp":"1f934-1f3fd","sns":[],"c":"people"},":prince_tone4:":{"sn":":prince_tone4:","cp":"1f934-1f3fe","sns":[],"c":"people"},":prince_tone5:":{"sn":":prince_tone5:","cp":"1f934-1f3ff","sns":[],"c":"people"},":princess:":{"sn":":princess:","cp":"1f478","sns":[],"c":"people"},":princess_tone1:":{"sn":":princess_tone1:","cp":"1f478-1f3fb","sns":[],"c":"people"},":princess_tone2:":{"sn":":princess_tone2:","cp":"1f478-1f3fc","sns":[],"c":"people"},":princess_tone3:":{"sn":":princess_tone3:","cp":"1f478-1f3fd","sns":[],"c":"people"},":princess_tone4:":{"sn":":princess_tone4:","cp":"1f478-1f3fe","sns":[],"c":"people"},":princess_tone5:":{"sn":":princess_tone5:","cp":"1f478-1f3ff","sns":[],"c":"people"},":relaxed:":{"sn":":relaxed:","cp":"263a","sns":[],"c":"people"},":space_invader:":{"sn":":space_invader:","cp":"1f47e","sns":[],"c":"people"},":speaking_head:":{"sn":":speaking_head:","cp":"1f5e3","sns":[":speaking_head_in_silhouette:"],"c":"people"},":tongue:":{"sn":":tongue:","cp":"1f445","sns":[],"c":"people"},":two_men_holding_hands:":{"sn":":two_men_holding_hands:","cp":"1f46c","sns":[],"c":"people"},":two_women_holding_hands:":{"sn":":two_women_holding_hands:","cp":"1f46d","sns":[],"c":"people"},":vampire:":{"sn":":vampire:","cp":"1f9db","sns":[],"c":"people"},":vampire_tone1:":{"sn":":vampire_tone1:","cp":"1f9db-1f3fb","sns":[":vampire_light_skin_tone:"],"c":"people"},":vampire_tone2:":{"sn":":vampire_tone2:","cp":"1f9db-1f3fc","sns":[":vampire_medium_light_skin_tone:"],"c":"people"},":vampire_tone3:":{"sn":":vampire_tone3:","cp":"1f9db-1f3fd","sns":[":vampire_medium_skin_tone:"],"c":"people"},":vampire_tone4:":{"sn":":vampire_tone4:","cp":"1f9db-1f3fe","sns":[":vampire_medium_dark_skin_tone:"],"c":"people"},":vampire_tone5:":{"sn":":vampire_tone5:","cp":"1f9db-1f3ff","sns":[":vampire_dark_skin_tone:"],"c":"people"},":woman:":{"sn":":woman:","cp":"1f469","sns":[],"c":"people"},":woman_artist:":{"sn":":woman_artist:","cp":"1f469-200d-1f3a8","sns":[],"c":"people"},":woman_artist_tone1:":{"sn":":woman_artist_tone1:","cp":"1f469-1f3fb-200d-1f3a8","sns":[":woman_artist_light_skin_tone:"],"c":"people"},":woman_artist_tone2:":{"sn":":woman_artist_tone2:","cp":"1f469-1f3fc-200d-1f3a8","sns":[":woman_artist_medium_light_skin_tone:"],"c":"people"},":woman_artist_tone3:":{"sn":":woman_artist_tone3:","cp":"1f469-1f3fd-200d-1f3a8","sns":[":woman_artist_medium_skin_tone:"],"c":"people"},":woman_artist_tone4:":{"sn":":woman_artist_tone4:","cp":"1f469-1f3fe-200d-1f3a8","sns":[":woman_artist_medium_dark_skin_tone:"],"c":"people"},":woman_artist_tone5:":{"sn":":woman_artist_tone5:","cp":"1f469-1f3ff-200d-1f3a8","sns":[":woman_artist_dark_skin_tone:"],"c":"people"},":woman_astronaut:":{"sn":":woman_astronaut:","cp":"1f469-200d-1f680","sns":[],"c":"people"},":woman_astronaut_tone1:":{"sn":":woman_astronaut_tone1:","cp":"1f469-1f3fb-200d-1f680","sns":[":woman_astronaut_light_skin_tone:"],"c":"people"},":woman_astronaut_tone2:":{"sn":":woman_astronaut_tone2:","cp":"1f469-1f3fc-200d-1f680","sns":[":woman_astronaut_medium_light_skin_tone:"],"c":"people"},":woman_astronaut_tone3:":{"sn":":woman_astronaut_tone3:","cp":"1f469-1f3fd-200d-1f680","sns":[":woman_astronaut_medium_skin_tone:"],"c":"people"},":woman_astronaut_tone4:":{"sn":":woman_astronaut_tone4:","cp":"1f469-1f3fe-200d-1f680","sns":[":woman_astronaut_medium_dark_skin_tone:"],"c":"people"},":woman_astronaut_tone5:":{"sn":":woman_astronaut_tone5:","cp":"1f469-1f3ff-200d-1f680","sns":[":woman_astronaut_dark_skin_tone:"],"c":"people"},":woman_bowing:":{"sn":":woman_bowing:","cp":"1f647-200d-2640-fe0f","sns":[],"c":"people"},":woman_bowing_tone1:":{"sn":":woman_bowing_tone1:","cp":"1f647-1f3fb-200d-2640-fe0f","sns":[":woman_bowing_light_skin_tone:"],"c":"people"},":woman_bowing_tone2:":{"sn":":woman_bowing_tone2:","cp":"1f647-1f3fc-200d-2640-fe0f","sns":[":woman_bowing_medium_light_skin_tone:"],"c":"people"},":woman_bowing_tone3:":{"sn":":woman_bowing_tone3:","cp":"1f647-1f3fd-200d-2640-fe0f","sns":[":woman_bowing_medium_skin_tone:"],"c":"people"},":woman_bowing_tone4:":{"sn":":woman_bowing_tone4:","cp":"1f647-1f3fe-200d-2640-fe0f","sns":[":woman_bowing_medium_dark_skin_tone:"],"c":"people"},":woman_bowing_tone5:":{"sn":":woman_bowing_tone5:","cp":"1f647-1f3ff-200d-2640-fe0f","sns":[":woman_bowing_dark_skin_tone:"],"c":"people"},":woman_construction_worker:":{"sn":":woman_construction_worker:","cp":"1f477-200d-2640-fe0f","sns":[],"c":"people"},":woman_construction_worker_tone1:":{"sn":":woman_construction_worker_tone1:","cp":"1f477-1f3fb-200d-2640-fe0f","sns":[":woman_construction_worker_light_skin_tone:"],"c":"people"},":woman_construction_worker_tone2:":{"sn":":woman_construction_worker_tone2:","cp":"1f477-1f3fc-200d-2640-fe0f","sns":[":woman_construction_worker_medium_light_skin_tone:"],"c":"people"},":woman_construction_worker_tone3:":{"sn":":woman_construction_worker_tone3:","cp":"1f477-1f3fd-200d-2640-fe0f","sns":[":woman_construction_worker_medium_skin_tone:"],"c":"people"},":woman_construction_worker_tone4:":{"sn":":woman_construction_worker_tone4:","cp":"1f477-1f3fe-200d-2640-fe0f","sns":[":woman_construction_worker_medium_dark_skin_tone:"],"c":"people"},":woman_construction_worker_tone5:":{"sn":":woman_construction_worker_tone5:","cp":"1f477-1f3ff-200d-2640-fe0f","sns":[":woman_construction_worker_dark_skin_tone:"],"c":"people"},":woman_cook:":{"sn":":woman_cook:","cp":"1f469-200d-1f373","sns":[],"c":"people"},":woman_cook_tone1:":{"sn":":woman_cook_tone1:","cp":"1f469-1f3fb-200d-1f373","sns":[":woman_cook_light_skin_tone:"],"c":"people"},":woman_cook_tone2:":{"sn":":woman_cook_tone2:","cp":"1f469-1f3fc-200d-1f373","sns":[":woman_cook_medium_light_skin_tone:"],"c":"people"},":woman_cook_tone3:":{"sn":":woman_cook_tone3:","cp":"1f469-1f3fd-200d-1f373","sns":[":woman_cook_medium_skin_tone:"],"c":"people"},":woman_cook_tone4:":{"sn":":woman_cook_tone4:","cp":"1f469-1f3fe-200d-1f373","sns":[":woman_cook_medium_dark_skin_tone:"],"c":"people"},":woman_cook_tone5:":{"sn":":woman_cook_tone5:","cp":"1f469-1f3ff-200d-1f373","sns":[":woman_cook_dark_skin_tone:"],"c":"people"},":woman_detective:":{"sn":":woman_detective:","cp":"1f575-fe0f-200d-2640-fe0f","sns":[],"c":"people"},":woman_detective_tone1:":{"sn":":woman_detective_tone1:","cp":"1f575-1f3fb-200d-2640-fe0f","sns":[":woman_detective_light_skin_tone:"],"c":"people"},":woman_detective_tone2:":{"sn":":woman_detective_tone2:","cp":"1f575-1f3fc-200d-2640-fe0f","sns":[":woman_detective_medium_light_skin_tone:"],"c":"people"},":woman_detective_tone3:":{"sn":":woman_detective_tone3:","cp":"1f575-1f3fd-200d-2640-fe0f","sns":[":woman_detective_medium_skin_tone:"],"c":"people"},":woman_detective_tone4:":{"sn":":woman_detective_tone4:","cp":"1f575-1f3fe-200d-2640-fe0f","sns":[":woman_detective_medium_dark_skin_tone:"],"c":"people"},":woman_detective_tone5:":{"sn":":woman_detective_tone5:","cp":"1f575-1f3ff-200d-2640-fe0f","sns":[":woman_detective_dark_skin_tone:"],"c":"people"},":woman_elf:":{"sn":":woman_elf:","cp":"1f9dd-200d-2640-fe0f","sns":[],"c":"people"},":woman_elf_tone1:":{"sn":":woman_elf_tone1:","cp":"1f9dd-1f3fb-200d-2640-fe0f","sns":[":woman_elf_light_skin_tone:"],"c":"people"},":woman_elf_tone2:":{"sn":":woman_elf_tone2:","cp":"1f9dd-1f3fc-200d-2640-fe0f","sns":[":woman_elf_medium_light_skin_tone:"],"c":"people"},":woman_elf_tone3:":{"sn":":woman_elf_tone3:","cp":"1f9dd-1f3fd-200d-2640-fe0f","sns":[":woman_elf_medium_skin_tone:"],"c":"people"},":woman_elf_tone4:":{"sn":":woman_elf_tone4:","cp":"1f9dd-1f3fe-200d-2640-fe0f","sns":[":woman_elf_medium_dark_skin_tone:"],"c":"people"},":woman_elf_tone5:":{"sn":":woman_elf_tone5:","cp":"1f9dd-1f3ff-200d-2640-fe0f","sns":[":woman_elf_dark_skin_tone:"],"c":"people"},":woman_facepalming:":{"sn":":woman_facepalming:","cp":"1f926-200d-2640-fe0f","sns":[],"c":"people"},":woman_facepalming_tone1:":{"sn":":woman_facepalming_tone1:","cp":"1f926-1f3fb-200d-2640-fe0f","sns":[":woman_facepalming_light_skin_tone:"],"c":"people"},":woman_facepalming_tone2:":{"sn":":woman_facepalming_tone2:","cp":"1f926-1f3fc-200d-2640-fe0f","sns":[":woman_facepalming_medium_light_skin_tone:"],"c":"people"},":woman_facepalming_tone3:":{"sn":":woman_facepalming_tone3:","cp":"1f926-1f3fd-200d-2640-fe0f","sns":[":woman_facepalming_medium_skin_tone:"],"c":"people"},":woman_facepalming_tone4:":{"sn":":woman_facepalming_tone4:","cp":"1f926-1f3fe-200d-2640-fe0f","sns":[":woman_facepalming_medium_dark_skin_tone:"],"c":"people"},":woman_facepalming_tone5:":{"sn":":woman_facepalming_tone5:","cp":"1f926-1f3ff-200d-2640-fe0f","sns":[":woman_facepalming_dark_skin_tone:"],"c":"people"},":woman_factory_worker:":{"sn":":woman_factory_worker:","cp":"1f469-200d-1f3ed","sns":[],"c":"people"},":woman_factory_worker_tone1:":{"sn":":woman_factory_worker_tone1:","cp":"1f469-1f3fb-200d-1f3ed","sns":[":woman_factory_worker_light_skin_tone:"],"c":"people"},":woman_factory_worker_tone2:":{"sn":":woman_factory_worker_tone2:","cp":"1f469-1f3fc-200d-1f3ed","sns":[":woman_factory_worker_medium_light_skin_tone:"],"c":"people"},":woman_factory_worker_tone3:":{"sn":":woman_factory_worker_tone3:","cp":"1f469-1f3fd-200d-1f3ed","sns":[":woman_factory_worker_medium_skin_tone:"],"c":"people"},":woman_factory_worker_tone4:":{"sn":":woman_factory_worker_tone4:","cp":"1f469-1f3fe-200d-1f3ed","sns":[":woman_factory_worker_medium_dark_skin_tone:"],"c":"people"},":woman_factory_worker_tone5:":{"sn":":woman_factory_worker_tone5:","cp":"1f469-1f3ff-200d-1f3ed","sns":[":woman_factory_worker_dark_skin_tone:"],"c":"people"},":woman_fairy:":{"sn":":woman_fairy:","cp":"1f9da-200d-2640-fe0f","sns":[],"c":"people"},":woman_fairy_tone1:":{"sn":":woman_fairy_tone1:","cp":"1f9da-1f3fb-200d-2640-fe0f","sns":[":woman_fairy_light_skin_tone:"],"c":"people"},":woman_fairy_tone2:":{"sn":":woman_fairy_tone2:","cp":"1f9da-1f3fc-200d-2640-fe0f","sns":[":woman_fairy_medium_light_skin_tone:"],"c":"people"},":woman_fairy_tone3:":{"sn":":woman_fairy_tone3:","cp":"1f9da-1f3fd-200d-2640-fe0f","sns":[":woman_fairy_medium_skin_tone:"],"c":"people"},":woman_fairy_tone4:":{"sn":":woman_fairy_tone4:","cp":"1f9da-1f3fe-200d-2640-fe0f","sns":[":woman_fairy_medium_dark_skin_tone:"],"c":"people"},":woman_fairy_tone5:":{"sn":":woman_fairy_tone5:","cp":"1f9da-1f3ff-200d-2640-fe0f","sns":[":woman_fairy_dark_skin_tone:"],"c":"people"},":woman_farmer:":{"sn":":woman_farmer:","cp":"1f469-200d-1f33e","sns":[],"c":"people"},":woman_farmer_tone1:":{"sn":":woman_farmer_tone1:","cp":"1f469-1f3fb-200d-1f33e","sns":[":woman_farmer_light_skin_tone:"],"c":"people"},":woman_farmer_tone2:":{"sn":":woman_farmer_tone2:","cp":"1f469-1f3fc-200d-1f33e","sns":[":woman_farmer_medium_light_skin_tone:"],"c":"people"},":woman_farmer_tone3:":{"sn":":woman_farmer_tone3:","cp":"1f469-1f3fd-200d-1f33e","sns":[":woman_farmer_medium_skin_tone:"],"c":"people"},":woman_farmer_tone4:":{"sn":":woman_farmer_tone4:","cp":"1f469-1f3fe-200d-1f33e","sns":[":woman_farmer_medium_dark_skin_tone:"],"c":"people"},":woman_farmer_tone5:":{"sn":":woman_farmer_tone5:","cp":"1f469-1f3ff-200d-1f33e","sns":[":woman_farmer_dark_skin_tone:"],"c":"people"},":woman_firefighter:":{"sn":":woman_firefighter:","cp":"1f469-200d-1f692","sns":[],"c":"people"},":woman_firefighter_tone1:":{"sn":":woman_firefighter_tone1:","cp":"1f469-1f3fb-200d-1f692","sns":[":woman_firefighter_light_skin_tone:"],"c":"people"},":woman_firefighter_tone2:":{"sn":":woman_firefighter_tone2:","cp":"1f469-1f3fc-200d-1f692","sns":[":woman_firefighter_medium_light_skin_tone:"],"c":"people"},":woman_firefighter_tone3:":{"sn":":woman_firefighter_tone3:","cp":"1f469-1f3fd-200d-1f692","sns":[":woman_firefighter_medium_skin_tone:"],"c":"people"},":woman_firefighter_tone4:":{"sn":":woman_firefighter_tone4:","cp":"1f469-1f3fe-200d-1f692","sns":[":woman_firefighter_medium_dark_skin_tone:"],"c":"people"},":woman_firefighter_tone5:":{"sn":":woman_firefighter_tone5:","cp":"1f469-1f3ff-200d-1f692","sns":[":woman_firefighter_dark_skin_tone:"],"c":"people"},":woman_frowning:":{"sn":":woman_frowning:","cp":"1f64d-200d-2640-fe0f","sns":[],"c":"people"},":woman_frowning_tone1:":{"sn":":woman_frowning_tone1:","cp":"1f64d-1f3fb-200d-2640-fe0f","sns":[":woman_frowning_light_skin_tone:"],"c":"people"},":woman_frowning_tone2:":{"sn":":woman_frowning_tone2:","cp":"1f64d-1f3fc-200d-2640-fe0f","sns":[":woman_frowning_medium_light_skin_tone:"],"c":"people"},":woman_frowning_tone3:":{"sn":":woman_frowning_tone3:","cp":"1f64d-1f3fd-200d-2640-fe0f","sns":[":woman_frowning_medium_skin_tone:"],"c":"people"},":woman_frowning_tone4:":{"sn":":woman_frowning_tone4:","cp":"1f64d-1f3fe-200d-2640-fe0f","sns":[":woman_frowning_medium_dark_skin_tone:"],"c":"people"},":woman_frowning_tone5:":{"sn":":woman_frowning_tone5:","cp":"1f64d-1f3ff-200d-2640-fe0f","sns":[":woman_frowning_dark_skin_tone:"],"c":"people"},":woman_genie:":{"sn":":woman_genie:","cp":"1f9de-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_no:":{"sn":":woman_gesturing_no:","cp":"1f645-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_no_tone1:":{"sn":":woman_gesturing_no_tone1:","cp":"1f645-1f3fb-200d-2640-fe0f","sns":[":woman_gesturing_no_light_skin_tone:"],"c":"people"},":woman_gesturing_no_tone2:":{"sn":":woman_gesturing_no_tone2:","cp":"1f645-1f3fc-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_light_skin_tone:"],"c":"people"},":woman_gesturing_no_tone3:":{"sn":":woman_gesturing_no_tone3:","cp":"1f645-1f3fd-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_skin_tone:"],"c":"people"},":woman_gesturing_no_tone4:":{"sn":":woman_gesturing_no_tone4:","cp":"1f645-1f3fe-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_dark_skin_tone:"],"c":"people"},":woman_gesturing_no_tone5:":{"sn":":woman_gesturing_no_tone5:","cp":"1f645-1f3ff-200d-2640-fe0f","sns":[":woman_gesturing_no_dark_skin_tone:"],"c":"people"},":woman_gesturing_ok:":{"sn":":woman_gesturing_ok:","cp":"1f646-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_ok_tone1:":{"sn":":woman_gesturing_ok_tone1:","cp":"1f646-1f3fb-200d-2640-fe0f","sns":[":woman_gesturing_ok_light_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone2:":{"sn":":woman_gesturing_ok_tone2:","cp":"1f646-1f3fc-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_light_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone3:":{"sn":":woman_gesturing_ok_tone3:","cp":"1f646-1f3fd-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone4:":{"sn":":woman_gesturing_ok_tone4:","cp":"1f646-1f3fe-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_dark_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone5:":{"sn":":woman_gesturing_ok_tone5:","cp":"1f646-1f3ff-200d-2640-fe0f","sns":[":woman_gesturing_ok_dark_skin_tone:"],"c":"people"},":woman_getting_face_massage:":{"sn":":woman_getting_face_massage:","cp":"1f486-200d-2640-fe0f","sns":[],"c":"people"},":woman_getting_face_massage_tone1:":{"sn":":woman_getting_face_massage_tone1:","cp":"1f486-1f3fb-200d-2640-fe0f","sns":[":woman_getting_face_massage_light_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone2:":{"sn":":woman_getting_face_massage_tone2:","cp":"1f486-1f3fc-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_light_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone3:":{"sn":":woman_getting_face_massage_tone3:","cp":"1f486-1f3fd-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone4:":{"sn":":woman_getting_face_massage_tone4:","cp":"1f486-1f3fe-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_dark_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone5:":{"sn":":woman_getting_face_massage_tone5:","cp":"1f486-1f3ff-200d-2640-fe0f","sns":[":woman_getting_face_massage_dark_skin_tone:"],"c":"people"},":woman_getting_haircut:":{"sn":":woman_getting_haircut:","cp":"1f487-200d-2640-fe0f","sns":[],"c":"people"},":woman_getting_haircut_tone1:":{"sn":":woman_getting_haircut_tone1:","cp":"1f487-1f3fb-200d-2640-fe0f","sns":[":woman_getting_haircut_light_skin_tone:"],"c":"people"},":woman_getting_haircut_tone2:":{"sn":":woman_getting_haircut_tone2:","cp":"1f487-1f3fc-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_light_skin_tone:"],"c":"people"},":woman_getting_haircut_tone3:":{"sn":":woman_getting_haircut_tone3:","cp":"1f487-1f3fd-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_skin_tone:"],"c":"people"},":woman_getting_haircut_tone4:":{"sn":":woman_getting_haircut_tone4:","cp":"1f487-1f3fe-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_dark_skin_tone:"],"c":"people"},":woman_getting_haircut_tone5:":{"sn":":woman_getting_haircut_tone5:","cp":"1f487-1f3ff-200d-2640-fe0f","sns":[":woman_getting_haircut_dark_skin_tone:"],"c":"people"},":woman_guard:":{"sn":":woman_guard:","cp":"1f482-200d-2640-fe0f","sns":[],"c":"people"},":woman_guard_tone1:":{"sn":":woman_guard_tone1:","cp":"1f482-1f3fb-200d-2640-fe0f","sns":[":woman_guard_light_skin_tone:"],"c":"people"},":woman_guard_tone2:":{"sn":":woman_guard_tone2:","cp":"1f482-1f3fc-200d-2640-fe0f","sns":[":woman_guard_medium_light_skin_tone:"],"c":"people"},":woman_guard_tone3:":{"sn":":woman_guard_tone3:","cp":"1f482-1f3fd-200d-2640-fe0f","sns":[":woman_guard_medium_skin_tone:"],"c":"people"},":woman_guard_tone4:":{"sn":":woman_guard_tone4:","cp":"1f482-1f3fe-200d-2640-fe0f","sns":[":woman_guard_medium_dark_skin_tone:"],"c":"people"},":woman_guard_tone5:":{"sn":":woman_guard_tone5:","cp":"1f482-1f3ff-200d-2640-fe0f","sns":[":woman_guard_dark_skin_tone:"],"c":"people"},":woman_health_worker:":{"sn":":woman_health_worker:","cp":"1f469-200d-2695-fe0f","sns":[],"c":"people"},":woman_health_worker_tone1:":{"sn":":woman_health_worker_tone1:","cp":"1f469-1f3fb-200d-2695-fe0f","sns":[":woman_health_worker_light_skin_tone:"],"c":"people"},":woman_health_worker_tone2:":{"sn":":woman_health_worker_tone2:","cp":"1f469-1f3fc-200d-2695-fe0f","sns":[":woman_health_worker_medium_light_skin_tone:"],"c":"people"},":woman_health_worker_tone3:":{"sn":":woman_health_worker_tone3:","cp":"1f469-1f3fd-200d-2695-fe0f","sns":[":woman_health_worker_medium_skin_tone:"],"c":"people"},":woman_health_worker_tone4:":{"sn":":woman_health_worker_tone4:","cp":"1f469-1f3fe-200d-2695-fe0f","sns":[":woman_health_worker_medium_dark_skin_tone:"],"c":"people"},":woman_health_worker_tone5:":{"sn":":woman_health_worker_tone5:","cp":"1f469-1f3ff-200d-2695-fe0f","sns":[":woman_health_worker_dark_skin_tone:"],"c":"people"},":woman_in_steamy_room:":{"sn":":woman_in_steamy_room:","cp":"1f9d6-200d-2640-fe0f","sns":[],"c":"people"},":woman_in_steamy_room_tone1:":{"sn":":woman_in_steamy_room_tone1:","cp":"1f9d6-1f3fb-200d-2640-fe0f","sns":[":woman_in_steamy_room_light_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone2:":{"sn":":woman_in_steamy_room_tone2:","cp":"1f9d6-1f3fc-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone3:":{"sn":":woman_in_steamy_room_tone3:","cp":"1f9d6-1f3fd-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone4:":{"sn":":woman_in_steamy_room_tone4:","cp":"1f9d6-1f3fe-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone5:":{"sn":":woman_in_steamy_room_tone5:","cp":"1f9d6-1f3ff-200d-2640-fe0f","sns":[":woman_in_steamy_room_dark_skin_tone:"],"c":"people"},":woman_judge:":{"sn":":woman_judge:","cp":"1f469-200d-2696-fe0f","sns":[],"c":"people"},":woman_judge_tone1:":{"sn":":woman_judge_tone1:","cp":"1f469-1f3fb-200d-2696-fe0f","sns":[":woman_judge_light_skin_tone:"],"c":"people"},":woman_judge_tone2:":{"sn":":woman_judge_tone2:","cp":"1f469-1f3fc-200d-2696-fe0f","sns":[":woman_judge_medium_light_skin_tone:"],"c":"people"},":woman_judge_tone3:":{"sn":":woman_judge_tone3:","cp":"1f469-1f3fd-200d-2696-fe0f","sns":[":woman_judge_medium_skin_tone:"],"c":"people"},":woman_judge_tone4:":{"sn":":woman_judge_tone4:","cp":"1f469-1f3fe-200d-2696-fe0f","sns":[":woman_judge_medium_dark_skin_tone:"],"c":"people"},":woman_judge_tone5:":{"sn":":woman_judge_tone5:","cp":"1f469-1f3ff-200d-2696-fe0f","sns":[":woman_judge_dark_skin_tone:"],"c":"people"},":woman_mage:":{"sn":":woman_mage:","cp":"1f9d9-200d-2640-fe0f","sns":[],"c":"people"},":woman_mage_tone1:":{"sn":":woman_mage_tone1:","cp":"1f9d9-1f3fb-200d-2640-fe0f","sns":[":woman_mage_light_skin_tone:"],"c":"people"},":woman_mage_tone2:":{"sn":":woman_mage_tone2:","cp":"1f9d9-1f3fc-200d-2640-fe0f","sns":[":woman_mage_medium_light_skin_tone:"],"c":"people"},":woman_mage_tone3:":{"sn":":woman_mage_tone3:","cp":"1f9d9-1f3fd-200d-2640-fe0f","sns":[":woman_mage_medium_skin_tone:"],"c":"people"},":woman_mage_tone4:":{"sn":":woman_mage_tone4:","cp":"1f9d9-1f3fe-200d-2640-fe0f","sns":[":woman_mage_medium_dark_skin_tone:"],"c":"people"},":woman_mage_tone5:":{"sn":":woman_mage_tone5:","cp":"1f9d9-1f3ff-200d-2640-fe0f","sns":[":woman_mage_dark_skin_tone:"],"c":"people"},":woman_mechanic:":{"sn":":woman_mechanic:","cp":"1f469-200d-1f527","sns":[],"c":"people"},":woman_mechanic_tone1:":{"sn":":woman_mechanic_tone1:","cp":"1f469-1f3fb-200d-1f527","sns":[":woman_mechanic_light_skin_tone:"],"c":"people"},":woman_mechanic_tone2:":{"sn":":woman_mechanic_tone2:","cp":"1f469-1f3fc-200d-1f527","sns":[":woman_mechanic_medium_light_skin_tone:"],"c":"people"},":woman_mechanic_tone3:":{"sn":":woman_mechanic_tone3:","cp":"1f469-1f3fd-200d-1f527","sns":[":woman_mechanic_medium_skin_tone:"],"c":"people"},":woman_mechanic_tone4:":{"sn":":woman_mechanic_tone4:","cp":"1f469-1f3fe-200d-1f527","sns":[":woman_mechanic_medium_dark_skin_tone:"],"c":"people"},":woman_mechanic_tone5:":{"sn":":woman_mechanic_tone5:","cp":"1f469-1f3ff-200d-1f527","sns":[":woman_mechanic_dark_skin_tone:"],"c":"people"},":woman_office_worker:":{"sn":":woman_office_worker:","cp":"1f469-200d-1f4bc","sns":[],"c":"people"},":woman_office_worker_tone1:":{"sn":":woman_office_worker_tone1:","cp":"1f469-1f3fb-200d-1f4bc","sns":[":woman_office_worker_light_skin_tone:"],"c":"people"},":woman_office_worker_tone2:":{"sn":":woman_office_worker_tone2:","cp":"1f469-1f3fc-200d-1f4bc","sns":[":woman_office_worker_medium_light_skin_tone:"],"c":"people"},":woman_office_worker_tone3:":{"sn":":woman_office_worker_tone3:","cp":"1f469-1f3fd-200d-1f4bc","sns":[":woman_office_worker_medium_skin_tone:"],"c":"people"},":woman_office_worker_tone4:":{"sn":":woman_office_worker_tone4:","cp":"1f469-1f3fe-200d-1f4bc","sns":[":woman_office_worker_medium_dark_skin_tone:"],"c":"people"},":woman_office_worker_tone5:":{"sn":":woman_office_worker_tone5:","cp":"1f469-1f3ff-200d-1f4bc","sns":[":woman_office_worker_dark_skin_tone:"],"c":"people"},":woman_pilot:":{"sn":":woman_pilot:","cp":"1f469-200d-2708-fe0f","sns":[],"c":"people"},":woman_pilot_tone1:":{"sn":":woman_pilot_tone1:","cp":"1f469-1f3fb-200d-2708-fe0f","sns":[":woman_pilot_light_skin_tone:"],"c":"people"},":woman_pilot_tone2:":{"sn":":woman_pilot_tone2:","cp":"1f469-1f3fc-200d-2708-fe0f","sns":[":woman_pilot_medium_light_skin_tone:"],"c":"people"},":woman_pilot_tone3:":{"sn":":woman_pilot_tone3:","cp":"1f469-1f3fd-200d-2708-fe0f","sns":[":woman_pilot_medium_skin_tone:"],"c":"people"},":woman_pilot_tone4:":{"sn":":woman_pilot_tone4:","cp":"1f469-1f3fe-200d-2708-fe0f","sns":[":woman_pilot_medium_dark_skin_tone:"],"c":"people"},":woman_pilot_tone5:":{"sn":":woman_pilot_tone5:","cp":"1f469-1f3ff-200d-2708-fe0f","sns":[":woman_pilot_dark_skin_tone:"],"c":"people"},":woman_police_officer:":{"sn":":woman_police_officer:","cp":"1f46e-200d-2640-fe0f","sns":[],"c":"people"},":woman_police_officer_tone1:":{"sn":":woman_police_officer_tone1:","cp":"1f46e-1f3fb-200d-2640-fe0f","sns":[":woman_police_officer_light_skin_tone:"],"c":"people"},":woman_police_officer_tone2:":{"sn":":woman_police_officer_tone2:","cp":"1f46e-1f3fc-200d-2640-fe0f","sns":[":woman_police_officer_medium_light_skin_tone:"],"c":"people"},":woman_police_officer_tone3:":{"sn":":woman_police_officer_tone3:","cp":"1f46e-1f3fd-200d-2640-fe0f","sns":[":woman_police_officer_medium_skin_tone:"],"c":"people"},":woman_police_officer_tone4:":{"sn":":woman_police_officer_tone4:","cp":"1f46e-1f3fe-200d-2640-fe0f","sns":[":woman_police_officer_medium_dark_skin_tone:"],"c":"people"},":woman_police_officer_tone5:":{"sn":":woman_police_officer_tone5:","cp":"1f46e-1f3ff-200d-2640-fe0f","sns":[":woman_police_officer_dark_skin_tone:"],"c":"people"},":woman_pouting:":{"sn":":woman_pouting:","cp":"1f64e-200d-2640-fe0f","sns":[],"c":"people"},":woman_pouting_tone1:":{"sn":":woman_pouting_tone1:","cp":"1f64e-1f3fb-200d-2640-fe0f","sns":[":woman_pouting_light_skin_tone:"],"c":"people"},":woman_pouting_tone2:":{"sn":":woman_pouting_tone2:","cp":"1f64e-1f3fc-200d-2640-fe0f","sns":[":woman_pouting_medium_light_skin_tone:"],"c":"people"},":woman_pouting_tone3:":{"sn":":woman_pouting_tone3:","cp":"1f64e-1f3fd-200d-2640-fe0f","sns":[":woman_pouting_medium_skin_tone:"],"c":"people"},":woman_pouting_tone4:":{"sn":":woman_pouting_tone4:","cp":"1f64e-1f3fe-200d-2640-fe0f","sns":[":woman_pouting_medium_dark_skin_tone:"],"c":"people"},":woman_pouting_tone5:":{"sn":":woman_pouting_tone5:","cp":"1f64e-1f3ff-200d-2640-fe0f","sns":[":woman_pouting_dark_skin_tone:"],"c":"people"},":woman_raising_hand:":{"sn":":woman_raising_hand:","cp":"1f64b-200d-2640-fe0f","sns":[],"c":"people"},":woman_raising_hand_tone1:":{"sn":":woman_raising_hand_tone1:","cp":"1f64b-1f3fb-200d-2640-fe0f","sns":[":woman_raising_hand_light_skin_tone:"],"c":"people"},":woman_raising_hand_tone2:":{"sn":":woman_raising_hand_tone2:","cp":"1f64b-1f3fc-200d-2640-fe0f","sns":[":woman_raising_hand_medium_light_skin_tone:"],"c":"people"},":woman_raising_hand_tone3:":{"sn":":woman_raising_hand_tone3:","cp":"1f64b-1f3fd-200d-2640-fe0f","sns":[":woman_raising_hand_medium_skin_tone:"],"c":"people"},":woman_raising_hand_tone4:":{"sn":":woman_raising_hand_tone4:","cp":"1f64b-1f3fe-200d-2640-fe0f","sns":[":woman_raising_hand_medium_dark_skin_tone:"],"c":"people"},":woman_raising_hand_tone5:":{"sn":":woman_raising_hand_tone5:","cp":"1f64b-1f3ff-200d-2640-fe0f","sns":[":woman_raising_hand_dark_skin_tone:"],"c":"people"},":woman_running:":{"sn":":woman_running:","cp":"1f3c3-200d-2640-fe0f","sns":[],"c":"people"},":woman_running_tone1:":{"sn":":woman_running_tone1:","cp":"1f3c3-1f3fb-200d-2640-fe0f","sns":[":woman_running_light_skin_tone:"],"c":"people"},":woman_running_tone2:":{"sn":":woman_running_tone2:","cp":"1f3c3-1f3fc-200d-2640-fe0f","sns":[":woman_running_medium_light_skin_tone:"],"c":"people"},":woman_running_tone3:":{"sn":":woman_running_tone3:","cp":"1f3c3-1f3fd-200d-2640-fe0f","sns":[":woman_running_medium_skin_tone:"],"c":"people"},":woman_running_tone4:":{"sn":":woman_running_tone4:","cp":"1f3c3-1f3fe-200d-2640-fe0f","sns":[":woman_running_medium_dark_skin_tone:"],"c":"people"},":woman_running_tone5:":{"sn":":woman_running_tone5:","cp":"1f3c3-1f3ff-200d-2640-fe0f","sns":[":woman_running_dark_skin_tone:"],"c":"people"},":woman_scientist:":{"sn":":woman_scientist:","cp":"1f469-200d-1f52c","sns":[],"c":"people"},":woman_scientist_tone1:":{"sn":":woman_scientist_tone1:","cp":"1f469-1f3fb-200d-1f52c","sns":[":woman_scientist_light_skin_tone:"],"c":"people"},":woman_scientist_tone2:":{"sn":":woman_scientist_tone2:","cp":"1f469-1f3fc-200d-1f52c","sns":[":woman_scientist_medium_light_skin_tone:"],"c":"people"},":woman_scientist_tone3:":{"sn":":woman_scientist_tone3:","cp":"1f469-1f3fd-200d-1f52c","sns":[":woman_scientist_medium_skin_tone:"],"c":"people"},":woman_scientist_tone4:":{"sn":":woman_scientist_tone4:","cp":"1f469-1f3fe-200d-1f52c","sns":[":woman_scientist_medium_dark_skin_tone:"],"c":"people"},":woman_scientist_tone5:":{"sn":":woman_scientist_tone5:","cp":"1f469-1f3ff-200d-1f52c","sns":[":woman_scientist_dark_skin_tone:"],"c":"people"},":woman_shrugging:":{"sn":":woman_shrugging:","cp":"1f937-200d-2640-fe0f","sns":[],"c":"people"},":woman_shrugging_tone1:":{"sn":":woman_shrugging_tone1:","cp":"1f937-1f3fb-200d-2640-fe0f","sns":[":woman_shrugging_light_skin_tone:"],"c":"people"},":woman_shrugging_tone2:":{"sn":":woman_shrugging_tone2:","cp":"1f937-1f3fc-200d-2640-fe0f","sns":[":woman_shrugging_medium_light_skin_tone:"],"c":"people"},":woman_shrugging_tone3:":{"sn":":woman_shrugging_tone3:","cp":"1f937-1f3fd-200d-2640-fe0f","sns":[":woman_shrugging_medium_skin_tone:"],"c":"people"},":woman_shrugging_tone4:":{"sn":":woman_shrugging_tone4:","cp":"1f937-1f3fe-200d-2640-fe0f","sns":[":woman_shrugging_medium_dark_skin_tone:"],"c":"people"},":woman_shrugging_tone5:":{"sn":":woman_shrugging_tone5:","cp":"1f937-1f3ff-200d-2640-fe0f","sns":[":woman_shrugging_dark_skin_tone:"],"c":"people"},":woman_singer:":{"sn":":woman_singer:","cp":"1f469-200d-1f3a4","sns":[],"c":"people"},":woman_singer_tone1:":{"sn":":woman_singer_tone1:","cp":"1f469-1f3fb-200d-1f3a4","sns":[":woman_singer_light_skin_tone:"],"c":"people"},":woman_singer_tone2:":{"sn":":woman_singer_tone2:","cp":"1f469-1f3fc-200d-1f3a4","sns":[":woman_singer_medium_light_skin_tone:"],"c":"people"},":woman_singer_tone3:":{"sn":":woman_singer_tone3:","cp":"1f469-1f3fd-200d-1f3a4","sns":[":woman_singer_medium_skin_tone:"],"c":"people"},":woman_singer_tone4:":{"sn":":woman_singer_tone4:","cp":"1f469-1f3fe-200d-1f3a4","sns":[":woman_singer_medium_dark_skin_tone:"],"c":"people"},":woman_singer_tone5:":{"sn":":woman_singer_tone5:","cp":"1f469-1f3ff-200d-1f3a4","sns":[":woman_singer_dark_skin_tone:"],"c":"people"},":woman_student:":{"sn":":woman_student:","cp":"1f469-200d-1f393","sns":[],"c":"people"},":woman_student_tone1:":{"sn":":woman_student_tone1:","cp":"1f469-1f3fb-200d-1f393","sns":[":woman_student_light_skin_tone:"],"c":"people"},":woman_student_tone2:":{"sn":":woman_student_tone2:","cp":"1f469-1f3fc-200d-1f393","sns":[":woman_student_medium_light_skin_tone:"],"c":"people"},":woman_student_tone3:":{"sn":":woman_student_tone3:","cp":"1f469-1f3fd-200d-1f393","sns":[":woman_student_medium_skin_tone:"],"c":"people"},":woman_student_tone4:":{"sn":":woman_student_tone4:","cp":"1f469-1f3fe-200d-1f393","sns":[":woman_student_medium_dark_skin_tone:"],"c":"people"},":woman_student_tone5:":{"sn":":woman_student_tone5:","cp":"1f469-1f3ff-200d-1f393","sns":[":woman_student_dark_skin_tone:"],"c":"people"},":woman_teacher:":{"sn":":woman_teacher:","cp":"1f469-200d-1f3eb","sns":[],"c":"people"},":woman_teacher_tone1:":{"sn":":woman_teacher_tone1:","cp":"1f469-1f3fb-200d-1f3eb","sns":[":woman_teacher_light_skin_tone:"],"c":"people"},":woman_teacher_tone2:":{"sn":":woman_teacher_tone2:","cp":"1f469-1f3fc-200d-1f3eb","sns":[":woman_teacher_medium_light_skin_tone:"],"c":"people"},":woman_teacher_tone3:":{"sn":":woman_teacher_tone3:","cp":"1f469-1f3fd-200d-1f3eb","sns":[":woman_teacher_medium_skin_tone:"],"c":"people"},":woman_teacher_tone4:":{"sn":":woman_teacher_tone4:","cp":"1f469-1f3fe-200d-1f3eb","sns":[":woman_teacher_medium_dark_skin_tone:"],"c":"people"},":woman_teacher_tone5:":{"sn":":woman_teacher_tone5:","cp":"1f469-1f3ff-200d-1f3eb","sns":[":woman_teacher_dark_skin_tone:"],"c":"people"},":woman_technologist:":{"sn":":woman_technologist:","cp":"1f469-200d-1f4bb","sns":[],"c":"people"},":woman_technologist_tone1:":{"sn":":woman_technologist_tone1:","cp":"1f469-1f3fb-200d-1f4bb","sns":[":woman_technologist_light_skin_tone:"],"c":"people"},":woman_technologist_tone2:":{"sn":":woman_technologist_tone2:","cp":"1f469-1f3fc-200d-1f4bb","sns":[":woman_technologist_medium_light_skin_tone:"],"c":"people"},":woman_technologist_tone3:":{"sn":":woman_technologist_tone3:","cp":"1f469-1f3fd-200d-1f4bb","sns":[":woman_technologist_medium_skin_tone:"],"c":"people"},":woman_technologist_tone4:":{"sn":":woman_technologist_tone4:","cp":"1f469-1f3fe-200d-1f4bb","sns":[":woman_technologist_medium_dark_skin_tone:"],"c":"people"},":woman_technologist_tone5:":{"sn":":woman_technologist_tone5:","cp":"1f469-1f3ff-200d-1f4bb","sns":[":woman_technologist_dark_skin_tone:"],"c":"people"},":woman_tipping_hand:":{"sn":":woman_tipping_hand:","cp":"1f481-200d-2640-fe0f","sns":[],"c":"people"},":woman_tipping_hand_tone1:":{"sn":":woman_tipping_hand_tone1:","cp":"1f481-1f3fb-200d-2640-fe0f","sns":[":woman_tipping_hand_light_skin_tone:"],"c":"people"},":woman_tipping_hand_tone2:":{"sn":":woman_tipping_hand_tone2:","cp":"1f481-1f3fc-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_light_skin_tone:"],"c":"people"},":woman_tipping_hand_tone3:":{"sn":":woman_tipping_hand_tone3:","cp":"1f481-1f3fd-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_skin_tone:"],"c":"people"},":woman_tipping_hand_tone4:":{"sn":":woman_tipping_hand_tone4:","cp":"1f481-1f3fe-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_dark_skin_tone:"],"c":"people"},":woman_tipping_hand_tone5:":{"sn":":woman_tipping_hand_tone5:","cp":"1f481-1f3ff-200d-2640-fe0f","sns":[":woman_tipping_hand_dark_skin_tone:"],"c":"people"},":woman_tone1:":{"sn":":woman_tone1:","cp":"1f469-1f3fb","sns":[],"c":"people"},":woman_tone2:":{"sn":":woman_tone2:","cp":"1f469-1f3fc","sns":[],"c":"people"},":woman_tone3:":{"sn":":woman_tone3:","cp":"1f469-1f3fd","sns":[],"c":"people"},":woman_tone4:":{"sn":":woman_tone4:","cp":"1f469-1f3fe","sns":[],"c":"people"},":woman_tone5:":{"sn":":woman_tone5:","cp":"1f469-1f3ff","sns":[],"c":"people"},":woman_vampire:":{"sn":":woman_vampire:","cp":"1f9db-200d-2640-fe0f","sns":[],"c":"people"},":woman_vampire_tone1:":{"sn":":woman_vampire_tone1:","cp":"1f9db-1f3fb-200d-2640-fe0f","sns":[":woman_vampire_light_skin_tone:"],"c":"people"},":woman_vampire_tone2:":{"sn":":woman_vampire_tone2:","cp":"1f9db-1f3fc-200d-2640-fe0f","sns":[":woman_vampire_medium_light_skin_tone:"],"c":"people"},":woman_vampire_tone3:":{"sn":":woman_vampire_tone3:","cp":"1f9db-1f3fd-200d-2640-fe0f","sns":[":woman_vampire_medium_skin_tone:"],"c":"people"},":woman_vampire_tone4:":{"sn":":woman_vampire_tone4:","cp":"1f9db-1f3fe-200d-2640-fe0f","sns":[":woman_vampire_medium_dark_skin_tone:"],"c":"people"},":woman_vampire_tone5:":{"sn":":woman_vampire_tone5:","cp":"1f9db-1f3ff-200d-2640-fe0f","sns":[":woman_vampire_dark_skin_tone:"],"c":"people"},":woman_walking:":{"sn":":woman_walking:","cp":"1f6b6-200d-2640-fe0f","sns":[],"c":"people"},":woman_walking_tone1:":{"sn":":woman_walking_tone1:","cp":"1f6b6-1f3fb-200d-2640-fe0f","sns":[":woman_walking_light_skin_tone:"],"c":"people"},":woman_walking_tone2:":{"sn":":woman_walking_tone2:","cp":"1f6b6-1f3fc-200d-2640-fe0f","sns":[":woman_walking_medium_light_skin_tone:"],"c":"people"},":woman_walking_tone3:":{"sn":":woman_walking_tone3:","cp":"1f6b6-1f3fd-200d-2640-fe0f","sns":[":woman_walking_medium_skin_tone:"],"c":"people"},":woman_walking_tone4:":{"sn":":woman_walking_tone4:","cp":"1f6b6-1f3fe-200d-2640-fe0f","sns":[":woman_walking_medium_dark_skin_tone:"],"c":"people"},":woman_walking_tone5:":{"sn":":woman_walking_tone5:","cp":"1f6b6-1f3ff-200d-2640-fe0f","sns":[":woman_walking_dark_skin_tone:"],"c":"people"},":woman_wearing_turban:":{"sn":":woman_wearing_turban:","cp":"1f473-200d-2640-fe0f","sns":[],"c":"people"},":woman_wearing_turban_tone1:":{"sn":":woman_wearing_turban_tone1:","cp":"1f473-1f3fb-200d-2640-fe0f","sns":[":woman_wearing_turban_light_skin_tone:"],"c":"people"},":woman_wearing_turban_tone2:":{"sn":":woman_wearing_turban_tone2:","cp":"1f473-1f3fc-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_light_skin_tone:"],"c":"people"},":woman_wearing_turban_tone3:":{"sn":":woman_wearing_turban_tone3:","cp":"1f473-1f3fd-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_skin_tone:"],"c":"people"},":woman_wearing_turban_tone4:":{"sn":":woman_wearing_turban_tone4:","cp":"1f473-1f3fe-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_dark_skin_tone:"],"c":"people"},":woman_wearing_turban_tone5:":{"sn":":woman_wearing_turban_tone5:","cp":"1f473-1f3ff-200d-2640-fe0f","sns":[":woman_wearing_turban_dark_skin_tone:"],"c":"people"},":woman_with_headscarf:":{"sn":":woman_with_headscarf:","cp":"1f9d5","sns":[],"c":"people"},":woman_with_headscarf_tone1:":{"sn":":woman_with_headscarf_tone1:","cp":"1f9d5-1f3fb","sns":[":woman_with_headscarf_light_skin_tone:"],"c":"people"},":woman_with_headscarf_tone2:":{"sn":":woman_with_headscarf_tone2:","cp":"1f9d5-1f3fc","sns":[":woman_with_headscarf_medium_light_skin_tone:"],"c":"people"},":woman_with_headscarf_tone3:":{"sn":":woman_with_headscarf_tone3:","cp":"1f9d5-1f3fd","sns":[":woman_with_headscarf_medium_skin_tone:"],"c":"people"},":woman_with_headscarf_tone4:":{"sn":":woman_with_headscarf_tone4:","cp":"1f9d5-1f3fe","sns":[":woman_with_headscarf_medium_dark_skin_tone:"],"c":"people"},":woman_with_headscarf_tone5:":{"sn":":woman_with_headscarf_tone5:","cp":"1f9d5-1f3ff","sns":[":woman_with_headscarf_dark_skin_tone:"],"c":"people"},":woman_zombie:":{"sn":":woman_zombie:","cp":"1f9df-200d-2640-fe0f","sns":[],"c":"people"},":women_with_bunny_ears_partying:":{"sn":":women_with_bunny_ears_partying:","cp":"1f46f-200d-2640-fe0f","sns":[],"c":"people"},":zombie:":{"sn":":zombie:","cp":"1f9df","sns":[],"c":"people"}},"activity":{":8ball:":{"sn":":8ball:","cp":"1f3b1","sns":[],"c":"activity"},":art:":{"sn":":art:","cp":"1f3a8","sns":[],"c":"activity"},":badminton:":{"sn":":badminton:","cp":"1f3f8","sns":[],"c":"activity"},":baseball:":{"sn":":baseball:","cp":"26be","sns":[],"c":"activity"},":basketball:":{"sn":":basketball:","cp":"1f3c0","sns":[],"c":"activity"},":bikini:":{"sn":":bikini:","cp":"1f459","sns":[],"c":"activity"},":bow_and_arrow:":{"sn":":bow_and_arrow:","cp":"1f3f9","sns":[":archery:"],"c":"activity"},":bowling:":{"sn":":bowling:","cp":"1f3b3","sns":[],"c":"activity"},":boxing_glove:":{"sn":":boxing_glove:","cp":"1f94a","sns":[":boxing_gloves:"],"c":"activity"},":circus_tent:":{"sn":":circus_tent:","cp":"1f3aa","sns":[],"c":"activity"},":clapper:":{"sn":":clapper:","cp":"1f3ac","sns":[],"c":"activity"},":cricket_game:":{"sn":":cricket_game:","cp":"1f3cf","sns":[":cricket_bat_ball:"],"c":"activity"},":curling_stone:":{"sn":":curling_stone:","cp":"1f94c","sns":[],"c":"activity"},":dart:":{"sn":":dart:","cp":"1f3af","sns":[],"c":"activity"},":drum:":{"sn":":drum:","cp":"1f941","sns":[":drum_with_drumsticks:"],"c":"activity"},":field_hockey:":{"sn":":field_hockey:","cp":"1f3d1","sns":[],"c":"activity"},":first_place:":{"sn":":first_place:","cp":"1f947","sns":[":first_place_medal:"],"c":"activity"},":fishing_pole_and_fish:":{"sn":":fishing_pole_and_fish:","cp":"1f3a3","sns":[],"c":"activity"},":football:":{"sn":":football:","cp":"1f3c8","sns":[],"c":"activity"},":game_die:":{"sn":":game_die:","cp":"1f3b2","sns":[],"c":"activity"},":goal:":{"sn":":goal:","cp":"1f945","sns":[":goal_net:"],"c":"activity"},":golf:":{"sn":":golf:","cp":"26f3","sns":[],"c":"activity"},":guitar:":{"sn":":guitar:","cp":"1f3b8","sns":[],"c":"activity"},":headphones:":{"sn":":headphones:","cp":"1f3a7","sns":[],"c":"activity"},":hockey:":{"sn":":hockey:","cp":"1f3d2","sns":[],"c":"activity"},":horse_racing:":{"sn":":horse_racing:","cp":"1f3c7","sns":[],"c":"activity"},":horse_racing_tone1:":{"sn":":horse_racing_tone1:","cp":"1f3c7-1f3fb","sns":[],"c":"activity"},":horse_racing_tone2:":{"sn":":horse_racing_tone2:","cp":"1f3c7-1f3fc","sns":[],"c":"activity"},":horse_racing_tone3:":{"sn":":horse_racing_tone3:","cp":"1f3c7-1f3fd","sns":[],"c":"activity"},":horse_racing_tone4:":{"sn":":horse_racing_tone4:","cp":"1f3c7-1f3fe","sns":[],"c":"activity"},":horse_racing_tone5:":{"sn":":horse_racing_tone5:","cp":"1f3c7-1f3ff","sns":[],"c":"activity"},":ice_skate:":{"sn":":ice_skate:","cp":"26f8","sns":[],"c":"activity"},":man_biking:":{"sn":":man_biking:","cp":"1f6b4-200d-2642-fe0f","sns":[],"c":"activity"},":man_biking_tone1:":{"sn":":man_biking_tone1:","cp":"1f6b4-1f3fb-200d-2642-fe0f","sns":[":man_biking_light_skin_tone:"],"c":"activity"},":man_biking_tone2:":{"sn":":man_biking_tone2:","cp":"1f6b4-1f3fc-200d-2642-fe0f","sns":[":man_biking_medium_light_skin_tone:"],"c":"activity"},":man_biking_tone3:":{"sn":":man_biking_tone3:","cp":"1f6b4-1f3fd-200d-2642-fe0f","sns":[":man_biking_medium_skin_tone:"],"c":"activity"},":man_biking_tone4:":{"sn":":man_biking_tone4:","cp":"1f6b4-1f3fe-200d-2642-fe0f","sns":[":man_biking_medium_dark_skin_tone:"],"c":"activity"},":man_biking_tone5:":{"sn":":man_biking_tone5:","cp":"1f6b4-1f3ff-200d-2642-fe0f","sns":[":man_biking_dark_skin_tone:"],"c":"activity"},":man_bouncing_ball:":{"sn":":man_bouncing_ball:","cp":"26f9-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_bouncing_ball_tone1:":{"sn":":man_bouncing_ball_tone1:","cp":"26f9-1f3fb-200d-2642-fe0f","sns":[":man_bouncing_ball_light_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone2:":{"sn":":man_bouncing_ball_tone2:","cp":"26f9-1f3fc-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_light_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone3:":{"sn":":man_bouncing_ball_tone3:","cp":"26f9-1f3fd-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone4:":{"sn":":man_bouncing_ball_tone4:","cp":"26f9-1f3fe-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_dark_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone5:":{"sn":":man_bouncing_ball_tone5:","cp":"26f9-1f3ff-200d-2642-fe0f","sns":[":man_bouncing_ball_dark_skin_tone:"],"c":"activity"},":man_cartwheeling:":{"sn":":man_cartwheeling:","cp":"1f938-200d-2642-fe0f","sns":[],"c":"activity"},":man_cartwheeling_tone1:":{"sn":":man_cartwheeling_tone1:","cp":"1f938-1f3fb-200d-2642-fe0f","sns":[":man_cartwheeling_light_skin_tone:"],"c":"activity"},":man_cartwheeling_tone2:":{"sn":":man_cartwheeling_tone2:","cp":"1f938-1f3fc-200d-2642-fe0f","sns":[":man_cartwheeling_medium_light_skin_tone:"],"c":"activity"},":man_cartwheeling_tone3:":{"sn":":man_cartwheeling_tone3:","cp":"1f938-1f3fd-200d-2642-fe0f","sns":[":man_cartwheeling_medium_skin_tone:"],"c":"activity"},":man_cartwheeling_tone4:":{"sn":":man_cartwheeling_tone4:","cp":"1f938-1f3fe-200d-2642-fe0f","sns":[":man_cartwheeling_medium_dark_skin_tone:"],"c":"activity"},":man_cartwheeling_tone5:":{"sn":":man_cartwheeling_tone5:","cp":"1f938-1f3ff-200d-2642-fe0f","sns":[":man_cartwheeling_dark_skin_tone:"],"c":"activity"},":man_climbing:":{"sn":":man_climbing:","cp":"1f9d7-200d-2642-fe0f","sns":[],"c":"activity"},":man_climbing_tone1:":{"sn":":man_climbing_tone1:","cp":"1f9d7-1f3fb-200d-2642-fe0f","sns":[":man_climbing_light_skin_tone:"],"c":"activity"},":man_climbing_tone2:":{"sn":":man_climbing_tone2:","cp":"1f9d7-1f3fc-200d-2642-fe0f","sns":[":man_climbing_medium_light_skin_tone:"],"c":"activity"},":man_climbing_tone3:":{"sn":":man_climbing_tone3:","cp":"1f9d7-1f3fd-200d-2642-fe0f","sns":[":man_climbing_medium_skin_tone:"],"c":"activity"},":man_climbing_tone4:":{"sn":":man_climbing_tone4:","cp":"1f9d7-1f3fe-200d-2642-fe0f","sns":[":man_climbing_medium_dark_skin_tone:"],"c":"activity"},":man_climbing_tone5:":{"sn":":man_climbing_tone5:","cp":"1f9d7-1f3ff-200d-2642-fe0f","sns":[":man_climbing_dark_skin_tone:"],"c":"activity"},":man_golfing:":{"sn":":man_golfing:","cp":"1f3cc-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_golfing_tone1:":{"sn":":man_golfing_tone1:","cp":"1f3cc-1f3fb-200d-2642-fe0f","sns":[":man_golfing_light_skin_tone:"],"c":"activity"},":man_golfing_tone2:":{"sn":":man_golfing_tone2:","cp":"1f3cc-1f3fc-200d-2642-fe0f","sns":[":man_golfing_medium_light_skin_tone:"],"c":"activity"},":man_golfing_tone3:":{"sn":":man_golfing_tone3:","cp":"1f3cc-1f3fd-200d-2642-fe0f","sns":[":man_golfing_medium_skin_tone:"],"c":"activity"},":man_golfing_tone4:":{"sn":":man_golfing_tone4:","cp":"1f3cc-1f3fe-200d-2642-fe0f","sns":[":man_golfing_medium_dark_skin_tone:"],"c":"activity"},":man_golfing_tone5:":{"sn":":man_golfing_tone5:","cp":"1f3cc-1f3ff-200d-2642-fe0f","sns":[":man_golfing_dark_skin_tone:"],"c":"activity"},":man_in_lotus_position:":{"sn":":man_in_lotus_position:","cp":"1f9d8-200d-2642-fe0f","sns":[],"c":"activity"},":man_in_lotus_position_tone1:":{"sn":":man_in_lotus_position_tone1:","cp":"1f9d8-1f3fb-200d-2642-fe0f","sns":[":man_in_lotus_position_light_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone2:":{"sn":":man_in_lotus_position_tone2:","cp":"1f9d8-1f3fc-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone3:":{"sn":":man_in_lotus_position_tone3:","cp":"1f9d8-1f3fd-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone4:":{"sn":":man_in_lotus_position_tone4:","cp":"1f9d8-1f3fe-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone5:":{"sn":":man_in_lotus_position_tone5:","cp":"1f9d8-1f3ff-200d-2642-fe0f","sns":[":man_in_lotus_position_dark_skin_tone:"],"c":"activity"},":man_juggling:":{"sn":":man_juggling:","cp":"1f939-200d-2642-fe0f","sns":[],"c":"activity"},":man_juggling_tone1:":{"sn":":man_juggling_tone1:","cp":"1f939-1f3fb-200d-2642-fe0f","sns":[":man_juggling_light_skin_tone:"],"c":"activity"},":man_juggling_tone2:":{"sn":":man_juggling_tone2:","cp":"1f939-1f3fc-200d-2642-fe0f","sns":[":man_juggling_medium_light_skin_tone:"],"c":"activity"},":man_juggling_tone3:":{"sn":":man_juggling_tone3:","cp":"1f939-1f3fd-200d-2642-fe0f","sns":[":man_juggling_medium_skin_tone:"],"c":"activity"},":man_juggling_tone4:":{"sn":":man_juggling_tone4:","cp":"1f939-1f3fe-200d-2642-fe0f","sns":[":man_juggling_medium_dark_skin_tone:"],"c":"activity"},":man_juggling_tone5:":{"sn":":man_juggling_tone5:","cp":"1f939-1f3ff-200d-2642-fe0f","sns":[":man_juggling_dark_skin_tone:"],"c":"activity"},":man_lifting_weights:":{"sn":":man_lifting_weights:","cp":"1f3cb-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_lifting_weights_tone1:":{"sn":":man_lifting_weights_tone1:","cp":"1f3cb-1f3fb-200d-2642-fe0f","sns":[":man_lifting_weights_light_skin_tone:"],"c":"activity"},":man_lifting_weights_tone2:":{"sn":":man_lifting_weights_tone2:","cp":"1f3cb-1f3fc-200d-2642-fe0f","sns":[":man_lifting_weights_medium_light_skin_tone:"],"c":"activity"},":man_lifting_weights_tone3:":{"sn":":man_lifting_weights_tone3:","cp":"1f3cb-1f3fd-200d-2642-fe0f","sns":[":man_lifting_weights_medium_skin_tone:"],"c":"activity"},":man_lifting_weights_tone4:":{"sn":":man_lifting_weights_tone4:","cp":"1f3cb-1f3fe-200d-2642-fe0f","sns":[":man_lifting_weights_medium_dark_skin_tone:"],"c":"activity"},":man_lifting_weights_tone5:":{"sn":":man_lifting_weights_tone5:","cp":"1f3cb-1f3ff-200d-2642-fe0f","sns":[":man_lifting_weights_dark_skin_tone:"],"c":"activity"},":man_mountain_biking:":{"sn":":man_mountain_biking:","cp":"1f6b5-200d-2642-fe0f","sns":[],"c":"activity"},":man_mountain_biking_tone1:":{"sn":":man_mountain_biking_tone1:","cp":"1f6b5-1f3fb-200d-2642-fe0f","sns":[":man_mountain_biking_light_skin_tone:"],"c":"activity"},":man_mountain_biking_tone2:":{"sn":":man_mountain_biking_tone2:","cp":"1f6b5-1f3fc-200d-2642-fe0f","sns":[":man_mountain_biking_medium_light_skin_tone:"],"c":"activity"},":man_mountain_biking_tone3:":{"sn":":man_mountain_biking_tone3:","cp":"1f6b5-1f3fd-200d-2642-fe0f","sns":[":man_mountain_biking_medium_skin_tone:"],"c":"activity"},":man_mountain_biking_tone4:":{"sn":":man_mountain_biking_tone4:","cp":"1f6b5-1f3fe-200d-2642-fe0f","sns":[":man_mountain_biking_medium_dark_skin_tone:"],"c":"activity"},":man_mountain_biking_tone5:":{"sn":":man_mountain_biking_tone5:","cp":"1f6b5-1f3ff-200d-2642-fe0f","sns":[":man_mountain_biking_dark_skin_tone:"],"c":"activity"},":man_playing_handball:":{"sn":":man_playing_handball:","cp":"1f93e-200d-2642-fe0f","sns":[],"c":"activity"},":man_playing_handball_tone1:":{"sn":":man_playing_handball_tone1:","cp":"1f93e-1f3fb-200d-2642-fe0f","sns":[":man_playing_handball_light_skin_tone:"],"c":"activity"},":man_playing_handball_tone2:":{"sn":":man_playing_handball_tone2:","cp":"1f93e-1f3fc-200d-2642-fe0f","sns":[":man_playing_handball_medium_light_skin_tone:"],"c":"activity"},":man_playing_handball_tone3:":{"sn":":man_playing_handball_tone3:","cp":"1f93e-1f3fd-200d-2642-fe0f","sns":[":man_playing_handball_medium_skin_tone:"],"c":"activity"},":man_playing_handball_tone4:":{"sn":":man_playing_handball_tone4:","cp":"1f93e-1f3fe-200d-2642-fe0f","sns":[":man_playing_handball_medium_dark_skin_tone:"],"c":"activity"},":man_playing_handball_tone5:":{"sn":":man_playing_handball_tone5:","cp":"1f93e-1f3ff-200d-2642-fe0f","sns":[":man_playing_handball_dark_skin_tone:"],"c":"activity"},":man_playing_water_polo:":{"sn":":man_playing_water_polo:","cp":"1f93d-200d-2642-fe0f","sns":[],"c":"activity"},":man_playing_water_polo_tone1:":{"sn":":man_playing_water_polo_tone1:","cp":"1f93d-1f3fb-200d-2642-fe0f","sns":[":man_playing_water_polo_light_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone2:":{"sn":":man_playing_water_polo_tone2:","cp":"1f93d-1f3fc-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_light_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone3:":{"sn":":man_playing_water_polo_tone3:","cp":"1f93d-1f3fd-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone4:":{"sn":":man_playing_water_polo_tone4:","cp":"1f93d-1f3fe-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_dark_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone5:":{"sn":":man_playing_water_polo_tone5:","cp":"1f93d-1f3ff-200d-2642-fe0f","sns":[":man_playing_water_polo_dark_skin_tone:"],"c":"activity"},":man_rowing_boat:":{"sn":":man_rowing_boat:","cp":"1f6a3-200d-2642-fe0f","sns":[],"c":"activity"},":man_rowing_boat_tone1:":{"sn":":man_rowing_boat_tone1:","cp":"1f6a3-1f3fb-200d-2642-fe0f","sns":[":man_rowing_boat_light_skin_tone:"],"c":"activity"},":man_rowing_boat_tone2:":{"sn":":man_rowing_boat_tone2:","cp":"1f6a3-1f3fc-200d-2642-fe0f","sns":[":man_rowing_boat_medium_light_skin_tone:"],"c":"activity"},":man_rowing_boat_tone3:":{"sn":":man_rowing_boat_tone3:","cp":"1f6a3-1f3fd-200d-2642-fe0f","sns":[":man_rowing_boat_medium_skin_tone:"],"c":"activity"},":man_rowing_boat_tone4:":{"sn":":man_rowing_boat_tone4:","cp":"1f6a3-1f3fe-200d-2642-fe0f","sns":[":man_rowing_boat_medium_dark_skin_tone:"],"c":"activity"},":man_rowing_boat_tone5:":{"sn":":man_rowing_boat_tone5:","cp":"1f6a3-1f3ff-200d-2642-fe0f","sns":[":man_rowing_boat_dark_skin_tone:"],"c":"activity"},":man_surfing:":{"sn":":man_surfing:","cp":"1f3c4-200d-2642-fe0f","sns":[],"c":"activity"},":man_surfing_tone1:":{"sn":":man_surfing_tone1:","cp":"1f3c4-1f3fb-200d-2642-fe0f","sns":[":man_surfing_light_skin_tone:"],"c":"activity"},":man_surfing_tone2:":{"sn":":man_surfing_tone2:","cp":"1f3c4-1f3fc-200d-2642-fe0f","sns":[":man_surfing_medium_light_skin_tone:"],"c":"activity"},":man_surfing_tone3:":{"sn":":man_surfing_tone3:","cp":"1f3c4-1f3fd-200d-2642-fe0f","sns":[":man_surfing_medium_skin_tone:"],"c":"activity"},":man_surfing_tone4:":{"sn":":man_surfing_tone4:","cp":"1f3c4-1f3fe-200d-2642-fe0f","sns":[":man_surfing_medium_dark_skin_tone:"],"c":"activity"},":man_surfing_tone5:":{"sn":":man_surfing_tone5:","cp":"1f3c4-1f3ff-200d-2642-fe0f","sns":[":man_surfing_dark_skin_tone:"],"c":"activity"},":man_swimming:":{"sn":":man_swimming:","cp":"1f3ca-200d-2642-fe0f","sns":[],"c":"activity"},":man_swimming_tone1:":{"sn":":man_swimming_tone1:","cp":"1f3ca-1f3fb-200d-2642-fe0f","sns":[":man_swimming_light_skin_tone:"],"c":"activity"},":man_swimming_tone2:":{"sn":":man_swimming_tone2:","cp":"1f3ca-1f3fc-200d-2642-fe0f","sns":[":man_swimming_medium_light_skin_tone:"],"c":"activity"},":man_swimming_tone3:":{"sn":":man_swimming_tone3:","cp":"1f3ca-1f3fd-200d-2642-fe0f","sns":[":man_swimming_medium_skin_tone:"],"c":"activity"},":man_swimming_tone4:":{"sn":":man_swimming_tone4:","cp":"1f3ca-1f3fe-200d-2642-fe0f","sns":[":man_swimming_medium_dark_skin_tone:"],"c":"activity"},":man_swimming_tone5:":{"sn":":man_swimming_tone5:","cp":"1f3ca-1f3ff-200d-2642-fe0f","sns":[":man_swimming_dark_skin_tone:"],"c":"activity"},":martial_arts_uniform:":{"sn":":martial_arts_uniform:","cp":"1f94b","sns":[":karate_uniform:"],"c":"activity"},":medal:":{"sn":":medal:","cp":"1f3c5","sns":[":sports_medal:"],"c":"activity"},":men_wrestling:":{"sn":":men_wrestling:","cp":"1f93c-200d-2642-fe0f","sns":[],"c":"activity"},":microphone:":{"sn":":microphone:","cp":"1f3a4","sns":[],"c":"activity"},":military_medal:":{"sn":":military_medal:","cp":"1f396","sns":[],"c":"activity"},":musical_keyboard:":{"sn":":musical_keyboard:","cp":"1f3b9","sns":[],"c":"activity"},":musical_score:":{"sn":":musical_score:","cp":"1f3bc","sns":[],"c":"activity"},":people_wrestling:":{"sn":":people_wrestling:","cp":"1f93c","sns":[":wrestlers:",":wrestling:"],"c":"activity"},":performing_arts:":{"sn":":performing_arts:","cp":"1f3ad","sns":[],"c":"activity"},":person_biking:":{"sn":":person_biking:","cp":"1f6b4","sns":[":bicyclist:"],"c":"activity"},":person_biking_tone1:":{"sn":":person_biking_tone1:","cp":"1f6b4-1f3fb","sns":[":bicyclist_tone1:"],"c":"activity"},":person_biking_tone2:":{"sn":":person_biking_tone2:","cp":"1f6b4-1f3fc","sns":[":bicyclist_tone2:"],"c":"activity"},":person_biking_tone3:":{"sn":":person_biking_tone3:","cp":"1f6b4-1f3fd","sns":[":bicyclist_tone3:"],"c":"activity"},":person_biking_tone4:":{"sn":":person_biking_tone4:","cp":"1f6b4-1f3fe","sns":[":bicyclist_tone4:"],"c":"activity"},":person_biking_tone5:":{"sn":":person_biking_tone5:","cp":"1f6b4-1f3ff","sns":[":bicyclist_tone5:"],"c":"activity"},":person_bouncing_ball:":{"sn":":person_bouncing_ball:","cp":"26f9","sns":[":basketball_player:",":person_with_ball:"],"c":"activity"},":person_bouncing_ball_tone1:":{"sn":":person_bouncing_ball_tone1:","cp":"26f9-1f3fb","sns":[":basketball_player_tone1:",":person_with_ball_tone1:"],"c":"activity"},":person_bouncing_ball_tone2:":{"sn":":person_bouncing_ball_tone2:","cp":"26f9-1f3fc","sns":[":basketball_player_tone2:",":person_with_ball_tone2:"],"c":"activity"},":person_bouncing_ball_tone3:":{"sn":":person_bouncing_ball_tone3:","cp":"26f9-1f3fd","sns":[":basketball_player_tone3:",":person_with_ball_tone3:"],"c":"activity"},":person_bouncing_ball_tone4:":{"sn":":person_bouncing_ball_tone4:","cp":"26f9-1f3fe","sns":[":basketball_player_tone4:",":person_with_ball_tone4:"],"c":"activity"},":person_bouncing_ball_tone5:":{"sn":":person_bouncing_ball_tone5:","cp":"26f9-1f3ff","sns":[":basketball_player_tone5:",":person_with_ball_tone5:"],"c":"activity"},":person_climbing:":{"sn":":person_climbing:","cp":"1f9d7","sns":[],"c":"activity"},":person_climbing_tone1:":{"sn":":person_climbing_tone1:","cp":"1f9d7-1f3fb","sns":[":person_climbing_light_skin_tone:"],"c":"activity"},":person_climbing_tone2:":{"sn":":person_climbing_tone2:","cp":"1f9d7-1f3fc","sns":[":person_climbing_medium_light_skin_tone:"],"c":"activity"},":person_climbing_tone3:":{"sn":":person_climbing_tone3:","cp":"1f9d7-1f3fd","sns":[":person_climbing_medium_skin_tone:"],"c":"activity"},":person_climbing_tone4:":{"sn":":person_climbing_tone4:","cp":"1f9d7-1f3fe","sns":[":person_climbing_medium_dark_skin_tone:"],"c":"activity"},":person_climbing_tone5:":{"sn":":person_climbing_tone5:","cp":"1f9d7-1f3ff","sns":[":person_climbing_dark_skin_tone:"],"c":"activity"},":person_doing_cartwheel:":{"sn":":person_doing_cartwheel:","cp":"1f938","sns":[":cartwheel:"],"c":"activity"},":person_doing_cartwheel_tone1:":{"sn":":person_doing_cartwheel_tone1:","cp":"1f938-1f3fb","sns":[":cartwheel_tone1:"],"c":"activity"},":person_doing_cartwheel_tone2:":{"sn":":person_doing_cartwheel_tone2:","cp":"1f938-1f3fc","sns":[":cartwheel_tone2:"],"c":"activity"},":person_doing_cartwheel_tone3:":{"sn":":person_doing_cartwheel_tone3:","cp":"1f938-1f3fd","sns":[":cartwheel_tone3:"],"c":"activity"},":person_doing_cartwheel_tone4:":{"sn":":person_doing_cartwheel_tone4:","cp":"1f938-1f3fe","sns":[":cartwheel_tone4:"],"c":"activity"},":person_doing_cartwheel_tone5:":{"sn":":person_doing_cartwheel_tone5:","cp":"1f938-1f3ff","sns":[":cartwheel_tone5:"],"c":"activity"},":person_fencing:":{"sn":":person_fencing:","cp":"1f93a","sns":[":fencer:",":fencing:"],"c":"activity"},":person_golfing:":{"sn":":person_golfing:","cp":"1f3cc","sns":[":golfer:"],"c":"activity"},":person_golfing_tone1:":{"sn":":person_golfing_tone1:","cp":"1f3cc-1f3fb","sns":[":person_golfing_light_skin_tone:"],"c":"activity"},":person_golfing_tone2:":{"sn":":person_golfing_tone2:","cp":"1f3cc-1f3fc","sns":[":person_golfing_medium_light_skin_tone:"],"c":"activity"},":person_golfing_tone3:":{"sn":":person_golfing_tone3:","cp":"1f3cc-1f3fd","sns":[":person_golfing_medium_skin_tone:"],"c":"activity"},":person_golfing_tone4:":{"sn":":person_golfing_tone4:","cp":"1f3cc-1f3fe","sns":[":person_golfing_medium_dark_skin_tone:"],"c":"activity"},":person_golfing_tone5:":{"sn":":person_golfing_tone5:","cp":"1f3cc-1f3ff","sns":[":person_golfing_dark_skin_tone:"],"c":"activity"},":person_in_lotus_position:":{"sn":":person_in_lotus_position:","cp":"1f9d8","sns":[],"c":"activity"},":person_in_lotus_position_tone1:":{"sn":":person_in_lotus_position_tone1:","cp":"1f9d8-1f3fb","sns":[":person_in_lotus_position_light_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone2:":{"sn":":person_in_lotus_position_tone2:","cp":"1f9d8-1f3fc","sns":[":person_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone3:":{"sn":":person_in_lotus_position_tone3:","cp":"1f9d8-1f3fd","sns":[":person_in_lotus_position_medium_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone4:":{"sn":":person_in_lotus_position_tone4:","cp":"1f9d8-1f3fe","sns":[":person_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone5:":{"sn":":person_in_lotus_position_tone5:","cp":"1f9d8-1f3ff","sns":[":person_in_lotus_position_dark_skin_tone:"],"c":"activity"},":person_juggling:":{"sn":":person_juggling:","cp":"1f939","sns":[":juggling:",":juggler:"],"c":"activity"},":person_juggling_tone1:":{"sn":":person_juggling_tone1:","cp":"1f939-1f3fb","sns":[":juggling_tone1:",":juggler_tone1:"],"c":"activity"},":person_juggling_tone2:":{"sn":":person_juggling_tone2:","cp":"1f939-1f3fc","sns":[":juggling_tone2:",":juggler_tone2:"],"c":"activity"},":person_juggling_tone3:":{"sn":":person_juggling_tone3:","cp":"1f939-1f3fd","sns":[":juggling_tone3:",":juggler_tone3:"],"c":"activity"},":person_juggling_tone4:":{"sn":":person_juggling_tone4:","cp":"1f939-1f3fe","sns":[":juggling_tone4:",":juggler_tone4:"],"c":"activity"},":person_juggling_tone5:":{"sn":":person_juggling_tone5:","cp":"1f939-1f3ff","sns":[":juggling_tone5:",":juggler_tone5:"],"c":"activity"},":person_lifting_weights:":{"sn":":person_lifting_weights:","cp":"1f3cb","sns":[":lifter:",":weight_lifter:"],"c":"activity"},":person_lifting_weights_tone1:":{"sn":":person_lifting_weights_tone1:","cp":"1f3cb-1f3fb","sns":[":lifter_tone1:",":weight_lifter_tone1:"],"c":"activity"},":person_lifting_weights_tone2:":{"sn":":person_lifting_weights_tone2:","cp":"1f3cb-1f3fc","sns":[":lifter_tone2:",":weight_lifter_tone2:"],"c":"activity"},":person_lifting_weights_tone3:":{"sn":":person_lifting_weights_tone3:","cp":"1f3cb-1f3fd","sns":[":lifter_tone3:",":weight_lifter_tone3:"],"c":"activity"},":person_lifting_weights_tone4:":{"sn":":person_lifting_weights_tone4:","cp":"1f3cb-1f3fe","sns":[":lifter_tone4:",":weight_lifter_tone4:"],"c":"activity"},":person_lifting_weights_tone5:":{"sn":":person_lifting_weights_tone5:","cp":"1f3cb-1f3ff","sns":[":lifter_tone5:",":weight_lifter_tone5:"],"c":"activity"},":person_mountain_biking:":{"sn":":person_mountain_biking:","cp":"1f6b5","sns":[":mountain_bicyclist:"],"c":"activity"},":person_mountain_biking_tone1:":{"sn":":person_mountain_biking_tone1:","cp":"1f6b5-1f3fb","sns":[":mountain_bicyclist_tone1:"],"c":"activity"},":person_mountain_biking_tone2:":{"sn":":person_mountain_biking_tone2:","cp":"1f6b5-1f3fc","sns":[":mountain_bicyclist_tone2:"],"c":"activity"},":person_mountain_biking_tone3:":{"sn":":person_mountain_biking_tone3:","cp":"1f6b5-1f3fd","sns":[":mountain_bicyclist_tone3:"],"c":"activity"},":person_mountain_biking_tone4:":{"sn":":person_mountain_biking_tone4:","cp":"1f6b5-1f3fe","sns":[":mountain_bicyclist_tone4:"],"c":"activity"},":person_mountain_biking_tone5:":{"sn":":person_mountain_biking_tone5:","cp":"1f6b5-1f3ff","sns":[":mountain_bicyclist_tone5:"],"c":"activity"},":person_playing_handball:":{"sn":":person_playing_handball:","cp":"1f93e","sns":[":handball:"],"c":"activity"},":person_playing_handball_tone1:":{"sn":":person_playing_handball_tone1:","cp":"1f93e-1f3fb","sns":[":handball_tone1:"],"c":"activity"},":person_playing_handball_tone2:":{"sn":":person_playing_handball_tone2:","cp":"1f93e-1f3fc","sns":[":handball_tone2:"],"c":"activity"},":person_playing_handball_tone3:":{"sn":":person_playing_handball_tone3:","cp":"1f93e-1f3fd","sns":[":handball_tone3:"],"c":"activity"},":person_playing_handball_tone4:":{"sn":":person_playing_handball_tone4:","cp":"1f93e-1f3fe","sns":[":handball_tone4:"],"c":"activity"},":person_playing_handball_tone5:":{"sn":":person_playing_handball_tone5:","cp":"1f93e-1f3ff","sns":[":handball_tone5:"],"c":"activity"},":person_playing_water_polo:":{"sn":":person_playing_water_polo:","cp":"1f93d","sns":[":water_polo:"],"c":"activity"},":person_playing_water_polo_tone1:":{"sn":":person_playing_water_polo_tone1:","cp":"1f93d-1f3fb","sns":[":water_polo_tone1:"],"c":"activity"},":person_playing_water_polo_tone2:":{"sn":":person_playing_water_polo_tone2:","cp":"1f93d-1f3fc","sns":[":water_polo_tone2:"],"c":"activity"},":person_playing_water_polo_tone3:":{"sn":":person_playing_water_polo_tone3:","cp":"1f93d-1f3fd","sns":[":water_polo_tone3:"],"c":"activity"},":person_playing_water_polo_tone4:":{"sn":":person_playing_water_polo_tone4:","cp":"1f93d-1f3fe","sns":[":water_polo_tone4:"],"c":"activity"},":person_playing_water_polo_tone5:":{"sn":":person_playing_water_polo_tone5:","cp":"1f93d-1f3ff","sns":[":water_polo_tone5:"],"c":"activity"},":person_rowing_boat:":{"sn":":person_rowing_boat:","cp":"1f6a3","sns":[":rowboat:"],"c":"activity"},":person_rowing_boat_tone1:":{"sn":":person_rowing_boat_tone1:","cp":"1f6a3-1f3fb","sns":[":rowboat_tone1:"],"c":"activity"},":person_rowing_boat_tone2:":{"sn":":person_rowing_boat_tone2:","cp":"1f6a3-1f3fc","sns":[":rowboat_tone2:"],"c":"activity"},":person_rowing_boat_tone3:":{"sn":":person_rowing_boat_tone3:","cp":"1f6a3-1f3fd","sns":[":rowboat_tone3:"],"c":"activity"},":person_rowing_boat_tone4:":{"sn":":person_rowing_boat_tone4:","cp":"1f6a3-1f3fe","sns":[":rowboat_tone4:"],"c":"activity"},":person_rowing_boat_tone5:":{"sn":":person_rowing_boat_tone5:","cp":"1f6a3-1f3ff","sns":[":rowboat_tone5:"],"c":"activity"},":person_surfing:":{"sn":":person_surfing:","cp":"1f3c4","sns":[":surfer:"],"c":"activity"},":person_surfing_tone1:":{"sn":":person_surfing_tone1:","cp":"1f3c4-1f3fb","sns":[":surfer_tone1:"],"c":"activity"},":person_surfing_tone2:":{"sn":":person_surfing_tone2:","cp":"1f3c4-1f3fc","sns":[":surfer_tone2:"],"c":"activity"},":person_surfing_tone3:":{"sn":":person_surfing_tone3:","cp":"1f3c4-1f3fd","sns":[":surfer_tone3:"],"c":"activity"},":person_surfing_tone4:":{"sn":":person_surfing_tone4:","cp":"1f3c4-1f3fe","sns":[":surfer_tone4:"],"c":"activity"},":person_surfing_tone5:":{"sn":":person_surfing_tone5:","cp":"1f3c4-1f3ff","sns":[":surfer_tone5:"],"c":"activity"},":person_swimming:":{"sn":":person_swimming:","cp":"1f3ca","sns":[":swimmer:"],"c":"activity"},":person_swimming_tone1:":{"sn":":person_swimming_tone1:","cp":"1f3ca-1f3fb","sns":[":swimmer_tone1:"],"c":"activity"},":person_swimming_tone2:":{"sn":":person_swimming_tone2:","cp":"1f3ca-1f3fc","sns":[":swimmer_tone2:"],"c":"activity"},":person_swimming_tone3:":{"sn":":person_swimming_tone3:","cp":"1f3ca-1f3fd","sns":[":swimmer_tone3:"],"c":"activity"},":person_swimming_tone4:":{"sn":":person_swimming_tone4:","cp":"1f3ca-1f3fe","sns":[":swimmer_tone4:"],"c":"activity"},":person_swimming_tone5:":{"sn":":person_swimming_tone5:","cp":"1f3ca-1f3ff","sns":[":swimmer_tone5:"],"c":"activity"},":ping_pong:":{"sn":":ping_pong:","cp":"1f3d3","sns":[":table_tennis:"],"c":"activity"},":reminder_ribbon:":{"sn":":reminder_ribbon:","cp":"1f397","sns":[],"c":"activity"},":rosette:":{"sn":":rosette:","cp":"1f3f5","sns":[],"c":"activity"},":rugby_football:":{"sn":":rugby_football:","cp":"1f3c9","sns":[],"c":"activity"},":running_shirt_with_sash:":{"sn":":running_shirt_with_sash:","cp":"1f3bd","sns":[],"c":"activity"},":saxophone:":{"sn":":saxophone:","cp":"1f3b7","sns":[],"c":"activity"},":second_place:":{"sn":":second_place:","cp":"1f948","sns":[":second_place_medal:"],"c":"activity"},":ski:":{"sn":":ski:","cp":"1f3bf","sns":[],"c":"activity"},":skier:":{"sn":":skier:","cp":"26f7","sns":[],"c":"activity"},":sled:":{"sn":":sled:","cp":"1f6f7","sns":[],"c":"activity"},":slot_machine:":{"sn":":slot_machine:","cp":"1f3b0","sns":[],"c":"activity"},":snowboarder:":{"sn":":snowboarder:","cp":"1f3c2","sns":[],"c":"activity"},":snowboarder_tone1:":{"sn":":snowboarder_tone1:","cp":"1f3c2-1f3fb","sns":[":snowboarder_light_skin_tone:"],"c":"activity"},":snowboarder_tone2:":{"sn":":snowboarder_tone2:","cp":"1f3c2-1f3fc","sns":[":snowboarder_medium_light_skin_tone:"],"c":"activity"},":snowboarder_tone3:":{"sn":":snowboarder_tone3:","cp":"1f3c2-1f3fd","sns":[":snowboarder_medium_skin_tone:"],"c":"activity"},":snowboarder_tone4:":{"sn":":snowboarder_tone4:","cp":"1f3c2-1f3fe","sns":[":snowboarder_medium_dark_skin_tone:"],"c":"activity"},":snowboarder_tone5:":{"sn":":snowboarder_tone5:","cp":"1f3c2-1f3ff","sns":[":snowboarder_dark_skin_tone:"],"c":"activity"},":soccer:":{"sn":":soccer:","cp":"26bd","sns":[],"c":"activity"},":tennis:":{"sn":":tennis:","cp":"1f3be","sns":[],"c":"activity"},":third_place:":{"sn":":third_place:","cp":"1f949","sns":[":third_place_medal:"],"c":"activity"},":ticket:":{"sn":":ticket:","cp":"1f3ab","sns":[],"c":"activity"},":tickets:":{"sn":":tickets:","cp":"1f39f","sns":[":admission_tickets:"],"c":"activity"},":trophy:":{"sn":":trophy:","cp":"1f3c6","sns":[],"c":"activity"},":trumpet:":{"sn":":trumpet:","cp":"1f3ba","sns":[],"c":"activity"},":video_game:":{"sn":":video_game:","cp":"1f3ae","sns":[],"c":"activity"},":violin:":{"sn":":violin:","cp":"1f3bb","sns":[],"c":"activity"},":volleyball:":{"sn":":volleyball:","cp":"1f3d0","sns":[],"c":"activity"},":woman_biking:":{"sn":":woman_biking:","cp":"1f6b4-200d-2640-fe0f","sns":[],"c":"activity"},":woman_biking_tone1:":{"sn":":woman_biking_tone1:","cp":"1f6b4-1f3fb-200d-2640-fe0f","sns":[":woman_biking_light_skin_tone:"],"c":"activity"},":woman_biking_tone2:":{"sn":":woman_biking_tone2:","cp":"1f6b4-1f3fc-200d-2640-fe0f","sns":[":woman_biking_medium_light_skin_tone:"],"c":"activity"},":woman_biking_tone3:":{"sn":":woman_biking_tone3:","cp":"1f6b4-1f3fd-200d-2640-fe0f","sns":[":woman_biking_medium_skin_tone:"],"c":"activity"},":woman_biking_tone4:":{"sn":":woman_biking_tone4:","cp":"1f6b4-1f3fe-200d-2640-fe0f","sns":[":woman_biking_medium_dark_skin_tone:"],"c":"activity"},":woman_biking_tone5:":{"sn":":woman_biking_tone5:","cp":"1f6b4-1f3ff-200d-2640-fe0f","sns":[":woman_biking_dark_skin_tone:"],"c":"activity"},":woman_bouncing_ball:":{"sn":":woman_bouncing_ball:","cp":"26f9-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_bouncing_ball_tone1:":{"sn":":woman_bouncing_ball_tone1:","cp":"26f9-1f3fb-200d-2640-fe0f","sns":[":woman_bouncing_ball_light_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone2:":{"sn":":woman_bouncing_ball_tone2:","cp":"26f9-1f3fc-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_light_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone3:":{"sn":":woman_bouncing_ball_tone3:","cp":"26f9-1f3fd-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone4:":{"sn":":woman_bouncing_ball_tone4:","cp":"26f9-1f3fe-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_dark_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone5:":{"sn":":woman_bouncing_ball_tone5:","cp":"26f9-1f3ff-200d-2640-fe0f","sns":[":woman_bouncing_ball_dark_skin_tone:"],"c":"activity"},":woman_cartwheeling:":{"sn":":woman_cartwheeling:","cp":"1f938-200d-2640-fe0f","sns":[],"c":"activity"},":woman_cartwheeling_tone1:":{"sn":":woman_cartwheeling_tone1:","cp":"1f938-1f3fb-200d-2640-fe0f","sns":[":woman_cartwheeling_light_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone2:":{"sn":":woman_cartwheeling_tone2:","cp":"1f938-1f3fc-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_light_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone3:":{"sn":":woman_cartwheeling_tone3:","cp":"1f938-1f3fd-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone4:":{"sn":":woman_cartwheeling_tone4:","cp":"1f938-1f3fe-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_dark_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone5:":{"sn":":woman_cartwheeling_tone5:","cp":"1f938-1f3ff-200d-2640-fe0f","sns":[":woman_cartwheeling_dark_skin_tone:"],"c":"activity"},":woman_climbing:":{"sn":":woman_climbing:","cp":"1f9d7-200d-2640-fe0f","sns":[],"c":"activity"},":woman_climbing_tone1:":{"sn":":woman_climbing_tone1:","cp":"1f9d7-1f3fb-200d-2640-fe0f","sns":[":woman_climbing_light_skin_tone:"],"c":"activity"},":woman_climbing_tone2:":{"sn":":woman_climbing_tone2:","cp":"1f9d7-1f3fc-200d-2640-fe0f","sns":[":woman_climbing_medium_light_skin_tone:"],"c":"activity"},":woman_climbing_tone3:":{"sn":":woman_climbing_tone3:","cp":"1f9d7-1f3fd-200d-2640-fe0f","sns":[":woman_climbing_medium_skin_tone:"],"c":"activity"},":woman_climbing_tone4:":{"sn":":woman_climbing_tone4:","cp":"1f9d7-1f3fe-200d-2640-fe0f","sns":[":woman_climbing_medium_dark_skin_tone:"],"c":"activity"},":woman_climbing_tone5:":{"sn":":woman_climbing_tone5:","cp":"1f9d7-1f3ff-200d-2640-fe0f","sns":[":woman_climbing_dark_skin_tone:"],"c":"activity"},":woman_golfing:":{"sn":":woman_golfing:","cp":"1f3cc-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_golfing_tone1:":{"sn":":woman_golfing_tone1:","cp":"1f3cc-1f3fb-200d-2640-fe0f","sns":[":woman_golfing_light_skin_tone:"],"c":"activity"},":woman_golfing_tone2:":{"sn":":woman_golfing_tone2:","cp":"1f3cc-1f3fc-200d-2640-fe0f","sns":[":woman_golfing_medium_light_skin_tone:"],"c":"activity"},":woman_golfing_tone3:":{"sn":":woman_golfing_tone3:","cp":"1f3cc-1f3fd-200d-2640-fe0f","sns":[":woman_golfing_medium_skin_tone:"],"c":"activity"},":woman_golfing_tone4:":{"sn":":woman_golfing_tone4:","cp":"1f3cc-1f3fe-200d-2640-fe0f","sns":[":woman_golfing_medium_dark_skin_tone:"],"c":"activity"},":woman_golfing_tone5:":{"sn":":woman_golfing_tone5:","cp":"1f3cc-1f3ff-200d-2640-fe0f","sns":[":woman_golfing_dark_skin_tone:"],"c":"activity"},":woman_in_lotus_position:":{"sn":":woman_in_lotus_position:","cp":"1f9d8-200d-2640-fe0f","sns":[],"c":"activity"},":woman_in_lotus_position_tone1:":{"sn":":woman_in_lotus_position_tone1:","cp":"1f9d8-1f3fb-200d-2640-fe0f","sns":[":woman_in_lotus_position_light_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone2:":{"sn":":woman_in_lotus_position_tone2:","cp":"1f9d8-1f3fc-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone3:":{"sn":":woman_in_lotus_position_tone3:","cp":"1f9d8-1f3fd-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone4:":{"sn":":woman_in_lotus_position_tone4:","cp":"1f9d8-1f3fe-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone5:":{"sn":":woman_in_lotus_position_tone5:","cp":"1f9d8-1f3ff-200d-2640-fe0f","sns":[":woman_in_lotus_position_dark_skin_tone:"],"c":"activity"},":woman_juggling:":{"sn":":woman_juggling:","cp":"1f939-200d-2640-fe0f","sns":[],"c":"activity"},":woman_juggling_tone1:":{"sn":":woman_juggling_tone1:","cp":"1f939-1f3fb-200d-2640-fe0f","sns":[":woman_juggling_light_skin_tone:"],"c":"activity"},":woman_juggling_tone2:":{"sn":":woman_juggling_tone2:","cp":"1f939-1f3fc-200d-2640-fe0f","sns":[":woman_juggling_medium_light_skin_tone:"],"c":"activity"},":woman_juggling_tone3:":{"sn":":woman_juggling_tone3:","cp":"1f939-1f3fd-200d-2640-fe0f","sns":[":woman_juggling_medium_skin_tone:"],"c":"activity"},":woman_juggling_tone4:":{"sn":":woman_juggling_tone4:","cp":"1f939-1f3fe-200d-2640-fe0f","sns":[":woman_juggling_medium_dark_skin_tone:"],"c":"activity"},":woman_juggling_tone5:":{"sn":":woman_juggling_tone5:","cp":"1f939-1f3ff-200d-2640-fe0f","sns":[":woman_juggling_dark_skin_tone:"],"c":"activity"},":woman_lifting_weights:":{"sn":":woman_lifting_weights:","cp":"1f3cb-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_lifting_weights_tone1:":{"sn":":woman_lifting_weights_tone1:","cp":"1f3cb-1f3fb-200d-2640-fe0f","sns":[":woman_lifting_weights_light_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone2:":{"sn":":woman_lifting_weights_tone2:","cp":"1f3cb-1f3fc-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_light_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone3:":{"sn":":woman_lifting_weights_tone3:","cp":"1f3cb-1f3fd-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone4:":{"sn":":woman_lifting_weights_tone4:","cp":"1f3cb-1f3fe-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_dark_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone5:":{"sn":":woman_lifting_weights_tone5:","cp":"1f3cb-1f3ff-200d-2640-fe0f","sns":[":woman_lifting_weights_dark_skin_tone:"],"c":"activity"},":woman_mountain_biking:":{"sn":":woman_mountain_biking:","cp":"1f6b5-200d-2640-fe0f","sns":[],"c":"activity"},":woman_mountain_biking_tone1:":{"sn":":woman_mountain_biking_tone1:","cp":"1f6b5-1f3fb-200d-2640-fe0f","sns":[":woman_mountain_biking_light_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone2:":{"sn":":woman_mountain_biking_tone2:","cp":"1f6b5-1f3fc-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_light_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone3:":{"sn":":woman_mountain_biking_tone3:","cp":"1f6b5-1f3fd-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone4:":{"sn":":woman_mountain_biking_tone4:","cp":"1f6b5-1f3fe-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_dark_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone5:":{"sn":":woman_mountain_biking_tone5:","cp":"1f6b5-1f3ff-200d-2640-fe0f","sns":[":woman_mountain_biking_dark_skin_tone:"],"c":"activity"},":woman_playing_handball:":{"sn":":woman_playing_handball:","cp":"1f93e-200d-2640-fe0f","sns":[],"c":"activity"},":woman_playing_handball_tone1:":{"sn":":woman_playing_handball_tone1:","cp":"1f93e-1f3fb-200d-2640-fe0f","sns":[":woman_playing_handball_light_skin_tone:"],"c":"activity"},":woman_playing_handball_tone2:":{"sn":":woman_playing_handball_tone2:","cp":"1f93e-1f3fc-200d-2640-fe0f","sns":[":woman_playing_handball_medium_light_skin_tone:"],"c":"activity"},":woman_playing_handball_tone3:":{"sn":":woman_playing_handball_tone3:","cp":"1f93e-1f3fd-200d-2640-fe0f","sns":[":woman_playing_handball_medium_skin_tone:"],"c":"activity"},":woman_playing_handball_tone4:":{"sn":":woman_playing_handball_tone4:","cp":"1f93e-1f3fe-200d-2640-fe0f","sns":[":woman_playing_handball_medium_dark_skin_tone:"],"c":"activity"},":woman_playing_handball_tone5:":{"sn":":woman_playing_handball_tone5:","cp":"1f93e-1f3ff-200d-2640-fe0f","sns":[":woman_playing_handball_dark_skin_tone:"],"c":"activity"},":woman_playing_water_polo:":{"sn":":woman_playing_water_polo:","cp":"1f93d-200d-2640-fe0f","sns":[],"c":"activity"},":woman_playing_water_polo_tone1:":{"sn":":woman_playing_water_polo_tone1:","cp":"1f93d-1f3fb-200d-2640-fe0f","sns":[":woman_playing_water_polo_light_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone2:":{"sn":":woman_playing_water_polo_tone2:","cp":"1f93d-1f3fc-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_light_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone3:":{"sn":":woman_playing_water_polo_tone3:","cp":"1f93d-1f3fd-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone4:":{"sn":":woman_playing_water_polo_tone4:","cp":"1f93d-1f3fe-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_dark_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone5:":{"sn":":woman_playing_water_polo_tone5:","cp":"1f93d-1f3ff-200d-2640-fe0f","sns":[":woman_playing_water_polo_dark_skin_tone:"],"c":"activity"},":woman_rowing_boat:":{"sn":":woman_rowing_boat:","cp":"1f6a3-200d-2640-fe0f","sns":[],"c":"activity"},":woman_rowing_boat_tone1:":{"sn":":woman_rowing_boat_tone1:","cp":"1f6a3-1f3fb-200d-2640-fe0f","sns":[":woman_rowing_boat_light_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone2:":{"sn":":woman_rowing_boat_tone2:","cp":"1f6a3-1f3fc-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_light_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone3:":{"sn":":woman_rowing_boat_tone3:","cp":"1f6a3-1f3fd-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone4:":{"sn":":woman_rowing_boat_tone4:","cp":"1f6a3-1f3fe-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_dark_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone5:":{"sn":":woman_rowing_boat_tone5:","cp":"1f6a3-1f3ff-200d-2640-fe0f","sns":[":woman_rowing_boat_dark_skin_tone:"],"c":"activity"},":woman_surfing:":{"sn":":woman_surfing:","cp":"1f3c4-200d-2640-fe0f","sns":[],"c":"activity"},":woman_surfing_tone1:":{"sn":":woman_surfing_tone1:","cp":"1f3c4-1f3fb-200d-2640-fe0f","sns":[":woman_surfing_light_skin_tone:"],"c":"activity"},":woman_surfing_tone2:":{"sn":":woman_surfing_tone2:","cp":"1f3c4-1f3fc-200d-2640-fe0f","sns":[":woman_surfing_medium_light_skin_tone:"],"c":"activity"},":woman_surfing_tone3:":{"sn":":woman_surfing_tone3:","cp":"1f3c4-1f3fd-200d-2640-fe0f","sns":[":woman_surfing_medium_skin_tone:"],"c":"activity"},":woman_surfing_tone4:":{"sn":":woman_surfing_tone4:","cp":"1f3c4-1f3fe-200d-2640-fe0f","sns":[":woman_surfing_medium_dark_skin_tone:"],"c":"activity"},":woman_surfing_tone5:":{"sn":":woman_surfing_tone5:","cp":"1f3c4-1f3ff-200d-2640-fe0f","sns":[":woman_surfing_dark_skin_tone:"],"c":"activity"},":woman_swimming:":{"sn":":woman_swimming:","cp":"1f3ca-200d-2640-fe0f","sns":[],"c":"activity"},":woman_swimming_tone1:":{"sn":":woman_swimming_tone1:","cp":"1f3ca-1f3fb-200d-2640-fe0f","sns":[":woman_swimming_light_skin_tone:"],"c":"activity"},":woman_swimming_tone2:":{"sn":":woman_swimming_tone2:","cp":"1f3ca-1f3fc-200d-2640-fe0f","sns":[":woman_swimming_medium_light_skin_tone:"],"c":"activity"},":woman_swimming_tone3:":{"sn":":woman_swimming_tone3:","cp":"1f3ca-1f3fd-200d-2640-fe0f","sns":[":woman_swimming_medium_skin_tone:"],"c":"activity"},":woman_swimming_tone4:":{"sn":":woman_swimming_tone4:","cp":"1f3ca-1f3fe-200d-2640-fe0f","sns":[":woman_swimming_medium_dark_skin_tone:"],"c":"activity"},":woman_swimming_tone5:":{"sn":":woman_swimming_tone5:","cp":"1f3ca-1f3ff-200d-2640-fe0f","sns":[":woman_swimming_dark_skin_tone:"],"c":"activity"},":women_wrestling:":{"sn":":women_wrestling:","cp":"1f93c-200d-2640-fe0f","sns":[],"c":"activity"}},"travel":{":aerial_tramway:":{"sn":":aerial_tramway:","cp":"1f6a1","sns":[],"c":"travel"},":airplane:":{"sn":":airplane:","cp":"2708","sns":[],"c":"travel"},":airplane_arriving:":{"sn":":airplane_arriving:","cp":"1f6ec","sns":[],"c":"travel"},":airplane_departure:":{"sn":":airplane_departure:","cp":"1f6eb","sns":[],"c":"travel"},":airplane_small:":{"sn":":airplane_small:","cp":"1f6e9","sns":[":small_airplane:"],"c":"travel"},":ambulance:":{"sn":":ambulance:","cp":"1f691","sns":[],"c":"travel"},":anchor:":{"sn":":anchor:","cp":"2693","sns":[],"c":"travel"},":articulated_lorry:":{"sn":":articulated_lorry:","cp":"1f69b","sns":[],"c":"travel"},":bank:":{"sn":":bank:","cp":"1f3e6","sns":[],"c":"travel"},":beach:":{"sn":":beach:","cp":"1f3d6","sns":[":beach_with_umbrella:"],"c":"travel"},":beach_umbrella:":{"sn":":beach_umbrella:","cp":"26f1","sns":[":umbrella_on_ground:"],"c":"travel"},":bike:":{"sn":":bike:","cp":"1f6b2","sns":[],"c":"travel"},":blue_car:":{"sn":":blue_car:","cp":"1f699","sns":[],"c":"travel"},":bridge_at_night:":{"sn":":bridge_at_night:","cp":"1f309","sns":[],"c":"travel"},":bullettrain_front:":{"sn":":bullettrain_front:","cp":"1f685","sns":[],"c":"travel"},":bullettrain_side:":{"sn":":bullettrain_side:","cp":"1f684","sns":[],"c":"travel"},":bus:":{"sn":":bus:","cp":"1f68c","sns":[],"c":"travel"},":busstop:":{"sn":":busstop:","cp":"1f68f","sns":[],"c":"travel"},":camping:":{"sn":":camping:","cp":"1f3d5","sns":[],"c":"travel"},":canoe:":{"sn":":canoe:","cp":"1f6f6","sns":[":kayak:"],"c":"travel"},":carousel_horse:":{"sn":":carousel_horse:","cp":"1f3a0","sns":[],"c":"travel"},":church:":{"sn":":church:","cp":"26ea","sns":[],"c":"travel"},":city_dusk:":{"sn":":city_dusk:","cp":"1f306","sns":[],"c":"travel"},":city_sunset:":{"sn":":city_sunset:","cp":"1f307","sns":[":city_sunrise:"],"c":"travel"},":cityscape:":{"sn":":cityscape:","cp":"1f3d9","sns":[],"c":"travel"},":classical_building:":{"sn":":classical_building:","cp":"1f3db","sns":[],"c":"travel"},":construction:":{"sn":":construction:","cp":"1f6a7","sns":[],"c":"travel"},":construction_site:":{"sn":":construction_site:","cp":"1f3d7","sns":[":building_construction:"],"c":"travel"},":convenience_store:":{"sn":":convenience_store:","cp":"1f3ea","sns":[],"c":"travel"},":cruise_ship:":{"sn":":cruise_ship:","cp":"1f6f3","sns":[":passenger_ship:"],"c":"travel"},":department_store:":{"sn":":department_store:","cp":"1f3ec","sns":[],"c":"travel"},":desert:":{"sn":":desert:","cp":"1f3dc","sns":[],"c":"travel"},":european_castle:":{"sn":":european_castle:","cp":"1f3f0","sns":[],"c":"travel"},":european_post_office:":{"sn":":european_post_office:","cp":"1f3e4","sns":[],"c":"travel"},":factory:":{"sn":":factory:","cp":"1f3ed","sns":[],"c":"travel"},":ferris_wheel:":{"sn":":ferris_wheel:","cp":"1f3a1","sns":[],"c":"travel"},":ferry:":{"sn":":ferry:","cp":"26f4","sns":[],"c":"travel"},":fire_engine:":{"sn":":fire_engine:","cp":"1f692","sns":[],"c":"travel"},":fireworks:":{"sn":":fireworks:","cp":"1f386","sns":[],"c":"travel"},":flying_saucer:":{"sn":":flying_saucer:","cp":"1f6f8","sns":[],"c":"travel"},":foggy:":{"sn":":foggy:","cp":"1f301","sns":[],"c":"travel"},":fountain:":{"sn":":fountain:","cp":"26f2","sns":[],"c":"travel"},":fuelpump:":{"sn":":fuelpump:","cp":"26fd","sns":[],"c":"travel"},":helicopter:":{"sn":":helicopter:","cp":"1f681","sns":[],"c":"travel"},":homes:":{"sn":":homes:","cp":"1f3d8","sns":[":house_buildings:"],"c":"travel"},":hospital:":{"sn":":hospital:","cp":"1f3e5","sns":[],"c":"travel"},":hotel:":{"sn":":hotel:","cp":"1f3e8","sns":[],"c":"travel"},":house:":{"sn":":house:","cp":"1f3e0","sns":[],"c":"travel"},":house_abandoned:":{"sn":":house_abandoned:","cp":"1f3da","sns":[":derelict_house_building:"],"c":"travel"},":house_with_garden:":{"sn":":house_with_garden:","cp":"1f3e1","sns":[],"c":"travel"},":island:":{"sn":":island:","cp":"1f3dd","sns":[":desert_island:"],"c":"travel"},":japan:":{"sn":":japan:","cp":"1f5fe","sns":[],"c":"travel"},":japanese_castle:":{"sn":":japanese_castle:","cp":"1f3ef","sns":[],"c":"travel"},":kaaba:":{"sn":":kaaba:","cp":"1f54b","sns":[],"c":"travel"},":light_rail:":{"sn":":light_rail:","cp":"1f688","sns":[],"c":"travel"},":love_hotel:":{"sn":":love_hotel:","cp":"1f3e9","sns":[],"c":"travel"},":map:":{"sn":":map:","cp":"1f5fa","sns":[":world_map:"],"c":"travel"},":metro:":{"sn":":metro:","cp":"1f687","sns":[],"c":"travel"},":milky_way:":{"sn":":milky_way:","cp":"1f30c","sns":[],"c":"travel"},":minibus:":{"sn":":minibus:","cp":"1f690","sns":[],"c":"travel"},":monorail:":{"sn":":monorail:","cp":"1f69d","sns":[],"c":"travel"},":mosque:":{"sn":":mosque:","cp":"1f54c","sns":[],"c":"travel"},":motor_scooter:":{"sn":":motor_scooter:","cp":"1f6f5","sns":[":motorbike:"],"c":"travel"},":motorboat:":{"sn":":motorboat:","cp":"1f6e5","sns":[],"c":"travel"},":motorcycle:":{"sn":":motorcycle:","cp":"1f3cd","sns":[":racing_motorcycle:"],"c":"travel"},":motorway:":{"sn":":motorway:","cp":"1f6e3","sns":[],"c":"travel"},":mount_fuji:":{"sn":":mount_fuji:","cp":"1f5fb","sns":[],"c":"travel"},":mountain:":{"sn":":mountain:","cp":"26f0","sns":[],"c":"travel"},":mountain_cableway:":{"sn":":mountain_cableway:","cp":"1f6a0","sns":[],"c":"travel"},":mountain_railway:":{"sn":":mountain_railway:","cp":"1f69e","sns":[],"c":"travel"},":mountain_snow:":{"sn":":mountain_snow:","cp":"1f3d4","sns":[":snow_capped_mountain:"],"c":"travel"},":moyai:":{"sn":":moyai:","cp":"1f5ff","sns":[],"c":"travel"},":night_with_stars:":{"sn":":night_with_stars:","cp":"1f303","sns":[],"c":"travel"},":office:":{"sn":":office:","cp":"1f3e2","sns":[],"c":"travel"},":oncoming_automobile:":{"sn":":oncoming_automobile:","cp":"1f698","sns":[],"c":"travel"},":oncoming_bus:":{"sn":":oncoming_bus:","cp":"1f68d","sns":[],"c":"travel"},":oncoming_police_car:":{"sn":":oncoming_police_car:","cp":"1f694","sns":[],"c":"travel"},":oncoming_taxi:":{"sn":":oncoming_taxi:","cp":"1f696","sns":[],"c":"travel"},":park:":{"sn":":park:","cp":"1f3de","sns":[":national_park:"],"c":"travel"},":police_car:":{"sn":":police_car:","cp":"1f693","sns":[],"c":"travel"},":post_office:":{"sn":":post_office:","cp":"1f3e3","sns":[],"c":"travel"},":race_car:":{"sn":":race_car:","cp":"1f3ce","sns":[":racing_car:"],"c":"travel"},":railway_car:":{"sn":":railway_car:","cp":"1f683","sns":[],"c":"travel"},":railway_track:":{"sn":":railway_track:","cp":"1f6e4","sns":[":railroad_track:"],"c":"travel"},":red_car:":{"sn":":red_car:","cp":"1f697","sns":[],"c":"travel"},":rice_scene:":{"sn":":rice_scene:","cp":"1f391","sns":[],"c":"travel"},":rocket:":{"sn":":rocket:","cp":"1f680","sns":[],"c":"travel"},":roller_coaster:":{"sn":":roller_coaster:","cp":"1f3a2","sns":[],"c":"travel"},":rotating_light:":{"sn":":rotating_light:","cp":"1f6a8","sns":[],"c":"travel"},":sailboat:":{"sn":":sailboat:","cp":"26f5","sns":[],"c":"travel"},":satellite_orbital:":{"sn":":satellite_orbital:","cp":"1f6f0","sns":[],"c":"travel"},":school:":{"sn":":school:","cp":"1f3eb","sns":[],"c":"travel"},":scooter:":{"sn":":scooter:","cp":"1f6f4","sns":[],"c":"travel"},":seat:":{"sn":":seat:","cp":"1f4ba","sns":[],"c":"travel"},":shinto_shrine:":{"sn":":shinto_shrine:","cp":"26e9","sns":[],"c":"travel"},":ship:":{"sn":":ship:","cp":"1f6a2","sns":[],"c":"travel"},":sparkler:":{"sn":":sparkler:","cp":"1f387","sns":[],"c":"travel"},":speedboat:":{"sn":":speedboat:","cp":"1f6a4","sns":[],"c":"travel"},":stadium:":{"sn":":stadium:","cp":"1f3df","sns":[],"c":"travel"},":stars:":{"sn":":stars:","cp":"1f320","sns":[],"c":"travel"},":station:":{"sn":":station:","cp":"1f689","sns":[],"c":"travel"},":statue_of_liberty:":{"sn":":statue_of_liberty:","cp":"1f5fd","sns":[],"c":"travel"},":steam_locomotive:":{"sn":":steam_locomotive:","cp":"1f682","sns":[],"c":"travel"},":sunrise:":{"sn":":sunrise:","cp":"1f305","sns":[],"c":"travel"},":sunrise_over_mountains:":{"sn":":sunrise_over_mountains:","cp":"1f304","sns":[],"c":"travel"},":suspension_railway:":{"sn":":suspension_railway:","cp":"1f69f","sns":[],"c":"travel"},":synagogue:":{"sn":":synagogue:","cp":"1f54d","sns":[],"c":"travel"},":taxi:":{"sn":":taxi:","cp":"1f695","sns":[],"c":"travel"},":tent:":{"sn":":tent:","cp":"26fa","sns":[],"c":"travel"},":tokyo_tower:":{"sn":":tokyo_tower:","cp":"1f5fc","sns":[],"c":"travel"},":tractor:":{"sn":":tractor:","cp":"1f69c","sns":[],"c":"travel"},":traffic_light:":{"sn":":traffic_light:","cp":"1f6a5","sns":[],"c":"travel"},":train2:":{"sn":":train2:","cp":"1f686","sns":[],"c":"travel"},":train:":{"sn":":train:","cp":"1f68b","sns":[],"c":"travel"},":tram:":{"sn":":tram:","cp":"1f68a","sns":[],"c":"travel"},":trolleybus:":{"sn":":trolleybus:","cp":"1f68e","sns":[],"c":"travel"},":truck:":{"sn":":truck:","cp":"1f69a","sns":[],"c":"travel"},":vertical_traffic_light:":{"sn":":vertical_traffic_light:","cp":"1f6a6","sns":[],"c":"travel"},":volcano:":{"sn":":volcano:","cp":"1f30b","sns":[],"c":"travel"},":wedding:":{"sn":":wedding:","cp":"1f492","sns":[],"c":"travel"}},"objects":{":alarm_clock:":{"sn":":alarm_clock:","cp":"23f0","sns":[],"c":"objects"},":alembic:":{"sn":":alembic:","cp":"2697","sns":[],"c":"objects"},":amphora:":{"sn":":amphora:","cp":"1f3fa","sns":[],"c":"objects"},":athletic_shoe:":{"sn":":athletic_shoe:","cp":"1f45f","sns":[],"c":"objects"},":balloon:":{"sn":":balloon:","cp":"1f388","sns":[],"c":"objects"},":ballot_box:":{"sn":":ballot_box:","cp":"1f5f3","sns":[":ballot_box_with_ballot:"],"c":"objects"},":bar_chart:":{"sn":":bar_chart:","cp":"1f4ca","sns":[],"c":"objects"},":barber:":{"sn":":barber:","cp":"1f488","sns":[],"c":"objects"},":bath:":{"sn":":bath:","cp":"1f6c0","sns":[],"c":"objects"},":bath_tone1:":{"sn":":bath_tone1:","cp":"1f6c0-1f3fb","sns":[],"c":"objects"},":bath_tone2:":{"sn":":bath_tone2:","cp":"1f6c0-1f3fc","sns":[],"c":"objects"},":bath_tone3:":{"sn":":bath_tone3:","cp":"1f6c0-1f3fd","sns":[],"c":"objects"},":bath_tone4:":{"sn":":bath_tone4:","cp":"1f6c0-1f3fe","sns":[],"c":"objects"},":bath_tone5:":{"sn":":bath_tone5:","cp":"1f6c0-1f3ff","sns":[],"c":"objects"},":bathtub:":{"sn":":bathtub:","cp":"1f6c1","sns":[],"c":"objects"},":battery:":{"sn":":battery:","cp":"1f50b","sns":[],"c":"objects"},":bed:":{"sn":":bed:","cp":"1f6cf","sns":[],"c":"objects"},":bellhop:":{"sn":":bellhop:","cp":"1f6ce","sns":[":bellhop_bell:"],"c":"objects"},":billed_cap:":{"sn":":billed_cap:","cp":"1f9e2","sns":[],"c":"objects"},":black_nib:":{"sn":":black_nib:","cp":"2712","sns":[],"c":"objects"},":blue_book:":{"sn":":blue_book:","cp":"1f4d8","sns":[],"c":"objects"},":bomb:":{"sn":":bomb:","cp":"1f4a3","sns":[],"c":"objects"},":book:":{"sn":":book:","cp":"1f4d6","sns":[],"c":"objects"},":bookmark:":{"sn":":bookmark:","cp":"1f516","sns":[],"c":"objects"},":bookmark_tabs:":{"sn":":bookmark_tabs:","cp":"1f4d1","sns":[],"c":"objects"},":books:":{"sn":":books:","cp":"1f4da","sns":[],"c":"objects"},":boot:":{"sn":":boot:","cp":"1f462","sns":[],"c":"objects"},":briefcase:":{"sn":":briefcase:","cp":"1f4bc","sns":[],"c":"objects"},":bulb:":{"sn":":bulb:","cp":"1f4a1","sns":[],"c":"objects"},":calendar:":{"sn":":calendar:","cp":"1f4c6","sns":[],"c":"objects"},":calendar_spiral:":{"sn":":calendar_spiral:","cp":"1f5d3","sns":[":spiral_calendar_pad:"],"c":"objects"},":calling:":{"sn":":calling:","cp":"1f4f2","sns":[],"c":"objects"},":camera:":{"sn":":camera:","cp":"1f4f7","sns":[],"c":"objects"},":camera_with_flash:":{"sn":":camera_with_flash:","cp":"1f4f8","sns":[],"c":"objects"},":candle:":{"sn":":candle:","cp":"1f56f","sns":[],"c":"objects"},":card_box:":{"sn":":card_box:","cp":"1f5c3","sns":[":card_file_box:"],"c":"objects"},":card_index:":{"sn":":card_index:","cp":"1f4c7","sns":[],"c":"objects"},":cd:":{"sn":":cd:","cp":"1f4bf","sns":[],"c":"objects"},":chains:":{"sn":":chains:","cp":"26d3","sns":[],"c":"objects"},":chart_with_downwards_trend:":{"sn":":chart_with_downwards_trend:","cp":"1f4c9","sns":[],"c":"objects"},":chart_with_upwards_trend:":{"sn":":chart_with_upwards_trend:","cp":"1f4c8","sns":[],"c":"objects"},":clipboard:":{"sn":":clipboard:","cp":"1f4cb","sns":[],"c":"objects"},":clock:":{"sn":":clock:","cp":"1f570","sns":[":mantlepiece_clock:"],"c":"objects"},":closed_book:":{"sn":":closed_book:","cp":"1f4d5","sns":[],"c":"objects"},":closed_lock_with_key:":{"sn":":closed_lock_with_key:","cp":"1f510","sns":[],"c":"objects"},":closed_umbrella:":{"sn":":closed_umbrella:","cp":"1f302","sns":[],"c":"objects"},":coat:":{"sn":":coat:","cp":"1f9e5","sns":[],"c":"objects"},":coffin:":{"sn":":coffin:","cp":"26b0","sns":[],"c":"objects"},":compression:":{"sn":":compression:","cp":"1f5dc","sns":[],"c":"objects"},":computer:":{"sn":":computer:","cp":"1f4bb","sns":[],"c":"objects"},":confetti_ball:":{"sn":":confetti_ball:","cp":"1f38a","sns":[],"c":"objects"},":control_knobs:":{"sn":":control_knobs:","cp":"1f39b","sns":[],"c":"objects"},":couch:":{"sn":":couch:","cp":"1f6cb","sns":[":couch_and_lamp:"],"c":"objects"},":crayon:":{"sn":":crayon:","cp":"1f58d","sns":[":lower_left_crayon:"],"c":"objects"},":credit_card:":{"sn":":credit_card:","cp":"1f4b3","sns":[],"c":"objects"},":crossed_swords:":{"sn":":crossed_swords:","cp":"2694","sns":[],"c":"objects"},":crown:":{"sn":":crown:","cp":"1f451","sns":[],"c":"objects"},":crystal_ball:":{"sn":":crystal_ball:","cp":"1f52e","sns":[],"c":"objects"},":dagger:":{"sn":":dagger:","cp":"1f5e1","sns":[":dagger_knife:"],"c":"objects"},":dark_sunglasses:":{"sn":":dark_sunglasses:","cp":"1f576","sns":[],"c":"objects"},":date:":{"sn":":date:","cp":"1f4c5","sns":[],"c":"objects"},":desktop:":{"sn":":desktop:","cp":"1f5a5","sns":[":desktop_computer:"],"c":"objects"},":dividers:":{"sn":":dividers:","cp":"1f5c2","sns":[":card_index_dividers:"],"c":"objects"},":dollar:":{"sn":":dollar:","cp":"1f4b5","sns":[],"c":"objects"},":dolls:":{"sn":":dolls:","cp":"1f38e","sns":[],"c":"objects"},":door:":{"sn":":door:","cp":"1f6aa","sns":[],"c":"objects"},":dress:":{"sn":":dress:","cp":"1f457","sns":[],"c":"objects"},":dvd:":{"sn":":dvd:","cp":"1f4c0","sns":[],"c":"objects"},":e-mail:":{"sn":":e-mail:","cp":"1f4e7","sns":[":email:"],"c":"objects"},":electric_plug:":{"sn":":electric_plug:","cp":"1f50c","sns":[],"c":"objects"},":envelope:":{"sn":":envelope:","cp":"2709","sns":[],"c":"objects"},":envelope_with_arrow:":{"sn":":envelope_with_arrow:","cp":"1f4e9","sns":[],"c":"objects"},":euro:":{"sn":":euro:","cp":"1f4b6","sns":[],"c":"objects"},":eyeglasses:":{"sn":":eyeglasses:","cp":"1f453","sns":[],"c":"objects"},":fax:":{"sn":":fax:","cp":"1f4e0","sns":[],"c":"objects"},":file_cabinet:":{"sn":":file_cabinet:","cp":"1f5c4","sns":[],"c":"objects"},":file_folder:":{"sn":":file_folder:","cp":"1f4c1","sns":[],"c":"objects"},":film_frames:":{"sn":":film_frames:","cp":"1f39e","sns":[],"c":"objects"},":flags:":{"sn":":flags:","cp":"1f38f","sns":[],"c":"objects"},":flashlight:":{"sn":":flashlight:","cp":"1f526","sns":[],"c":"objects"},":floppy_disk:":{"sn":":floppy_disk:","cp":"1f4be","sns":[],"c":"objects"},":frame_photo:":{"sn":":frame_photo:","cp":"1f5bc","sns":[":frame_with_picture:"],"c":"objects"},":gear:":{"sn":":gear:","cp":"2699","sns":[],"c":"objects"},":gem:":{"sn":":gem:","cp":"1f48e","sns":[],"c":"objects"},":gift:":{"sn":":gift:","cp":"1f381","sns":[],"c":"objects"},":gloves:":{"sn":":gloves:","cp":"1f9e4","sns":[],"c":"objects"},":green_book:":{"sn":":green_book:","cp":"1f4d7","sns":[],"c":"objects"},":gun:":{"sn":":gun:","cp":"1f52b","sns":[],"c":"objects"},":hammer:":{"sn":":hammer:","cp":"1f528","sns":[],"c":"objects"},":hammer_pick:":{"sn":":hammer_pick:","cp":"2692","sns":[":hammer_and_pick:"],"c":"objects"},":handbag:":{"sn":":handbag:","cp":"1f45c","sns":[],"c":"objects"},":high_heel:":{"sn":":high_heel:","cp":"1f460","sns":[],"c":"objects"},":hole:":{"sn":":hole:","cp":"1f573","sns":[],"c":"objects"},":hourglass:":{"sn":":hourglass:","cp":"231b","sns":[],"c":"objects"},":hourglass_flowing_sand:":{"sn":":hourglass_flowing_sand:","cp":"23f3","sns":[],"c":"objects"},":inbox_tray:":{"sn":":inbox_tray:","cp":"1f4e5","sns":[],"c":"objects"},":incoming_envelope:":{"sn":":incoming_envelope:","cp":"1f4e8","sns":[],"c":"objects"},":iphone:":{"sn":":iphone:","cp":"1f4f1","sns":[],"c":"objects"},":izakaya_lantern:":{"sn":":izakaya_lantern:","cp":"1f3ee","sns":[],"c":"objects"},":jeans:":{"sn":":jeans:","cp":"1f456","sns":[],"c":"objects"},":joystick:":{"sn":":joystick:","cp":"1f579","sns":[],"c":"objects"},":key2:":{"sn":":key2:","cp":"1f5dd","sns":[":old_key:"],"c":"objects"},":key:":{"sn":":key:","cp":"1f511","sns":[],"c":"objects"},":keyboard:":{"sn":":keyboard:","cp":"2328","sns":[],"c":"objects"},":kimono:":{"sn":":kimono:","cp":"1f458","sns":[],"c":"objects"},":knife:":{"sn":":knife:","cp":"1f52a","sns":[],"c":"objects"},":label:":{"sn":":label:","cp":"1f3f7","sns":[],"c":"objects"},":ledger:":{"sn":":ledger:","cp":"1f4d2","sns":[],"c":"objects"},":level_slider:":{"sn":":level_slider:","cp":"1f39a","sns":[],"c":"objects"},":link:":{"sn":":link:","cp":"1f517","sns":[],"c":"objects"},":lipstick:":{"sn":":lipstick:","cp":"1f484","sns":[],"c":"objects"},":lock:":{"sn":":lock:","cp":"1f512","sns":[],"c":"objects"},":lock_with_ink_pen:":{"sn":":lock_with_ink_pen:","cp":"1f50f","sns":[],"c":"objects"},":love_letter:":{"sn":":love_letter:","cp":"1f48c","sns":[],"c":"objects"},":mag:":{"sn":":mag:","cp":"1f50d","sns":[],"c":"objects"},":mag_right:":{"sn":":mag_right:","cp":"1f50e","sns":[],"c":"objects"},":mailbox:":{"sn":":mailbox:","cp":"1f4eb","sns":[],"c":"objects"},":mailbox_closed:":{"sn":":mailbox_closed:","cp":"1f4ea","sns":[],"c":"objects"},":mailbox_with_mail:":{"sn":":mailbox_with_mail:","cp":"1f4ec","sns":[],"c":"objects"},":mailbox_with_no_mail:":{"sn":":mailbox_with_no_mail:","cp":"1f4ed","sns":[],"c":"objects"},":mans_shoe:":{"sn":":mans_shoe:","cp":"1f45e","sns":[],"c":"people"},":microphone2:":{"sn":":microphone2:","cp":"1f399","sns":[":studio_microphone:"],"c":"objects"},":microscope:":{"sn":":microscope:","cp":"1f52c","sns":[],"c":"objects"},":minidisc:":{"sn":":minidisc:","cp":"1f4bd","sns":[],"c":"objects"},":money_with_wings:":{"sn":":money_with_wings:","cp":"1f4b8","sns":[],"c":"objects"},":moneybag:":{"sn":":moneybag:","cp":"1f4b0","sns":[],"c":"objects"},":mortar_board:":{"sn":":mortar_board:","cp":"1f393","sns":[],"c":"objects"},":mouse_three_button:":{"sn":":mouse_three_button:","cp":"1f5b1","sns":[":three_button_mouse:"],"c":"objects"},":movie_camera:":{"sn":":movie_camera:","cp":"1f3a5","sns":[],"c":"objects"},":necktie:":{"sn":":necktie:","cp":"1f454","sns":[],"c":"objects"},":newspaper2:":{"sn":":newspaper2:","cp":"1f5de","sns":[":rolled_up_newspaper:"],"c":"objects"},":newspaper:":{"sn":":newspaper:","cp":"1f4f0","sns":[],"c":"objects"},":notebook:":{"sn":":notebook:","cp":"1f4d3","sns":[],"c":"objects"},":notebook_with_decorative_cover:":{"sn":":notebook_with_decorative_cover:","cp":"1f4d4","sns":[],"c":"objects"},":notepad_spiral:":{"sn":":notepad_spiral:","cp":"1f5d2","sns":[":spiral_note_pad:"],"c":"objects"},":nut_and_bolt:":{"sn":":nut_and_bolt:","cp":"1f529","sns":[],"c":"objects"},":oil:":{"sn":":oil:","cp":"1f6e2","sns":[":oil_drum:"],"c":"objects"},":open_file_folder:":{"sn":":open_file_folder:","cp":"1f4c2","sns":[],"c":"objects"},":orange_book:":{"sn":":orange_book:","cp":"1f4d9","sns":[],"c":"objects"},":outbox_tray:":{"sn":":outbox_tray:","cp":"1f4e4","sns":[],"c":"objects"},":package:":{"sn":":package:","cp":"1f4e6","sns":[],"c":"objects"},":page_facing_up:":{"sn":":page_facing_up:","cp":"1f4c4","sns":[],"c":"objects"},":page_with_curl:":{"sn":":page_with_curl:","cp":"1f4c3","sns":[],"c":"objects"},":pager:":{"sn":":pager:","cp":"1f4df","sns":[],"c":"objects"},":paintbrush:":{"sn":":paintbrush:","cp":"1f58c","sns":[":lower_left_paintbrush:"],"c":"objects"},":paperclip:":{"sn":":paperclip:","cp":"1f4ce","sns":[],"c":"objects"},":paperclips:":{"sn":":paperclips:","cp":"1f587","sns":[":linked_paperclips:"],"c":"objects"},":pen_ballpoint:":{"sn":":pen_ballpoint:","cp":"1f58a","sns":[":lower_left_ballpoint_pen:"],"c":"objects"},":pen_fountain:":{"sn":":pen_fountain:","cp":"1f58b","sns":[":lower_left_fountain_pen:"],"c":"objects"},":pencil2:":{"sn":":pencil2:","cp":"270f","sns":[],"c":"objects"},":pencil:":{"sn":":pencil:","cp":"1f4dd","sns":[":memo:"],"c":"objects"},":person_in_bed_tone1:":{"sn":":person_in_bed_tone1:","cp":"1f6cc-1f3fb","sns":[":person_in_bed_light_skin_tone:"],"c":"objects"},":person_in_bed_tone2:":{"sn":":person_in_bed_tone2:","cp":"1f6cc-1f3fc","sns":[":person_in_bed_medium_light_skin_tone:"],"c":"objects"},":person_in_bed_tone3:":{"sn":":person_in_bed_tone3:","cp":"1f6cc-1f3fd","sns":[":person_in_bed_medium_skin_tone:"],"c":"objects"},":person_in_bed_tone4:":{"sn":":person_in_bed_tone4:","cp":"1f6cc-1f3fe","sns":[":person_in_bed_medium_dark_skin_tone:"],"c":"objects"},":person_in_bed_tone5:":{"sn":":person_in_bed_tone5:","cp":"1f6cc-1f3ff","sns":[":person_in_bed_dark_skin_tone:"],"c":"objects"},":pick:":{"sn":":pick:","cp":"26cf","sns":[],"c":"objects"},":pill:":{"sn":":pill:","cp":"1f48a","sns":[],"c":"objects"},":postal_horn:":{"sn":":postal_horn:","cp":"1f4ef","sns":[],"c":"objects"},":postbox:":{"sn":":postbox:","cp":"1f4ee","sns":[],"c":"objects"},":potable_water:":{"sn":":potable_water:","cp":"1f6b0","sns":[],"c":"objects"},":pouch:":{"sn":":pouch:","cp":"1f45d","sns":[],"c":"objects"},":pound:":{"sn":":pound:","cp":"1f4b7","sns":[],"c":"objects"},":prayer_beads:":{"sn":":prayer_beads:","cp":"1f4ff","sns":[],"c":"objects"},":printer:":{"sn":":printer:","cp":"1f5a8","sns":[],"c":"objects"},":projector:":{"sn":":projector:","cp":"1f4fd","sns":[":film_projector:"],"c":"objects"},":purse:":{"sn":":purse:","cp":"1f45b","sns":[],"c":"objects"},":pushpin:":{"sn":":pushpin:","cp":"1f4cc","sns":[],"c":"objects"},":radio:":{"sn":":radio:","cp":"1f4fb","sns":[],"c":"objects"},":ribbon:":{"sn":":ribbon:","cp":"1f380","sns":[],"c":"objects"},":ring:":{"sn":":ring:","cp":"1f48d","sns":[],"c":"objects"},":round_pushpin:":{"sn":":round_pushpin:","cp":"1f4cd","sns":[],"c":"objects"},":sandal:":{"sn":":sandal:","cp":"1f461","sns":[],"c":"objects"},":satellite:":{"sn":":satellite:","cp":"1f4e1","sns":[],"c":"objects"},":scales:":{"sn":":scales:","cp":"2696","sns":[],"c":"objects"},":scarf:":{"sn":":scarf:","cp":"1f9e3","sns":[],"c":"objects"},":school_satchel:":{"sn":":school_satchel:","cp":"1f392","sns":[],"c":"objects"},":scissors:":{"sn":":scissors:","cp":"2702","sns":[],"c":"objects"},":scroll:":{"sn":":scroll:","cp":"1f4dc","sns":[],"c":"objects"},":shield:":{"sn":":shield:","cp":"1f6e1","sns":[],"c":"objects"},":shirt:":{"sn":":shirt:","cp":"1f455","sns":[],"c":"objects"},":shopping_bags:":{"sn":":shopping_bags:","cp":"1f6cd","sns":[],"c":"objects"},":shopping_cart:":{"sn":":shopping_cart:","cp":"1f6d2","sns":[":shopping_trolley:"],"c":"objects"},":shower:":{"sn":":shower:","cp":"1f6bf","sns":[],"c":"objects"},":sleeping_accommodation:":{"sn":":sleeping_accommodation:","cp":"1f6cc","sns":[],"c":"objects"},":smoking:":{"sn":":smoking:","cp":"1f6ac","sns":[],"c":"objects"},":socks:":{"sn":":socks:","cp":"1f9e6","sns":[],"c":"objects"},":stopwatch:":{"sn":":stopwatch:","cp":"23f1","sns":[],"c":"objects"},":straight_ruler:":{"sn":":straight_ruler:","cp":"1f4cf","sns":[],"c":"objects"},":syringe:":{"sn":":syringe:","cp":"1f489","sns":[],"c":"objects"},":tada:":{"sn":":tada:","cp":"1f389","sns":[],"c":"objects"},":telephone:":{"sn":":telephone:","cp":"260e","sns":[],"c":"objects"},":telephone_receiver:":{"sn":":telephone_receiver:","cp":"1f4de","sns":[],"c":"objects"},":telescope:":{"sn":":telescope:","cp":"1f52d","sns":[],"c":"objects"},":thermometer:":{"sn":":thermometer:","cp":"1f321","sns":[],"c":"objects"},":timer:":{"sn":":timer:","cp":"23f2","sns":[":timer_clock:"],"c":"objects"},":toilet:":{"sn":":toilet:","cp":"1f6bd","sns":[],"c":"objects"},":tools:":{"sn":":tools:","cp":"1f6e0","sns":[":hammer_and_wrench:"],"c":"objects"},":tophat:":{"sn":":tophat:","cp":"1f3a9","sns":[],"c":"objects"},":trackball:":{"sn":":trackball:","cp":"1f5b2","sns":[],"c":"objects"},":triangular_ruler:":{"sn":":triangular_ruler:","cp":"1f4d0","sns":[],"c":"objects"},":tv:":{"sn":":tv:","cp":"1f4fa","sns":[],"c":"objects"},":unlock:":{"sn":":unlock:","cp":"1f513","sns":[],"c":"objects"},":urn:":{"sn":":urn:","cp":"26b1","sns":[":funeral_urn:"],"c":"objects"},":vhs:":{"sn":":vhs:","cp":"1f4fc","sns":[],"c":"objects"},":video_camera:":{"sn":":video_camera:","cp":"1f4f9","sns":[],"c":"objects"},":wastebasket:":{"sn":":wastebasket:","cp":"1f5d1","sns":[],"c":"objects"},":watch:":{"sn":":watch:","cp":"231a","sns":[],"c":"objects"},":wind_chime:":{"sn":":wind_chime:","cp":"1f390","sns":[],"c":"objects"},":womans_clothes:":{"sn":":womans_clothes:","cp":"1f45a","sns":[],"c":"objects"},":womans_hat:":{"sn":":womans_hat:","cp":"1f452","sns":[],"c":"objects"},":wrench:":{"sn":":wrench:","cp":"1f527","sns":[],"c":"objects"},":yen:":{"sn":":yen:","cp":"1f4b4","sns":[],"c":"objects"}},"nature":{":ant:":{"sn":":ant:","cp":"1f41c","sns":[],"c":"nature"},":baby_chick:":{"sn":":baby_chick:","cp":"1f424","sns":[],"c":"nature"},":bamboo:":{"sn":":bamboo:","cp":"1f38d","sns":[],"c":"nature"},":bat:":{"sn":":bat:","cp":"1f987","sns":[],"c":"nature"},":bear:":{"sn":":bear:","cp":"1f43b","sns":[],"c":"nature"},":bee:":{"sn":":bee:","cp":"1f41d","sns":[],"c":"nature"},":beetle:":{"sn":":beetle:","cp":"1f41e","sns":[],"c":"nature"},":bird:":{"sn":":bird:","cp":"1f426","sns":[],"c":"nature"},":blossom:":{"sn":":blossom:","cp":"1f33c","sns":[],"c":"nature"},":blowfish:":{"sn":":blowfish:","cp":"1f421","sns":[],"c":"nature"},":boar:":{"sn":":boar:","cp":"1f417","sns":[],"c":"nature"},":boom:":{"sn":":boom:","cp":"1f4a5","sns":[],"c":"nature"},":bouquet:":{"sn":":bouquet:","cp":"1f490","sns":[],"c":"nature"},":bug:":{"sn":":bug:","cp":"1f41b","sns":[],"c":"nature"},":butterfly:":{"sn":":butterfly:","cp":"1f98b","sns":[],"c":"nature"},":cactus:":{"sn":":cactus:","cp":"1f335","sns":[],"c":"nature"},":camel:":{"sn":":camel:","cp":"1f42b","sns":[],"c":"nature"},":cat2:":{"sn":":cat2:","cp":"1f408","sns":[],"c":"nature"},":cat:":{"sn":":cat:","cp":"1f431","sns":[],"c":"nature"},":cherry_blossom:":{"sn":":cherry_blossom:","cp":"1f338","sns":[],"c":"nature"},":chicken:":{"sn":":chicken:","cp":"1f414","sns":[],"c":"nature"},":chipmunk:":{"sn":":chipmunk:","cp":"1f43f","sns":[],"c":"nature"},":christmas_tree:":{"sn":":christmas_tree:","cp":"1f384","sns":[],"c":"nature"},":cloud:":{"sn":":cloud:","cp":"2601","sns":[],"c":"nature"},":cloud_lightning:":{"sn":":cloud_lightning:","cp":"1f329","sns":[":cloud_with_lightning:"],"c":"nature"},":cloud_rain:":{"sn":":cloud_rain:","cp":"1f327","sns":[":cloud_with_rain:"],"c":"nature"},":cloud_snow:":{"sn":":cloud_snow:","cp":"1f328","sns":[":cloud_with_snow:"],"c":"nature"},":cloud_tornado:":{"sn":":cloud_tornado:","cp":"1f32a","sns":[":cloud_with_tornado:"],"c":"nature"},":comet:":{"sn":":comet:","cp":"2604","sns":[],"c":"nature"},":cow2:":{"sn":":cow2:","cp":"1f404","sns":[],"c":"nature"},":cow:":{"sn":":cow:","cp":"1f42e","sns":[],"c":"nature"},":crab:":{"sn":":crab:","cp":"1f980","sns":[],"c":"nature"},":crescent_moon:":{"sn":":crescent_moon:","cp":"1f319","sns":[],"c":"nature"},":cricket:":{"sn":":cricket:","cp":"1f997","sns":[],"c":"nature"},":crocodile:":{"sn":":crocodile:","cp":"1f40a","sns":[],"c":"nature"},":dash:":{"sn":":dash:","cp":"1f4a8","sns":[],"c":"nature"},":deciduous_tree:":{"sn":":deciduous_tree:","cp":"1f333","sns":[],"c":"nature"},":deer:":{"sn":":deer:","cp":"1f98c","sns":[],"c":"nature"},":dizzy:":{"sn":":dizzy:","cp":"1f4ab","sns":[],"c":"nature"},":dog2:":{"sn":":dog2:","cp":"1f415","sns":[],"c":"nature"},":dog:":{"sn":":dog:","cp":"1f436","sns":[],"c":"nature"},":dolphin:":{"sn":":dolphin:","cp":"1f42c","sns":[],"c":"nature"},":dove:":{"sn":":dove:","cp":"1f54a","sns":[":dove_of_peace:"],"c":"nature"},":dragon:":{"sn":":dragon:","cp":"1f409","sns":[],"c":"nature"},":dragon_face:":{"sn":":dragon_face:","cp":"1f432","sns":[],"c":"nature"},":dromedary_camel:":{"sn":":dromedary_camel:","cp":"1f42a","sns":[],"c":"nature"},":droplet:":{"sn":":droplet:","cp":"1f4a7","sns":[],"c":"nature"},":duck:":{"sn":":duck:","cp":"1f986","sns":[],"c":"nature"},":eagle:":{"sn":":eagle:","cp":"1f985","sns":[],"c":"nature"},":ear_of_rice:":{"sn":":ear_of_rice:","cp":"1f33e","sns":[],"c":"nature"},":earth_africa:":{"sn":":earth_africa:","cp":"1f30d","sns":[],"c":"nature"},":earth_americas:":{"sn":":earth_americas:","cp":"1f30e","sns":[],"c":"nature"},":earth_asia:":{"sn":":earth_asia:","cp":"1f30f","sns":[],"c":"nature"},":elephant:":{"sn":":elephant:","cp":"1f418","sns":[],"c":"nature"},":evergreen_tree:":{"sn":":evergreen_tree:","cp":"1f332","sns":[],"c":"nature"},":fallen_leaf:":{"sn":":fallen_leaf:","cp":"1f342","sns":[],"c":"nature"},":feet:":{"sn":":feet:","cp":"1f43e","sns":[":paw_prints:"],"c":"nature"},":fire:":{"sn":":fire:","cp":"1f525","sns":[":flame:"],"c":"nature"},":first_quarter_moon:":{"sn":":first_quarter_moon:","cp":"1f313","sns":[],"c":"nature"},":first_quarter_moon_with_face:":{"sn":":first_quarter_moon_with_face:","cp":"1f31b","sns":[],"c":"nature"},":fish:":{"sn":":fish:","cp":"1f41f","sns":[],"c":"nature"},":fog:":{"sn":":fog:","cp":"1f32b","sns":[],"c":"nature"},":four_leaf_clover:":{"sn":":four_leaf_clover:","cp":"1f340","sns":[],"c":"nature"},":fox:":{"sn":":fox:","cp":"1f98a","sns":[":fox_face:"],"c":"nature"},":frog:":{"sn":":frog:","cp":"1f438","sns":[],"c":"nature"},":full_moon:":{"sn":":full_moon:","cp":"1f315","sns":[],"c":"nature"},":full_moon_with_face:":{"sn":":full_moon_with_face:","cp":"1f31d","sns":[],"c":"nature"},":giraffe:":{"sn":":giraffe:","cp":"1f992","sns":[],"c":"nature"},":goat:":{"sn":":goat:","cp":"1f410","sns":[],"c":"nature"},":gorilla:":{"sn":":gorilla:","cp":"1f98d","sns":[],"c":"nature"},":hamster:":{"sn":":hamster:","cp":"1f439","sns":[],"c":"nature"},":hatched_chick:":{"sn":":hatched_chick:","cp":"1f425","sns":[],"c":"nature"},":hatching_chick:":{"sn":":hatching_chick:","cp":"1f423","sns":[],"c":"nature"},":hear_no_evil:":{"sn":":hear_no_evil:","cp":"1f649","sns":[],"c":"nature"},":hedgehog:":{"sn":":hedgehog:","cp":"1f994","sns":[],"c":"nature"},":herb:":{"sn":":herb:","cp":"1f33f","sns":[],"c":"nature"},":hibiscus:":{"sn":":hibiscus:","cp":"1f33a","sns":[],"c":"nature"},":horse:":{"sn":":horse:","cp":"1f434","sns":[],"c":"nature"},":koala:":{"sn":":koala:","cp":"1f428","sns":[],"c":"nature"},":last_quarter_moon:":{"sn":":last_quarter_moon:","cp":"1f317","sns":[],"c":"nature"},":last_quarter_moon_with_face:":{"sn":":last_quarter_moon_with_face:","cp":"1f31c","sns":[],"c":"nature"},":leaves:":{"sn":":leaves:","cp":"1f343","sns":[],"c":"nature"},":leopard:":{"sn":":leopard:","cp":"1f406","sns":[],"c":"nature"},":lion_face:":{"sn":":lion_face:","cp":"1f981","sns":[":lion:"],"c":"nature"},":lizard:":{"sn":":lizard:","cp":"1f98e","sns":[],"c":"nature"},":maple_leaf:":{"sn":":maple_leaf:","cp":"1f341","sns":[],"c":"nature"},":monkey:":{"sn":":monkey:","cp":"1f412","sns":[],"c":"nature"},":monkey_face:":{"sn":":monkey_face:","cp":"1f435","sns":[],"c":"nature"},":mouse2:":{"sn":":mouse2:","cp":"1f401","sns":[],"c":"nature"},":mouse:":{"sn":":mouse:","cp":"1f42d","sns":[],"c":"nature"},":mushroom:":{"sn":":mushroom:","cp":"1f344","sns":[],"c":"nature"},":new_moon:":{"sn":":new_moon:","cp":"1f311","sns":[],"c":"nature"},":new_moon_with_face:":{"sn":":new_moon_with_face:","cp":"1f31a","sns":[],"c":"nature"},":ocean:":{"sn":":ocean:","cp":"1f30a","sns":[],"c":"nature"},":octopus:":{"sn":":octopus:","cp":"1f419","sns":[],"c":"nature"},":owl:":{"sn":":owl:","cp":"1f989","sns":[],"c":"nature"},":ox:":{"sn":":ox:","cp":"1f402","sns":[],"c":"nature"},":palm_tree:":{"sn":":palm_tree:","cp":"1f334","sns":[],"c":"nature"},":panda_face:":{"sn":":panda_face:","cp":"1f43c","sns":[],"c":"nature"},":partly_sunny:":{"sn":":partly_sunny:","cp":"26c5","sns":[],"c":"nature"},":penguin:":{"sn":":penguin:","cp":"1f427","sns":[],"c":"nature"},":pig2:":{"sn":":pig2:","cp":"1f416","sns":[],"c":"nature"},":pig:":{"sn":":pig:","cp":"1f437","sns":[],"c":"nature"},":pig_nose:":{"sn":":pig_nose:","cp":"1f43d","sns":[],"c":"nature"},":poodle:":{"sn":":poodle:","cp":"1f429","sns":[],"c":"nature"},":rabbit2:":{"sn":":rabbit2:","cp":"1f407","sns":[],"c":"nature"},":rabbit:":{"sn":":rabbit:","cp":"1f430","sns":[],"c":"nature"},":racehorse:":{"sn":":racehorse:","cp":"1f40e","sns":[],"c":"nature"},":rainbow:":{"sn":":rainbow:","cp":"1f308","sns":[],"c":"nature"},":ram:":{"sn":":ram:","cp":"1f40f","sns":[],"c":"nature"},":rat:":{"sn":":rat:","cp":"1f400","sns":[],"c":"nature"},":rhino:":{"sn":":rhino:","cp":"1f98f","sns":[":rhinoceros:"],"c":"nature"},":rooster:":{"sn":":rooster:","cp":"1f413","sns":[],"c":"nature"},":rose:":{"sn":":rose:","cp":"1f339","sns":[],"c":"nature"},":sauropod:":{"sn":":sauropod:","cp":"1f995","sns":[],"c":"nature"},":scorpion:":{"sn":":scorpion:","cp":"1f982","sns":[],"c":"nature"},":see_no_evil:":{"sn":":see_no_evil:","cp":"1f648","sns":[],"c":"nature"},":seedling:":{"sn":":seedling:","cp":"1f331","sns":[],"c":"nature"},":shamrock:":{"sn":":shamrock:","cp":"2618","sns":[],"c":"nature"},":shark:":{"sn":":shark:","cp":"1f988","sns":[],"c":"nature"},":sheep:":{"sn":":sheep:","cp":"1f411","sns":[],"c":"nature"},":shell:":{"sn":":shell:","cp":"1f41a","sns":[],"c":"nature"},":shrimp:":{"sn":":shrimp:","cp":"1f990","sns":[],"c":"nature"},":snail:":{"sn":":snail:","cp":"1f40c","sns":[],"c":"nature"},":snake:":{"sn":":snake:","cp":"1f40d","sns":[],"c":"nature"},":snowflake:":{"sn":":snowflake:","cp":"2744","sns":[],"c":"nature"},":snowman2:":{"sn":":snowman2:","cp":"2603","sns":[],"c":"nature"},":snowman:":{"sn":":snowman:","cp":"26c4","sns":[],"c":"nature"},":sparkles:":{"sn":":sparkles:","cp":"2728","sns":[],"c":"nature"},":speak_no_evil:":{"sn":":speak_no_evil:","cp":"1f64a","sns":[],"c":"nature"},":spider:":{"sn":":spider:","cp":"1f577","sns":[],"c":"nature"},":spider_web:":{"sn":":spider_web:","cp":"1f578","sns":[],"c":"nature"},":squid:":{"sn":":squid:","cp":"1f991","sns":[],"c":"nature"},":star2:":{"sn":":star2:","cp":"1f31f","sns":[],"c":"nature"},":star:":{"sn":":star:","cp":"2b50","sns":[],"c":"nature"},":sun_with_face:":{"sn":":sun_with_face:","cp":"1f31e","sns":[],"c":"nature"},":sunflower:":{"sn":":sunflower:","cp":"1f33b","sns":[],"c":"nature"},":sunny:":{"sn":":sunny:","cp":"2600","sns":[],"c":"nature"},":sweat_drops:":{"sn":":sweat_drops:","cp":"1f4a6","sns":[],"c":"nature"},":t_rex:":{"sn":":t_rex:","cp":"1f996","sns":[],"c":"nature"},":tanabata_tree:":{"sn":":tanabata_tree:","cp":"1f38b","sns":[],"c":"nature"},":thunder_cloud_rain:":{"sn":":thunder_cloud_rain:","cp":"26c8","sns":[":thunder_cloud_and_rain:"],"c":"nature"},":tiger2:":{"sn":":tiger2:","cp":"1f405","sns":[],"c":"nature"},":tiger:":{"sn":":tiger:","cp":"1f42f","sns":[],"c":"nature"},":tropical_fish:":{"sn":":tropical_fish:","cp":"1f420","sns":[],"c":"nature"},":tulip:":{"sn":":tulip:","cp":"1f337","sns":[],"c":"nature"},":turkey:":{"sn":":turkey:","cp":"1f983","sns":[],"c":"nature"},":turtle:":{"sn":":turtle:","cp":"1f422","sns":[],"c":"nature"},":umbrella2:":{"sn":":umbrella2:","cp":"2602","sns":[],"c":"nature"},":umbrella:":{"sn":":umbrella:","cp":"2614","sns":[],"c":"nature"},":unicorn:":{"sn":":unicorn:","cp":"1f984","sns":[":unicorn_face:"],"c":"nature"},":waning_crescent_moon:":{"sn":":waning_crescent_moon:","cp":"1f318","sns":[],"c":"nature"},":waning_gibbous_moon:":{"sn":":waning_gibbous_moon:","cp":"1f316","sns":[],"c":"nature"},":water_buffalo:":{"sn":":water_buffalo:","cp":"1f403","sns":[],"c":"nature"},":waxing_crescent_moon:":{"sn":":waxing_crescent_moon:","cp":"1f312","sns":[],"c":"nature"},":waxing_gibbous_moon:":{"sn":":waxing_gibbous_moon:","cp":"1f314","sns":[],"c":"nature"},":whale2:":{"sn":":whale2:","cp":"1f40b","sns":[],"c":"nature"},":whale:":{"sn":":whale:","cp":"1f433","sns":[],"c":"nature"},":white_sun_cloud:":{"sn":":white_sun_cloud:","cp":"1f325","sns":[":white_sun_behind_cloud:"],"c":"nature"},":white_sun_rain_cloud:":{"sn":":white_sun_rain_cloud:","cp":"1f326","sns":[":white_sun_behind_cloud_with_rain:"],"c":"nature"},":white_sun_small_cloud:":{"sn":":white_sun_small_cloud:","cp":"1f324","sns":[":white_sun_with_small_cloud:"],"c":"nature"},":wilted_rose:":{"sn":":wilted_rose:","cp":"1f940","sns":[":wilted_flower:"],"c":"nature"},":wind_blowing_face:":{"sn":":wind_blowing_face:","cp":"1f32c","sns":[],"c":"nature"},":wolf:":{"sn":":wolf:","cp":"1f43a","sns":[],"c":"nature"},":zap:":{"sn":":zap:","cp":"26a1","sns":[],"c":"nature"},":zebra:":{"sn":":zebra:","cp":"1f993","sns":[],"c":"nature"}},"food":{":apple:":{"sn":":apple:","cp":"1f34e","sns":[],"c":"food"},":avocado:":{"sn":":avocado:","cp":"1f951","sns":[],"c":"food"},":baby_bottle:":{"sn":":baby_bottle:","cp":"1f37c","sns":[],"c":"food"},":bacon:":{"sn":":bacon:","cp":"1f953","sns":[],"c":"food"},":banana:":{"sn":":banana:","cp":"1f34c","sns":[],"c":"food"},":beer:":{"sn":":beer:","cp":"1f37a","sns":[],"c":"food"},":beers:":{"sn":":beers:","cp":"1f37b","sns":[],"c":"food"},":bento:":{"sn":":bento:","cp":"1f371","sns":[],"c":"food"},":birthday:":{"sn":":birthday:","cp":"1f382","sns":[],"c":"food"},":bowl_with_spoon:":{"sn":":bowl_with_spoon:","cp":"1f963","sns":[],"c":"food"},":bread:":{"sn":":bread:","cp":"1f35e","sns":[],"c":"food"},":broccoli:":{"sn":":broccoli:","cp":"1f966","sns":[],"c":"food"},":burrito:":{"sn":":burrito:","cp":"1f32f","sns":[],"c":"food"},":cake:":{"sn":":cake:","cp":"1f370","sns":[],"c":"food"},":candy:":{"sn":":candy:","cp":"1f36c","sns":[],"c":"food"},":canned_food:":{"sn":":canned_food:","cp":"1f96b","sns":[],"c":"food"},":carrot:":{"sn":":carrot:","cp":"1f955","sns":[],"c":"food"},":champagne:":{"sn":":champagne:","cp":"1f37e","sns":[":bottle_with_popping_cork:"],"c":"food"},":champagne_glass:":{"sn":":champagne_glass:","cp":"1f942","sns":[":clinking_glass:"],"c":"food"},":cheese:":{"sn":":cheese:","cp":"1f9c0","sns":[":cheese_wedge:"],"c":"food"},":cherries:":{"sn":":cherries:","cp":"1f352","sns":[],"c":"food"},":chestnut:":{"sn":":chestnut:","cp":"1f330","sns":[],"c":"food"},":chocolate_bar:":{"sn":":chocolate_bar:","cp":"1f36b","sns":[],"c":"food"},":chopsticks:":{"sn":":chopsticks:","cp":"1f962","sns":[],"c":"food"},":cocktail:":{"sn":":cocktail:","cp":"1f378","sns":[],"c":"food"},":coconut:":{"sn":":coconut:","cp":"1f965","sns":[],"c":"food"},":coffee:":{"sn":":coffee:","cp":"2615","sns":[],"c":"food"},":cookie:":{"sn":":cookie:","cp":"1f36a","sns":[],"c":"food"},":cooking:":{"sn":":cooking:","cp":"1f373","sns":[],"c":"food"},":corn:":{"sn":":corn:","cp":"1f33d","sns":[],"c":"food"},":croissant:":{"sn":":croissant:","cp":"1f950","sns":[],"c":"food"},":cucumber:":{"sn":":cucumber:","cp":"1f952","sns":[],"c":"food"},":cup_with_straw:":{"sn":":cup_with_straw:","cp":"1f964","sns":[],"c":"food"},":curry:":{"sn":":curry:","cp":"1f35b","sns":[],"c":"food"},":custard:":{"sn":":custard:","cp":"1f36e","sns":[":pudding:",":flan:"],"c":"food"},":cut_of_meat:":{"sn":":cut_of_meat:","cp":"1f969","sns":[],"c":"food"},":dango:":{"sn":":dango:","cp":"1f361","sns":[],"c":"food"},":doughnut:":{"sn":":doughnut:","cp":"1f369","sns":[],"c":"food"},":dumpling:":{"sn":":dumpling:","cp":"1f95f","sns":[],"c":"food"},":egg:":{"sn":":egg:","cp":"1f95a","sns":[],"c":"food"},":eggplant:":{"sn":":eggplant:","cp":"1f346","sns":[],"c":"food"},":fish_cake:":{"sn":":fish_cake:","cp":"1f365","sns":[],"c":"food"},":fork_and_knife:":{"sn":":fork_and_knife:","cp":"1f374","sns":[],"c":"food"},":fork_knife_plate:":{"sn":":fork_knife_plate:","cp":"1f37d","sns":[":fork_and_knife_with_plate:"],"c":"food"},":fortune_cookie:":{"sn":":fortune_cookie:","cp":"1f960","sns":[],"c":"food"},":french_bread:":{"sn":":french_bread:","cp":"1f956","sns":[":baguette_bread:"],"c":"food"},":fried_shrimp:":{"sn":":fried_shrimp:","cp":"1f364","sns":[],"c":"food"},":fries:":{"sn":":fries:","cp":"1f35f","sns":[],"c":"food"},":grapes:":{"sn":":grapes:","cp":"1f347","sns":[],"c":"food"},":green_apple:":{"sn":":green_apple:","cp":"1f34f","sns":[],"c":"food"},":hamburger:":{"sn":":hamburger:","cp":"1f354","sns":[],"c":"food"},":honey_pot:":{"sn":":honey_pot:","cp":"1f36f","sns":[],"c":"food"},":hot_pepper:":{"sn":":hot_pepper:","cp":"1f336","sns":[],"c":"food"},":hotdog:":{"sn":":hotdog:","cp":"1f32d","sns":[":hot_dog:"],"c":"food"},":ice_cream:":{"sn":":ice_cream:","cp":"1f368","sns":[],"c":"food"},":icecream:":{"sn":":icecream:","cp":"1f366","sns":[],"c":"food"},":kiwi:":{"sn":":kiwi:","cp":"1f95d","sns":[":kiwifruit:"],"c":"food"},":lemon:":{"sn":":lemon:","cp":"1f34b","sns":[],"c":"food"},":lollipop:":{"sn":":lollipop:","cp":"1f36d","sns":[],"c":"food"},":meat_on_bone:":{"sn":":meat_on_bone:","cp":"1f356","sns":[],"c":"food"},":melon:":{"sn":":melon:","cp":"1f348","sns":[],"c":"food"},":milk:":{"sn":":milk:","cp":"1f95b","sns":[":glass_of_milk:"],"c":"food"},":oden:":{"sn":":oden:","cp":"1f362","sns":[],"c":"food"},":pancakes:":{"sn":":pancakes:","cp":"1f95e","sns":[],"c":"food"},":peach:":{"sn":":peach:","cp":"1f351","sns":[],"c":"food"},":peanuts:":{"sn":":peanuts:","cp":"1f95c","sns":[":shelled_peanut:"],"c":"food"},":pear:":{"sn":":pear:","cp":"1f350","sns":[],"c":"food"},":pie:":{"sn":":pie:","cp":"1f967","sns":[],"c":"food"},":pineapple:":{"sn":":pineapple:","cp":"1f34d","sns":[],"c":"food"},":pizza:":{"sn":":pizza:","cp":"1f355","sns":[],"c":"food"},":popcorn:":{"sn":":popcorn:","cp":"1f37f","sns":[],"c":"food"},":potato:":{"sn":":potato:","cp":"1f954","sns":[],"c":"food"},":poultry_leg:":{"sn":":poultry_leg:","cp":"1f357","sns":[],"c":"food"},":pretzel:":{"sn":":pretzel:","cp":"1f968","sns":[],"c":"food"},":ramen:":{"sn":":ramen:","cp":"1f35c","sns":[],"c":"food"},":rice:":{"sn":":rice:","cp":"1f35a","sns":[],"c":"food"},":rice_ball:":{"sn":":rice_ball:","cp":"1f359","sns":[],"c":"food"},":rice_cracker:":{"sn":":rice_cracker:","cp":"1f358","sns":[],"c":"food"},":sake:":{"sn":":sake:","cp":"1f376","sns":[],"c":"food"},":salad:":{"sn":":salad:","cp":"1f957","sns":[":green_salad:"],"c":"food"},":sandwich:":{"sn":":sandwich:","cp":"1f96a","sns":[],"c":"food"},":shallow_pan_of_food:":{"sn":":shallow_pan_of_food:","cp":"1f958","sns":[":paella:"],"c":"food"},":shaved_ice:":{"sn":":shaved_ice:","cp":"1f367","sns":[],"c":"food"},":spaghetti:":{"sn":":spaghetti:","cp":"1f35d","sns":[],"c":"food"},":spoon:":{"sn":":spoon:","cp":"1f944","sns":[],"c":"food"},":stew:":{"sn":":stew:","cp":"1f372","sns":[],"c":"food"},":strawberry:":{"sn":":strawberry:","cp":"1f353","sns":[],"c":"food"},":stuffed_flatbread:":{"sn":":stuffed_flatbread:","cp":"1f959","sns":[":stuffed_pita:"],"c":"food"},":sushi:":{"sn":":sushi:","cp":"1f363","sns":[],"c":"food"},":sweet_potato:":{"sn":":sweet_potato:","cp":"1f360","sns":[],"c":"food"},":taco:":{"sn":":taco:","cp":"1f32e","sns":[],"c":"food"},":takeout_box:":{"sn":":takeout_box:","cp":"1f961","sns":[],"c":"food"},":tangerine:":{"sn":":tangerine:","cp":"1f34a","sns":[],"c":"food"},":tea:":{"sn":":tea:","cp":"1f375","sns":[],"c":"food"},":tomato:":{"sn":":tomato:","cp":"1f345","sns":[],"c":"food"},":tropical_drink:":{"sn":":tropical_drink:","cp":"1f379","sns":[],"c":"food"},":tumbler_glass:":{"sn":":tumbler_glass:","cp":"1f943","sns":[":whisky:"],"c":"food"},":watermelon:":{"sn":":watermelon:","cp":"1f349","sns":[],"c":"food"},":wine_glass:":{"sn":":wine_glass:","cp":"1f377","sns":[],"c":"food"}},"symbols":{":100:":{"sn":":100:","cp":"1f4af","sns":[],"c":"symbols"},":1234:":{"sn":":1234:","cp":"1f522","sns":[],"c":"symbols"},":a:":{"sn":":a:","cp":"1f170","sns":[],"c":"symbols"},":ab:":{"sn":":ab:","cp":"1f18e","sns":[],"c":"symbols"},":abc:":{"sn":":abc:","cp":"1f524","sns":[],"c":"symbols"},":abcd:":{"sn":":abcd:","cp":"1f521","sns":[],"c":"symbols"},":accept:":{"sn":":accept:","cp":"1f251","sns":[],"c":"symbols"},":anger:":{"sn":":anger:","cp":"1f4a2","sns":[],"c":"symbols"},":anger_right:":{"sn":":anger_right:","cp":"1f5ef","sns":[":right_anger_bubble:"],"c":"symbols"},":aquarius:":{"sn":":aquarius:","cp":"2652","sns":[],"c":"symbols"},":aries:":{"sn":":aries:","cp":"2648","sns":[],"c":"symbols"},":arrow_backward:":{"sn":":arrow_backward:","cp":"25c0","sns":[],"c":"symbols"},":arrow_double_down:":{"sn":":arrow_double_down:","cp":"23ec","sns":[],"c":"symbols"},":arrow_double_up:":{"sn":":arrow_double_up:","cp":"23eb","sns":[],"c":"symbols"},":arrow_down:":{"sn":":arrow_down:","cp":"2b07","sns":[],"c":"symbols"},":arrow_down_small:":{"sn":":arrow_down_small:","cp":"1f53d","sns":[],"c":"symbols"},":arrow_forward:":{"sn":":arrow_forward:","cp":"25b6","sns":[],"c":"symbols"},":arrow_heading_down:":{"sn":":arrow_heading_down:","cp":"2935","sns":[],"c":"symbols"},":arrow_heading_up:":{"sn":":arrow_heading_up:","cp":"2934","sns":[],"c":"symbols"},":arrow_left:":{"sn":":arrow_left:","cp":"2b05","sns":[],"c":"symbols"},":arrow_lower_left:":{"sn":":arrow_lower_left:","cp":"2199","sns":[],"c":"symbols"},":arrow_lower_right:":{"sn":":arrow_lower_right:","cp":"2198","sns":[],"c":"symbols"},":arrow_right:":{"sn":":arrow_right:","cp":"27a1","sns":[],"c":"symbols"},":arrow_right_hook:":{"sn":":arrow_right_hook:","cp":"21aa","sns":[],"c":"symbols"},":arrow_up:":{"sn":":arrow_up:","cp":"2b06","sns":[],"c":"symbols"},":arrow_up_down:":{"sn":":arrow_up_down:","cp":"2195","sns":[],"c":"symbols"},":arrow_up_small:":{"sn":":arrow_up_small:","cp":"1f53c","sns":[],"c":"symbols"},":arrow_upper_left:":{"sn":":arrow_upper_left:","cp":"2196","sns":[],"c":"symbols"},":arrow_upper_right:":{"sn":":arrow_upper_right:","cp":"2197","sns":[],"c":"symbols"},":arrows_clockwise:":{"sn":":arrows_clockwise:","cp":"1f503","sns":[],"c":"symbols"},":arrows_counterclockwise:":{"sn":":arrows_counterclockwise:","cp":"1f504","sns":[],"c":"symbols"},":asterisk:":{"sn":":asterisk:","cp":"2a-fe0f-20e3","sns":[":keycap_asterisk:"],"c":"symbols"},":atm:":{"sn":":atm:","cp":"1f3e7","sns":[],"c":"symbols"},":atom:":{"sn":":atom:","cp":"269b","sns":[":atom_symbol:"],"c":"symbols"},":b:":{"sn":":b:","cp":"1f171","sns":[],"c":"symbols"},":baby_symbol:":{"sn":":baby_symbol:","cp":"1f6bc","sns":[],"c":"symbols"},":back:":{"sn":":back:","cp":"1f519","sns":[],"c":"symbols"},":baggage_claim:":{"sn":":baggage_claim:","cp":"1f6c4","sns":[],"c":"symbols"},":ballot_box_with_check:":{"sn":":ballot_box_with_check:","cp":"2611","sns":[],"c":"symbols"},":bangbang:":{"sn":":bangbang:","cp":"203c","sns":[],"c":"symbols"},":beginner:":{"sn":":beginner:","cp":"1f530","sns":[],"c":"symbols"},":bell:":{"sn":":bell:","cp":"1f514","sns":[],"c":"symbols"},":biohazard:":{"sn":":biohazard:","cp":"2623","sns":[":biohazard_sign:"],"c":"symbols"},":black_circle:":{"sn":":black_circle:","cp":"26ab","sns":[],"c":"symbols"},":black_heart:":{"sn":":black_heart:","cp":"1f5a4","sns":[],"c":"symbols"},":black_joker:":{"sn":":black_joker:","cp":"1f0cf","sns":[],"c":"symbols"},":black_large_square:":{"sn":":black_large_square:","cp":"2b1b","sns":[],"c":"symbols"},":black_medium_small_square:":{"sn":":black_medium_small_square:","cp":"25fe","sns":[],"c":"symbols"},":black_medium_square:":{"sn":":black_medium_square:","cp":"25fc","sns":[],"c":"symbols"},":black_small_square:":{"sn":":black_small_square:","cp":"25aa","sns":[],"c":"symbols"},":black_square_button:":{"sn":":black_square_button:","cp":"1f532","sns":[],"c":"symbols"},":blue_circle:":{"sn":":blue_circle:","cp":"1f535","sns":[],"c":"symbols"},":blue_heart:":{"sn":":blue_heart:","cp":"1f499","sns":[],"c":"symbols"},":broken_heart:":{"sn":":broken_heart:","cp":"1f494","sns":[],"c":"symbols"},":cancer:":{"sn":":cancer:","cp":"264b","sns":[],"c":"symbols"},":capital_abcd:":{"sn":":capital_abcd:","cp":"1f520","sns":[],"c":"symbols"},":capricorn:":{"sn":":capricorn:","cp":"2651","sns":[],"c":"symbols"},":chart:":{"sn":":chart:","cp":"1f4b9","sns":[],"c":"symbols"},":children_crossing:":{"sn":":children_crossing:","cp":"1f6b8","sns":[],"c":"symbols"},":cinema:":{"sn":":cinema:","cp":"1f3a6","sns":[],"c":"symbols"},":cl:":{"sn":":cl:","cp":"1f191","sns":[],"c":"symbols"},":clock1030:":{"sn":":clock1030:","cp":"1f565","sns":[],"c":"symbols"},":clock10:":{"sn":":clock10:","cp":"1f559","sns":[],"c":"symbols"},":clock1130:":{"sn":":clock1130:","cp":"1f566","sns":[],"c":"symbols"},":clock11:":{"sn":":clock11:","cp":"1f55a","sns":[],"c":"symbols"},":clock1230:":{"sn":":clock1230:","cp":"1f567","sns":[],"c":"symbols"},":clock12:":{"sn":":clock12:","cp":"1f55b","sns":[],"c":"symbols"},":clock130:":{"sn":":clock130:","cp":"1f55c","sns":[],"c":"symbols"},":clock1:":{"sn":":clock1:","cp":"1f550","sns":[],"c":"symbols"},":clock230:":{"sn":":clock230:","cp":"1f55d","sns":[],"c":"symbols"},":clock2:":{"sn":":clock2:","cp":"1f551","sns":[],"c":"symbols"},":clock330:":{"sn":":clock330:","cp":"1f55e","sns":[],"c":"symbols"},":clock3:":{"sn":":clock3:","cp":"1f552","sns":[],"c":"symbols"},":clock430:":{"sn":":clock430:","cp":"1f55f","sns":[],"c":"symbols"},":clock4:":{"sn":":clock4:","cp":"1f553","sns":[],"c":"symbols"},":clock530:":{"sn":":clock530:","cp":"1f560","sns":[],"c":"symbols"},":clock5:":{"sn":":clock5:","cp":"1f554","sns":[],"c":"symbols"},":clock630:":{"sn":":clock630:","cp":"1f561","sns":[],"c":"symbols"},":clock6:":{"sn":":clock6:","cp":"1f555","sns":[],"c":"symbols"},":clock730:":{"sn":":clock730:","cp":"1f562","sns":[],"c":"symbols"},":clock7:":{"sn":":clock7:","cp":"1f556","sns":[],"c":"symbols"},":clock830:":{"sn":":clock830:","cp":"1f563","sns":[],"c":"symbols"},":clock8:":{"sn":":clock8:","cp":"1f557","sns":[],"c":"symbols"},":clock930:":{"sn":":clock930:","cp":"1f564","sns":[],"c":"symbols"},":clock9:":{"sn":":clock9:","cp":"1f558","sns":[],"c":"symbols"},":clubs:":{"sn":":clubs:","cp":"2663","sns":[],"c":"symbols"},":congratulations:":{"sn":":congratulations:","cp":"3297","sns":[],"c":"symbols"},":cool:":{"sn":":cool:","cp":"1f192","sns":[],"c":"symbols"},":copyright:":{"sn":":copyright:","cp":"a9","sns":[],"c":"symbols"},":cross:":{"sn":":cross:","cp":"271d","sns":[":latin_cross:"],"c":"symbols"},":cupid:":{"sn":":cupid:","cp":"1f498","sns":[],"c":"symbols"},":curly_loop:":{"sn":":curly_loop:","cp":"27b0","sns":[],"c":"symbols"},":currency_exchange:":{"sn":":currency_exchange:","cp":"1f4b1","sns":[],"c":"symbols"},":customs:":{"sn":":customs:","cp":"1f6c3","sns":[],"c":"symbols"},":cyclone:":{"sn":":cyclone:","cp":"1f300","sns":[],"c":"symbols"},":diamond_shape_with_a_dot_inside:":{"sn":":diamond_shape_with_a_dot_inside:","cp":"1f4a0","sns":[],"c":"symbols"},":diamonds:":{"sn":":diamonds:","cp":"2666","sns":[],"c":"symbols"},":do_not_litter:":{"sn":":do_not_litter:","cp":"1f6af","sns":[],"c":"symbols"},":eight:":{"sn":":eight:","cp":"38-fe0f-20e3","sns":[],"c":"symbols"},":eight_pointed_black_star:":{"sn":":eight_pointed_black_star:","cp":"2734","sns":[],"c":"symbols"},":eight_spoked_asterisk:":{"sn":":eight_spoked_asterisk:","cp":"2733","sns":[],"c":"symbols"},":eject:":{"sn":":eject:","cp":"23cf","sns":[":eject_symbol:"],"c":"symbols"},":end:":{"sn":":end:","cp":"1f51a","sns":[],"c":"symbols"},":exclamation:":{"sn":":exclamation:","cp":"2757","sns":[],"c":"symbols"},":eye_in_speech_bubble:":{"sn":":eye_in_speech_bubble:","cp":"1f441-fe0f-200d-1f5e8-fe0f","sns":[],"c":"symbols"},":fast_forward:":{"sn":":fast_forward:","cp":"23e9","sns":[],"c":"symbols"},":female_sign:":{"sn":":female_sign:","cp":"2640","sns":[],"c":"symbols"},":five:":{"sn":":five:","cp":"35-fe0f-20e3","sns":[],"c":"symbols"},":fleur-de-lis:":{"sn":":fleur-de-lis:","cp":"269c","sns":[],"c":"symbols"},":flower_playing_cards:":{"sn":":flower_playing_cards:","cp":"1f3b4","sns":[],"c":"symbols"},":four:":{"sn":":four:","cp":"34-fe0f-20e3","sns":[],"c":"symbols"},":free:":{"sn":":free:","cp":"1f193","sns":[],"c":"symbols"},":gemini:":{"sn":":gemini:","cp":"264a","sns":[],"c":"symbols"},":gift_heart:":{"sn":":gift_heart:","cp":"1f49d","sns":[],"c":"symbols"},":globe_with_meridians:":{"sn":":globe_with_meridians:","cp":"1f310","sns":[],"c":"symbols"},":green_heart:":{"sn":":green_heart:","cp":"1f49a","sns":[],"c":"symbols"},":grey_exclamation:":{"sn":":grey_exclamation:","cp":"2755","sns":[],"c":"symbols"},":grey_question:":{"sn":":grey_question:","cp":"2754","sns":[],"c":"symbols"},":hash:":{"sn":":hash:","cp":"23-fe0f-20e3","sns":[],"c":"symbols"},":heart:":{"sn":":heart:","cp":"2764","sns":[],"c":"symbols"},":heart_decoration:":{"sn":":heart_decoration:","cp":"1f49f","sns":[],"c":"symbols"},":heart_exclamation:":{"sn":":heart_exclamation:","cp":"2763","sns":[":heavy_heart_exclamation_mark_ornament:"],"c":"symbols"},":heartbeat:":{"sn":":heartbeat:","cp":"1f493","sns":[],"c":"symbols"},":heartpulse:":{"sn":":heartpulse:","cp":"1f497","sns":[],"c":"symbols"},":hearts:":{"sn":":hearts:","cp":"2665","sns":[],"c":"symbols"},":heavy_check_mark:":{"sn":":heavy_check_mark:","cp":"2714","sns":[],"c":"symbols"},":heavy_division_sign:":{"sn":":heavy_division_sign:","cp":"2797","sns":[],"c":"symbols"},":heavy_dollar_sign:":{"sn":":heavy_dollar_sign:","cp":"1f4b2","sns":[],"c":"symbols"},":heavy_minus_sign:":{"sn":":heavy_minus_sign:","cp":"2796","sns":[],"c":"symbols"},":heavy_multiplication_x:":{"sn":":heavy_multiplication_x:","cp":"2716","sns":[],"c":"symbols"},":heavy_plus_sign:":{"sn":":heavy_plus_sign:","cp":"2795","sns":[],"c":"symbols"},":high_brightness:":{"sn":":high_brightness:","cp":"1f506","sns":[],"c":"symbols"},":hotsprings:":{"sn":":hotsprings:","cp":"2668","sns":[],"c":"symbols"},":id:":{"sn":":id:","cp":"1f194","sns":[],"c":"symbols"},":ideograph_advantage:":{"sn":":ideograph_advantage:","cp":"1f250","sns":[],"c":"symbols"},":information_source:":{"sn":":information_source:","cp":"2139","sns":[],"c":"symbols"},":interrobang:":{"sn":":interrobang:","cp":"2049","sns":[],"c":"symbols"},":keycap_ten:":{"sn":":keycap_ten:","cp":"1f51f","sns":[],"c":"symbols"},":koko:":{"sn":":koko:","cp":"1f201","sns":[],"c":"symbols"},":large_blue_diamond:":{"sn":":large_blue_diamond:","cp":"1f537","sns":[],"c":"symbols"},":large_orange_diamond:":{"sn":":large_orange_diamond:","cp":"1f536","sns":[],"c":"symbols"},":left_luggage:":{"sn":":left_luggage:","cp":"1f6c5","sns":[],"c":"symbols"},":left_right_arrow:":{"sn":":left_right_arrow:","cp":"2194","sns":[],"c":"symbols"},":leftwards_arrow_with_hook:":{"sn":":leftwards_arrow_with_hook:","cp":"21a9","sns":[],"c":"symbols"},":leo:":{"sn":":leo:","cp":"264c","sns":[],"c":"symbols"},":libra:":{"sn":":libra:","cp":"264e","sns":[],"c":"symbols"},":loop:":{"sn":":loop:","cp":"27bf","sns":[],"c":"symbols"},":loud_sound:":{"sn":":loud_sound:","cp":"1f50a","sns":[],"c":"symbols"},":loudspeaker:":{"sn":":loudspeaker:","cp":"1f4e2","sns":[],"c":"symbols"},":low_brightness:":{"sn":":low_brightness:","cp":"1f505","sns":[],"c":"symbols"},":m:":{"sn":":m:","cp":"24c2","sns":[],"c":"symbols"},":mahjong:":{"sn":":mahjong:","cp":"1f004","sns":[],"c":"symbols"},":male_sign:":{"sn":":male_sign:","cp":"2642","sns":[],"c":"symbols"},":medical_symbol:":{"sn":":medical_symbol:","cp":"2695","sns":[],"c":"symbols"},":mega:":{"sn":":mega:","cp":"1f4e3","sns":[],"c":"symbols"},":menorah:":{"sn":":menorah:","cp":"1f54e","sns":[],"c":"symbols"},":mens:":{"sn":":mens:","cp":"1f6b9","sns":[],"c":"symbols"},":mobile_phone_off:":{"sn":":mobile_phone_off:","cp":"1f4f4","sns":[],"c":"symbols"},":musical_note:":{"sn":":musical_note:","cp":"1f3b5","sns":[],"c":"symbols"},":mute:":{"sn":":mute:","cp":"1f507","sns":[],"c":"symbols"},":name_badge:":{"sn":":name_badge:","cp":"1f4db","sns":[],"c":"symbols"},":negative_squared_cross_mark:":{"sn":":negative_squared_cross_mark:","cp":"274e","sns":[],"c":"symbols"},":new:":{"sn":":new:","cp":"1f195","sns":[],"c":"symbols"},":ng:":{"sn":":ng:","cp":"1f196","sns":[],"c":"symbols"},":nine:":{"sn":":nine:","cp":"39-fe0f-20e3","sns":[],"c":"symbols"},":no_bell:":{"sn":":no_bell:","cp":"1f515","sns":[],"c":"symbols"},":no_bicycles:":{"sn":":no_bicycles:","cp":"1f6b3","sns":[],"c":"symbols"},":no_entry:":{"sn":":no_entry:","cp":"26d4","sns":[],"c":"symbols"},":no_entry_sign:":{"sn":":no_entry_sign:","cp":"1f6ab","sns":[],"c":"symbols"},":no_mobile_phones:":{"sn":":no_mobile_phones:","cp":"1f4f5","sns":[],"c":"symbols"},":no_pedestrians:":{"sn":":no_pedestrians:","cp":"1f6b7","sns":[],"c":"symbols"},":no_smoking:":{"sn":":no_smoking:","cp":"1f6ad","sns":[],"c":"symbols"},":non-potable_water:":{"sn":":non-potable_water:","cp":"1f6b1","sns":[],"c":"symbols"},":notes:":{"sn":":notes:","cp":"1f3b6","sns":[],"c":"symbols"},":o2:":{"sn":":o2:","cp":"1f17e","sns":[],"c":"symbols"},":o:":{"sn":":o:","cp":"2b55","sns":[],"c":"symbols"},":octagonal_sign:":{"sn":":octagonal_sign:","cp":"1f6d1","sns":[":stop_sign:"],"c":"symbols"},":ok:":{"sn":":ok:","cp":"1f197","sns":[],"c":"symbols"},":om_symbol:":{"sn":":om_symbol:","cp":"1f549","sns":[],"c":"symbols"},":on:":{"sn":":on:","cp":"1f51b","sns":[],"c":"symbols"},":one:":{"sn":":one:","cp":"31-fe0f-20e3","sns":[],"c":"symbols"},":ophiuchus:":{"sn":":ophiuchus:","cp":"26ce","sns":[],"c":"symbols"},":orange_heart:":{"sn":":orange_heart:","cp":"1f9e1","sns":[],"c":"symbols"},":orthodox_cross:":{"sn":":orthodox_cross:","cp":"2626","sns":[],"c":"symbols"},":parking:":{"sn":":parking:","cp":"1f17f","sns":[],"c":"symbols"},":part_alternation_mark:":{"sn":":part_alternation_mark:","cp":"303d","sns":[],"c":"symbols"},":passport_control:":{"sn":":passport_control:","cp":"1f6c2","sns":[],"c":"symbols"},":pause_button:":{"sn":":pause_button:","cp":"23f8","sns":[":double_vertical_bar:"],"c":"symbols"},":peace:":{"sn":":peace:","cp":"262e","sns":[":peace_symbol:"],"c":"symbols"},":pisces:":{"sn":":pisces:","cp":"2653","sns":[],"c":"symbols"},":place_of_worship:":{"sn":":place_of_worship:","cp":"1f6d0","sns":[":worship_symbol:"],"c":"symbols"},":play_pause:":{"sn":":play_pause:","cp":"23ef","sns":[],"c":"symbols"},":purple_heart:":{"sn":":purple_heart:","cp":"1f49c","sns":[],"c":"symbols"},":put_litter_in_its_place:":{"sn":":put_litter_in_its_place:","cp":"1f6ae","sns":[],"c":"symbols"},":question:":{"sn":":question:","cp":"2753","sns":[],"c":"symbols"},":radio_button:":{"sn":":radio_button:","cp":"1f518","sns":[],"c":"symbols"},":radioactive:":{"sn":":radioactive:","cp":"2622","sns":[":radioactive_sign:"],"c":"symbols"},":record_button:":{"sn":":record_button:","cp":"23fa","sns":[],"c":"symbols"},":recycle:":{"sn":":recycle:","cp":"267b","sns":[],"c":"symbols"},":red_circle:":{"sn":":red_circle:","cp":"1f534","sns":[],"c":"symbols"},":regional_indicator_a:":{"sn":":regional_indicator_a:","cp":"1f1e6","sns":[],"c":"symbols"},":regional_indicator_b:":{"sn":":regional_indicator_b:","cp":"1f1e7","sns":[],"c":"symbols"},":regional_indicator_c:":{"sn":":regional_indicator_c:","cp":"1f1e8","sns":[],"c":"symbols"},":regional_indicator_d:":{"sn":":regional_indicator_d:","cp":"1f1e9","sns":[],"c":"symbols"},":regional_indicator_e:":{"sn":":regional_indicator_e:","cp":"1f1ea","sns":[],"c":"symbols"},":regional_indicator_f:":{"sn":":regional_indicator_f:","cp":"1f1eb","sns":[],"c":"symbols"},":regional_indicator_g:":{"sn":":regional_indicator_g:","cp":"1f1ec","sns":[],"c":"symbols"},":regional_indicator_h:":{"sn":":regional_indicator_h:","cp":"1f1ed","sns":[],"c":"symbols"},":regional_indicator_i:":{"sn":":regional_indicator_i:","cp":"1f1ee","sns":[],"c":"symbols"},":regional_indicator_j:":{"sn":":regional_indicator_j:","cp":"1f1ef","sns":[],"c":"symbols"},":regional_indicator_k:":{"sn":":regional_indicator_k:","cp":"1f1f0","sns":[],"c":"symbols"},":regional_indicator_l:":{"sn":":regional_indicator_l:","cp":"1f1f1","sns":[],"c":"symbols"},":regional_indicator_m:":{"sn":":regional_indicator_m:","cp":"1f1f2","sns":[],"c":"symbols"},":regional_indicator_n:":{"sn":":regional_indicator_n:","cp":"1f1f3","sns":[],"c":"symbols"},":regional_indicator_o:":{"sn":":regional_indicator_o:","cp":"1f1f4","sns":[],"c":"symbols"},":regional_indicator_p:":{"sn":":regional_indicator_p:","cp":"1f1f5","sns":[],"c":"symbols"},":regional_indicator_q:":{"sn":":regional_indicator_q:","cp":"1f1f6","sns":[],"c":"symbols"},":regional_indicator_r:":{"sn":":regional_indicator_r:","cp":"1f1f7","sns":[],"c":"symbols"},":regional_indicator_s:":{"sn":":regional_indicator_s:","cp":"1f1f8","sns":[],"c":"symbols"},":regional_indicator_t:":{"sn":":regional_indicator_t:","cp":"1f1f9","sns":[],"c":"symbols"},":regional_indicator_u:":{"sn":":regional_indicator_u:","cp":"1f1fa","sns":[],"c":"symbols"},":regional_indicator_v:":{"sn":":regional_indicator_v:","cp":"1f1fb","sns":[],"c":"symbols"},":regional_indicator_w:":{"sn":":regional_indicator_w:","cp":"1f1fc","sns":[],"c":"symbols"},":regional_indicator_x:":{"sn":":regional_indicator_x:","cp":"1f1fd","sns":[],"c":"symbols"},":regional_indicator_y:":{"sn":":regional_indicator_y:","cp":"1f1fe","sns":[],"c":"symbols"},":regional_indicator_z:":{"sn":":regional_indicator_z:","cp":"1f1ff","sns":[],"c":"symbols"},":registered:":{"sn":":registered:","cp":"ae","sns":[],"c":"symbols"},":repeat:":{"sn":":repeat:","cp":"1f501","sns":[],"c":"symbols"},":repeat_one:":{"sn":":repeat_one:","cp":"1f502","sns":[],"c":"symbols"},":restroom:":{"sn":":restroom:","cp":"1f6bb","sns":[],"c":"symbols"},":revolving_hearts:":{"sn":":revolving_hearts:","cp":"1f49e","sns":[],"c":"symbols"},":rewind:":{"sn":":rewind:","cp":"23ea","sns":[],"c":"symbols"},":sa:":{"sn":":sa:","cp":"1f202","sns":[],"c":"symbols"},":sagittarius:":{"sn":":sagittarius:","cp":"2650","sns":[],"c":"symbols"},":scorpius:":{"sn":":scorpius:","cp":"264f","sns":[],"c":"symbols"},":secret:":{"sn":":secret:","cp":"3299","sns":[],"c":"symbols"},":seven:":{"sn":":seven:","cp":"37-fe0f-20e3","sns":[],"c":"symbols"},":signal_strength:":{"sn":":signal_strength:","cp":"1f4f6","sns":[],"c":"symbols"},":six:":{"sn":":six:","cp":"36-fe0f-20e3","sns":[],"c":"symbols"},":six_pointed_star:":{"sn":":six_pointed_star:","cp":"1f52f","sns":[],"c":"symbols"},":skull_crossbones:":{"sn":":skull_crossbones:","cp":"2620","sns":[":skull_and_crossbones:"],"c":"symbols"},":small_blue_diamond:":{"sn":":small_blue_diamond:","cp":"1f539","sns":[],"c":"symbols"},":small_orange_diamond:":{"sn":":small_orange_diamond:","cp":"1f538","sns":[],"c":"symbols"},":small_red_triangle:":{"sn":":small_red_triangle:","cp":"1f53a","sns":[],"c":"symbols"},":small_red_triangle_down:":{"sn":":small_red_triangle_down:","cp":"1f53b","sns":[],"c":"symbols"},":soon:":{"sn":":soon:","cp":"1f51c","sns":[],"c":"symbols"},":sos:":{"sn":":sos:","cp":"1f198","sns":[],"c":"symbols"},":sound:":{"sn":":sound:","cp":"1f509","sns":[],"c":"symbols"},":spades:":{"sn":":spades:","cp":"2660","sns":[],"c":"symbols"},":sparkle:":{"sn":":sparkle:","cp":"2747","sns":[],"c":"symbols"},":sparkling_heart:":{"sn":":sparkling_heart:","cp":"1f496","sns":[],"c":"symbols"},":speaker:":{"sn":":speaker:","cp":"1f508","sns":[],"c":"symbols"},":speech_balloon:":{"sn":":speech_balloon:","cp":"1f4ac","sns":[],"c":"symbols"},":speech_left:":{"sn":":speech_left:","cp":"1f5e8-fe0f","sns":[":left_speech_bubble:"],"c":"symbols"},":star_and_crescent:":{"sn":":star_and_crescent:","cp":"262a","sns":[],"c":"symbols"},":star_of_david:":{"sn":":star_of_david:","cp":"2721","sns":[],"c":"symbols"},":stop_button:":{"sn":":stop_button:","cp":"23f9","sns":[],"c":"symbols"},":symbols:":{"sn":":symbols:","cp":"1f523","sns":[],"c":"symbols"},":taurus:":{"sn":":taurus:","cp":"2649","sns":[],"c":"symbols"},":thought_balloon:":{"sn":":thought_balloon:","cp":"1f4ad","sns":[],"c":"symbols"},":three:":{"sn":":three:","cp":"33-fe0f-20e3","sns":[],"c":"symbols"},":tm:":{"sn":":tm:","cp":"2122","sns":[],"c":"symbols"},":top:":{"sn":":top:","cp":"1f51d","sns":[],"c":"symbols"},":track_next:":{"sn":":track_next:","cp":"23ed","sns":[":next_track:"],"c":"symbols"},":track_previous:":{"sn":":track_previous:","cp":"23ee","sns":[":previous_track:"],"c":"symbols"},":trident:":{"sn":":trident:","cp":"1f531","sns":[],"c":"symbols"},":twisted_rightwards_arrows:":{"sn":":twisted_rightwards_arrows:","cp":"1f500","sns":[],"c":"symbols"},":two:":{"sn":":two:","cp":"32-fe0f-20e3","sns":[],"c":"symbols"},":two_hearts:":{"sn":":two_hearts:","cp":"1f495","sns":[],"c":"symbols"},":u5272:":{"sn":":u5272:","cp":"1f239","sns":[],"c":"symbols"},":u5408:":{"sn":":u5408:","cp":"1f234","sns":[],"c":"symbols"},":u55b6:":{"sn":":u55b6:","cp":"1f23a","sns":[],"c":"symbols"},":u6307:":{"sn":":u6307:","cp":"1f22f","sns":[],"c":"symbols"},":u6708:":{"sn":":u6708:","cp":"1f237","sns":[],"c":"symbols"},":u6709:":{"sn":":u6709:","cp":"1f236","sns":[],"c":"symbols"},":u6e80:":{"sn":":u6e80:","cp":"1f235","sns":[],"c":"symbols"},":u7121:":{"sn":":u7121:","cp":"1f21a","sns":[],"c":"symbols"},":u7533:":{"sn":":u7533:","cp":"1f238","sns":[],"c":"symbols"},":u7981:":{"sn":":u7981:","cp":"1f232","sns":[],"c":"symbols"},":u7a7a:":{"sn":":u7a7a:","cp":"1f233","sns":[],"c":"symbols"},":underage:":{"sn":":underage:","cp":"1f51e","sns":[],"c":"symbols"},":up:":{"sn":":up:","cp":"1f199","sns":[],"c":"symbols"},":vibration_mode:":{"sn":":vibration_mode:","cp":"1f4f3","sns":[],"c":"symbols"},":virgo:":{"sn":":virgo:","cp":"264d","sns":[],"c":"symbols"},":vs:":{"sn":":vs:","cp":"1f19a","sns":[],"c":"symbols"},":warning:":{"sn":":warning:","cp":"26a0","sns":[],"c":"symbols"},":wavy_dash:":{"sn":":wavy_dash:","cp":"3030","sns":[],"c":"symbols"},":wc:":{"sn":":wc:","cp":"1f6be","sns":[],"c":"symbols"},":wheel_of_dharma:":{"sn":":wheel_of_dharma:","cp":"2638","sns":[],"c":"symbols"},":wheelchair:":{"sn":":wheelchair:","cp":"267f","sns":[],"c":"symbols"},":white_check_mark:":{"sn":":white_check_mark:","cp":"2705","sns":[],"c":"symbols"},":white_circle:":{"sn":":white_circle:","cp":"26aa","sns":[],"c":"symbols"},":white_flower:":{"sn":":white_flower:","cp":"1f4ae","sns":[],"c":"symbols"},":white_large_square:":{"sn":":white_large_square:","cp":"2b1c","sns":[],"c":"symbols"},":white_medium_small_square:":{"sn":":white_medium_small_square:","cp":"25fd","sns":[],"c":"symbols"},":white_medium_square:":{"sn":":white_medium_square:","cp":"25fb","sns":[],"c":"symbols"},":white_small_square:":{"sn":":white_small_square:","cp":"25ab","sns":[],"c":"symbols"},":white_square_button:":{"sn":":white_square_button:","cp":"1f533","sns":[],"c":"symbols"},":womens:":{"sn":":womens:","cp":"1f6ba","sns":[],"c":"symbols"},":x:":{"sn":":x:","cp":"274c","sns":[],"c":"symbols"},":yellow_heart:":{"sn":":yellow_heart:","cp":"1f49b","sns":[],"c":"symbols"},":yin_yang:":{"sn":":yin_yang:","cp":"262f","sns":[],"c":"symbols"},":zero:":{"sn":":zero:","cp":"30-fe0f-20e3","sns":[],"c":"symbols"},":zzz:":{"sn":":zzz:","cp":"1f4a4","sns":[],"c":"symbols"}},"flags":{":checkered_flag:":{"sn":":checkered_flag:","cp":"1f3c1","sns":[],"c":"flags"},":crossed_flags:":{"sn":":crossed_flags:","cp":"1f38c","sns":[],"c":"flags"},":england:":{"sn":":england:","cp":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","sns":[],"c":"flags"},":flag_ac:":{"sn":":flag_ac:","cp":"1f1e6-1f1e8","sns":[":ac:"],"c":"flags"},":flag_ad:":{"sn":":flag_ad:","cp":"1f1e6-1f1e9","sns":[":ad:"],"c":"flags"},":flag_ae:":{"sn":":flag_ae:","cp":"1f1e6-1f1ea","sns":[":ae:"],"c":"flags"},":flag_af:":{"sn":":flag_af:","cp":"1f1e6-1f1eb","sns":[":af:"],"c":"flags"},":flag_ag:":{"sn":":flag_ag:","cp":"1f1e6-1f1ec","sns":[":ag:"],"c":"flags"},":flag_ai:":{"sn":":flag_ai:","cp":"1f1e6-1f1ee","sns":[":ai:"],"c":"flags"},":flag_al:":{"sn":":flag_al:","cp":"1f1e6-1f1f1","sns":[":al:"],"c":"flags"},":flag_am:":{"sn":":flag_am:","cp":"1f1e6-1f1f2","sns":[":am:"],"c":"flags"},":flag_ao:":{"sn":":flag_ao:","cp":"1f1e6-1f1f4","sns":[":ao:"],"c":"flags"},":flag_aq:":{"sn":":flag_aq:","cp":"1f1e6-1f1f6","sns":[":aq:"],"c":"flags"},":flag_ar:":{"sn":":flag_ar:","cp":"1f1e6-1f1f7","sns":[":ar:"],"c":"flags"},":flag_as:":{"sn":":flag_as:","cp":"1f1e6-1f1f8","sns":[":as:"],"c":"flags"},":flag_at:":{"sn":":flag_at:","cp":"1f1e6-1f1f9","sns":[":at:"],"c":"flags"},":flag_au:":{"sn":":flag_au:","cp":"1f1e6-1f1fa","sns":[":au:"],"c":"flags"},":flag_aw:":{"sn":":flag_aw:","cp":"1f1e6-1f1fc","sns":[":aw:"],"c":"flags"},":flag_ax:":{"sn":":flag_ax:","cp":"1f1e6-1f1fd","sns":[":ax:"],"c":"flags"},":flag_az:":{"sn":":flag_az:","cp":"1f1e6-1f1ff","sns":[":az:"],"c":"flags"},":flag_ba:":{"sn":":flag_ba:","cp":"1f1e7-1f1e6","sns":[":ba:"],"c":"flags"},":flag_bb:":{"sn":":flag_bb:","cp":"1f1e7-1f1e7","sns":[":bb:"],"c":"flags"},":flag_bd:":{"sn":":flag_bd:","cp":"1f1e7-1f1e9","sns":[":bd:"],"c":"flags"},":flag_be:":{"sn":":flag_be:","cp":"1f1e7-1f1ea","sns":[":be:"],"c":"flags"},":flag_bf:":{"sn":":flag_bf:","cp":"1f1e7-1f1eb","sns":[":bf:"],"c":"flags"},":flag_bg:":{"sn":":flag_bg:","cp":"1f1e7-1f1ec","sns":[":bg:"],"c":"flags"},":flag_bh:":{"sn":":flag_bh:","cp":"1f1e7-1f1ed","sns":[":bh:"],"c":"flags"},":flag_bi:":{"sn":":flag_bi:","cp":"1f1e7-1f1ee","sns":[":bi:"],"c":"flags"},":flag_bj:":{"sn":":flag_bj:","cp":"1f1e7-1f1ef","sns":[":bj:"],"c":"flags"},":flag_bl:":{"sn":":flag_bl:","cp":"1f1e7-1f1f1","sns":[":bl:"],"c":"flags"},":flag_black:":{"sn":":flag_black:","cp":"1f3f4","sns":[":waving_black_flag:"],"c":"flags"},":flag_bm:":{"sn":":flag_bm:","cp":"1f1e7-1f1f2","sns":[":bm:"],"c":"flags"},":flag_bn:":{"sn":":flag_bn:","cp":"1f1e7-1f1f3","sns":[":bn:"],"c":"flags"},":flag_bo:":{"sn":":flag_bo:","cp":"1f1e7-1f1f4","sns":[":bo:"],"c":"flags"},":flag_bq:":{"sn":":flag_bq:","cp":"1f1e7-1f1f6","sns":[":bq:"],"c":"flags"},":flag_br:":{"sn":":flag_br:","cp":"1f1e7-1f1f7","sns":[":br:"],"c":"flags"},":flag_bs:":{"sn":":flag_bs:","cp":"1f1e7-1f1f8","sns":[":bs:"],"c":"flags"},":flag_bt:":{"sn":":flag_bt:","cp":"1f1e7-1f1f9","sns":[":bt:"],"c":"flags"},":flag_bv:":{"sn":":flag_bv:","cp":"1f1e7-1f1fb","sns":[":bv:"],"c":"flags"},":flag_bw:":{"sn":":flag_bw:","cp":"1f1e7-1f1fc","sns":[":bw:"],"c":"flags"},":flag_by:":{"sn":":flag_by:","cp":"1f1e7-1f1fe","sns":[":by:"],"c":"flags"},":flag_bz:":{"sn":":flag_bz:","cp":"1f1e7-1f1ff","sns":[":bz:"],"c":"flags"},":flag_ca:":{"sn":":flag_ca:","cp":"1f1e8-1f1e6","sns":[":ca:"],"c":"flags"},":flag_cc:":{"sn":":flag_cc:","cp":"1f1e8-1f1e8","sns":[":cc:"],"c":"flags"},":flag_cd:":{"sn":":flag_cd:","cp":"1f1e8-1f1e9","sns":[":congo:"],"c":"flags"},":flag_cf:":{"sn":":flag_cf:","cp":"1f1e8-1f1eb","sns":[":cf:"],"c":"flags"},":flag_cg:":{"sn":":flag_cg:","cp":"1f1e8-1f1ec","sns":[":cg:"],"c":"flags"},":flag_ch:":{"sn":":flag_ch:","cp":"1f1e8-1f1ed","sns":[":ch:"],"c":"flags"},":flag_ci:":{"sn":":flag_ci:","cp":"1f1e8-1f1ee","sns":[":ci:"],"c":"flags"},":flag_ck:":{"sn":":flag_ck:","cp":"1f1e8-1f1f0","sns":[":ck:"],"c":"flags"},":flag_cl:":{"sn":":flag_cl:","cp":"1f1e8-1f1f1","sns":[":chile:"],"c":"flags"},":flag_cm:":{"sn":":flag_cm:","cp":"1f1e8-1f1f2","sns":[":cm:"],"c":"flags"},":flag_cn:":{"sn":":flag_cn:","cp":"1f1e8-1f1f3","sns":[":cn:"],"c":"flags"},":flag_co:":{"sn":":flag_co:","cp":"1f1e8-1f1f4","sns":[":co:"],"c":"flags"},":flag_cp:":{"sn":":flag_cp:","cp":"1f1e8-1f1f5","sns":[":cp:"],"c":"flags"},":flag_cr:":{"sn":":flag_cr:","cp":"1f1e8-1f1f7","sns":[":cr:"],"c":"flags"},":flag_cu:":{"sn":":flag_cu:","cp":"1f1e8-1f1fa","sns":[":cu:"],"c":"flags"},":flag_cv:":{"sn":":flag_cv:","cp":"1f1e8-1f1fb","sns":[":cv:"],"c":"flags"},":flag_cw:":{"sn":":flag_cw:","cp":"1f1e8-1f1fc","sns":[":cw:"],"c":"flags"},":flag_cx:":{"sn":":flag_cx:","cp":"1f1e8-1f1fd","sns":[":cx:"],"c":"flags"},":flag_cy:":{"sn":":flag_cy:","cp":"1f1e8-1f1fe","sns":[":cy:"],"c":"flags"},":flag_cz:":{"sn":":flag_cz:","cp":"1f1e8-1f1ff","sns":[":cz:"],"c":"flags"},":flag_de:":{"sn":":flag_de:","cp":"1f1e9-1f1ea","sns":[":de:"],"c":"flags"},":flag_dg:":{"sn":":flag_dg:","cp":"1f1e9-1f1ec","sns":[":dg:"],"c":"flags"},":flag_dj:":{"sn":":flag_dj:","cp":"1f1e9-1f1ef","sns":[":dj:"],"c":"flags"},":flag_dk:":{"sn":":flag_dk:","cp":"1f1e9-1f1f0","sns":[":dk:"],"c":"flags"},":flag_dm:":{"sn":":flag_dm:","cp":"1f1e9-1f1f2","sns":[":dm:"],"c":"flags"},":flag_do:":{"sn":":flag_do:","cp":"1f1e9-1f1f4","sns":[":do:"],"c":"flags"},":flag_dz:":{"sn":":flag_dz:","cp":"1f1e9-1f1ff","sns":[":dz:"],"c":"flags"},":flag_ea:":{"sn":":flag_ea:","cp":"1f1ea-1f1e6","sns":[":ea:"],"c":"flags"},":flag_ec:":{"sn":":flag_ec:","cp":"1f1ea-1f1e8","sns":[":ec:"],"c":"flags"},":flag_ee:":{"sn":":flag_ee:","cp":"1f1ea-1f1ea","sns":[":ee:"],"c":"flags"},":flag_eg:":{"sn":":flag_eg:","cp":"1f1ea-1f1ec","sns":[":eg:"],"c":"flags"},":flag_eh:":{"sn":":flag_eh:","cp":"1f1ea-1f1ed","sns":[":eh:"],"c":"flags"},":flag_er:":{"sn":":flag_er:","cp":"1f1ea-1f1f7","sns":[":er:"],"c":"flags"},":flag_es:":{"sn":":flag_es:","cp":"1f1ea-1f1f8","sns":[":es:"],"c":"flags"},":flag_et:":{"sn":":flag_et:","cp":"1f1ea-1f1f9","sns":[":et:"],"c":"flags"},":flag_eu:":{"sn":":flag_eu:","cp":"1f1ea-1f1fa","sns":[":eu:"],"c":"flags"},":flag_fi:":{"sn":":flag_fi:","cp":"1f1eb-1f1ee","sns":[":fi:"],"c":"flags"},":flag_fj:":{"sn":":flag_fj:","cp":"1f1eb-1f1ef","sns":[":fj:"],"c":"flags"},":flag_fk:":{"sn":":flag_fk:","cp":"1f1eb-1f1f0","sns":[":fk:"],"c":"flags"},":flag_fm:":{"sn":":flag_fm:","cp":"1f1eb-1f1f2","sns":[":fm:"],"c":"flags"},":flag_fo:":{"sn":":flag_fo:","cp":"1f1eb-1f1f4","sns":[":fo:"],"c":"flags"},":flag_fr:":{"sn":":flag_fr:","cp":"1f1eb-1f1f7","sns":[":fr:"],"c":"flags"},":flag_ga:":{"sn":":flag_ga:","cp":"1f1ec-1f1e6","sns":[":ga:"],"c":"flags"},":flag_gb:":{"sn":":flag_gb:","cp":"1f1ec-1f1e7","sns":[":gb:"],"c":"flags"},":flag_gd:":{"sn":":flag_gd:","cp":"1f1ec-1f1e9","sns":[":gd:"],"c":"flags"},":flag_ge:":{"sn":":flag_ge:","cp":"1f1ec-1f1ea","sns":[":ge:"],"c":"flags"},":flag_gf:":{"sn":":flag_gf:","cp":"1f1ec-1f1eb","sns":[":gf:"],"c":"flags"},":flag_gg:":{"sn":":flag_gg:","cp":"1f1ec-1f1ec","sns":[":gg:"],"c":"flags"},":flag_gh:":{"sn":":flag_gh:","cp":"1f1ec-1f1ed","sns":[":gh:"],"c":"flags"},":flag_gi:":{"sn":":flag_gi:","cp":"1f1ec-1f1ee","sns":[":gi:"],"c":"flags"},":flag_gl:":{"sn":":flag_gl:","cp":"1f1ec-1f1f1","sns":[":gl:"],"c":"flags"},":flag_gm:":{"sn":":flag_gm:","cp":"1f1ec-1f1f2","sns":[":gm:"],"c":"flags"},":flag_gn:":{"sn":":flag_gn:","cp":"1f1ec-1f1f3","sns":[":gn:"],"c":"flags"},":flag_gp:":{"sn":":flag_gp:","cp":"1f1ec-1f1f5","sns":[":gp:"],"c":"flags"},":flag_gq:":{"sn":":flag_gq:","cp":"1f1ec-1f1f6","sns":[":gq:"],"c":"flags"},":flag_gr:":{"sn":":flag_gr:","cp":"1f1ec-1f1f7","sns":[":gr:"],"c":"flags"},":flag_gs:":{"sn":":flag_gs:","cp":"1f1ec-1f1f8","sns":[":gs:"],"c":"flags"},":flag_gt:":{"sn":":flag_gt:","cp":"1f1ec-1f1f9","sns":[":gt:"],"c":"flags"},":flag_gu:":{"sn":":flag_gu:","cp":"1f1ec-1f1fa","sns":[":gu:"],"c":"flags"},":flag_gw:":{"sn":":flag_gw:","cp":"1f1ec-1f1fc","sns":[":gw:"],"c":"flags"},":flag_gy:":{"sn":":flag_gy:","cp":"1f1ec-1f1fe","sns":[":gy:"],"c":"flags"},":flag_hk:":{"sn":":flag_hk:","cp":"1f1ed-1f1f0","sns":[":hk:"],"c":"flags"},":flag_hm:":{"sn":":flag_hm:","cp":"1f1ed-1f1f2","sns":[":hm:"],"c":"flags"},":flag_hn:":{"sn":":flag_hn:","cp":"1f1ed-1f1f3","sns":[":hn:"],"c":"flags"},":flag_hr:":{"sn":":flag_hr:","cp":"1f1ed-1f1f7","sns":[":hr:"],"c":"flags"},":flag_ht:":{"sn":":flag_ht:","cp":"1f1ed-1f1f9","sns":[":ht:"],"c":"flags"},":flag_hu:":{"sn":":flag_hu:","cp":"1f1ed-1f1fa","sns":[":hu:"],"c":"flags"},":flag_ic:":{"sn":":flag_ic:","cp":"1f1ee-1f1e8","sns":[":ic:"],"c":"flags"},":flag_id:":{"sn":":flag_id:","cp":"1f1ee-1f1e9","sns":[":indonesia:"],"c":"flags"},":flag_ie:":{"sn":":flag_ie:","cp":"1f1ee-1f1ea","sns":[":ie:"],"c":"flags"},":flag_il:":{"sn":":flag_il:","cp":"1f1ee-1f1f1","sns":[":il:"],"c":"flags"},":flag_im:":{"sn":":flag_im:","cp":"1f1ee-1f1f2","sns":[":im:"],"c":"flags"},":flag_in:":{"sn":":flag_in:","cp":"1f1ee-1f1f3","sns":[":in:"],"c":"flags"},":flag_io:":{"sn":":flag_io:","cp":"1f1ee-1f1f4","sns":[":io:"],"c":"flags"},":flag_iq:":{"sn":":flag_iq:","cp":"1f1ee-1f1f6","sns":[":iq:"],"c":"flags"},":flag_ir:":{"sn":":flag_ir:","cp":"1f1ee-1f1f7","sns":[":ir:"],"c":"flags"},":flag_is:":{"sn":":flag_is:","cp":"1f1ee-1f1f8","sns":[":is:"],"c":"flags"},":flag_it:":{"sn":":flag_it:","cp":"1f1ee-1f1f9","sns":[":it:"],"c":"flags"},":flag_je:":{"sn":":flag_je:","cp":"1f1ef-1f1ea","sns":[":je:"],"c":"flags"},":flag_jm:":{"sn":":flag_jm:","cp":"1f1ef-1f1f2","sns":[":jm:"],"c":"flags"},":flag_jo:":{"sn":":flag_jo:","cp":"1f1ef-1f1f4","sns":[":jo:"],"c":"flags"},":flag_jp:":{"sn":":flag_jp:","cp":"1f1ef-1f1f5","sns":[":jp:"],"c":"flags"},":flag_ke:":{"sn":":flag_ke:","cp":"1f1f0-1f1ea","sns":[":ke:"],"c":"flags"},":flag_kg:":{"sn":":flag_kg:","cp":"1f1f0-1f1ec","sns":[":kg:"],"c":"flags"},":flag_kh:":{"sn":":flag_kh:","cp":"1f1f0-1f1ed","sns":[":kh:"],"c":"flags"},":flag_ki:":{"sn":":flag_ki:","cp":"1f1f0-1f1ee","sns":[":ki:"],"c":"flags"},":flag_km:":{"sn":":flag_km:","cp":"1f1f0-1f1f2","sns":[":km:"],"c":"flags"},":flag_kn:":{"sn":":flag_kn:","cp":"1f1f0-1f1f3","sns":[":kn:"],"c":"flags"},":flag_kp:":{"sn":":flag_kp:","cp":"1f1f0-1f1f5","sns":[":kp:"],"c":"flags"},":flag_kr:":{"sn":":flag_kr:","cp":"1f1f0-1f1f7","sns":[":kr:"],"c":"flags"},":flag_kw:":{"sn":":flag_kw:","cp":"1f1f0-1f1fc","sns":[":kw:"],"c":"flags"},":flag_ky:":{"sn":":flag_ky:","cp":"1f1f0-1f1fe","sns":[":ky:"],"c":"flags"},":flag_kz:":{"sn":":flag_kz:","cp":"1f1f0-1f1ff","sns":[":kz:"],"c":"flags"},":flag_la:":{"sn":":flag_la:","cp":"1f1f1-1f1e6","sns":[":la:"],"c":"flags"},":flag_lb:":{"sn":":flag_lb:","cp":"1f1f1-1f1e7","sns":[":lb:"],"c":"flags"},":flag_lc:":{"sn":":flag_lc:","cp":"1f1f1-1f1e8","sns":[":lc:"],"c":"flags"},":flag_li:":{"sn":":flag_li:","cp":"1f1f1-1f1ee","sns":[":li:"],"c":"flags"},":flag_lk:":{"sn":":flag_lk:","cp":"1f1f1-1f1f0","sns":[":lk:"],"c":"flags"},":flag_lr:":{"sn":":flag_lr:","cp":"1f1f1-1f1f7","sns":[":lr:"],"c":"flags"},":flag_ls:":{"sn":":flag_ls:","cp":"1f1f1-1f1f8","sns":[":ls:"],"c":"flags"},":flag_lt:":{"sn":":flag_lt:","cp":"1f1f1-1f1f9","sns":[":lt:"],"c":"flags"},":flag_lu:":{"sn":":flag_lu:","cp":"1f1f1-1f1fa","sns":[":lu:"],"c":"flags"},":flag_lv:":{"sn":":flag_lv:","cp":"1f1f1-1f1fb","sns":[":lv:"],"c":"flags"},":flag_ly:":{"sn":":flag_ly:","cp":"1f1f1-1f1fe","sns":[":ly:"],"c":"flags"},":flag_ma:":{"sn":":flag_ma:","cp":"1f1f2-1f1e6","sns":[":ma:"],"c":"flags"},":flag_mc:":{"sn":":flag_mc:","cp":"1f1f2-1f1e8","sns":[":mc:"],"c":"flags"},":flag_md:":{"sn":":flag_md:","cp":"1f1f2-1f1e9","sns":[":md:"],"c":"flags"},":flag_me:":{"sn":":flag_me:","cp":"1f1f2-1f1ea","sns":[":me:"],"c":"flags"},":flag_mf:":{"sn":":flag_mf:","cp":"1f1f2-1f1eb","sns":[":mf:"],"c":"flags"},":flag_mg:":{"sn":":flag_mg:","cp":"1f1f2-1f1ec","sns":[":mg:"],"c":"flags"},":flag_mh:":{"sn":":flag_mh:","cp":"1f1f2-1f1ed","sns":[":mh:"],"c":"flags"},":flag_mk:":{"sn":":flag_mk:","cp":"1f1f2-1f1f0","sns":[":mk:"],"c":"flags"},":flag_ml:":{"sn":":flag_ml:","cp":"1f1f2-1f1f1","sns":[":ml:"],"c":"flags"},":flag_mm:":{"sn":":flag_mm:","cp":"1f1f2-1f1f2","sns":[":mm:"],"c":"flags"},":flag_mn:":{"sn":":flag_mn:","cp":"1f1f2-1f1f3","sns":[":mn:"],"c":"flags"},":flag_mo:":{"sn":":flag_mo:","cp":"1f1f2-1f1f4","sns":[":mo:"],"c":"flags"},":flag_mp:":{"sn":":flag_mp:","cp":"1f1f2-1f1f5","sns":[":mp:"],"c":"flags"},":flag_mq:":{"sn":":flag_mq:","cp":"1f1f2-1f1f6","sns":[":mq:"],"c":"flags"},":flag_mr:":{"sn":":flag_mr:","cp":"1f1f2-1f1f7","sns":[":mr:"],"c":"flags"},":flag_ms:":{"sn":":flag_ms:","cp":"1f1f2-1f1f8","sns":[":ms:"],"c":"flags"},":flag_mt:":{"sn":":flag_mt:","cp":"1f1f2-1f1f9","sns":[":mt:"],"c":"flags"},":flag_mu:":{"sn":":flag_mu:","cp":"1f1f2-1f1fa","sns":[":mu:"],"c":"flags"},":flag_mv:":{"sn":":flag_mv:","cp":"1f1f2-1f1fb","sns":[":mv:"],"c":"flags"},":flag_mw:":{"sn":":flag_mw:","cp":"1f1f2-1f1fc","sns":[":mw:"],"c":"flags"},":flag_mx:":{"sn":":flag_mx:","cp":"1f1f2-1f1fd","sns":[":mx:"],"c":"flags"},":flag_my:":{"sn":":flag_my:","cp":"1f1f2-1f1fe","sns":[":my:"],"c":"flags"},":flag_mz:":{"sn":":flag_mz:","cp":"1f1f2-1f1ff","sns":[":mz:"],"c":"flags"},":flag_na:":{"sn":":flag_na:","cp":"1f1f3-1f1e6","sns":[":na:"],"c":"flags"},":flag_nc:":{"sn":":flag_nc:","cp":"1f1f3-1f1e8","sns":[":nc:"],"c":"flags"},":flag_ne:":{"sn":":flag_ne:","cp":"1f1f3-1f1ea","sns":[":ne:"],"c":"flags"},":flag_nf:":{"sn":":flag_nf:","cp":"1f1f3-1f1eb","sns":[":nf:"],"c":"flags"},":flag_ng:":{"sn":":flag_ng:","cp":"1f1f3-1f1ec","sns":[":nigeria:"],"c":"flags"},":flag_ni:":{"sn":":flag_ni:","cp":"1f1f3-1f1ee","sns":[":ni:"],"c":"flags"},":flag_nl:":{"sn":":flag_nl:","cp":"1f1f3-1f1f1","sns":[":nl:"],"c":"flags"},":flag_no:":{"sn":":flag_no:","cp":"1f1f3-1f1f4","sns":[":no:"],"c":"flags"},":flag_np:":{"sn":":flag_np:","cp":"1f1f3-1f1f5","sns":[":np:"],"c":"flags"},":flag_nr:":{"sn":":flag_nr:","cp":"1f1f3-1f1f7","sns":[":nr:"],"c":"flags"},":flag_nu:":{"sn":":flag_nu:","cp":"1f1f3-1f1fa","sns":[":nu:"],"c":"flags"},":flag_nz:":{"sn":":flag_nz:","cp":"1f1f3-1f1ff","sns":[":nz:"],"c":"flags"},":flag_om:":{"sn":":flag_om:","cp":"1f1f4-1f1f2","sns":[":om:"],"c":"flags"},":flag_pa:":{"sn":":flag_pa:","cp":"1f1f5-1f1e6","sns":[":pa:"],"c":"flags"},":flag_pe:":{"sn":":flag_pe:","cp":"1f1f5-1f1ea","sns":[":pe:"],"c":"flags"},":flag_pf:":{"sn":":flag_pf:","cp":"1f1f5-1f1eb","sns":[":pf:"],"c":"flags"},":flag_pg:":{"sn":":flag_pg:","cp":"1f1f5-1f1ec","sns":[":pg:"],"c":"flags"},":flag_ph:":{"sn":":flag_ph:","cp":"1f1f5-1f1ed","sns":[":ph:"],"c":"flags"},":flag_pk:":{"sn":":flag_pk:","cp":"1f1f5-1f1f0","sns":[":pk:"],"c":"flags"},":flag_pl:":{"sn":":flag_pl:","cp":"1f1f5-1f1f1","sns":[":pl:"],"c":"flags"},":flag_pm:":{"sn":":flag_pm:","cp":"1f1f5-1f1f2","sns":[":pm:"],"c":"flags"},":flag_pn:":{"sn":":flag_pn:","cp":"1f1f5-1f1f3","sns":[":pn:"],"c":"flags"},":flag_pr:":{"sn":":flag_pr:","cp":"1f1f5-1f1f7","sns":[":pr:"],"c":"flags"},":flag_ps:":{"sn":":flag_ps:","cp":"1f1f5-1f1f8","sns":[":ps:"],"c":"flags"},":flag_pt:":{"sn":":flag_pt:","cp":"1f1f5-1f1f9","sns":[":pt:"],"c":"flags"},":flag_pw:":{"sn":":flag_pw:","cp":"1f1f5-1f1fc","sns":[":pw:"],"c":"flags"},":flag_py:":{"sn":":flag_py:","cp":"1f1f5-1f1fe","sns":[":py:"],"c":"flags"},":flag_qa:":{"sn":":flag_qa:","cp":"1f1f6-1f1e6","sns":[":qa:"],"c":"flags"},":flag_re:":{"sn":":flag_re:","cp":"1f1f7-1f1ea","sns":[":re:"],"c":"flags"},":flag_ro:":{"sn":":flag_ro:","cp":"1f1f7-1f1f4","sns":[":ro:"],"c":"flags"},":flag_rs:":{"sn":":flag_rs:","cp":"1f1f7-1f1f8","sns":[":rs:"],"c":"flags"},":flag_ru:":{"sn":":flag_ru:","cp":"1f1f7-1f1fa","sns":[":ru:"],"c":"flags"},":flag_rw:":{"sn":":flag_rw:","cp":"1f1f7-1f1fc","sns":[":rw:"],"c":"flags"},":flag_sa:":{"sn":":flag_sa:","cp":"1f1f8-1f1e6","sns":[":saudiarabia:",":saudi:"],"c":"flags"},":flag_sb:":{"sn":":flag_sb:","cp":"1f1f8-1f1e7","sns":[":sb:"],"c":"flags"},":flag_sc:":{"sn":":flag_sc:","cp":"1f1f8-1f1e8","sns":[":sc:"],"c":"flags"},":flag_sd:":{"sn":":flag_sd:","cp":"1f1f8-1f1e9","sns":[":sd:"],"c":"flags"},":flag_se:":{"sn":":flag_se:","cp":"1f1f8-1f1ea","sns":[":se:"],"c":"flags"},":flag_sg:":{"sn":":flag_sg:","cp":"1f1f8-1f1ec","sns":[":sg:"],"c":"flags"},":flag_sh:":{"sn":":flag_sh:","cp":"1f1f8-1f1ed","sns":[":sh:"],"c":"flags"},":flag_si:":{"sn":":flag_si:","cp":"1f1f8-1f1ee","sns":[":si:"],"c":"flags"},":flag_sj:":{"sn":":flag_sj:","cp":"1f1f8-1f1ef","sns":[":sj:"],"c":"flags"},":flag_sk:":{"sn":":flag_sk:","cp":"1f1f8-1f1f0","sns":[":sk:"],"c":"flags"},":flag_sl:":{"sn":":flag_sl:","cp":"1f1f8-1f1f1","sns":[":sl:"],"c":"flags"},":flag_sm:":{"sn":":flag_sm:","cp":"1f1f8-1f1f2","sns":[":sm:"],"c":"flags"},":flag_sn:":{"sn":":flag_sn:","cp":"1f1f8-1f1f3","sns":[":sn:"],"c":"flags"},":flag_so:":{"sn":":flag_so:","cp":"1f1f8-1f1f4","sns":[":so:"],"c":"flags"},":flag_sr:":{"sn":":flag_sr:","cp":"1f1f8-1f1f7","sns":[":sr:"],"c":"flags"},":flag_ss:":{"sn":":flag_ss:","cp":"1f1f8-1f1f8","sns":[":ss:"],"c":"flags"},":flag_st:":{"sn":":flag_st:","cp":"1f1f8-1f1f9","sns":[":st:"],"c":"flags"},":flag_sv:":{"sn":":flag_sv:","cp":"1f1f8-1f1fb","sns":[":sv:"],"c":"flags"},":flag_sx:":{"sn":":flag_sx:","cp":"1f1f8-1f1fd","sns":[":sx:"],"c":"flags"},":flag_sy:":{"sn":":flag_sy:","cp":"1f1f8-1f1fe","sns":[":sy:"],"c":"flags"},":flag_sz:":{"sn":":flag_sz:","cp":"1f1f8-1f1ff","sns":[":sz:"],"c":"flags"},":flag_ta:":{"sn":":flag_ta:","cp":"1f1f9-1f1e6","sns":[":ta:"],"c":"flags"},":flag_tc:":{"sn":":flag_tc:","cp":"1f1f9-1f1e8","sns":[":tc:"],"c":"flags"},":flag_td:":{"sn":":flag_td:","cp":"1f1f9-1f1e9","sns":[":td:"],"c":"flags"},":flag_tf:":{"sn":":flag_tf:","cp":"1f1f9-1f1eb","sns":[":tf:"],"c":"flags"},":flag_tg:":{"sn":":flag_tg:","cp":"1f1f9-1f1ec","sns":[":tg:"],"c":"flags"},":flag_th:":{"sn":":flag_th:","cp":"1f1f9-1f1ed","sns":[":th:"],"c":"flags"},":flag_tj:":{"sn":":flag_tj:","cp":"1f1f9-1f1ef","sns":[":tj:"],"c":"flags"},":flag_tk:":{"sn":":flag_tk:","cp":"1f1f9-1f1f0","sns":[":tk:"],"c":"flags"},":flag_tl:":{"sn":":flag_tl:","cp":"1f1f9-1f1f1","sns":[":tl:"],"c":"flags"},":flag_tm:":{"sn":":flag_tm:","cp":"1f1f9-1f1f2","sns":[":turkmenistan:"],"c":"flags"},":flag_tn:":{"sn":":flag_tn:","cp":"1f1f9-1f1f3","sns":[":tn:"],"c":"flags"},":flag_to:":{"sn":":flag_to:","cp":"1f1f9-1f1f4","sns":[":to:"],"c":"flags"},":flag_tr:":{"sn":":flag_tr:","cp":"1f1f9-1f1f7","sns":[":tr:"],"c":"flags"},":flag_tt:":{"sn":":flag_tt:","cp":"1f1f9-1f1f9","sns":[":tt:"],"c":"flags"},":flag_tv:":{"sn":":flag_tv:","cp":"1f1f9-1f1fb","sns":[":tuvalu:"],"c":"flags"},":flag_tw:":{"sn":":flag_tw:","cp":"1f1f9-1f1fc","sns":[":tw:"],"c":"flags"},":flag_tz:":{"sn":":flag_tz:","cp":"1f1f9-1f1ff","sns":[":tz:"],"c":"flags"},":flag_ua:":{"sn":":flag_ua:","cp":"1f1fa-1f1e6","sns":[":ua:"],"c":"flags"},":flag_ug:":{"sn":":flag_ug:","cp":"1f1fa-1f1ec","sns":[":ug:"],"c":"flags"},":flag_um:":{"sn":":flag_um:","cp":"1f1fa-1f1f2","sns":[":um:"],"c":"flags"},":flag_us:":{"sn":":flag_us:","cp":"1f1fa-1f1f8","sns":[":us:"],"c":"flags"},":flag_uy:":{"sn":":flag_uy:","cp":"1f1fa-1f1fe","sns":[":uy:"],"c":"flags"},":flag_uz:":{"sn":":flag_uz:","cp":"1f1fa-1f1ff","sns":[":uz:"],"c":"flags"},":flag_va:":{"sn":":flag_va:","cp":"1f1fb-1f1e6","sns":[":va:"],"c":"flags"},":flag_vc:":{"sn":":flag_vc:","cp":"1f1fb-1f1e8","sns":[":vc:"],"c":"flags"},":flag_ve:":{"sn":":flag_ve:","cp":"1f1fb-1f1ea","sns":[":ve:"],"c":"flags"},":flag_vg:":{"sn":":flag_vg:","cp":"1f1fb-1f1ec","sns":[":vg:"],"c":"flags"},":flag_vi:":{"sn":":flag_vi:","cp":"1f1fb-1f1ee","sns":[":vi:"],"c":"flags"},":flag_vn:":{"sn":":flag_vn:","cp":"1f1fb-1f1f3","sns":[":vn:"],"c":"flags"},":flag_vu:":{"sn":":flag_vu:","cp":"1f1fb-1f1fa","sns":[":vu:"],"c":"flags"},":flag_wf:":{"sn":":flag_wf:","cp":"1f1fc-1f1eb","sns":[":wf:"],"c":"flags"},":flag_white:":{"sn":":flag_white:","cp":"1f3f3","sns":[":waving_white_flag:"],"c":"flags"},":flag_ws:":{"sn":":flag_ws:","cp":"1f1fc-1f1f8","sns":[":ws:"],"c":"flags"},":flag_xk:":{"sn":":flag_xk:","cp":"1f1fd-1f1f0","sns":[":xk:"],"c":"flags"},":flag_ye:":{"sn":":flag_ye:","cp":"1f1fe-1f1ea","sns":[":ye:"],"c":"flags"},":flag_yt:":{"sn":":flag_yt:","cp":"1f1fe-1f1f9","sns":[":yt:"],"c":"flags"},":flag_za:":{"sn":":flag_za:","cp":"1f1ff-1f1e6","sns":[":za:"],"c":"flags"},":flag_zm:":{"sn":":flag_zm:","cp":"1f1ff-1f1f2","sns":[":zm:"],"c":"flags"},":flag_zw:":{"sn":":flag_zw:","cp":"1f1ff-1f1fc","sns":[":zw:"],"c":"flags"},":rainbow_flag:":{"sn":":rainbow_flag:","cp":"1f3f3-fe0f-200d-1f308","sns":[":gay_pride_flag:"],"c":"flags"},":scotland:":{"sn":":scotland:","cp":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","sns":[],"c":"flags"},":triangular_flag_on_post:":{"sn":":triangular_flag_on_post:","cp":"1f6a9","sns":[],"c":"flags"},":united_nations:":{"sn":":united_nations:","cp":"1f1fa-1f1f3","sns":[],"c":"flags"},":wales:":{"sn":":wales:","cp":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","sns":[],"c":"flags"}},"modifiers":{":tone1:":{"sn":":tone1:","cp":"1f3fb","sns":[],"c":"modifier"},":tone2:":{"sn":":tone2:","cp":"1f3fc","sns":[],"c":"modifier"},":tone3:":{"sn":":tone3:","cp":"1f3fd","sns":[],"c":"modifier"},":tone4:":{"sn":":tone4:","cp":"1f3fe","sns":[],"c":"modifier"},":tone5:":{"sn":":tone5:","cp":"1f3ff","sns":[],"c":"modifier"}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{547:function(n){n.exports=JSON.parse('{"custom":{":converse:":{"sn":":converse:","url":"/dist/images/custom_emojis/converse.png","c":"custom"},":xmpp:":{"sn":":xmpp:","url":"/dist/images/custom_emojis/xmpp.png","c":"custom"}},"smileys":{":smiley:":{"sn":":smiley:","cp":"1f603","sns":[],"c":"smileys"},":smile:":{"sn":":smile:","cp":"1f604","sns":[],"c":"smileys"},":grin:":{"sn":":grin:","cp":"1f601","sns":[],"c":"smileys"},":grinning:":{"sn":":grinning:","cp":"1f600","sns":[],"c":"smileys"},":joy:":{"sn":":joy:","cp":"1f602","sns":[],"c":"smileys"},":confused:":{"sn":":confused:","cp":"1f615","sns":[],"c":"smileys"},":face_with_raised_eyebrow:":{"sn":":face_with_raised_eyebrow:","cp":"1f928","sns":[],"c":"smileys"},":angry:":{"sn":":angry:","cp":"1f620","sns":[],"c":"smileys"},":anguished:":{"sn":":anguished:","cp":"1f627","sns":[],"c":"smileys"},":astonished:":{"sn":":astonished:","cp":"1f632","sns":[],"c":"smileys"},":blush:":{"sn":":blush:","cp":"1f60a","sns":[],"c":"smileys"},":thinking:":{"sn":":thinking:","cp":"1f914","sns":[":thinking_face:"],"c":"smileys"},":cold_sweat:":{"sn":":cold_sweat:","cp":"1f630","sns":[],"c":"smileys"},":confounded:":{"sn":":confounded:","cp":"1f616","sns":[],"c":"smileys"},":crazy_face:":{"sn":":crazy_face:","cp":"1f92a","sns":[],"c":"smileys"},":cry:":{"sn":":cry:","cp":"1f622","sns":[],"c":"smileys"},":disappointed:":{"sn":":disappointed:","cp":"1f61e","sns":[],"c":"smileys"},":disappointed_relieved:":{"sn":":disappointed_relieved:","cp":"1f625","sns":[],"c":"smileys"},":dizzy_face:":{"sn":":dizzy_face:","cp":"1f635","sns":[],"c":"smileys"},":drooling_face:":{"sn":":drooling_face:","cp":"1f924","sns":[":drool:"],"c":"smileys"},":exploding_head:":{"sn":":exploding_head:","cp":"1f92f","sns":[],"c":"smileys"},":expressionless:":{"sn":":expressionless:","cp":"1f611","sns":[],"c":"smileys"},":face_vomiting:":{"sn":":face_vomiting:","cp":"1f92e","sns":[],"c":"smileys"},":face_with_hand_over_mouth:":{"sn":":face_with_hand_over_mouth:","cp":"1f92d","sns":[],"c":"smileys"},":face_with_monocle:":{"sn":":face_with_monocle:","cp":"1f9d0","sns":[],"c":"smileys"},":fearful:":{"sn":":fearful:","cp":"1f628","sns":[],"c":"smileys"},":flushed:":{"sn":":flushed:","cp":"1f633","sns":[],"c":"smileys"},":frowning:":{"sn":":frowning:","cp":"1f626","sns":[],"c":"smileys"},":grimacing:":{"sn":":grimacing:","cp":"1f62c","sns":[],"c":"smileys"},":head_bandage:":{"sn":":head_bandage:","cp":"1f915","sns":[":face_with_head_bandage:"],"c":"smileys"},":heart_eyes:":{"sn":":heart_eyes:","cp":"1f60d","sns":[],"c":"smileys"},":hugging:":{"sn":":hugging:","cp":"1f917","sns":[":hugging_face:"],"c":"smileys"},":hushed:":{"sn":":hushed:","cp":"1f62f","sns":[],"c":"smileys"},":innocent:":{"sn":":innocent:","cp":"1f607","sns":[],"c":"smileys"},":kissing:":{"sn":":kissing:","cp":"1f617","sns":[],"c":"smileys"},":kissing_closed_eyes:":{"sn":":kissing_closed_eyes:","cp":"1f61a","sns":[],"c":"smileys"},":kissing_heart:":{"sn":":kissing_heart:","cp":"1f618","sns":[],"c":"smileys"},":kissing_smiling_eyes:":{"sn":":kissing_smiling_eyes:","cp":"1f619","sns":[],"c":"smileys"},":laughing:":{"sn":":laughing:","cp":"1f606","sns":[":satisfied:"],"c":"smileys"},":lying_face:":{"sn":":lying_face:","cp":"1f925","sns":[":liar:"],"c":"smileys"},":mask:":{"sn":":mask:","cp":"1f637","sns":[],"c":"smileys"},":money_mouth:":{"sn":":money_mouth:","cp":"1f911","sns":[":money_mouth_face:"],"c":"smileys"},":nauseated_face:":{"sn":":nauseated_face:","cp":"1f922","sns":[":sick:"],"c":"smileys"},":nerd:":{"sn":":nerd:","cp":"1f913","sns":[":nerd_face:"],"c":"smileys"},":neutral_face:":{"sn":":neutral_face:","cp":"1f610","sns":[],"c":"smileys"},":no_mouth:":{"sn":":no_mouth:","cp":"1f636","sns":[],"c":"smileys"},":open_mouth:":{"sn":":open_mouth:","cp":"1f62e","sns":[],"c":"smileys"},":pensive:":{"sn":":pensive:","cp":"1f614","sns":[],"c":"smileys"},":persevere:":{"sn":":persevere:","cp":"1f623","sns":[],"c":"smileys"},":rage:":{"sn":":rage:","cp":"1f621","sns":[],"c":"smileys"},":face_with_symbols_over_mouth:":{"sn":":face_with_symbols_over_mouth:","cp":"1f92c","sns":[],"c":"smileys"},":relieved:":{"sn":":relieved:","cp":"1f60c","sns":[],"c":"smileys"},":rofl:":{"sn":":rofl:","cp":"1f923","sns":[":rolling_on_the_floor_laughing:"],"c":"smileys"},":rolling_eyes:":{"sn":":rolling_eyes:","cp":"1f644","sns":[":face_with_rolling_eyes:"],"c":"smileys"},":scream:":{"sn":":scream:","cp":"1f631","sns":[],"c":"smileys"},":shushing_face:":{"sn":":shushing_face:","cp":"1f92b","sns":[],"c":"smileys"},":sleeping:":{"sn":":sleeping:","cp":"1f634","sns":[],"c":"smileys"},":sleepy:":{"sn":":sleepy:","cp":"1f62a","sns":[],"c":"smileys"},":slight_frown:":{"sn":":slight_frown:","cp":"1f641","sns":[":slightly_frowning_face:"],"c":"smileys"},":slight_smile:":{"sn":":slight_smile:","cp":"1f642","sns":[":slightly_smiling_face:"],"c":"smileys"},":smirk:":{"sn":":smirk:","cp":"1f60f","sns":[],"c":"smileys"},":sneezing_face:":{"sn":":sneezing_face:","cp":"1f927","sns":[":sneeze:"],"c":"smileys"},":sob:":{"sn":":sob:","cp":"1f62d","sns":[],"c":"smileys"},":star_struck:":{"sn":":star_struck:","cp":"1f929","sns":[],"c":"smileys"},":stuck_out_tongue:":{"sn":":stuck_out_tongue:","cp":"1f61b","sns":[],"c":"smileys"},":stuck_out_tongue_closed_eyes:":{"sn":":stuck_out_tongue_closed_eyes:","cp":"1f61d","sns":[],"c":"smileys"},":stuck_out_tongue_winking_eye:":{"sn":":stuck_out_tongue_winking_eye:","cp":"1f61c","sns":[],"c":"smileys"},":sunglasses:":{"sn":":sunglasses:","cp":"1f60e","sns":[],"c":"smileys"},":sweat:":{"sn":":sweat:","cp":"1f613","sns":[],"c":"smileys"},":sweat_smile:":{"sn":":sweat_smile:","cp":"1f605","sns":[],"c":"smileys"},":thermometer_face:":{"sn":":thermometer_face:","cp":"1f912","sns":[":face_with_thermometer:"],"c":"smileys"},":tired_face:":{"sn":":tired_face:","cp":"1f62b","sns":[],"c":"smileys"},":triumph:":{"sn":":triumph:","cp":"1f624","sns":[],"c":"smileys"},":unamused:":{"sn":":unamused:","cp":"1f612","sns":[],"c":"smileys"},":upside_down:":{"sn":":upside_down:","cp":"1f643","sns":[":upside_down_face:"],"c":"smileys"},":weary:":{"sn":":weary:","cp":"1f629","sns":[],"c":"smileys"},":wink:":{"sn":":wink:","cp":"1f609","sns":[],"c":"smileys"},":worried:":{"sn":":worried:","cp":"1f61f","sns":[],"c":"smileys"},":yum:":{"sn":":yum:","cp":"1f60b","sns":[],"c":"smileys"},":zipper_mouth:":{"sn":":zipper_mouth:","cp":"1f910","sns":[":zipper_mouth_face:"],"c":"smileys"},":cowboy:":{"sn":":cowboy:","cp":"1f920","sns":[":face_with_cowboy_hat:"],"c":"smileys"},":joy_cat:":{"sn":":joy_cat:","cp":"1f639","sns":[],"c":"smileys"},":crying_cat_face:":{"sn":":crying_cat_face:","cp":"1f63f","sns":[],"c":"smileys"},":kissing_cat:":{"sn":":kissing_cat:","cp":"1f63d","sns":[],"c":"smileys"},":pouting_cat:":{"sn":":pouting_cat:","cp":"1f63e","sns":[],"c":"smileys"},":scream_cat:":{"sn":":scream_cat:","cp":"1f640","sns":[],"c":"smileys"},":smile_cat:":{"sn":":smile_cat:","cp":"1f638","sns":[],"c":"smileys"},":smiley_cat:":{"sn":":smiley_cat:","cp":"1f63a","sns":[],"c":"smileys"},":smirk_cat:":{"sn":":smirk_cat:","cp":"1f63c","sns":[],"c":"smileys"},":heart_eyes_cat:":{"sn":":heart_eyes_cat:","cp":"1f63b","sns":[],"c":"smileys"},":poop:":{"sn":":poop:","cp":"1f4a9","sns":[":shit:",":hankey:",":poo:"],"c":"smileys"},":robot:":{"sn":":robot:","cp":"1f916","sns":[":robot_face:"],"c":"smileys"},":skull:":{"sn":":skull:","cp":"1f480","sns":[":skeleton:"],"c":"smileys"},":jack_o_lantern:":{"sn":":jack_o_lantern:","cp":"1f383","sns":[],"c":"smileys"},":alien:":{"sn":":alien:","cp":"1f47d","sns":[],"c":"smileys"},":clown:":{"sn":":clown:","cp":"1f921","sns":[":clown_face:"],"c":"smileys"},":japanese_goblin:":{"sn":":japanese_goblin:","cp":"1f47a","sns":[],"c":"smileys"},":japanese_ogre:":{"sn":":japanese_ogre:","cp":"1f479","sns":[],"c":"smileys"},":imp:":{"sn":":imp:","cp":"1f47f","sns":[],"c":"smileys"},":smiling_imp:":{"sn":":smiling_imp:","cp":"1f608","sns":[],"c":"smileys"}},"people":{":ok_hand:":{"sn":":ok_hand:","cp":"1f44c","sns":[],"c":"people"},":ok_hand_tone1:":{"sn":":ok_hand_tone1:","cp":"1f44c-1f3fb","sns":[],"c":"people"},":ok_hand_tone2:":{"sn":":ok_hand_tone2:","cp":"1f44c-1f3fc","sns":[],"c":"people"},":ok_hand_tone3:":{"sn":":ok_hand_tone3:","cp":"1f44c-1f3fd","sns":[],"c":"people"},":ok_hand_tone4:":{"sn":":ok_hand_tone4:","cp":"1f44c-1f3fe","sns":[],"c":"people"},":ok_hand_tone5:":{"sn":":ok_hand_tone5:","cp":"1f44c-1f3ff","sns":[],"c":"people"},":thumbsdown:":{"sn":":thumbsdown:","cp":"1f44e","sns":[":-1:",":thumbdown:"],"c":"people"},":thumbsdown_tone1:":{"sn":":thumbsdown_tone1:","cp":"1f44e-1f3fb","sns":[":-1_tone1:",":thumbdown_tone1:"],"c":"people"},":thumbsdown_tone2:":{"sn":":thumbsdown_tone2:","cp":"1f44e-1f3fc","sns":[":-1_tone2:",":thumbdown_tone2:"],"c":"people"},":thumbsdown_tone3:":{"sn":":thumbsdown_tone3:","cp":"1f44e-1f3fd","sns":[":-1_tone3:",":thumbdown_tone3:"],"c":"people"},":thumbsdown_tone4:":{"sn":":thumbsdown_tone4:","cp":"1f44e-1f3fe","sns":[":-1_tone4:",":thumbdown_tone4:"],"c":"people"},":thumbsdown_tone5:":{"sn":":thumbsdown_tone5:","cp":"1f44e-1f3ff","sns":[":-1_tone5:",":thumbdown_tone5:"],"c":"people"},":thumbsup:":{"sn":":thumbsup:","cp":"1f44d","sns":[":+1:",":thumbup:"],"c":"people"},":thumbsup_tone1:":{"sn":":thumbsup_tone1:","cp":"1f44d-1f3fb","sns":[":+1_tone1:",":thumbup_tone1:"],"c":"people"},":thumbsup_tone2:":{"sn":":thumbsup_tone2:","cp":"1f44d-1f3fc","sns":[":+1_tone2:",":thumbup_tone2:"],"c":"people"},":thumbsup_tone3:":{"sn":":thumbsup_tone3:","cp":"1f44d-1f3fd","sns":[":+1_tone3:",":thumbup_tone3:"],"c":"people"},":thumbsup_tone4:":{"sn":":thumbsup_tone4:","cp":"1f44d-1f3fe","sns":[":+1_tone4:",":thumbup_tone4:"],"c":"people"},":thumbsup_tone5:":{"sn":":thumbsup_tone5:","cp":"1f44d-1f3ff","sns":[":+1_tone5:",":thumbup_tone5:"],"c":"people"},":wave:":{"sn":":wave:","cp":"1f44b","sns":[],"c":"people"},":wave_tone1:":{"sn":":wave_tone1:","cp":"1f44b-1f3fb","sns":[],"c":"people"},":wave_tone2:":{"sn":":wave_tone2:","cp":"1f44b-1f3fc","sns":[],"c":"people"},":wave_tone3:":{"sn":":wave_tone3:","cp":"1f44b-1f3fd","sns":[],"c":"people"},":wave_tone4:":{"sn":":wave_tone4:","cp":"1f44b-1f3fe","sns":[],"c":"people"},":wave_tone5:":{"sn":":wave_tone5:","cp":"1f44b-1f3ff","sns":[],"c":"people"},":call_me:":{"sn":":call_me:","cp":"1f919","sns":[":call_me_hand:"],"c":"people"},":call_me_tone1:":{"sn":":call_me_tone1:","cp":"1f919-1f3fb","sns":[":call_me_hand_tone1:"],"c":"people"},":call_me_tone2:":{"sn":":call_me_tone2:","cp":"1f919-1f3fc","sns":[":call_me_hand_tone2:"],"c":"people"},":call_me_tone3:":{"sn":":call_me_tone3:","cp":"1f919-1f3fd","sns":[":call_me_hand_tone3:"],"c":"people"},":call_me_tone4:":{"sn":":call_me_tone4:","cp":"1f919-1f3fe","sns":[":call_me_hand_tone4:"],"c":"people"},":call_me_tone5:":{"sn":":call_me_tone5:","cp":"1f919-1f3ff","sns":[":call_me_hand_tone5:"],"c":"people"},":clap:":{"sn":":clap:","cp":"1f44f","sns":[],"c":"people"},":clap_tone1:":{"sn":":clap_tone1:","cp":"1f44f-1f3fb","sns":[],"c":"people"},":clap_tone2:":{"sn":":clap_tone2:","cp":"1f44f-1f3fc","sns":[],"c":"people"},":clap_tone3:":{"sn":":clap_tone3:","cp":"1f44f-1f3fd","sns":[],"c":"people"},":clap_tone4:":{"sn":":clap_tone4:","cp":"1f44f-1f3fe","sns":[],"c":"people"},":clap_tone5:":{"sn":":clap_tone5:","cp":"1f44f-1f3ff","sns":[],"c":"people"},":hand_splayed:":{"sn":":hand_splayed:","cp":"1f590","sns":[":raised_hand_with_fingers_splayed:"],"c":"people"},":hand_splayed_tone1:":{"sn":":hand_splayed_tone1:","cp":"1f590-1f3fb","sns":[":raised_hand_with_fingers_splayed_tone1:"],"c":"people"},":hand_splayed_tone2:":{"sn":":hand_splayed_tone2:","cp":"1f590-1f3fc","sns":[":raised_hand_with_fingers_splayed_tone2:"],"c":"people"},":hand_splayed_tone3:":{"sn":":hand_splayed_tone3:","cp":"1f590-1f3fd","sns":[":raised_hand_with_fingers_splayed_tone3:"],"c":"people"},":hand_splayed_tone4:":{"sn":":hand_splayed_tone4:","cp":"1f590-1f3fe","sns":[":raised_hand_with_fingers_splayed_tone4:"],"c":"people"},":hand_splayed_tone5:":{"sn":":hand_splayed_tone5:","cp":"1f590-1f3ff","sns":[":raised_hand_with_fingers_splayed_tone5:"],"c":"people"},":love_you_gesture:":{"sn":":love_you_gesture:","cp":"1f91f","sns":[],"c":"people"},":love_you_gesture_tone1:":{"sn":":love_you_gesture_tone1:","cp":"1f91f-1f3fb","sns":[":love_you_gesture_light_skin_tone:"],"c":"people"},":love_you_gesture_tone2:":{"sn":":love_you_gesture_tone2:","cp":"1f91f-1f3fc","sns":[":love_you_gesture_medium_light_skin_tone:"],"c":"people"},":love_you_gesture_tone3:":{"sn":":love_you_gesture_tone3:","cp":"1f91f-1f3fd","sns":[":love_you_gesture_medium_skin_tone:"],"c":"people"},":love_you_gesture_tone4:":{"sn":":love_you_gesture_tone4:","cp":"1f91f-1f3fe","sns":[":love_you_gesture_medium_dark_skin_tone:"],"c":"people"},":love_you_gesture_tone5:":{"sn":":love_you_gesture_tone5:","cp":"1f91f-1f3ff","sns":[":love_you_gesture_dark_skin_tone:"],"c":"people"},":right_facing_fist:":{"sn":":right_facing_fist:","cp":"1f91c","sns":[":right_fist:"],"c":"people"},":right_facing_fist_tone1:":{"sn":":right_facing_fist_tone1:","cp":"1f91c-1f3fb","sns":[":right_fist_tone1:"],"c":"people"},":right_facing_fist_tone2:":{"sn":":right_facing_fist_tone2:","cp":"1f91c-1f3fc","sns":[":right_fist_tone2:"],"c":"people"},":right_facing_fist_tone3:":{"sn":":right_facing_fist_tone3:","cp":"1f91c-1f3fd","sns":[":right_fist_tone3:"],"c":"people"},":right_facing_fist_tone4:":{"sn":":right_facing_fist_tone4:","cp":"1f91c-1f3fe","sns":[":right_fist_tone4:"],"c":"people"},":right_facing_fist_tone5:":{"sn":":right_facing_fist_tone5:","cp":"1f91c-1f3ff","sns":[":right_fist_tone5:"],"c":"people"},":left_facing_fist:":{"sn":":left_facing_fist:","cp":"1f91b","sns":[":left_fist:"],"c":"people"},":left_facing_fist_tone1:":{"sn":":left_facing_fist_tone1:","cp":"1f91b-1f3fb","sns":[":left_fist_tone1:"],"c":"people"},":left_facing_fist_tone2:":{"sn":":left_facing_fist_tone2:","cp":"1f91b-1f3fc","sns":[":left_fist_tone2:"],"c":"people"},":left_facing_fist_tone3:":{"sn":":left_facing_fist_tone3:","cp":"1f91b-1f3fd","sns":[":left_fist_tone3:"],"c":"people"},":left_facing_fist_tone4:":{"sn":":left_facing_fist_tone4:","cp":"1f91b-1f3fe","sns":[":left_fist_tone4:"],"c":"people"},":left_facing_fist_tone5:":{"sn":":left_facing_fist_tone5:","cp":"1f91b-1f3ff","sns":[":left_fist_tone5:"],"c":"people"},":muscle:":{"sn":":muscle:","cp":"1f4aa","sns":[],"c":"people"},":muscle_tone1:":{"sn":":muscle_tone1:","cp":"1f4aa-1f3fb","sns":[],"c":"people"},":muscle_tone2:":{"sn":":muscle_tone2:","cp":"1f4aa-1f3fc","sns":[],"c":"people"},":muscle_tone3:":{"sn":":muscle_tone3:","cp":"1f4aa-1f3fd","sns":[],"c":"people"},":muscle_tone4:":{"sn":":muscle_tone4:","cp":"1f4aa-1f3fe","sns":[],"c":"people"},":muscle_tone5:":{"sn":":muscle_tone5:","cp":"1f4aa-1f3ff","sns":[],"c":"people"},":fingers_crossed:":{"sn":":fingers_crossed:","cp":"1f91e","sns":[":hand_with_index_and_middle_finger_crossed:"],"c":"people"},":fingers_crossed_tone1:":{"sn":":fingers_crossed_tone1:","cp":"1f91e-1f3fb","sns":[":hand_with_index_and_middle_fingers_crossed_tone1:"],"c":"people"},":fingers_crossed_tone2:":{"sn":":fingers_crossed_tone2:","cp":"1f91e-1f3fc","sns":[":hand_with_index_and_middle_fingers_crossed_tone2:"],"c":"people"},":fingers_crossed_tone3:":{"sn":":fingers_crossed_tone3:","cp":"1f91e-1f3fd","sns":[":hand_with_index_and_middle_fingers_crossed_tone3:"],"c":"people"},":fingers_crossed_tone4:":{"sn":":fingers_crossed_tone4:","cp":"1f91e-1f3fe","sns":[":hand_with_index_and_middle_fingers_crossed_tone4:"],"c":"people"},":fingers_crossed_tone5:":{"sn":":fingers_crossed_tone5:","cp":"1f91e-1f3ff","sns":[":hand_with_index_and_middle_fingers_crossed_tone5:"],"c":"people"},":fist:":{"sn":":fist:","cp":"270a","sns":[],"c":"people"},":fist_tone1:":{"sn":":fist_tone1:","cp":"270a-1f3fb","sns":[],"c":"people"},":fist_tone2:":{"sn":":fist_tone2:","cp":"270a-1f3fc","sns":[],"c":"people"},":fist_tone3:":{"sn":":fist_tone3:","cp":"270a-1f3fd","sns":[],"c":"people"},":fist_tone4:":{"sn":":fist_tone4:","cp":"270a-1f3fe","sns":[],"c":"people"},":fist_tone5:":{"sn":":fist_tone5:","cp":"270a-1f3ff","sns":[],"c":"people"},":punch:":{"sn":":punch:","cp":"1f44a","sns":[],"c":"people"},":punch_tone1:":{"sn":":punch_tone1:","cp":"1f44a-1f3fb","sns":[],"c":"people"},":punch_tone2:":{"sn":":punch_tone2:","cp":"1f44a-1f3fc","sns":[],"c":"people"},":punch_tone3:":{"sn":":punch_tone3:","cp":"1f44a-1f3fd","sns":[],"c":"people"},":punch_tone4:":{"sn":":punch_tone4:","cp":"1f44a-1f3fe","sns":[],"c":"people"},":punch_tone5:":{"sn":":punch_tone5:","cp":"1f44a-1f3ff","sns":[],"c":"people"},":raised_back_of_hand:":{"sn":":raised_back_of_hand:","cp":"1f91a","sns":[":back_of_hand:"],"c":"people"},":raised_back_of_hand_tone1:":{"sn":":raised_back_of_hand_tone1:","cp":"1f91a-1f3fb","sns":[":back_of_hand_tone1:"],"c":"people"},":raised_back_of_hand_tone2:":{"sn":":raised_back_of_hand_tone2:","cp":"1f91a-1f3fc","sns":[":back_of_hand_tone2:"],"c":"people"},":raised_back_of_hand_tone3:":{"sn":":raised_back_of_hand_tone3:","cp":"1f91a-1f3fd","sns":[":back_of_hand_tone3:"],"c":"people"},":raised_back_of_hand_tone4:":{"sn":":raised_back_of_hand_tone4:","cp":"1f91a-1f3fe","sns":[":back_of_hand_tone4:"],"c":"people"},":raised_back_of_hand_tone5:":{"sn":":raised_back_of_hand_tone5:","cp":"1f91a-1f3ff","sns":[":back_of_hand_tone5:"],"c":"people"},":raised_hand:":{"sn":":raised_hand:","cp":"270b","sns":[],"c":"people"},":raised_hand_tone1:":{"sn":":raised_hand_tone1:","cp":"270b-1f3fb","sns":[],"c":"people"},":raised_hand_tone2:":{"sn":":raised_hand_tone2:","cp":"270b-1f3fc","sns":[],"c":"people"},":raised_hand_tone3:":{"sn":":raised_hand_tone3:","cp":"270b-1f3fd","sns":[],"c":"people"},":raised_hand_tone4:":{"sn":":raised_hand_tone4:","cp":"270b-1f3fe","sns":[],"c":"people"},":raised_hand_tone5:":{"sn":":raised_hand_tone5:","cp":"270b-1f3ff","sns":[],"c":"people"},":raised_hands:":{"sn":":raised_hands:","cp":"1f64c","sns":[],"c":"people"},":raised_hands_tone1:":{"sn":":raised_hands_tone1:","cp":"1f64c-1f3fb","sns":[],"c":"people"},":raised_hands_tone2:":{"sn":":raised_hands_tone2:","cp":"1f64c-1f3fc","sns":[],"c":"people"},":raised_hands_tone3:":{"sn":":raised_hands_tone3:","cp":"1f64c-1f3fd","sns":[],"c":"people"},":raised_hands_tone4:":{"sn":":raised_hands_tone4:","cp":"1f64c-1f3fe","sns":[],"c":"people"},":raised_hands_tone5:":{"sn":":raised_hands_tone5:","cp":"1f64c-1f3ff","sns":[],"c":"people"},":open_hands:":{"sn":":open_hands:","cp":"1f450","sns":[],"c":"people"},":open_hands_tone1:":{"sn":":open_hands_tone1:","cp":"1f450-1f3fb","sns":[],"c":"people"},":open_hands_tone2:":{"sn":":open_hands_tone2:","cp":"1f450-1f3fc","sns":[],"c":"people"},":open_hands_tone3:":{"sn":":open_hands_tone3:","cp":"1f450-1f3fd","sns":[],"c":"people"},":open_hands_tone4:":{"sn":":open_hands_tone4:","cp":"1f450-1f3fe","sns":[],"c":"people"},":open_hands_tone5:":{"sn":":open_hands_tone5:","cp":"1f450-1f3ff","sns":[],"c":"people"},":palms_up_together:":{"sn":":palms_up_together:","cp":"1f932","sns":[],"c":"people"},":palms_up_together_tone1:":{"sn":":palms_up_together_tone1:","cp":"1f932-1f3fb","sns":[":palms_up_together_light_skin_tone:"],"c":"people"},":palms_up_together_tone2:":{"sn":":palms_up_together_tone2:","cp":"1f932-1f3fc","sns":[":palms_up_together_medium_light_skin_tone:"],"c":"people"},":palms_up_together_tone3:":{"sn":":palms_up_together_tone3:","cp":"1f932-1f3fd","sns":[":palms_up_together_medium_skin_tone:"],"c":"people"},":palms_up_together_tone4:":{"sn":":palms_up_together_tone4:","cp":"1f932-1f3fe","sns":[":palms_up_together_medium_dark_skin_tone:"],"c":"people"},":palms_up_together_tone5:":{"sn":":palms_up_together_tone5:","cp":"1f932-1f3ff","sns":[":palms_up_together_dark_skin_tone:"],"c":"people"},":point_down:":{"sn":":point_down:","cp":"1f447","sns":[],"c":"people"},":point_down_tone1:":{"sn":":point_down_tone1:","cp":"1f447-1f3fb","sns":[],"c":"people"},":point_down_tone2:":{"sn":":point_down_tone2:","cp":"1f447-1f3fc","sns":[],"c":"people"},":point_down_tone3:":{"sn":":point_down_tone3:","cp":"1f447-1f3fd","sns":[],"c":"people"},":point_down_tone4:":{"sn":":point_down_tone4:","cp":"1f447-1f3fe","sns":[],"c":"people"},":point_down_tone5:":{"sn":":point_down_tone5:","cp":"1f447-1f3ff","sns":[],"c":"people"},":point_left:":{"sn":":point_left:","cp":"1f448","sns":[],"c":"people"},":point_left_tone1:":{"sn":":point_left_tone1:","cp":"1f448-1f3fb","sns":[],"c":"people"},":point_left_tone2:":{"sn":":point_left_tone2:","cp":"1f448-1f3fc","sns":[],"c":"people"},":point_left_tone3:":{"sn":":point_left_tone3:","cp":"1f448-1f3fd","sns":[],"c":"people"},":point_left_tone4:":{"sn":":point_left_tone4:","cp":"1f448-1f3fe","sns":[],"c":"people"},":point_left_tone5:":{"sn":":point_left_tone5:","cp":"1f448-1f3ff","sns":[],"c":"people"},":point_right:":{"sn":":point_right:","cp":"1f449","sns":[],"c":"people"},":point_right_tone1:":{"sn":":point_right_tone1:","cp":"1f449-1f3fb","sns":[],"c":"people"},":point_right_tone2:":{"sn":":point_right_tone2:","cp":"1f449-1f3fc","sns":[],"c":"people"},":point_right_tone3:":{"sn":":point_right_tone3:","cp":"1f449-1f3fd","sns":[],"c":"people"},":point_right_tone4:":{"sn":":point_right_tone4:","cp":"1f449-1f3fe","sns":[],"c":"people"},":point_right_tone5:":{"sn":":point_right_tone5:","cp":"1f449-1f3ff","sns":[],"c":"people"},":point_up:":{"sn":":point_up:","cp":"261d","sns":[],"c":"people"},":point_up_2:":{"sn":":point_up_2:","cp":"1f446","sns":[],"c":"people"},":point_up_2_tone1:":{"sn":":point_up_2_tone1:","cp":"1f446-1f3fb","sns":[],"c":"people"},":point_up_2_tone2:":{"sn":":point_up_2_tone2:","cp":"1f446-1f3fc","sns":[],"c":"people"},":point_up_2_tone3:":{"sn":":point_up_2_tone3:","cp":"1f446-1f3fd","sns":[],"c":"people"},":point_up_2_tone4:":{"sn":":point_up_2_tone4:","cp":"1f446-1f3fe","sns":[],"c":"people"},":point_up_2_tone5:":{"sn":":point_up_2_tone5:","cp":"1f446-1f3ff","sns":[],"c":"people"},":point_up_tone1:":{"sn":":point_up_tone1:","cp":"261d-1f3fb","sns":[],"c":"people"},":point_up_tone2:":{"sn":":point_up_tone2:","cp":"261d-1f3fc","sns":[],"c":"people"},":point_up_tone3:":{"sn":":point_up_tone3:","cp":"261d-1f3fd","sns":[],"c":"people"},":point_up_tone4:":{"sn":":point_up_tone4:","cp":"261d-1f3fe","sns":[],"c":"people"},":point_up_tone5:":{"sn":":point_up_tone5:","cp":"261d-1f3ff","sns":[],"c":"people"},":v:":{"sn":":v:","cp":"270c","sns":[],"c":"people"},":v_tone1:":{"sn":":v_tone1:","cp":"270c-1f3fb","sns":[],"c":"people"},":v_tone2:":{"sn":":v_tone2:","cp":"270c-1f3fc","sns":[],"c":"people"},":v_tone3:":{"sn":":v_tone3:","cp":"270c-1f3fd","sns":[],"c":"people"},":v_tone4:":{"sn":":v_tone4:","cp":"270c-1f3fe","sns":[],"c":"people"},":v_tone5:":{"sn":":v_tone5:","cp":"270c-1f3ff","sns":[],"c":"people"},":vulcan:":{"sn":":vulcan:","cp":"1f596","sns":[":raised_hand_with_part_between_middle_and_ring_fingers:"],"c":"people"},":vulcan_tone1:":{"sn":":vulcan_tone1:","cp":"1f596-1f3fb","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone1:"],"c":"people"},":vulcan_tone2:":{"sn":":vulcan_tone2:","cp":"1f596-1f3fc","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone2:"],"c":"people"},":vulcan_tone3:":{"sn":":vulcan_tone3:","cp":"1f596-1f3fd","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone3:"],"c":"people"},":vulcan_tone4:":{"sn":":vulcan_tone4:","cp":"1f596-1f3fe","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone4:"],"c":"people"},":vulcan_tone5:":{"sn":":vulcan_tone5:","cp":"1f596-1f3ff","sns":[":raised_hand_with_part_between_middle_and_ring_fingers_tone5:"],"c":"people"},":metal:":{"sn":":metal:","cp":"1f918","sns":[":sign_of_the_horns:"],"c":"people"},":metal_tone1:":{"sn":":metal_tone1:","cp":"1f918-1f3fb","sns":[":sign_of_the_horns_tone1:"],"c":"people"},":metal_tone2:":{"sn":":metal_tone2:","cp":"1f918-1f3fc","sns":[":sign_of_the_horns_tone2:"],"c":"people"},":metal_tone3:":{"sn":":metal_tone3:","cp":"1f918-1f3fd","sns":[":sign_of_the_horns_tone3:"],"c":"people"},":metal_tone4:":{"sn":":metal_tone4:","cp":"1f918-1f3fe","sns":[":sign_of_the_horns_tone4:"],"c":"people"},":metal_tone5:":{"sn":":metal_tone5:","cp":"1f918-1f3ff","sns":[":sign_of_the_horns_tone5:"],"c":"people"},":middle_finger:":{"sn":":middle_finger:","cp":"1f595","sns":[":reversed_hand_with_middle_finger_extended:"],"c":"people"},":middle_finger_tone1:":{"sn":":middle_finger_tone1:","cp":"1f595-1f3fb","sns":[":reversed_hand_with_middle_finger_extended_tone1:"],"c":"people"},":middle_finger_tone2:":{"sn":":middle_finger_tone2:","cp":"1f595-1f3fc","sns":[":reversed_hand_with_middle_finger_extended_tone2:"],"c":"people"},":middle_finger_tone3:":{"sn":":middle_finger_tone3:","cp":"1f595-1f3fd","sns":[":reversed_hand_with_middle_finger_extended_tone3:"],"c":"people"},":middle_finger_tone4:":{"sn":":middle_finger_tone4:","cp":"1f595-1f3fe","sns":[":reversed_hand_with_middle_finger_extended_tone4:"],"c":"people"},":middle_finger_tone5:":{"sn":":middle_finger_tone5:","cp":"1f595-1f3ff","sns":[":reversed_hand_with_middle_finger_extended_tone5:"],"c":"people"},":pray:":{"sn":":pray:","cp":"1f64f","sns":[],"c":"people"},":pray_tone1:":{"sn":":pray_tone1:","cp":"1f64f-1f3fb","sns":[],"c":"people"},":pray_tone2:":{"sn":":pray_tone2:","cp":"1f64f-1f3fc","sns":[],"c":"people"},":pray_tone3:":{"sn":":pray_tone3:","cp":"1f64f-1f3fd","sns":[],"c":"people"},":pray_tone4:":{"sn":":pray_tone4:","cp":"1f64f-1f3fe","sns":[],"c":"people"},":pray_tone5:":{"sn":":pray_tone5:","cp":"1f64f-1f3ff","sns":[],"c":"people"},":handshake:":{"sn":":handshake:","cp":"1f91d","sns":[":shaking_hands:"],"c":"people"},":handshake_tone1:":{"sn":":handshake_tone1:","cp":"1f91d-1f3fb","sns":[],"c":"people"},":handshake_tone2:":{"sn":":handshake_tone2:","cp":"1f91d-1f3fc","sns":[],"c":"people"},":handshake_tone3:":{"sn":":handshake_tone3:","cp":"1f91d-1f3fd","sns":[],"c":"people"},":handshake_tone4:":{"sn":":handshake_tone4:","cp":"1f91d-1f3fe","sns":[],"c":"people"},":handshake_tone5:":{"sn":":handshake_tone5:","cp":"1f91d-1f3ff","sns":[],"c":"people"},":writing_hand:":{"sn":":writing_hand:","cp":"270d","sns":[],"c":"people"},":writing_hand_tone1:":{"sn":":writing_hand_tone1:","cp":"270d-1f3fb","sns":[],"c":"people"},":writing_hand_tone2:":{"sn":":writing_hand_tone2:","cp":"270d-1f3fc","sns":[],"c":"people"},":writing_hand_tone3:":{"sn":":writing_hand_tone3:","cp":"270d-1f3fd","sns":[],"c":"people"},":writing_hand_tone4:":{"sn":":writing_hand_tone4:","cp":"270d-1f3fe","sns":[],"c":"people"},":writing_hand_tone5:":{"sn":":writing_hand_tone5:","cp":"270d-1f3ff","sns":[],"c":"people"},":selfie:":{"sn":":selfie:","cp":"1f933","sns":[],"c":"people"},":selfie_tone1:":{"sn":":selfie_tone1:","cp":"1f933-1f3fb","sns":[],"c":"people"},":selfie_tone2:":{"sn":":selfie_tone2:","cp":"1f933-1f3fc","sns":[],"c":"people"},":selfie_tone3:":{"sn":":selfie_tone3:","cp":"1f933-1f3fd","sns":[],"c":"people"},":selfie_tone4:":{"sn":":selfie_tone4:","cp":"1f933-1f3fe","sns":[],"c":"people"},":selfie_tone5:":{"sn":":selfie_tone5:","cp":"1f933-1f3ff","sns":[],"c":"people"},":nail_care:":{"sn":":nail_care:","cp":"1f485","sns":[],"c":"people"},":nail_care_tone1:":{"sn":":nail_care_tone1:","cp":"1f485-1f3fb","sns":[],"c":"people"},":nail_care_tone2:":{"sn":":nail_care_tone2:","cp":"1f485-1f3fc","sns":[],"c":"people"},":nail_care_tone3:":{"sn":":nail_care_tone3:","cp":"1f485-1f3fd","sns":[],"c":"people"},":nail_care_tone4:":{"sn":":nail_care_tone4:","cp":"1f485-1f3fe","sns":[],"c":"people"},":nail_care_tone5:":{"sn":":nail_care_tone5:","cp":"1f485-1f3ff","sns":[],"c":"people"},":adult:":{"sn":":adult:","cp":"1f9d1","sns":[],"c":"people"},":adult_tone1:":{"sn":":adult_tone1:","cp":"1f9d1-1f3fb","sns":[":adult_light_skin_tone:"],"c":"people"},":adult_tone2:":{"sn":":adult_tone2:","cp":"1f9d1-1f3fc","sns":[":adult_medium_light_skin_tone:"],"c":"people"},":adult_tone3:":{"sn":":adult_tone3:","cp":"1f9d1-1f3fd","sns":[":adult_medium_skin_tone:"],"c":"people"},":adult_tone4:":{"sn":":adult_tone4:","cp":"1f9d1-1f3fe","sns":[":adult_medium_dark_skin_tone:"],"c":"people"},":adult_tone5:":{"sn":":adult_tone5:","cp":"1f9d1-1f3ff","sns":[":adult_dark_skin_tone:"],"c":"people"},":angel:":{"sn":":angel:","cp":"1f47c","sns":[],"c":"people"},":angel_tone1:":{"sn":":angel_tone1:","cp":"1f47c-1f3fb","sns":[],"c":"people"},":angel_tone2:":{"sn":":angel_tone2:","cp":"1f47c-1f3fc","sns":[],"c":"people"},":angel_tone3:":{"sn":":angel_tone3:","cp":"1f47c-1f3fd","sns":[],"c":"people"},":angel_tone4:":{"sn":":angel_tone4:","cp":"1f47c-1f3fe","sns":[],"c":"people"},":angel_tone5:":{"sn":":angel_tone5:","cp":"1f47c-1f3ff","sns":[],"c":"people"},":baby:":{"sn":":baby:","cp":"1f476","sns":[],"c":"people"},":baby_tone1:":{"sn":":baby_tone1:","cp":"1f476-1f3fb","sns":[],"c":"people"},":baby_tone2:":{"sn":":baby_tone2:","cp":"1f476-1f3fc","sns":[],"c":"people"},":baby_tone3:":{"sn":":baby_tone3:","cp":"1f476-1f3fd","sns":[],"c":"people"},":baby_tone4:":{"sn":":baby_tone4:","cp":"1f476-1f3fe","sns":[],"c":"people"},":baby_tone5:":{"sn":":baby_tone5:","cp":"1f476-1f3ff","sns":[],"c":"people"},":bearded_person:":{"sn":":bearded_person:","cp":"1f9d4","sns":[],"c":"people"},":bearded_person_tone1:":{"sn":":bearded_person_tone1:","cp":"1f9d4-1f3fb","sns":[":bearded_person_light_skin_tone:"],"c":"people"},":bearded_person_tone2:":{"sn":":bearded_person_tone2:","cp":"1f9d4-1f3fc","sns":[":bearded_person_medium_light_skin_tone:"],"c":"people"},":bearded_person_tone3:":{"sn":":bearded_person_tone3:","cp":"1f9d4-1f3fd","sns":[":bearded_person_medium_skin_tone:"],"c":"people"},":bearded_person_tone4:":{"sn":":bearded_person_tone4:","cp":"1f9d4-1f3fe","sns":[":bearded_person_medium_dark_skin_tone:"],"c":"people"},":bearded_person_tone5:":{"sn":":bearded_person_tone5:","cp":"1f9d4-1f3ff","sns":[":bearded_person_dark_skin_tone:"],"c":"people"},":blond-haired_man:":{"sn":":blond-haired_man:","cp":"1f471-200d-2642-fe0f","sns":[],"c":"people"},":blond-haired_man_tone1:":{"sn":":blond-haired_man_tone1:","cp":"1f471-1f3fb-200d-2642-fe0f","sns":[":blond-haired_man_light_skin_tone:"],"c":"people"},":blond-haired_man_tone2:":{"sn":":blond-haired_man_tone2:","cp":"1f471-1f3fc-200d-2642-fe0f","sns":[":blond-haired_man_medium_light_skin_tone:"],"c":"people"},":blond-haired_man_tone3:":{"sn":":blond-haired_man_tone3:","cp":"1f471-1f3fd-200d-2642-fe0f","sns":[":blond-haired_man_medium_skin_tone:"],"c":"people"},":blond-haired_man_tone4:":{"sn":":blond-haired_man_tone4:","cp":"1f471-1f3fe-200d-2642-fe0f","sns":[":blond-haired_man_medium_dark_skin_tone:"],"c":"people"},":blond-haired_man_tone5:":{"sn":":blond-haired_man_tone5:","cp":"1f471-1f3ff-200d-2642-fe0f","sns":[":blond-haired_man_dark_skin_tone:"],"c":"people"},":blond-haired_woman:":{"sn":":blond-haired_woman:","cp":"1f471-200d-2640-fe0f","sns":[],"c":"people"},":blond-haired_woman_tone1:":{"sn":":blond-haired_woman_tone1:","cp":"1f471-1f3fb-200d-2640-fe0f","sns":[":blond-haired_woman_light_skin_tone:"],"c":"people"},":blond-haired_woman_tone2:":{"sn":":blond-haired_woman_tone2:","cp":"1f471-1f3fc-200d-2640-fe0f","sns":[":blond-haired_woman_medium_light_skin_tone:"],"c":"people"},":blond-haired_woman_tone3:":{"sn":":blond-haired_woman_tone3:","cp":"1f471-1f3fd-200d-2640-fe0f","sns":[":blond-haired_woman_medium_skin_tone:"],"c":"people"},":blond-haired_woman_tone4:":{"sn":":blond-haired_woman_tone4:","cp":"1f471-1f3fe-200d-2640-fe0f","sns":[":blond-haired_woman_medium_dark_skin_tone:"],"c":"people"},":blond-haired_woman_tone5:":{"sn":":blond-haired_woman_tone5:","cp":"1f471-1f3ff-200d-2640-fe0f","sns":[":blond-haired_woman_dark_skin_tone:"],"c":"people"},":blond_haired_person:":{"sn":":blond_haired_person:","cp":"1f471","sns":[":person_with_blond_hair:"],"c":"people"},":blond_haired_person_tone1:":{"sn":":blond_haired_person_tone1:","cp":"1f471-1f3fb","sns":[":person_with_blond_hair_tone1:"],"c":"people"},":blond_haired_person_tone2:":{"sn":":blond_haired_person_tone2:","cp":"1f471-1f3fc","sns":[":person_with_blond_hair_tone2:"],"c":"people"},":blond_haired_person_tone3:":{"sn":":blond_haired_person_tone3:","cp":"1f471-1f3fd","sns":[":person_with_blond_hair_tone3:"],"c":"people"},":blond_haired_person_tone4:":{"sn":":blond_haired_person_tone4:","cp":"1f471-1f3fe","sns":[":person_with_blond_hair_tone4:"],"c":"people"},":blond_haired_person_tone5:":{"sn":":blond_haired_person_tone5:","cp":"1f471-1f3ff","sns":[":person_with_blond_hair_tone5:"],"c":"people"},":boy:":{"sn":":boy:","cp":"1f466","sns":[],"c":"people"},":boy_tone1:":{"sn":":boy_tone1:","cp":"1f466-1f3fb","sns":[],"c":"people"},":boy_tone2:":{"sn":":boy_tone2:","cp":"1f466-1f3fc","sns":[],"c":"people"},":boy_tone3:":{"sn":":boy_tone3:","cp":"1f466-1f3fd","sns":[],"c":"people"},":boy_tone4:":{"sn":":boy_tone4:","cp":"1f466-1f3fe","sns":[],"c":"people"},":boy_tone5:":{"sn":":boy_tone5:","cp":"1f466-1f3ff","sns":[],"c":"people"},":brain:":{"sn":":brain:","cp":"1f9e0","sns":[],"c":"people"},":breast_feeding:":{"sn":":breast_feeding:","cp":"1f931","sns":[],"c":"people"},":breast_feeding_tone1:":{"sn":":breast_feeding_tone1:","cp":"1f931-1f3fb","sns":[":breast_feeding_light_skin_tone:"],"c":"people"},":breast_feeding_tone2:":{"sn":":breast_feeding_tone2:","cp":"1f931-1f3fc","sns":[":breast_feeding_medium_light_skin_tone:"],"c":"people"},":breast_feeding_tone3:":{"sn":":breast_feeding_tone3:","cp":"1f931-1f3fd","sns":[":breast_feeding_medium_skin_tone:"],"c":"people"},":breast_feeding_tone4:":{"sn":":breast_feeding_tone4:","cp":"1f931-1f3fe","sns":[":breast_feeding_medium_dark_skin_tone:"],"c":"people"},":breast_feeding_tone5:":{"sn":":breast_feeding_tone5:","cp":"1f931-1f3ff","sns":[":breast_feeding_dark_skin_tone:"],"c":"people"},":bride_with_veil:":{"sn":":bride_with_veil:","cp":"1f470","sns":[],"c":"people"},":bride_with_veil_tone1:":{"sn":":bride_with_veil_tone1:","cp":"1f470-1f3fb","sns":[],"c":"people"},":bride_with_veil_tone2:":{"sn":":bride_with_veil_tone2:","cp":"1f470-1f3fc","sns":[],"c":"people"},":bride_with_veil_tone3:":{"sn":":bride_with_veil_tone3:","cp":"1f470-1f3fd","sns":[],"c":"people"},":bride_with_veil_tone4:":{"sn":":bride_with_veil_tone4:","cp":"1f470-1f3fe","sns":[],"c":"people"},":bride_with_veil_tone5:":{"sn":":bride_with_veil_tone5:","cp":"1f470-1f3ff","sns":[],"c":"people"},":bust_in_silhouette:":{"sn":":bust_in_silhouette:","cp":"1f464","sns":[],"c":"people"},":busts_in_silhouette:":{"sn":":busts_in_silhouette:","cp":"1f465","sns":[],"c":"people"},":child:":{"sn":":child:","cp":"1f9d2","sns":[],"c":"people"},":child_tone1:":{"sn":":child_tone1:","cp":"1f9d2-1f3fb","sns":[":child_light_skin_tone:"],"c":"people"},":child_tone2:":{"sn":":child_tone2:","cp":"1f9d2-1f3fc","sns":[":child_medium_light_skin_tone:"],"c":"people"},":child_tone3:":{"sn":":child_tone3:","cp":"1f9d2-1f3fd","sns":[":child_medium_skin_tone:"],"c":"people"},":child_tone4:":{"sn":":child_tone4:","cp":"1f9d2-1f3fe","sns":[":child_medium_dark_skin_tone:"],"c":"people"},":child_tone5:":{"sn":":child_tone5:","cp":"1f9d2-1f3ff","sns":[":child_dark_skin_tone:"],"c":"people"},":construction_worker:":{"sn":":construction_worker:","cp":"1f477","sns":[],"c":"people"},":construction_worker_tone1:":{"sn":":construction_worker_tone1:","cp":"1f477-1f3fb","sns":[],"c":"people"},":construction_worker_tone2:":{"sn":":construction_worker_tone2:","cp":"1f477-1f3fc","sns":[],"c":"people"},":construction_worker_tone3:":{"sn":":construction_worker_tone3:","cp":"1f477-1f3fd","sns":[],"c":"people"},":construction_worker_tone4:":{"sn":":construction_worker_tone4:","cp":"1f477-1f3fe","sns":[],"c":"people"},":construction_worker_tone5:":{"sn":":construction_worker_tone5:","cp":"1f477-1f3ff","sns":[],"c":"people"},":couple:":{"sn":":couple:","cp":"1f46b","sns":[],"c":"people"},":couple_mm:":{"sn":":couple_mm:","cp":"1f468-200d-2764-fe0f-200d-1f468","sns":[":couple_with_heart_mm:"],"c":"people"},":couple_with_heart:":{"sn":":couple_with_heart:","cp":"1f491","sns":[],"c":"people"},":couple_with_heart_woman_man:":{"sn":":couple_with_heart_woman_man:","cp":"1f469-200d-2764-fe0f-200d-1f468","sns":[],"c":"people"},":couple_ww:":{"sn":":couple_ww:","cp":"1f469-200d-2764-fe0f-200d-1f469","sns":[":couple_with_heart_ww:"],"c":"people"},":couplekiss:":{"sn":":couplekiss:","cp":"1f48f","sns":[],"c":"people"},":dancer:":{"sn":":dancer:","cp":"1f483","sns":[],"c":"people"},":dancer_tone1:":{"sn":":dancer_tone1:","cp":"1f483-1f3fb","sns":[],"c":"people"},":dancer_tone2:":{"sn":":dancer_tone2:","cp":"1f483-1f3fc","sns":[],"c":"people"},":dancer_tone3:":{"sn":":dancer_tone3:","cp":"1f483-1f3fd","sns":[],"c":"people"},":dancer_tone4:":{"sn":":dancer_tone4:","cp":"1f483-1f3fe","sns":[],"c":"people"},":dancer_tone5:":{"sn":":dancer_tone5:","cp":"1f483-1f3ff","sns":[],"c":"people"},":detective:":{"sn":":detective:","cp":"1f575","sns":[":spy:",":sleuth_or_spy:"],"c":"people"},":detective_tone1:":{"sn":":detective_tone1:","cp":"1f575-1f3fb","sns":[":spy_tone1:",":sleuth_or_spy_tone1:"],"c":"people"},":detective_tone2:":{"sn":":detective_tone2:","cp":"1f575-1f3fc","sns":[":spy_tone2:",":sleuth_or_spy_tone2:"],"c":"people"},":detective_tone3:":{"sn":":detective_tone3:","cp":"1f575-1f3fd","sns":[":spy_tone3:",":sleuth_or_spy_tone3:"],"c":"people"},":detective_tone4:":{"sn":":detective_tone4:","cp":"1f575-1f3fe","sns":[":spy_tone4:",":sleuth_or_spy_tone4:"],"c":"people"},":detective_tone5:":{"sn":":detective_tone5:","cp":"1f575-1f3ff","sns":[":spy_tone5:",":sleuth_or_spy_tone5:"],"c":"people"},":ear:":{"sn":":ear:","cp":"1f442","sns":[],"c":"people"},":ear_tone1:":{"sn":":ear_tone1:","cp":"1f442-1f3fb","sns":[],"c":"people"},":ear_tone2:":{"sn":":ear_tone2:","cp":"1f442-1f3fc","sns":[],"c":"people"},":ear_tone3:":{"sn":":ear_tone3:","cp":"1f442-1f3fd","sns":[],"c":"people"},":ear_tone4:":{"sn":":ear_tone4:","cp":"1f442-1f3fe","sns":[],"c":"people"},":ear_tone5:":{"sn":":ear_tone5:","cp":"1f442-1f3ff","sns":[],"c":"people"},":elf:":{"sn":":elf:","cp":"1f9dd","sns":[],"c":"people"},":elf_tone1:":{"sn":":elf_tone1:","cp":"1f9dd-1f3fb","sns":[":elf_light_skin_tone:"],"c":"people"},":elf_tone2:":{"sn":":elf_tone2:","cp":"1f9dd-1f3fc","sns":[":elf_medium_light_skin_tone:"],"c":"people"},":elf_tone3:":{"sn":":elf_tone3:","cp":"1f9dd-1f3fd","sns":[":elf_medium_skin_tone:"],"c":"people"},":elf_tone4:":{"sn":":elf_tone4:","cp":"1f9dd-1f3fe","sns":[":elf_medium_dark_skin_tone:"],"c":"people"},":elf_tone5:":{"sn":":elf_tone5:","cp":"1f9dd-1f3ff","sns":[":elf_dark_skin_tone:"],"c":"people"},":eye:":{"sn":":eye:","cp":"1f441-fe0f","sns":[],"c":"people"},":eyes:":{"sn":":eyes:","cp":"1f440","sns":[],"c":"people"},":fairy:":{"sn":":fairy:","cp":"1f9da","sns":[],"c":"people"},":fairy_tone1:":{"sn":":fairy_tone1:","cp":"1f9da-1f3fb","sns":[":fairy_light_skin_tone:"],"c":"people"},":fairy_tone2:":{"sn":":fairy_tone2:","cp":"1f9da-1f3fc","sns":[":fairy_medium_light_skin_tone:"],"c":"people"},":fairy_tone3:":{"sn":":fairy_tone3:","cp":"1f9da-1f3fd","sns":[":fairy_medium_skin_tone:"],"c":"people"},":fairy_tone4:":{"sn":":fairy_tone4:","cp":"1f9da-1f3fe","sns":[":fairy_medium_dark_skin_tone:"],"c":"people"},":fairy_tone5:":{"sn":":fairy_tone5:","cp":"1f9da-1f3ff","sns":[":fairy_dark_skin_tone:"],"c":"people"},":family:":{"sn":":family:","cp":"1f46a","sns":[],"c":"people"},":family_man_boy:":{"sn":":family_man_boy:","cp":"1f468-200d-1f466","sns":[],"c":"people"},":family_man_boy_boy:":{"sn":":family_man_boy_boy:","cp":"1f468-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_man_girl:":{"sn":":family_man_girl:","cp":"1f468-200d-1f467","sns":[],"c":"people"},":family_man_girl_boy:":{"sn":":family_man_girl_boy:","cp":"1f468-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_man_girl_girl:":{"sn":":family_man_girl_girl:","cp":"1f468-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_man_woman_boy:":{"sn":":family_man_woman_boy:","cp":"1f468-200d-1f469-200d-1f466","sns":[],"c":"people"},":family_mmb:":{"sn":":family_mmb:","cp":"1f468-200d-1f468-200d-1f466","sns":[],"c":"people"},":family_mmbb:":{"sn":":family_mmbb:","cp":"1f468-200d-1f468-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_mmg:":{"sn":":family_mmg:","cp":"1f468-200d-1f468-200d-1f467","sns":[],"c":"people"},":family_mmgb:":{"sn":":family_mmgb:","cp":"1f468-200d-1f468-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_mmgg:":{"sn":":family_mmgg:","cp":"1f468-200d-1f468-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_mwbb:":{"sn":":family_mwbb:","cp":"1f468-200d-1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_mwg:":{"sn":":family_mwg:","cp":"1f468-200d-1f469-200d-1f467","sns":[],"c":"people"},":family_mwgb:":{"sn":":family_mwgb:","cp":"1f468-200d-1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_mwgg:":{"sn":":family_mwgg:","cp":"1f468-200d-1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_woman_boy:":{"sn":":family_woman_boy:","cp":"1f469-200d-1f466","sns":[],"c":"people"},":family_woman_boy_boy:":{"sn":":family_woman_boy_boy:","cp":"1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_woman_girl:":{"sn":":family_woman_girl:","cp":"1f469-200d-1f467","sns":[],"c":"people"},":family_woman_girl_boy:":{"sn":":family_woman_girl_boy:","cp":"1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_woman_girl_girl:":{"sn":":family_woman_girl_girl:","cp":"1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":family_wwb:":{"sn":":family_wwb:","cp":"1f469-200d-1f469-200d-1f466","sns":[],"c":"people"},":family_wwbb:":{"sn":":family_wwbb:","cp":"1f469-200d-1f469-200d-1f466-200d-1f466","sns":[],"c":"people"},":family_wwg:":{"sn":":family_wwg:","cp":"1f469-200d-1f469-200d-1f467","sns":[],"c":"people"},":family_wwgb:":{"sn":":family_wwgb:","cp":"1f469-200d-1f469-200d-1f467-200d-1f466","sns":[],"c":"people"},":family_wwgg:":{"sn":":family_wwgg:","cp":"1f469-200d-1f469-200d-1f467-200d-1f467","sns":[],"c":"people"},":footprints:":{"sn":":footprints:","cp":"1f463","sns":[],"c":"people"},":frowning2:":{"sn":":frowning2:","cp":"2639","sns":[":white_frowning_face:"],"c":"people"},":genie:":{"sn":":genie:","cp":"1f9de","sns":[],"c":"people"},":ghost:":{"sn":":ghost:","cp":"1f47b","sns":[],"c":"people"},":girl:":{"sn":":girl:","cp":"1f467","sns":[],"c":"people"},":girl_tone1:":{"sn":":girl_tone1:","cp":"1f467-1f3fb","sns":[],"c":"people"},":girl_tone2:":{"sn":":girl_tone2:","cp":"1f467-1f3fc","sns":[],"c":"people"},":girl_tone3:":{"sn":":girl_tone3:","cp":"1f467-1f3fd","sns":[],"c":"people"},":girl_tone4:":{"sn":":girl_tone4:","cp":"1f467-1f3fe","sns":[],"c":"people"},":girl_tone5:":{"sn":":girl_tone5:","cp":"1f467-1f3ff","sns":[],"c":"people"},":guard:":{"sn":":guard:","cp":"1f482","sns":[":guardsman:"],"c":"people"},":guard_tone1:":{"sn":":guard_tone1:","cp":"1f482-1f3fb","sns":[":guardsman_tone1:"],"c":"people"},":guard_tone2:":{"sn":":guard_tone2:","cp":"1f482-1f3fc","sns":[":guardsman_tone2:"],"c":"people"},":guard_tone3:":{"sn":":guard_tone3:","cp":"1f482-1f3fd","sns":[":guardsman_tone3:"],"c":"people"},":guard_tone4:":{"sn":":guard_tone4:","cp":"1f482-1f3fe","sns":[":guardsman_tone4:"],"c":"people"},":guard_tone5:":{"sn":":guard_tone5:","cp":"1f482-1f3ff","sns":[":guardsman_tone5:"],"c":"people"},":helmet_with_cross:":{"sn":":helmet_with_cross:","cp":"26d1","sns":[":helmet_with_white_cross:"],"c":"people"},":kiss:":{"sn":":kiss:","cp":"1f48b","sns":[],"c":"people"},":kiss_mm:":{"sn":":kiss_mm:","cp":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","sns":[":couplekiss_mm:"],"c":"people"},":kiss_woman_man:":{"sn":":kiss_woman_man:","cp":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","sns":[],"c":"people"},":kiss_ww:":{"sn":":kiss_ww:","cp":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","sns":[":couplekiss_ww:"],"c":"people"},":levitate:":{"sn":":levitate:","cp":"1f574","sns":[":man_in_business_suit_levitating:"],"c":"people"},":levitate_tone1:":{"sn":":levitate_tone1:","cp":"1f574-1f3fb","sns":[":man_in_business_suit_levitating_tone1:",":man_in_business_suit_levitating_light_skin_tone:"],"c":"people"},":levitate_tone2:":{"sn":":levitate_tone2:","cp":"1f574-1f3fc","sns":[":man_in_business_suit_levitating_tone2:",":man_in_business_suit_levitating_medium_light_skin_tone:"],"c":"people"},":levitate_tone3:":{"sn":":levitate_tone3:","cp":"1f574-1f3fd","sns":[":man_in_business_suit_levitating_tone3:",":man_in_business_suit_levitating_medium_skin_tone:"],"c":"people"},":levitate_tone4:":{"sn":":levitate_tone4:","cp":"1f574-1f3fe","sns":[":man_in_business_suit_levitating_tone4:",":man_in_business_suit_levitating_medium_dark_skin_tone:"],"c":"people"},":levitate_tone5:":{"sn":":levitate_tone5:","cp":"1f574-1f3ff","sns":[":man_in_business_suit_levitating_tone5:",":man_in_business_suit_levitating_dark_skin_tone:"],"c":"people"},":lips:":{"sn":":lips:","cp":"1f444","sns":[],"c":"people"},":mage:":{"sn":":mage:","cp":"1f9d9","sns":[],"c":"people"},":mage_tone1:":{"sn":":mage_tone1:","cp":"1f9d9-1f3fb","sns":[":mage_light_skin_tone:"],"c":"people"},":mage_tone2:":{"sn":":mage_tone2:","cp":"1f9d9-1f3fc","sns":[":mage_medium_light_skin_tone:"],"c":"people"},":mage_tone3:":{"sn":":mage_tone3:","cp":"1f9d9-1f3fd","sns":[":mage_medium_skin_tone:"],"c":"people"},":mage_tone4:":{"sn":":mage_tone4:","cp":"1f9d9-1f3fe","sns":[":mage_medium_dark_skin_tone:"],"c":"people"},":mage_tone5:":{"sn":":mage_tone5:","cp":"1f9d9-1f3ff","sns":[":mage_dark_skin_tone:"],"c":"people"},":man:":{"sn":":man:","cp":"1f468","sns":[],"c":"people"},":man_artist:":{"sn":":man_artist:","cp":"1f468-200d-1f3a8","sns":[],"c":"people"},":man_artist_tone1:":{"sn":":man_artist_tone1:","cp":"1f468-1f3fb-200d-1f3a8","sns":[":man_artist_light_skin_tone:"],"c":"people"},":man_artist_tone2:":{"sn":":man_artist_tone2:","cp":"1f468-1f3fc-200d-1f3a8","sns":[":man_artist_medium_light_skin_tone:"],"c":"people"},":man_artist_tone3:":{"sn":":man_artist_tone3:","cp":"1f468-1f3fd-200d-1f3a8","sns":[":man_artist_medium_skin_tone:"],"c":"people"},":man_artist_tone4:":{"sn":":man_artist_tone4:","cp":"1f468-1f3fe-200d-1f3a8","sns":[":man_artist_medium_dark_skin_tone:"],"c":"people"},":man_artist_tone5:":{"sn":":man_artist_tone5:","cp":"1f468-1f3ff-200d-1f3a8","sns":[":man_artist_dark_skin_tone:"],"c":"people"},":man_astronaut:":{"sn":":man_astronaut:","cp":"1f468-200d-1f680","sns":[],"c":"people"},":man_astronaut_tone1:":{"sn":":man_astronaut_tone1:","cp":"1f468-1f3fb-200d-1f680","sns":[":man_astronaut_light_skin_tone:"],"c":"people"},":man_astronaut_tone2:":{"sn":":man_astronaut_tone2:","cp":"1f468-1f3fc-200d-1f680","sns":[":man_astronaut_medium_light_skin_tone:"],"c":"people"},":man_astronaut_tone3:":{"sn":":man_astronaut_tone3:","cp":"1f468-1f3fd-200d-1f680","sns":[":man_astronaut_medium_skin_tone:"],"c":"people"},":man_astronaut_tone4:":{"sn":":man_astronaut_tone4:","cp":"1f468-1f3fe-200d-1f680","sns":[":man_astronaut_medium_dark_skin_tone:"],"c":"people"},":man_astronaut_tone5:":{"sn":":man_astronaut_tone5:","cp":"1f468-1f3ff-200d-1f680","sns":[":man_astronaut_dark_skin_tone:"],"c":"people"},":man_bowing:":{"sn":":man_bowing:","cp":"1f647-200d-2642-fe0f","sns":[],"c":"people"},":man_bowing_tone1:":{"sn":":man_bowing_tone1:","cp":"1f647-1f3fb-200d-2642-fe0f","sns":[":man_bowing_light_skin_tone:"],"c":"people"},":man_bowing_tone2:":{"sn":":man_bowing_tone2:","cp":"1f647-1f3fc-200d-2642-fe0f","sns":[":man_bowing_medium_light_skin_tone:"],"c":"people"},":man_bowing_tone3:":{"sn":":man_bowing_tone3:","cp":"1f647-1f3fd-200d-2642-fe0f","sns":[":man_bowing_medium_skin_tone:"],"c":"people"},":man_bowing_tone4:":{"sn":":man_bowing_tone4:","cp":"1f647-1f3fe-200d-2642-fe0f","sns":[":man_bowing_medium_dark_skin_tone:"],"c":"people"},":man_bowing_tone5:":{"sn":":man_bowing_tone5:","cp":"1f647-1f3ff-200d-2642-fe0f","sns":[":man_bowing_dark_skin_tone:"],"c":"people"},":man_construction_worker:":{"sn":":man_construction_worker:","cp":"1f477-200d-2642-fe0f","sns":[],"c":"people"},":man_construction_worker_tone1:":{"sn":":man_construction_worker_tone1:","cp":"1f477-1f3fb-200d-2642-fe0f","sns":[":man_construction_worker_light_skin_tone:"],"c":"people"},":man_construction_worker_tone2:":{"sn":":man_construction_worker_tone2:","cp":"1f477-1f3fc-200d-2642-fe0f","sns":[":man_construction_worker_medium_light_skin_tone:"],"c":"people"},":man_construction_worker_tone3:":{"sn":":man_construction_worker_tone3:","cp":"1f477-1f3fd-200d-2642-fe0f","sns":[":man_construction_worker_medium_skin_tone:"],"c":"people"},":man_construction_worker_tone4:":{"sn":":man_construction_worker_tone4:","cp":"1f477-1f3fe-200d-2642-fe0f","sns":[":man_construction_worker_medium_dark_skin_tone:"],"c":"people"},":man_construction_worker_tone5:":{"sn":":man_construction_worker_tone5:","cp":"1f477-1f3ff-200d-2642-fe0f","sns":[":man_construction_worker_dark_skin_tone:"],"c":"people"},":man_cook:":{"sn":":man_cook:","cp":"1f468-200d-1f373","sns":[],"c":"people"},":man_cook_tone1:":{"sn":":man_cook_tone1:","cp":"1f468-1f3fb-200d-1f373","sns":[":man_cook_light_skin_tone:"],"c":"people"},":man_cook_tone2:":{"sn":":man_cook_tone2:","cp":"1f468-1f3fc-200d-1f373","sns":[":man_cook_medium_light_skin_tone:"],"c":"people"},":man_cook_tone3:":{"sn":":man_cook_tone3:","cp":"1f468-1f3fd-200d-1f373","sns":[":man_cook_medium_skin_tone:"],"c":"people"},":man_cook_tone4:":{"sn":":man_cook_tone4:","cp":"1f468-1f3fe-200d-1f373","sns":[":man_cook_medium_dark_skin_tone:"],"c":"people"},":man_cook_tone5:":{"sn":":man_cook_tone5:","cp":"1f468-1f3ff-200d-1f373","sns":[":man_cook_dark_skin_tone:"],"c":"people"},":man_dancing:":{"sn":":man_dancing:","cp":"1f57a","sns":[":male_dancer:"],"c":"people"},":man_dancing_tone1:":{"sn":":man_dancing_tone1:","cp":"1f57a-1f3fb","sns":[":male_dancer_tone1:"],"c":"people"},":man_dancing_tone2:":{"sn":":man_dancing_tone2:","cp":"1f57a-1f3fc","sns":[":male_dancer_tone2:"],"c":"people"},":man_dancing_tone3:":{"sn":":man_dancing_tone3:","cp":"1f57a-1f3fd","sns":[":male_dancer_tone3:"],"c":"people"},":man_dancing_tone4:":{"sn":":man_dancing_tone4:","cp":"1f57a-1f3fe","sns":[":male_dancer_tone4:"],"c":"people"},":man_dancing_tone5:":{"sn":":man_dancing_tone5:","cp":"1f57a-1f3ff","sns":[":male_dancer_tone5:"],"c":"people"},":man_detective:":{"sn":":man_detective:","cp":"1f575-fe0f-200d-2642-fe0f","sns":[],"c":"people"},":man_detective_tone1:":{"sn":":man_detective_tone1:","cp":"1f575-1f3fb-200d-2642-fe0f","sns":[":man_detective_light_skin_tone:"],"c":"people"},":man_detective_tone2:":{"sn":":man_detective_tone2:","cp":"1f575-1f3fc-200d-2642-fe0f","sns":[":man_detective_medium_light_skin_tone:"],"c":"people"},":man_detective_tone3:":{"sn":":man_detective_tone3:","cp":"1f575-1f3fd-200d-2642-fe0f","sns":[":man_detective_medium_skin_tone:"],"c":"people"},":man_detective_tone4:":{"sn":":man_detective_tone4:","cp":"1f575-1f3fe-200d-2642-fe0f","sns":[":man_detective_medium_dark_skin_tone:"],"c":"people"},":man_detective_tone5:":{"sn":":man_detective_tone5:","cp":"1f575-1f3ff-200d-2642-fe0f","sns":[":man_detective_dark_skin_tone:"],"c":"people"},":man_elf:":{"sn":":man_elf:","cp":"1f9dd-200d-2642-fe0f","sns":[],"c":"people"},":man_elf_tone1:":{"sn":":man_elf_tone1:","cp":"1f9dd-1f3fb-200d-2642-fe0f","sns":[":man_elf_light_skin_tone:"],"c":"people"},":man_elf_tone2:":{"sn":":man_elf_tone2:","cp":"1f9dd-1f3fc-200d-2642-fe0f","sns":[":man_elf_medium_light_skin_tone:"],"c":"people"},":man_elf_tone3:":{"sn":":man_elf_tone3:","cp":"1f9dd-1f3fd-200d-2642-fe0f","sns":[":man_elf_medium_skin_tone:"],"c":"people"},":man_elf_tone4:":{"sn":":man_elf_tone4:","cp":"1f9dd-1f3fe-200d-2642-fe0f","sns":[":man_elf_medium_dark_skin_tone:"],"c":"people"},":man_elf_tone5:":{"sn":":man_elf_tone5:","cp":"1f9dd-1f3ff-200d-2642-fe0f","sns":[":man_elf_dark_skin_tone:"],"c":"people"},":man_facepalming:":{"sn":":man_facepalming:","cp":"1f926-200d-2642-fe0f","sns":[],"c":"people"},":man_facepalming_tone1:":{"sn":":man_facepalming_tone1:","cp":"1f926-1f3fb-200d-2642-fe0f","sns":[":man_facepalming_light_skin_tone:"],"c":"people"},":man_facepalming_tone2:":{"sn":":man_facepalming_tone2:","cp":"1f926-1f3fc-200d-2642-fe0f","sns":[":man_facepalming_medium_light_skin_tone:"],"c":"people"},":man_facepalming_tone3:":{"sn":":man_facepalming_tone3:","cp":"1f926-1f3fd-200d-2642-fe0f","sns":[":man_facepalming_medium_skin_tone:"],"c":"people"},":man_facepalming_tone4:":{"sn":":man_facepalming_tone4:","cp":"1f926-1f3fe-200d-2642-fe0f","sns":[":man_facepalming_medium_dark_skin_tone:"],"c":"people"},":man_facepalming_tone5:":{"sn":":man_facepalming_tone5:","cp":"1f926-1f3ff-200d-2642-fe0f","sns":[":man_facepalming_dark_skin_tone:"],"c":"people"},":man_factory_worker:":{"sn":":man_factory_worker:","cp":"1f468-200d-1f3ed","sns":[],"c":"people"},":man_factory_worker_tone1:":{"sn":":man_factory_worker_tone1:","cp":"1f468-1f3fb-200d-1f3ed","sns":[":man_factory_worker_light_skin_tone:"],"c":"people"},":man_factory_worker_tone2:":{"sn":":man_factory_worker_tone2:","cp":"1f468-1f3fc-200d-1f3ed","sns":[":man_factory_worker_medium_light_skin_tone:"],"c":"people"},":man_factory_worker_tone3:":{"sn":":man_factory_worker_tone3:","cp":"1f468-1f3fd-200d-1f3ed","sns":[":man_factory_worker_medium_skin_tone:"],"c":"people"},":man_factory_worker_tone4:":{"sn":":man_factory_worker_tone4:","cp":"1f468-1f3fe-200d-1f3ed","sns":[":man_factory_worker_medium_dark_skin_tone:"],"c":"people"},":man_factory_worker_tone5:":{"sn":":man_factory_worker_tone5:","cp":"1f468-1f3ff-200d-1f3ed","sns":[":man_factory_worker_dark_skin_tone:"],"c":"people"},":man_fairy:":{"sn":":man_fairy:","cp":"1f9da-200d-2642-fe0f","sns":[],"c":"people"},":man_fairy_tone1:":{"sn":":man_fairy_tone1:","cp":"1f9da-1f3fb-200d-2642-fe0f","sns":[":man_fairy_light_skin_tone:"],"c":"people"},":man_fairy_tone2:":{"sn":":man_fairy_tone2:","cp":"1f9da-1f3fc-200d-2642-fe0f","sns":[":man_fairy_medium_light_skin_tone:"],"c":"people"},":man_fairy_tone3:":{"sn":":man_fairy_tone3:","cp":"1f9da-1f3fd-200d-2642-fe0f","sns":[":man_fairy_medium_skin_tone:"],"c":"people"},":man_fairy_tone4:":{"sn":":man_fairy_tone4:","cp":"1f9da-1f3fe-200d-2642-fe0f","sns":[":man_fairy_medium_dark_skin_tone:"],"c":"people"},":man_fairy_tone5:":{"sn":":man_fairy_tone5:","cp":"1f9da-1f3ff-200d-2642-fe0f","sns":[":man_fairy_dark_skin_tone:"],"c":"people"},":man_farmer:":{"sn":":man_farmer:","cp":"1f468-200d-1f33e","sns":[],"c":"people"},":man_farmer_tone1:":{"sn":":man_farmer_tone1:","cp":"1f468-1f3fb-200d-1f33e","sns":[":man_farmer_light_skin_tone:"],"c":"people"},":man_farmer_tone2:":{"sn":":man_farmer_tone2:","cp":"1f468-1f3fc-200d-1f33e","sns":[":man_farmer_medium_light_skin_tone:"],"c":"people"},":man_farmer_tone3:":{"sn":":man_farmer_tone3:","cp":"1f468-1f3fd-200d-1f33e","sns":[":man_farmer_medium_skin_tone:"],"c":"people"},":man_farmer_tone4:":{"sn":":man_farmer_tone4:","cp":"1f468-1f3fe-200d-1f33e","sns":[":man_farmer_medium_dark_skin_tone:"],"c":"people"},":man_farmer_tone5:":{"sn":":man_farmer_tone5:","cp":"1f468-1f3ff-200d-1f33e","sns":[":man_farmer_dark_skin_tone:"],"c":"people"},":man_firefighter:":{"sn":":man_firefighter:","cp":"1f468-200d-1f692","sns":[],"c":"people"},":man_firefighter_tone1:":{"sn":":man_firefighter_tone1:","cp":"1f468-1f3fb-200d-1f692","sns":[":man_firefighter_light_skin_tone:"],"c":"people"},":man_firefighter_tone2:":{"sn":":man_firefighter_tone2:","cp":"1f468-1f3fc-200d-1f692","sns":[":man_firefighter_medium_light_skin_tone:"],"c":"people"},":man_firefighter_tone3:":{"sn":":man_firefighter_tone3:","cp":"1f468-1f3fd-200d-1f692","sns":[":man_firefighter_medium_skin_tone:"],"c":"people"},":man_firefighter_tone4:":{"sn":":man_firefighter_tone4:","cp":"1f468-1f3fe-200d-1f692","sns":[":man_firefighter_medium_dark_skin_tone:"],"c":"people"},":man_firefighter_tone5:":{"sn":":man_firefighter_tone5:","cp":"1f468-1f3ff-200d-1f692","sns":[":man_firefighter_dark_skin_tone:"],"c":"people"},":man_frowning:":{"sn":":man_frowning:","cp":"1f64d-200d-2642-fe0f","sns":[],"c":"people"},":man_frowning_tone1:":{"sn":":man_frowning_tone1:","cp":"1f64d-1f3fb-200d-2642-fe0f","sns":[":man_frowning_light_skin_tone:"],"c":"people"},":man_frowning_tone2:":{"sn":":man_frowning_tone2:","cp":"1f64d-1f3fc-200d-2642-fe0f","sns":[":man_frowning_medium_light_skin_tone:"],"c":"people"},":man_frowning_tone3:":{"sn":":man_frowning_tone3:","cp":"1f64d-1f3fd-200d-2642-fe0f","sns":[":man_frowning_medium_skin_tone:"],"c":"people"},":man_frowning_tone4:":{"sn":":man_frowning_tone4:","cp":"1f64d-1f3fe-200d-2642-fe0f","sns":[":man_frowning_medium_dark_skin_tone:"],"c":"people"},":man_frowning_tone5:":{"sn":":man_frowning_tone5:","cp":"1f64d-1f3ff-200d-2642-fe0f","sns":[":man_frowning_dark_skin_tone:"],"c":"people"},":man_genie:":{"sn":":man_genie:","cp":"1f9de-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_no:":{"sn":":man_gesturing_no:","cp":"1f645-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_no_tone1:":{"sn":":man_gesturing_no_tone1:","cp":"1f645-1f3fb-200d-2642-fe0f","sns":[":man_gesturing_no_light_skin_tone:"],"c":"people"},":man_gesturing_no_tone2:":{"sn":":man_gesturing_no_tone2:","cp":"1f645-1f3fc-200d-2642-fe0f","sns":[":man_gesturing_no_medium_light_skin_tone:"],"c":"people"},":man_gesturing_no_tone3:":{"sn":":man_gesturing_no_tone3:","cp":"1f645-1f3fd-200d-2642-fe0f","sns":[":man_gesturing_no_medium_skin_tone:"],"c":"people"},":man_gesturing_no_tone4:":{"sn":":man_gesturing_no_tone4:","cp":"1f645-1f3fe-200d-2642-fe0f","sns":[":man_gesturing_no_medium_dark_skin_tone:"],"c":"people"},":man_gesturing_no_tone5:":{"sn":":man_gesturing_no_tone5:","cp":"1f645-1f3ff-200d-2642-fe0f","sns":[":man_gesturing_no_dark_skin_tone:"],"c":"people"},":man_gesturing_ok:":{"sn":":man_gesturing_ok:","cp":"1f646-200d-2642-fe0f","sns":[],"c":"people"},":man_gesturing_ok_tone1:":{"sn":":man_gesturing_ok_tone1:","cp":"1f646-1f3fb-200d-2642-fe0f","sns":[":man_gesturing_ok_light_skin_tone:"],"c":"people"},":man_gesturing_ok_tone2:":{"sn":":man_gesturing_ok_tone2:","cp":"1f646-1f3fc-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_light_skin_tone:"],"c":"people"},":man_gesturing_ok_tone3:":{"sn":":man_gesturing_ok_tone3:","cp":"1f646-1f3fd-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_skin_tone:"],"c":"people"},":man_gesturing_ok_tone4:":{"sn":":man_gesturing_ok_tone4:","cp":"1f646-1f3fe-200d-2642-fe0f","sns":[":man_gesturing_ok_medium_dark_skin_tone:"],"c":"people"},":man_gesturing_ok_tone5:":{"sn":":man_gesturing_ok_tone5:","cp":"1f646-1f3ff-200d-2642-fe0f","sns":[":man_gesturing_ok_dark_skin_tone:"],"c":"people"},":man_getting_face_massage:":{"sn":":man_getting_face_massage:","cp":"1f486-200d-2642-fe0f","sns":[],"c":"people"},":man_getting_face_massage_tone1:":{"sn":":man_getting_face_massage_tone1:","cp":"1f486-1f3fb-200d-2642-fe0f","sns":[":man_getting_face_massage_light_skin_tone:"],"c":"people"},":man_getting_face_massage_tone2:":{"sn":":man_getting_face_massage_tone2:","cp":"1f486-1f3fc-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_light_skin_tone:"],"c":"people"},":man_getting_face_massage_tone3:":{"sn":":man_getting_face_massage_tone3:","cp":"1f486-1f3fd-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_skin_tone:"],"c":"people"},":man_getting_face_massage_tone4:":{"sn":":man_getting_face_massage_tone4:","cp":"1f486-1f3fe-200d-2642-fe0f","sns":[":man_getting_face_massage_medium_dark_skin_tone:"],"c":"people"},":man_getting_face_massage_tone5:":{"sn":":man_getting_face_massage_tone5:","cp":"1f486-1f3ff-200d-2642-fe0f","sns":[":man_getting_face_massage_dark_skin_tone:"],"c":"people"},":man_getting_haircut:":{"sn":":man_getting_haircut:","cp":"1f487-200d-2642-fe0f","sns":[],"c":"people"},":man_getting_haircut_tone1:":{"sn":":man_getting_haircut_tone1:","cp":"1f487-1f3fb-200d-2642-fe0f","sns":[":man_getting_haircut_light_skin_tone:"],"c":"people"},":man_getting_haircut_tone2:":{"sn":":man_getting_haircut_tone2:","cp":"1f487-1f3fc-200d-2642-fe0f","sns":[":man_getting_haircut_medium_light_skin_tone:"],"c":"people"},":man_getting_haircut_tone3:":{"sn":":man_getting_haircut_tone3:","cp":"1f487-1f3fd-200d-2642-fe0f","sns":[":man_getting_haircut_medium_skin_tone:"],"c":"people"},":man_getting_haircut_tone4:":{"sn":":man_getting_haircut_tone4:","cp":"1f487-1f3fe-200d-2642-fe0f","sns":[":man_getting_haircut_medium_dark_skin_tone:"],"c":"people"},":man_getting_haircut_tone5:":{"sn":":man_getting_haircut_tone5:","cp":"1f487-1f3ff-200d-2642-fe0f","sns":[":man_getting_haircut_dark_skin_tone:"],"c":"people"},":man_guard:":{"sn":":man_guard:","cp":"1f482-200d-2642-fe0f","sns":[],"c":"people"},":man_guard_tone1:":{"sn":":man_guard_tone1:","cp":"1f482-1f3fb-200d-2642-fe0f","sns":[":man_guard_light_skin_tone:"],"c":"people"},":man_guard_tone2:":{"sn":":man_guard_tone2:","cp":"1f482-1f3fc-200d-2642-fe0f","sns":[":man_guard_medium_light_skin_tone:"],"c":"people"},":man_guard_tone3:":{"sn":":man_guard_tone3:","cp":"1f482-1f3fd-200d-2642-fe0f","sns":[":man_guard_medium_skin_tone:"],"c":"people"},":man_guard_tone4:":{"sn":":man_guard_tone4:","cp":"1f482-1f3fe-200d-2642-fe0f","sns":[":man_guard_medium_dark_skin_tone:"],"c":"people"},":man_guard_tone5:":{"sn":":man_guard_tone5:","cp":"1f482-1f3ff-200d-2642-fe0f","sns":[":man_guard_dark_skin_tone:"],"c":"people"},":man_health_worker:":{"sn":":man_health_worker:","cp":"1f468-200d-2695-fe0f","sns":[],"c":"people"},":man_health_worker_tone1:":{"sn":":man_health_worker_tone1:","cp":"1f468-1f3fb-200d-2695-fe0f","sns":[":man_health_worker_light_skin_tone:"],"c":"people"},":man_health_worker_tone2:":{"sn":":man_health_worker_tone2:","cp":"1f468-1f3fc-200d-2695-fe0f","sns":[":man_health_worker_medium_light_skin_tone:"],"c":"people"},":man_health_worker_tone3:":{"sn":":man_health_worker_tone3:","cp":"1f468-1f3fd-200d-2695-fe0f","sns":[":man_health_worker_medium_skin_tone:"],"c":"people"},":man_health_worker_tone4:":{"sn":":man_health_worker_tone4:","cp":"1f468-1f3fe-200d-2695-fe0f","sns":[":man_health_worker_medium_dark_skin_tone:"],"c":"people"},":man_health_worker_tone5:":{"sn":":man_health_worker_tone5:","cp":"1f468-1f3ff-200d-2695-fe0f","sns":[":man_health_worker_dark_skin_tone:"],"c":"people"},":man_in_steamy_room:":{"sn":":man_in_steamy_room:","cp":"1f9d6-200d-2642-fe0f","sns":[],"c":"people"},":man_in_steamy_room_tone1:":{"sn":":man_in_steamy_room_tone1:","cp":"1f9d6-1f3fb-200d-2642-fe0f","sns":[":man_in_steamy_room_light_skin_tone:"],"c":"people"},":man_in_steamy_room_tone2:":{"sn":":man_in_steamy_room_tone2:","cp":"1f9d6-1f3fc-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":man_in_steamy_room_tone3:":{"sn":":man_in_steamy_room_tone3:","cp":"1f9d6-1f3fd-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_skin_tone:"],"c":"people"},":man_in_steamy_room_tone4:":{"sn":":man_in_steamy_room_tone4:","cp":"1f9d6-1f3fe-200d-2642-fe0f","sns":[":man_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":man_in_steamy_room_tone5:":{"sn":":man_in_steamy_room_tone5:","cp":"1f9d6-1f3ff-200d-2642-fe0f","sns":[":man_in_steamy_room_dark_skin_tone:"],"c":"people"},":man_in_tuxedo:":{"sn":":man_in_tuxedo:","cp":"1f935","sns":[],"c":"people"},":man_in_tuxedo_tone1:":{"sn":":man_in_tuxedo_tone1:","cp":"1f935-1f3fb","sns":[":tuxedo_tone1:"],"c":"people"},":man_in_tuxedo_tone2:":{"sn":":man_in_tuxedo_tone2:","cp":"1f935-1f3fc","sns":[":tuxedo_tone2:"],"c":"people"},":man_in_tuxedo_tone3:":{"sn":":man_in_tuxedo_tone3:","cp":"1f935-1f3fd","sns":[":tuxedo_tone3:"],"c":"people"},":man_in_tuxedo_tone4:":{"sn":":man_in_tuxedo_tone4:","cp":"1f935-1f3fe","sns":[":tuxedo_tone4:"],"c":"people"},":man_in_tuxedo_tone5:":{"sn":":man_in_tuxedo_tone5:","cp":"1f935-1f3ff","sns":[":tuxedo_tone5:"],"c":"people"},":man_judge:":{"sn":":man_judge:","cp":"1f468-200d-2696-fe0f","sns":[],"c":"people"},":man_judge_tone1:":{"sn":":man_judge_tone1:","cp":"1f468-1f3fb-200d-2696-fe0f","sns":[":man_judge_light_skin_tone:"],"c":"people"},":man_judge_tone2:":{"sn":":man_judge_tone2:","cp":"1f468-1f3fc-200d-2696-fe0f","sns":[":man_judge_medium_light_skin_tone:"],"c":"people"},":man_judge_tone3:":{"sn":":man_judge_tone3:","cp":"1f468-1f3fd-200d-2696-fe0f","sns":[":man_judge_medium_skin_tone:"],"c":"people"},":man_judge_tone4:":{"sn":":man_judge_tone4:","cp":"1f468-1f3fe-200d-2696-fe0f","sns":[":man_judge_medium_dark_skin_tone:"],"c":"people"},":man_judge_tone5:":{"sn":":man_judge_tone5:","cp":"1f468-1f3ff-200d-2696-fe0f","sns":[":man_judge_dark_skin_tone:"],"c":"people"},":man_mage:":{"sn":":man_mage:","cp":"1f9d9-200d-2642-fe0f","sns":[],"c":"people"},":man_mage_tone1:":{"sn":":man_mage_tone1:","cp":"1f9d9-1f3fb-200d-2642-fe0f","sns":[":man_mage_light_skin_tone:"],"c":"people"},":man_mage_tone2:":{"sn":":man_mage_tone2:","cp":"1f9d9-1f3fc-200d-2642-fe0f","sns":[":man_mage_medium_light_skin_tone:"],"c":"people"},":man_mage_tone3:":{"sn":":man_mage_tone3:","cp":"1f9d9-1f3fd-200d-2642-fe0f","sns":[":man_mage_medium_skin_tone:"],"c":"people"},":man_mage_tone4:":{"sn":":man_mage_tone4:","cp":"1f9d9-1f3fe-200d-2642-fe0f","sns":[":man_mage_medium_dark_skin_tone:"],"c":"people"},":man_mage_tone5:":{"sn":":man_mage_tone5:","cp":"1f9d9-1f3ff-200d-2642-fe0f","sns":[":man_mage_dark_skin_tone:"],"c":"people"},":man_mechanic:":{"sn":":man_mechanic:","cp":"1f468-200d-1f527","sns":[],"c":"people"},":man_mechanic_tone1:":{"sn":":man_mechanic_tone1:","cp":"1f468-1f3fb-200d-1f527","sns":[":man_mechanic_light_skin_tone:"],"c":"people"},":man_mechanic_tone2:":{"sn":":man_mechanic_tone2:","cp":"1f468-1f3fc-200d-1f527","sns":[":man_mechanic_medium_light_skin_tone:"],"c":"people"},":man_mechanic_tone3:":{"sn":":man_mechanic_tone3:","cp":"1f468-1f3fd-200d-1f527","sns":[":man_mechanic_medium_skin_tone:"],"c":"people"},":man_mechanic_tone4:":{"sn":":man_mechanic_tone4:","cp":"1f468-1f3fe-200d-1f527","sns":[":man_mechanic_medium_dark_skin_tone:"],"c":"people"},":man_mechanic_tone5:":{"sn":":man_mechanic_tone5:","cp":"1f468-1f3ff-200d-1f527","sns":[":man_mechanic_dark_skin_tone:"],"c":"people"},":man_office_worker:":{"sn":":man_office_worker:","cp":"1f468-200d-1f4bc","sns":[],"c":"people"},":man_office_worker_tone1:":{"sn":":man_office_worker_tone1:","cp":"1f468-1f3fb-200d-1f4bc","sns":[":man_office_worker_light_skin_tone:"],"c":"people"},":man_office_worker_tone2:":{"sn":":man_office_worker_tone2:","cp":"1f468-1f3fc-200d-1f4bc","sns":[":man_office_worker_medium_light_skin_tone:"],"c":"people"},":man_office_worker_tone3:":{"sn":":man_office_worker_tone3:","cp":"1f468-1f3fd-200d-1f4bc","sns":[":man_office_worker_medium_skin_tone:"],"c":"people"},":man_office_worker_tone4:":{"sn":":man_office_worker_tone4:","cp":"1f468-1f3fe-200d-1f4bc","sns":[":man_office_worker_medium_dark_skin_tone:"],"c":"people"},":man_office_worker_tone5:":{"sn":":man_office_worker_tone5:","cp":"1f468-1f3ff-200d-1f4bc","sns":[":man_office_worker_dark_skin_tone:"],"c":"people"},":man_pilot:":{"sn":":man_pilot:","cp":"1f468-200d-2708-fe0f","sns":[],"c":"people"},":man_pilot_tone1:":{"sn":":man_pilot_tone1:","cp":"1f468-1f3fb-200d-2708-fe0f","sns":[":man_pilot_light_skin_tone:"],"c":"people"},":man_pilot_tone2:":{"sn":":man_pilot_tone2:","cp":"1f468-1f3fc-200d-2708-fe0f","sns":[":man_pilot_medium_light_skin_tone:"],"c":"people"},":man_pilot_tone3:":{"sn":":man_pilot_tone3:","cp":"1f468-1f3fd-200d-2708-fe0f","sns":[":man_pilot_medium_skin_tone:"],"c":"people"},":man_pilot_tone4:":{"sn":":man_pilot_tone4:","cp":"1f468-1f3fe-200d-2708-fe0f","sns":[":man_pilot_medium_dark_skin_tone:"],"c":"people"},":man_pilot_tone5:":{"sn":":man_pilot_tone5:","cp":"1f468-1f3ff-200d-2708-fe0f","sns":[":man_pilot_dark_skin_tone:"],"c":"people"},":man_police_officer:":{"sn":":man_police_officer:","cp":"1f46e-200d-2642-fe0f","sns":[],"c":"people"},":man_police_officer_tone1:":{"sn":":man_police_officer_tone1:","cp":"1f46e-1f3fb-200d-2642-fe0f","sns":[":man_police_officer_light_skin_tone:"],"c":"people"},":man_police_officer_tone2:":{"sn":":man_police_officer_tone2:","cp":"1f46e-1f3fc-200d-2642-fe0f","sns":[":man_police_officer_medium_light_skin_tone:"],"c":"people"},":man_police_officer_tone3:":{"sn":":man_police_officer_tone3:","cp":"1f46e-1f3fd-200d-2642-fe0f","sns":[":man_police_officer_medium_skin_tone:"],"c":"people"},":man_police_officer_tone4:":{"sn":":man_police_officer_tone4:","cp":"1f46e-1f3fe-200d-2642-fe0f","sns":[":man_police_officer_medium_dark_skin_tone:"],"c":"people"},":man_police_officer_tone5:":{"sn":":man_police_officer_tone5:","cp":"1f46e-1f3ff-200d-2642-fe0f","sns":[":man_police_officer_dark_skin_tone:"],"c":"people"},":man_pouting:":{"sn":":man_pouting:","cp":"1f64e-200d-2642-fe0f","sns":[],"c":"people"},":man_pouting_tone1:":{"sn":":man_pouting_tone1:","cp":"1f64e-1f3fb-200d-2642-fe0f","sns":[":man_pouting_light_skin_tone:"],"c":"people"},":man_pouting_tone2:":{"sn":":man_pouting_tone2:","cp":"1f64e-1f3fc-200d-2642-fe0f","sns":[":man_pouting_medium_light_skin_tone:"],"c":"people"},":man_pouting_tone3:":{"sn":":man_pouting_tone3:","cp":"1f64e-1f3fd-200d-2642-fe0f","sns":[":man_pouting_medium_skin_tone:"],"c":"people"},":man_pouting_tone4:":{"sn":":man_pouting_tone4:","cp":"1f64e-1f3fe-200d-2642-fe0f","sns":[":man_pouting_medium_dark_skin_tone:"],"c":"people"},":man_pouting_tone5:":{"sn":":man_pouting_tone5:","cp":"1f64e-1f3ff-200d-2642-fe0f","sns":[":man_pouting_dark_skin_tone:"],"c":"people"},":man_raising_hand:":{"sn":":man_raising_hand:","cp":"1f64b-200d-2642-fe0f","sns":[],"c":"people"},":man_raising_hand_tone1:":{"sn":":man_raising_hand_tone1:","cp":"1f64b-1f3fb-200d-2642-fe0f","sns":[":man_raising_hand_light_skin_tone:"],"c":"people"},":man_raising_hand_tone2:":{"sn":":man_raising_hand_tone2:","cp":"1f64b-1f3fc-200d-2642-fe0f","sns":[":man_raising_hand_medium_light_skin_tone:"],"c":"people"},":man_raising_hand_tone3:":{"sn":":man_raising_hand_tone3:","cp":"1f64b-1f3fd-200d-2642-fe0f","sns":[":man_raising_hand_medium_skin_tone:"],"c":"people"},":man_raising_hand_tone4:":{"sn":":man_raising_hand_tone4:","cp":"1f64b-1f3fe-200d-2642-fe0f","sns":[":man_raising_hand_medium_dark_skin_tone:"],"c":"people"},":man_raising_hand_tone5:":{"sn":":man_raising_hand_tone5:","cp":"1f64b-1f3ff-200d-2642-fe0f","sns":[":man_raising_hand_dark_skin_tone:"],"c":"people"},":man_running:":{"sn":":man_running:","cp":"1f3c3-200d-2642-fe0f","sns":[],"c":"people"},":man_running_tone1:":{"sn":":man_running_tone1:","cp":"1f3c3-1f3fb-200d-2642-fe0f","sns":[":man_running_light_skin_tone:"],"c":"people"},":man_running_tone2:":{"sn":":man_running_tone2:","cp":"1f3c3-1f3fc-200d-2642-fe0f","sns":[":man_running_medium_light_skin_tone:"],"c":"people"},":man_running_tone3:":{"sn":":man_running_tone3:","cp":"1f3c3-1f3fd-200d-2642-fe0f","sns":[":man_running_medium_skin_tone:"],"c":"people"},":man_running_tone4:":{"sn":":man_running_tone4:","cp":"1f3c3-1f3fe-200d-2642-fe0f","sns":[":man_running_medium_dark_skin_tone:"],"c":"people"},":man_running_tone5:":{"sn":":man_running_tone5:","cp":"1f3c3-1f3ff-200d-2642-fe0f","sns":[":man_running_dark_skin_tone:"],"c":"people"},":man_scientist:":{"sn":":man_scientist:","cp":"1f468-200d-1f52c","sns":[],"c":"people"},":man_scientist_tone1:":{"sn":":man_scientist_tone1:","cp":"1f468-1f3fb-200d-1f52c","sns":[":man_scientist_light_skin_tone:"],"c":"people"},":man_scientist_tone2:":{"sn":":man_scientist_tone2:","cp":"1f468-1f3fc-200d-1f52c","sns":[":man_scientist_medium_light_skin_tone:"],"c":"people"},":man_scientist_tone3:":{"sn":":man_scientist_tone3:","cp":"1f468-1f3fd-200d-1f52c","sns":[":man_scientist_medium_skin_tone:"],"c":"people"},":man_scientist_tone4:":{"sn":":man_scientist_tone4:","cp":"1f468-1f3fe-200d-1f52c","sns":[":man_scientist_medium_dark_skin_tone:"],"c":"people"},":man_scientist_tone5:":{"sn":":man_scientist_tone5:","cp":"1f468-1f3ff-200d-1f52c","sns":[":man_scientist_dark_skin_tone:"],"c":"people"},":man_shrugging:":{"sn":":man_shrugging:","cp":"1f937-200d-2642-fe0f","sns":[],"c":"people"},":man_shrugging_tone1:":{"sn":":man_shrugging_tone1:","cp":"1f937-1f3fb-200d-2642-fe0f","sns":[":man_shrugging_light_skin_tone:"],"c":"people"},":man_shrugging_tone2:":{"sn":":man_shrugging_tone2:","cp":"1f937-1f3fc-200d-2642-fe0f","sns":[":man_shrugging_medium_light_skin_tone:"],"c":"people"},":man_shrugging_tone3:":{"sn":":man_shrugging_tone3:","cp":"1f937-1f3fd-200d-2642-fe0f","sns":[":man_shrugging_medium_skin_tone:"],"c":"people"},":man_shrugging_tone4:":{"sn":":man_shrugging_tone4:","cp":"1f937-1f3fe-200d-2642-fe0f","sns":[":man_shrugging_medium_dark_skin_tone:"],"c":"people"},":man_shrugging_tone5:":{"sn":":man_shrugging_tone5:","cp":"1f937-1f3ff-200d-2642-fe0f","sns":[":man_shrugging_dark_skin_tone:"],"c":"people"},":man_singer:":{"sn":":man_singer:","cp":"1f468-200d-1f3a4","sns":[],"c":"people"},":man_singer_tone1:":{"sn":":man_singer_tone1:","cp":"1f468-1f3fb-200d-1f3a4","sns":[":man_singer_light_skin_tone:"],"c":"people"},":man_singer_tone2:":{"sn":":man_singer_tone2:","cp":"1f468-1f3fc-200d-1f3a4","sns":[":man_singer_medium_light_skin_tone:"],"c":"people"},":man_singer_tone3:":{"sn":":man_singer_tone3:","cp":"1f468-1f3fd-200d-1f3a4","sns":[":man_singer_medium_skin_tone:"],"c":"people"},":man_singer_tone4:":{"sn":":man_singer_tone4:","cp":"1f468-1f3fe-200d-1f3a4","sns":[":man_singer_medium_dark_skin_tone:"],"c":"people"},":man_singer_tone5:":{"sn":":man_singer_tone5:","cp":"1f468-1f3ff-200d-1f3a4","sns":[":man_singer_dark_skin_tone:"],"c":"people"},":man_student:":{"sn":":man_student:","cp":"1f468-200d-1f393","sns":[],"c":"people"},":man_student_tone1:":{"sn":":man_student_tone1:","cp":"1f468-1f3fb-200d-1f393","sns":[":man_student_light_skin_tone:"],"c":"people"},":man_student_tone2:":{"sn":":man_student_tone2:","cp":"1f468-1f3fc-200d-1f393","sns":[":man_student_medium_light_skin_tone:"],"c":"people"},":man_student_tone3:":{"sn":":man_student_tone3:","cp":"1f468-1f3fd-200d-1f393","sns":[":man_student_medium_skin_tone:"],"c":"people"},":man_student_tone4:":{"sn":":man_student_tone4:","cp":"1f468-1f3fe-200d-1f393","sns":[":man_student_medium_dark_skin_tone:"],"c":"people"},":man_student_tone5:":{"sn":":man_student_tone5:","cp":"1f468-1f3ff-200d-1f393","sns":[":man_student_dark_skin_tone:"],"c":"people"},":man_teacher:":{"sn":":man_teacher:","cp":"1f468-200d-1f3eb","sns":[],"c":"people"},":man_teacher_tone1:":{"sn":":man_teacher_tone1:","cp":"1f468-1f3fb-200d-1f3eb","sns":[":man_teacher_light_skin_tone:"],"c":"people"},":man_teacher_tone2:":{"sn":":man_teacher_tone2:","cp":"1f468-1f3fc-200d-1f3eb","sns":[":man_teacher_medium_light_skin_tone:"],"c":"people"},":man_teacher_tone3:":{"sn":":man_teacher_tone3:","cp":"1f468-1f3fd-200d-1f3eb","sns":[":man_teacher_medium_skin_tone:"],"c":"people"},":man_teacher_tone4:":{"sn":":man_teacher_tone4:","cp":"1f468-1f3fe-200d-1f3eb","sns":[":man_teacher_medium_dark_skin_tone:"],"c":"people"},":man_teacher_tone5:":{"sn":":man_teacher_tone5:","cp":"1f468-1f3ff-200d-1f3eb","sns":[":man_teacher_dark_skin_tone:"],"c":"people"},":man_technologist:":{"sn":":man_technologist:","cp":"1f468-200d-1f4bb","sns":[],"c":"people"},":man_technologist_tone1:":{"sn":":man_technologist_tone1:","cp":"1f468-1f3fb-200d-1f4bb","sns":[":man_technologist_light_skin_tone:"],"c":"people"},":man_technologist_tone2:":{"sn":":man_technologist_tone2:","cp":"1f468-1f3fc-200d-1f4bb","sns":[":man_technologist_medium_light_skin_tone:"],"c":"people"},":man_technologist_tone3:":{"sn":":man_technologist_tone3:","cp":"1f468-1f3fd-200d-1f4bb","sns":[":man_technologist_medium_skin_tone:"],"c":"people"},":man_technologist_tone4:":{"sn":":man_technologist_tone4:","cp":"1f468-1f3fe-200d-1f4bb","sns":[":man_technologist_medium_dark_skin_tone:"],"c":"people"},":man_technologist_tone5:":{"sn":":man_technologist_tone5:","cp":"1f468-1f3ff-200d-1f4bb","sns":[":man_technologist_dark_skin_tone:"],"c":"people"},":man_tipping_hand:":{"sn":":man_tipping_hand:","cp":"1f481-200d-2642-fe0f","sns":[],"c":"people"},":man_tipping_hand_tone1:":{"sn":":man_tipping_hand_tone1:","cp":"1f481-1f3fb-200d-2642-fe0f","sns":[":man_tipping_hand_light_skin_tone:"],"c":"people"},":man_tipping_hand_tone2:":{"sn":":man_tipping_hand_tone2:","cp":"1f481-1f3fc-200d-2642-fe0f","sns":[":man_tipping_hand_medium_light_skin_tone:"],"c":"people"},":man_tipping_hand_tone3:":{"sn":":man_tipping_hand_tone3:","cp":"1f481-1f3fd-200d-2642-fe0f","sns":[":man_tipping_hand_medium_skin_tone:"],"c":"people"},":man_tipping_hand_tone4:":{"sn":":man_tipping_hand_tone4:","cp":"1f481-1f3fe-200d-2642-fe0f","sns":[":man_tipping_hand_medium_dark_skin_tone:"],"c":"people"},":man_tipping_hand_tone5:":{"sn":":man_tipping_hand_tone5:","cp":"1f481-1f3ff-200d-2642-fe0f","sns":[":man_tipping_hand_dark_skin_tone:"],"c":"people"},":man_tone1:":{"sn":":man_tone1:","cp":"1f468-1f3fb","sns":[],"c":"people"},":man_tone2:":{"sn":":man_tone2:","cp":"1f468-1f3fc","sns":[],"c":"people"},":man_tone3:":{"sn":":man_tone3:","cp":"1f468-1f3fd","sns":[],"c":"people"},":man_tone4:":{"sn":":man_tone4:","cp":"1f468-1f3fe","sns":[],"c":"people"},":man_tone5:":{"sn":":man_tone5:","cp":"1f468-1f3ff","sns":[],"c":"people"},":man_vampire:":{"sn":":man_vampire:","cp":"1f9db-200d-2642-fe0f","sns":[],"c":"people"},":man_vampire_tone1:":{"sn":":man_vampire_tone1:","cp":"1f9db-1f3fb-200d-2642-fe0f","sns":[":man_vampire_light_skin_tone:"],"c":"people"},":man_vampire_tone2:":{"sn":":man_vampire_tone2:","cp":"1f9db-1f3fc-200d-2642-fe0f","sns":[":man_vampire_medium_light_skin_tone:"],"c":"people"},":man_vampire_tone3:":{"sn":":man_vampire_tone3:","cp":"1f9db-1f3fd-200d-2642-fe0f","sns":[":man_vampire_medium_skin_tone:"],"c":"people"},":man_vampire_tone4:":{"sn":":man_vampire_tone4:","cp":"1f9db-1f3fe-200d-2642-fe0f","sns":[":man_vampire_medium_dark_skin_tone:"],"c":"people"},":man_vampire_tone5:":{"sn":":man_vampire_tone5:","cp":"1f9db-1f3ff-200d-2642-fe0f","sns":[":man_vampire_dark_skin_tone:"],"c":"people"},":man_walking:":{"sn":":man_walking:","cp":"1f6b6-200d-2642-fe0f","sns":[],"c":"people"},":man_walking_tone1:":{"sn":":man_walking_tone1:","cp":"1f6b6-1f3fb-200d-2642-fe0f","sns":[":man_walking_light_skin_tone:"],"c":"people"},":man_walking_tone2:":{"sn":":man_walking_tone2:","cp":"1f6b6-1f3fc-200d-2642-fe0f","sns":[":man_walking_medium_light_skin_tone:"],"c":"people"},":man_walking_tone3:":{"sn":":man_walking_tone3:","cp":"1f6b6-1f3fd-200d-2642-fe0f","sns":[":man_walking_medium_skin_tone:"],"c":"people"},":man_walking_tone4:":{"sn":":man_walking_tone4:","cp":"1f6b6-1f3fe-200d-2642-fe0f","sns":[":man_walking_medium_dark_skin_tone:"],"c":"people"},":man_walking_tone5:":{"sn":":man_walking_tone5:","cp":"1f6b6-1f3ff-200d-2642-fe0f","sns":[":man_walking_dark_skin_tone:"],"c":"people"},":man_wearing_turban:":{"sn":":man_wearing_turban:","cp":"1f473-200d-2642-fe0f","sns":[],"c":"people"},":man_wearing_turban_tone1:":{"sn":":man_wearing_turban_tone1:","cp":"1f473-1f3fb-200d-2642-fe0f","sns":[":man_wearing_turban_light_skin_tone:"],"c":"people"},":man_wearing_turban_tone2:":{"sn":":man_wearing_turban_tone2:","cp":"1f473-1f3fc-200d-2642-fe0f","sns":[":man_wearing_turban_medium_light_skin_tone:"],"c":"people"},":man_wearing_turban_tone3:":{"sn":":man_wearing_turban_tone3:","cp":"1f473-1f3fd-200d-2642-fe0f","sns":[":man_wearing_turban_medium_skin_tone:"],"c":"people"},":man_wearing_turban_tone4:":{"sn":":man_wearing_turban_tone4:","cp":"1f473-1f3fe-200d-2642-fe0f","sns":[":man_wearing_turban_medium_dark_skin_tone:"],"c":"people"},":man_wearing_turban_tone5:":{"sn":":man_wearing_turban_tone5:","cp":"1f473-1f3ff-200d-2642-fe0f","sns":[":man_wearing_turban_dark_skin_tone:"],"c":"people"},":man_with_chinese_cap:":{"sn":":man_with_chinese_cap:","cp":"1f472","sns":[":man_with_gua_pi_mao:"],"c":"people"},":man_with_chinese_cap_tone1:":{"sn":":man_with_chinese_cap_tone1:","cp":"1f472-1f3fb","sns":[":man_with_gua_pi_mao_tone1:"],"c":"people"},":man_with_chinese_cap_tone2:":{"sn":":man_with_chinese_cap_tone2:","cp":"1f472-1f3fc","sns":[":man_with_gua_pi_mao_tone2:"],"c":"people"},":man_with_chinese_cap_tone3:":{"sn":":man_with_chinese_cap_tone3:","cp":"1f472-1f3fd","sns":[":man_with_gua_pi_mao_tone3:"],"c":"people"},":man_with_chinese_cap_tone4:":{"sn":":man_with_chinese_cap_tone4:","cp":"1f472-1f3fe","sns":[":man_with_gua_pi_mao_tone4:"],"c":"people"},":man_with_chinese_cap_tone5:":{"sn":":man_with_chinese_cap_tone5:","cp":"1f472-1f3ff","sns":[":man_with_gua_pi_mao_tone5:"],"c":"people"},":man_zombie:":{"sn":":man_zombie:","cp":"1f9df-200d-2642-fe0f","sns":[],"c":"people"},":men_with_bunny_ears_partying:":{"sn":":men_with_bunny_ears_partying:","cp":"1f46f-200d-2642-fe0f","sns":[],"c":"people"},":mermaid:":{"sn":":mermaid:","cp":"1f9dc-200d-2640-fe0f","sns":[],"c":"people"},":mermaid_tone1:":{"sn":":mermaid_tone1:","cp":"1f9dc-1f3fb-200d-2640-fe0f","sns":[":mermaid_light_skin_tone:"],"c":"people"},":mermaid_tone2:":{"sn":":mermaid_tone2:","cp":"1f9dc-1f3fc-200d-2640-fe0f","sns":[":mermaid_medium_light_skin_tone:"],"c":"people"},":mermaid_tone3:":{"sn":":mermaid_tone3:","cp":"1f9dc-1f3fd-200d-2640-fe0f","sns":[":mermaid_medium_skin_tone:"],"c":"people"},":mermaid_tone4:":{"sn":":mermaid_tone4:","cp":"1f9dc-1f3fe-200d-2640-fe0f","sns":[":mermaid_medium_dark_skin_tone:"],"c":"people"},":mermaid_tone5:":{"sn":":mermaid_tone5:","cp":"1f9dc-1f3ff-200d-2640-fe0f","sns":[":mermaid_dark_skin_tone:"],"c":"people"},":merman:":{"sn":":merman:","cp":"1f9dc-200d-2642-fe0f","sns":[],"c":"people"},":merman_tone1:":{"sn":":merman_tone1:","cp":"1f9dc-1f3fb-200d-2642-fe0f","sns":[":merman_light_skin_tone:"],"c":"people"},":merman_tone2:":{"sn":":merman_tone2:","cp":"1f9dc-1f3fc-200d-2642-fe0f","sns":[":merman_medium_light_skin_tone:"],"c":"people"},":merman_tone3:":{"sn":":merman_tone3:","cp":"1f9dc-1f3fd-200d-2642-fe0f","sns":[":merman_medium_skin_tone:"],"c":"people"},":merman_tone4:":{"sn":":merman_tone4:","cp":"1f9dc-1f3fe-200d-2642-fe0f","sns":[":merman_medium_dark_skin_tone:"],"c":"people"},":merman_tone5:":{"sn":":merman_tone5:","cp":"1f9dc-1f3ff-200d-2642-fe0f","sns":[":merman_dark_skin_tone:"],"c":"people"},":merperson:":{"sn":":merperson:","cp":"1f9dc","sns":[],"c":"people"},":merperson_tone1:":{"sn":":merperson_tone1:","cp":"1f9dc-1f3fb","sns":[":merperson_light_skin_tone:"],"c":"people"},":merperson_tone2:":{"sn":":merperson_tone2:","cp":"1f9dc-1f3fc","sns":[":merperson_medium_light_skin_tone:"],"c":"people"},":merperson_tone3:":{"sn":":merperson_tone3:","cp":"1f9dc-1f3fd","sns":[":merperson_medium_skin_tone:"],"c":"people"},":merperson_tone4:":{"sn":":merperson_tone4:","cp":"1f9dc-1f3fe","sns":[":merperson_medium_dark_skin_tone:"],"c":"people"},":merperson_tone5:":{"sn":":merperson_tone5:","cp":"1f9dc-1f3ff","sns":[":merperson_dark_skin_tone:"],"c":"people"},":santa:":{"sn":":santa:","cp":"1f385","sns":[],"c":"people"},":santa_tone1:":{"sn":":santa_tone1:","cp":"1f385-1f3fb","sns":[],"c":"people"},":santa_tone2:":{"sn":":santa_tone2:","cp":"1f385-1f3fc","sns":[],"c":"people"},":santa_tone3:":{"sn":":santa_tone3:","cp":"1f385-1f3fd","sns":[],"c":"people"},":santa_tone4:":{"sn":":santa_tone4:","cp":"1f385-1f3fe","sns":[],"c":"people"},":santa_tone5:":{"sn":":santa_tone5:","cp":"1f385-1f3ff","sns":[],"c":"people"},":mrs_claus:":{"sn":":mrs_claus:","cp":"1f936","sns":[":mother_christmas:"],"c":"people"},":mrs_claus_tone1:":{"sn":":mrs_claus_tone1:","cp":"1f936-1f3fb","sns":[":mother_christmas_tone1:"],"c":"people"},":mrs_claus_tone2:":{"sn":":mrs_claus_tone2:","cp":"1f936-1f3fc","sns":[":mother_christmas_tone2:"],"c":"people"},":mrs_claus_tone3:":{"sn":":mrs_claus_tone3:","cp":"1f936-1f3fd","sns":[":mother_christmas_tone3:"],"c":"people"},":mrs_claus_tone4:":{"sn":":mrs_claus_tone4:","cp":"1f936-1f3fe","sns":[":mother_christmas_tone4:"],"c":"people"},":mrs_claus_tone5:":{"sn":":mrs_claus_tone5:","cp":"1f936-1f3ff","sns":[":mother_christmas_tone5:"],"c":"people"},":nose:":{"sn":":nose:","cp":"1f443","sns":[],"c":"people"},":nose_tone1:":{"sn":":nose_tone1:","cp":"1f443-1f3fb","sns":[],"c":"people"},":nose_tone2:":{"sn":":nose_tone2:","cp":"1f443-1f3fc","sns":[],"c":"people"},":nose_tone3:":{"sn":":nose_tone3:","cp":"1f443-1f3fd","sns":[],"c":"people"},":nose_tone4:":{"sn":":nose_tone4:","cp":"1f443-1f3fe","sns":[],"c":"people"},":nose_tone5:":{"sn":":nose_tone5:","cp":"1f443-1f3ff","sns":[],"c":"people"},":older_adult:":{"sn":":older_adult:","cp":"1f9d3","sns":[],"c":"people"},":older_adult_tone1:":{"sn":":older_adult_tone1:","cp":"1f9d3-1f3fb","sns":[":older_adult_light_skin_tone:"],"c":"people"},":older_adult_tone2:":{"sn":":older_adult_tone2:","cp":"1f9d3-1f3fc","sns":[":older_adult_medium_light_skin_tone:"],"c":"people"},":older_adult_tone3:":{"sn":":older_adult_tone3:","cp":"1f9d3-1f3fd","sns":[":older_adult_medium_skin_tone:"],"c":"people"},":older_adult_tone4:":{"sn":":older_adult_tone4:","cp":"1f9d3-1f3fe","sns":[":older_adult_medium_dark_skin_tone:"],"c":"people"},":older_adult_tone5:":{"sn":":older_adult_tone5:","cp":"1f9d3-1f3ff","sns":[":older_adult_dark_skin_tone:"],"c":"people"},":older_man:":{"sn":":older_man:","cp":"1f474","sns":[],"c":"people"},":older_man_tone1:":{"sn":":older_man_tone1:","cp":"1f474-1f3fb","sns":[],"c":"people"},":older_man_tone2:":{"sn":":older_man_tone2:","cp":"1f474-1f3fc","sns":[],"c":"people"},":older_man_tone3:":{"sn":":older_man_tone3:","cp":"1f474-1f3fd","sns":[],"c":"people"},":older_man_tone4:":{"sn":":older_man_tone4:","cp":"1f474-1f3fe","sns":[],"c":"people"},":older_man_tone5:":{"sn":":older_man_tone5:","cp":"1f474-1f3ff","sns":[],"c":"people"},":older_woman:":{"sn":":older_woman:","cp":"1f475","sns":[":grandma:"],"c":"people"},":older_woman_tone1:":{"sn":":older_woman_tone1:","cp":"1f475-1f3fb","sns":[":grandma_tone1:"],"c":"people"},":older_woman_tone2:":{"sn":":older_woman_tone2:","cp":"1f475-1f3fc","sns":[":grandma_tone2:"],"c":"people"},":older_woman_tone3:":{"sn":":older_woman_tone3:","cp":"1f475-1f3fd","sns":[":grandma_tone3:"],"c":"people"},":older_woman_tone4:":{"sn":":older_woman_tone4:","cp":"1f475-1f3fe","sns":[":grandma_tone4:"],"c":"people"},":older_woman_tone5:":{"sn":":older_woman_tone5:","cp":"1f475-1f3ff","sns":[":grandma_tone5:"],"c":"people"},":people_with_bunny_ears_partying:":{"sn":":people_with_bunny_ears_partying:","cp":"1f46f","sns":[":dancers:"],"c":"people"},":person_bowing:":{"sn":":person_bowing:","cp":"1f647","sns":[":bow:"],"c":"people"},":person_bowing_tone1:":{"sn":":person_bowing_tone1:","cp":"1f647-1f3fb","sns":[":bow_tone1:"],"c":"people"},":person_bowing_tone2:":{"sn":":person_bowing_tone2:","cp":"1f647-1f3fc","sns":[":bow_tone2:"],"c":"people"},":person_bowing_tone3:":{"sn":":person_bowing_tone3:","cp":"1f647-1f3fd","sns":[":bow_tone3:"],"c":"people"},":person_bowing_tone4:":{"sn":":person_bowing_tone4:","cp":"1f647-1f3fe","sns":[":bow_tone4:"],"c":"people"},":person_bowing_tone5:":{"sn":":person_bowing_tone5:","cp":"1f647-1f3ff","sns":[":bow_tone5:"],"c":"people"},":person_facepalming:":{"sn":":person_facepalming:","cp":"1f926","sns":[":face_palm:",":facepalm:"],"c":"people"},":person_facepalming_tone1:":{"sn":":person_facepalming_tone1:","cp":"1f926-1f3fb","sns":[":face_palm_tone1:",":facepalm_tone1:"],"c":"people"},":person_facepalming_tone2:":{"sn":":person_facepalming_tone2:","cp":"1f926-1f3fc","sns":[":face_palm_tone2:",":facepalm_tone2:"],"c":"people"},":person_facepalming_tone3:":{"sn":":person_facepalming_tone3:","cp":"1f926-1f3fd","sns":[":face_palm_tone3:",":facepalm_tone3:"],"c":"people"},":person_facepalming_tone4:":{"sn":":person_facepalming_tone4:","cp":"1f926-1f3fe","sns":[":face_palm_tone4:",":facepalm_tone4:"],"c":"people"},":person_facepalming_tone5:":{"sn":":person_facepalming_tone5:","cp":"1f926-1f3ff","sns":[":face_palm_tone5:",":facepalm_tone5:"],"c":"people"},":person_frowning:":{"sn":":person_frowning:","cp":"1f64d","sns":[],"c":"people"},":person_frowning_tone1:":{"sn":":person_frowning_tone1:","cp":"1f64d-1f3fb","sns":[],"c":"people"},":person_frowning_tone2:":{"sn":":person_frowning_tone2:","cp":"1f64d-1f3fc","sns":[],"c":"people"},":person_frowning_tone3:":{"sn":":person_frowning_tone3:","cp":"1f64d-1f3fd","sns":[],"c":"people"},":person_frowning_tone4:":{"sn":":person_frowning_tone4:","cp":"1f64d-1f3fe","sns":[],"c":"people"},":person_frowning_tone5:":{"sn":":person_frowning_tone5:","cp":"1f64d-1f3ff","sns":[],"c":"people"},":person_gesturing_no:":{"sn":":person_gesturing_no:","cp":"1f645","sns":[":no_good:"],"c":"people"},":person_gesturing_no_tone1:":{"sn":":person_gesturing_no_tone1:","cp":"1f645-1f3fb","sns":[":no_good_tone1:"],"c":"people"},":person_gesturing_no_tone2:":{"sn":":person_gesturing_no_tone2:","cp":"1f645-1f3fc","sns":[":no_good_tone2:"],"c":"people"},":person_gesturing_no_tone3:":{"sn":":person_gesturing_no_tone3:","cp":"1f645-1f3fd","sns":[":no_good_tone3:"],"c":"people"},":person_gesturing_no_tone4:":{"sn":":person_gesturing_no_tone4:","cp":"1f645-1f3fe","sns":[":no_good_tone4:"],"c":"people"},":person_gesturing_no_tone5:":{"sn":":person_gesturing_no_tone5:","cp":"1f645-1f3ff","sns":[":no_good_tone5:"],"c":"people"},":person_gesturing_ok:":{"sn":":person_gesturing_ok:","cp":"1f646","sns":[":ok_woman:"],"c":"people"},":person_gesturing_ok_tone1:":{"sn":":person_gesturing_ok_tone1:","cp":"1f646-1f3fb","sns":[":ok_woman_tone1:"],"c":"people"},":person_gesturing_ok_tone2:":{"sn":":person_gesturing_ok_tone2:","cp":"1f646-1f3fc","sns":[":ok_woman_tone2:"],"c":"people"},":person_gesturing_ok_tone3:":{"sn":":person_gesturing_ok_tone3:","cp":"1f646-1f3fd","sns":[":ok_woman_tone3:"],"c":"people"},":person_gesturing_ok_tone4:":{"sn":":person_gesturing_ok_tone4:","cp":"1f646-1f3fe","sns":[":ok_woman_tone4:"],"c":"people"},":person_gesturing_ok_tone5:":{"sn":":person_gesturing_ok_tone5:","cp":"1f646-1f3ff","sns":[":ok_woman_tone5:"],"c":"people"},":person_getting_haircut:":{"sn":":person_getting_haircut:","cp":"1f487","sns":[":haircut:"],"c":"people"},":person_getting_haircut_tone1:":{"sn":":person_getting_haircut_tone1:","cp":"1f487-1f3fb","sns":[":haircut_tone1:"],"c":"people"},":person_getting_haircut_tone2:":{"sn":":person_getting_haircut_tone2:","cp":"1f487-1f3fc","sns":[":haircut_tone2:"],"c":"people"},":person_getting_haircut_tone3:":{"sn":":person_getting_haircut_tone3:","cp":"1f487-1f3fd","sns":[":haircut_tone3:"],"c":"people"},":person_getting_haircut_tone4:":{"sn":":person_getting_haircut_tone4:","cp":"1f487-1f3fe","sns":[":haircut_tone4:"],"c":"people"},":person_getting_haircut_tone5:":{"sn":":person_getting_haircut_tone5:","cp":"1f487-1f3ff","sns":[":haircut_tone5:"],"c":"people"},":person_getting_massage:":{"sn":":person_getting_massage:","cp":"1f486","sns":[":massage:"],"c":"people"},":person_getting_massage_tone1:":{"sn":":person_getting_massage_tone1:","cp":"1f486-1f3fb","sns":[":massage_tone1:"],"c":"people"},":person_getting_massage_tone2:":{"sn":":person_getting_massage_tone2:","cp":"1f486-1f3fc","sns":[":massage_tone2:"],"c":"people"},":person_getting_massage_tone3:":{"sn":":person_getting_massage_tone3:","cp":"1f486-1f3fd","sns":[":massage_tone3:"],"c":"people"},":person_getting_massage_tone4:":{"sn":":person_getting_massage_tone4:","cp":"1f486-1f3fe","sns":[":massage_tone4:"],"c":"people"},":person_getting_massage_tone5:":{"sn":":person_getting_massage_tone5:","cp":"1f486-1f3ff","sns":[":massage_tone5:"],"c":"people"},":person_in_steamy_room:":{"sn":":person_in_steamy_room:","cp":"1f9d6","sns":[],"c":"people"},":person_in_steamy_room_tone1:":{"sn":":person_in_steamy_room_tone1:","cp":"1f9d6-1f3fb","sns":[":person_in_steamy_room_light_skin_tone:"],"c":"people"},":person_in_steamy_room_tone2:":{"sn":":person_in_steamy_room_tone2:","cp":"1f9d6-1f3fc","sns":[":person_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":person_in_steamy_room_tone3:":{"sn":":person_in_steamy_room_tone3:","cp":"1f9d6-1f3fd","sns":[":person_in_steamy_room_medium_skin_tone:"],"c":"people"},":person_in_steamy_room_tone4:":{"sn":":person_in_steamy_room_tone4:","cp":"1f9d6-1f3fe","sns":[":person_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":person_in_steamy_room_tone5:":{"sn":":person_in_steamy_room_tone5:","cp":"1f9d6-1f3ff","sns":[":person_in_steamy_room_dark_skin_tone:"],"c":"people"},":person_pouting:":{"sn":":person_pouting:","cp":"1f64e","sns":[":person_with_pouting_face:"],"c":"people"},":person_pouting_tone1:":{"sn":":person_pouting_tone1:","cp":"1f64e-1f3fb","sns":[":person_with_pouting_face_tone1:"],"c":"people"},":person_pouting_tone2:":{"sn":":person_pouting_tone2:","cp":"1f64e-1f3fc","sns":[":person_with_pouting_face_tone2:"],"c":"people"},":person_pouting_tone3:":{"sn":":person_pouting_tone3:","cp":"1f64e-1f3fd","sns":[":person_with_pouting_face_tone3:"],"c":"people"},":person_pouting_tone4:":{"sn":":person_pouting_tone4:","cp":"1f64e-1f3fe","sns":[":person_with_pouting_face_tone4:"],"c":"people"},":person_pouting_tone5:":{"sn":":person_pouting_tone5:","cp":"1f64e-1f3ff","sns":[":person_with_pouting_face_tone5:"],"c":"people"},":person_raising_hand:":{"sn":":person_raising_hand:","cp":"1f64b","sns":[":raising_hand:"],"c":"people"},":person_raising_hand_tone1:":{"sn":":person_raising_hand_tone1:","cp":"1f64b-1f3fb","sns":[":raising_hand_tone1:"],"c":"people"},":person_raising_hand_tone2:":{"sn":":person_raising_hand_tone2:","cp":"1f64b-1f3fc","sns":[":raising_hand_tone2:"],"c":"people"},":person_raising_hand_tone3:":{"sn":":person_raising_hand_tone3:","cp":"1f64b-1f3fd","sns":[":raising_hand_tone3:"],"c":"people"},":person_raising_hand_tone4:":{"sn":":person_raising_hand_tone4:","cp":"1f64b-1f3fe","sns":[":raising_hand_tone4:"],"c":"people"},":person_raising_hand_tone5:":{"sn":":person_raising_hand_tone5:","cp":"1f64b-1f3ff","sns":[":raising_hand_tone5:"],"c":"people"},":person_running:":{"sn":":person_running:","cp":"1f3c3","sns":[":runner:"],"c":"people"},":person_running_tone1:":{"sn":":person_running_tone1:","cp":"1f3c3-1f3fb","sns":[":runner_tone1:"],"c":"people"},":person_running_tone2:":{"sn":":person_running_tone2:","cp":"1f3c3-1f3fc","sns":[":runner_tone2:"],"c":"people"},":person_running_tone3:":{"sn":":person_running_tone3:","cp":"1f3c3-1f3fd","sns":[":runner_tone3:"],"c":"people"},":person_running_tone4:":{"sn":":person_running_tone4:","cp":"1f3c3-1f3fe","sns":[":runner_tone4:"],"c":"people"},":person_running_tone5:":{"sn":":person_running_tone5:","cp":"1f3c3-1f3ff","sns":[":runner_tone5:"],"c":"people"},":person_shrugging:":{"sn":":person_shrugging:","cp":"1f937","sns":[":shrug:"],"c":"people"},":person_shrugging_tone1:":{"sn":":person_shrugging_tone1:","cp":"1f937-1f3fb","sns":[":shrug_tone1:"],"c":"people"},":person_shrugging_tone2:":{"sn":":person_shrugging_tone2:","cp":"1f937-1f3fc","sns":[":shrug_tone2:"],"c":"people"},":person_shrugging_tone3:":{"sn":":person_shrugging_tone3:","cp":"1f937-1f3fd","sns":[":shrug_tone3:"],"c":"people"},":person_shrugging_tone4:":{"sn":":person_shrugging_tone4:","cp":"1f937-1f3fe","sns":[":shrug_tone4:"],"c":"people"},":person_shrugging_tone5:":{"sn":":person_shrugging_tone5:","cp":"1f937-1f3ff","sns":[":shrug_tone5:"],"c":"people"},":person_tipping_hand:":{"sn":":person_tipping_hand:","cp":"1f481","sns":[":information_desk_person:"],"c":"people"},":person_tipping_hand_tone1:":{"sn":":person_tipping_hand_tone1:","cp":"1f481-1f3fb","sns":[":information_desk_person_tone1:"],"c":"people"},":person_tipping_hand_tone2:":{"sn":":person_tipping_hand_tone2:","cp":"1f481-1f3fc","sns":[":information_desk_person_tone2:"],"c":"people"},":person_tipping_hand_tone3:":{"sn":":person_tipping_hand_tone3:","cp":"1f481-1f3fd","sns":[":information_desk_person_tone3:"],"c":"people"},":person_tipping_hand_tone4:":{"sn":":person_tipping_hand_tone4:","cp":"1f481-1f3fe","sns":[":information_desk_person_tone4:"],"c":"people"},":person_tipping_hand_tone5:":{"sn":":person_tipping_hand_tone5:","cp":"1f481-1f3ff","sns":[":information_desk_person_tone5:"],"c":"people"},":person_walking:":{"sn":":person_walking:","cp":"1f6b6","sns":[":walking:"],"c":"people"},":person_walking_tone1:":{"sn":":person_walking_tone1:","cp":"1f6b6-1f3fb","sns":[":walking_tone1:"],"c":"people"},":person_walking_tone2:":{"sn":":person_walking_tone2:","cp":"1f6b6-1f3fc","sns":[":walking_tone2:"],"c":"people"},":person_walking_tone3:":{"sn":":person_walking_tone3:","cp":"1f6b6-1f3fd","sns":[":walking_tone3:"],"c":"people"},":person_walking_tone4:":{"sn":":person_walking_tone4:","cp":"1f6b6-1f3fe","sns":[":walking_tone4:"],"c":"people"},":person_walking_tone5:":{"sn":":person_walking_tone5:","cp":"1f6b6-1f3ff","sns":[":walking_tone5:"],"c":"people"},":person_wearing_turban:":{"sn":":person_wearing_turban:","cp":"1f473","sns":[":man_with_turban:"],"c":"people"},":person_wearing_turban_tone1:":{"sn":":person_wearing_turban_tone1:","cp":"1f473-1f3fb","sns":[":man_with_turban_tone1:"],"c":"people"},":person_wearing_turban_tone2:":{"sn":":person_wearing_turban_tone2:","cp":"1f473-1f3fc","sns":[":man_with_turban_tone2:"],"c":"people"},":person_wearing_turban_tone3:":{"sn":":person_wearing_turban_tone3:","cp":"1f473-1f3fd","sns":[":man_with_turban_tone3:"],"c":"people"},":person_wearing_turban_tone4:":{"sn":":person_wearing_turban_tone4:","cp":"1f473-1f3fe","sns":[":man_with_turban_tone4:"],"c":"people"},":person_wearing_turban_tone5:":{"sn":":person_wearing_turban_tone5:","cp":"1f473-1f3ff","sns":[":man_with_turban_tone5:"],"c":"people"},":police_officer:":{"sn":":police_officer:","cp":"1f46e","sns":[":cop:"],"c":"people"},":police_officer_tone1:":{"sn":":police_officer_tone1:","cp":"1f46e-1f3fb","sns":[":cop_tone1:"],"c":"people"},":police_officer_tone2:":{"sn":":police_officer_tone2:","cp":"1f46e-1f3fc","sns":[":cop_tone2:"],"c":"people"},":police_officer_tone3:":{"sn":":police_officer_tone3:","cp":"1f46e-1f3fd","sns":[":cop_tone3:"],"c":"people"},":police_officer_tone4:":{"sn":":police_officer_tone4:","cp":"1f46e-1f3fe","sns":[":cop_tone4:"],"c":"people"},":police_officer_tone5:":{"sn":":police_officer_tone5:","cp":"1f46e-1f3ff","sns":[":cop_tone5:"],"c":"people"},":pregnant_woman:":{"sn":":pregnant_woman:","cp":"1f930","sns":[":expecting_woman:"],"c":"people"},":pregnant_woman_tone1:":{"sn":":pregnant_woman_tone1:","cp":"1f930-1f3fb","sns":[":expecting_woman_tone1:"],"c":"people"},":pregnant_woman_tone2:":{"sn":":pregnant_woman_tone2:","cp":"1f930-1f3fc","sns":[":expecting_woman_tone2:"],"c":"people"},":pregnant_woman_tone3:":{"sn":":pregnant_woman_tone3:","cp":"1f930-1f3fd","sns":[":expecting_woman_tone3:"],"c":"people"},":pregnant_woman_tone4:":{"sn":":pregnant_woman_tone4:","cp":"1f930-1f3fe","sns":[":expecting_woman_tone4:"],"c":"people"},":pregnant_woman_tone5:":{"sn":":pregnant_woman_tone5:","cp":"1f930-1f3ff","sns":[":expecting_woman_tone5:"],"c":"people"},":prince:":{"sn":":prince:","cp":"1f934","sns":[],"c":"people"},":prince_tone1:":{"sn":":prince_tone1:","cp":"1f934-1f3fb","sns":[],"c":"people"},":prince_tone2:":{"sn":":prince_tone2:","cp":"1f934-1f3fc","sns":[],"c":"people"},":prince_tone3:":{"sn":":prince_tone3:","cp":"1f934-1f3fd","sns":[],"c":"people"},":prince_tone4:":{"sn":":prince_tone4:","cp":"1f934-1f3fe","sns":[],"c":"people"},":prince_tone5:":{"sn":":prince_tone5:","cp":"1f934-1f3ff","sns":[],"c":"people"},":princess:":{"sn":":princess:","cp":"1f478","sns":[],"c":"people"},":princess_tone1:":{"sn":":princess_tone1:","cp":"1f478-1f3fb","sns":[],"c":"people"},":princess_tone2:":{"sn":":princess_tone2:","cp":"1f478-1f3fc","sns":[],"c":"people"},":princess_tone3:":{"sn":":princess_tone3:","cp":"1f478-1f3fd","sns":[],"c":"people"},":princess_tone4:":{"sn":":princess_tone4:","cp":"1f478-1f3fe","sns":[],"c":"people"},":princess_tone5:":{"sn":":princess_tone5:","cp":"1f478-1f3ff","sns":[],"c":"people"},":relaxed:":{"sn":":relaxed:","cp":"263a","sns":[],"c":"people"},":space_invader:":{"sn":":space_invader:","cp":"1f47e","sns":[],"c":"people"},":speaking_head:":{"sn":":speaking_head:","cp":"1f5e3","sns":[":speaking_head_in_silhouette:"],"c":"people"},":tongue:":{"sn":":tongue:","cp":"1f445","sns":[],"c":"people"},":two_men_holding_hands:":{"sn":":two_men_holding_hands:","cp":"1f46c","sns":[],"c":"people"},":two_women_holding_hands:":{"sn":":two_women_holding_hands:","cp":"1f46d","sns":[],"c":"people"},":vampire:":{"sn":":vampire:","cp":"1f9db","sns":[],"c":"people"},":vampire_tone1:":{"sn":":vampire_tone1:","cp":"1f9db-1f3fb","sns":[":vampire_light_skin_tone:"],"c":"people"},":vampire_tone2:":{"sn":":vampire_tone2:","cp":"1f9db-1f3fc","sns":[":vampire_medium_light_skin_tone:"],"c":"people"},":vampire_tone3:":{"sn":":vampire_tone3:","cp":"1f9db-1f3fd","sns":[":vampire_medium_skin_tone:"],"c":"people"},":vampire_tone4:":{"sn":":vampire_tone4:","cp":"1f9db-1f3fe","sns":[":vampire_medium_dark_skin_tone:"],"c":"people"},":vampire_tone5:":{"sn":":vampire_tone5:","cp":"1f9db-1f3ff","sns":[":vampire_dark_skin_tone:"],"c":"people"},":woman:":{"sn":":woman:","cp":"1f469","sns":[],"c":"people"},":woman_artist:":{"sn":":woman_artist:","cp":"1f469-200d-1f3a8","sns":[],"c":"people"},":woman_artist_tone1:":{"sn":":woman_artist_tone1:","cp":"1f469-1f3fb-200d-1f3a8","sns":[":woman_artist_light_skin_tone:"],"c":"people"},":woman_artist_tone2:":{"sn":":woman_artist_tone2:","cp":"1f469-1f3fc-200d-1f3a8","sns":[":woman_artist_medium_light_skin_tone:"],"c":"people"},":woman_artist_tone3:":{"sn":":woman_artist_tone3:","cp":"1f469-1f3fd-200d-1f3a8","sns":[":woman_artist_medium_skin_tone:"],"c":"people"},":woman_artist_tone4:":{"sn":":woman_artist_tone4:","cp":"1f469-1f3fe-200d-1f3a8","sns":[":woman_artist_medium_dark_skin_tone:"],"c":"people"},":woman_artist_tone5:":{"sn":":woman_artist_tone5:","cp":"1f469-1f3ff-200d-1f3a8","sns":[":woman_artist_dark_skin_tone:"],"c":"people"},":woman_astronaut:":{"sn":":woman_astronaut:","cp":"1f469-200d-1f680","sns":[],"c":"people"},":woman_astronaut_tone1:":{"sn":":woman_astronaut_tone1:","cp":"1f469-1f3fb-200d-1f680","sns":[":woman_astronaut_light_skin_tone:"],"c":"people"},":woman_astronaut_tone2:":{"sn":":woman_astronaut_tone2:","cp":"1f469-1f3fc-200d-1f680","sns":[":woman_astronaut_medium_light_skin_tone:"],"c":"people"},":woman_astronaut_tone3:":{"sn":":woman_astronaut_tone3:","cp":"1f469-1f3fd-200d-1f680","sns":[":woman_astronaut_medium_skin_tone:"],"c":"people"},":woman_astronaut_tone4:":{"sn":":woman_astronaut_tone4:","cp":"1f469-1f3fe-200d-1f680","sns":[":woman_astronaut_medium_dark_skin_tone:"],"c":"people"},":woman_astronaut_tone5:":{"sn":":woman_astronaut_tone5:","cp":"1f469-1f3ff-200d-1f680","sns":[":woman_astronaut_dark_skin_tone:"],"c":"people"},":woman_bowing:":{"sn":":woman_bowing:","cp":"1f647-200d-2640-fe0f","sns":[],"c":"people"},":woman_bowing_tone1:":{"sn":":woman_bowing_tone1:","cp":"1f647-1f3fb-200d-2640-fe0f","sns":[":woman_bowing_light_skin_tone:"],"c":"people"},":woman_bowing_tone2:":{"sn":":woman_bowing_tone2:","cp":"1f647-1f3fc-200d-2640-fe0f","sns":[":woman_bowing_medium_light_skin_tone:"],"c":"people"},":woman_bowing_tone3:":{"sn":":woman_bowing_tone3:","cp":"1f647-1f3fd-200d-2640-fe0f","sns":[":woman_bowing_medium_skin_tone:"],"c":"people"},":woman_bowing_tone4:":{"sn":":woman_bowing_tone4:","cp":"1f647-1f3fe-200d-2640-fe0f","sns":[":woman_bowing_medium_dark_skin_tone:"],"c":"people"},":woman_bowing_tone5:":{"sn":":woman_bowing_tone5:","cp":"1f647-1f3ff-200d-2640-fe0f","sns":[":woman_bowing_dark_skin_tone:"],"c":"people"},":woman_construction_worker:":{"sn":":woman_construction_worker:","cp":"1f477-200d-2640-fe0f","sns":[],"c":"people"},":woman_construction_worker_tone1:":{"sn":":woman_construction_worker_tone1:","cp":"1f477-1f3fb-200d-2640-fe0f","sns":[":woman_construction_worker_light_skin_tone:"],"c":"people"},":woman_construction_worker_tone2:":{"sn":":woman_construction_worker_tone2:","cp":"1f477-1f3fc-200d-2640-fe0f","sns":[":woman_construction_worker_medium_light_skin_tone:"],"c":"people"},":woman_construction_worker_tone3:":{"sn":":woman_construction_worker_tone3:","cp":"1f477-1f3fd-200d-2640-fe0f","sns":[":woman_construction_worker_medium_skin_tone:"],"c":"people"},":woman_construction_worker_tone4:":{"sn":":woman_construction_worker_tone4:","cp":"1f477-1f3fe-200d-2640-fe0f","sns":[":woman_construction_worker_medium_dark_skin_tone:"],"c":"people"},":woman_construction_worker_tone5:":{"sn":":woman_construction_worker_tone5:","cp":"1f477-1f3ff-200d-2640-fe0f","sns":[":woman_construction_worker_dark_skin_tone:"],"c":"people"},":woman_cook:":{"sn":":woman_cook:","cp":"1f469-200d-1f373","sns":[],"c":"people"},":woman_cook_tone1:":{"sn":":woman_cook_tone1:","cp":"1f469-1f3fb-200d-1f373","sns":[":woman_cook_light_skin_tone:"],"c":"people"},":woman_cook_tone2:":{"sn":":woman_cook_tone2:","cp":"1f469-1f3fc-200d-1f373","sns":[":woman_cook_medium_light_skin_tone:"],"c":"people"},":woman_cook_tone3:":{"sn":":woman_cook_tone3:","cp":"1f469-1f3fd-200d-1f373","sns":[":woman_cook_medium_skin_tone:"],"c":"people"},":woman_cook_tone4:":{"sn":":woman_cook_tone4:","cp":"1f469-1f3fe-200d-1f373","sns":[":woman_cook_medium_dark_skin_tone:"],"c":"people"},":woman_cook_tone5:":{"sn":":woman_cook_tone5:","cp":"1f469-1f3ff-200d-1f373","sns":[":woman_cook_dark_skin_tone:"],"c":"people"},":woman_detective:":{"sn":":woman_detective:","cp":"1f575-fe0f-200d-2640-fe0f","sns":[],"c":"people"},":woman_detective_tone1:":{"sn":":woman_detective_tone1:","cp":"1f575-1f3fb-200d-2640-fe0f","sns":[":woman_detective_light_skin_tone:"],"c":"people"},":woman_detective_tone2:":{"sn":":woman_detective_tone2:","cp":"1f575-1f3fc-200d-2640-fe0f","sns":[":woman_detective_medium_light_skin_tone:"],"c":"people"},":woman_detective_tone3:":{"sn":":woman_detective_tone3:","cp":"1f575-1f3fd-200d-2640-fe0f","sns":[":woman_detective_medium_skin_tone:"],"c":"people"},":woman_detective_tone4:":{"sn":":woman_detective_tone4:","cp":"1f575-1f3fe-200d-2640-fe0f","sns":[":woman_detective_medium_dark_skin_tone:"],"c":"people"},":woman_detective_tone5:":{"sn":":woman_detective_tone5:","cp":"1f575-1f3ff-200d-2640-fe0f","sns":[":woman_detective_dark_skin_tone:"],"c":"people"},":woman_elf:":{"sn":":woman_elf:","cp":"1f9dd-200d-2640-fe0f","sns":[],"c":"people"},":woman_elf_tone1:":{"sn":":woman_elf_tone1:","cp":"1f9dd-1f3fb-200d-2640-fe0f","sns":[":woman_elf_light_skin_tone:"],"c":"people"},":woman_elf_tone2:":{"sn":":woman_elf_tone2:","cp":"1f9dd-1f3fc-200d-2640-fe0f","sns":[":woman_elf_medium_light_skin_tone:"],"c":"people"},":woman_elf_tone3:":{"sn":":woman_elf_tone3:","cp":"1f9dd-1f3fd-200d-2640-fe0f","sns":[":woman_elf_medium_skin_tone:"],"c":"people"},":woman_elf_tone4:":{"sn":":woman_elf_tone4:","cp":"1f9dd-1f3fe-200d-2640-fe0f","sns":[":woman_elf_medium_dark_skin_tone:"],"c":"people"},":woman_elf_tone5:":{"sn":":woman_elf_tone5:","cp":"1f9dd-1f3ff-200d-2640-fe0f","sns":[":woman_elf_dark_skin_tone:"],"c":"people"},":woman_facepalming:":{"sn":":woman_facepalming:","cp":"1f926-200d-2640-fe0f","sns":[],"c":"people"},":woman_facepalming_tone1:":{"sn":":woman_facepalming_tone1:","cp":"1f926-1f3fb-200d-2640-fe0f","sns":[":woman_facepalming_light_skin_tone:"],"c":"people"},":woman_facepalming_tone2:":{"sn":":woman_facepalming_tone2:","cp":"1f926-1f3fc-200d-2640-fe0f","sns":[":woman_facepalming_medium_light_skin_tone:"],"c":"people"},":woman_facepalming_tone3:":{"sn":":woman_facepalming_tone3:","cp":"1f926-1f3fd-200d-2640-fe0f","sns":[":woman_facepalming_medium_skin_tone:"],"c":"people"},":woman_facepalming_tone4:":{"sn":":woman_facepalming_tone4:","cp":"1f926-1f3fe-200d-2640-fe0f","sns":[":woman_facepalming_medium_dark_skin_tone:"],"c":"people"},":woman_facepalming_tone5:":{"sn":":woman_facepalming_tone5:","cp":"1f926-1f3ff-200d-2640-fe0f","sns":[":woman_facepalming_dark_skin_tone:"],"c":"people"},":woman_factory_worker:":{"sn":":woman_factory_worker:","cp":"1f469-200d-1f3ed","sns":[],"c":"people"},":woman_factory_worker_tone1:":{"sn":":woman_factory_worker_tone1:","cp":"1f469-1f3fb-200d-1f3ed","sns":[":woman_factory_worker_light_skin_tone:"],"c":"people"},":woman_factory_worker_tone2:":{"sn":":woman_factory_worker_tone2:","cp":"1f469-1f3fc-200d-1f3ed","sns":[":woman_factory_worker_medium_light_skin_tone:"],"c":"people"},":woman_factory_worker_tone3:":{"sn":":woman_factory_worker_tone3:","cp":"1f469-1f3fd-200d-1f3ed","sns":[":woman_factory_worker_medium_skin_tone:"],"c":"people"},":woman_factory_worker_tone4:":{"sn":":woman_factory_worker_tone4:","cp":"1f469-1f3fe-200d-1f3ed","sns":[":woman_factory_worker_medium_dark_skin_tone:"],"c":"people"},":woman_factory_worker_tone5:":{"sn":":woman_factory_worker_tone5:","cp":"1f469-1f3ff-200d-1f3ed","sns":[":woman_factory_worker_dark_skin_tone:"],"c":"people"},":woman_fairy:":{"sn":":woman_fairy:","cp":"1f9da-200d-2640-fe0f","sns":[],"c":"people"},":woman_fairy_tone1:":{"sn":":woman_fairy_tone1:","cp":"1f9da-1f3fb-200d-2640-fe0f","sns":[":woman_fairy_light_skin_tone:"],"c":"people"},":woman_fairy_tone2:":{"sn":":woman_fairy_tone2:","cp":"1f9da-1f3fc-200d-2640-fe0f","sns":[":woman_fairy_medium_light_skin_tone:"],"c":"people"},":woman_fairy_tone3:":{"sn":":woman_fairy_tone3:","cp":"1f9da-1f3fd-200d-2640-fe0f","sns":[":woman_fairy_medium_skin_tone:"],"c":"people"},":woman_fairy_tone4:":{"sn":":woman_fairy_tone4:","cp":"1f9da-1f3fe-200d-2640-fe0f","sns":[":woman_fairy_medium_dark_skin_tone:"],"c":"people"},":woman_fairy_tone5:":{"sn":":woman_fairy_tone5:","cp":"1f9da-1f3ff-200d-2640-fe0f","sns":[":woman_fairy_dark_skin_tone:"],"c":"people"},":woman_farmer:":{"sn":":woman_farmer:","cp":"1f469-200d-1f33e","sns":[],"c":"people"},":woman_farmer_tone1:":{"sn":":woman_farmer_tone1:","cp":"1f469-1f3fb-200d-1f33e","sns":[":woman_farmer_light_skin_tone:"],"c":"people"},":woman_farmer_tone2:":{"sn":":woman_farmer_tone2:","cp":"1f469-1f3fc-200d-1f33e","sns":[":woman_farmer_medium_light_skin_tone:"],"c":"people"},":woman_farmer_tone3:":{"sn":":woman_farmer_tone3:","cp":"1f469-1f3fd-200d-1f33e","sns":[":woman_farmer_medium_skin_tone:"],"c":"people"},":woman_farmer_tone4:":{"sn":":woman_farmer_tone4:","cp":"1f469-1f3fe-200d-1f33e","sns":[":woman_farmer_medium_dark_skin_tone:"],"c":"people"},":woman_farmer_tone5:":{"sn":":woman_farmer_tone5:","cp":"1f469-1f3ff-200d-1f33e","sns":[":woman_farmer_dark_skin_tone:"],"c":"people"},":woman_firefighter:":{"sn":":woman_firefighter:","cp":"1f469-200d-1f692","sns":[],"c":"people"},":woman_firefighter_tone1:":{"sn":":woman_firefighter_tone1:","cp":"1f469-1f3fb-200d-1f692","sns":[":woman_firefighter_light_skin_tone:"],"c":"people"},":woman_firefighter_tone2:":{"sn":":woman_firefighter_tone2:","cp":"1f469-1f3fc-200d-1f692","sns":[":woman_firefighter_medium_light_skin_tone:"],"c":"people"},":woman_firefighter_tone3:":{"sn":":woman_firefighter_tone3:","cp":"1f469-1f3fd-200d-1f692","sns":[":woman_firefighter_medium_skin_tone:"],"c":"people"},":woman_firefighter_tone4:":{"sn":":woman_firefighter_tone4:","cp":"1f469-1f3fe-200d-1f692","sns":[":woman_firefighter_medium_dark_skin_tone:"],"c":"people"},":woman_firefighter_tone5:":{"sn":":woman_firefighter_tone5:","cp":"1f469-1f3ff-200d-1f692","sns":[":woman_firefighter_dark_skin_tone:"],"c":"people"},":woman_frowning:":{"sn":":woman_frowning:","cp":"1f64d-200d-2640-fe0f","sns":[],"c":"people"},":woman_frowning_tone1:":{"sn":":woman_frowning_tone1:","cp":"1f64d-1f3fb-200d-2640-fe0f","sns":[":woman_frowning_light_skin_tone:"],"c":"people"},":woman_frowning_tone2:":{"sn":":woman_frowning_tone2:","cp":"1f64d-1f3fc-200d-2640-fe0f","sns":[":woman_frowning_medium_light_skin_tone:"],"c":"people"},":woman_frowning_tone3:":{"sn":":woman_frowning_tone3:","cp":"1f64d-1f3fd-200d-2640-fe0f","sns":[":woman_frowning_medium_skin_tone:"],"c":"people"},":woman_frowning_tone4:":{"sn":":woman_frowning_tone4:","cp":"1f64d-1f3fe-200d-2640-fe0f","sns":[":woman_frowning_medium_dark_skin_tone:"],"c":"people"},":woman_frowning_tone5:":{"sn":":woman_frowning_tone5:","cp":"1f64d-1f3ff-200d-2640-fe0f","sns":[":woman_frowning_dark_skin_tone:"],"c":"people"},":woman_genie:":{"sn":":woman_genie:","cp":"1f9de-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_no:":{"sn":":woman_gesturing_no:","cp":"1f645-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_no_tone1:":{"sn":":woman_gesturing_no_tone1:","cp":"1f645-1f3fb-200d-2640-fe0f","sns":[":woman_gesturing_no_light_skin_tone:"],"c":"people"},":woman_gesturing_no_tone2:":{"sn":":woman_gesturing_no_tone2:","cp":"1f645-1f3fc-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_light_skin_tone:"],"c":"people"},":woman_gesturing_no_tone3:":{"sn":":woman_gesturing_no_tone3:","cp":"1f645-1f3fd-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_skin_tone:"],"c":"people"},":woman_gesturing_no_tone4:":{"sn":":woman_gesturing_no_tone4:","cp":"1f645-1f3fe-200d-2640-fe0f","sns":[":woman_gesturing_no_medium_dark_skin_tone:"],"c":"people"},":woman_gesturing_no_tone5:":{"sn":":woman_gesturing_no_tone5:","cp":"1f645-1f3ff-200d-2640-fe0f","sns":[":woman_gesturing_no_dark_skin_tone:"],"c":"people"},":woman_gesturing_ok:":{"sn":":woman_gesturing_ok:","cp":"1f646-200d-2640-fe0f","sns":[],"c":"people"},":woman_gesturing_ok_tone1:":{"sn":":woman_gesturing_ok_tone1:","cp":"1f646-1f3fb-200d-2640-fe0f","sns":[":woman_gesturing_ok_light_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone2:":{"sn":":woman_gesturing_ok_tone2:","cp":"1f646-1f3fc-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_light_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone3:":{"sn":":woman_gesturing_ok_tone3:","cp":"1f646-1f3fd-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone4:":{"sn":":woman_gesturing_ok_tone4:","cp":"1f646-1f3fe-200d-2640-fe0f","sns":[":woman_gesturing_ok_medium_dark_skin_tone:"],"c":"people"},":woman_gesturing_ok_tone5:":{"sn":":woman_gesturing_ok_tone5:","cp":"1f646-1f3ff-200d-2640-fe0f","sns":[":woman_gesturing_ok_dark_skin_tone:"],"c":"people"},":woman_getting_face_massage:":{"sn":":woman_getting_face_massage:","cp":"1f486-200d-2640-fe0f","sns":[],"c":"people"},":woman_getting_face_massage_tone1:":{"sn":":woman_getting_face_massage_tone1:","cp":"1f486-1f3fb-200d-2640-fe0f","sns":[":woman_getting_face_massage_light_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone2:":{"sn":":woman_getting_face_massage_tone2:","cp":"1f486-1f3fc-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_light_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone3:":{"sn":":woman_getting_face_massage_tone3:","cp":"1f486-1f3fd-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone4:":{"sn":":woman_getting_face_massage_tone4:","cp":"1f486-1f3fe-200d-2640-fe0f","sns":[":woman_getting_face_massage_medium_dark_skin_tone:"],"c":"people"},":woman_getting_face_massage_tone5:":{"sn":":woman_getting_face_massage_tone5:","cp":"1f486-1f3ff-200d-2640-fe0f","sns":[":woman_getting_face_massage_dark_skin_tone:"],"c":"people"},":woman_getting_haircut:":{"sn":":woman_getting_haircut:","cp":"1f487-200d-2640-fe0f","sns":[],"c":"people"},":woman_getting_haircut_tone1:":{"sn":":woman_getting_haircut_tone1:","cp":"1f487-1f3fb-200d-2640-fe0f","sns":[":woman_getting_haircut_light_skin_tone:"],"c":"people"},":woman_getting_haircut_tone2:":{"sn":":woman_getting_haircut_tone2:","cp":"1f487-1f3fc-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_light_skin_tone:"],"c":"people"},":woman_getting_haircut_tone3:":{"sn":":woman_getting_haircut_tone3:","cp":"1f487-1f3fd-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_skin_tone:"],"c":"people"},":woman_getting_haircut_tone4:":{"sn":":woman_getting_haircut_tone4:","cp":"1f487-1f3fe-200d-2640-fe0f","sns":[":woman_getting_haircut_medium_dark_skin_tone:"],"c":"people"},":woman_getting_haircut_tone5:":{"sn":":woman_getting_haircut_tone5:","cp":"1f487-1f3ff-200d-2640-fe0f","sns":[":woman_getting_haircut_dark_skin_tone:"],"c":"people"},":woman_guard:":{"sn":":woman_guard:","cp":"1f482-200d-2640-fe0f","sns":[],"c":"people"},":woman_guard_tone1:":{"sn":":woman_guard_tone1:","cp":"1f482-1f3fb-200d-2640-fe0f","sns":[":woman_guard_light_skin_tone:"],"c":"people"},":woman_guard_tone2:":{"sn":":woman_guard_tone2:","cp":"1f482-1f3fc-200d-2640-fe0f","sns":[":woman_guard_medium_light_skin_tone:"],"c":"people"},":woman_guard_tone3:":{"sn":":woman_guard_tone3:","cp":"1f482-1f3fd-200d-2640-fe0f","sns":[":woman_guard_medium_skin_tone:"],"c":"people"},":woman_guard_tone4:":{"sn":":woman_guard_tone4:","cp":"1f482-1f3fe-200d-2640-fe0f","sns":[":woman_guard_medium_dark_skin_tone:"],"c":"people"},":woman_guard_tone5:":{"sn":":woman_guard_tone5:","cp":"1f482-1f3ff-200d-2640-fe0f","sns":[":woman_guard_dark_skin_tone:"],"c":"people"},":woman_health_worker:":{"sn":":woman_health_worker:","cp":"1f469-200d-2695-fe0f","sns":[],"c":"people"},":woman_health_worker_tone1:":{"sn":":woman_health_worker_tone1:","cp":"1f469-1f3fb-200d-2695-fe0f","sns":[":woman_health_worker_light_skin_tone:"],"c":"people"},":woman_health_worker_tone2:":{"sn":":woman_health_worker_tone2:","cp":"1f469-1f3fc-200d-2695-fe0f","sns":[":woman_health_worker_medium_light_skin_tone:"],"c":"people"},":woman_health_worker_tone3:":{"sn":":woman_health_worker_tone3:","cp":"1f469-1f3fd-200d-2695-fe0f","sns":[":woman_health_worker_medium_skin_tone:"],"c":"people"},":woman_health_worker_tone4:":{"sn":":woman_health_worker_tone4:","cp":"1f469-1f3fe-200d-2695-fe0f","sns":[":woman_health_worker_medium_dark_skin_tone:"],"c":"people"},":woman_health_worker_tone5:":{"sn":":woman_health_worker_tone5:","cp":"1f469-1f3ff-200d-2695-fe0f","sns":[":woman_health_worker_dark_skin_tone:"],"c":"people"},":woman_in_steamy_room:":{"sn":":woman_in_steamy_room:","cp":"1f9d6-200d-2640-fe0f","sns":[],"c":"people"},":woman_in_steamy_room_tone1:":{"sn":":woman_in_steamy_room_tone1:","cp":"1f9d6-1f3fb-200d-2640-fe0f","sns":[":woman_in_steamy_room_light_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone2:":{"sn":":woman_in_steamy_room_tone2:","cp":"1f9d6-1f3fc-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_light_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone3:":{"sn":":woman_in_steamy_room_tone3:","cp":"1f9d6-1f3fd-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone4:":{"sn":":woman_in_steamy_room_tone4:","cp":"1f9d6-1f3fe-200d-2640-fe0f","sns":[":woman_in_steamy_room_medium_dark_skin_tone:"],"c":"people"},":woman_in_steamy_room_tone5:":{"sn":":woman_in_steamy_room_tone5:","cp":"1f9d6-1f3ff-200d-2640-fe0f","sns":[":woman_in_steamy_room_dark_skin_tone:"],"c":"people"},":woman_judge:":{"sn":":woman_judge:","cp":"1f469-200d-2696-fe0f","sns":[],"c":"people"},":woman_judge_tone1:":{"sn":":woman_judge_tone1:","cp":"1f469-1f3fb-200d-2696-fe0f","sns":[":woman_judge_light_skin_tone:"],"c":"people"},":woman_judge_tone2:":{"sn":":woman_judge_tone2:","cp":"1f469-1f3fc-200d-2696-fe0f","sns":[":woman_judge_medium_light_skin_tone:"],"c":"people"},":woman_judge_tone3:":{"sn":":woman_judge_tone3:","cp":"1f469-1f3fd-200d-2696-fe0f","sns":[":woman_judge_medium_skin_tone:"],"c":"people"},":woman_judge_tone4:":{"sn":":woman_judge_tone4:","cp":"1f469-1f3fe-200d-2696-fe0f","sns":[":woman_judge_medium_dark_skin_tone:"],"c":"people"},":woman_judge_tone5:":{"sn":":woman_judge_tone5:","cp":"1f469-1f3ff-200d-2696-fe0f","sns":[":woman_judge_dark_skin_tone:"],"c":"people"},":woman_mage:":{"sn":":woman_mage:","cp":"1f9d9-200d-2640-fe0f","sns":[],"c":"people"},":woman_mage_tone1:":{"sn":":woman_mage_tone1:","cp":"1f9d9-1f3fb-200d-2640-fe0f","sns":[":woman_mage_light_skin_tone:"],"c":"people"},":woman_mage_tone2:":{"sn":":woman_mage_tone2:","cp":"1f9d9-1f3fc-200d-2640-fe0f","sns":[":woman_mage_medium_light_skin_tone:"],"c":"people"},":woman_mage_tone3:":{"sn":":woman_mage_tone3:","cp":"1f9d9-1f3fd-200d-2640-fe0f","sns":[":woman_mage_medium_skin_tone:"],"c":"people"},":woman_mage_tone4:":{"sn":":woman_mage_tone4:","cp":"1f9d9-1f3fe-200d-2640-fe0f","sns":[":woman_mage_medium_dark_skin_tone:"],"c":"people"},":woman_mage_tone5:":{"sn":":woman_mage_tone5:","cp":"1f9d9-1f3ff-200d-2640-fe0f","sns":[":woman_mage_dark_skin_tone:"],"c":"people"},":woman_mechanic:":{"sn":":woman_mechanic:","cp":"1f469-200d-1f527","sns":[],"c":"people"},":woman_mechanic_tone1:":{"sn":":woman_mechanic_tone1:","cp":"1f469-1f3fb-200d-1f527","sns":[":woman_mechanic_light_skin_tone:"],"c":"people"},":woman_mechanic_tone2:":{"sn":":woman_mechanic_tone2:","cp":"1f469-1f3fc-200d-1f527","sns":[":woman_mechanic_medium_light_skin_tone:"],"c":"people"},":woman_mechanic_tone3:":{"sn":":woman_mechanic_tone3:","cp":"1f469-1f3fd-200d-1f527","sns":[":woman_mechanic_medium_skin_tone:"],"c":"people"},":woman_mechanic_tone4:":{"sn":":woman_mechanic_tone4:","cp":"1f469-1f3fe-200d-1f527","sns":[":woman_mechanic_medium_dark_skin_tone:"],"c":"people"},":woman_mechanic_tone5:":{"sn":":woman_mechanic_tone5:","cp":"1f469-1f3ff-200d-1f527","sns":[":woman_mechanic_dark_skin_tone:"],"c":"people"},":woman_office_worker:":{"sn":":woman_office_worker:","cp":"1f469-200d-1f4bc","sns":[],"c":"people"},":woman_office_worker_tone1:":{"sn":":woman_office_worker_tone1:","cp":"1f469-1f3fb-200d-1f4bc","sns":[":woman_office_worker_light_skin_tone:"],"c":"people"},":woman_office_worker_tone2:":{"sn":":woman_office_worker_tone2:","cp":"1f469-1f3fc-200d-1f4bc","sns":[":woman_office_worker_medium_light_skin_tone:"],"c":"people"},":woman_office_worker_tone3:":{"sn":":woman_office_worker_tone3:","cp":"1f469-1f3fd-200d-1f4bc","sns":[":woman_office_worker_medium_skin_tone:"],"c":"people"},":woman_office_worker_tone4:":{"sn":":woman_office_worker_tone4:","cp":"1f469-1f3fe-200d-1f4bc","sns":[":woman_office_worker_medium_dark_skin_tone:"],"c":"people"},":woman_office_worker_tone5:":{"sn":":woman_office_worker_tone5:","cp":"1f469-1f3ff-200d-1f4bc","sns":[":woman_office_worker_dark_skin_tone:"],"c":"people"},":woman_pilot:":{"sn":":woman_pilot:","cp":"1f469-200d-2708-fe0f","sns":[],"c":"people"},":woman_pilot_tone1:":{"sn":":woman_pilot_tone1:","cp":"1f469-1f3fb-200d-2708-fe0f","sns":[":woman_pilot_light_skin_tone:"],"c":"people"},":woman_pilot_tone2:":{"sn":":woman_pilot_tone2:","cp":"1f469-1f3fc-200d-2708-fe0f","sns":[":woman_pilot_medium_light_skin_tone:"],"c":"people"},":woman_pilot_tone3:":{"sn":":woman_pilot_tone3:","cp":"1f469-1f3fd-200d-2708-fe0f","sns":[":woman_pilot_medium_skin_tone:"],"c":"people"},":woman_pilot_tone4:":{"sn":":woman_pilot_tone4:","cp":"1f469-1f3fe-200d-2708-fe0f","sns":[":woman_pilot_medium_dark_skin_tone:"],"c":"people"},":woman_pilot_tone5:":{"sn":":woman_pilot_tone5:","cp":"1f469-1f3ff-200d-2708-fe0f","sns":[":woman_pilot_dark_skin_tone:"],"c":"people"},":woman_police_officer:":{"sn":":woman_police_officer:","cp":"1f46e-200d-2640-fe0f","sns":[],"c":"people"},":woman_police_officer_tone1:":{"sn":":woman_police_officer_tone1:","cp":"1f46e-1f3fb-200d-2640-fe0f","sns":[":woman_police_officer_light_skin_tone:"],"c":"people"},":woman_police_officer_tone2:":{"sn":":woman_police_officer_tone2:","cp":"1f46e-1f3fc-200d-2640-fe0f","sns":[":woman_police_officer_medium_light_skin_tone:"],"c":"people"},":woman_police_officer_tone3:":{"sn":":woman_police_officer_tone3:","cp":"1f46e-1f3fd-200d-2640-fe0f","sns":[":woman_police_officer_medium_skin_tone:"],"c":"people"},":woman_police_officer_tone4:":{"sn":":woman_police_officer_tone4:","cp":"1f46e-1f3fe-200d-2640-fe0f","sns":[":woman_police_officer_medium_dark_skin_tone:"],"c":"people"},":woman_police_officer_tone5:":{"sn":":woman_police_officer_tone5:","cp":"1f46e-1f3ff-200d-2640-fe0f","sns":[":woman_police_officer_dark_skin_tone:"],"c":"people"},":woman_pouting:":{"sn":":woman_pouting:","cp":"1f64e-200d-2640-fe0f","sns":[],"c":"people"},":woman_pouting_tone1:":{"sn":":woman_pouting_tone1:","cp":"1f64e-1f3fb-200d-2640-fe0f","sns":[":woman_pouting_light_skin_tone:"],"c":"people"},":woman_pouting_tone2:":{"sn":":woman_pouting_tone2:","cp":"1f64e-1f3fc-200d-2640-fe0f","sns":[":woman_pouting_medium_light_skin_tone:"],"c":"people"},":woman_pouting_tone3:":{"sn":":woman_pouting_tone3:","cp":"1f64e-1f3fd-200d-2640-fe0f","sns":[":woman_pouting_medium_skin_tone:"],"c":"people"},":woman_pouting_tone4:":{"sn":":woman_pouting_tone4:","cp":"1f64e-1f3fe-200d-2640-fe0f","sns":[":woman_pouting_medium_dark_skin_tone:"],"c":"people"},":woman_pouting_tone5:":{"sn":":woman_pouting_tone5:","cp":"1f64e-1f3ff-200d-2640-fe0f","sns":[":woman_pouting_dark_skin_tone:"],"c":"people"},":woman_raising_hand:":{"sn":":woman_raising_hand:","cp":"1f64b-200d-2640-fe0f","sns":[],"c":"people"},":woman_raising_hand_tone1:":{"sn":":woman_raising_hand_tone1:","cp":"1f64b-1f3fb-200d-2640-fe0f","sns":[":woman_raising_hand_light_skin_tone:"],"c":"people"},":woman_raising_hand_tone2:":{"sn":":woman_raising_hand_tone2:","cp":"1f64b-1f3fc-200d-2640-fe0f","sns":[":woman_raising_hand_medium_light_skin_tone:"],"c":"people"},":woman_raising_hand_tone3:":{"sn":":woman_raising_hand_tone3:","cp":"1f64b-1f3fd-200d-2640-fe0f","sns":[":woman_raising_hand_medium_skin_tone:"],"c":"people"},":woman_raising_hand_tone4:":{"sn":":woman_raising_hand_tone4:","cp":"1f64b-1f3fe-200d-2640-fe0f","sns":[":woman_raising_hand_medium_dark_skin_tone:"],"c":"people"},":woman_raising_hand_tone5:":{"sn":":woman_raising_hand_tone5:","cp":"1f64b-1f3ff-200d-2640-fe0f","sns":[":woman_raising_hand_dark_skin_tone:"],"c":"people"},":woman_running:":{"sn":":woman_running:","cp":"1f3c3-200d-2640-fe0f","sns":[],"c":"people"},":woman_running_tone1:":{"sn":":woman_running_tone1:","cp":"1f3c3-1f3fb-200d-2640-fe0f","sns":[":woman_running_light_skin_tone:"],"c":"people"},":woman_running_tone2:":{"sn":":woman_running_tone2:","cp":"1f3c3-1f3fc-200d-2640-fe0f","sns":[":woman_running_medium_light_skin_tone:"],"c":"people"},":woman_running_tone3:":{"sn":":woman_running_tone3:","cp":"1f3c3-1f3fd-200d-2640-fe0f","sns":[":woman_running_medium_skin_tone:"],"c":"people"},":woman_running_tone4:":{"sn":":woman_running_tone4:","cp":"1f3c3-1f3fe-200d-2640-fe0f","sns":[":woman_running_medium_dark_skin_tone:"],"c":"people"},":woman_running_tone5:":{"sn":":woman_running_tone5:","cp":"1f3c3-1f3ff-200d-2640-fe0f","sns":[":woman_running_dark_skin_tone:"],"c":"people"},":woman_scientist:":{"sn":":woman_scientist:","cp":"1f469-200d-1f52c","sns":[],"c":"people"},":woman_scientist_tone1:":{"sn":":woman_scientist_tone1:","cp":"1f469-1f3fb-200d-1f52c","sns":[":woman_scientist_light_skin_tone:"],"c":"people"},":woman_scientist_tone2:":{"sn":":woman_scientist_tone2:","cp":"1f469-1f3fc-200d-1f52c","sns":[":woman_scientist_medium_light_skin_tone:"],"c":"people"},":woman_scientist_tone3:":{"sn":":woman_scientist_tone3:","cp":"1f469-1f3fd-200d-1f52c","sns":[":woman_scientist_medium_skin_tone:"],"c":"people"},":woman_scientist_tone4:":{"sn":":woman_scientist_tone4:","cp":"1f469-1f3fe-200d-1f52c","sns":[":woman_scientist_medium_dark_skin_tone:"],"c":"people"},":woman_scientist_tone5:":{"sn":":woman_scientist_tone5:","cp":"1f469-1f3ff-200d-1f52c","sns":[":woman_scientist_dark_skin_tone:"],"c":"people"},":woman_shrugging:":{"sn":":woman_shrugging:","cp":"1f937-200d-2640-fe0f","sns":[],"c":"people"},":woman_shrugging_tone1:":{"sn":":woman_shrugging_tone1:","cp":"1f937-1f3fb-200d-2640-fe0f","sns":[":woman_shrugging_light_skin_tone:"],"c":"people"},":woman_shrugging_tone2:":{"sn":":woman_shrugging_tone2:","cp":"1f937-1f3fc-200d-2640-fe0f","sns":[":woman_shrugging_medium_light_skin_tone:"],"c":"people"},":woman_shrugging_tone3:":{"sn":":woman_shrugging_tone3:","cp":"1f937-1f3fd-200d-2640-fe0f","sns":[":woman_shrugging_medium_skin_tone:"],"c":"people"},":woman_shrugging_tone4:":{"sn":":woman_shrugging_tone4:","cp":"1f937-1f3fe-200d-2640-fe0f","sns":[":woman_shrugging_medium_dark_skin_tone:"],"c":"people"},":woman_shrugging_tone5:":{"sn":":woman_shrugging_tone5:","cp":"1f937-1f3ff-200d-2640-fe0f","sns":[":woman_shrugging_dark_skin_tone:"],"c":"people"},":woman_singer:":{"sn":":woman_singer:","cp":"1f469-200d-1f3a4","sns":[],"c":"people"},":woman_singer_tone1:":{"sn":":woman_singer_tone1:","cp":"1f469-1f3fb-200d-1f3a4","sns":[":woman_singer_light_skin_tone:"],"c":"people"},":woman_singer_tone2:":{"sn":":woman_singer_tone2:","cp":"1f469-1f3fc-200d-1f3a4","sns":[":woman_singer_medium_light_skin_tone:"],"c":"people"},":woman_singer_tone3:":{"sn":":woman_singer_tone3:","cp":"1f469-1f3fd-200d-1f3a4","sns":[":woman_singer_medium_skin_tone:"],"c":"people"},":woman_singer_tone4:":{"sn":":woman_singer_tone4:","cp":"1f469-1f3fe-200d-1f3a4","sns":[":woman_singer_medium_dark_skin_tone:"],"c":"people"},":woman_singer_tone5:":{"sn":":woman_singer_tone5:","cp":"1f469-1f3ff-200d-1f3a4","sns":[":woman_singer_dark_skin_tone:"],"c":"people"},":woman_student:":{"sn":":woman_student:","cp":"1f469-200d-1f393","sns":[],"c":"people"},":woman_student_tone1:":{"sn":":woman_student_tone1:","cp":"1f469-1f3fb-200d-1f393","sns":[":woman_student_light_skin_tone:"],"c":"people"},":woman_student_tone2:":{"sn":":woman_student_tone2:","cp":"1f469-1f3fc-200d-1f393","sns":[":woman_student_medium_light_skin_tone:"],"c":"people"},":woman_student_tone3:":{"sn":":woman_student_tone3:","cp":"1f469-1f3fd-200d-1f393","sns":[":woman_student_medium_skin_tone:"],"c":"people"},":woman_student_tone4:":{"sn":":woman_student_tone4:","cp":"1f469-1f3fe-200d-1f393","sns":[":woman_student_medium_dark_skin_tone:"],"c":"people"},":woman_student_tone5:":{"sn":":woman_student_tone5:","cp":"1f469-1f3ff-200d-1f393","sns":[":woman_student_dark_skin_tone:"],"c":"people"},":woman_teacher:":{"sn":":woman_teacher:","cp":"1f469-200d-1f3eb","sns":[],"c":"people"},":woman_teacher_tone1:":{"sn":":woman_teacher_tone1:","cp":"1f469-1f3fb-200d-1f3eb","sns":[":woman_teacher_light_skin_tone:"],"c":"people"},":woman_teacher_tone2:":{"sn":":woman_teacher_tone2:","cp":"1f469-1f3fc-200d-1f3eb","sns":[":woman_teacher_medium_light_skin_tone:"],"c":"people"},":woman_teacher_tone3:":{"sn":":woman_teacher_tone3:","cp":"1f469-1f3fd-200d-1f3eb","sns":[":woman_teacher_medium_skin_tone:"],"c":"people"},":woman_teacher_tone4:":{"sn":":woman_teacher_tone4:","cp":"1f469-1f3fe-200d-1f3eb","sns":[":woman_teacher_medium_dark_skin_tone:"],"c":"people"},":woman_teacher_tone5:":{"sn":":woman_teacher_tone5:","cp":"1f469-1f3ff-200d-1f3eb","sns":[":woman_teacher_dark_skin_tone:"],"c":"people"},":woman_technologist:":{"sn":":woman_technologist:","cp":"1f469-200d-1f4bb","sns":[],"c":"people"},":woman_technologist_tone1:":{"sn":":woman_technologist_tone1:","cp":"1f469-1f3fb-200d-1f4bb","sns":[":woman_technologist_light_skin_tone:"],"c":"people"},":woman_technologist_tone2:":{"sn":":woman_technologist_tone2:","cp":"1f469-1f3fc-200d-1f4bb","sns":[":woman_technologist_medium_light_skin_tone:"],"c":"people"},":woman_technologist_tone3:":{"sn":":woman_technologist_tone3:","cp":"1f469-1f3fd-200d-1f4bb","sns":[":woman_technologist_medium_skin_tone:"],"c":"people"},":woman_technologist_tone4:":{"sn":":woman_technologist_tone4:","cp":"1f469-1f3fe-200d-1f4bb","sns":[":woman_technologist_medium_dark_skin_tone:"],"c":"people"},":woman_technologist_tone5:":{"sn":":woman_technologist_tone5:","cp":"1f469-1f3ff-200d-1f4bb","sns":[":woman_technologist_dark_skin_tone:"],"c":"people"},":woman_tipping_hand:":{"sn":":woman_tipping_hand:","cp":"1f481-200d-2640-fe0f","sns":[],"c":"people"},":woman_tipping_hand_tone1:":{"sn":":woman_tipping_hand_tone1:","cp":"1f481-1f3fb-200d-2640-fe0f","sns":[":woman_tipping_hand_light_skin_tone:"],"c":"people"},":woman_tipping_hand_tone2:":{"sn":":woman_tipping_hand_tone2:","cp":"1f481-1f3fc-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_light_skin_tone:"],"c":"people"},":woman_tipping_hand_tone3:":{"sn":":woman_tipping_hand_tone3:","cp":"1f481-1f3fd-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_skin_tone:"],"c":"people"},":woman_tipping_hand_tone4:":{"sn":":woman_tipping_hand_tone4:","cp":"1f481-1f3fe-200d-2640-fe0f","sns":[":woman_tipping_hand_medium_dark_skin_tone:"],"c":"people"},":woman_tipping_hand_tone5:":{"sn":":woman_tipping_hand_tone5:","cp":"1f481-1f3ff-200d-2640-fe0f","sns":[":woman_tipping_hand_dark_skin_tone:"],"c":"people"},":woman_tone1:":{"sn":":woman_tone1:","cp":"1f469-1f3fb","sns":[],"c":"people"},":woman_tone2:":{"sn":":woman_tone2:","cp":"1f469-1f3fc","sns":[],"c":"people"},":woman_tone3:":{"sn":":woman_tone3:","cp":"1f469-1f3fd","sns":[],"c":"people"},":woman_tone4:":{"sn":":woman_tone4:","cp":"1f469-1f3fe","sns":[],"c":"people"},":woman_tone5:":{"sn":":woman_tone5:","cp":"1f469-1f3ff","sns":[],"c":"people"},":woman_vampire:":{"sn":":woman_vampire:","cp":"1f9db-200d-2640-fe0f","sns":[],"c":"people"},":woman_vampire_tone1:":{"sn":":woman_vampire_tone1:","cp":"1f9db-1f3fb-200d-2640-fe0f","sns":[":woman_vampire_light_skin_tone:"],"c":"people"},":woman_vampire_tone2:":{"sn":":woman_vampire_tone2:","cp":"1f9db-1f3fc-200d-2640-fe0f","sns":[":woman_vampire_medium_light_skin_tone:"],"c":"people"},":woman_vampire_tone3:":{"sn":":woman_vampire_tone3:","cp":"1f9db-1f3fd-200d-2640-fe0f","sns":[":woman_vampire_medium_skin_tone:"],"c":"people"},":woman_vampire_tone4:":{"sn":":woman_vampire_tone4:","cp":"1f9db-1f3fe-200d-2640-fe0f","sns":[":woman_vampire_medium_dark_skin_tone:"],"c":"people"},":woman_vampire_tone5:":{"sn":":woman_vampire_tone5:","cp":"1f9db-1f3ff-200d-2640-fe0f","sns":[":woman_vampire_dark_skin_tone:"],"c":"people"},":woman_walking:":{"sn":":woman_walking:","cp":"1f6b6-200d-2640-fe0f","sns":[],"c":"people"},":woman_walking_tone1:":{"sn":":woman_walking_tone1:","cp":"1f6b6-1f3fb-200d-2640-fe0f","sns":[":woman_walking_light_skin_tone:"],"c":"people"},":woman_walking_tone2:":{"sn":":woman_walking_tone2:","cp":"1f6b6-1f3fc-200d-2640-fe0f","sns":[":woman_walking_medium_light_skin_tone:"],"c":"people"},":woman_walking_tone3:":{"sn":":woman_walking_tone3:","cp":"1f6b6-1f3fd-200d-2640-fe0f","sns":[":woman_walking_medium_skin_tone:"],"c":"people"},":woman_walking_tone4:":{"sn":":woman_walking_tone4:","cp":"1f6b6-1f3fe-200d-2640-fe0f","sns":[":woman_walking_medium_dark_skin_tone:"],"c":"people"},":woman_walking_tone5:":{"sn":":woman_walking_tone5:","cp":"1f6b6-1f3ff-200d-2640-fe0f","sns":[":woman_walking_dark_skin_tone:"],"c":"people"},":woman_wearing_turban:":{"sn":":woman_wearing_turban:","cp":"1f473-200d-2640-fe0f","sns":[],"c":"people"},":woman_wearing_turban_tone1:":{"sn":":woman_wearing_turban_tone1:","cp":"1f473-1f3fb-200d-2640-fe0f","sns":[":woman_wearing_turban_light_skin_tone:"],"c":"people"},":woman_wearing_turban_tone2:":{"sn":":woman_wearing_turban_tone2:","cp":"1f473-1f3fc-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_light_skin_tone:"],"c":"people"},":woman_wearing_turban_tone3:":{"sn":":woman_wearing_turban_tone3:","cp":"1f473-1f3fd-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_skin_tone:"],"c":"people"},":woman_wearing_turban_tone4:":{"sn":":woman_wearing_turban_tone4:","cp":"1f473-1f3fe-200d-2640-fe0f","sns":[":woman_wearing_turban_medium_dark_skin_tone:"],"c":"people"},":woman_wearing_turban_tone5:":{"sn":":woman_wearing_turban_tone5:","cp":"1f473-1f3ff-200d-2640-fe0f","sns":[":woman_wearing_turban_dark_skin_tone:"],"c":"people"},":woman_with_headscarf:":{"sn":":woman_with_headscarf:","cp":"1f9d5","sns":[],"c":"people"},":woman_with_headscarf_tone1:":{"sn":":woman_with_headscarf_tone1:","cp":"1f9d5-1f3fb","sns":[":woman_with_headscarf_light_skin_tone:"],"c":"people"},":woman_with_headscarf_tone2:":{"sn":":woman_with_headscarf_tone2:","cp":"1f9d5-1f3fc","sns":[":woman_with_headscarf_medium_light_skin_tone:"],"c":"people"},":woman_with_headscarf_tone3:":{"sn":":woman_with_headscarf_tone3:","cp":"1f9d5-1f3fd","sns":[":woman_with_headscarf_medium_skin_tone:"],"c":"people"},":woman_with_headscarf_tone4:":{"sn":":woman_with_headscarf_tone4:","cp":"1f9d5-1f3fe","sns":[":woman_with_headscarf_medium_dark_skin_tone:"],"c":"people"},":woman_with_headscarf_tone5:":{"sn":":woman_with_headscarf_tone5:","cp":"1f9d5-1f3ff","sns":[":woman_with_headscarf_dark_skin_tone:"],"c":"people"},":woman_zombie:":{"sn":":woman_zombie:","cp":"1f9df-200d-2640-fe0f","sns":[],"c":"people"},":women_with_bunny_ears_partying:":{"sn":":women_with_bunny_ears_partying:","cp":"1f46f-200d-2640-fe0f","sns":[],"c":"people"},":zombie:":{"sn":":zombie:","cp":"1f9df","sns":[],"c":"people"}},"activity":{":8ball:":{"sn":":8ball:","cp":"1f3b1","sns":[],"c":"activity"},":art:":{"sn":":art:","cp":"1f3a8","sns":[],"c":"activity"},":badminton:":{"sn":":badminton:","cp":"1f3f8","sns":[],"c":"activity"},":baseball:":{"sn":":baseball:","cp":"26be","sns":[],"c":"activity"},":basketball:":{"sn":":basketball:","cp":"1f3c0","sns":[],"c":"activity"},":bikini:":{"sn":":bikini:","cp":"1f459","sns":[],"c":"activity"},":bow_and_arrow:":{"sn":":bow_and_arrow:","cp":"1f3f9","sns":[":archery:"],"c":"activity"},":bowling:":{"sn":":bowling:","cp":"1f3b3","sns":[],"c":"activity"},":boxing_glove:":{"sn":":boxing_glove:","cp":"1f94a","sns":[":boxing_gloves:"],"c":"activity"},":circus_tent:":{"sn":":circus_tent:","cp":"1f3aa","sns":[],"c":"activity"},":clapper:":{"sn":":clapper:","cp":"1f3ac","sns":[],"c":"activity"},":cricket_game:":{"sn":":cricket_game:","cp":"1f3cf","sns":[":cricket_bat_ball:"],"c":"activity"},":curling_stone:":{"sn":":curling_stone:","cp":"1f94c","sns":[],"c":"activity"},":dart:":{"sn":":dart:","cp":"1f3af","sns":[],"c":"activity"},":drum:":{"sn":":drum:","cp":"1f941","sns":[":drum_with_drumsticks:"],"c":"activity"},":field_hockey:":{"sn":":field_hockey:","cp":"1f3d1","sns":[],"c":"activity"},":first_place:":{"sn":":first_place:","cp":"1f947","sns":[":first_place_medal:"],"c":"activity"},":fishing_pole_and_fish:":{"sn":":fishing_pole_and_fish:","cp":"1f3a3","sns":[],"c":"activity"},":football:":{"sn":":football:","cp":"1f3c8","sns":[],"c":"activity"},":game_die:":{"sn":":game_die:","cp":"1f3b2","sns":[],"c":"activity"},":goal:":{"sn":":goal:","cp":"1f945","sns":[":goal_net:"],"c":"activity"},":golf:":{"sn":":golf:","cp":"26f3","sns":[],"c":"activity"},":guitar:":{"sn":":guitar:","cp":"1f3b8","sns":[],"c":"activity"},":headphones:":{"sn":":headphones:","cp":"1f3a7","sns":[],"c":"activity"},":hockey:":{"sn":":hockey:","cp":"1f3d2","sns":[],"c":"activity"},":horse_racing:":{"sn":":horse_racing:","cp":"1f3c7","sns":[],"c":"activity"},":horse_racing_tone1:":{"sn":":horse_racing_tone1:","cp":"1f3c7-1f3fb","sns":[],"c":"activity"},":horse_racing_tone2:":{"sn":":horse_racing_tone2:","cp":"1f3c7-1f3fc","sns":[],"c":"activity"},":horse_racing_tone3:":{"sn":":horse_racing_tone3:","cp":"1f3c7-1f3fd","sns":[],"c":"activity"},":horse_racing_tone4:":{"sn":":horse_racing_tone4:","cp":"1f3c7-1f3fe","sns":[],"c":"activity"},":horse_racing_tone5:":{"sn":":horse_racing_tone5:","cp":"1f3c7-1f3ff","sns":[],"c":"activity"},":ice_skate:":{"sn":":ice_skate:","cp":"26f8","sns":[],"c":"activity"},":man_biking:":{"sn":":man_biking:","cp":"1f6b4-200d-2642-fe0f","sns":[],"c":"activity"},":man_biking_tone1:":{"sn":":man_biking_tone1:","cp":"1f6b4-1f3fb-200d-2642-fe0f","sns":[":man_biking_light_skin_tone:"],"c":"activity"},":man_biking_tone2:":{"sn":":man_biking_tone2:","cp":"1f6b4-1f3fc-200d-2642-fe0f","sns":[":man_biking_medium_light_skin_tone:"],"c":"activity"},":man_biking_tone3:":{"sn":":man_biking_tone3:","cp":"1f6b4-1f3fd-200d-2642-fe0f","sns":[":man_biking_medium_skin_tone:"],"c":"activity"},":man_biking_tone4:":{"sn":":man_biking_tone4:","cp":"1f6b4-1f3fe-200d-2642-fe0f","sns":[":man_biking_medium_dark_skin_tone:"],"c":"activity"},":man_biking_tone5:":{"sn":":man_biking_tone5:","cp":"1f6b4-1f3ff-200d-2642-fe0f","sns":[":man_biking_dark_skin_tone:"],"c":"activity"},":man_bouncing_ball:":{"sn":":man_bouncing_ball:","cp":"26f9-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_bouncing_ball_tone1:":{"sn":":man_bouncing_ball_tone1:","cp":"26f9-1f3fb-200d-2642-fe0f","sns":[":man_bouncing_ball_light_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone2:":{"sn":":man_bouncing_ball_tone2:","cp":"26f9-1f3fc-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_light_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone3:":{"sn":":man_bouncing_ball_tone3:","cp":"26f9-1f3fd-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone4:":{"sn":":man_bouncing_ball_tone4:","cp":"26f9-1f3fe-200d-2642-fe0f","sns":[":man_bouncing_ball_medium_dark_skin_tone:"],"c":"activity"},":man_bouncing_ball_tone5:":{"sn":":man_bouncing_ball_tone5:","cp":"26f9-1f3ff-200d-2642-fe0f","sns":[":man_bouncing_ball_dark_skin_tone:"],"c":"activity"},":man_cartwheeling:":{"sn":":man_cartwheeling:","cp":"1f938-200d-2642-fe0f","sns":[],"c":"activity"},":man_cartwheeling_tone1:":{"sn":":man_cartwheeling_tone1:","cp":"1f938-1f3fb-200d-2642-fe0f","sns":[":man_cartwheeling_light_skin_tone:"],"c":"activity"},":man_cartwheeling_tone2:":{"sn":":man_cartwheeling_tone2:","cp":"1f938-1f3fc-200d-2642-fe0f","sns":[":man_cartwheeling_medium_light_skin_tone:"],"c":"activity"},":man_cartwheeling_tone3:":{"sn":":man_cartwheeling_tone3:","cp":"1f938-1f3fd-200d-2642-fe0f","sns":[":man_cartwheeling_medium_skin_tone:"],"c":"activity"},":man_cartwheeling_tone4:":{"sn":":man_cartwheeling_tone4:","cp":"1f938-1f3fe-200d-2642-fe0f","sns":[":man_cartwheeling_medium_dark_skin_tone:"],"c":"activity"},":man_cartwheeling_tone5:":{"sn":":man_cartwheeling_tone5:","cp":"1f938-1f3ff-200d-2642-fe0f","sns":[":man_cartwheeling_dark_skin_tone:"],"c":"activity"},":man_climbing:":{"sn":":man_climbing:","cp":"1f9d7-200d-2642-fe0f","sns":[],"c":"activity"},":man_climbing_tone1:":{"sn":":man_climbing_tone1:","cp":"1f9d7-1f3fb-200d-2642-fe0f","sns":[":man_climbing_light_skin_tone:"],"c":"activity"},":man_climbing_tone2:":{"sn":":man_climbing_tone2:","cp":"1f9d7-1f3fc-200d-2642-fe0f","sns":[":man_climbing_medium_light_skin_tone:"],"c":"activity"},":man_climbing_tone3:":{"sn":":man_climbing_tone3:","cp":"1f9d7-1f3fd-200d-2642-fe0f","sns":[":man_climbing_medium_skin_tone:"],"c":"activity"},":man_climbing_tone4:":{"sn":":man_climbing_tone4:","cp":"1f9d7-1f3fe-200d-2642-fe0f","sns":[":man_climbing_medium_dark_skin_tone:"],"c":"activity"},":man_climbing_tone5:":{"sn":":man_climbing_tone5:","cp":"1f9d7-1f3ff-200d-2642-fe0f","sns":[":man_climbing_dark_skin_tone:"],"c":"activity"},":man_golfing:":{"sn":":man_golfing:","cp":"1f3cc-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_golfing_tone1:":{"sn":":man_golfing_tone1:","cp":"1f3cc-1f3fb-200d-2642-fe0f","sns":[":man_golfing_light_skin_tone:"],"c":"activity"},":man_golfing_tone2:":{"sn":":man_golfing_tone2:","cp":"1f3cc-1f3fc-200d-2642-fe0f","sns":[":man_golfing_medium_light_skin_tone:"],"c":"activity"},":man_golfing_tone3:":{"sn":":man_golfing_tone3:","cp":"1f3cc-1f3fd-200d-2642-fe0f","sns":[":man_golfing_medium_skin_tone:"],"c":"activity"},":man_golfing_tone4:":{"sn":":man_golfing_tone4:","cp":"1f3cc-1f3fe-200d-2642-fe0f","sns":[":man_golfing_medium_dark_skin_tone:"],"c":"activity"},":man_golfing_tone5:":{"sn":":man_golfing_tone5:","cp":"1f3cc-1f3ff-200d-2642-fe0f","sns":[":man_golfing_dark_skin_tone:"],"c":"activity"},":man_in_lotus_position:":{"sn":":man_in_lotus_position:","cp":"1f9d8-200d-2642-fe0f","sns":[],"c":"activity"},":man_in_lotus_position_tone1:":{"sn":":man_in_lotus_position_tone1:","cp":"1f9d8-1f3fb-200d-2642-fe0f","sns":[":man_in_lotus_position_light_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone2:":{"sn":":man_in_lotus_position_tone2:","cp":"1f9d8-1f3fc-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone3:":{"sn":":man_in_lotus_position_tone3:","cp":"1f9d8-1f3fd-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone4:":{"sn":":man_in_lotus_position_tone4:","cp":"1f9d8-1f3fe-200d-2642-fe0f","sns":[":man_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":man_in_lotus_position_tone5:":{"sn":":man_in_lotus_position_tone5:","cp":"1f9d8-1f3ff-200d-2642-fe0f","sns":[":man_in_lotus_position_dark_skin_tone:"],"c":"activity"},":man_juggling:":{"sn":":man_juggling:","cp":"1f939-200d-2642-fe0f","sns":[],"c":"activity"},":man_juggling_tone1:":{"sn":":man_juggling_tone1:","cp":"1f939-1f3fb-200d-2642-fe0f","sns":[":man_juggling_light_skin_tone:"],"c":"activity"},":man_juggling_tone2:":{"sn":":man_juggling_tone2:","cp":"1f939-1f3fc-200d-2642-fe0f","sns":[":man_juggling_medium_light_skin_tone:"],"c":"activity"},":man_juggling_tone3:":{"sn":":man_juggling_tone3:","cp":"1f939-1f3fd-200d-2642-fe0f","sns":[":man_juggling_medium_skin_tone:"],"c":"activity"},":man_juggling_tone4:":{"sn":":man_juggling_tone4:","cp":"1f939-1f3fe-200d-2642-fe0f","sns":[":man_juggling_medium_dark_skin_tone:"],"c":"activity"},":man_juggling_tone5:":{"sn":":man_juggling_tone5:","cp":"1f939-1f3ff-200d-2642-fe0f","sns":[":man_juggling_dark_skin_tone:"],"c":"activity"},":man_lifting_weights:":{"sn":":man_lifting_weights:","cp":"1f3cb-fe0f-200d-2642-fe0f","sns":[],"c":"activity"},":man_lifting_weights_tone1:":{"sn":":man_lifting_weights_tone1:","cp":"1f3cb-1f3fb-200d-2642-fe0f","sns":[":man_lifting_weights_light_skin_tone:"],"c":"activity"},":man_lifting_weights_tone2:":{"sn":":man_lifting_weights_tone2:","cp":"1f3cb-1f3fc-200d-2642-fe0f","sns":[":man_lifting_weights_medium_light_skin_tone:"],"c":"activity"},":man_lifting_weights_tone3:":{"sn":":man_lifting_weights_tone3:","cp":"1f3cb-1f3fd-200d-2642-fe0f","sns":[":man_lifting_weights_medium_skin_tone:"],"c":"activity"},":man_lifting_weights_tone4:":{"sn":":man_lifting_weights_tone4:","cp":"1f3cb-1f3fe-200d-2642-fe0f","sns":[":man_lifting_weights_medium_dark_skin_tone:"],"c":"activity"},":man_lifting_weights_tone5:":{"sn":":man_lifting_weights_tone5:","cp":"1f3cb-1f3ff-200d-2642-fe0f","sns":[":man_lifting_weights_dark_skin_tone:"],"c":"activity"},":man_mountain_biking:":{"sn":":man_mountain_biking:","cp":"1f6b5-200d-2642-fe0f","sns":[],"c":"activity"},":man_mountain_biking_tone1:":{"sn":":man_mountain_biking_tone1:","cp":"1f6b5-1f3fb-200d-2642-fe0f","sns":[":man_mountain_biking_light_skin_tone:"],"c":"activity"},":man_mountain_biking_tone2:":{"sn":":man_mountain_biking_tone2:","cp":"1f6b5-1f3fc-200d-2642-fe0f","sns":[":man_mountain_biking_medium_light_skin_tone:"],"c":"activity"},":man_mountain_biking_tone3:":{"sn":":man_mountain_biking_tone3:","cp":"1f6b5-1f3fd-200d-2642-fe0f","sns":[":man_mountain_biking_medium_skin_tone:"],"c":"activity"},":man_mountain_biking_tone4:":{"sn":":man_mountain_biking_tone4:","cp":"1f6b5-1f3fe-200d-2642-fe0f","sns":[":man_mountain_biking_medium_dark_skin_tone:"],"c":"activity"},":man_mountain_biking_tone5:":{"sn":":man_mountain_biking_tone5:","cp":"1f6b5-1f3ff-200d-2642-fe0f","sns":[":man_mountain_biking_dark_skin_tone:"],"c":"activity"},":man_playing_handball:":{"sn":":man_playing_handball:","cp":"1f93e-200d-2642-fe0f","sns":[],"c":"activity"},":man_playing_handball_tone1:":{"sn":":man_playing_handball_tone1:","cp":"1f93e-1f3fb-200d-2642-fe0f","sns":[":man_playing_handball_light_skin_tone:"],"c":"activity"},":man_playing_handball_tone2:":{"sn":":man_playing_handball_tone2:","cp":"1f93e-1f3fc-200d-2642-fe0f","sns":[":man_playing_handball_medium_light_skin_tone:"],"c":"activity"},":man_playing_handball_tone3:":{"sn":":man_playing_handball_tone3:","cp":"1f93e-1f3fd-200d-2642-fe0f","sns":[":man_playing_handball_medium_skin_tone:"],"c":"activity"},":man_playing_handball_tone4:":{"sn":":man_playing_handball_tone4:","cp":"1f93e-1f3fe-200d-2642-fe0f","sns":[":man_playing_handball_medium_dark_skin_tone:"],"c":"activity"},":man_playing_handball_tone5:":{"sn":":man_playing_handball_tone5:","cp":"1f93e-1f3ff-200d-2642-fe0f","sns":[":man_playing_handball_dark_skin_tone:"],"c":"activity"},":man_playing_water_polo:":{"sn":":man_playing_water_polo:","cp":"1f93d-200d-2642-fe0f","sns":[],"c":"activity"},":man_playing_water_polo_tone1:":{"sn":":man_playing_water_polo_tone1:","cp":"1f93d-1f3fb-200d-2642-fe0f","sns":[":man_playing_water_polo_light_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone2:":{"sn":":man_playing_water_polo_tone2:","cp":"1f93d-1f3fc-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_light_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone3:":{"sn":":man_playing_water_polo_tone3:","cp":"1f93d-1f3fd-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone4:":{"sn":":man_playing_water_polo_tone4:","cp":"1f93d-1f3fe-200d-2642-fe0f","sns":[":man_playing_water_polo_medium_dark_skin_tone:"],"c":"activity"},":man_playing_water_polo_tone5:":{"sn":":man_playing_water_polo_tone5:","cp":"1f93d-1f3ff-200d-2642-fe0f","sns":[":man_playing_water_polo_dark_skin_tone:"],"c":"activity"},":man_rowing_boat:":{"sn":":man_rowing_boat:","cp":"1f6a3-200d-2642-fe0f","sns":[],"c":"activity"},":man_rowing_boat_tone1:":{"sn":":man_rowing_boat_tone1:","cp":"1f6a3-1f3fb-200d-2642-fe0f","sns":[":man_rowing_boat_light_skin_tone:"],"c":"activity"},":man_rowing_boat_tone2:":{"sn":":man_rowing_boat_tone2:","cp":"1f6a3-1f3fc-200d-2642-fe0f","sns":[":man_rowing_boat_medium_light_skin_tone:"],"c":"activity"},":man_rowing_boat_tone3:":{"sn":":man_rowing_boat_tone3:","cp":"1f6a3-1f3fd-200d-2642-fe0f","sns":[":man_rowing_boat_medium_skin_tone:"],"c":"activity"},":man_rowing_boat_tone4:":{"sn":":man_rowing_boat_tone4:","cp":"1f6a3-1f3fe-200d-2642-fe0f","sns":[":man_rowing_boat_medium_dark_skin_tone:"],"c":"activity"},":man_rowing_boat_tone5:":{"sn":":man_rowing_boat_tone5:","cp":"1f6a3-1f3ff-200d-2642-fe0f","sns":[":man_rowing_boat_dark_skin_tone:"],"c":"activity"},":man_surfing:":{"sn":":man_surfing:","cp":"1f3c4-200d-2642-fe0f","sns":[],"c":"activity"},":man_surfing_tone1:":{"sn":":man_surfing_tone1:","cp":"1f3c4-1f3fb-200d-2642-fe0f","sns":[":man_surfing_light_skin_tone:"],"c":"activity"},":man_surfing_tone2:":{"sn":":man_surfing_tone2:","cp":"1f3c4-1f3fc-200d-2642-fe0f","sns":[":man_surfing_medium_light_skin_tone:"],"c":"activity"},":man_surfing_tone3:":{"sn":":man_surfing_tone3:","cp":"1f3c4-1f3fd-200d-2642-fe0f","sns":[":man_surfing_medium_skin_tone:"],"c":"activity"},":man_surfing_tone4:":{"sn":":man_surfing_tone4:","cp":"1f3c4-1f3fe-200d-2642-fe0f","sns":[":man_surfing_medium_dark_skin_tone:"],"c":"activity"},":man_surfing_tone5:":{"sn":":man_surfing_tone5:","cp":"1f3c4-1f3ff-200d-2642-fe0f","sns":[":man_surfing_dark_skin_tone:"],"c":"activity"},":man_swimming:":{"sn":":man_swimming:","cp":"1f3ca-200d-2642-fe0f","sns":[],"c":"activity"},":man_swimming_tone1:":{"sn":":man_swimming_tone1:","cp":"1f3ca-1f3fb-200d-2642-fe0f","sns":[":man_swimming_light_skin_tone:"],"c":"activity"},":man_swimming_tone2:":{"sn":":man_swimming_tone2:","cp":"1f3ca-1f3fc-200d-2642-fe0f","sns":[":man_swimming_medium_light_skin_tone:"],"c":"activity"},":man_swimming_tone3:":{"sn":":man_swimming_tone3:","cp":"1f3ca-1f3fd-200d-2642-fe0f","sns":[":man_swimming_medium_skin_tone:"],"c":"activity"},":man_swimming_tone4:":{"sn":":man_swimming_tone4:","cp":"1f3ca-1f3fe-200d-2642-fe0f","sns":[":man_swimming_medium_dark_skin_tone:"],"c":"activity"},":man_swimming_tone5:":{"sn":":man_swimming_tone5:","cp":"1f3ca-1f3ff-200d-2642-fe0f","sns":[":man_swimming_dark_skin_tone:"],"c":"activity"},":martial_arts_uniform:":{"sn":":martial_arts_uniform:","cp":"1f94b","sns":[":karate_uniform:"],"c":"activity"},":medal:":{"sn":":medal:","cp":"1f3c5","sns":[":sports_medal:"],"c":"activity"},":men_wrestling:":{"sn":":men_wrestling:","cp":"1f93c-200d-2642-fe0f","sns":[],"c":"activity"},":microphone:":{"sn":":microphone:","cp":"1f3a4","sns":[],"c":"activity"},":military_medal:":{"sn":":military_medal:","cp":"1f396","sns":[],"c":"activity"},":musical_keyboard:":{"sn":":musical_keyboard:","cp":"1f3b9","sns":[],"c":"activity"},":musical_score:":{"sn":":musical_score:","cp":"1f3bc","sns":[],"c":"activity"},":people_wrestling:":{"sn":":people_wrestling:","cp":"1f93c","sns":[":wrestlers:",":wrestling:"],"c":"activity"},":performing_arts:":{"sn":":performing_arts:","cp":"1f3ad","sns":[],"c":"activity"},":person_biking:":{"sn":":person_biking:","cp":"1f6b4","sns":[":bicyclist:"],"c":"activity"},":person_biking_tone1:":{"sn":":person_biking_tone1:","cp":"1f6b4-1f3fb","sns":[":bicyclist_tone1:"],"c":"activity"},":person_biking_tone2:":{"sn":":person_biking_tone2:","cp":"1f6b4-1f3fc","sns":[":bicyclist_tone2:"],"c":"activity"},":person_biking_tone3:":{"sn":":person_biking_tone3:","cp":"1f6b4-1f3fd","sns":[":bicyclist_tone3:"],"c":"activity"},":person_biking_tone4:":{"sn":":person_biking_tone4:","cp":"1f6b4-1f3fe","sns":[":bicyclist_tone4:"],"c":"activity"},":person_biking_tone5:":{"sn":":person_biking_tone5:","cp":"1f6b4-1f3ff","sns":[":bicyclist_tone5:"],"c":"activity"},":person_bouncing_ball:":{"sn":":person_bouncing_ball:","cp":"26f9","sns":[":basketball_player:",":person_with_ball:"],"c":"activity"},":person_bouncing_ball_tone1:":{"sn":":person_bouncing_ball_tone1:","cp":"26f9-1f3fb","sns":[":basketball_player_tone1:",":person_with_ball_tone1:"],"c":"activity"},":person_bouncing_ball_tone2:":{"sn":":person_bouncing_ball_tone2:","cp":"26f9-1f3fc","sns":[":basketball_player_tone2:",":person_with_ball_tone2:"],"c":"activity"},":person_bouncing_ball_tone3:":{"sn":":person_bouncing_ball_tone3:","cp":"26f9-1f3fd","sns":[":basketball_player_tone3:",":person_with_ball_tone3:"],"c":"activity"},":person_bouncing_ball_tone4:":{"sn":":person_bouncing_ball_tone4:","cp":"26f9-1f3fe","sns":[":basketball_player_tone4:",":person_with_ball_tone4:"],"c":"activity"},":person_bouncing_ball_tone5:":{"sn":":person_bouncing_ball_tone5:","cp":"26f9-1f3ff","sns":[":basketball_player_tone5:",":person_with_ball_tone5:"],"c":"activity"},":person_climbing:":{"sn":":person_climbing:","cp":"1f9d7","sns":[],"c":"activity"},":person_climbing_tone1:":{"sn":":person_climbing_tone1:","cp":"1f9d7-1f3fb","sns":[":person_climbing_light_skin_tone:"],"c":"activity"},":person_climbing_tone2:":{"sn":":person_climbing_tone2:","cp":"1f9d7-1f3fc","sns":[":person_climbing_medium_light_skin_tone:"],"c":"activity"},":person_climbing_tone3:":{"sn":":person_climbing_tone3:","cp":"1f9d7-1f3fd","sns":[":person_climbing_medium_skin_tone:"],"c":"activity"},":person_climbing_tone4:":{"sn":":person_climbing_tone4:","cp":"1f9d7-1f3fe","sns":[":person_climbing_medium_dark_skin_tone:"],"c":"activity"},":person_climbing_tone5:":{"sn":":person_climbing_tone5:","cp":"1f9d7-1f3ff","sns":[":person_climbing_dark_skin_tone:"],"c":"activity"},":person_doing_cartwheel:":{"sn":":person_doing_cartwheel:","cp":"1f938","sns":[":cartwheel:"],"c":"activity"},":person_doing_cartwheel_tone1:":{"sn":":person_doing_cartwheel_tone1:","cp":"1f938-1f3fb","sns":[":cartwheel_tone1:"],"c":"activity"},":person_doing_cartwheel_tone2:":{"sn":":person_doing_cartwheel_tone2:","cp":"1f938-1f3fc","sns":[":cartwheel_tone2:"],"c":"activity"},":person_doing_cartwheel_tone3:":{"sn":":person_doing_cartwheel_tone3:","cp":"1f938-1f3fd","sns":[":cartwheel_tone3:"],"c":"activity"},":person_doing_cartwheel_tone4:":{"sn":":person_doing_cartwheel_tone4:","cp":"1f938-1f3fe","sns":[":cartwheel_tone4:"],"c":"activity"},":person_doing_cartwheel_tone5:":{"sn":":person_doing_cartwheel_tone5:","cp":"1f938-1f3ff","sns":[":cartwheel_tone5:"],"c":"activity"},":person_fencing:":{"sn":":person_fencing:","cp":"1f93a","sns":[":fencer:",":fencing:"],"c":"activity"},":person_golfing:":{"sn":":person_golfing:","cp":"1f3cc","sns":[":golfer:"],"c":"activity"},":person_golfing_tone1:":{"sn":":person_golfing_tone1:","cp":"1f3cc-1f3fb","sns":[":person_golfing_light_skin_tone:"],"c":"activity"},":person_golfing_tone2:":{"sn":":person_golfing_tone2:","cp":"1f3cc-1f3fc","sns":[":person_golfing_medium_light_skin_tone:"],"c":"activity"},":person_golfing_tone3:":{"sn":":person_golfing_tone3:","cp":"1f3cc-1f3fd","sns":[":person_golfing_medium_skin_tone:"],"c":"activity"},":person_golfing_tone4:":{"sn":":person_golfing_tone4:","cp":"1f3cc-1f3fe","sns":[":person_golfing_medium_dark_skin_tone:"],"c":"activity"},":person_golfing_tone5:":{"sn":":person_golfing_tone5:","cp":"1f3cc-1f3ff","sns":[":person_golfing_dark_skin_tone:"],"c":"activity"},":person_in_lotus_position:":{"sn":":person_in_lotus_position:","cp":"1f9d8","sns":[],"c":"activity"},":person_in_lotus_position_tone1:":{"sn":":person_in_lotus_position_tone1:","cp":"1f9d8-1f3fb","sns":[":person_in_lotus_position_light_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone2:":{"sn":":person_in_lotus_position_tone2:","cp":"1f9d8-1f3fc","sns":[":person_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone3:":{"sn":":person_in_lotus_position_tone3:","cp":"1f9d8-1f3fd","sns":[":person_in_lotus_position_medium_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone4:":{"sn":":person_in_lotus_position_tone4:","cp":"1f9d8-1f3fe","sns":[":person_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":person_in_lotus_position_tone5:":{"sn":":person_in_lotus_position_tone5:","cp":"1f9d8-1f3ff","sns":[":person_in_lotus_position_dark_skin_tone:"],"c":"activity"},":person_juggling:":{"sn":":person_juggling:","cp":"1f939","sns":[":juggling:",":juggler:"],"c":"activity"},":person_juggling_tone1:":{"sn":":person_juggling_tone1:","cp":"1f939-1f3fb","sns":[":juggling_tone1:",":juggler_tone1:"],"c":"activity"},":person_juggling_tone2:":{"sn":":person_juggling_tone2:","cp":"1f939-1f3fc","sns":[":juggling_tone2:",":juggler_tone2:"],"c":"activity"},":person_juggling_tone3:":{"sn":":person_juggling_tone3:","cp":"1f939-1f3fd","sns":[":juggling_tone3:",":juggler_tone3:"],"c":"activity"},":person_juggling_tone4:":{"sn":":person_juggling_tone4:","cp":"1f939-1f3fe","sns":[":juggling_tone4:",":juggler_tone4:"],"c":"activity"},":person_juggling_tone5:":{"sn":":person_juggling_tone5:","cp":"1f939-1f3ff","sns":[":juggling_tone5:",":juggler_tone5:"],"c":"activity"},":person_lifting_weights:":{"sn":":person_lifting_weights:","cp":"1f3cb","sns":[":lifter:",":weight_lifter:"],"c":"activity"},":person_lifting_weights_tone1:":{"sn":":person_lifting_weights_tone1:","cp":"1f3cb-1f3fb","sns":[":lifter_tone1:",":weight_lifter_tone1:"],"c":"activity"},":person_lifting_weights_tone2:":{"sn":":person_lifting_weights_tone2:","cp":"1f3cb-1f3fc","sns":[":lifter_tone2:",":weight_lifter_tone2:"],"c":"activity"},":person_lifting_weights_tone3:":{"sn":":person_lifting_weights_tone3:","cp":"1f3cb-1f3fd","sns":[":lifter_tone3:",":weight_lifter_tone3:"],"c":"activity"},":person_lifting_weights_tone4:":{"sn":":person_lifting_weights_tone4:","cp":"1f3cb-1f3fe","sns":[":lifter_tone4:",":weight_lifter_tone4:"],"c":"activity"},":person_lifting_weights_tone5:":{"sn":":person_lifting_weights_tone5:","cp":"1f3cb-1f3ff","sns":[":lifter_tone5:",":weight_lifter_tone5:"],"c":"activity"},":person_mountain_biking:":{"sn":":person_mountain_biking:","cp":"1f6b5","sns":[":mountain_bicyclist:"],"c":"activity"},":person_mountain_biking_tone1:":{"sn":":person_mountain_biking_tone1:","cp":"1f6b5-1f3fb","sns":[":mountain_bicyclist_tone1:"],"c":"activity"},":person_mountain_biking_tone2:":{"sn":":person_mountain_biking_tone2:","cp":"1f6b5-1f3fc","sns":[":mountain_bicyclist_tone2:"],"c":"activity"},":person_mountain_biking_tone3:":{"sn":":person_mountain_biking_tone3:","cp":"1f6b5-1f3fd","sns":[":mountain_bicyclist_tone3:"],"c":"activity"},":person_mountain_biking_tone4:":{"sn":":person_mountain_biking_tone4:","cp":"1f6b5-1f3fe","sns":[":mountain_bicyclist_tone4:"],"c":"activity"},":person_mountain_biking_tone5:":{"sn":":person_mountain_biking_tone5:","cp":"1f6b5-1f3ff","sns":[":mountain_bicyclist_tone5:"],"c":"activity"},":person_playing_handball:":{"sn":":person_playing_handball:","cp":"1f93e","sns":[":handball:"],"c":"activity"},":person_playing_handball_tone1:":{"sn":":person_playing_handball_tone1:","cp":"1f93e-1f3fb","sns":[":handball_tone1:"],"c":"activity"},":person_playing_handball_tone2:":{"sn":":person_playing_handball_tone2:","cp":"1f93e-1f3fc","sns":[":handball_tone2:"],"c":"activity"},":person_playing_handball_tone3:":{"sn":":person_playing_handball_tone3:","cp":"1f93e-1f3fd","sns":[":handball_tone3:"],"c":"activity"},":person_playing_handball_tone4:":{"sn":":person_playing_handball_tone4:","cp":"1f93e-1f3fe","sns":[":handball_tone4:"],"c":"activity"},":person_playing_handball_tone5:":{"sn":":person_playing_handball_tone5:","cp":"1f93e-1f3ff","sns":[":handball_tone5:"],"c":"activity"},":person_playing_water_polo:":{"sn":":person_playing_water_polo:","cp":"1f93d","sns":[":water_polo:"],"c":"activity"},":person_playing_water_polo_tone1:":{"sn":":person_playing_water_polo_tone1:","cp":"1f93d-1f3fb","sns":[":water_polo_tone1:"],"c":"activity"},":person_playing_water_polo_tone2:":{"sn":":person_playing_water_polo_tone2:","cp":"1f93d-1f3fc","sns":[":water_polo_tone2:"],"c":"activity"},":person_playing_water_polo_tone3:":{"sn":":person_playing_water_polo_tone3:","cp":"1f93d-1f3fd","sns":[":water_polo_tone3:"],"c":"activity"},":person_playing_water_polo_tone4:":{"sn":":person_playing_water_polo_tone4:","cp":"1f93d-1f3fe","sns":[":water_polo_tone4:"],"c":"activity"},":person_playing_water_polo_tone5:":{"sn":":person_playing_water_polo_tone5:","cp":"1f93d-1f3ff","sns":[":water_polo_tone5:"],"c":"activity"},":person_rowing_boat:":{"sn":":person_rowing_boat:","cp":"1f6a3","sns":[":rowboat:"],"c":"activity"},":person_rowing_boat_tone1:":{"sn":":person_rowing_boat_tone1:","cp":"1f6a3-1f3fb","sns":[":rowboat_tone1:"],"c":"activity"},":person_rowing_boat_tone2:":{"sn":":person_rowing_boat_tone2:","cp":"1f6a3-1f3fc","sns":[":rowboat_tone2:"],"c":"activity"},":person_rowing_boat_tone3:":{"sn":":person_rowing_boat_tone3:","cp":"1f6a3-1f3fd","sns":[":rowboat_tone3:"],"c":"activity"},":person_rowing_boat_tone4:":{"sn":":person_rowing_boat_tone4:","cp":"1f6a3-1f3fe","sns":[":rowboat_tone4:"],"c":"activity"},":person_rowing_boat_tone5:":{"sn":":person_rowing_boat_tone5:","cp":"1f6a3-1f3ff","sns":[":rowboat_tone5:"],"c":"activity"},":person_surfing:":{"sn":":person_surfing:","cp":"1f3c4","sns":[":surfer:"],"c":"activity"},":person_surfing_tone1:":{"sn":":person_surfing_tone1:","cp":"1f3c4-1f3fb","sns":[":surfer_tone1:"],"c":"activity"},":person_surfing_tone2:":{"sn":":person_surfing_tone2:","cp":"1f3c4-1f3fc","sns":[":surfer_tone2:"],"c":"activity"},":person_surfing_tone3:":{"sn":":person_surfing_tone3:","cp":"1f3c4-1f3fd","sns":[":surfer_tone3:"],"c":"activity"},":person_surfing_tone4:":{"sn":":person_surfing_tone4:","cp":"1f3c4-1f3fe","sns":[":surfer_tone4:"],"c":"activity"},":person_surfing_tone5:":{"sn":":person_surfing_tone5:","cp":"1f3c4-1f3ff","sns":[":surfer_tone5:"],"c":"activity"},":person_swimming:":{"sn":":person_swimming:","cp":"1f3ca","sns":[":swimmer:"],"c":"activity"},":person_swimming_tone1:":{"sn":":person_swimming_tone1:","cp":"1f3ca-1f3fb","sns":[":swimmer_tone1:"],"c":"activity"},":person_swimming_tone2:":{"sn":":person_swimming_tone2:","cp":"1f3ca-1f3fc","sns":[":swimmer_tone2:"],"c":"activity"},":person_swimming_tone3:":{"sn":":person_swimming_tone3:","cp":"1f3ca-1f3fd","sns":[":swimmer_tone3:"],"c":"activity"},":person_swimming_tone4:":{"sn":":person_swimming_tone4:","cp":"1f3ca-1f3fe","sns":[":swimmer_tone4:"],"c":"activity"},":person_swimming_tone5:":{"sn":":person_swimming_tone5:","cp":"1f3ca-1f3ff","sns":[":swimmer_tone5:"],"c":"activity"},":ping_pong:":{"sn":":ping_pong:","cp":"1f3d3","sns":[":table_tennis:"],"c":"activity"},":reminder_ribbon:":{"sn":":reminder_ribbon:","cp":"1f397","sns":[],"c":"activity"},":rosette:":{"sn":":rosette:","cp":"1f3f5","sns":[],"c":"activity"},":rugby_football:":{"sn":":rugby_football:","cp":"1f3c9","sns":[],"c":"activity"},":running_shirt_with_sash:":{"sn":":running_shirt_with_sash:","cp":"1f3bd","sns":[],"c":"activity"},":saxophone:":{"sn":":saxophone:","cp":"1f3b7","sns":[],"c":"activity"},":second_place:":{"sn":":second_place:","cp":"1f948","sns":[":second_place_medal:"],"c":"activity"},":ski:":{"sn":":ski:","cp":"1f3bf","sns":[],"c":"activity"},":skier:":{"sn":":skier:","cp":"26f7","sns":[],"c":"activity"},":sled:":{"sn":":sled:","cp":"1f6f7","sns":[],"c":"activity"},":slot_machine:":{"sn":":slot_machine:","cp":"1f3b0","sns":[],"c":"activity"},":snowboarder:":{"sn":":snowboarder:","cp":"1f3c2","sns":[],"c":"activity"},":snowboarder_tone1:":{"sn":":snowboarder_tone1:","cp":"1f3c2-1f3fb","sns":[":snowboarder_light_skin_tone:"],"c":"activity"},":snowboarder_tone2:":{"sn":":snowboarder_tone2:","cp":"1f3c2-1f3fc","sns":[":snowboarder_medium_light_skin_tone:"],"c":"activity"},":snowboarder_tone3:":{"sn":":snowboarder_tone3:","cp":"1f3c2-1f3fd","sns":[":snowboarder_medium_skin_tone:"],"c":"activity"},":snowboarder_tone4:":{"sn":":snowboarder_tone4:","cp":"1f3c2-1f3fe","sns":[":snowboarder_medium_dark_skin_tone:"],"c":"activity"},":snowboarder_tone5:":{"sn":":snowboarder_tone5:","cp":"1f3c2-1f3ff","sns":[":snowboarder_dark_skin_tone:"],"c":"activity"},":soccer:":{"sn":":soccer:","cp":"26bd","sns":[],"c":"activity"},":tennis:":{"sn":":tennis:","cp":"1f3be","sns":[],"c":"activity"},":third_place:":{"sn":":third_place:","cp":"1f949","sns":[":third_place_medal:"],"c":"activity"},":ticket:":{"sn":":ticket:","cp":"1f3ab","sns":[],"c":"activity"},":tickets:":{"sn":":tickets:","cp":"1f39f","sns":[":admission_tickets:"],"c":"activity"},":trophy:":{"sn":":trophy:","cp":"1f3c6","sns":[],"c":"activity"},":trumpet:":{"sn":":trumpet:","cp":"1f3ba","sns":[],"c":"activity"},":video_game:":{"sn":":video_game:","cp":"1f3ae","sns":[],"c":"activity"},":violin:":{"sn":":violin:","cp":"1f3bb","sns":[],"c":"activity"},":volleyball:":{"sn":":volleyball:","cp":"1f3d0","sns":[],"c":"activity"},":woman_biking:":{"sn":":woman_biking:","cp":"1f6b4-200d-2640-fe0f","sns":[],"c":"activity"},":woman_biking_tone1:":{"sn":":woman_biking_tone1:","cp":"1f6b4-1f3fb-200d-2640-fe0f","sns":[":woman_biking_light_skin_tone:"],"c":"activity"},":woman_biking_tone2:":{"sn":":woman_biking_tone2:","cp":"1f6b4-1f3fc-200d-2640-fe0f","sns":[":woman_biking_medium_light_skin_tone:"],"c":"activity"},":woman_biking_tone3:":{"sn":":woman_biking_tone3:","cp":"1f6b4-1f3fd-200d-2640-fe0f","sns":[":woman_biking_medium_skin_tone:"],"c":"activity"},":woman_biking_tone4:":{"sn":":woman_biking_tone4:","cp":"1f6b4-1f3fe-200d-2640-fe0f","sns":[":woman_biking_medium_dark_skin_tone:"],"c":"activity"},":woman_biking_tone5:":{"sn":":woman_biking_tone5:","cp":"1f6b4-1f3ff-200d-2640-fe0f","sns":[":woman_biking_dark_skin_tone:"],"c":"activity"},":woman_bouncing_ball:":{"sn":":woman_bouncing_ball:","cp":"26f9-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_bouncing_ball_tone1:":{"sn":":woman_bouncing_ball_tone1:","cp":"26f9-1f3fb-200d-2640-fe0f","sns":[":woman_bouncing_ball_light_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone2:":{"sn":":woman_bouncing_ball_tone2:","cp":"26f9-1f3fc-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_light_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone3:":{"sn":":woman_bouncing_ball_tone3:","cp":"26f9-1f3fd-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone4:":{"sn":":woman_bouncing_ball_tone4:","cp":"26f9-1f3fe-200d-2640-fe0f","sns":[":woman_bouncing_ball_medium_dark_skin_tone:"],"c":"activity"},":woman_bouncing_ball_tone5:":{"sn":":woman_bouncing_ball_tone5:","cp":"26f9-1f3ff-200d-2640-fe0f","sns":[":woman_bouncing_ball_dark_skin_tone:"],"c":"activity"},":woman_cartwheeling:":{"sn":":woman_cartwheeling:","cp":"1f938-200d-2640-fe0f","sns":[],"c":"activity"},":woman_cartwheeling_tone1:":{"sn":":woman_cartwheeling_tone1:","cp":"1f938-1f3fb-200d-2640-fe0f","sns":[":woman_cartwheeling_light_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone2:":{"sn":":woman_cartwheeling_tone2:","cp":"1f938-1f3fc-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_light_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone3:":{"sn":":woman_cartwheeling_tone3:","cp":"1f938-1f3fd-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone4:":{"sn":":woman_cartwheeling_tone4:","cp":"1f938-1f3fe-200d-2640-fe0f","sns":[":woman_cartwheeling_medium_dark_skin_tone:"],"c":"activity"},":woman_cartwheeling_tone5:":{"sn":":woman_cartwheeling_tone5:","cp":"1f938-1f3ff-200d-2640-fe0f","sns":[":woman_cartwheeling_dark_skin_tone:"],"c":"activity"},":woman_climbing:":{"sn":":woman_climbing:","cp":"1f9d7-200d-2640-fe0f","sns":[],"c":"activity"},":woman_climbing_tone1:":{"sn":":woman_climbing_tone1:","cp":"1f9d7-1f3fb-200d-2640-fe0f","sns":[":woman_climbing_light_skin_tone:"],"c":"activity"},":woman_climbing_tone2:":{"sn":":woman_climbing_tone2:","cp":"1f9d7-1f3fc-200d-2640-fe0f","sns":[":woman_climbing_medium_light_skin_tone:"],"c":"activity"},":woman_climbing_tone3:":{"sn":":woman_climbing_tone3:","cp":"1f9d7-1f3fd-200d-2640-fe0f","sns":[":woman_climbing_medium_skin_tone:"],"c":"activity"},":woman_climbing_tone4:":{"sn":":woman_climbing_tone4:","cp":"1f9d7-1f3fe-200d-2640-fe0f","sns":[":woman_climbing_medium_dark_skin_tone:"],"c":"activity"},":woman_climbing_tone5:":{"sn":":woman_climbing_tone5:","cp":"1f9d7-1f3ff-200d-2640-fe0f","sns":[":woman_climbing_dark_skin_tone:"],"c":"activity"},":woman_golfing:":{"sn":":woman_golfing:","cp":"1f3cc-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_golfing_tone1:":{"sn":":woman_golfing_tone1:","cp":"1f3cc-1f3fb-200d-2640-fe0f","sns":[":woman_golfing_light_skin_tone:"],"c":"activity"},":woman_golfing_tone2:":{"sn":":woman_golfing_tone2:","cp":"1f3cc-1f3fc-200d-2640-fe0f","sns":[":woman_golfing_medium_light_skin_tone:"],"c":"activity"},":woman_golfing_tone3:":{"sn":":woman_golfing_tone3:","cp":"1f3cc-1f3fd-200d-2640-fe0f","sns":[":woman_golfing_medium_skin_tone:"],"c":"activity"},":woman_golfing_tone4:":{"sn":":woman_golfing_tone4:","cp":"1f3cc-1f3fe-200d-2640-fe0f","sns":[":woman_golfing_medium_dark_skin_tone:"],"c":"activity"},":woman_golfing_tone5:":{"sn":":woman_golfing_tone5:","cp":"1f3cc-1f3ff-200d-2640-fe0f","sns":[":woman_golfing_dark_skin_tone:"],"c":"activity"},":woman_in_lotus_position:":{"sn":":woman_in_lotus_position:","cp":"1f9d8-200d-2640-fe0f","sns":[],"c":"activity"},":woman_in_lotus_position_tone1:":{"sn":":woman_in_lotus_position_tone1:","cp":"1f9d8-1f3fb-200d-2640-fe0f","sns":[":woman_in_lotus_position_light_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone2:":{"sn":":woman_in_lotus_position_tone2:","cp":"1f9d8-1f3fc-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_light_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone3:":{"sn":":woman_in_lotus_position_tone3:","cp":"1f9d8-1f3fd-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone4:":{"sn":":woman_in_lotus_position_tone4:","cp":"1f9d8-1f3fe-200d-2640-fe0f","sns":[":woman_in_lotus_position_medium_dark_skin_tone:"],"c":"activity"},":woman_in_lotus_position_tone5:":{"sn":":woman_in_lotus_position_tone5:","cp":"1f9d8-1f3ff-200d-2640-fe0f","sns":[":woman_in_lotus_position_dark_skin_tone:"],"c":"activity"},":woman_juggling:":{"sn":":woman_juggling:","cp":"1f939-200d-2640-fe0f","sns":[],"c":"activity"},":woman_juggling_tone1:":{"sn":":woman_juggling_tone1:","cp":"1f939-1f3fb-200d-2640-fe0f","sns":[":woman_juggling_light_skin_tone:"],"c":"activity"},":woman_juggling_tone2:":{"sn":":woman_juggling_tone2:","cp":"1f939-1f3fc-200d-2640-fe0f","sns":[":woman_juggling_medium_light_skin_tone:"],"c":"activity"},":woman_juggling_tone3:":{"sn":":woman_juggling_tone3:","cp":"1f939-1f3fd-200d-2640-fe0f","sns":[":woman_juggling_medium_skin_tone:"],"c":"activity"},":woman_juggling_tone4:":{"sn":":woman_juggling_tone4:","cp":"1f939-1f3fe-200d-2640-fe0f","sns":[":woman_juggling_medium_dark_skin_tone:"],"c":"activity"},":woman_juggling_tone5:":{"sn":":woman_juggling_tone5:","cp":"1f939-1f3ff-200d-2640-fe0f","sns":[":woman_juggling_dark_skin_tone:"],"c":"activity"},":woman_lifting_weights:":{"sn":":woman_lifting_weights:","cp":"1f3cb-fe0f-200d-2640-fe0f","sns":[],"c":"activity"},":woman_lifting_weights_tone1:":{"sn":":woman_lifting_weights_tone1:","cp":"1f3cb-1f3fb-200d-2640-fe0f","sns":[":woman_lifting_weights_light_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone2:":{"sn":":woman_lifting_weights_tone2:","cp":"1f3cb-1f3fc-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_light_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone3:":{"sn":":woman_lifting_weights_tone3:","cp":"1f3cb-1f3fd-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone4:":{"sn":":woman_lifting_weights_tone4:","cp":"1f3cb-1f3fe-200d-2640-fe0f","sns":[":woman_lifting_weights_medium_dark_skin_tone:"],"c":"activity"},":woman_lifting_weights_tone5:":{"sn":":woman_lifting_weights_tone5:","cp":"1f3cb-1f3ff-200d-2640-fe0f","sns":[":woman_lifting_weights_dark_skin_tone:"],"c":"activity"},":woman_mountain_biking:":{"sn":":woman_mountain_biking:","cp":"1f6b5-200d-2640-fe0f","sns":[],"c":"activity"},":woman_mountain_biking_tone1:":{"sn":":woman_mountain_biking_tone1:","cp":"1f6b5-1f3fb-200d-2640-fe0f","sns":[":woman_mountain_biking_light_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone2:":{"sn":":woman_mountain_biking_tone2:","cp":"1f6b5-1f3fc-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_light_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone3:":{"sn":":woman_mountain_biking_tone3:","cp":"1f6b5-1f3fd-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone4:":{"sn":":woman_mountain_biking_tone4:","cp":"1f6b5-1f3fe-200d-2640-fe0f","sns":[":woman_mountain_biking_medium_dark_skin_tone:"],"c":"activity"},":woman_mountain_biking_tone5:":{"sn":":woman_mountain_biking_tone5:","cp":"1f6b5-1f3ff-200d-2640-fe0f","sns":[":woman_mountain_biking_dark_skin_tone:"],"c":"activity"},":woman_playing_handball:":{"sn":":woman_playing_handball:","cp":"1f93e-200d-2640-fe0f","sns":[],"c":"activity"},":woman_playing_handball_tone1:":{"sn":":woman_playing_handball_tone1:","cp":"1f93e-1f3fb-200d-2640-fe0f","sns":[":woman_playing_handball_light_skin_tone:"],"c":"activity"},":woman_playing_handball_tone2:":{"sn":":woman_playing_handball_tone2:","cp":"1f93e-1f3fc-200d-2640-fe0f","sns":[":woman_playing_handball_medium_light_skin_tone:"],"c":"activity"},":woman_playing_handball_tone3:":{"sn":":woman_playing_handball_tone3:","cp":"1f93e-1f3fd-200d-2640-fe0f","sns":[":woman_playing_handball_medium_skin_tone:"],"c":"activity"},":woman_playing_handball_tone4:":{"sn":":woman_playing_handball_tone4:","cp":"1f93e-1f3fe-200d-2640-fe0f","sns":[":woman_playing_handball_medium_dark_skin_tone:"],"c":"activity"},":woman_playing_handball_tone5:":{"sn":":woman_playing_handball_tone5:","cp":"1f93e-1f3ff-200d-2640-fe0f","sns":[":woman_playing_handball_dark_skin_tone:"],"c":"activity"},":woman_playing_water_polo:":{"sn":":woman_playing_water_polo:","cp":"1f93d-200d-2640-fe0f","sns":[],"c":"activity"},":woman_playing_water_polo_tone1:":{"sn":":woman_playing_water_polo_tone1:","cp":"1f93d-1f3fb-200d-2640-fe0f","sns":[":woman_playing_water_polo_light_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone2:":{"sn":":woman_playing_water_polo_tone2:","cp":"1f93d-1f3fc-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_light_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone3:":{"sn":":woman_playing_water_polo_tone3:","cp":"1f93d-1f3fd-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone4:":{"sn":":woman_playing_water_polo_tone4:","cp":"1f93d-1f3fe-200d-2640-fe0f","sns":[":woman_playing_water_polo_medium_dark_skin_tone:"],"c":"activity"},":woman_playing_water_polo_tone5:":{"sn":":woman_playing_water_polo_tone5:","cp":"1f93d-1f3ff-200d-2640-fe0f","sns":[":woman_playing_water_polo_dark_skin_tone:"],"c":"activity"},":woman_rowing_boat:":{"sn":":woman_rowing_boat:","cp":"1f6a3-200d-2640-fe0f","sns":[],"c":"activity"},":woman_rowing_boat_tone1:":{"sn":":woman_rowing_boat_tone1:","cp":"1f6a3-1f3fb-200d-2640-fe0f","sns":[":woman_rowing_boat_light_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone2:":{"sn":":woman_rowing_boat_tone2:","cp":"1f6a3-1f3fc-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_light_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone3:":{"sn":":woman_rowing_boat_tone3:","cp":"1f6a3-1f3fd-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone4:":{"sn":":woman_rowing_boat_tone4:","cp":"1f6a3-1f3fe-200d-2640-fe0f","sns":[":woman_rowing_boat_medium_dark_skin_tone:"],"c":"activity"},":woman_rowing_boat_tone5:":{"sn":":woman_rowing_boat_tone5:","cp":"1f6a3-1f3ff-200d-2640-fe0f","sns":[":woman_rowing_boat_dark_skin_tone:"],"c":"activity"},":woman_surfing:":{"sn":":woman_surfing:","cp":"1f3c4-200d-2640-fe0f","sns":[],"c":"activity"},":woman_surfing_tone1:":{"sn":":woman_surfing_tone1:","cp":"1f3c4-1f3fb-200d-2640-fe0f","sns":[":woman_surfing_light_skin_tone:"],"c":"activity"},":woman_surfing_tone2:":{"sn":":woman_surfing_tone2:","cp":"1f3c4-1f3fc-200d-2640-fe0f","sns":[":woman_surfing_medium_light_skin_tone:"],"c":"activity"},":woman_surfing_tone3:":{"sn":":woman_surfing_tone3:","cp":"1f3c4-1f3fd-200d-2640-fe0f","sns":[":woman_surfing_medium_skin_tone:"],"c":"activity"},":woman_surfing_tone4:":{"sn":":woman_surfing_tone4:","cp":"1f3c4-1f3fe-200d-2640-fe0f","sns":[":woman_surfing_medium_dark_skin_tone:"],"c":"activity"},":woman_surfing_tone5:":{"sn":":woman_surfing_tone5:","cp":"1f3c4-1f3ff-200d-2640-fe0f","sns":[":woman_surfing_dark_skin_tone:"],"c":"activity"},":woman_swimming:":{"sn":":woman_swimming:","cp":"1f3ca-200d-2640-fe0f","sns":[],"c":"activity"},":woman_swimming_tone1:":{"sn":":woman_swimming_tone1:","cp":"1f3ca-1f3fb-200d-2640-fe0f","sns":[":woman_swimming_light_skin_tone:"],"c":"activity"},":woman_swimming_tone2:":{"sn":":woman_swimming_tone2:","cp":"1f3ca-1f3fc-200d-2640-fe0f","sns":[":woman_swimming_medium_light_skin_tone:"],"c":"activity"},":woman_swimming_tone3:":{"sn":":woman_swimming_tone3:","cp":"1f3ca-1f3fd-200d-2640-fe0f","sns":[":woman_swimming_medium_skin_tone:"],"c":"activity"},":woman_swimming_tone4:":{"sn":":woman_swimming_tone4:","cp":"1f3ca-1f3fe-200d-2640-fe0f","sns":[":woman_swimming_medium_dark_skin_tone:"],"c":"activity"},":woman_swimming_tone5:":{"sn":":woman_swimming_tone5:","cp":"1f3ca-1f3ff-200d-2640-fe0f","sns":[":woman_swimming_dark_skin_tone:"],"c":"activity"},":women_wrestling:":{"sn":":women_wrestling:","cp":"1f93c-200d-2640-fe0f","sns":[],"c":"activity"}},"travel":{":aerial_tramway:":{"sn":":aerial_tramway:","cp":"1f6a1","sns":[],"c":"travel"},":airplane:":{"sn":":airplane:","cp":"2708","sns":[],"c":"travel"},":airplane_arriving:":{"sn":":airplane_arriving:","cp":"1f6ec","sns":[],"c":"travel"},":airplane_departure:":{"sn":":airplane_departure:","cp":"1f6eb","sns":[],"c":"travel"},":airplane_small:":{"sn":":airplane_small:","cp":"1f6e9","sns":[":small_airplane:"],"c":"travel"},":ambulance:":{"sn":":ambulance:","cp":"1f691","sns":[],"c":"travel"},":anchor:":{"sn":":anchor:","cp":"2693","sns":[],"c":"travel"},":articulated_lorry:":{"sn":":articulated_lorry:","cp":"1f69b","sns":[],"c":"travel"},":bank:":{"sn":":bank:","cp":"1f3e6","sns":[],"c":"travel"},":beach:":{"sn":":beach:","cp":"1f3d6","sns":[":beach_with_umbrella:"],"c":"travel"},":beach_umbrella:":{"sn":":beach_umbrella:","cp":"26f1","sns":[":umbrella_on_ground:"],"c":"travel"},":bike:":{"sn":":bike:","cp":"1f6b2","sns":[],"c":"travel"},":blue_car:":{"sn":":blue_car:","cp":"1f699","sns":[],"c":"travel"},":bridge_at_night:":{"sn":":bridge_at_night:","cp":"1f309","sns":[],"c":"travel"},":bullettrain_front:":{"sn":":bullettrain_front:","cp":"1f685","sns":[],"c":"travel"},":bullettrain_side:":{"sn":":bullettrain_side:","cp":"1f684","sns":[],"c":"travel"},":bus:":{"sn":":bus:","cp":"1f68c","sns":[],"c":"travel"},":busstop:":{"sn":":busstop:","cp":"1f68f","sns":[],"c":"travel"},":camping:":{"sn":":camping:","cp":"1f3d5","sns":[],"c":"travel"},":canoe:":{"sn":":canoe:","cp":"1f6f6","sns":[":kayak:"],"c":"travel"},":carousel_horse:":{"sn":":carousel_horse:","cp":"1f3a0","sns":[],"c":"travel"},":church:":{"sn":":church:","cp":"26ea","sns":[],"c":"travel"},":city_dusk:":{"sn":":city_dusk:","cp":"1f306","sns":[],"c":"travel"},":city_sunset:":{"sn":":city_sunset:","cp":"1f307","sns":[":city_sunrise:"],"c":"travel"},":cityscape:":{"sn":":cityscape:","cp":"1f3d9","sns":[],"c":"travel"},":classical_building:":{"sn":":classical_building:","cp":"1f3db","sns":[],"c":"travel"},":construction:":{"sn":":construction:","cp":"1f6a7","sns":[],"c":"travel"},":construction_site:":{"sn":":construction_site:","cp":"1f3d7","sns":[":building_construction:"],"c":"travel"},":convenience_store:":{"sn":":convenience_store:","cp":"1f3ea","sns":[],"c":"travel"},":cruise_ship:":{"sn":":cruise_ship:","cp":"1f6f3","sns":[":passenger_ship:"],"c":"travel"},":department_store:":{"sn":":department_store:","cp":"1f3ec","sns":[],"c":"travel"},":desert:":{"sn":":desert:","cp":"1f3dc","sns":[],"c":"travel"},":european_castle:":{"sn":":european_castle:","cp":"1f3f0","sns":[],"c":"travel"},":european_post_office:":{"sn":":european_post_office:","cp":"1f3e4","sns":[],"c":"travel"},":factory:":{"sn":":factory:","cp":"1f3ed","sns":[],"c":"travel"},":ferris_wheel:":{"sn":":ferris_wheel:","cp":"1f3a1","sns":[],"c":"travel"},":ferry:":{"sn":":ferry:","cp":"26f4","sns":[],"c":"travel"},":fire_engine:":{"sn":":fire_engine:","cp":"1f692","sns":[],"c":"travel"},":fireworks:":{"sn":":fireworks:","cp":"1f386","sns":[],"c":"travel"},":flying_saucer:":{"sn":":flying_saucer:","cp":"1f6f8","sns":[],"c":"travel"},":foggy:":{"sn":":foggy:","cp":"1f301","sns":[],"c":"travel"},":fountain:":{"sn":":fountain:","cp":"26f2","sns":[],"c":"travel"},":fuelpump:":{"sn":":fuelpump:","cp":"26fd","sns":[],"c":"travel"},":helicopter:":{"sn":":helicopter:","cp":"1f681","sns":[],"c":"travel"},":homes:":{"sn":":homes:","cp":"1f3d8","sns":[":house_buildings:"],"c":"travel"},":hospital:":{"sn":":hospital:","cp":"1f3e5","sns":[],"c":"travel"},":hotel:":{"sn":":hotel:","cp":"1f3e8","sns":[],"c":"travel"},":house:":{"sn":":house:","cp":"1f3e0","sns":[],"c":"travel"},":house_abandoned:":{"sn":":house_abandoned:","cp":"1f3da","sns":[":derelict_house_building:"],"c":"travel"},":house_with_garden:":{"sn":":house_with_garden:","cp":"1f3e1","sns":[],"c":"travel"},":island:":{"sn":":island:","cp":"1f3dd","sns":[":desert_island:"],"c":"travel"},":japan:":{"sn":":japan:","cp":"1f5fe","sns":[],"c":"travel"},":japanese_castle:":{"sn":":japanese_castle:","cp":"1f3ef","sns":[],"c":"travel"},":kaaba:":{"sn":":kaaba:","cp":"1f54b","sns":[],"c":"travel"},":light_rail:":{"sn":":light_rail:","cp":"1f688","sns":[],"c":"travel"},":love_hotel:":{"sn":":love_hotel:","cp":"1f3e9","sns":[],"c":"travel"},":map:":{"sn":":map:","cp":"1f5fa","sns":[":world_map:"],"c":"travel"},":metro:":{"sn":":metro:","cp":"1f687","sns":[],"c":"travel"},":milky_way:":{"sn":":milky_way:","cp":"1f30c","sns":[],"c":"travel"},":minibus:":{"sn":":minibus:","cp":"1f690","sns":[],"c":"travel"},":monorail:":{"sn":":monorail:","cp":"1f69d","sns":[],"c":"travel"},":mosque:":{"sn":":mosque:","cp":"1f54c","sns":[],"c":"travel"},":motor_scooter:":{"sn":":motor_scooter:","cp":"1f6f5","sns":[":motorbike:"],"c":"travel"},":motorboat:":{"sn":":motorboat:","cp":"1f6e5","sns":[],"c":"travel"},":motorcycle:":{"sn":":motorcycle:","cp":"1f3cd","sns":[":racing_motorcycle:"],"c":"travel"},":motorway:":{"sn":":motorway:","cp":"1f6e3","sns":[],"c":"travel"},":mount_fuji:":{"sn":":mount_fuji:","cp":"1f5fb","sns":[],"c":"travel"},":mountain:":{"sn":":mountain:","cp":"26f0","sns":[],"c":"travel"},":mountain_cableway:":{"sn":":mountain_cableway:","cp":"1f6a0","sns":[],"c":"travel"},":mountain_railway:":{"sn":":mountain_railway:","cp":"1f69e","sns":[],"c":"travel"},":mountain_snow:":{"sn":":mountain_snow:","cp":"1f3d4","sns":[":snow_capped_mountain:"],"c":"travel"},":moyai:":{"sn":":moyai:","cp":"1f5ff","sns":[],"c":"travel"},":night_with_stars:":{"sn":":night_with_stars:","cp":"1f303","sns":[],"c":"travel"},":office:":{"sn":":office:","cp":"1f3e2","sns":[],"c":"travel"},":oncoming_automobile:":{"sn":":oncoming_automobile:","cp":"1f698","sns":[],"c":"travel"},":oncoming_bus:":{"sn":":oncoming_bus:","cp":"1f68d","sns":[],"c":"travel"},":oncoming_police_car:":{"sn":":oncoming_police_car:","cp":"1f694","sns":[],"c":"travel"},":oncoming_taxi:":{"sn":":oncoming_taxi:","cp":"1f696","sns":[],"c":"travel"},":park:":{"sn":":park:","cp":"1f3de","sns":[":national_park:"],"c":"travel"},":police_car:":{"sn":":police_car:","cp":"1f693","sns":[],"c":"travel"},":post_office:":{"sn":":post_office:","cp":"1f3e3","sns":[],"c":"travel"},":race_car:":{"sn":":race_car:","cp":"1f3ce","sns":[":racing_car:"],"c":"travel"},":railway_car:":{"sn":":railway_car:","cp":"1f683","sns":[],"c":"travel"},":railway_track:":{"sn":":railway_track:","cp":"1f6e4","sns":[":railroad_track:"],"c":"travel"},":red_car:":{"sn":":red_car:","cp":"1f697","sns":[],"c":"travel"},":rice_scene:":{"sn":":rice_scene:","cp":"1f391","sns":[],"c":"travel"},":rocket:":{"sn":":rocket:","cp":"1f680","sns":[],"c":"travel"},":roller_coaster:":{"sn":":roller_coaster:","cp":"1f3a2","sns":[],"c":"travel"},":rotating_light:":{"sn":":rotating_light:","cp":"1f6a8","sns":[],"c":"travel"},":sailboat:":{"sn":":sailboat:","cp":"26f5","sns":[],"c":"travel"},":satellite_orbital:":{"sn":":satellite_orbital:","cp":"1f6f0","sns":[],"c":"travel"},":school:":{"sn":":school:","cp":"1f3eb","sns":[],"c":"travel"},":scooter:":{"sn":":scooter:","cp":"1f6f4","sns":[],"c":"travel"},":seat:":{"sn":":seat:","cp":"1f4ba","sns":[],"c":"travel"},":shinto_shrine:":{"sn":":shinto_shrine:","cp":"26e9","sns":[],"c":"travel"},":ship:":{"sn":":ship:","cp":"1f6a2","sns":[],"c":"travel"},":sparkler:":{"sn":":sparkler:","cp":"1f387","sns":[],"c":"travel"},":speedboat:":{"sn":":speedboat:","cp":"1f6a4","sns":[],"c":"travel"},":stadium:":{"sn":":stadium:","cp":"1f3df","sns":[],"c":"travel"},":stars:":{"sn":":stars:","cp":"1f320","sns":[],"c":"travel"},":station:":{"sn":":station:","cp":"1f689","sns":[],"c":"travel"},":statue_of_liberty:":{"sn":":statue_of_liberty:","cp":"1f5fd","sns":[],"c":"travel"},":steam_locomotive:":{"sn":":steam_locomotive:","cp":"1f682","sns":[],"c":"travel"},":sunrise:":{"sn":":sunrise:","cp":"1f305","sns":[],"c":"travel"},":sunrise_over_mountains:":{"sn":":sunrise_over_mountains:","cp":"1f304","sns":[],"c":"travel"},":suspension_railway:":{"sn":":suspension_railway:","cp":"1f69f","sns":[],"c":"travel"},":synagogue:":{"sn":":synagogue:","cp":"1f54d","sns":[],"c":"travel"},":taxi:":{"sn":":taxi:","cp":"1f695","sns":[],"c":"travel"},":tent:":{"sn":":tent:","cp":"26fa","sns":[],"c":"travel"},":tokyo_tower:":{"sn":":tokyo_tower:","cp":"1f5fc","sns":[],"c":"travel"},":tractor:":{"sn":":tractor:","cp":"1f69c","sns":[],"c":"travel"},":traffic_light:":{"sn":":traffic_light:","cp":"1f6a5","sns":[],"c":"travel"},":train2:":{"sn":":train2:","cp":"1f686","sns":[],"c":"travel"},":train:":{"sn":":train:","cp":"1f68b","sns":[],"c":"travel"},":tram:":{"sn":":tram:","cp":"1f68a","sns":[],"c":"travel"},":trolleybus:":{"sn":":trolleybus:","cp":"1f68e","sns":[],"c":"travel"},":truck:":{"sn":":truck:","cp":"1f69a","sns":[],"c":"travel"},":vertical_traffic_light:":{"sn":":vertical_traffic_light:","cp":"1f6a6","sns":[],"c":"travel"},":volcano:":{"sn":":volcano:","cp":"1f30b","sns":[],"c":"travel"},":wedding:":{"sn":":wedding:","cp":"1f492","sns":[],"c":"travel"}},"objects":{":alarm_clock:":{"sn":":alarm_clock:","cp":"23f0","sns":[],"c":"objects"},":alembic:":{"sn":":alembic:","cp":"2697","sns":[],"c":"objects"},":amphora:":{"sn":":amphora:","cp":"1f3fa","sns":[],"c":"objects"},":athletic_shoe:":{"sn":":athletic_shoe:","cp":"1f45f","sns":[],"c":"objects"},":balloon:":{"sn":":balloon:","cp":"1f388","sns":[],"c":"objects"},":ballot_box:":{"sn":":ballot_box:","cp":"1f5f3","sns":[":ballot_box_with_ballot:"],"c":"objects"},":bar_chart:":{"sn":":bar_chart:","cp":"1f4ca","sns":[],"c":"objects"},":barber:":{"sn":":barber:","cp":"1f488","sns":[],"c":"objects"},":bath:":{"sn":":bath:","cp":"1f6c0","sns":[],"c":"objects"},":bath_tone1:":{"sn":":bath_tone1:","cp":"1f6c0-1f3fb","sns":[],"c":"objects"},":bath_tone2:":{"sn":":bath_tone2:","cp":"1f6c0-1f3fc","sns":[],"c":"objects"},":bath_tone3:":{"sn":":bath_tone3:","cp":"1f6c0-1f3fd","sns":[],"c":"objects"},":bath_tone4:":{"sn":":bath_tone4:","cp":"1f6c0-1f3fe","sns":[],"c":"objects"},":bath_tone5:":{"sn":":bath_tone5:","cp":"1f6c0-1f3ff","sns":[],"c":"objects"},":bathtub:":{"sn":":bathtub:","cp":"1f6c1","sns":[],"c":"objects"},":battery:":{"sn":":battery:","cp":"1f50b","sns":[],"c":"objects"},":bed:":{"sn":":bed:","cp":"1f6cf","sns":[],"c":"objects"},":bellhop:":{"sn":":bellhop:","cp":"1f6ce","sns":[":bellhop_bell:"],"c":"objects"},":billed_cap:":{"sn":":billed_cap:","cp":"1f9e2","sns":[],"c":"objects"},":black_nib:":{"sn":":black_nib:","cp":"2712","sns":[],"c":"objects"},":blue_book:":{"sn":":blue_book:","cp":"1f4d8","sns":[],"c":"objects"},":bomb:":{"sn":":bomb:","cp":"1f4a3","sns":[],"c":"objects"},":book:":{"sn":":book:","cp":"1f4d6","sns":[],"c":"objects"},":bookmark:":{"sn":":bookmark:","cp":"1f516","sns":[],"c":"objects"},":bookmark_tabs:":{"sn":":bookmark_tabs:","cp":"1f4d1","sns":[],"c":"objects"},":books:":{"sn":":books:","cp":"1f4da","sns":[],"c":"objects"},":boot:":{"sn":":boot:","cp":"1f462","sns":[],"c":"objects"},":briefcase:":{"sn":":briefcase:","cp":"1f4bc","sns":[],"c":"objects"},":bulb:":{"sn":":bulb:","cp":"1f4a1","sns":[],"c":"objects"},":calendar:":{"sn":":calendar:","cp":"1f4c6","sns":[],"c":"objects"},":calendar_spiral:":{"sn":":calendar_spiral:","cp":"1f5d3","sns":[":spiral_calendar_pad:"],"c":"objects"},":calling:":{"sn":":calling:","cp":"1f4f2","sns":[],"c":"objects"},":camera:":{"sn":":camera:","cp":"1f4f7","sns":[],"c":"objects"},":camera_with_flash:":{"sn":":camera_with_flash:","cp":"1f4f8","sns":[],"c":"objects"},":candle:":{"sn":":candle:","cp":"1f56f","sns":[],"c":"objects"},":card_box:":{"sn":":card_box:","cp":"1f5c3","sns":[":card_file_box:"],"c":"objects"},":card_index:":{"sn":":card_index:","cp":"1f4c7","sns":[],"c":"objects"},":cd:":{"sn":":cd:","cp":"1f4bf","sns":[],"c":"objects"},":chains:":{"sn":":chains:","cp":"26d3","sns":[],"c":"objects"},":chart_with_downwards_trend:":{"sn":":chart_with_downwards_trend:","cp":"1f4c9","sns":[],"c":"objects"},":chart_with_upwards_trend:":{"sn":":chart_with_upwards_trend:","cp":"1f4c8","sns":[],"c":"objects"},":clipboard:":{"sn":":clipboard:","cp":"1f4cb","sns":[],"c":"objects"},":clock:":{"sn":":clock:","cp":"1f570","sns":[":mantlepiece_clock:"],"c":"objects"},":closed_book:":{"sn":":closed_book:","cp":"1f4d5","sns":[],"c":"objects"},":closed_lock_with_key:":{"sn":":closed_lock_with_key:","cp":"1f510","sns":[],"c":"objects"},":closed_umbrella:":{"sn":":closed_umbrella:","cp":"1f302","sns":[],"c":"objects"},":coat:":{"sn":":coat:","cp":"1f9e5","sns":[],"c":"objects"},":coffin:":{"sn":":coffin:","cp":"26b0","sns":[],"c":"objects"},":compression:":{"sn":":compression:","cp":"1f5dc","sns":[],"c":"objects"},":computer:":{"sn":":computer:","cp":"1f4bb","sns":[],"c":"objects"},":confetti_ball:":{"sn":":confetti_ball:","cp":"1f38a","sns":[],"c":"objects"},":control_knobs:":{"sn":":control_knobs:","cp":"1f39b","sns":[],"c":"objects"},":couch:":{"sn":":couch:","cp":"1f6cb","sns":[":couch_and_lamp:"],"c":"objects"},":crayon:":{"sn":":crayon:","cp":"1f58d","sns":[":lower_left_crayon:"],"c":"objects"},":credit_card:":{"sn":":credit_card:","cp":"1f4b3","sns":[],"c":"objects"},":crossed_swords:":{"sn":":crossed_swords:","cp":"2694","sns":[],"c":"objects"},":crown:":{"sn":":crown:","cp":"1f451","sns":[],"c":"objects"},":crystal_ball:":{"sn":":crystal_ball:","cp":"1f52e","sns":[],"c":"objects"},":dagger:":{"sn":":dagger:","cp":"1f5e1","sns":[":dagger_knife:"],"c":"objects"},":dark_sunglasses:":{"sn":":dark_sunglasses:","cp":"1f576","sns":[],"c":"objects"},":date:":{"sn":":date:","cp":"1f4c5","sns":[],"c":"objects"},":desktop:":{"sn":":desktop:","cp":"1f5a5","sns":[":desktop_computer:"],"c":"objects"},":dividers:":{"sn":":dividers:","cp":"1f5c2","sns":[":card_index_dividers:"],"c":"objects"},":dollar:":{"sn":":dollar:","cp":"1f4b5","sns":[],"c":"objects"},":dolls:":{"sn":":dolls:","cp":"1f38e","sns":[],"c":"objects"},":door:":{"sn":":door:","cp":"1f6aa","sns":[],"c":"objects"},":dress:":{"sn":":dress:","cp":"1f457","sns":[],"c":"objects"},":dvd:":{"sn":":dvd:","cp":"1f4c0","sns":[],"c":"objects"},":e-mail:":{"sn":":e-mail:","cp":"1f4e7","sns":[":email:"],"c":"objects"},":electric_plug:":{"sn":":electric_plug:","cp":"1f50c","sns":[],"c":"objects"},":envelope:":{"sn":":envelope:","cp":"2709","sns":[],"c":"objects"},":envelope_with_arrow:":{"sn":":envelope_with_arrow:","cp":"1f4e9","sns":[],"c":"objects"},":euro:":{"sn":":euro:","cp":"1f4b6","sns":[],"c":"objects"},":eyeglasses:":{"sn":":eyeglasses:","cp":"1f453","sns":[],"c":"objects"},":fax:":{"sn":":fax:","cp":"1f4e0","sns":[],"c":"objects"},":file_cabinet:":{"sn":":file_cabinet:","cp":"1f5c4","sns":[],"c":"objects"},":file_folder:":{"sn":":file_folder:","cp":"1f4c1","sns":[],"c":"objects"},":film_frames:":{"sn":":film_frames:","cp":"1f39e","sns":[],"c":"objects"},":flags:":{"sn":":flags:","cp":"1f38f","sns":[],"c":"objects"},":flashlight:":{"sn":":flashlight:","cp":"1f526","sns":[],"c":"objects"},":floppy_disk:":{"sn":":floppy_disk:","cp":"1f4be","sns":[],"c":"objects"},":frame_photo:":{"sn":":frame_photo:","cp":"1f5bc","sns":[":frame_with_picture:"],"c":"objects"},":gear:":{"sn":":gear:","cp":"2699","sns":[],"c":"objects"},":gem:":{"sn":":gem:","cp":"1f48e","sns":[],"c":"objects"},":gift:":{"sn":":gift:","cp":"1f381","sns":[],"c":"objects"},":gloves:":{"sn":":gloves:","cp":"1f9e4","sns":[],"c":"objects"},":green_book:":{"sn":":green_book:","cp":"1f4d7","sns":[],"c":"objects"},":gun:":{"sn":":gun:","cp":"1f52b","sns":[],"c":"objects"},":hammer:":{"sn":":hammer:","cp":"1f528","sns":[],"c":"objects"},":hammer_pick:":{"sn":":hammer_pick:","cp":"2692","sns":[":hammer_and_pick:"],"c":"objects"},":handbag:":{"sn":":handbag:","cp":"1f45c","sns":[],"c":"objects"},":high_heel:":{"sn":":high_heel:","cp":"1f460","sns":[],"c":"objects"},":hole:":{"sn":":hole:","cp":"1f573","sns":[],"c":"objects"},":hourglass:":{"sn":":hourglass:","cp":"231b","sns":[],"c":"objects"},":hourglass_flowing_sand:":{"sn":":hourglass_flowing_sand:","cp":"23f3","sns":[],"c":"objects"},":inbox_tray:":{"sn":":inbox_tray:","cp":"1f4e5","sns":[],"c":"objects"},":incoming_envelope:":{"sn":":incoming_envelope:","cp":"1f4e8","sns":[],"c":"objects"},":iphone:":{"sn":":iphone:","cp":"1f4f1","sns":[],"c":"objects"},":izakaya_lantern:":{"sn":":izakaya_lantern:","cp":"1f3ee","sns":[],"c":"objects"},":jeans:":{"sn":":jeans:","cp":"1f456","sns":[],"c":"objects"},":joystick:":{"sn":":joystick:","cp":"1f579","sns":[],"c":"objects"},":key2:":{"sn":":key2:","cp":"1f5dd","sns":[":old_key:"],"c":"objects"},":key:":{"sn":":key:","cp":"1f511","sns":[],"c":"objects"},":keyboard:":{"sn":":keyboard:","cp":"2328","sns":[],"c":"objects"},":kimono:":{"sn":":kimono:","cp":"1f458","sns":[],"c":"objects"},":knife:":{"sn":":knife:","cp":"1f52a","sns":[],"c":"objects"},":label:":{"sn":":label:","cp":"1f3f7","sns":[],"c":"objects"},":ledger:":{"sn":":ledger:","cp":"1f4d2","sns":[],"c":"objects"},":level_slider:":{"sn":":level_slider:","cp":"1f39a","sns":[],"c":"objects"},":link:":{"sn":":link:","cp":"1f517","sns":[],"c":"objects"},":lipstick:":{"sn":":lipstick:","cp":"1f484","sns":[],"c":"objects"},":lock:":{"sn":":lock:","cp":"1f512","sns":[],"c":"objects"},":lock_with_ink_pen:":{"sn":":lock_with_ink_pen:","cp":"1f50f","sns":[],"c":"objects"},":love_letter:":{"sn":":love_letter:","cp":"1f48c","sns":[],"c":"objects"},":mag:":{"sn":":mag:","cp":"1f50d","sns":[],"c":"objects"},":mag_right:":{"sn":":mag_right:","cp":"1f50e","sns":[],"c":"objects"},":mailbox:":{"sn":":mailbox:","cp":"1f4eb","sns":[],"c":"objects"},":mailbox_closed:":{"sn":":mailbox_closed:","cp":"1f4ea","sns":[],"c":"objects"},":mailbox_with_mail:":{"sn":":mailbox_with_mail:","cp":"1f4ec","sns":[],"c":"objects"},":mailbox_with_no_mail:":{"sn":":mailbox_with_no_mail:","cp":"1f4ed","sns":[],"c":"objects"},":mans_shoe:":{"sn":":mans_shoe:","cp":"1f45e","sns":[],"c":"people"},":microphone2:":{"sn":":microphone2:","cp":"1f399","sns":[":studio_microphone:"],"c":"objects"},":microscope:":{"sn":":microscope:","cp":"1f52c","sns":[],"c":"objects"},":minidisc:":{"sn":":minidisc:","cp":"1f4bd","sns":[],"c":"objects"},":money_with_wings:":{"sn":":money_with_wings:","cp":"1f4b8","sns":[],"c":"objects"},":moneybag:":{"sn":":moneybag:","cp":"1f4b0","sns":[],"c":"objects"},":mortar_board:":{"sn":":mortar_board:","cp":"1f393","sns":[],"c":"objects"},":mouse_three_button:":{"sn":":mouse_three_button:","cp":"1f5b1","sns":[":three_button_mouse:"],"c":"objects"},":movie_camera:":{"sn":":movie_camera:","cp":"1f3a5","sns":[],"c":"objects"},":necktie:":{"sn":":necktie:","cp":"1f454","sns":[],"c":"objects"},":newspaper2:":{"sn":":newspaper2:","cp":"1f5de","sns":[":rolled_up_newspaper:"],"c":"objects"},":newspaper:":{"sn":":newspaper:","cp":"1f4f0","sns":[],"c":"objects"},":notebook:":{"sn":":notebook:","cp":"1f4d3","sns":[],"c":"objects"},":notebook_with_decorative_cover:":{"sn":":notebook_with_decorative_cover:","cp":"1f4d4","sns":[],"c":"objects"},":notepad_spiral:":{"sn":":notepad_spiral:","cp":"1f5d2","sns":[":spiral_note_pad:"],"c":"objects"},":nut_and_bolt:":{"sn":":nut_and_bolt:","cp":"1f529","sns":[],"c":"objects"},":oil:":{"sn":":oil:","cp":"1f6e2","sns":[":oil_drum:"],"c":"objects"},":open_file_folder:":{"sn":":open_file_folder:","cp":"1f4c2","sns":[],"c":"objects"},":orange_book:":{"sn":":orange_book:","cp":"1f4d9","sns":[],"c":"objects"},":outbox_tray:":{"sn":":outbox_tray:","cp":"1f4e4","sns":[],"c":"objects"},":package:":{"sn":":package:","cp":"1f4e6","sns":[],"c":"objects"},":page_facing_up:":{"sn":":page_facing_up:","cp":"1f4c4","sns":[],"c":"objects"},":page_with_curl:":{"sn":":page_with_curl:","cp":"1f4c3","sns":[],"c":"objects"},":pager:":{"sn":":pager:","cp":"1f4df","sns":[],"c":"objects"},":paintbrush:":{"sn":":paintbrush:","cp":"1f58c","sns":[":lower_left_paintbrush:"],"c":"objects"},":paperclip:":{"sn":":paperclip:","cp":"1f4ce","sns":[],"c":"objects"},":paperclips:":{"sn":":paperclips:","cp":"1f587","sns":[":linked_paperclips:"],"c":"objects"},":pen_ballpoint:":{"sn":":pen_ballpoint:","cp":"1f58a","sns":[":lower_left_ballpoint_pen:"],"c":"objects"},":pen_fountain:":{"sn":":pen_fountain:","cp":"1f58b","sns":[":lower_left_fountain_pen:"],"c":"objects"},":pencil2:":{"sn":":pencil2:","cp":"270f","sns":[],"c":"objects"},":pencil:":{"sn":":pencil:","cp":"1f4dd","sns":[":memo:"],"c":"objects"},":person_in_bed_tone1:":{"sn":":person_in_bed_tone1:","cp":"1f6cc-1f3fb","sns":[":person_in_bed_light_skin_tone:"],"c":"objects"},":person_in_bed_tone2:":{"sn":":person_in_bed_tone2:","cp":"1f6cc-1f3fc","sns":[":person_in_bed_medium_light_skin_tone:"],"c":"objects"},":person_in_bed_tone3:":{"sn":":person_in_bed_tone3:","cp":"1f6cc-1f3fd","sns":[":person_in_bed_medium_skin_tone:"],"c":"objects"},":person_in_bed_tone4:":{"sn":":person_in_bed_tone4:","cp":"1f6cc-1f3fe","sns":[":person_in_bed_medium_dark_skin_tone:"],"c":"objects"},":person_in_bed_tone5:":{"sn":":person_in_bed_tone5:","cp":"1f6cc-1f3ff","sns":[":person_in_bed_dark_skin_tone:"],"c":"objects"},":pick:":{"sn":":pick:","cp":"26cf","sns":[],"c":"objects"},":pill:":{"sn":":pill:","cp":"1f48a","sns":[],"c":"objects"},":postal_horn:":{"sn":":postal_horn:","cp":"1f4ef","sns":[],"c":"objects"},":postbox:":{"sn":":postbox:","cp":"1f4ee","sns":[],"c":"objects"},":potable_water:":{"sn":":potable_water:","cp":"1f6b0","sns":[],"c":"objects"},":pouch:":{"sn":":pouch:","cp":"1f45d","sns":[],"c":"objects"},":pound:":{"sn":":pound:","cp":"1f4b7","sns":[],"c":"objects"},":prayer_beads:":{"sn":":prayer_beads:","cp":"1f4ff","sns":[],"c":"objects"},":printer:":{"sn":":printer:","cp":"1f5a8","sns":[],"c":"objects"},":projector:":{"sn":":projector:","cp":"1f4fd","sns":[":film_projector:"],"c":"objects"},":purse:":{"sn":":purse:","cp":"1f45b","sns":[],"c":"objects"},":pushpin:":{"sn":":pushpin:","cp":"1f4cc","sns":[],"c":"objects"},":radio:":{"sn":":radio:","cp":"1f4fb","sns":[],"c":"objects"},":ribbon:":{"sn":":ribbon:","cp":"1f380","sns":[],"c":"objects"},":ring:":{"sn":":ring:","cp":"1f48d","sns":[],"c":"objects"},":round_pushpin:":{"sn":":round_pushpin:","cp":"1f4cd","sns":[],"c":"objects"},":sandal:":{"sn":":sandal:","cp":"1f461","sns":[],"c":"objects"},":satellite:":{"sn":":satellite:","cp":"1f4e1","sns":[],"c":"objects"},":scales:":{"sn":":scales:","cp":"2696","sns":[],"c":"objects"},":scarf:":{"sn":":scarf:","cp":"1f9e3","sns":[],"c":"objects"},":school_satchel:":{"sn":":school_satchel:","cp":"1f392","sns":[],"c":"objects"},":scissors:":{"sn":":scissors:","cp":"2702","sns":[],"c":"objects"},":scroll:":{"sn":":scroll:","cp":"1f4dc","sns":[],"c":"objects"},":shield:":{"sn":":shield:","cp":"1f6e1","sns":[],"c":"objects"},":shirt:":{"sn":":shirt:","cp":"1f455","sns":[],"c":"objects"},":shopping_bags:":{"sn":":shopping_bags:","cp":"1f6cd","sns":[],"c":"objects"},":shopping_cart:":{"sn":":shopping_cart:","cp":"1f6d2","sns":[":shopping_trolley:"],"c":"objects"},":shower:":{"sn":":shower:","cp":"1f6bf","sns":[],"c":"objects"},":sleeping_accommodation:":{"sn":":sleeping_accommodation:","cp":"1f6cc","sns":[],"c":"objects"},":smoking:":{"sn":":smoking:","cp":"1f6ac","sns":[],"c":"objects"},":socks:":{"sn":":socks:","cp":"1f9e6","sns":[],"c":"objects"},":stopwatch:":{"sn":":stopwatch:","cp":"23f1","sns":[],"c":"objects"},":straight_ruler:":{"sn":":straight_ruler:","cp":"1f4cf","sns":[],"c":"objects"},":syringe:":{"sn":":syringe:","cp":"1f489","sns":[],"c":"objects"},":tada:":{"sn":":tada:","cp":"1f389","sns":[],"c":"objects"},":telephone:":{"sn":":telephone:","cp":"260e","sns":[],"c":"objects"},":telephone_receiver:":{"sn":":telephone_receiver:","cp":"1f4de","sns":[],"c":"objects"},":telescope:":{"sn":":telescope:","cp":"1f52d","sns":[],"c":"objects"},":thermometer:":{"sn":":thermometer:","cp":"1f321","sns":[],"c":"objects"},":timer:":{"sn":":timer:","cp":"23f2","sns":[":timer_clock:"],"c":"objects"},":toilet:":{"sn":":toilet:","cp":"1f6bd","sns":[],"c":"objects"},":tools:":{"sn":":tools:","cp":"1f6e0","sns":[":hammer_and_wrench:"],"c":"objects"},":tophat:":{"sn":":tophat:","cp":"1f3a9","sns":[],"c":"objects"},":trackball:":{"sn":":trackball:","cp":"1f5b2","sns":[],"c":"objects"},":triangular_ruler:":{"sn":":triangular_ruler:","cp":"1f4d0","sns":[],"c":"objects"},":tv:":{"sn":":tv:","cp":"1f4fa","sns":[],"c":"objects"},":unlock:":{"sn":":unlock:","cp":"1f513","sns":[],"c":"objects"},":urn:":{"sn":":urn:","cp":"26b1","sns":[":funeral_urn:"],"c":"objects"},":vhs:":{"sn":":vhs:","cp":"1f4fc","sns":[],"c":"objects"},":video_camera:":{"sn":":video_camera:","cp":"1f4f9","sns":[],"c":"objects"},":wastebasket:":{"sn":":wastebasket:","cp":"1f5d1","sns":[],"c":"objects"},":watch:":{"sn":":watch:","cp":"231a","sns":[],"c":"objects"},":wind_chime:":{"sn":":wind_chime:","cp":"1f390","sns":[],"c":"objects"},":womans_clothes:":{"sn":":womans_clothes:","cp":"1f45a","sns":[],"c":"objects"},":womans_hat:":{"sn":":womans_hat:","cp":"1f452","sns":[],"c":"objects"},":wrench:":{"sn":":wrench:","cp":"1f527","sns":[],"c":"objects"},":yen:":{"sn":":yen:","cp":"1f4b4","sns":[],"c":"objects"}},"nature":{":ant:":{"sn":":ant:","cp":"1f41c","sns":[],"c":"nature"},":baby_chick:":{"sn":":baby_chick:","cp":"1f424","sns":[],"c":"nature"},":bamboo:":{"sn":":bamboo:","cp":"1f38d","sns":[],"c":"nature"},":bat:":{"sn":":bat:","cp":"1f987","sns":[],"c":"nature"},":bear:":{"sn":":bear:","cp":"1f43b","sns":[],"c":"nature"},":bee:":{"sn":":bee:","cp":"1f41d","sns":[],"c":"nature"},":beetle:":{"sn":":beetle:","cp":"1f41e","sns":[],"c":"nature"},":bird:":{"sn":":bird:","cp":"1f426","sns":[],"c":"nature"},":blossom:":{"sn":":blossom:","cp":"1f33c","sns":[],"c":"nature"},":blowfish:":{"sn":":blowfish:","cp":"1f421","sns":[],"c":"nature"},":boar:":{"sn":":boar:","cp":"1f417","sns":[],"c":"nature"},":boom:":{"sn":":boom:","cp":"1f4a5","sns":[],"c":"nature"},":bouquet:":{"sn":":bouquet:","cp":"1f490","sns":[],"c":"nature"},":bug:":{"sn":":bug:","cp":"1f41b","sns":[],"c":"nature"},":butterfly:":{"sn":":butterfly:","cp":"1f98b","sns":[],"c":"nature"},":cactus:":{"sn":":cactus:","cp":"1f335","sns":[],"c":"nature"},":camel:":{"sn":":camel:","cp":"1f42b","sns":[],"c":"nature"},":cat2:":{"sn":":cat2:","cp":"1f408","sns":[],"c":"nature"},":cat:":{"sn":":cat:","cp":"1f431","sns":[],"c":"nature"},":cherry_blossom:":{"sn":":cherry_blossom:","cp":"1f338","sns":[],"c":"nature"},":chicken:":{"sn":":chicken:","cp":"1f414","sns":[],"c":"nature"},":chipmunk:":{"sn":":chipmunk:","cp":"1f43f","sns":[],"c":"nature"},":christmas_tree:":{"sn":":christmas_tree:","cp":"1f384","sns":[],"c":"nature"},":cloud:":{"sn":":cloud:","cp":"2601","sns":[],"c":"nature"},":cloud_lightning:":{"sn":":cloud_lightning:","cp":"1f329","sns":[":cloud_with_lightning:"],"c":"nature"},":cloud_rain:":{"sn":":cloud_rain:","cp":"1f327","sns":[":cloud_with_rain:"],"c":"nature"},":cloud_snow:":{"sn":":cloud_snow:","cp":"1f328","sns":[":cloud_with_snow:"],"c":"nature"},":cloud_tornado:":{"sn":":cloud_tornado:","cp":"1f32a","sns":[":cloud_with_tornado:"],"c":"nature"},":comet:":{"sn":":comet:","cp":"2604","sns":[],"c":"nature"},":cow2:":{"sn":":cow2:","cp":"1f404","sns":[],"c":"nature"},":cow:":{"sn":":cow:","cp":"1f42e","sns":[],"c":"nature"},":crab:":{"sn":":crab:","cp":"1f980","sns":[],"c":"nature"},":crescent_moon:":{"sn":":crescent_moon:","cp":"1f319","sns":[],"c":"nature"},":cricket:":{"sn":":cricket:","cp":"1f997","sns":[],"c":"nature"},":crocodile:":{"sn":":crocodile:","cp":"1f40a","sns":[],"c":"nature"},":dash:":{"sn":":dash:","cp":"1f4a8","sns":[],"c":"nature"},":deciduous_tree:":{"sn":":deciduous_tree:","cp":"1f333","sns":[],"c":"nature"},":deer:":{"sn":":deer:","cp":"1f98c","sns":[],"c":"nature"},":dizzy:":{"sn":":dizzy:","cp":"1f4ab","sns":[],"c":"nature"},":dog2:":{"sn":":dog2:","cp":"1f415","sns":[],"c":"nature"},":dog:":{"sn":":dog:","cp":"1f436","sns":[],"c":"nature"},":dolphin:":{"sn":":dolphin:","cp":"1f42c","sns":[],"c":"nature"},":dove:":{"sn":":dove:","cp":"1f54a","sns":[":dove_of_peace:"],"c":"nature"},":dragon:":{"sn":":dragon:","cp":"1f409","sns":[],"c":"nature"},":dragon_face:":{"sn":":dragon_face:","cp":"1f432","sns":[],"c":"nature"},":dromedary_camel:":{"sn":":dromedary_camel:","cp":"1f42a","sns":[],"c":"nature"},":droplet:":{"sn":":droplet:","cp":"1f4a7","sns":[],"c":"nature"},":duck:":{"sn":":duck:","cp":"1f986","sns":[],"c":"nature"},":eagle:":{"sn":":eagle:","cp":"1f985","sns":[],"c":"nature"},":ear_of_rice:":{"sn":":ear_of_rice:","cp":"1f33e","sns":[],"c":"nature"},":earth_africa:":{"sn":":earth_africa:","cp":"1f30d","sns":[],"c":"nature"},":earth_americas:":{"sn":":earth_americas:","cp":"1f30e","sns":[],"c":"nature"},":earth_asia:":{"sn":":earth_asia:","cp":"1f30f","sns":[],"c":"nature"},":elephant:":{"sn":":elephant:","cp":"1f418","sns":[],"c":"nature"},":evergreen_tree:":{"sn":":evergreen_tree:","cp":"1f332","sns":[],"c":"nature"},":fallen_leaf:":{"sn":":fallen_leaf:","cp":"1f342","sns":[],"c":"nature"},":feet:":{"sn":":feet:","cp":"1f43e","sns":[":paw_prints:"],"c":"nature"},":fire:":{"sn":":fire:","cp":"1f525","sns":[":flame:"],"c":"nature"},":first_quarter_moon:":{"sn":":first_quarter_moon:","cp":"1f313","sns":[],"c":"nature"},":first_quarter_moon_with_face:":{"sn":":first_quarter_moon_with_face:","cp":"1f31b","sns":[],"c":"nature"},":fish:":{"sn":":fish:","cp":"1f41f","sns":[],"c":"nature"},":fog:":{"sn":":fog:","cp":"1f32b","sns":[],"c":"nature"},":four_leaf_clover:":{"sn":":four_leaf_clover:","cp":"1f340","sns":[],"c":"nature"},":fox:":{"sn":":fox:","cp":"1f98a","sns":[":fox_face:"],"c":"nature"},":frog:":{"sn":":frog:","cp":"1f438","sns":[],"c":"nature"},":full_moon:":{"sn":":full_moon:","cp":"1f315","sns":[],"c":"nature"},":full_moon_with_face:":{"sn":":full_moon_with_face:","cp":"1f31d","sns":[],"c":"nature"},":giraffe:":{"sn":":giraffe:","cp":"1f992","sns":[],"c":"nature"},":goat:":{"sn":":goat:","cp":"1f410","sns":[],"c":"nature"},":gorilla:":{"sn":":gorilla:","cp":"1f98d","sns":[],"c":"nature"},":hamster:":{"sn":":hamster:","cp":"1f439","sns":[],"c":"nature"},":hatched_chick:":{"sn":":hatched_chick:","cp":"1f425","sns":[],"c":"nature"},":hatching_chick:":{"sn":":hatching_chick:","cp":"1f423","sns":[],"c":"nature"},":hear_no_evil:":{"sn":":hear_no_evil:","cp":"1f649","sns":[],"c":"nature"},":hedgehog:":{"sn":":hedgehog:","cp":"1f994","sns":[],"c":"nature"},":herb:":{"sn":":herb:","cp":"1f33f","sns":[],"c":"nature"},":hibiscus:":{"sn":":hibiscus:","cp":"1f33a","sns":[],"c":"nature"},":horse:":{"sn":":horse:","cp":"1f434","sns":[],"c":"nature"},":koala:":{"sn":":koala:","cp":"1f428","sns":[],"c":"nature"},":last_quarter_moon:":{"sn":":last_quarter_moon:","cp":"1f317","sns":[],"c":"nature"},":last_quarter_moon_with_face:":{"sn":":last_quarter_moon_with_face:","cp":"1f31c","sns":[],"c":"nature"},":leaves:":{"sn":":leaves:","cp":"1f343","sns":[],"c":"nature"},":leopard:":{"sn":":leopard:","cp":"1f406","sns":[],"c":"nature"},":lion_face:":{"sn":":lion_face:","cp":"1f981","sns":[":lion:"],"c":"nature"},":lizard:":{"sn":":lizard:","cp":"1f98e","sns":[],"c":"nature"},":maple_leaf:":{"sn":":maple_leaf:","cp":"1f341","sns":[],"c":"nature"},":monkey:":{"sn":":monkey:","cp":"1f412","sns":[],"c":"nature"},":monkey_face:":{"sn":":monkey_face:","cp":"1f435","sns":[],"c":"nature"},":mouse2:":{"sn":":mouse2:","cp":"1f401","sns":[],"c":"nature"},":mouse:":{"sn":":mouse:","cp":"1f42d","sns":[],"c":"nature"},":mushroom:":{"sn":":mushroom:","cp":"1f344","sns":[],"c":"nature"},":new_moon:":{"sn":":new_moon:","cp":"1f311","sns":[],"c":"nature"},":new_moon_with_face:":{"sn":":new_moon_with_face:","cp":"1f31a","sns":[],"c":"nature"},":ocean:":{"sn":":ocean:","cp":"1f30a","sns":[],"c":"nature"},":octopus:":{"sn":":octopus:","cp":"1f419","sns":[],"c":"nature"},":owl:":{"sn":":owl:","cp":"1f989","sns":[],"c":"nature"},":ox:":{"sn":":ox:","cp":"1f402","sns":[],"c":"nature"},":palm_tree:":{"sn":":palm_tree:","cp":"1f334","sns":[],"c":"nature"},":panda_face:":{"sn":":panda_face:","cp":"1f43c","sns":[],"c":"nature"},":partly_sunny:":{"sn":":partly_sunny:","cp":"26c5","sns":[],"c":"nature"},":penguin:":{"sn":":penguin:","cp":"1f427","sns":[],"c":"nature"},":pig2:":{"sn":":pig2:","cp":"1f416","sns":[],"c":"nature"},":pig:":{"sn":":pig:","cp":"1f437","sns":[],"c":"nature"},":pig_nose:":{"sn":":pig_nose:","cp":"1f43d","sns":[],"c":"nature"},":poodle:":{"sn":":poodle:","cp":"1f429","sns":[],"c":"nature"},":rabbit2:":{"sn":":rabbit2:","cp":"1f407","sns":[],"c":"nature"},":rabbit:":{"sn":":rabbit:","cp":"1f430","sns":[],"c":"nature"},":racehorse:":{"sn":":racehorse:","cp":"1f40e","sns":[],"c":"nature"},":rainbow:":{"sn":":rainbow:","cp":"1f308","sns":[],"c":"nature"},":ram:":{"sn":":ram:","cp":"1f40f","sns":[],"c":"nature"},":rat:":{"sn":":rat:","cp":"1f400","sns":[],"c":"nature"},":rhino:":{"sn":":rhino:","cp":"1f98f","sns":[":rhinoceros:"],"c":"nature"},":rooster:":{"sn":":rooster:","cp":"1f413","sns":[],"c":"nature"},":rose:":{"sn":":rose:","cp":"1f339","sns":[],"c":"nature"},":sauropod:":{"sn":":sauropod:","cp":"1f995","sns":[],"c":"nature"},":scorpion:":{"sn":":scorpion:","cp":"1f982","sns":[],"c":"nature"},":see_no_evil:":{"sn":":see_no_evil:","cp":"1f648","sns":[],"c":"nature"},":seedling:":{"sn":":seedling:","cp":"1f331","sns":[],"c":"nature"},":shamrock:":{"sn":":shamrock:","cp":"2618","sns":[],"c":"nature"},":shark:":{"sn":":shark:","cp":"1f988","sns":[],"c":"nature"},":sheep:":{"sn":":sheep:","cp":"1f411","sns":[],"c":"nature"},":shell:":{"sn":":shell:","cp":"1f41a","sns":[],"c":"nature"},":shrimp:":{"sn":":shrimp:","cp":"1f990","sns":[],"c":"nature"},":snail:":{"sn":":snail:","cp":"1f40c","sns":[],"c":"nature"},":snake:":{"sn":":snake:","cp":"1f40d","sns":[],"c":"nature"},":snowflake:":{"sn":":snowflake:","cp":"2744","sns":[],"c":"nature"},":snowman2:":{"sn":":snowman2:","cp":"2603","sns":[],"c":"nature"},":snowman:":{"sn":":snowman:","cp":"26c4","sns":[],"c":"nature"},":sparkles:":{"sn":":sparkles:","cp":"2728","sns":[],"c":"nature"},":speak_no_evil:":{"sn":":speak_no_evil:","cp":"1f64a","sns":[],"c":"nature"},":spider:":{"sn":":spider:","cp":"1f577","sns":[],"c":"nature"},":spider_web:":{"sn":":spider_web:","cp":"1f578","sns":[],"c":"nature"},":squid:":{"sn":":squid:","cp":"1f991","sns":[],"c":"nature"},":star2:":{"sn":":star2:","cp":"1f31f","sns":[],"c":"nature"},":star:":{"sn":":star:","cp":"2b50","sns":[],"c":"nature"},":sun_with_face:":{"sn":":sun_with_face:","cp":"1f31e","sns":[],"c":"nature"},":sunflower:":{"sn":":sunflower:","cp":"1f33b","sns":[],"c":"nature"},":sunny:":{"sn":":sunny:","cp":"2600","sns":[],"c":"nature"},":sweat_drops:":{"sn":":sweat_drops:","cp":"1f4a6","sns":[],"c":"nature"},":t_rex:":{"sn":":t_rex:","cp":"1f996","sns":[],"c":"nature"},":tanabata_tree:":{"sn":":tanabata_tree:","cp":"1f38b","sns":[],"c":"nature"},":thunder_cloud_rain:":{"sn":":thunder_cloud_rain:","cp":"26c8","sns":[":thunder_cloud_and_rain:"],"c":"nature"},":tiger2:":{"sn":":tiger2:","cp":"1f405","sns":[],"c":"nature"},":tiger:":{"sn":":tiger:","cp":"1f42f","sns":[],"c":"nature"},":tropical_fish:":{"sn":":tropical_fish:","cp":"1f420","sns":[],"c":"nature"},":tulip:":{"sn":":tulip:","cp":"1f337","sns":[],"c":"nature"},":turkey:":{"sn":":turkey:","cp":"1f983","sns":[],"c":"nature"},":turtle:":{"sn":":turtle:","cp":"1f422","sns":[],"c":"nature"},":umbrella2:":{"sn":":umbrella2:","cp":"2602","sns":[],"c":"nature"},":umbrella:":{"sn":":umbrella:","cp":"2614","sns":[],"c":"nature"},":unicorn:":{"sn":":unicorn:","cp":"1f984","sns":[":unicorn_face:"],"c":"nature"},":waning_crescent_moon:":{"sn":":waning_crescent_moon:","cp":"1f318","sns":[],"c":"nature"},":waning_gibbous_moon:":{"sn":":waning_gibbous_moon:","cp":"1f316","sns":[],"c":"nature"},":water_buffalo:":{"sn":":water_buffalo:","cp":"1f403","sns":[],"c":"nature"},":waxing_crescent_moon:":{"sn":":waxing_crescent_moon:","cp":"1f312","sns":[],"c":"nature"},":waxing_gibbous_moon:":{"sn":":waxing_gibbous_moon:","cp":"1f314","sns":[],"c":"nature"},":whale2:":{"sn":":whale2:","cp":"1f40b","sns":[],"c":"nature"},":whale:":{"sn":":whale:","cp":"1f433","sns":[],"c":"nature"},":white_sun_cloud:":{"sn":":white_sun_cloud:","cp":"1f325","sns":[":white_sun_behind_cloud:"],"c":"nature"},":white_sun_rain_cloud:":{"sn":":white_sun_rain_cloud:","cp":"1f326","sns":[":white_sun_behind_cloud_with_rain:"],"c":"nature"},":white_sun_small_cloud:":{"sn":":white_sun_small_cloud:","cp":"1f324","sns":[":white_sun_with_small_cloud:"],"c":"nature"},":wilted_rose:":{"sn":":wilted_rose:","cp":"1f940","sns":[":wilted_flower:"],"c":"nature"},":wind_blowing_face:":{"sn":":wind_blowing_face:","cp":"1f32c","sns":[],"c":"nature"},":wolf:":{"sn":":wolf:","cp":"1f43a","sns":[],"c":"nature"},":zap:":{"sn":":zap:","cp":"26a1","sns":[],"c":"nature"},":zebra:":{"sn":":zebra:","cp":"1f993","sns":[],"c":"nature"}},"food":{":apple:":{"sn":":apple:","cp":"1f34e","sns":[],"c":"food"},":avocado:":{"sn":":avocado:","cp":"1f951","sns":[],"c":"food"},":baby_bottle:":{"sn":":baby_bottle:","cp":"1f37c","sns":[],"c":"food"},":bacon:":{"sn":":bacon:","cp":"1f953","sns":[],"c":"food"},":banana:":{"sn":":banana:","cp":"1f34c","sns":[],"c":"food"},":beer:":{"sn":":beer:","cp":"1f37a","sns":[],"c":"food"},":beers:":{"sn":":beers:","cp":"1f37b","sns":[],"c":"food"},":bento:":{"sn":":bento:","cp":"1f371","sns":[],"c":"food"},":birthday:":{"sn":":birthday:","cp":"1f382","sns":[],"c":"food"},":bowl_with_spoon:":{"sn":":bowl_with_spoon:","cp":"1f963","sns":[],"c":"food"},":bread:":{"sn":":bread:","cp":"1f35e","sns":[],"c":"food"},":broccoli:":{"sn":":broccoli:","cp":"1f966","sns":[],"c":"food"},":burrito:":{"sn":":burrito:","cp":"1f32f","sns":[],"c":"food"},":cake:":{"sn":":cake:","cp":"1f370","sns":[],"c":"food"},":candy:":{"sn":":candy:","cp":"1f36c","sns":[],"c":"food"},":canned_food:":{"sn":":canned_food:","cp":"1f96b","sns":[],"c":"food"},":carrot:":{"sn":":carrot:","cp":"1f955","sns":[],"c":"food"},":champagne:":{"sn":":champagne:","cp":"1f37e","sns":[":bottle_with_popping_cork:"],"c":"food"},":champagne_glass:":{"sn":":champagne_glass:","cp":"1f942","sns":[":clinking_glass:"],"c":"food"},":cheese:":{"sn":":cheese:","cp":"1f9c0","sns":[":cheese_wedge:"],"c":"food"},":cherries:":{"sn":":cherries:","cp":"1f352","sns":[],"c":"food"},":chestnut:":{"sn":":chestnut:","cp":"1f330","sns":[],"c":"food"},":chocolate_bar:":{"sn":":chocolate_bar:","cp":"1f36b","sns":[],"c":"food"},":chopsticks:":{"sn":":chopsticks:","cp":"1f962","sns":[],"c":"food"},":cocktail:":{"sn":":cocktail:","cp":"1f378","sns":[],"c":"food"},":coconut:":{"sn":":coconut:","cp":"1f965","sns":[],"c":"food"},":coffee:":{"sn":":coffee:","cp":"2615","sns":[],"c":"food"},":cookie:":{"sn":":cookie:","cp":"1f36a","sns":[],"c":"food"},":cooking:":{"sn":":cooking:","cp":"1f373","sns":[],"c":"food"},":corn:":{"sn":":corn:","cp":"1f33d","sns":[],"c":"food"},":croissant:":{"sn":":croissant:","cp":"1f950","sns":[],"c":"food"},":cucumber:":{"sn":":cucumber:","cp":"1f952","sns":[],"c":"food"},":cup_with_straw:":{"sn":":cup_with_straw:","cp":"1f964","sns":[],"c":"food"},":curry:":{"sn":":curry:","cp":"1f35b","sns":[],"c":"food"},":custard:":{"sn":":custard:","cp":"1f36e","sns":[":pudding:",":flan:"],"c":"food"},":cut_of_meat:":{"sn":":cut_of_meat:","cp":"1f969","sns":[],"c":"food"},":dango:":{"sn":":dango:","cp":"1f361","sns":[],"c":"food"},":doughnut:":{"sn":":doughnut:","cp":"1f369","sns":[],"c":"food"},":dumpling:":{"sn":":dumpling:","cp":"1f95f","sns":[],"c":"food"},":egg:":{"sn":":egg:","cp":"1f95a","sns":[],"c":"food"},":eggplant:":{"sn":":eggplant:","cp":"1f346","sns":[],"c":"food"},":fish_cake:":{"sn":":fish_cake:","cp":"1f365","sns":[],"c":"food"},":fork_and_knife:":{"sn":":fork_and_knife:","cp":"1f374","sns":[],"c":"food"},":fork_knife_plate:":{"sn":":fork_knife_plate:","cp":"1f37d","sns":[":fork_and_knife_with_plate:"],"c":"food"},":fortune_cookie:":{"sn":":fortune_cookie:","cp":"1f960","sns":[],"c":"food"},":french_bread:":{"sn":":french_bread:","cp":"1f956","sns":[":baguette_bread:"],"c":"food"},":fried_shrimp:":{"sn":":fried_shrimp:","cp":"1f364","sns":[],"c":"food"},":fries:":{"sn":":fries:","cp":"1f35f","sns":[],"c":"food"},":grapes:":{"sn":":grapes:","cp":"1f347","sns":[],"c":"food"},":green_apple:":{"sn":":green_apple:","cp":"1f34f","sns":[],"c":"food"},":hamburger:":{"sn":":hamburger:","cp":"1f354","sns":[],"c":"food"},":honey_pot:":{"sn":":honey_pot:","cp":"1f36f","sns":[],"c":"food"},":hot_pepper:":{"sn":":hot_pepper:","cp":"1f336","sns":[],"c":"food"},":hotdog:":{"sn":":hotdog:","cp":"1f32d","sns":[":hot_dog:"],"c":"food"},":ice_cream:":{"sn":":ice_cream:","cp":"1f368","sns":[],"c":"food"},":icecream:":{"sn":":icecream:","cp":"1f366","sns":[],"c":"food"},":kiwi:":{"sn":":kiwi:","cp":"1f95d","sns":[":kiwifruit:"],"c":"food"},":lemon:":{"sn":":lemon:","cp":"1f34b","sns":[],"c":"food"},":lollipop:":{"sn":":lollipop:","cp":"1f36d","sns":[],"c":"food"},":meat_on_bone:":{"sn":":meat_on_bone:","cp":"1f356","sns":[],"c":"food"},":melon:":{"sn":":melon:","cp":"1f348","sns":[],"c":"food"},":milk:":{"sn":":milk:","cp":"1f95b","sns":[":glass_of_milk:"],"c":"food"},":oden:":{"sn":":oden:","cp":"1f362","sns":[],"c":"food"},":pancakes:":{"sn":":pancakes:","cp":"1f95e","sns":[],"c":"food"},":peach:":{"sn":":peach:","cp":"1f351","sns":[],"c":"food"},":peanuts:":{"sn":":peanuts:","cp":"1f95c","sns":[":shelled_peanut:"],"c":"food"},":pear:":{"sn":":pear:","cp":"1f350","sns":[],"c":"food"},":pie:":{"sn":":pie:","cp":"1f967","sns":[],"c":"food"},":pineapple:":{"sn":":pineapple:","cp":"1f34d","sns":[],"c":"food"},":pizza:":{"sn":":pizza:","cp":"1f355","sns":[],"c":"food"},":popcorn:":{"sn":":popcorn:","cp":"1f37f","sns":[],"c":"food"},":potato:":{"sn":":potato:","cp":"1f954","sns":[],"c":"food"},":poultry_leg:":{"sn":":poultry_leg:","cp":"1f357","sns":[],"c":"food"},":pretzel:":{"sn":":pretzel:","cp":"1f968","sns":[],"c":"food"},":ramen:":{"sn":":ramen:","cp":"1f35c","sns":[],"c":"food"},":rice:":{"sn":":rice:","cp":"1f35a","sns":[],"c":"food"},":rice_ball:":{"sn":":rice_ball:","cp":"1f359","sns":[],"c":"food"},":rice_cracker:":{"sn":":rice_cracker:","cp":"1f358","sns":[],"c":"food"},":sake:":{"sn":":sake:","cp":"1f376","sns":[],"c":"food"},":salad:":{"sn":":salad:","cp":"1f957","sns":[":green_salad:"],"c":"food"},":sandwich:":{"sn":":sandwich:","cp":"1f96a","sns":[],"c":"food"},":shallow_pan_of_food:":{"sn":":shallow_pan_of_food:","cp":"1f958","sns":[":paella:"],"c":"food"},":shaved_ice:":{"sn":":shaved_ice:","cp":"1f367","sns":[],"c":"food"},":spaghetti:":{"sn":":spaghetti:","cp":"1f35d","sns":[],"c":"food"},":spoon:":{"sn":":spoon:","cp":"1f944","sns":[],"c":"food"},":stew:":{"sn":":stew:","cp":"1f372","sns":[],"c":"food"},":strawberry:":{"sn":":strawberry:","cp":"1f353","sns":[],"c":"food"},":stuffed_flatbread:":{"sn":":stuffed_flatbread:","cp":"1f959","sns":[":stuffed_pita:"],"c":"food"},":sushi:":{"sn":":sushi:","cp":"1f363","sns":[],"c":"food"},":sweet_potato:":{"sn":":sweet_potato:","cp":"1f360","sns":[],"c":"food"},":taco:":{"sn":":taco:","cp":"1f32e","sns":[],"c":"food"},":takeout_box:":{"sn":":takeout_box:","cp":"1f961","sns":[],"c":"food"},":tangerine:":{"sn":":tangerine:","cp":"1f34a","sns":[],"c":"food"},":tea:":{"sn":":tea:","cp":"1f375","sns":[],"c":"food"},":tomato:":{"sn":":tomato:","cp":"1f345","sns":[],"c":"food"},":tropical_drink:":{"sn":":tropical_drink:","cp":"1f379","sns":[],"c":"food"},":tumbler_glass:":{"sn":":tumbler_glass:","cp":"1f943","sns":[":whisky:"],"c":"food"},":watermelon:":{"sn":":watermelon:","cp":"1f349","sns":[],"c":"food"},":wine_glass:":{"sn":":wine_glass:","cp":"1f377","sns":[],"c":"food"}},"symbols":{":100:":{"sn":":100:","cp":"1f4af","sns":[],"c":"symbols"},":1234:":{"sn":":1234:","cp":"1f522","sns":[],"c":"symbols"},":a:":{"sn":":a:","cp":"1f170","sns":[],"c":"symbols"},":ab:":{"sn":":ab:","cp":"1f18e","sns":[],"c":"symbols"},":abc:":{"sn":":abc:","cp":"1f524","sns":[],"c":"symbols"},":abcd:":{"sn":":abcd:","cp":"1f521","sns":[],"c":"symbols"},":accept:":{"sn":":accept:","cp":"1f251","sns":[],"c":"symbols"},":anger:":{"sn":":anger:","cp":"1f4a2","sns":[],"c":"symbols"},":anger_right:":{"sn":":anger_right:","cp":"1f5ef","sns":[":right_anger_bubble:"],"c":"symbols"},":aquarius:":{"sn":":aquarius:","cp":"2652","sns":[],"c":"symbols"},":aries:":{"sn":":aries:","cp":"2648","sns":[],"c":"symbols"},":arrow_backward:":{"sn":":arrow_backward:","cp":"25c0","sns":[],"c":"symbols"},":arrow_double_down:":{"sn":":arrow_double_down:","cp":"23ec","sns":[],"c":"symbols"},":arrow_double_up:":{"sn":":arrow_double_up:","cp":"23eb","sns":[],"c":"symbols"},":arrow_down:":{"sn":":arrow_down:","cp":"2b07","sns":[],"c":"symbols"},":arrow_down_small:":{"sn":":arrow_down_small:","cp":"1f53d","sns":[],"c":"symbols"},":arrow_forward:":{"sn":":arrow_forward:","cp":"25b6","sns":[],"c":"symbols"},":arrow_heading_down:":{"sn":":arrow_heading_down:","cp":"2935","sns":[],"c":"symbols"},":arrow_heading_up:":{"sn":":arrow_heading_up:","cp":"2934","sns":[],"c":"symbols"},":arrow_left:":{"sn":":arrow_left:","cp":"2b05","sns":[],"c":"symbols"},":arrow_lower_left:":{"sn":":arrow_lower_left:","cp":"2199","sns":[],"c":"symbols"},":arrow_lower_right:":{"sn":":arrow_lower_right:","cp":"2198","sns":[],"c":"symbols"},":arrow_right:":{"sn":":arrow_right:","cp":"27a1","sns":[],"c":"symbols"},":arrow_right_hook:":{"sn":":arrow_right_hook:","cp":"21aa","sns":[],"c":"symbols"},":arrow_up:":{"sn":":arrow_up:","cp":"2b06","sns":[],"c":"symbols"},":arrow_up_down:":{"sn":":arrow_up_down:","cp":"2195","sns":[],"c":"symbols"},":arrow_up_small:":{"sn":":arrow_up_small:","cp":"1f53c","sns":[],"c":"symbols"},":arrow_upper_left:":{"sn":":arrow_upper_left:","cp":"2196","sns":[],"c":"symbols"},":arrow_upper_right:":{"sn":":arrow_upper_right:","cp":"2197","sns":[],"c":"symbols"},":arrows_clockwise:":{"sn":":arrows_clockwise:","cp":"1f503","sns":[],"c":"symbols"},":arrows_counterclockwise:":{"sn":":arrows_counterclockwise:","cp":"1f504","sns":[],"c":"symbols"},":asterisk:":{"sn":":asterisk:","cp":"2a-fe0f-20e3","sns":[":keycap_asterisk:"],"c":"symbols"},":atm:":{"sn":":atm:","cp":"1f3e7","sns":[],"c":"symbols"},":atom:":{"sn":":atom:","cp":"269b","sns":[":atom_symbol:"],"c":"symbols"},":b:":{"sn":":b:","cp":"1f171","sns":[],"c":"symbols"},":baby_symbol:":{"sn":":baby_symbol:","cp":"1f6bc","sns":[],"c":"symbols"},":back:":{"sn":":back:","cp":"1f519","sns":[],"c":"symbols"},":baggage_claim:":{"sn":":baggage_claim:","cp":"1f6c4","sns":[],"c":"symbols"},":ballot_box_with_check:":{"sn":":ballot_box_with_check:","cp":"2611","sns":[],"c":"symbols"},":bangbang:":{"sn":":bangbang:","cp":"203c","sns":[],"c":"symbols"},":beginner:":{"sn":":beginner:","cp":"1f530","sns":[],"c":"symbols"},":bell:":{"sn":":bell:","cp":"1f514","sns":[],"c":"symbols"},":biohazard:":{"sn":":biohazard:","cp":"2623","sns":[":biohazard_sign:"],"c":"symbols"},":black_circle:":{"sn":":black_circle:","cp":"26ab","sns":[],"c":"symbols"},":black_heart:":{"sn":":black_heart:","cp":"1f5a4","sns":[],"c":"symbols"},":black_joker:":{"sn":":black_joker:","cp":"1f0cf","sns":[],"c":"symbols"},":black_large_square:":{"sn":":black_large_square:","cp":"2b1b","sns":[],"c":"symbols"},":black_medium_small_square:":{"sn":":black_medium_small_square:","cp":"25fe","sns":[],"c":"symbols"},":black_medium_square:":{"sn":":black_medium_square:","cp":"25fc","sns":[],"c":"symbols"},":black_small_square:":{"sn":":black_small_square:","cp":"25aa","sns":[],"c":"symbols"},":black_square_button:":{"sn":":black_square_button:","cp":"1f532","sns":[],"c":"symbols"},":blue_circle:":{"sn":":blue_circle:","cp":"1f535","sns":[],"c":"symbols"},":blue_heart:":{"sn":":blue_heart:","cp":"1f499","sns":[],"c":"symbols"},":broken_heart:":{"sn":":broken_heart:","cp":"1f494","sns":[],"c":"symbols"},":cancer:":{"sn":":cancer:","cp":"264b","sns":[],"c":"symbols"},":capital_abcd:":{"sn":":capital_abcd:","cp":"1f520","sns":[],"c":"symbols"},":capricorn:":{"sn":":capricorn:","cp":"2651","sns":[],"c":"symbols"},":chart:":{"sn":":chart:","cp":"1f4b9","sns":[],"c":"symbols"},":children_crossing:":{"sn":":children_crossing:","cp":"1f6b8","sns":[],"c":"symbols"},":cinema:":{"sn":":cinema:","cp":"1f3a6","sns":[],"c":"symbols"},":cl:":{"sn":":cl:","cp":"1f191","sns":[],"c":"symbols"},":clock1030:":{"sn":":clock1030:","cp":"1f565","sns":[],"c":"symbols"},":clock10:":{"sn":":clock10:","cp":"1f559","sns":[],"c":"symbols"},":clock1130:":{"sn":":clock1130:","cp":"1f566","sns":[],"c":"symbols"},":clock11:":{"sn":":clock11:","cp":"1f55a","sns":[],"c":"symbols"},":clock1230:":{"sn":":clock1230:","cp":"1f567","sns":[],"c":"symbols"},":clock12:":{"sn":":clock12:","cp":"1f55b","sns":[],"c":"symbols"},":clock130:":{"sn":":clock130:","cp":"1f55c","sns":[],"c":"symbols"},":clock1:":{"sn":":clock1:","cp":"1f550","sns":[],"c":"symbols"},":clock230:":{"sn":":clock230:","cp":"1f55d","sns":[],"c":"symbols"},":clock2:":{"sn":":clock2:","cp":"1f551","sns":[],"c":"symbols"},":clock330:":{"sn":":clock330:","cp":"1f55e","sns":[],"c":"symbols"},":clock3:":{"sn":":clock3:","cp":"1f552","sns":[],"c":"symbols"},":clock430:":{"sn":":clock430:","cp":"1f55f","sns":[],"c":"symbols"},":clock4:":{"sn":":clock4:","cp":"1f553","sns":[],"c":"symbols"},":clock530:":{"sn":":clock530:","cp":"1f560","sns":[],"c":"symbols"},":clock5:":{"sn":":clock5:","cp":"1f554","sns":[],"c":"symbols"},":clock630:":{"sn":":clock630:","cp":"1f561","sns":[],"c":"symbols"},":clock6:":{"sn":":clock6:","cp":"1f555","sns":[],"c":"symbols"},":clock730:":{"sn":":clock730:","cp":"1f562","sns":[],"c":"symbols"},":clock7:":{"sn":":clock7:","cp":"1f556","sns":[],"c":"symbols"},":clock830:":{"sn":":clock830:","cp":"1f563","sns":[],"c":"symbols"},":clock8:":{"sn":":clock8:","cp":"1f557","sns":[],"c":"symbols"},":clock930:":{"sn":":clock930:","cp":"1f564","sns":[],"c":"symbols"},":clock9:":{"sn":":clock9:","cp":"1f558","sns":[],"c":"symbols"},":clubs:":{"sn":":clubs:","cp":"2663","sns":[],"c":"symbols"},":congratulations:":{"sn":":congratulations:","cp":"3297","sns":[],"c":"symbols"},":cool:":{"sn":":cool:","cp":"1f192","sns":[],"c":"symbols"},":copyright:":{"sn":":copyright:","cp":"a9","sns":[],"c":"symbols"},":cross:":{"sn":":cross:","cp":"271d","sns":[":latin_cross:"],"c":"symbols"},":cupid:":{"sn":":cupid:","cp":"1f498","sns":[],"c":"symbols"},":curly_loop:":{"sn":":curly_loop:","cp":"27b0","sns":[],"c":"symbols"},":currency_exchange:":{"sn":":currency_exchange:","cp":"1f4b1","sns":[],"c":"symbols"},":customs:":{"sn":":customs:","cp":"1f6c3","sns":[],"c":"symbols"},":cyclone:":{"sn":":cyclone:","cp":"1f300","sns":[],"c":"symbols"},":diamond_shape_with_a_dot_inside:":{"sn":":diamond_shape_with_a_dot_inside:","cp":"1f4a0","sns":[],"c":"symbols"},":diamonds:":{"sn":":diamonds:","cp":"2666","sns":[],"c":"symbols"},":do_not_litter:":{"sn":":do_not_litter:","cp":"1f6af","sns":[],"c":"symbols"},":eight:":{"sn":":eight:","cp":"38-fe0f-20e3","sns":[],"c":"symbols"},":eight_pointed_black_star:":{"sn":":eight_pointed_black_star:","cp":"2734","sns":[],"c":"symbols"},":eight_spoked_asterisk:":{"sn":":eight_spoked_asterisk:","cp":"2733","sns":[],"c":"symbols"},":eject:":{"sn":":eject:","cp":"23cf","sns":[":eject_symbol:"],"c":"symbols"},":end:":{"sn":":end:","cp":"1f51a","sns":[],"c":"symbols"},":exclamation:":{"sn":":exclamation:","cp":"2757","sns":[],"c":"symbols"},":eye_in_speech_bubble:":{"sn":":eye_in_speech_bubble:","cp":"1f441-fe0f-200d-1f5e8-fe0f","sns":[],"c":"symbols"},":fast_forward:":{"sn":":fast_forward:","cp":"23e9","sns":[],"c":"symbols"},":female_sign:":{"sn":":female_sign:","cp":"2640","sns":[],"c":"symbols"},":five:":{"sn":":five:","cp":"35-fe0f-20e3","sns":[],"c":"symbols"},":fleur-de-lis:":{"sn":":fleur-de-lis:","cp":"269c","sns":[],"c":"symbols"},":flower_playing_cards:":{"sn":":flower_playing_cards:","cp":"1f3b4","sns":[],"c":"symbols"},":four:":{"sn":":four:","cp":"34-fe0f-20e3","sns":[],"c":"symbols"},":free:":{"sn":":free:","cp":"1f193","sns":[],"c":"symbols"},":gemini:":{"sn":":gemini:","cp":"264a","sns":[],"c":"symbols"},":gift_heart:":{"sn":":gift_heart:","cp":"1f49d","sns":[],"c":"symbols"},":globe_with_meridians:":{"sn":":globe_with_meridians:","cp":"1f310","sns":[],"c":"symbols"},":green_heart:":{"sn":":green_heart:","cp":"1f49a","sns":[],"c":"symbols"},":grey_exclamation:":{"sn":":grey_exclamation:","cp":"2755","sns":[],"c":"symbols"},":grey_question:":{"sn":":grey_question:","cp":"2754","sns":[],"c":"symbols"},":hash:":{"sn":":hash:","cp":"23-fe0f-20e3","sns":[],"c":"symbols"},":heart:":{"sn":":heart:","cp":"2764","sns":[],"c":"symbols"},":heart_decoration:":{"sn":":heart_decoration:","cp":"1f49f","sns":[],"c":"symbols"},":heart_exclamation:":{"sn":":heart_exclamation:","cp":"2763","sns":[":heavy_heart_exclamation_mark_ornament:"],"c":"symbols"},":heartbeat:":{"sn":":heartbeat:","cp":"1f493","sns":[],"c":"symbols"},":heartpulse:":{"sn":":heartpulse:","cp":"1f497","sns":[],"c":"symbols"},":hearts:":{"sn":":hearts:","cp":"2665","sns":[],"c":"symbols"},":heavy_check_mark:":{"sn":":heavy_check_mark:","cp":"2714","sns":[],"c":"symbols"},":heavy_division_sign:":{"sn":":heavy_division_sign:","cp":"2797","sns":[],"c":"symbols"},":heavy_dollar_sign:":{"sn":":heavy_dollar_sign:","cp":"1f4b2","sns":[],"c":"symbols"},":heavy_minus_sign:":{"sn":":heavy_minus_sign:","cp":"2796","sns":[],"c":"symbols"},":heavy_multiplication_x:":{"sn":":heavy_multiplication_x:","cp":"2716","sns":[],"c":"symbols"},":heavy_plus_sign:":{"sn":":heavy_plus_sign:","cp":"2795","sns":[],"c":"symbols"},":high_brightness:":{"sn":":high_brightness:","cp":"1f506","sns":[],"c":"symbols"},":hotsprings:":{"sn":":hotsprings:","cp":"2668","sns":[],"c":"symbols"},":id:":{"sn":":id:","cp":"1f194","sns":[],"c":"symbols"},":ideograph_advantage:":{"sn":":ideograph_advantage:","cp":"1f250","sns":[],"c":"symbols"},":information_source:":{"sn":":information_source:","cp":"2139","sns":[],"c":"symbols"},":interrobang:":{"sn":":interrobang:","cp":"2049","sns":[],"c":"symbols"},":keycap_ten:":{"sn":":keycap_ten:","cp":"1f51f","sns":[],"c":"symbols"},":koko:":{"sn":":koko:","cp":"1f201","sns":[],"c":"symbols"},":large_blue_diamond:":{"sn":":large_blue_diamond:","cp":"1f537","sns":[],"c":"symbols"},":large_orange_diamond:":{"sn":":large_orange_diamond:","cp":"1f536","sns":[],"c":"symbols"},":left_luggage:":{"sn":":left_luggage:","cp":"1f6c5","sns":[],"c":"symbols"},":left_right_arrow:":{"sn":":left_right_arrow:","cp":"2194","sns":[],"c":"symbols"},":leftwards_arrow_with_hook:":{"sn":":leftwards_arrow_with_hook:","cp":"21a9","sns":[],"c":"symbols"},":leo:":{"sn":":leo:","cp":"264c","sns":[],"c":"symbols"},":libra:":{"sn":":libra:","cp":"264e","sns":[],"c":"symbols"},":loop:":{"sn":":loop:","cp":"27bf","sns":[],"c":"symbols"},":loud_sound:":{"sn":":loud_sound:","cp":"1f50a","sns":[],"c":"symbols"},":loudspeaker:":{"sn":":loudspeaker:","cp":"1f4e2","sns":[],"c":"symbols"},":low_brightness:":{"sn":":low_brightness:","cp":"1f505","sns":[],"c":"symbols"},":m:":{"sn":":m:","cp":"24c2","sns":[],"c":"symbols"},":mahjong:":{"sn":":mahjong:","cp":"1f004","sns":[],"c":"symbols"},":male_sign:":{"sn":":male_sign:","cp":"2642","sns":[],"c":"symbols"},":medical_symbol:":{"sn":":medical_symbol:","cp":"2695","sns":[],"c":"symbols"},":mega:":{"sn":":mega:","cp":"1f4e3","sns":[],"c":"symbols"},":menorah:":{"sn":":menorah:","cp":"1f54e","sns":[],"c":"symbols"},":mens:":{"sn":":mens:","cp":"1f6b9","sns":[],"c":"symbols"},":mobile_phone_off:":{"sn":":mobile_phone_off:","cp":"1f4f4","sns":[],"c":"symbols"},":musical_note:":{"sn":":musical_note:","cp":"1f3b5","sns":[],"c":"symbols"},":mute:":{"sn":":mute:","cp":"1f507","sns":[],"c":"symbols"},":name_badge:":{"sn":":name_badge:","cp":"1f4db","sns":[],"c":"symbols"},":negative_squared_cross_mark:":{"sn":":negative_squared_cross_mark:","cp":"274e","sns":[],"c":"symbols"},":new:":{"sn":":new:","cp":"1f195","sns":[],"c":"symbols"},":ng:":{"sn":":ng:","cp":"1f196","sns":[],"c":"symbols"},":nine:":{"sn":":nine:","cp":"39-fe0f-20e3","sns":[],"c":"symbols"},":no_bell:":{"sn":":no_bell:","cp":"1f515","sns":[],"c":"symbols"},":no_bicycles:":{"sn":":no_bicycles:","cp":"1f6b3","sns":[],"c":"symbols"},":no_entry:":{"sn":":no_entry:","cp":"26d4","sns":[],"c":"symbols"},":no_entry_sign:":{"sn":":no_entry_sign:","cp":"1f6ab","sns":[],"c":"symbols"},":no_mobile_phones:":{"sn":":no_mobile_phones:","cp":"1f4f5","sns":[],"c":"symbols"},":no_pedestrians:":{"sn":":no_pedestrians:","cp":"1f6b7","sns":[],"c":"symbols"},":no_smoking:":{"sn":":no_smoking:","cp":"1f6ad","sns":[],"c":"symbols"},":non-potable_water:":{"sn":":non-potable_water:","cp":"1f6b1","sns":[],"c":"symbols"},":notes:":{"sn":":notes:","cp":"1f3b6","sns":[],"c":"symbols"},":o2:":{"sn":":o2:","cp":"1f17e","sns":[],"c":"symbols"},":o:":{"sn":":o:","cp":"2b55","sns":[],"c":"symbols"},":octagonal_sign:":{"sn":":octagonal_sign:","cp":"1f6d1","sns":[":stop_sign:"],"c":"symbols"},":ok:":{"sn":":ok:","cp":"1f197","sns":[],"c":"symbols"},":om_symbol:":{"sn":":om_symbol:","cp":"1f549","sns":[],"c":"symbols"},":on:":{"sn":":on:","cp":"1f51b","sns":[],"c":"symbols"},":one:":{"sn":":one:","cp":"31-fe0f-20e3","sns":[],"c":"symbols"},":ophiuchus:":{"sn":":ophiuchus:","cp":"26ce","sns":[],"c":"symbols"},":orange_heart:":{"sn":":orange_heart:","cp":"1f9e1","sns":[],"c":"symbols"},":orthodox_cross:":{"sn":":orthodox_cross:","cp":"2626","sns":[],"c":"symbols"},":parking:":{"sn":":parking:","cp":"1f17f","sns":[],"c":"symbols"},":part_alternation_mark:":{"sn":":part_alternation_mark:","cp":"303d","sns":[],"c":"symbols"},":passport_control:":{"sn":":passport_control:","cp":"1f6c2","sns":[],"c":"symbols"},":pause_button:":{"sn":":pause_button:","cp":"23f8","sns":[":double_vertical_bar:"],"c":"symbols"},":peace:":{"sn":":peace:","cp":"262e","sns":[":peace_symbol:"],"c":"symbols"},":pisces:":{"sn":":pisces:","cp":"2653","sns":[],"c":"symbols"},":place_of_worship:":{"sn":":place_of_worship:","cp":"1f6d0","sns":[":worship_symbol:"],"c":"symbols"},":play_pause:":{"sn":":play_pause:","cp":"23ef","sns":[],"c":"symbols"},":purple_heart:":{"sn":":purple_heart:","cp":"1f49c","sns":[],"c":"symbols"},":put_litter_in_its_place:":{"sn":":put_litter_in_its_place:","cp":"1f6ae","sns":[],"c":"symbols"},":question:":{"sn":":question:","cp":"2753","sns":[],"c":"symbols"},":radio_button:":{"sn":":radio_button:","cp":"1f518","sns":[],"c":"symbols"},":radioactive:":{"sn":":radioactive:","cp":"2622","sns":[":radioactive_sign:"],"c":"symbols"},":record_button:":{"sn":":record_button:","cp":"23fa","sns":[],"c":"symbols"},":recycle:":{"sn":":recycle:","cp":"267b","sns":[],"c":"symbols"},":red_circle:":{"sn":":red_circle:","cp":"1f534","sns":[],"c":"symbols"},":regional_indicator_a:":{"sn":":regional_indicator_a:","cp":"1f1e6","sns":[],"c":"symbols"},":regional_indicator_b:":{"sn":":regional_indicator_b:","cp":"1f1e7","sns":[],"c":"symbols"},":regional_indicator_c:":{"sn":":regional_indicator_c:","cp":"1f1e8","sns":[],"c":"symbols"},":regional_indicator_d:":{"sn":":regional_indicator_d:","cp":"1f1e9","sns":[],"c":"symbols"},":regional_indicator_e:":{"sn":":regional_indicator_e:","cp":"1f1ea","sns":[],"c":"symbols"},":regional_indicator_f:":{"sn":":regional_indicator_f:","cp":"1f1eb","sns":[],"c":"symbols"},":regional_indicator_g:":{"sn":":regional_indicator_g:","cp":"1f1ec","sns":[],"c":"symbols"},":regional_indicator_h:":{"sn":":regional_indicator_h:","cp":"1f1ed","sns":[],"c":"symbols"},":regional_indicator_i:":{"sn":":regional_indicator_i:","cp":"1f1ee","sns":[],"c":"symbols"},":regional_indicator_j:":{"sn":":regional_indicator_j:","cp":"1f1ef","sns":[],"c":"symbols"},":regional_indicator_k:":{"sn":":regional_indicator_k:","cp":"1f1f0","sns":[],"c":"symbols"},":regional_indicator_l:":{"sn":":regional_indicator_l:","cp":"1f1f1","sns":[],"c":"symbols"},":regional_indicator_m:":{"sn":":regional_indicator_m:","cp":"1f1f2","sns":[],"c":"symbols"},":regional_indicator_n:":{"sn":":regional_indicator_n:","cp":"1f1f3","sns":[],"c":"symbols"},":regional_indicator_o:":{"sn":":regional_indicator_o:","cp":"1f1f4","sns":[],"c":"symbols"},":regional_indicator_p:":{"sn":":regional_indicator_p:","cp":"1f1f5","sns":[],"c":"symbols"},":regional_indicator_q:":{"sn":":regional_indicator_q:","cp":"1f1f6","sns":[],"c":"symbols"},":regional_indicator_r:":{"sn":":regional_indicator_r:","cp":"1f1f7","sns":[],"c":"symbols"},":regional_indicator_s:":{"sn":":regional_indicator_s:","cp":"1f1f8","sns":[],"c":"symbols"},":regional_indicator_t:":{"sn":":regional_indicator_t:","cp":"1f1f9","sns":[],"c":"symbols"},":regional_indicator_u:":{"sn":":regional_indicator_u:","cp":"1f1fa","sns":[],"c":"symbols"},":regional_indicator_v:":{"sn":":regional_indicator_v:","cp":"1f1fb","sns":[],"c":"symbols"},":regional_indicator_w:":{"sn":":regional_indicator_w:","cp":"1f1fc","sns":[],"c":"symbols"},":regional_indicator_x:":{"sn":":regional_indicator_x:","cp":"1f1fd","sns":[],"c":"symbols"},":regional_indicator_y:":{"sn":":regional_indicator_y:","cp":"1f1fe","sns":[],"c":"symbols"},":regional_indicator_z:":{"sn":":regional_indicator_z:","cp":"1f1ff","sns":[],"c":"symbols"},":registered:":{"sn":":registered:","cp":"ae","sns":[],"c":"symbols"},":repeat:":{"sn":":repeat:","cp":"1f501","sns":[],"c":"symbols"},":repeat_one:":{"sn":":repeat_one:","cp":"1f502","sns":[],"c":"symbols"},":restroom:":{"sn":":restroom:","cp":"1f6bb","sns":[],"c":"symbols"},":revolving_hearts:":{"sn":":revolving_hearts:","cp":"1f49e","sns":[],"c":"symbols"},":rewind:":{"sn":":rewind:","cp":"23ea","sns":[],"c":"symbols"},":sa:":{"sn":":sa:","cp":"1f202","sns":[],"c":"symbols"},":sagittarius:":{"sn":":sagittarius:","cp":"2650","sns":[],"c":"symbols"},":scorpius:":{"sn":":scorpius:","cp":"264f","sns":[],"c":"symbols"},":secret:":{"sn":":secret:","cp":"3299","sns":[],"c":"symbols"},":seven:":{"sn":":seven:","cp":"37-fe0f-20e3","sns":[],"c":"symbols"},":signal_strength:":{"sn":":signal_strength:","cp":"1f4f6","sns":[],"c":"symbols"},":six:":{"sn":":six:","cp":"36-fe0f-20e3","sns":[],"c":"symbols"},":six_pointed_star:":{"sn":":six_pointed_star:","cp":"1f52f","sns":[],"c":"symbols"},":skull_crossbones:":{"sn":":skull_crossbones:","cp":"2620","sns":[":skull_and_crossbones:"],"c":"symbols"},":small_blue_diamond:":{"sn":":small_blue_diamond:","cp":"1f539","sns":[],"c":"symbols"},":small_orange_diamond:":{"sn":":small_orange_diamond:","cp":"1f538","sns":[],"c":"symbols"},":small_red_triangle:":{"sn":":small_red_triangle:","cp":"1f53a","sns":[],"c":"symbols"},":small_red_triangle_down:":{"sn":":small_red_triangle_down:","cp":"1f53b","sns":[],"c":"symbols"},":soon:":{"sn":":soon:","cp":"1f51c","sns":[],"c":"symbols"},":sos:":{"sn":":sos:","cp":"1f198","sns":[],"c":"symbols"},":sound:":{"sn":":sound:","cp":"1f509","sns":[],"c":"symbols"},":spades:":{"sn":":spades:","cp":"2660","sns":[],"c":"symbols"},":sparkle:":{"sn":":sparkle:","cp":"2747","sns":[],"c":"symbols"},":sparkling_heart:":{"sn":":sparkling_heart:","cp":"1f496","sns":[],"c":"symbols"},":speaker:":{"sn":":speaker:","cp":"1f508","sns":[],"c":"symbols"},":speech_balloon:":{"sn":":speech_balloon:","cp":"1f4ac","sns":[],"c":"symbols"},":speech_left:":{"sn":":speech_left:","cp":"1f5e8-fe0f","sns":[":left_speech_bubble:"],"c":"symbols"},":star_and_crescent:":{"sn":":star_and_crescent:","cp":"262a","sns":[],"c":"symbols"},":star_of_david:":{"sn":":star_of_david:","cp":"2721","sns":[],"c":"symbols"},":stop_button:":{"sn":":stop_button:","cp":"23f9","sns":[],"c":"symbols"},":symbols:":{"sn":":symbols:","cp":"1f523","sns":[],"c":"symbols"},":taurus:":{"sn":":taurus:","cp":"2649","sns":[],"c":"symbols"},":thought_balloon:":{"sn":":thought_balloon:","cp":"1f4ad","sns":[],"c":"symbols"},":three:":{"sn":":three:","cp":"33-fe0f-20e3","sns":[],"c":"symbols"},":tm:":{"sn":":tm:","cp":"2122","sns":[],"c":"symbols"},":top:":{"sn":":top:","cp":"1f51d","sns":[],"c":"symbols"},":track_next:":{"sn":":track_next:","cp":"23ed","sns":[":next_track:"],"c":"symbols"},":track_previous:":{"sn":":track_previous:","cp":"23ee","sns":[":previous_track:"],"c":"symbols"},":trident:":{"sn":":trident:","cp":"1f531","sns":[],"c":"symbols"},":twisted_rightwards_arrows:":{"sn":":twisted_rightwards_arrows:","cp":"1f500","sns":[],"c":"symbols"},":two:":{"sn":":two:","cp":"32-fe0f-20e3","sns":[],"c":"symbols"},":two_hearts:":{"sn":":two_hearts:","cp":"1f495","sns":[],"c":"symbols"},":u5272:":{"sn":":u5272:","cp":"1f239","sns":[],"c":"symbols"},":u5408:":{"sn":":u5408:","cp":"1f234","sns":[],"c":"symbols"},":u55b6:":{"sn":":u55b6:","cp":"1f23a","sns":[],"c":"symbols"},":u6307:":{"sn":":u6307:","cp":"1f22f","sns":[],"c":"symbols"},":u6708:":{"sn":":u6708:","cp":"1f237","sns":[],"c":"symbols"},":u6709:":{"sn":":u6709:","cp":"1f236","sns":[],"c":"symbols"},":u6e80:":{"sn":":u6e80:","cp":"1f235","sns":[],"c":"symbols"},":u7121:":{"sn":":u7121:","cp":"1f21a","sns":[],"c":"symbols"},":u7533:":{"sn":":u7533:","cp":"1f238","sns":[],"c":"symbols"},":u7981:":{"sn":":u7981:","cp":"1f232","sns":[],"c":"symbols"},":u7a7a:":{"sn":":u7a7a:","cp":"1f233","sns":[],"c":"symbols"},":underage:":{"sn":":underage:","cp":"1f51e","sns":[],"c":"symbols"},":up:":{"sn":":up:","cp":"1f199","sns":[],"c":"symbols"},":vibration_mode:":{"sn":":vibration_mode:","cp":"1f4f3","sns":[],"c":"symbols"},":virgo:":{"sn":":virgo:","cp":"264d","sns":[],"c":"symbols"},":vs:":{"sn":":vs:","cp":"1f19a","sns":[],"c":"symbols"},":warning:":{"sn":":warning:","cp":"26a0","sns":[],"c":"symbols"},":wavy_dash:":{"sn":":wavy_dash:","cp":"3030","sns":[],"c":"symbols"},":wc:":{"sn":":wc:","cp":"1f6be","sns":[],"c":"symbols"},":wheel_of_dharma:":{"sn":":wheel_of_dharma:","cp":"2638","sns":[],"c":"symbols"},":wheelchair:":{"sn":":wheelchair:","cp":"267f","sns":[],"c":"symbols"},":white_check_mark:":{"sn":":white_check_mark:","cp":"2705","sns":[],"c":"symbols"},":white_circle:":{"sn":":white_circle:","cp":"26aa","sns":[],"c":"symbols"},":white_flower:":{"sn":":white_flower:","cp":"1f4ae","sns":[],"c":"symbols"},":white_large_square:":{"sn":":white_large_square:","cp":"2b1c","sns":[],"c":"symbols"},":white_medium_small_square:":{"sn":":white_medium_small_square:","cp":"25fd","sns":[],"c":"symbols"},":white_medium_square:":{"sn":":white_medium_square:","cp":"25fb","sns":[],"c":"symbols"},":white_small_square:":{"sn":":white_small_square:","cp":"25ab","sns":[],"c":"symbols"},":white_square_button:":{"sn":":white_square_button:","cp":"1f533","sns":[],"c":"symbols"},":womens:":{"sn":":womens:","cp":"1f6ba","sns":[],"c":"symbols"},":x:":{"sn":":x:","cp":"274c","sns":[],"c":"symbols"},":yellow_heart:":{"sn":":yellow_heart:","cp":"1f49b","sns":[],"c":"symbols"},":yin_yang:":{"sn":":yin_yang:","cp":"262f","sns":[],"c":"symbols"},":zero:":{"sn":":zero:","cp":"30-fe0f-20e3","sns":[],"c":"symbols"},":zzz:":{"sn":":zzz:","cp":"1f4a4","sns":[],"c":"symbols"}},"flags":{":checkered_flag:":{"sn":":checkered_flag:","cp":"1f3c1","sns":[],"c":"flags"},":crossed_flags:":{"sn":":crossed_flags:","cp":"1f38c","sns":[],"c":"flags"},":england:":{"sn":":england:","cp":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","sns":[],"c":"flags"},":flag_ac:":{"sn":":flag_ac:","cp":"1f1e6-1f1e8","sns":[":ac:"],"c":"flags"},":flag_ad:":{"sn":":flag_ad:","cp":"1f1e6-1f1e9","sns":[":ad:"],"c":"flags"},":flag_ae:":{"sn":":flag_ae:","cp":"1f1e6-1f1ea","sns":[":ae:"],"c":"flags"},":flag_af:":{"sn":":flag_af:","cp":"1f1e6-1f1eb","sns":[":af:"],"c":"flags"},":flag_ag:":{"sn":":flag_ag:","cp":"1f1e6-1f1ec","sns":[":ag:"],"c":"flags"},":flag_ai:":{"sn":":flag_ai:","cp":"1f1e6-1f1ee","sns":[":ai:"],"c":"flags"},":flag_al:":{"sn":":flag_al:","cp":"1f1e6-1f1f1","sns":[":al:"],"c":"flags"},":flag_am:":{"sn":":flag_am:","cp":"1f1e6-1f1f2","sns":[":am:"],"c":"flags"},":flag_ao:":{"sn":":flag_ao:","cp":"1f1e6-1f1f4","sns":[":ao:"],"c":"flags"},":flag_aq:":{"sn":":flag_aq:","cp":"1f1e6-1f1f6","sns":[":aq:"],"c":"flags"},":flag_ar:":{"sn":":flag_ar:","cp":"1f1e6-1f1f7","sns":[":ar:"],"c":"flags"},":flag_as:":{"sn":":flag_as:","cp":"1f1e6-1f1f8","sns":[":as:"],"c":"flags"},":flag_at:":{"sn":":flag_at:","cp":"1f1e6-1f1f9","sns":[":at:"],"c":"flags"},":flag_au:":{"sn":":flag_au:","cp":"1f1e6-1f1fa","sns":[":au:"],"c":"flags"},":flag_aw:":{"sn":":flag_aw:","cp":"1f1e6-1f1fc","sns":[":aw:"],"c":"flags"},":flag_ax:":{"sn":":flag_ax:","cp":"1f1e6-1f1fd","sns":[":ax:"],"c":"flags"},":flag_az:":{"sn":":flag_az:","cp":"1f1e6-1f1ff","sns":[":az:"],"c":"flags"},":flag_ba:":{"sn":":flag_ba:","cp":"1f1e7-1f1e6","sns":[":ba:"],"c":"flags"},":flag_bb:":{"sn":":flag_bb:","cp":"1f1e7-1f1e7","sns":[":bb:"],"c":"flags"},":flag_bd:":{"sn":":flag_bd:","cp":"1f1e7-1f1e9","sns":[":bd:"],"c":"flags"},":flag_be:":{"sn":":flag_be:","cp":"1f1e7-1f1ea","sns":[":be:"],"c":"flags"},":flag_bf:":{"sn":":flag_bf:","cp":"1f1e7-1f1eb","sns":[":bf:"],"c":"flags"},":flag_bg:":{"sn":":flag_bg:","cp":"1f1e7-1f1ec","sns":[":bg:"],"c":"flags"},":flag_bh:":{"sn":":flag_bh:","cp":"1f1e7-1f1ed","sns":[":bh:"],"c":"flags"},":flag_bi:":{"sn":":flag_bi:","cp":"1f1e7-1f1ee","sns":[":bi:"],"c":"flags"},":flag_bj:":{"sn":":flag_bj:","cp":"1f1e7-1f1ef","sns":[":bj:"],"c":"flags"},":flag_bl:":{"sn":":flag_bl:","cp":"1f1e7-1f1f1","sns":[":bl:"],"c":"flags"},":flag_black:":{"sn":":flag_black:","cp":"1f3f4","sns":[":waving_black_flag:"],"c":"flags"},":flag_bm:":{"sn":":flag_bm:","cp":"1f1e7-1f1f2","sns":[":bm:"],"c":"flags"},":flag_bn:":{"sn":":flag_bn:","cp":"1f1e7-1f1f3","sns":[":bn:"],"c":"flags"},":flag_bo:":{"sn":":flag_bo:","cp":"1f1e7-1f1f4","sns":[":bo:"],"c":"flags"},":flag_bq:":{"sn":":flag_bq:","cp":"1f1e7-1f1f6","sns":[":bq:"],"c":"flags"},":flag_br:":{"sn":":flag_br:","cp":"1f1e7-1f1f7","sns":[":br:"],"c":"flags"},":flag_bs:":{"sn":":flag_bs:","cp":"1f1e7-1f1f8","sns":[":bs:"],"c":"flags"},":flag_bt:":{"sn":":flag_bt:","cp":"1f1e7-1f1f9","sns":[":bt:"],"c":"flags"},":flag_bv:":{"sn":":flag_bv:","cp":"1f1e7-1f1fb","sns":[":bv:"],"c":"flags"},":flag_bw:":{"sn":":flag_bw:","cp":"1f1e7-1f1fc","sns":[":bw:"],"c":"flags"},":flag_by:":{"sn":":flag_by:","cp":"1f1e7-1f1fe","sns":[":by:"],"c":"flags"},":flag_bz:":{"sn":":flag_bz:","cp":"1f1e7-1f1ff","sns":[":bz:"],"c":"flags"},":flag_ca:":{"sn":":flag_ca:","cp":"1f1e8-1f1e6","sns":[":ca:"],"c":"flags"},":flag_cc:":{"sn":":flag_cc:","cp":"1f1e8-1f1e8","sns":[":cc:"],"c":"flags"},":flag_cd:":{"sn":":flag_cd:","cp":"1f1e8-1f1e9","sns":[":congo:"],"c":"flags"},":flag_cf:":{"sn":":flag_cf:","cp":"1f1e8-1f1eb","sns":[":cf:"],"c":"flags"},":flag_cg:":{"sn":":flag_cg:","cp":"1f1e8-1f1ec","sns":[":cg:"],"c":"flags"},":flag_ch:":{"sn":":flag_ch:","cp":"1f1e8-1f1ed","sns":[":ch:"],"c":"flags"},":flag_ci:":{"sn":":flag_ci:","cp":"1f1e8-1f1ee","sns":[":ci:"],"c":"flags"},":flag_ck:":{"sn":":flag_ck:","cp":"1f1e8-1f1f0","sns":[":ck:"],"c":"flags"},":flag_cl:":{"sn":":flag_cl:","cp":"1f1e8-1f1f1","sns":[":chile:"],"c":"flags"},":flag_cm:":{"sn":":flag_cm:","cp":"1f1e8-1f1f2","sns":[":cm:"],"c":"flags"},":flag_cn:":{"sn":":flag_cn:","cp":"1f1e8-1f1f3","sns":[":cn:"],"c":"flags"},":flag_co:":{"sn":":flag_co:","cp":"1f1e8-1f1f4","sns":[":co:"],"c":"flags"},":flag_cp:":{"sn":":flag_cp:","cp":"1f1e8-1f1f5","sns":[":cp:"],"c":"flags"},":flag_cr:":{"sn":":flag_cr:","cp":"1f1e8-1f1f7","sns":[":cr:"],"c":"flags"},":flag_cu:":{"sn":":flag_cu:","cp":"1f1e8-1f1fa","sns":[":cu:"],"c":"flags"},":flag_cv:":{"sn":":flag_cv:","cp":"1f1e8-1f1fb","sns":[":cv:"],"c":"flags"},":flag_cw:":{"sn":":flag_cw:","cp":"1f1e8-1f1fc","sns":[":cw:"],"c":"flags"},":flag_cx:":{"sn":":flag_cx:","cp":"1f1e8-1f1fd","sns":[":cx:"],"c":"flags"},":flag_cy:":{"sn":":flag_cy:","cp":"1f1e8-1f1fe","sns":[":cy:"],"c":"flags"},":flag_cz:":{"sn":":flag_cz:","cp":"1f1e8-1f1ff","sns":[":cz:"],"c":"flags"},":flag_de:":{"sn":":flag_de:","cp":"1f1e9-1f1ea","sns":[":de:"],"c":"flags"},":flag_dg:":{"sn":":flag_dg:","cp":"1f1e9-1f1ec","sns":[":dg:"],"c":"flags"},":flag_dj:":{"sn":":flag_dj:","cp":"1f1e9-1f1ef","sns":[":dj:"],"c":"flags"},":flag_dk:":{"sn":":flag_dk:","cp":"1f1e9-1f1f0","sns":[":dk:"],"c":"flags"},":flag_dm:":{"sn":":flag_dm:","cp":"1f1e9-1f1f2","sns":[":dm:"],"c":"flags"},":flag_do:":{"sn":":flag_do:","cp":"1f1e9-1f1f4","sns":[":do:"],"c":"flags"},":flag_dz:":{"sn":":flag_dz:","cp":"1f1e9-1f1ff","sns":[":dz:"],"c":"flags"},":flag_ea:":{"sn":":flag_ea:","cp":"1f1ea-1f1e6","sns":[":ea:"],"c":"flags"},":flag_ec:":{"sn":":flag_ec:","cp":"1f1ea-1f1e8","sns":[":ec:"],"c":"flags"},":flag_ee:":{"sn":":flag_ee:","cp":"1f1ea-1f1ea","sns":[":ee:"],"c":"flags"},":flag_eg:":{"sn":":flag_eg:","cp":"1f1ea-1f1ec","sns":[":eg:"],"c":"flags"},":flag_eh:":{"sn":":flag_eh:","cp":"1f1ea-1f1ed","sns":[":eh:"],"c":"flags"},":flag_er:":{"sn":":flag_er:","cp":"1f1ea-1f1f7","sns":[":er:"],"c":"flags"},":flag_es:":{"sn":":flag_es:","cp":"1f1ea-1f1f8","sns":[":es:"],"c":"flags"},":flag_et:":{"sn":":flag_et:","cp":"1f1ea-1f1f9","sns":[":et:"],"c":"flags"},":flag_eu:":{"sn":":flag_eu:","cp":"1f1ea-1f1fa","sns":[":eu:"],"c":"flags"},":flag_fi:":{"sn":":flag_fi:","cp":"1f1eb-1f1ee","sns":[":fi:"],"c":"flags"},":flag_fj:":{"sn":":flag_fj:","cp":"1f1eb-1f1ef","sns":[":fj:"],"c":"flags"},":flag_fk:":{"sn":":flag_fk:","cp":"1f1eb-1f1f0","sns":[":fk:"],"c":"flags"},":flag_fm:":{"sn":":flag_fm:","cp":"1f1eb-1f1f2","sns":[":fm:"],"c":"flags"},":flag_fo:":{"sn":":flag_fo:","cp":"1f1eb-1f1f4","sns":[":fo:"],"c":"flags"},":flag_fr:":{"sn":":flag_fr:","cp":"1f1eb-1f1f7","sns":[":fr:"],"c":"flags"},":flag_ga:":{"sn":":flag_ga:","cp":"1f1ec-1f1e6","sns":[":ga:"],"c":"flags"},":flag_gb:":{"sn":":flag_gb:","cp":"1f1ec-1f1e7","sns":[":gb:"],"c":"flags"},":flag_gd:":{"sn":":flag_gd:","cp":"1f1ec-1f1e9","sns":[":gd:"],"c":"flags"},":flag_ge:":{"sn":":flag_ge:","cp":"1f1ec-1f1ea","sns":[":ge:"],"c":"flags"},":flag_gf:":{"sn":":flag_gf:","cp":"1f1ec-1f1eb","sns":[":gf:"],"c":"flags"},":flag_gg:":{"sn":":flag_gg:","cp":"1f1ec-1f1ec","sns":[":gg:"],"c":"flags"},":flag_gh:":{"sn":":flag_gh:","cp":"1f1ec-1f1ed","sns":[":gh:"],"c":"flags"},":flag_gi:":{"sn":":flag_gi:","cp":"1f1ec-1f1ee","sns":[":gi:"],"c":"flags"},":flag_gl:":{"sn":":flag_gl:","cp":"1f1ec-1f1f1","sns":[":gl:"],"c":"flags"},":flag_gm:":{"sn":":flag_gm:","cp":"1f1ec-1f1f2","sns":[":gm:"],"c":"flags"},":flag_gn:":{"sn":":flag_gn:","cp":"1f1ec-1f1f3","sns":[":gn:"],"c":"flags"},":flag_gp:":{"sn":":flag_gp:","cp":"1f1ec-1f1f5","sns":[":gp:"],"c":"flags"},":flag_gq:":{"sn":":flag_gq:","cp":"1f1ec-1f1f6","sns":[":gq:"],"c":"flags"},":flag_gr:":{"sn":":flag_gr:","cp":"1f1ec-1f1f7","sns":[":gr:"],"c":"flags"},":flag_gs:":{"sn":":flag_gs:","cp":"1f1ec-1f1f8","sns":[":gs:"],"c":"flags"},":flag_gt:":{"sn":":flag_gt:","cp":"1f1ec-1f1f9","sns":[":gt:"],"c":"flags"},":flag_gu:":{"sn":":flag_gu:","cp":"1f1ec-1f1fa","sns":[":gu:"],"c":"flags"},":flag_gw:":{"sn":":flag_gw:","cp":"1f1ec-1f1fc","sns":[":gw:"],"c":"flags"},":flag_gy:":{"sn":":flag_gy:","cp":"1f1ec-1f1fe","sns":[":gy:"],"c":"flags"},":flag_hk:":{"sn":":flag_hk:","cp":"1f1ed-1f1f0","sns":[":hk:"],"c":"flags"},":flag_hm:":{"sn":":flag_hm:","cp":"1f1ed-1f1f2","sns":[":hm:"],"c":"flags"},":flag_hn:":{"sn":":flag_hn:","cp":"1f1ed-1f1f3","sns":[":hn:"],"c":"flags"},":flag_hr:":{"sn":":flag_hr:","cp":"1f1ed-1f1f7","sns":[":hr:"],"c":"flags"},":flag_ht:":{"sn":":flag_ht:","cp":"1f1ed-1f1f9","sns":[":ht:"],"c":"flags"},":flag_hu:":{"sn":":flag_hu:","cp":"1f1ed-1f1fa","sns":[":hu:"],"c":"flags"},":flag_ic:":{"sn":":flag_ic:","cp":"1f1ee-1f1e8","sns":[":ic:"],"c":"flags"},":flag_id:":{"sn":":flag_id:","cp":"1f1ee-1f1e9","sns":[":indonesia:"],"c":"flags"},":flag_ie:":{"sn":":flag_ie:","cp":"1f1ee-1f1ea","sns":[":ie:"],"c":"flags"},":flag_il:":{"sn":":flag_il:","cp":"1f1ee-1f1f1","sns":[":il:"],"c":"flags"},":flag_im:":{"sn":":flag_im:","cp":"1f1ee-1f1f2","sns":[":im:"],"c":"flags"},":flag_in:":{"sn":":flag_in:","cp":"1f1ee-1f1f3","sns":[":in:"],"c":"flags"},":flag_io:":{"sn":":flag_io:","cp":"1f1ee-1f1f4","sns":[":io:"],"c":"flags"},":flag_iq:":{"sn":":flag_iq:","cp":"1f1ee-1f1f6","sns":[":iq:"],"c":"flags"},":flag_ir:":{"sn":":flag_ir:","cp":"1f1ee-1f1f7","sns":[":ir:"],"c":"flags"},":flag_is:":{"sn":":flag_is:","cp":"1f1ee-1f1f8","sns":[":is:"],"c":"flags"},":flag_it:":{"sn":":flag_it:","cp":"1f1ee-1f1f9","sns":[":it:"],"c":"flags"},":flag_je:":{"sn":":flag_je:","cp":"1f1ef-1f1ea","sns":[":je:"],"c":"flags"},":flag_jm:":{"sn":":flag_jm:","cp":"1f1ef-1f1f2","sns":[":jm:"],"c":"flags"},":flag_jo:":{"sn":":flag_jo:","cp":"1f1ef-1f1f4","sns":[":jo:"],"c":"flags"},":flag_jp:":{"sn":":flag_jp:","cp":"1f1ef-1f1f5","sns":[":jp:"],"c":"flags"},":flag_ke:":{"sn":":flag_ke:","cp":"1f1f0-1f1ea","sns":[":ke:"],"c":"flags"},":flag_kg:":{"sn":":flag_kg:","cp":"1f1f0-1f1ec","sns":[":kg:"],"c":"flags"},":flag_kh:":{"sn":":flag_kh:","cp":"1f1f0-1f1ed","sns":[":kh:"],"c":"flags"},":flag_ki:":{"sn":":flag_ki:","cp":"1f1f0-1f1ee","sns":[":ki:"],"c":"flags"},":flag_km:":{"sn":":flag_km:","cp":"1f1f0-1f1f2","sns":[":km:"],"c":"flags"},":flag_kn:":{"sn":":flag_kn:","cp":"1f1f0-1f1f3","sns":[":kn:"],"c":"flags"},":flag_kp:":{"sn":":flag_kp:","cp":"1f1f0-1f1f5","sns":[":kp:"],"c":"flags"},":flag_kr:":{"sn":":flag_kr:","cp":"1f1f0-1f1f7","sns":[":kr:"],"c":"flags"},":flag_kw:":{"sn":":flag_kw:","cp":"1f1f0-1f1fc","sns":[":kw:"],"c":"flags"},":flag_ky:":{"sn":":flag_ky:","cp":"1f1f0-1f1fe","sns":[":ky:"],"c":"flags"},":flag_kz:":{"sn":":flag_kz:","cp":"1f1f0-1f1ff","sns":[":kz:"],"c":"flags"},":flag_la:":{"sn":":flag_la:","cp":"1f1f1-1f1e6","sns":[":la:"],"c":"flags"},":flag_lb:":{"sn":":flag_lb:","cp":"1f1f1-1f1e7","sns":[":lb:"],"c":"flags"},":flag_lc:":{"sn":":flag_lc:","cp":"1f1f1-1f1e8","sns":[":lc:"],"c":"flags"},":flag_li:":{"sn":":flag_li:","cp":"1f1f1-1f1ee","sns":[":li:"],"c":"flags"},":flag_lk:":{"sn":":flag_lk:","cp":"1f1f1-1f1f0","sns":[":lk:"],"c":"flags"},":flag_lr:":{"sn":":flag_lr:","cp":"1f1f1-1f1f7","sns":[":lr:"],"c":"flags"},":flag_ls:":{"sn":":flag_ls:","cp":"1f1f1-1f1f8","sns":[":ls:"],"c":"flags"},":flag_lt:":{"sn":":flag_lt:","cp":"1f1f1-1f1f9","sns":[":lt:"],"c":"flags"},":flag_lu:":{"sn":":flag_lu:","cp":"1f1f1-1f1fa","sns":[":lu:"],"c":"flags"},":flag_lv:":{"sn":":flag_lv:","cp":"1f1f1-1f1fb","sns":[":lv:"],"c":"flags"},":flag_ly:":{"sn":":flag_ly:","cp":"1f1f1-1f1fe","sns":[":ly:"],"c":"flags"},":flag_ma:":{"sn":":flag_ma:","cp":"1f1f2-1f1e6","sns":[":ma:"],"c":"flags"},":flag_mc:":{"sn":":flag_mc:","cp":"1f1f2-1f1e8","sns":[":mc:"],"c":"flags"},":flag_md:":{"sn":":flag_md:","cp":"1f1f2-1f1e9","sns":[":md:"],"c":"flags"},":flag_me:":{"sn":":flag_me:","cp":"1f1f2-1f1ea","sns":[":me:"],"c":"flags"},":flag_mf:":{"sn":":flag_mf:","cp":"1f1f2-1f1eb","sns":[":mf:"],"c":"flags"},":flag_mg:":{"sn":":flag_mg:","cp":"1f1f2-1f1ec","sns":[":mg:"],"c":"flags"},":flag_mh:":{"sn":":flag_mh:","cp":"1f1f2-1f1ed","sns":[":mh:"],"c":"flags"},":flag_mk:":{"sn":":flag_mk:","cp":"1f1f2-1f1f0","sns":[":mk:"],"c":"flags"},":flag_ml:":{"sn":":flag_ml:","cp":"1f1f2-1f1f1","sns":[":ml:"],"c":"flags"},":flag_mm:":{"sn":":flag_mm:","cp":"1f1f2-1f1f2","sns":[":mm:"],"c":"flags"},":flag_mn:":{"sn":":flag_mn:","cp":"1f1f2-1f1f3","sns":[":mn:"],"c":"flags"},":flag_mo:":{"sn":":flag_mo:","cp":"1f1f2-1f1f4","sns":[":mo:"],"c":"flags"},":flag_mp:":{"sn":":flag_mp:","cp":"1f1f2-1f1f5","sns":[":mp:"],"c":"flags"},":flag_mq:":{"sn":":flag_mq:","cp":"1f1f2-1f1f6","sns":[":mq:"],"c":"flags"},":flag_mr:":{"sn":":flag_mr:","cp":"1f1f2-1f1f7","sns":[":mr:"],"c":"flags"},":flag_ms:":{"sn":":flag_ms:","cp":"1f1f2-1f1f8","sns":[":ms:"],"c":"flags"},":flag_mt:":{"sn":":flag_mt:","cp":"1f1f2-1f1f9","sns":[":mt:"],"c":"flags"},":flag_mu:":{"sn":":flag_mu:","cp":"1f1f2-1f1fa","sns":[":mu:"],"c":"flags"},":flag_mv:":{"sn":":flag_mv:","cp":"1f1f2-1f1fb","sns":[":mv:"],"c":"flags"},":flag_mw:":{"sn":":flag_mw:","cp":"1f1f2-1f1fc","sns":[":mw:"],"c":"flags"},":flag_mx:":{"sn":":flag_mx:","cp":"1f1f2-1f1fd","sns":[":mx:"],"c":"flags"},":flag_my:":{"sn":":flag_my:","cp":"1f1f2-1f1fe","sns":[":my:"],"c":"flags"},":flag_mz:":{"sn":":flag_mz:","cp":"1f1f2-1f1ff","sns":[":mz:"],"c":"flags"},":flag_na:":{"sn":":flag_na:","cp":"1f1f3-1f1e6","sns":[":na:"],"c":"flags"},":flag_nc:":{"sn":":flag_nc:","cp":"1f1f3-1f1e8","sns":[":nc:"],"c":"flags"},":flag_ne:":{"sn":":flag_ne:","cp":"1f1f3-1f1ea","sns":[":ne:"],"c":"flags"},":flag_nf:":{"sn":":flag_nf:","cp":"1f1f3-1f1eb","sns":[":nf:"],"c":"flags"},":flag_ng:":{"sn":":flag_ng:","cp":"1f1f3-1f1ec","sns":[":nigeria:"],"c":"flags"},":flag_ni:":{"sn":":flag_ni:","cp":"1f1f3-1f1ee","sns":[":ni:"],"c":"flags"},":flag_nl:":{"sn":":flag_nl:","cp":"1f1f3-1f1f1","sns":[":nl:"],"c":"flags"},":flag_no:":{"sn":":flag_no:","cp":"1f1f3-1f1f4","sns":[":no:"],"c":"flags"},":flag_np:":{"sn":":flag_np:","cp":"1f1f3-1f1f5","sns":[":np:"],"c":"flags"},":flag_nr:":{"sn":":flag_nr:","cp":"1f1f3-1f1f7","sns":[":nr:"],"c":"flags"},":flag_nu:":{"sn":":flag_nu:","cp":"1f1f3-1f1fa","sns":[":nu:"],"c":"flags"},":flag_nz:":{"sn":":flag_nz:","cp":"1f1f3-1f1ff","sns":[":nz:"],"c":"flags"},":flag_om:":{"sn":":flag_om:","cp":"1f1f4-1f1f2","sns":[":om:"],"c":"flags"},":flag_pa:":{"sn":":flag_pa:","cp":"1f1f5-1f1e6","sns":[":pa:"],"c":"flags"},":flag_pe:":{"sn":":flag_pe:","cp":"1f1f5-1f1ea","sns":[":pe:"],"c":"flags"},":flag_pf:":{"sn":":flag_pf:","cp":"1f1f5-1f1eb","sns":[":pf:"],"c":"flags"},":flag_pg:":{"sn":":flag_pg:","cp":"1f1f5-1f1ec","sns":[":pg:"],"c":"flags"},":flag_ph:":{"sn":":flag_ph:","cp":"1f1f5-1f1ed","sns":[":ph:"],"c":"flags"},":flag_pk:":{"sn":":flag_pk:","cp":"1f1f5-1f1f0","sns":[":pk:"],"c":"flags"},":flag_pl:":{"sn":":flag_pl:","cp":"1f1f5-1f1f1","sns":[":pl:"],"c":"flags"},":flag_pm:":{"sn":":flag_pm:","cp":"1f1f5-1f1f2","sns":[":pm:"],"c":"flags"},":flag_pn:":{"sn":":flag_pn:","cp":"1f1f5-1f1f3","sns":[":pn:"],"c":"flags"},":flag_pr:":{"sn":":flag_pr:","cp":"1f1f5-1f1f7","sns":[":pr:"],"c":"flags"},":flag_ps:":{"sn":":flag_ps:","cp":"1f1f5-1f1f8","sns":[":ps:"],"c":"flags"},":flag_pt:":{"sn":":flag_pt:","cp":"1f1f5-1f1f9","sns":[":pt:"],"c":"flags"},":flag_pw:":{"sn":":flag_pw:","cp":"1f1f5-1f1fc","sns":[":pw:"],"c":"flags"},":flag_py:":{"sn":":flag_py:","cp":"1f1f5-1f1fe","sns":[":py:"],"c":"flags"},":flag_qa:":{"sn":":flag_qa:","cp":"1f1f6-1f1e6","sns":[":qa:"],"c":"flags"},":flag_re:":{"sn":":flag_re:","cp":"1f1f7-1f1ea","sns":[":re:"],"c":"flags"},":flag_ro:":{"sn":":flag_ro:","cp":"1f1f7-1f1f4","sns":[":ro:"],"c":"flags"},":flag_rs:":{"sn":":flag_rs:","cp":"1f1f7-1f1f8","sns":[":rs:"],"c":"flags"},":flag_ru:":{"sn":":flag_ru:","cp":"1f1f7-1f1fa","sns":[":ru:"],"c":"flags"},":flag_rw:":{"sn":":flag_rw:","cp":"1f1f7-1f1fc","sns":[":rw:"],"c":"flags"},":flag_sa:":{"sn":":flag_sa:","cp":"1f1f8-1f1e6","sns":[":saudiarabia:",":saudi:"],"c":"flags"},":flag_sb:":{"sn":":flag_sb:","cp":"1f1f8-1f1e7","sns":[":sb:"],"c":"flags"},":flag_sc:":{"sn":":flag_sc:","cp":"1f1f8-1f1e8","sns":[":sc:"],"c":"flags"},":flag_sd:":{"sn":":flag_sd:","cp":"1f1f8-1f1e9","sns":[":sd:"],"c":"flags"},":flag_se:":{"sn":":flag_se:","cp":"1f1f8-1f1ea","sns":[":se:"],"c":"flags"},":flag_sg:":{"sn":":flag_sg:","cp":"1f1f8-1f1ec","sns":[":sg:"],"c":"flags"},":flag_sh:":{"sn":":flag_sh:","cp":"1f1f8-1f1ed","sns":[":sh:"],"c":"flags"},":flag_si:":{"sn":":flag_si:","cp":"1f1f8-1f1ee","sns":[":si:"],"c":"flags"},":flag_sj:":{"sn":":flag_sj:","cp":"1f1f8-1f1ef","sns":[":sj:"],"c":"flags"},":flag_sk:":{"sn":":flag_sk:","cp":"1f1f8-1f1f0","sns":[":sk:"],"c":"flags"},":flag_sl:":{"sn":":flag_sl:","cp":"1f1f8-1f1f1","sns":[":sl:"],"c":"flags"},":flag_sm:":{"sn":":flag_sm:","cp":"1f1f8-1f1f2","sns":[":sm:"],"c":"flags"},":flag_sn:":{"sn":":flag_sn:","cp":"1f1f8-1f1f3","sns":[":sn:"],"c":"flags"},":flag_so:":{"sn":":flag_so:","cp":"1f1f8-1f1f4","sns":[":so:"],"c":"flags"},":flag_sr:":{"sn":":flag_sr:","cp":"1f1f8-1f1f7","sns":[":sr:"],"c":"flags"},":flag_ss:":{"sn":":flag_ss:","cp":"1f1f8-1f1f8","sns":[":ss:"],"c":"flags"},":flag_st:":{"sn":":flag_st:","cp":"1f1f8-1f1f9","sns":[":st:"],"c":"flags"},":flag_sv:":{"sn":":flag_sv:","cp":"1f1f8-1f1fb","sns":[":sv:"],"c":"flags"},":flag_sx:":{"sn":":flag_sx:","cp":"1f1f8-1f1fd","sns":[":sx:"],"c":"flags"},":flag_sy:":{"sn":":flag_sy:","cp":"1f1f8-1f1fe","sns":[":sy:"],"c":"flags"},":flag_sz:":{"sn":":flag_sz:","cp":"1f1f8-1f1ff","sns":[":sz:"],"c":"flags"},":flag_ta:":{"sn":":flag_ta:","cp":"1f1f9-1f1e6","sns":[":ta:"],"c":"flags"},":flag_tc:":{"sn":":flag_tc:","cp":"1f1f9-1f1e8","sns":[":tc:"],"c":"flags"},":flag_td:":{"sn":":flag_td:","cp":"1f1f9-1f1e9","sns":[":td:"],"c":"flags"},":flag_tf:":{"sn":":flag_tf:","cp":"1f1f9-1f1eb","sns":[":tf:"],"c":"flags"},":flag_tg:":{"sn":":flag_tg:","cp":"1f1f9-1f1ec","sns":[":tg:"],"c":"flags"},":flag_th:":{"sn":":flag_th:","cp":"1f1f9-1f1ed","sns":[":th:"],"c":"flags"},":flag_tj:":{"sn":":flag_tj:","cp":"1f1f9-1f1ef","sns":[":tj:"],"c":"flags"},":flag_tk:":{"sn":":flag_tk:","cp":"1f1f9-1f1f0","sns":[":tk:"],"c":"flags"},":flag_tl:":{"sn":":flag_tl:","cp":"1f1f9-1f1f1","sns":[":tl:"],"c":"flags"},":flag_tm:":{"sn":":flag_tm:","cp":"1f1f9-1f1f2","sns":[":turkmenistan:"],"c":"flags"},":flag_tn:":{"sn":":flag_tn:","cp":"1f1f9-1f1f3","sns":[":tn:"],"c":"flags"},":flag_to:":{"sn":":flag_to:","cp":"1f1f9-1f1f4","sns":[":to:"],"c":"flags"},":flag_tr:":{"sn":":flag_tr:","cp":"1f1f9-1f1f7","sns":[":tr:"],"c":"flags"},":flag_tt:":{"sn":":flag_tt:","cp":"1f1f9-1f1f9","sns":[":tt:"],"c":"flags"},":flag_tv:":{"sn":":flag_tv:","cp":"1f1f9-1f1fb","sns":[":tuvalu:"],"c":"flags"},":flag_tw:":{"sn":":flag_tw:","cp":"1f1f9-1f1fc","sns":[":tw:"],"c":"flags"},":flag_tz:":{"sn":":flag_tz:","cp":"1f1f9-1f1ff","sns":[":tz:"],"c":"flags"},":flag_ua:":{"sn":":flag_ua:","cp":"1f1fa-1f1e6","sns":[":ua:"],"c":"flags"},":flag_ug:":{"sn":":flag_ug:","cp":"1f1fa-1f1ec","sns":[":ug:"],"c":"flags"},":flag_um:":{"sn":":flag_um:","cp":"1f1fa-1f1f2","sns":[":um:"],"c":"flags"},":flag_us:":{"sn":":flag_us:","cp":"1f1fa-1f1f8","sns":[":us:"],"c":"flags"},":flag_uy:":{"sn":":flag_uy:","cp":"1f1fa-1f1fe","sns":[":uy:"],"c":"flags"},":flag_uz:":{"sn":":flag_uz:","cp":"1f1fa-1f1ff","sns":[":uz:"],"c":"flags"},":flag_va:":{"sn":":flag_va:","cp":"1f1fb-1f1e6","sns":[":va:"],"c":"flags"},":flag_vc:":{"sn":":flag_vc:","cp":"1f1fb-1f1e8","sns":[":vc:"],"c":"flags"},":flag_ve:":{"sn":":flag_ve:","cp":"1f1fb-1f1ea","sns":[":ve:"],"c":"flags"},":flag_vg:":{"sn":":flag_vg:","cp":"1f1fb-1f1ec","sns":[":vg:"],"c":"flags"},":flag_vi:":{"sn":":flag_vi:","cp":"1f1fb-1f1ee","sns":[":vi:"],"c":"flags"},":flag_vn:":{"sn":":flag_vn:","cp":"1f1fb-1f1f3","sns":[":vn:"],"c":"flags"},":flag_vu:":{"sn":":flag_vu:","cp":"1f1fb-1f1fa","sns":[":vu:"],"c":"flags"},":flag_wf:":{"sn":":flag_wf:","cp":"1f1fc-1f1eb","sns":[":wf:"],"c":"flags"},":flag_white:":{"sn":":flag_white:","cp":"1f3f3","sns":[":waving_white_flag:"],"c":"flags"},":flag_ws:":{"sn":":flag_ws:","cp":"1f1fc-1f1f8","sns":[":ws:"],"c":"flags"},":flag_xk:":{"sn":":flag_xk:","cp":"1f1fd-1f1f0","sns":[":xk:"],"c":"flags"},":flag_ye:":{"sn":":flag_ye:","cp":"1f1fe-1f1ea","sns":[":ye:"],"c":"flags"},":flag_yt:":{"sn":":flag_yt:","cp":"1f1fe-1f1f9","sns":[":yt:"],"c":"flags"},":flag_za:":{"sn":":flag_za:","cp":"1f1ff-1f1e6","sns":[":za:"],"c":"flags"},":flag_zm:":{"sn":":flag_zm:","cp":"1f1ff-1f1f2","sns":[":zm:"],"c":"flags"},":flag_zw:":{"sn":":flag_zw:","cp":"1f1ff-1f1fc","sns":[":zw:"],"c":"flags"},":rainbow_flag:":{"sn":":rainbow_flag:","cp":"1f3f3-fe0f-200d-1f308","sns":[":gay_pride_flag:"],"c":"flags"},":scotland:":{"sn":":scotland:","cp":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","sns":[],"c":"flags"},":triangular_flag_on_post:":{"sn":":triangular_flag_on_post:","cp":"1f6a9","sns":[],"c":"flags"},":united_nations:":{"sn":":united_nations:","cp":"1f1fa-1f1f3","sns":[],"c":"flags"},":wales:":{"sn":":wales:","cp":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","sns":[],"c":"flags"}},"modifiers":{":tone1:":{"sn":":tone1:","cp":"1f3fb","sns":[],"c":"modifier"},":tone2:":{"sn":":tone2:","cp":"1f3fc","sns":[],"c":"modifier"},":tone3:":{"sn":":tone3:","cp":"1f3fd","sns":[],"c":"modifier"},":tone4:":{"sn":":tone4:","cp":"1f3fe","sns":[],"c":"modifier"},":tone5:":{"sn":":tone5:","cp":"1f3ff","sns":[],"c":"modifier"}}}')}}]);
 //# sourceMappingURL=emojis.js.map
\ No newline at end of file
diff --git a/src/conversejs/icons.js b/src/conversejs/icons.js
index 8db09fc74d2cd9f1f014091322f2eed56549c43d..d38869a4fa77de81c5b727f00441d7c934c61258 100644
--- a/src/conversejs/icons.js
+++ b/src/conversejs/icons.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{459:function(c,l,o){o(8);c.exports=function(c){return'\x3c!-- images/icons.svg --\x3e\n<?xml version="1.0" encoding="UTF-8"?>\n\x3c!--\nFont Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com\nLicense - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n--\x3e\n<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">\n<symbol id="icon-address-book" viewBox="0 0 448 512">\n    <path d="M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"></path>\n</symbol>\n<symbol id="icon-angle-double-down" viewBox="0 0 320 512">\n    <path d="M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"></path>\n</symbol>\n<symbol id="icon-angle-double-left" viewBox="0 0 448 512">\n    <path d="M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-double-right" viewBox="0 0 448 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"></path>\n</symbol>\n<symbol id="icon-angle-double-up" viewBox="0 0 320 512">\n    <path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-down" viewBox="0 0 320 512">\n    <path d="M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-left" viewBox="0 0 256 512">\n    <path d="M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"></path>\n</symbol>\n<symbol id="icon-angle-right" viewBox="0 0 256 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-up" viewBox="0 0 320 512">\n    <path d="M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-down" viewBox="0 0 448 512">\n    <path d="M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-left" viewBox="0 0 448 512">\n    <path d="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-right" viewBox="0 0 448 512">\n    <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-up" viewBox="0 0 448 512">\n    <path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrows-alt" viewBox="0 0 512 512">\n    <path d="M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-h" viewBox="0 0 512 512">\n    <path d="M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-v" viewBox="0 0 256 512">\n    <path d="M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"></path>\n</symbol>\n<symbol id="icon-bars" viewBox="0 0 448 512">\n    <path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path>\n</symbol>\n<symbol id="icon-bookmark" viewBox="0 0 384 512">\n    <path d="M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"></path>\n</symbol>\n<symbol id="icon-caret-down" viewBox="0 0 320 512">\n    <path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"></path>\n</symbol>\n<symbol id="icon-caret-right" viewBox="0 0 192 512">\n    <path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"></path>\n</symbol>\n<symbol id="icon-check" viewBox="0 0 512 512">\n    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n</symbol>\n<symbol id="icon-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"></path>\n</symbol>\n<symbol id="icon-cog" viewBox="0 0 512 512">\n    <path d="M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"></path>\n</symbol>\n<symbol id="icon-database" viewBox="0 0 448 512">\n    <path d="M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"></path>\n</symbol>\n<symbol id="icon-edit" viewBox="0 0 576 512">\n    <path d="M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"></path>\n</symbol>\n<symbol id="icon-eye" viewBox="0 0 576 512">\n    <path d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path>\n</symbol>\n<symbol id="icon-eye-slash" viewBox="0 0 640 512">\n    <path d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"></path>\n</symbol>\n<symbol id="icon-gavel" viewBox="0 0 512 512">\n    <path d="M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"></path>\n</symbol>\n<symbol id="icon-globe" viewBox="0 0 496 512">\n    <path d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"></path>\n</symbol>\n<symbol id="icon-id-card" viewBox="0 0 576 512">\n    <path d="M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"></path>\n</symbol>\n<symbol id="icon-id-card-alt" viewBox="0 0 576 512">\n    <path d="M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"></path>\n</symbol>\n<symbol id="icon-info" viewBox="0 0 192 512">\n    <path d="M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"></path>\n</symbol>\n<symbol id="icon-info-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"></path>\n</symbol>\n<symbol id="icon-list-ul" viewBox="0 0 512 512">\n    <path d="M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-lock" viewBox="0 0 448 512">\n    <path d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path>\n</symbol>\n<symbol id="icon-lock-open" viewBox="0 0 576 512">\n    <path d="M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"></path>\n</symbol>\n<symbol id="icon-minus" viewBox="0 0 448 512">\n    <path d="M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-minus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"></path>\n</symbol>\n<symbol id="icon-minus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"></path>\n</symbol>\n<symbol id="icon-paper-plane" viewBox="0 0 512 512">\n    <path d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"></path>\n</symbol>\n<symbol id="icon-paperclip" viewBox="0 0 448 512">\n    <path d="M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"></path>\n</symbol>\n<symbol id="icon-pencil-alt" viewBox="0 0 512 512">\n    <path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"></path>\n</symbol>\n<symbol id="icon-phone" viewBox="0 0 512 512">\n    <path d="M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"></path>\n</symbol>\n<symbol id="icon-plus" viewBox="0 0 448 512">\n    <path d="M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-plus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-plus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-save" viewBox="0 0 448 512">\n    <path d="M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"></path>\n</symbol>\n<symbol id="icon-sign-out-alt" viewBox="0 0 512 512">\n    <path d="M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-smile" viewBox="0 0 496 512">\n    <path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"></path>\n</symbol>\n<symbol id="icon-snowflake" viewBox="0 0 448 512">\n    <path d="M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"></path>\n</symbol>\n<symbol id="icon-spinner" viewBox="0 0 512 512">\n    <path d="M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"></path>\n</symbol>\n<symbol id="icon-sync" viewBox="0 0 512 512">\n    <path d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"></path>\n</symbol>\n<symbol id="icon-times" viewBox="0 0 352 512">\n    <path d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>\n</symbol>\n<symbol id="icon-times-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"></path>\n</symbol>\n<symbol id="icon-trash" viewBox="0 0 448 512">\n    <path d="M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"></path>\n</symbol>\n<symbol id="icon-trash-alt" viewBox="0 0 448 512">\n    <path d="M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-unlock" viewBox="0 0 448 512">\n    <path d="M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"></path>\n</symbol>\n<symbol id="icon-user" viewBox="0 0 448 512">\n    <path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-cog" viewBox="0 0 640 512">\n    <path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path>\n</symbol>\n<symbol id="icon-user-plus" viewBox="0 0 640 512">\n    <path d="M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-secret" viewBox="0 0 448 512">\n    <path d="M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"></path>\n</symbol>\n<symbol id="icon-users" viewBox="0 0 640 512">\n    <path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path>\n</symbol>\n<symbol id="icon-wrench" viewBox="0 0 512 512">\n    <path d="M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"></path>\n</symbol>\n</svg>\n','\x3c!-- images/icons.svg --\x3e\n<?xml version="1.0" encoding="UTF-8"?>\n\x3c!--\nFont Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com\nLicense - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n--\x3e\n<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">\n<symbol id="icon-address-book" viewBox="0 0 448 512">\n    <path d="M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"></path>\n</symbol>\n<symbol id="icon-angle-double-down" viewBox="0 0 320 512">\n    <path d="M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"></path>\n</symbol>\n<symbol id="icon-angle-double-left" viewBox="0 0 448 512">\n    <path d="M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-double-right" viewBox="0 0 448 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"></path>\n</symbol>\n<symbol id="icon-angle-double-up" viewBox="0 0 320 512">\n    <path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-down" viewBox="0 0 320 512">\n    <path d="M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-left" viewBox="0 0 256 512">\n    <path d="M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"></path>\n</symbol>\n<symbol id="icon-angle-right" viewBox="0 0 256 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-up" viewBox="0 0 320 512">\n    <path d="M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-down" viewBox="0 0 448 512">\n    <path d="M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-left" viewBox="0 0 448 512">\n    <path d="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-right" viewBox="0 0 448 512">\n    <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-up" viewBox="0 0 448 512">\n    <path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrows-alt" viewBox="0 0 512 512">\n    <path d="M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-h" viewBox="0 0 512 512">\n    <path d="M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-v" viewBox="0 0 256 512">\n    <path d="M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"></path>\n</symbol>\n<symbol id="icon-bars" viewBox="0 0 448 512">\n    <path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path>\n</symbol>\n<symbol id="icon-bookmark" viewBox="0 0 384 512">\n    <path d="M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"></path>\n</symbol>\n<symbol id="icon-caret-down" viewBox="0 0 320 512">\n    <path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"></path>\n</symbol>\n<symbol id="icon-caret-right" viewBox="0 0 192 512">\n    <path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"></path>\n</symbol>\n<symbol id="icon-check" viewBox="0 0 512 512">\n    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n</symbol>\n<symbol id="icon-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"></path>\n</symbol>\n<symbol id="icon-cog" viewBox="0 0 512 512">\n    <path d="M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"></path>\n</symbol>\n<symbol id="icon-database" viewBox="0 0 448 512">\n    <path d="M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"></path>\n</symbol>\n<symbol id="icon-edit" viewBox="0 0 576 512">\n    <path d="M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"></path>\n</symbol>\n<symbol id="icon-eye" viewBox="0 0 576 512">\n    <path d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path>\n</symbol>\n<symbol id="icon-eye-slash" viewBox="0 0 640 512">\n    <path d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"></path>\n</symbol>\n<symbol id="icon-gavel" viewBox="0 0 512 512">\n    <path d="M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"></path>\n</symbol>\n<symbol id="icon-globe" viewBox="0 0 496 512">\n    <path d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"></path>\n</symbol>\n<symbol id="icon-id-card" viewBox="0 0 576 512">\n    <path d="M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"></path>\n</symbol>\n<symbol id="icon-id-card-alt" viewBox="0 0 576 512">\n    <path d="M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"></path>\n</symbol>\n<symbol id="icon-info" viewBox="0 0 192 512">\n    <path d="M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"></path>\n</symbol>\n<symbol id="icon-info-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"></path>\n</symbol>\n<symbol id="icon-list-ul" viewBox="0 0 512 512">\n    <path d="M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-lock" viewBox="0 0 448 512">\n    <path d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path>\n</symbol>\n<symbol id="icon-lock-open" viewBox="0 0 576 512">\n    <path d="M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"></path>\n</symbol>\n<symbol id="icon-minus" viewBox="0 0 448 512">\n    <path d="M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-minus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"></path>\n</symbol>\n<symbol id="icon-minus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"></path>\n</symbol>\n<symbol id="icon-paper-plane" viewBox="0 0 512 512">\n    <path d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"></path>\n</symbol>\n<symbol id="icon-paperclip" viewBox="0 0 448 512">\n    <path d="M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"></path>\n</symbol>\n<symbol id="icon-pencil-alt" viewBox="0 0 512 512">\n    <path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"></path>\n</symbol>\n<symbol id="icon-phone" viewBox="0 0 512 512">\n    <path d="M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"></path>\n</symbol>\n<symbol id="icon-plus" viewBox="0 0 448 512">\n    <path d="M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-plus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-plus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-save" viewBox="0 0 448 512">\n    <path d="M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"></path>\n</symbol>\n<symbol id="icon-sign-out-alt" viewBox="0 0 512 512">\n    <path d="M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-smile" viewBox="0 0 496 512">\n    <path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"></path>\n</symbol>\n<symbol id="icon-snowflake" viewBox="0 0 448 512">\n    <path d="M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"></path>\n</symbol>\n<symbol id="icon-spinner" viewBox="0 0 512 512">\n    <path d="M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"></path>\n</symbol>\n<symbol id="icon-sync" viewBox="0 0 512 512">\n    <path d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"></path>\n</symbol>\n<symbol id="icon-times" viewBox="0 0 352 512">\n    <path d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>\n</symbol>\n<symbol id="icon-times-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"></path>\n</symbol>\n<symbol id="icon-trash" viewBox="0 0 448 512">\n    <path d="M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"></path>\n</symbol>\n<symbol id="icon-trash-alt" viewBox="0 0 448 512">\n    <path d="M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-unlock" viewBox="0 0 448 512">\n    <path d="M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"></path>\n</symbol>\n<symbol id="icon-user" viewBox="0 0 448 512">\n    <path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-cog" viewBox="0 0 640 512">\n    <path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path>\n</symbol>\n<symbol id="icon-user-plus" viewBox="0 0 640 512">\n    <path d="M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-secret" viewBox="0 0 448 512">\n    <path d="M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"></path>\n</symbol>\n<symbol id="icon-users" viewBox="0 0 640 512">\n    <path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path>\n</symbol>\n<symbol id="icon-wrench" viewBox="0 0 512 512">\n    <path d="M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"></path>\n</symbol>\n</svg>\n'}}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{548:function(c,l,o){o(8);c.exports=function(c){return'\x3c!-- images/icons.svg --\x3e\n<?xml version="1.0" encoding="UTF-8"?>\n\x3c!--\nFont Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com\nLicense - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n--\x3e\n<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">\n<symbol id="icon-address-book" viewBox="0 0 448 512">\n    <path d="M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"></path>\n</symbol>\n<symbol id="icon-angle-double-down" viewBox="0 0 320 512">\n    <path d="M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"></path>\n</symbol>\n<symbol id="icon-angle-double-left" viewBox="0 0 448 512">\n    <path d="M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-double-right" viewBox="0 0 448 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"></path>\n</symbol>\n<symbol id="icon-angle-double-up" viewBox="0 0 320 512">\n    <path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-down" viewBox="0 0 320 512">\n    <path d="M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-left" viewBox="0 0 256 512">\n    <path d="M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"></path>\n</symbol>\n<symbol id="icon-angle-right" viewBox="0 0 256 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-up" viewBox="0 0 320 512">\n    <path d="M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-down" viewBox="0 0 448 512">\n    <path d="M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-left" viewBox="0 0 448 512">\n    <path d="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-right" viewBox="0 0 448 512">\n    <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-up" viewBox="0 0 448 512">\n    <path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrows-alt" viewBox="0 0 512 512">\n    <path d="M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-h" viewBox="0 0 512 512">\n    <path d="M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-v" viewBox="0 0 256 512">\n    <path d="M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"></path>\n</symbol>\n<symbol id="icon-bars" viewBox="0 0 448 512">\n    <path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path>\n</symbol>\n<symbol id="icon-bookmark" viewBox="0 0 384 512">\n    <path d="M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"></path>\n</symbol>\n<symbol id="icon-caret-down" viewBox="0 0 320 512">\n    <path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"></path>\n</symbol>\n<symbol id="icon-caret-right" viewBox="0 0 192 512">\n    <path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"></path>\n</symbol>\n<symbol id="icon-check" viewBox="0 0 512 512">\n    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n</symbol>\n<symbol id="icon-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"></path>\n</symbol>\n<symbol id="icon-cog" viewBox="0 0 512 512">\n    <path d="M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"></path>\n</symbol>\n<symbol id="icon-database" viewBox="0 0 448 512">\n    <path d="M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"></path>\n</symbol>\n<symbol id="icon-edit" viewBox="0 0 576 512">\n    <path d="M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"></path>\n</symbol>\n<symbol id="icon-eye" viewBox="0 0 576 512">\n    <path d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path>\n</symbol>\n<symbol id="icon-eye-slash" viewBox="0 0 640 512">\n    <path d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"></path>\n</symbol>\n<symbol id="icon-gavel" viewBox="0 0 512 512">\n    <path d="M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"></path>\n</symbol>\n<symbol id="icon-globe" viewBox="0 0 496 512">\n    <path d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"></path>\n</symbol>\n<symbol id="icon-id-card" viewBox="0 0 576 512">\n    <path d="M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"></path>\n</symbol>\n<symbol id="icon-id-card-alt" viewBox="0 0 576 512">\n    <path d="M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"></path>\n</symbol>\n<symbol id="icon-info" viewBox="0 0 192 512">\n    <path d="M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"></path>\n</symbol>\n<symbol id="icon-info-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"></path>\n</symbol>\n<symbol id="icon-list-ul" viewBox="0 0 512 512">\n    <path d="M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-lock" viewBox="0 0 448 512">\n    <path d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path>\n</symbol>\n<symbol id="icon-lock-open" viewBox="0 0 576 512">\n    <path d="M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"></path>\n</symbol>\n<symbol id="icon-minus" viewBox="0 0 448 512">\n    <path d="M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-minus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"></path>\n</symbol>\n<symbol id="icon-minus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"></path>\n</symbol>\n<symbol id="icon-paper-plane" viewBox="0 0 512 512">\n    <path d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"></path>\n</symbol>\n<symbol id="icon-paperclip" viewBox="0 0 448 512">\n    <path d="M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"></path>\n</symbol>\n<symbol id="icon-pencil-alt" viewBox="0 0 512 512">\n    <path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"></path>\n</symbol>\n<symbol id="icon-phone" viewBox="0 0 512 512">\n    <path d="M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"></path>\n</symbol>\n<symbol id="icon-plus" viewBox="0 0 448 512">\n    <path d="M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-plus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-plus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-save" viewBox="0 0 448 512">\n    <path d="M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"></path>\n</symbol>\n<symbol id="icon-sign-out-alt" viewBox="0 0 512 512">\n    <path d="M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-smile" viewBox="0 0 496 512">\n    <path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"></path>\n</symbol>\n<symbol id="icon-snowflake" viewBox="0 0 448 512">\n    <path d="M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"></path>\n</symbol>\n<symbol id="icon-spinner" viewBox="0 0 512 512">\n    <path d="M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"></path>\n</symbol>\n<symbol id="icon-sync" viewBox="0 0 512 512">\n    <path d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"></path>\n</symbol>\n<symbol id="icon-times" viewBox="0 0 352 512">\n    <path d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>\n</symbol>\n<symbol id="icon-times-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"></path>\n</symbol>\n<symbol id="icon-trash" viewBox="0 0 448 512">\n    <path d="M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"></path>\n</symbol>\n<symbol id="icon-trash-alt" viewBox="0 0 448 512">\n    <path d="M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-unlock" viewBox="0 0 448 512">\n    <path d="M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"></path>\n</symbol>\n<symbol id="icon-user" viewBox="0 0 448 512">\n    <path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-cog" viewBox="0 0 640 512">\n    <path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path>\n</symbol>\n<symbol id="icon-user-plus" viewBox="0 0 640 512">\n    <path d="M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-secret" viewBox="0 0 448 512">\n    <path d="M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"></path>\n</symbol>\n<symbol id="icon-users" viewBox="0 0 640 512">\n    <path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path>\n</symbol>\n<symbol id="icon-wrench" viewBox="0 0 512 512">\n    <path d="M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"></path>\n</symbol>\n</svg>\n','\x3c!-- images/icons.svg --\x3e\n<?xml version="1.0" encoding="UTF-8"?>\n\x3c!--\nFont Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com\nLicense - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n--\x3e\n<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">\n<symbol id="icon-address-book" viewBox="0 0 448 512">\n    <path d="M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"></path>\n</symbol>\n<symbol id="icon-angle-double-down" viewBox="0 0 320 512">\n    <path d="M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"></path>\n</symbol>\n<symbol id="icon-angle-double-left" viewBox="0 0 448 512">\n    <path d="M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-double-right" viewBox="0 0 448 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"></path>\n</symbol>\n<symbol id="icon-angle-double-up" viewBox="0 0 320 512">\n    <path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-down" viewBox="0 0 320 512">\n    <path d="M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"></path>\n</symbol>\n<symbol id="icon-angle-left" viewBox="0 0 256 512">\n    <path d="M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"></path>\n</symbol>\n<symbol id="icon-angle-right" viewBox="0 0 256 512">\n    <path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>\n</symbol>\n<symbol id="icon-angle-up" viewBox="0 0 320 512">\n    <path d="M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"></path>\n</symbol>\n<symbol id="icon-arrow-alt-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-down" viewBox="0 0 512 512">\n    <path d="M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-left" viewBox="0 0 512 512">\n    <path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-right" viewBox="0 0 512 512">\n    <path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"></path>\n</symbol>\n<symbol id="icon-arrow-circle-up" viewBox="0 0 512 512">\n    <path d="M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-down" viewBox="0 0 448 512">\n    <path d="M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"></path>\n</symbol>\n<symbol id="icon-arrow-left" viewBox="0 0 448 512">\n    <path d="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-right" viewBox="0 0 448 512">\n    <path d="M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"></path>\n</symbol>\n<symbol id="icon-arrow-up" viewBox="0 0 448 512">\n    <path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path>\n</symbol>\n<symbol id="icon-arrows-alt" viewBox="0 0 512 512">\n    <path d="M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-h" viewBox="0 0 512 512">\n    <path d="M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"></path>\n</symbol>\n<symbol id="icon-arrows-alt-v" viewBox="0 0 256 512">\n    <path d="M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"></path>\n</symbol>\n<symbol id="icon-bars" viewBox="0 0 448 512">\n    <path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path>\n</symbol>\n<symbol id="icon-bookmark" viewBox="0 0 384 512">\n    <path d="M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"></path>\n</symbol>\n<symbol id="icon-caret-down" viewBox="0 0 320 512">\n    <path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"></path>\n</symbol>\n<symbol id="icon-caret-right" viewBox="0 0 192 512">\n    <path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"></path>\n</symbol>\n<symbol id="icon-check" viewBox="0 0 512 512">\n    <path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path>\n</symbol>\n<symbol id="icon-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"></path>\n</symbol>\n<symbol id="icon-cog" viewBox="0 0 512 512">\n    <path d="M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"></path>\n</symbol>\n<symbol id="icon-database" viewBox="0 0 448 512">\n    <path d="M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"></path>\n</symbol>\n<symbol id="icon-edit" viewBox="0 0 576 512">\n    <path d="M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"></path>\n</symbol>\n<symbol id="icon-eye" viewBox="0 0 576 512">\n    <path d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path>\n</symbol>\n<symbol id="icon-eye-slash" viewBox="0 0 640 512">\n    <path d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"></path>\n</symbol>\n<symbol id="icon-gavel" viewBox="0 0 512 512">\n    <path d="M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"></path>\n</symbol>\n<symbol id="icon-globe" viewBox="0 0 496 512">\n    <path d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"></path>\n</symbol>\n<symbol id="icon-id-card" viewBox="0 0 576 512">\n    <path d="M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"></path>\n</symbol>\n<symbol id="icon-id-card-alt" viewBox="0 0 576 512">\n    <path d="M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"></path>\n</symbol>\n<symbol id="icon-info" viewBox="0 0 192 512">\n    <path d="M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"></path>\n</symbol>\n<symbol id="icon-info-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"></path>\n</symbol>\n<symbol id="icon-list-ul" viewBox="0 0 512 512">\n    <path d="M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-lock" viewBox="0 0 448 512">\n    <path d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path>\n</symbol>\n<symbol id="icon-lock-open" viewBox="0 0 576 512">\n    <path d="M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"></path>\n</symbol>\n<symbol id="icon-minus" viewBox="0 0 448 512">\n    <path d="M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-minus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"></path>\n</symbol>\n<symbol id="icon-minus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"></path>\n</symbol>\n<symbol id="icon-paper-plane" viewBox="0 0 512 512">\n    <path d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"></path>\n</symbol>\n<symbol id="icon-paperclip" viewBox="0 0 448 512">\n    <path d="M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"></path>\n</symbol>\n<symbol id="icon-pencil-alt" viewBox="0 0 512 512">\n    <path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"></path>\n</symbol>\n<symbol id="icon-phone" viewBox="0 0 512 512">\n    <path d="M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"></path>\n</symbol>\n<symbol id="icon-plus" viewBox="0 0 448 512">\n    <path d="M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"></path>\n</symbol>\n<symbol id="icon-plus-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-plus-square" viewBox="0 0 448 512">\n    <path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"></path>\n</symbol>\n<symbol id="icon-save" viewBox="0 0 448 512">\n    <path d="M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"></path>\n</symbol>\n<symbol id="icon-sign-out-alt" viewBox="0 0 512 512">\n    <path d="M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"></path>\n</symbol>\n<symbol id="icon-smile" viewBox="0 0 496 512">\n    <path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"></path>\n</symbol>\n<symbol id="icon-snowflake" viewBox="0 0 448 512">\n    <path d="M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"></path>\n</symbol>\n<symbol id="icon-spinner" viewBox="0 0 512 512">\n    <path d="M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"></path>\n</symbol>\n<symbol id="icon-sync" viewBox="0 0 512 512">\n    <path d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"></path>\n</symbol>\n<symbol id="icon-times" viewBox="0 0 352 512">\n    <path d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>\n</symbol>\n<symbol id="icon-times-circle" viewBox="0 0 512 512">\n    <path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"></path>\n</symbol>\n<symbol id="icon-trash" viewBox="0 0 448 512">\n    <path d="M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"></path>\n</symbol>\n<symbol id="icon-trash-alt" viewBox="0 0 448 512">\n    <path d="M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"></path>\n</symbol>\n<symbol id="icon-unlock" viewBox="0 0 448 512">\n    <path d="M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"></path>\n</symbol>\n<symbol id="icon-user" viewBox="0 0 448 512">\n    <path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-cog" viewBox="0 0 640 512">\n    <path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path>\n</symbol>\n<symbol id="icon-user-plus" viewBox="0 0 640 512">\n    <path d="M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path>\n</symbol>\n<symbol id="icon-user-secret" viewBox="0 0 448 512">\n    <path d="M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"></path>\n</symbol>\n<symbol id="icon-users" viewBox="0 0 640 512">\n    <path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path>\n</symbol>\n<symbol id="icon-wrench" viewBox="0 0 512 512">\n    <path d="M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"></path>\n</symbol>\n</svg>\n'}}}]);
 //# sourceMappingURL=icons.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/af-LC_MESSAGES-converse-po.js b/src/conversejs/locales/af-LC_MESSAGES-converse-po.js
index 64fc2012ee0d772e50957bc276b6085283506e90..45f388fccca354a06ef84370aad5216827df5a41 100644
--- a/src/conversejs/locales/af-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/af-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{419:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"af"},"Create your account":["Skep u kontak"],"Please enter the XMPP provider to register with:":["Kies asb. die XMPP-bediener waarby u wil registreer:"],"Already have a chat account?":["Het u reeds \'n kletsrekening?"],"Log in here":["Meld hier aan"],"Account Registration:":["Registrasie:"],"Register":["Registreer"],"Choose a different provider":["Kies \'n ander aanbieder"],"Hold tight, we\'re fetching the registration form…":["Wag \'n bietjie, ons gaan haal die registrasievorm…"],"Cancel":["Kanseleer"],"The connection has dropped, attempting to reconnect.":["Die konneksie is onderbreek, probeer tans tans om te herkonnekteer."],"An error occurred while connecting to the chat server.":["A fout het voorgekom tydens verbinding met die gesprekbediener."],"Your XMPP address and/or password is incorrect. Please try again.":["U XMPP adres en/of wagwoord is verkeerd. Probeer asseblief weer."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Jammer, ons kon nie \'n verbinding met die XMPP domein \\"%1$s\\" opstel nie"],"The XMPP server did not offer a supported authentication mechanism":["Die XMPP bediener het nie \'n bruikbare verifikasiemeganisme aangebied nie"],"Undecryptable OMEMO message":["Onontsleutelbare OMEMO-boodskap"],"Sorry, could not determine upload URL.":["Jammer, kon nie die oplaai-adres bepaal nie."],"Sorry, could not determine file upload URL.":["Jammer, kon nie die lêer oplaai-adres bepaal nie."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Jammer, oplaai van u lêer het gefaal. Die bediener se terugvoer: \\"%1$s"],"Sorry, could not succesfully upload your file.":["Jammer, oplaai van u lêer het gefaal."],"You\'re not allowed to retract your message.":["U word nie toegelaat om u boodskap te herroep nie."],"Sorry, an error occurred while trying to retract your message.":["Jammer, \'n fout het voorgekom tydens die herroeping van u boodskap."],"You\'re not allowed to send a message.":["U word nie toegelaat om \'n boodskap te stuur nie."],"Sorry, an error occurred while trying to send your message.":["Jammer, \'n fout het voorgekom tydens die aanstuur van u boodskap."],"Sorry, looks like file upload is not supported by your server.":["Jammer, dit blyk asof lêer-oplaai nie deur u bediener ondersteun word nie."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Die grootte van u lêer, %1$s, oortref die maksimum grootte, %2$s, wat deur u bediener toegelaat word."],"Smileys and emotions":["Glimlaggies en emosies"],"People":["Mense"],"Activities":["Aktiwiteite"],"Travel":["Reis"],"Objects":["Objekte"],"Animals and nature":["Diere en natuur"],"Food and drink":["Spys en drank"],"Symbols":["Simbole"],"Flags":["Vlae"],"Stickers":["Plakkers"],"This groupchat is not anonymous":["Hierdie groepgesprek is nie anoniem nie"],"This groupchat now shows unavailable members":["Hierdie groepgesprek wys nou onbeskikbare lede"],"This groupchat does not show unavailable members":["Hierdie groepgesprek wys nie onbeskikbare lede nie"],"The groupchat configuration has changed":["Die groepgesprek se instellings het verander"],"Groupchat logging is now enabled":["Groepgesprek log is nou aangeskakel"],"Groupchat logging is now disabled":["Groepgesprek log is nou afgeskakel"],"This groupchat is now no longer anonymous":["Hiedie groepgesprek is nie meer anoniem nie"],"This groupchat is now semi-anonymous":["Hierdie groepgesprek is nou gedeeltelik anoniem"],"This groupchat is now fully-anonymous":["Hierdie groepgesprek is nou ten volle anoniem"],"A new groupchat has been created":["\'n Nuwe groepgesprek is geskep"],"Your nickname has been automatically set to %1$s":["U bynaam is outomaties gestel na %1$s"],"Your nickname has been changed to %1$s":["U bynaam is verander na %1$s"],"You have been banned from this groupchat":["Jy is uit die groepgesprek verban"],"You have exited this groupchat due to a technical problem":["U het hierdie groepgesprek verlaat weens \'n tegniese probleem"],"You have been kicked from this groupchat":["Jy is uit die groepgesprek geskop"],"You have been removed from this groupchat because of an affiliation change":["Jy is vanuit die groepgesprek verwyder a.g.v \'n verandering van affiliasie"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Jy is vanuit die groepgesprek verwyder omdat die groepgesprek nou slegs tot lede beperk word en jy nie \'n lid is nie"],"You have been removed from this groupchat because the service hosting it is being shut down":["U is van hierdie groepgesprek verwyder aangesien die MUC (Multi-user chat) diens nou afgeskakel word"],"Your retraction was not delivered because you\'re not present in the groupchat.":["U boodskap is nie afgelewer nie want u is nie tans teenwoordig in die groepgesprek nie."],"Your message was not delivered because you weren\'t allowed to send it.":["U boodskap is nie afgelewer nie want u word nie toegelaat om dit te stuur nie."],"Your message was not delivered because you\'re not present in the groupchat.":["U boodskap is nie afgelewer nie want u is nie tans in hierdie groepgesprek teenwoordig nie."],"A timeout happened while while trying to retract your message.":["Die tyd is verstreke tydens die herroeping van u boodskap."],"You\'re not allowed to register yourself in this groupchat.":["U het geen toestemming om uself in hierdie groepgesprek te registreer nie."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["U het geen toestemming om uself in hierdie groepgesprek te registreer nie, omdat dit slegs toeganklik vir lede is."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan nie u bynaam in hierdie groepgesprek registreer nie, dit word nie ondersteun nie."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan nie u bynaam in hierdie groepgesprek registreer nie, ongeldige data is ingevoer."],"Topic set by %1$s":["Onderwerp deur %1$s gestel"],"Topic cleared by %1$s":["Onderwerp verwyder deur %1$s"],"%1$s has been banned by %2$s":["%1$s is deur %2$s verban"],"%1$s has been banned":["%1$s is verban"],"%1$s\'s nickname has changed":["%1$s se bynaam het verander"],"%1$s has been kicked out by %2$s":["%1$s is uitgeskop deur %2$s"],"%1$s has been kicked out":["%1$s is uitgeskop"],"%1$s has been removed because of an affiliation change":["%1$s is verwyder a.g.v \'n verandering van affiliasie"],"%1$s has been removed for not being a member":["%1$s is nie \'n lid nie, en dus verwyder"],"%1$s is no longer an admin of this groupchat":["%1$s is nie meer \'n admin van hierdie groepgesprek nie"],"%1$s is no longer an owner of this groupchat":["%1$s is nie meer eienaar van hierdie groepgesprek nie"],"%1$s is no longer banned from this groupchat":["%1$s is nie meer verban uit hierdie groepgesprek nie"],"%1$s is no longer a member of this groupchat":["%1$s is nie meer \'n lid van hierdie groepgesprek nie"],"%1$s is now a member of this groupchat":["%1$s is nou \'n lid van hierdie groepgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nou \'n %2$s van hierdie groepgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Die bynaam wat u gekies het is gereserveer of tans in gebruik, kies asb. \'n ander een."],"Password incorrect":["Verkeerde wagwoord"],"You are not on the member list of this groupchat.":["Jy is nie op die ledelys van hierdie groepgesprek nie."],"You have been banned from this groupchat.":["Jy is uit die groepgesprek verban."],"You are not allowed to create new groupchats.":["U word nie toegelaat om nog groepgesprekke te skep nie."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["U bynaam voldoen nie aan die groepgesprek se beleid nie."],"This groupchat does not (yet) exist.":["Hierdie groepgesprek bestaan tans (nog) nie."],"This groupchat has reached its maximum number of participants.":["Hierdie groepgesprek het sy maksimum aantal deelnemers bereik."],"Remote server not found":["Afgeleë bediener nie gevind nie"],"The explanation given is: \\"%1$s\\".":["Die gegewe rede is: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s het u uitgenooi om die groepgesprek %2$s by te tree"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s het u uitgenooi om die groepgesprek %2$s by te tree, en het die volgende rede verskaf: \\"%3$s\\""],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Jammer, \'n fout het voorgekom tydens storing van u boekmerk."],"Timeout Error":["Tydverstreke-fout"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Die bediener het nie u boekmerke binne die toegelate tydperk teruggegee nie. U kan hierdie webbladd herlaai om opnuut te probeer."],"My contacts":["My kontakte"],"Pending contacts":["Afwagtende kontakte"],"Contact requests":["Kontakversoeke"],"Ungrouped":["Ongegroepeer"],"New messages":["Nuwe boodskappe"],"Sorry, there was an error while trying to add %1$s as a contact.":["Jammer, \'n fout het voorgekom tydens die toevoeging van %1$s as \'n kontak."],"This client does not allow presence subscriptions":["Hierdie kliënt bied geen ondersteuning vir teenwoordigheids-inskrywings"],"Click to hide these contacts":["Klik om hierdie kontakte te verskuil"],"Unbookmark this groupchat":["Verwyder hierdie groepgesprek"],"Click to open this groupchat":["Klik om hierdie groepgesprek te open"],"Click to toggle the bookmarks list":["Klik om die boekmerklys te skakel"],"Bookmarks":["Boekmerke"],"Bookmark this groupchat":["Boekmerk hierdie groepgesprek"],"Would you like this groupchat to be automatically joined upon startup?":["Betree outomaties hierdie groepgesprek sodra aangemeld"],"The name for this bookmark:":["Die naam vir hierdie boekmerk:"],"What should your nickname for this groupchat be?":["Wat sal u bynaam vir hierdie groepgesprek wees?"],"Save":["Stoor"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Is u seker u wil die boekmerk \\"%1$s\\" verwyder?"],"Unbookmark":["Verwyder boekmerk"],"Bookmark":["Boekmerk"],"Close":["Sluit"],"OK":["OK"],"Image: ":["Beeld: "],"Download audio file \\"%1$s\\"":["Laai oudio lêer af: \\"%1$s\\""],"Download file \\"%1$s\\"":["Laai lêer af: \\"%1$s\\""],"Cancel Editing":["Kanseleer Wysiging"],"Edit":["Wysig"],"Retract":["Herroep"],"Message versions":["Boodskap weergawes"],"Retry":[""],"Uploading file:":["Laai lêer tans op:"],"%1$s has removed this message":["%1$s het hierdie boodskap verwyder"],"This message has been edited":["Hierdie boodskap is gewysig"],"Show more":["Wys meer"],"Show less":["Wys minder"],"No message history available.":["Geen boodskappe beskikbaar."],"Search results":["Soekresultate"],"Search":["Soek"],"Insert emojis":["Voeg \'n emoji by"],"Send the message":["Stuur die boodskap"],"Start a call":["Begin \'n oproep"],"Message characters remaining":["Oorblywende letters"],"Hide participants":["Verskuil deelnemers"],"Show participants":["Wys deelnemers"],"Choose a file to send":["Kies \'n lêer om te stuur"],"Click to write as a normal (non-spoiler) message":["Klik om \'n gewone (nie-verskuilde) boodskap te skryf"],"Click to write your message as a spoiler":["Klik om \'n verskuilde boodskap te skryf"],"The User\'s Profile Image":["Die gebruiker se profielbeeld"],"Trusted":["Vertroud"],"Untrusted":["Onvertroud"],"OMEMO Fingerprints":["OMEMO vingerafdrukke"],"No OMEMO-enabled devices found":["Geen OMEMO-ondersteunende apparate gevind nie"],"Remove as contact":["Verwyder as kontak"],"XMPP Address":["XMPP-adres"],"Email":["E-pos"],"Full Name":["Volle Naam"],"Nickname":["Bynaam"],"Refresh":["Verfris"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s tik tans"],"%1$s has stopped typing":["%1$s het opgehou tik"],"%1$s has gone away":["%1$s het weggegaan"],"Remove messages":["Verwyder boodskappe"],"Close this chat":["Sluit hierdie klets"],"Write in the third person":["Skryf in die derde persoon"],"Show this menu":["Vertoon hierdie keuselys"],"Hidden message":["Verskuilde boodskap"],"Message":["Boodskap"],"Optional hint":["Opsionele wenk"],"You have unread messages":["U het ongelese boodskappe"],"Details":["Inligting"],"See more information about this person":["Sien meer inligting aangaande hierdie persoon"],"Close and end this conversation":["Verlaat en sluit hierdie groepgesprek"],"Sorry, the connection has been lost, and your message could not be sent":["Jammer, die verbinding is onderbreek, en u boodskap kon nie gestuur word nie"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Wees bedag dat ander XMPP/Jabber kliënte (en bedieners) dalk nog nie boodskap-herroepings ondersteun nie en dat hierdie boodskap nie noodwendig orals verwyder sal word nie."],"Are you sure you want to retract this message?":["Is u seker u wil hierdie boodskap herroep?"],"Confirm":["Bevestig"],"You have an unsent message which will be lost if you continue. Are you sure?":["U het \'n ongestuurde boodskap wat verlore sal gaan indien u voortgaan. Is u seker?"],"Are you sure you want to clear the messages from this conversation?":["Is u seker u wil die boodskappe in hierdie gesprek uitvee?"],"%1$s has gone offline":["%1$s is nou aflyn"],"%1$s is busy":["%1$s is besig"],"%1$s is online":["%1$s aangemeld"],"Sorry, something went wrong while trying to refresh":["Jammer, \'n fout het voorgekom tydens verfrissing"],"Are you sure you want to remove this contact?":["Is u seker u wil hierdie kontak verwyder?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Jammer, \'n fout het voorgekom tydens die verwydering van %1$s as \'n kontak."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Om prestasie te verbeter, stoor ons data in die kasgeheue van die webblaaier. Ontkruis hierdie aankruisvak indien hierdie \'n openbare rekenaar is, of indien u wil hê dat u data verwyder moet word na afmelding. Dit is belangrik dat u eksplisiet afmeld, anders mag al die data in kasgeheue nie verwyder word nie. Wees bedag, wanneer u \'n onvertroude toestel gebruik, dat OMEMO versleuteling nie moontlik is nie."],"This is a trusted device":["Hierdie toestel word vertrou"],"Password":["Wagwoord"],"Create an account":["Skep \'n rekening"],"Don\'t have a chat account?":["Het u nie \'n chat-rekening nie?"],"Log in":["Log in"],"Disconnected":["Ontkoppel"],"Click here to log in anonymously":["Klik hier om anoniem in te log"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Verskaf asseblief \'n geldige XMPP address"],"Chat Contacts":["Kontakte"],"Toggle chat":["Klets"],"Click to restore this chat":["Klik om hierdie klets te herstel"],"Minimized":["Geminimaliseer"],"Minimize":["Minimeer"],"Minimize this chat":["Minimeer hierdie kletskas"],"Minimize this groupchat":["Minimeer hierdie groepsgesprek"],"This field is required":["Hierdie veld is verpligtend"],"Join":["Betree"],"Enter a new Groupchat":["Betree \'n nuwe groepgesprek"],"name@conference.example.org":["naam@konferensie.voorbeeld.org"],"Groupchat name":["Groepgesprek-naam"],"Groupchat address":["groepgesprek-adres"],"Groupchat id is invalid.":["Groepsgesprek id is ongeldig."],"Invite":["Nooi uit"],"Invite someone to this groupchat":["Nooi iemand uit na hierdie groepsgesprek"],"user@example.org":["gebruiker@voorbeeld.org"],"Optional reason for the invitation":["Opsionele rede vir die uitnodiging"],"Show groupchats":["Wys groepgesprekke"],"Server address":["Bediener adres"],"Show more information on this groupchat":["Wys meer inligting aangaande hierdie groepgesprek"],"Query for Groupchats":["Soek vir groepgesprekke"],"Description:":["Beskrywing:"],"Groupchat Address (JID):":["Groepgesprek-adres (JID):"],"Participants:":["Deelnemers:"],"Features:":["Eienskappe:"],"Requires authentication":["Benodig magtiging"],"Hidden":["Verskuil"],"Requires an invitation":["Benodig \'n uitnodiging"],"Moderated":["Gemodereer"],"Non-anonymous":["Nie-anoniem"],"Open":["Oop"],"Permanent":["Permanent"],"Public":["Publiek"],"Semi-anonymous":["Deels anoniem"],"Temporary":["Tydelik"],"Unmoderated":["Ongemodereer"],"conference.example.org":["groepgesprekke.voorbeeld.org"],"Groupchats found":["Groepgesprekke gevind"],"No groupchats found":["Geen groepgesprekke gevind"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderators is bevoorregte gebruikers wat die rolle van ander gebruikers kan verander (uitsluitend diegene met admin or eienaar affiliasies)."],"The default role, implies that you can read and write messages.":["Die verstekrol, impliseer dat u boodskappe kan lees en skryf."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besoekers mag nie boodskappe skryf in \'n gemodereerde groepgesprek nie."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Eienaar is die hoogste affiliasie. Eienaars kan rolle en affiliasies van alle andere gebruikers verander."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin is die 2de hoogste affiliasie. Admins kan die rolle en affiliases van alle andere gebruikers behalwe eienaars verander."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Verban gebruiker deur sy affiliasie na uitgeworpene (\\"outcast\\") te verander."],"Change role":["Verander rol"],"New Role":["Nuwe Rol"],"Reason":["Rede"],"Change affiliation":["Verander affiliasie"],"New affiliation":["Nuwe affiliasie"],"Affiliation":["Affiliasie"],"Moderator Tools":["Moderator-werktuie"],"No users with that affiliation found.":["Geen gebruikers met daardie affiliasie gevind nie."],"No users with that role found.":["Geen gebruikers met daardie rol gevind nie."],"Type here to filter the search results":["Tik hier om die soekresultate te filtreer"],"Show users":["Wys gebruikers"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rolle word aan gebruikers toegeken om aan hulle sekere vermoeëns binne die konteks van \'n groepklets te verskaf of verwyder. Hulle kan eksplisiet toegewys word, óf implisiet as deel van \'n affiliasie. \'n Role wat nie implisiet as deel van \'n affiliasie toegeken is nie, is slegs geldig vir die huidige gebruikersessie."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["\'n Affiliasie is \'n blywende aanspraak wat gewoonlik \'n specifieke rol impliseer en sekere voorregte en verantwoordelikhede toeken.\\nByvoorbeeld, admins en eienaars het automaties die moderator rol."],"Timeout error while trying to set the affiliation":["Die tyd is verstreke tydens die instelling van die affiliasie"],"Sorry, you\'re not allowed to make that change":["Jammer, u word nie toegelaat om daardie verandering te maak nie"],"Sorry, something went wrong while trying to set the affiliation":["Jammer, \'n fout het voorgekom tydens instelling van die affiliasie"],"Affiliation changed":["Affiliasie verander"],"Role changed":["Rol verander"],"You\'re not allowed to make that change":["U word nie toegelaat om daardie verandering te maak nie"],"Sorry, something went wrong while trying to set the role":["Jammer, \'n fout het voorgekom tydens instelling van die rol"],"Topic":["Onderwerp"],"Topic author":["Outeur van onderwerp"],"Groupchat address (JID)":["Groepgesprek-adres (JID)"],"Message archiving":["Boodskap-argivering"],"Messages are archived on the server":["Boodskappe word gestoor op die bediener"],"Description":["Beskrywing"],"Features":["Eienskappe"],"This groupchat is not publicly searchable":["Hierdie groepgesprek is nie openbaar vindbaar nie"],"This groupchat is restricted to members only":["Hiedie groepgesprek is slegs toeganklik vir lede"],"Members only":["Slegs lede"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan hierdie groepgesprek het toestemming nodig om boodskappe te kan stuur"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Hiedie groepgesprek vereis nie \'n wagwoord voor toegang nie"],"No password required":["Geen wagwoord benodig"],"Not anonymous":["Nie-anoniem"],"All other groupchat participants can see your XMPP address":["All andere groepgesprek deelnemers kan u XMPP-adres sien"],"Not moderated":["Ongemodereer"],"Participants entering this groupchat can write right away":["Deelnemers aan hierdie groepgesprek kan onmiddelik boodskappe stuur"],"Online users":["Aanlyn gebruikers"],"Anyone can join this groupchat":["Enige iemand kan hierdie groepgesprek bytree"],"This groupchat requires a password before entry":["Hiedie groepgesprek vereis \'n wagwoord voor toegang"],"Password protected":["Beveilig met \'n wagwoord"],"Persistent":["Blywend"],"This groupchat persists even if it\'s unoccupied":["Hierdie groepgesprek bly bestaan, selfs as niemand aanwesig is nie"],"Only moderators can see your XMPP address":["Slegs moderators kan u XMPP-adres sien"],"This groupchat will disappear once the last person leaves":["Hierdie groepgesprek sal verdwyn sodra die laaste deelnemer dit verlaat het"],"This groupchat is publicly searchable":["Hierdie groepgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Kennisgewing van %1$s"],"You\'re not allowed to send messages in this room":["U het geen toestemming om boodskappe in hierdie groepgesprek te stuur nie"],"The conversation has moved. Click below to enter.":["Hierdie gesprek is verskuif. Klik hieronder om deel te neem."],"This groupchat no longer exists":["Hierdie groepgesprek bestaan nie meer nie"],"Hide the groupchat topic":["Verskuil die groepgesprek se onderwerp"],"This groupchat is bookmarked":["Hierdie groepgesprek is geboekmerk"],"Enter groupchat":["Betree groepgesprek"],"Choose a nickname to enter":["Kies \'n bynaam om in te voer"],"Please choose your nickname":["Kies asb. u bynaam"],"This groupchat requires a password":["Hiedie groepgesprek vereis \'n wagwoord"],"Password: ":["Wagwoord: "],"Submit":["Dien in"],"This user is a moderator.":["Hierdie gebruiker is \'n moderator."],"This user can send messages in this groupchat.":["Hierdie gebruiker kan boodskappe na die groepgesprek stuur."],"This user can NOT send messages in this groupchat.":["Hierdie gebruiker kan NIE boodskappe na die groepgesprek stuur nie."],"Owner":["Eienaar"],"Admin":["Admin"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Besoeker"],"Click to mention %1$s in your message.":["Klik om %1$s in u boodskap te noem."],"Participants":["Deelnemers"],"%1$s has entered the groupchat":["%1$s het die groepgesprek bygetree"],"%1$s has left the groupchat":["%1$s  het die groepgesprek verlaat"],"%1$s is now a moderator":["%1$s is nou \'n moderator"],"%1$s is no longer a moderator":["%1$s is nie meer \'n moderator nie"],"%1$s has been given a voice":["%1$s het nou \'n stem"],"%1$s has been muted":["%1$s is nou stemloos"],"%1$s and %2$s":["%1$s en %2$s"],"%1$s are typing":["%1$s tik tans"],"%1$s have stopped typing":["%1$s het opgehou tik"],"%1$s have gone away":["%1$s het weggegaan"],"%1$s have entered the groupchat":["%1$s het die groepgesprek bygetree"],"%1$s have left the groupchat":["%1$s het die groepgesprek verlaat"],"%1$s are now moderators":["%1$s is nou moderators"],"%1$s have been given voices":["%1$s het nou \'n stem"],"%1$s have been muted":["%1$s is nou stemloos"],"Change user\'s affiliation to admin":["Verander die gebruiker se affiliasie na admin"],"Ban user by changing their affiliation to outcast":["Verban die gebruiker deur sy affiliasie na uitgeworpene te verander"],"Clear the chat area":["Vee die kletsarea uit"],"Close this groupchat":["Sluit hierdie groepsgesprek"],"Change user role to participant":["Verander gebruiker se rol na lid"],"Remove this groupchat":["Verwyder hierdie groepgesprek"],"Kick user from groupchat":["Skop gebruiker uit hierdie groepgesprek"],"Write in 3rd person":["Skryf in die derde persoon"],"Grant membership to a user":["Verleen lidmaatskap aan \'n gebruiker"],"Opens up the moderator tools GUI":["Maak die moderator-werktuie oop"],"Remove user\'s ability to post messages":["Verwyder gebruiker se vermoë om boodskappe te plaas"],"Change your nickname":["Verander u bynaam"],"Grant moderator role to user":["Verleen moderator rol aan gebruiker"],"Grant ownership of this groupchat":["Verleen eienaarskap van hierdie groepgesprek"],"Register your nickname":["Registreer u bynaam"],"Revoke the user\'s current affiliation":["Herroep die gebruiker se affiliasie"],"Set groupchat subject":["Stel onderwerp vir groepgesprek"],"Set groupchat subject (alias for /subject)":["Stel groepgesprek onderwerp (alias vir /subject)"],"Allow muted user to post messages":["Laat stilgemaakte gebruiker toe om weer boodskappe te plaas"],"You are about to retract this message.":["U is op die punt om hierdie boodskap te herroep."],"You may optionally include a message, explaining the reason for the retraction.":["U kan opsioneel \'n verklaring insluit wat die rede vir die herroeping bevat."],"Message Retraction":["Boodskap Herroeping"],"Optional reason":["Opsionele rede"],"Sorry, you\'re not allowed to retract this message":["Jammer, u word nie toegelaat om die boodskap te herroep nie"],"A timeout occurred while trying to retract the message":["Die tyd is verstreke tydens die herroeping van die boodskap"],"Sorry, you\'re not allowed to retract this message.":["Jammer, u word nie toegelaat om die boodskap te herroep nie."],"Show more information about this groupchat":["Wys meer inligting aangaande hierdie groepgesprek"],"Configure":["Verstel"],"Configure this groupchat":["Verstel hierdie groepgesprek"],"Invite someone to join this groupchat":["Nooi iemand uit om hierdie groepsgesprek by te tree"],"Show topic":["Wys onderwerp"],"Hide topic":["Verskuil onderwerp"],"Show the topic message in the heading":["Wys onderwerp in die hoofstuk"],"Hide the topic in the heading":["Verskuil onderwerp in die hoofstuk"],"Moderate":["Modereer"],"Moderate this groupchat":["Modereer hierdie groepgesprek"],"Destroy":["Skrap"],"Leave":["Verlaat"],"Leave and close this groupchat":["Verlaat en sluit hierdie groepgesprek"],"Are you sure you want to leave this groupchat?":["Is u seker u wil hierdie groepgesprek verlaat?"],"Hide the list of participants":["Verskuil die lys van deelnemers"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toestemming: jy het nie die benodigde rol om dit te doen nie."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toestemming: jy het nie die benodigde affiliasie om dit te doen nie."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: die \\"%1$s\\" opdrag neem twee argumente, die gebruiker se bynaam en opsioneel daarby \'n rede."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: kon geen gesprekdeelnemer aanhand van u kriteria vind nie"],"Error: found multiple groupchat participant based on your arguments":["Fout: verskeie gesprek-deelnemers gevind gebaseer op die kriteria"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Kon nie \'n deelnemer met daardie bynaam vind nie. Hulle kon die groepgesprek verlaat het."],"Sorry, an error happened while running the command.":["Jammer, \'n fout het voorgekom tydens die uitvoering van die opdrag."],"Check your browser\'s developer console for details.":["U kan die webblaaier se ontwikkelaarkonsole bekyk vir foute."],"Are you sure you want to destroy this groupchat?":["Is u seker u wil hierdie groepgesprek skrap?"],"Please enter the XMPP address of this groupchat to confirm":["Voer asb. die XMPP-adres van hierdie groepklets in om te bevestig"],"name@example.org":["naam@voorbeeld.org"],"Optional reason for destroying this groupchat":["Opsionele rede waarom hierdie groepklets geskrap word"],"Optional XMPP address for a new groupchat that replaces this one":["Opsionele XMPP-adres van \'n nuwe groepklets wat hierdie een vervang"],"replacement@example.org":["naam@voorbeeld.org"],"Your nickname is \\"%1$s\\"":["U bynaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldige aantal argumente"],"This action was done by %1$s.":["Hierdie aksie is uitgevoer deur %1$s."],"The reason given is: \\"%1$s\\".":["Die gegewe rede is: \\"%1$s\\"."],"Groupchats":["Groepgesprekke"],"Add a new groupchat":["Voeg \'n nuwe groepgesprek by"],"Query for groupchats":["Soek vir groepgesprekke"],"Sorry, an error occurred while trying to submit the config form.":["A fout het voorgekom tydens indiening van die konfigurasievorm."],"Close these announcements":["Sluit hierdie aankondigints"],"Announcements":["Aankondigings"],"Click to open this server message":["Klik om hierdie bediener-boodskap te open"],"Notification from %1$s":["Kennisgewing van %1$s"],"%1$s says":["%1$s sê"],"has gone offline":["is nou aflyn"],"has gone away":["het weggegaan"],"is busy":["is besig"],"has come online":["het aanlyn gekom"],"wants to be your contact":["wil jou kontak wees"],"Hide":["Verskuil"],"Execute":["Voer uit"],"On which entity do you want to run commands?":["Watter entiteit moet hierdie opdragte uitvoer?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Sekere XMPP dienste en entiteite laat bevoorregte gebruikers toe om ad-hoc opdragte uit te voer."],"Commands found":["Opdragte gevind"],"List available commands":["Lys beskikbare opdragte"],"No commands found":["Geen opdragte gevind nie"],"Sorry, an error occurred while looking for commands on that entity.":["Jammer, \'n fout het voorgekom tydens die soektog na opdragte vir daardie entiteit."],"The specified entity doesn\'t support ad-hoc commands":["Die gekose entiteit ondersteun nie ad-hoc opdragte nie"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Jammer, \'n fout het voorgekom tydens die uitvoer van die opdrag. Sien die webblaaier se ontwikkelaarskonsole vir besonderhede."],"About":["Aangaande"],"Commands":["Opdragte"],"Settings":["Instellings"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Oopbron %2$s XMPP kletsprogram vrygestel deur %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaal %2$s dit in u eie taal"],"Log out":["Meld af"],"Click to change your chat status":["Klik om u kletsstatus te verander"],"Show details about this chat client":["Wys inligting aangaande hierdie kletsprogram"],"Your avatar image":["U profielbeeld"],"Checkbox for selecting the following fingerprint":["Aankruisvak om die volgende vingerafdruk te kies"],"Device without a fingerprint":["Toestel sonder \'n vingerafdruk"],"Checkbox for selecting the following device":["Aankruisvak om die volgende toestel te kies"],"Other OMEMO-enabled devices":["Ander OMEMO-ondersteunende apparate"],"Checkbox to select fingerprints of all other OMEMO devices":["Aankruisvak om vingerafdrukke van alle andere OMEMO-apparate te kies"],"Remove checked devices and close":["Verwyder gekose apparate en sluit"],"Select all":["Kies alle"],"This device\'s OMEMO fingerprint":["Hierdie toestel se OMEMO vingerafdruk"],"Generate new keys and fingerprint":["Genereer nuwe sleutels en vingerafdruk"],"Your Profile":["U profiel"],"XMPP Address (JID)":["Groepgesprek-adres (JID)"],"Save and close":["Stoor en sluit"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruik kommas om rolle te onderskei. Rolle word langs u naam op."],"OMEMO":["OMEMO"],"Profile":["Profiel"],"Sorry, an error happened while trying to save your profile data.":["Jammer, \'n fout het voorgekom tydens storing van u profieldata."],"You can check your browser\'s developer console for any error output.":["U kan die webblaaier se ontwikkelaarkonsole bekyk vir foute."],"Away":["Weg"],"Busy":["Besig"],"Custom status":["Aangepaste status"],"Offline":["Aflyn"],"Online":["Aangemeld"],"Away for long":["Weg vir langer"],"Change chat status":["Verander kletsstatus"],"Personal status message":["Persoonlike status-boodskap"],"I am %1$s":["Ek is %1$s"],"Are you sure you want to log out?":["Is u seker u wil afmeld?"],"online":["aangemeld"],"busy":["besig"],"away for long":["weg vir langer"],"away":["weg"],"offline":["afgemeld"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Jammer, kon nie \'n ontvangde OMEMO-boodskap ontsleutel nie."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s het blykbaar nie \'n kliënt wat OMEMO ondersteun nie. Vesleutelde boodskappe sal nie moontlik wees in hierdie groepgesprek nie."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Kan nie eind-tot-eind versleuteling in hierdie groepgesprek gebruik nie. Óf die groepgesprek het \'n vorm van anonimiteit, of nie alle deelnemers het ondersteuning vir OMEMO nie."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan nie eind-tot-eind versleuteling gebruik nie omdat %1$s \'n kliënt gebruik wat nie OMEMO kan ondersteun nie."],"Messages are being sent in plaintext":["Boodskappe word onversleutel gestuur"],"Messages are sent encrypted":["Boodskappe word versleuteld gestuur"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Om OMEMO versleuteling te ondersteun, moet hierdie groepklets nie anoniem wees nie, en beperk wees tot slegs lede"],"Sorry, an error occurred while trying to remove the devices.":["A fout het voorgekom tydens verwydering van die apparate."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Is u seker dat u nuwe OMEMO-sleutels wil genereer? Dit sal alle ou sleutels verwyder en alle voorheen versleutelde boodskappe sal nie meer ontsleutelbaar wees op hierdie toestel nie."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Jammer, ons kon nie \'n versleutelde boodskap stuur nie omdat %1$s vereis dat u ingeskryf is vir hulle teenwoordigheids-uitsendings sodat hulle OMEMO-informasie sigbaar is"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Jammer, ons kon nie \'n versleutelde boodskap stuur nie omdat die eksterne bediener vir %1$s nie gevind kon word nie"],"Unable to send an encrypted message due to an unexpected error.":["Kon nie \'n versleutelde boodskap stuur nie agv. \'n onverwagde fout."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Jammer, geen toestelle gevind waarheen ons \'n OMEMO-versleutelde boodskap kan stuur nie."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Hierdie is \'n OMEMO-versleutelde boodskap, wat u sagteware blykbaar nie ondersteun nie. Meer informasie by https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Haal die registrasie vorm"],"Tip: A list of public XMPP providers is available":["Wenk: \'n lys van openbare XMPP-bedieners is beskikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Jammer, ons kon nie \'n verbinding maak met u gekose bediener nie."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Jammer, die gekose bediener bied nie ondersteuning vir in-band registrasie nie. Probeer asb. \'n ander bediener."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Iets het foutgegaan tydens die opstelling van \'n verbinding met %1$s. Is u seker dit bestaan?"],"Now logging you in":["U word nou aangemeld"],"Registered successfully":["Suksesvol geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Die bediener het \'n registrasie-versoek afgeleun. Kontroleer u gegewe waardes vir korrektheid."],"Leave this groupchat":["Verlaat hierdie groepgesprek"],"Click to toggle the list of open groupchats":["Klik om die lys van oop groepgesprekke te vertoon/verskuil"],"Open Groupchats":["Oop Groepgesprekke"],"Are you sure you want to leave the groupchat %1$s?":["Is u seker u wil die groepgesprek \\"%1$s\\" verlaat?"],"Add":["Voeg by"],"Add a Contact":["Voeg \'n kontak by"],"This contact is busy":["Hierdie kontak is beset"],"This contact is online":["Die kontak is aangemeld"],"This contact is offline":["Die kontak is afgemeld"],"This contact is unavailable":["Hierdie kontak is nie beskikbaar nie"],"This contact is away for an extended period":["Hierdie kontak is vir \'n uitgebreide tyd afwesig"],"This contact is away":["Hierdie kontak is afwesig"],"Contact name":["Kontaknaam"],"Optional nickname":["Opsionele bynaam"],"Sorry, could not find a contact with that name":["Jammer, kon nie \'n kontak met daardie naam vind nie"],"This contact has already been added":["Hierdie kontak is reeds bygevoeg"],"Filter":["Filtreer"],"Filter by contact name":["Filtreer volgens kontaknaam"],"Filter by group name":["Filtreer volgens groepnaam"],"Filter by status":["Filtreer volgens status"],"Any":["Enige"],"Unread":["Ongelees"],"Chatty":["Spraaksaam"],"Extended Away":["Langer afwesig"],"Click to remove %1$s as a contact":["Klik om %1$s as kontak te verwyder"],"Click to accept the contact request from %1$s":["Klik om die kontakversoek van %1$s te aanvaar"],"Click to decline the contact request from %1$s":["Klik om die kontakversoek van %1$s te verwyder"],"Click to chat with %1$s (XMPP address: %2$s)":["Klik om te klets met %1$s (XMPP adres: %2$s)"],"Are you sure you want to decline this contact request?":["Is u seker dat u hierdie kontakversoek wil afleun?"],"Contacts":["Kontakte"],"Add a contact":["Voeg \'n kontak by"],"Re-sync your contacts":["Hersinkroniseer u kontakte"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{507:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"af"},"Create your account":["Skep u kontak"],"Please enter the XMPP provider to register with:":["Kies asb. die XMPP-bediener waarby u wil registreer:"],"Already have a chat account?":["Het u reeds \'n kletsrekening?"],"Log in here":["Meld hier aan"],"Account Registration:":["Registrasie:"],"Register":["Registreer"],"Choose a different provider":["Kies \'n ander aanbieder"],"Hold tight, we\'re fetching the registration form…":["Wag \'n bietjie, ons gaan haal die registrasievorm…"],"Cancel":["Kanseleer"],"The connection has dropped, attempting to reconnect.":["Die konneksie is onderbreek, probeer tans tans om te herkonnekteer."],"An error occurred while connecting to the chat server.":["A fout het voorgekom tydens verbinding met die gesprekbediener."],"Your XMPP address and/or password is incorrect. Please try again.":["U XMPP adres en/of wagwoord is verkeerd. Probeer asseblief weer."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Jammer, ons kon nie \'n verbinding met die XMPP domein \\"%1$s\\" opstel nie"],"The XMPP server did not offer a supported authentication mechanism":["Die XMPP bediener het nie \'n bruikbare verifikasiemeganisme aangebied nie"],"Undecryptable OMEMO message":["Onontsleutelbare OMEMO-boodskap"],"Sorry, could not determine upload URL.":["Jammer, kon nie die oplaai-adres bepaal nie."],"Sorry, could not determine file upload URL.":["Jammer, kon nie die lêer oplaai-adres bepaal nie."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Jammer, oplaai van u lêer het gefaal. Die bediener se terugvoer: \\"%1$s"],"Sorry, could not succesfully upload your file.":["Jammer, oplaai van u lêer het gefaal."],"You\'re not allowed to retract your message.":["U word nie toegelaat om u boodskap te herroep nie."],"Sorry, an error occurred while trying to retract your message.":["Jammer, \'n fout het voorgekom tydens die herroeping van u boodskap."],"You\'re not allowed to send a message.":["U word nie toegelaat om \'n boodskap te stuur nie."],"Sorry, an error occurred while trying to send your message.":["Jammer, \'n fout het voorgekom tydens die aanstuur van u boodskap."],"Sorry, looks like file upload is not supported by your server.":["Jammer, dit blyk asof lêer-oplaai nie deur u bediener ondersteun word nie."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Die grootte van u lêer, %1$s, oortref die maksimum grootte, %2$s, wat deur u bediener toegelaat word."],"Smileys and emotions":["Glimlaggies en emosies"],"People":["Mense"],"Activities":["Aktiwiteite"],"Travel":["Reis"],"Objects":["Objekte"],"Animals and nature":["Diere en natuur"],"Food and drink":["Spys en drank"],"Symbols":["Simbole"],"Flags":["Vlae"],"Stickers":["Plakkers"],"This groupchat is not anonymous":["Hierdie groepgesprek is nie anoniem nie"],"This groupchat now shows unavailable members":["Hierdie groepgesprek wys nou onbeskikbare lede"],"This groupchat does not show unavailable members":["Hierdie groepgesprek wys nie onbeskikbare lede nie"],"The groupchat configuration has changed":["Die groepgesprek se instellings het verander"],"Groupchat logging is now enabled":["Groepgesprek log is nou aangeskakel"],"Groupchat logging is now disabled":["Groepgesprek log is nou afgeskakel"],"This groupchat is now no longer anonymous":["Hiedie groepgesprek is nie meer anoniem nie"],"This groupchat is now semi-anonymous":["Hierdie groepgesprek is nou gedeeltelik anoniem"],"This groupchat is now fully-anonymous":["Hierdie groepgesprek is nou ten volle anoniem"],"A new groupchat has been created":["\'n Nuwe groepgesprek is geskep"],"Your nickname has been automatically set to %1$s":["U bynaam is outomaties gestel na %1$s"],"Your nickname has been changed to %1$s":["U bynaam is verander na %1$s"],"You have been banned from this groupchat":["Jy is uit die groepgesprek verban"],"You have exited this groupchat due to a technical problem":["U het hierdie groepgesprek verlaat weens \'n tegniese probleem"],"You have been kicked from this groupchat":["Jy is uit die groepgesprek geskop"],"You have been removed from this groupchat because of an affiliation change":["Jy is vanuit die groepgesprek verwyder a.g.v \'n verandering van affiliasie"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Jy is vanuit die groepgesprek verwyder omdat die groepgesprek nou slegs tot lede beperk word en jy nie \'n lid is nie"],"You have been removed from this groupchat because the service hosting it is being shut down":["U is van hierdie groepgesprek verwyder aangesien die MUC (Multi-user chat) diens nou afgeskakel word"],"Your retraction was not delivered because you\'re not present in the groupchat.":["U boodskap is nie afgelewer nie want u is nie tans teenwoordig in die groepgesprek nie."],"Your message was not delivered because you weren\'t allowed to send it.":["U boodskap is nie afgelewer nie want u word nie toegelaat om dit te stuur nie."],"Your message was not delivered because you\'re not present in the groupchat.":["U boodskap is nie afgelewer nie want u is nie tans in hierdie groepgesprek teenwoordig nie."],"A timeout happened while while trying to retract your message.":["Die tyd is verstreke tydens die herroeping van u boodskap."],"You\'re not allowed to register yourself in this groupchat.":["U het geen toestemming om uself in hierdie groepgesprek te registreer nie."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["U het geen toestemming om uself in hierdie groepgesprek te registreer nie, omdat dit slegs toeganklik vir lede is."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan nie u bynaam in hierdie groepgesprek registreer nie, dit word nie ondersteun nie."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan nie u bynaam in hierdie groepgesprek registreer nie, ongeldige data is ingevoer."],"Topic set by %1$s":["Onderwerp deur %1$s gestel"],"Topic cleared by %1$s":["Onderwerp verwyder deur %1$s"],"%1$s has been banned by %2$s":["%1$s is deur %2$s verban"],"%1$s has been banned":["%1$s is verban"],"%1$s\'s nickname has changed":["%1$s se bynaam het verander"],"%1$s has been kicked out by %2$s":["%1$s is uitgeskop deur %2$s"],"%1$s has been kicked out":["%1$s is uitgeskop"],"%1$s has been removed because of an affiliation change":["%1$s is verwyder a.g.v \'n verandering van affiliasie"],"%1$s has been removed for not being a member":["%1$s is nie \'n lid nie, en dus verwyder"],"%1$s is no longer an admin of this groupchat":["%1$s is nie meer \'n admin van hierdie groepgesprek nie"],"%1$s is no longer an owner of this groupchat":["%1$s is nie meer eienaar van hierdie groepgesprek nie"],"%1$s is no longer banned from this groupchat":["%1$s is nie meer verban uit hierdie groepgesprek nie"],"%1$s is no longer a member of this groupchat":["%1$s is nie meer \'n lid van hierdie groepgesprek nie"],"%1$s is now a member of this groupchat":["%1$s is nou \'n lid van hierdie groepgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nou \'n %2$s van hierdie groepgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Die bynaam wat u gekies het is gereserveer of tans in gebruik, kies asb. \'n ander een."],"Password incorrect":["Verkeerde wagwoord"],"You are not on the member list of this groupchat.":["Jy is nie op die ledelys van hierdie groepgesprek nie."],"You have been banned from this groupchat.":["Jy is uit die groepgesprek verban."],"You are not allowed to create new groupchats.":["U word nie toegelaat om nog groepgesprekke te skep nie."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["U bynaam voldoen nie aan die groepgesprek se beleid nie."],"This groupchat does not (yet) exist.":["Hierdie groepgesprek bestaan tans (nog) nie."],"This groupchat has reached its maximum number of participants.":["Hierdie groepgesprek het sy maksimum aantal deelnemers bereik."],"Remote server not found":["Afgeleë bediener nie gevind nie"],"The explanation given is: \\"%1$s\\".":["Die gegewe rede is: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s het u uitgenooi om die groepgesprek %2$s by te tree"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s het u uitgenooi om die groepgesprek %2$s by te tree, en het die volgende rede verskaf: \\"%3$s\\""],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Jammer, \'n fout het voorgekom tydens storing van u boekmerk."],"Timeout Error":["Tydverstreke-fout"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Die bediener het nie u boekmerke binne die toegelate tydperk teruggegee nie. U kan hierdie webbladd herlaai om opnuut te probeer."],"My contacts":["My kontakte"],"Pending contacts":["Afwagtende kontakte"],"Contact requests":["Kontakversoeke"],"Ungrouped":["Ongegroepeer"],"New messages":["Nuwe boodskappe"],"Sorry, there was an error while trying to add %1$s as a contact.":["Jammer, \'n fout het voorgekom tydens die toevoeging van %1$s as \'n kontak."],"This client does not allow presence subscriptions":["Hierdie kliënt bied geen ondersteuning vir teenwoordigheids-inskrywings"],"Click to hide these contacts":["Klik om hierdie kontakte te verskuil"],"Unbookmark this groupchat":["Verwyder hierdie groepgesprek"],"Click to open this groupchat":["Klik om hierdie groepgesprek te open"],"Click to toggle the bookmarks list":["Klik om die boekmerklys te skakel"],"Bookmarks":["Boekmerke"],"Bookmark this groupchat":["Boekmerk hierdie groepgesprek"],"Would you like this groupchat to be automatically joined upon startup?":["Betree outomaties hierdie groepgesprek sodra aangemeld"],"The name for this bookmark:":["Die naam vir hierdie boekmerk:"],"What should your nickname for this groupchat be?":["Wat sal u bynaam vir hierdie groepgesprek wees?"],"Save":["Stoor"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Is u seker u wil die boekmerk \\"%1$s\\" verwyder?"],"Unbookmark":["Verwyder boekmerk"],"Bookmark":["Boekmerk"],"Close":["Sluit"],"OK":["OK"],"Image: ":["Beeld: "],"Download audio file \\"%1$s\\"":["Laai oudio lêer af: \\"%1$s\\""],"Download file \\"%1$s\\"":["Laai lêer af: \\"%1$s\\""],"Cancel Editing":["Kanseleer Wysiging"],"Edit":["Wysig"],"Retract":["Herroep"],"Message versions":["Boodskap weergawes"],"Retry":[""],"Uploading file:":["Laai lêer tans op:"],"%1$s has removed this message":["%1$s het hierdie boodskap verwyder"],"This message has been edited":["Hierdie boodskap is gewysig"],"Show more":["Wys meer"],"Show less":["Wys minder"],"No message history available.":["Geen boodskappe beskikbaar."],"Search results":["Soekresultate"],"Search":["Soek"],"Insert emojis":["Voeg \'n emoji by"],"Send the message":["Stuur die boodskap"],"Start a call":["Begin \'n oproep"],"Message characters remaining":["Oorblywende letters"],"Hide participants":["Verskuil deelnemers"],"Show participants":["Wys deelnemers"],"Choose a file to send":["Kies \'n lêer om te stuur"],"Click to write as a normal (non-spoiler) message":["Klik om \'n gewone (nie-verskuilde) boodskap te skryf"],"Click to write your message as a spoiler":["Klik om \'n verskuilde boodskap te skryf"],"The User\'s Profile Image":["Die gebruiker se profielbeeld"],"Trusted":["Vertroud"],"Untrusted":["Onvertroud"],"OMEMO Fingerprints":["OMEMO vingerafdrukke"],"No OMEMO-enabled devices found":["Geen OMEMO-ondersteunende apparate gevind nie"],"Remove as contact":["Verwyder as kontak"],"XMPP Address":["XMPP-adres"],"Email":["E-pos"],"Full Name":["Volle Naam"],"Nickname":["Bynaam"],"Refresh":["Verfris"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s tik tans"],"%1$s has stopped typing":["%1$s het opgehou tik"],"%1$s has gone away":["%1$s het weggegaan"],"Remove messages":["Verwyder boodskappe"],"Close this chat":["Sluit hierdie klets"],"Write in the third person":["Skryf in die derde persoon"],"Show this menu":["Vertoon hierdie keuselys"],"Hidden message":["Verskuilde boodskap"],"Message":["Boodskap"],"Optional hint":["Opsionele wenk"],"You have unread messages":["U het ongelese boodskappe"],"Details":["Inligting"],"See more information about this person":["Sien meer inligting aangaande hierdie persoon"],"Close and end this conversation":["Verlaat en sluit hierdie groepgesprek"],"Sorry, the connection has been lost, and your message could not be sent":["Jammer, die verbinding is onderbreek, en u boodskap kon nie gestuur word nie"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Wees bedag dat ander XMPP/Jabber kliënte (en bedieners) dalk nog nie boodskap-herroepings ondersteun nie en dat hierdie boodskap nie noodwendig orals verwyder sal word nie."],"Are you sure you want to retract this message?":["Is u seker u wil hierdie boodskap herroep?"],"Confirm":["Bevestig"],"You have an unsent message which will be lost if you continue. Are you sure?":["U het \'n ongestuurde boodskap wat verlore sal gaan indien u voortgaan. Is u seker?"],"Are you sure you want to clear the messages from this conversation?":["Is u seker u wil die boodskappe in hierdie gesprek uitvee?"],"%1$s has gone offline":["%1$s is nou aflyn"],"%1$s is busy":["%1$s is besig"],"%1$s is online":["%1$s aangemeld"],"Sorry, something went wrong while trying to refresh":["Jammer, \'n fout het voorgekom tydens verfrissing"],"Are you sure you want to remove this contact?":["Is u seker u wil hierdie kontak verwyder?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Jammer, \'n fout het voorgekom tydens die verwydering van %1$s as \'n kontak."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Om prestasie te verbeter, stoor ons data in die kasgeheue van die webblaaier. Ontkruis hierdie aankruisvak indien hierdie \'n openbare rekenaar is, of indien u wil hê dat u data verwyder moet word na afmelding. Dit is belangrik dat u eksplisiet afmeld, anders mag al die data in kasgeheue nie verwyder word nie. Wees bedag, wanneer u \'n onvertroude toestel gebruik, dat OMEMO versleuteling nie moontlik is nie."],"This is a trusted device":["Hierdie toestel word vertrou"],"Password":["Wagwoord"],"Create an account":["Skep \'n rekening"],"Don\'t have a chat account?":["Het u nie \'n chat-rekening nie?"],"Log in":["Log in"],"Disconnected":["Ontkoppel"],"Click here to log in anonymously":["Klik hier om anoniem in te log"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Verskaf asseblief \'n geldige XMPP address"],"Chat Contacts":["Kontakte"],"Toggle chat":["Klets"],"Click to restore this chat":["Klik om hierdie klets te herstel"],"Minimized":["Geminimaliseer"],"Minimize":["Minimeer"],"Minimize this chat":["Minimeer hierdie kletskas"],"Minimize this groupchat":["Minimeer hierdie groepsgesprek"],"This user is a moderator.":["Hierdie gebruiker is \'n moderator."],"This user can send messages in this groupchat.":["Hierdie gebruiker kan boodskappe na die groepgesprek stuur."],"This user can NOT send messages in this groupchat.":["Hierdie gebruiker kan NIE boodskappe na die groepgesprek stuur nie."],"Owner":["Eienaar"],"Admin":["Admin"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Besoeker"],"Click to mention %1$s in your message.":["Klik om %1$s in u boodskap te noem."],"Participants":["Deelnemers"],"This field is required":["Hierdie veld is verpligtend"],"Join":["Betree"],"Enter a new Groupchat":["Betree \'n nuwe groepgesprek"],"name@conference.example.org":["naam@konferensie.voorbeeld.org"],"Groupchat name":["Groepgesprek-naam"],"Groupchat address":["groepgesprek-adres"],"Groupchat id is invalid.":["Groepsgesprek id is ongeldig."],"Invite":["Nooi uit"],"Invite someone to this groupchat":["Nooi iemand uit na hierdie groepsgesprek"],"user@example.org":["gebruiker@voorbeeld.org"],"Optional reason for the invitation":["Opsionele rede vir die uitnodiging"],"Show groupchats":["Wys groepgesprekke"],"Server address":["Bediener adres"],"Show more information on this groupchat":["Wys meer inligting aangaande hierdie groepgesprek"],"Query for Groupchats":["Soek vir groepgesprekke"],"Description:":["Beskrywing:"],"Groupchat Address (JID):":["Groepgesprek-adres (JID):"],"Participants:":["Deelnemers:"],"Features:":["Eienskappe:"],"Requires authentication":["Benodig magtiging"],"Hidden":["Verskuil"],"Requires an invitation":["Benodig \'n uitnodiging"],"Moderated":["Gemodereer"],"Non-anonymous":["Nie-anoniem"],"Open":["Oop"],"Permanent":["Permanent"],"Public":["Publiek"],"Semi-anonymous":["Deels anoniem"],"Temporary":["Tydelik"],"Unmoderated":["Ongemodereer"],"conference.example.org":["groepgesprekke.voorbeeld.org"],"Groupchats found":["Groepgesprekke gevind"],"No groupchats found":["Geen groepgesprekke gevind"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderators is bevoorregte gebruikers wat die rolle van ander gebruikers kan verander (uitsluitend diegene met admin or eienaar affiliasies)."],"The default role, implies that you can read and write messages.":["Die verstekrol, impliseer dat u boodskappe kan lees en skryf."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besoekers mag nie boodskappe skryf in \'n gemodereerde groepgesprek nie."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Eienaar is die hoogste affiliasie. Eienaars kan rolle en affiliasies van alle andere gebruikers verander."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin is die 2de hoogste affiliasie. Admins kan die rolle en affiliases van alle andere gebruikers behalwe eienaars verander."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Verban gebruiker deur sy affiliasie na uitgeworpene (\\"outcast\\") te verander."],"Change role":["Verander rol"],"New Role":["Nuwe Rol"],"Reason":["Rede"],"Change affiliation":["Verander affiliasie"],"New affiliation":["Nuwe affiliasie"],"Affiliation":["Affiliasie"],"Moderator Tools":["Moderator-werktuie"],"No users with that affiliation found.":["Geen gebruikers met daardie affiliasie gevind nie."],"No users with that role found.":["Geen gebruikers met daardie rol gevind nie."],"Type here to filter the search results":["Tik hier om die soekresultate te filtreer"],"Show users":["Wys gebruikers"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rolle word aan gebruikers toegeken om aan hulle sekere vermoeëns binne die konteks van \'n groepklets te verskaf of verwyder. Hulle kan eksplisiet toegewys word, óf implisiet as deel van \'n affiliasie. \'n Role wat nie implisiet as deel van \'n affiliasie toegeken is nie, is slegs geldig vir die huidige gebruikersessie."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["\'n Affiliasie is \'n blywende aanspraak wat gewoonlik \'n specifieke rol impliseer en sekere voorregte en verantwoordelikhede toeken.\\nByvoorbeeld, admins en eienaars het automaties die moderator rol."],"Timeout error while trying to set the affiliation":["Die tyd is verstreke tydens die instelling van die affiliasie"],"Sorry, you\'re not allowed to make that change":["Jammer, u word nie toegelaat om daardie verandering te maak nie"],"Sorry, something went wrong while trying to set the affiliation":["Jammer, \'n fout het voorgekom tydens instelling van die affiliasie"],"Affiliation changed":["Affiliasie verander"],"Role changed":["Rol verander"],"You\'re not allowed to make that change":["U word nie toegelaat om daardie verandering te maak nie"],"Sorry, something went wrong while trying to set the role":["Jammer, \'n fout het voorgekom tydens instelling van die rol"],"Topic":["Onderwerp"],"Topic author":["Outeur van onderwerp"],"Groupchat address (JID)":["Groepgesprek-adres (JID)"],"Message archiving":["Boodskap-argivering"],"Messages are archived on the server":["Boodskappe word gestoor op die bediener"],"Description":["Beskrywing"],"Features":["Eienskappe"],"This groupchat is not publicly searchable":["Hierdie groepgesprek is nie openbaar vindbaar nie"],"This groupchat is restricted to members only":["Hiedie groepgesprek is slegs toeganklik vir lede"],"Members only":["Slegs lede"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan hierdie groepgesprek het toestemming nodig om boodskappe te kan stuur"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Hiedie groepgesprek vereis nie \'n wagwoord voor toegang nie"],"No password required":["Geen wagwoord benodig"],"Not anonymous":["Nie-anoniem"],"All other groupchat participants can see your XMPP address":["All andere groepgesprek deelnemers kan u XMPP-adres sien"],"Not moderated":["Ongemodereer"],"Participants entering this groupchat can write right away":["Deelnemers aan hierdie groepgesprek kan onmiddelik boodskappe stuur"],"Online users":["Aanlyn gebruikers"],"Anyone can join this groupchat":["Enige iemand kan hierdie groepgesprek bytree"],"This groupchat requires a password before entry":["Hiedie groepgesprek vereis \'n wagwoord voor toegang"],"Password protected":["Beveilig met \'n wagwoord"],"Persistent":["Blywend"],"This groupchat persists even if it\'s unoccupied":["Hierdie groepgesprek bly bestaan, selfs as niemand aanwesig is nie"],"Only moderators can see your XMPP address":["Slegs moderators kan u XMPP-adres sien"],"This groupchat will disappear once the last person leaves":["Hierdie groepgesprek sal verdwyn sodra die laaste deelnemer dit verlaat het"],"This groupchat is publicly searchable":["Hierdie groepgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Kennisgewing van %1$s"],"You\'re not allowed to send messages in this room":["U het geen toestemming om boodskappe in hierdie groepgesprek te stuur nie"],"The conversation has moved. Click below to enter.":["Hierdie gesprek is verskuif. Klik hieronder om deel te neem."],"This groupchat no longer exists":["Hierdie groepgesprek bestaan nie meer nie"],"Hide the groupchat topic":["Verskuil die groepgesprek se onderwerp"],"This groupchat is bookmarked":["Hierdie groepgesprek is geboekmerk"],"Enter groupchat":["Betree groepgesprek"],"Choose a nickname to enter":["Kies \'n bynaam om in te voer"],"Please choose your nickname":["Kies asb. u bynaam"],"This groupchat requires a password":["Hiedie groepgesprek vereis \'n wagwoord"],"Password: ":["Wagwoord: "],"Submit":["Dien in"],"%1$s has entered the groupchat":["%1$s het die groepgesprek bygetree"],"%1$s has left the groupchat":["%1$s  het die groepgesprek verlaat"],"%1$s is now a moderator":["%1$s is nou \'n moderator"],"%1$s is no longer a moderator":["%1$s is nie meer \'n moderator nie"],"%1$s has been given a voice":["%1$s het nou \'n stem"],"%1$s has been muted":["%1$s is nou stemloos"],"%1$s and %2$s":["%1$s en %2$s"],"%1$s are typing":["%1$s tik tans"],"%1$s have stopped typing":["%1$s het opgehou tik"],"%1$s have gone away":["%1$s het weggegaan"],"%1$s have entered the groupchat":["%1$s het die groepgesprek bygetree"],"%1$s have left the groupchat":["%1$s het die groepgesprek verlaat"],"%1$s are now moderators":["%1$s is nou moderators"],"%1$s have been given voices":["%1$s het nou \'n stem"],"%1$s have been muted":["%1$s is nou stemloos"],"Change user\'s affiliation to admin":["Verander die gebruiker se affiliasie na admin"],"Ban user by changing their affiliation to outcast":["Verban die gebruiker deur sy affiliasie na uitgeworpene te verander"],"Clear the chat area":["Vee die kletsarea uit"],"Close this groupchat":["Sluit hierdie groepsgesprek"],"Change user role to participant":["Verander gebruiker se rol na lid"],"Remove this groupchat":["Verwyder hierdie groepgesprek"],"Kick user from groupchat":["Skop gebruiker uit hierdie groepgesprek"],"Write in 3rd person":["Skryf in die derde persoon"],"Grant membership to a user":["Verleen lidmaatskap aan \'n gebruiker"],"Opens up the moderator tools GUI":["Maak die moderator-werktuie oop"],"Remove user\'s ability to post messages":["Verwyder gebruiker se vermoë om boodskappe te plaas"],"Change your nickname":["Verander u bynaam"],"Grant moderator role to user":["Verleen moderator rol aan gebruiker"],"Grant ownership of this groupchat":["Verleen eienaarskap van hierdie groepgesprek"],"Register your nickname":["Registreer u bynaam"],"Revoke the user\'s current affiliation":["Herroep die gebruiker se affiliasie"],"Set groupchat subject":["Stel onderwerp vir groepgesprek"],"Set groupchat subject (alias for /subject)":["Stel groepgesprek onderwerp (alias vir /subject)"],"Allow muted user to post messages":["Laat stilgemaakte gebruiker toe om weer boodskappe te plaas"],"You are about to retract this message.":["U is op die punt om hierdie boodskap te herroep."],"You may optionally include a message, explaining the reason for the retraction.":["U kan opsioneel \'n verklaring insluit wat die rede vir die herroeping bevat."],"Message Retraction":["Boodskap Herroeping"],"Optional reason":["Opsionele rede"],"Sorry, you\'re not allowed to retract this message":["Jammer, u word nie toegelaat om die boodskap te herroep nie"],"A timeout occurred while trying to retract the message":["Die tyd is verstreke tydens die herroeping van die boodskap"],"Sorry, you\'re not allowed to retract this message.":["Jammer, u word nie toegelaat om die boodskap te herroep nie."],"Show more information about this groupchat":["Wys meer inligting aangaande hierdie groepgesprek"],"Configure":["Verstel"],"Configure this groupchat":["Verstel hierdie groepgesprek"],"Invite someone to join this groupchat":["Nooi iemand uit om hierdie groepsgesprek by te tree"],"Show topic":["Wys onderwerp"],"Hide topic":["Verskuil onderwerp"],"Show the topic message in the heading":["Wys onderwerp in die hoofstuk"],"Hide the topic in the heading":["Verskuil onderwerp in die hoofstuk"],"Moderate":["Modereer"],"Moderate this groupchat":["Modereer hierdie groepgesprek"],"Destroy":["Skrap"],"Leave":["Verlaat"],"Leave and close this groupchat":["Verlaat en sluit hierdie groepgesprek"],"Are you sure you want to leave this groupchat?":["Is u seker u wil hierdie groepgesprek verlaat?"],"Hide the list of participants":["Verskuil die lys van deelnemers"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toestemming: jy het nie die benodigde rol om dit te doen nie."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toestemming: jy het nie die benodigde affiliasie om dit te doen nie."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: die \\"%1$s\\" opdrag neem twee argumente, die gebruiker se bynaam en opsioneel daarby \'n rede."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: kon geen gesprekdeelnemer aanhand van u kriteria vind nie"],"Error: found multiple groupchat participant based on your arguments":["Fout: verskeie gesprek-deelnemers gevind gebaseer op die kriteria"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Kon nie \'n deelnemer met daardie bynaam vind nie. Hulle kon die groepgesprek verlaat het."],"Sorry, an error happened while running the command.":["Jammer, \'n fout het voorgekom tydens die uitvoering van die opdrag."],"Check your browser\'s developer console for details.":["U kan die webblaaier se ontwikkelaarkonsole bekyk vir foute."],"Are you sure you want to destroy this groupchat?":["Is u seker u wil hierdie groepgesprek skrap?"],"Please enter the XMPP address of this groupchat to confirm":["Voer asb. die XMPP-adres van hierdie groepklets in om te bevestig"],"name@example.org":["naam@voorbeeld.org"],"Optional reason for destroying this groupchat":["Opsionele rede waarom hierdie groepklets geskrap word"],"Optional XMPP address for a new groupchat that replaces this one":["Opsionele XMPP-adres van \'n nuwe groepklets wat hierdie een vervang"],"replacement@example.org":["naam@voorbeeld.org"],"Your nickname is \\"%1$s\\"":["U bynaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldige aantal argumente"],"This action was done by %1$s.":["Hierdie aksie is uitgevoer deur %1$s."],"The reason given is: \\"%1$s\\".":["Die gegewe rede is: \\"%1$s\\"."],"Groupchats":["Groepgesprekke"],"Add a new groupchat":["Voeg \'n nuwe groepgesprek by"],"Query for groupchats":["Soek vir groepgesprekke"],"Sorry, an error occurred while trying to submit the config form.":["A fout het voorgekom tydens indiening van die konfigurasievorm."],"Close these announcements":["Sluit hierdie aankondigints"],"Announcements":["Aankondigings"],"Click to open this server message":["Klik om hierdie bediener-boodskap te open"],"Notification from %1$s":["Kennisgewing van %1$s"],"%1$s says":["%1$s sê"],"has gone offline":["is nou aflyn"],"has gone away":["het weggegaan"],"is busy":["is besig"],"has come online":["het aanlyn gekom"],"wants to be your contact":["wil jou kontak wees"],"Hide":["Verskuil"],"Execute":["Voer uit"],"On which entity do you want to run commands?":["Watter entiteit moet hierdie opdragte uitvoer?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Sekere XMPP dienste en entiteite laat bevoorregte gebruikers toe om ad-hoc opdragte uit te voer."],"Commands found":["Opdragte gevind"],"List available commands":["Lys beskikbare opdragte"],"No commands found":["Geen opdragte gevind nie"],"Sorry, an error occurred while looking for commands on that entity.":["Jammer, \'n fout het voorgekom tydens die soektog na opdragte vir daardie entiteit."],"The specified entity doesn\'t support ad-hoc commands":["Die gekose entiteit ondersteun nie ad-hoc opdragte nie"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Jammer, \'n fout het voorgekom tydens die uitvoer van die opdrag. Sien die webblaaier se ontwikkelaarskonsole vir besonderhede."],"About":["Aangaande"],"Commands":["Opdragte"],"Settings":["Instellings"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Oopbron %2$s XMPP kletsprogram vrygestel deur %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaal %2$s dit in u eie taal"],"Log out":["Meld af"],"Click to change your chat status":["Klik om u kletsstatus te verander"],"Show details about this chat client":["Wys inligting aangaande hierdie kletsprogram"],"Your avatar image":["U profielbeeld"],"Checkbox for selecting the following fingerprint":["Aankruisvak om die volgende vingerafdruk te kies"],"Device without a fingerprint":["Toestel sonder \'n vingerafdruk"],"Checkbox for selecting the following device":["Aankruisvak om die volgende toestel te kies"],"Other OMEMO-enabled devices":["Ander OMEMO-ondersteunende apparate"],"Checkbox to select fingerprints of all other OMEMO devices":["Aankruisvak om vingerafdrukke van alle andere OMEMO-apparate te kies"],"Remove checked devices and close":["Verwyder gekose apparate en sluit"],"Select all":["Kies alle"],"This device\'s OMEMO fingerprint":["Hierdie toestel se OMEMO vingerafdruk"],"Generate new keys and fingerprint":["Genereer nuwe sleutels en vingerafdruk"],"Your Profile":["U profiel"],"XMPP Address (JID)":["Groepgesprek-adres (JID)"],"Save and close":["Stoor en sluit"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruik kommas om rolle te onderskei. Rolle word langs u naam op."],"OMEMO":["OMEMO"],"Profile":["Profiel"],"Sorry, an error happened while trying to save your profile data.":["Jammer, \'n fout het voorgekom tydens storing van u profieldata."],"You can check your browser\'s developer console for any error output.":["U kan die webblaaier se ontwikkelaarkonsole bekyk vir foute."],"Away":["Weg"],"Busy":["Besig"],"Custom status":["Aangepaste status"],"Offline":["Aflyn"],"Online":["Aangemeld"],"Away for long":["Weg vir langer"],"Change chat status":["Verander kletsstatus"],"Personal status message":["Persoonlike status-boodskap"],"I am %1$s":["Ek is %1$s"],"Are you sure you want to log out?":["Is u seker u wil afmeld?"],"online":["aangemeld"],"busy":["besig"],"away for long":["weg vir langer"],"away":["weg"],"offline":["afgemeld"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Jammer, kon nie \'n ontvangde OMEMO-boodskap ontsleutel nie."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s het blykbaar nie \'n kliënt wat OMEMO ondersteun nie. Vesleutelde boodskappe sal nie moontlik wees in hierdie groepgesprek nie."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Kan nie eind-tot-eind versleuteling in hierdie groepgesprek gebruik nie. Óf die groepgesprek het \'n vorm van anonimiteit, of nie alle deelnemers het ondersteuning vir OMEMO nie."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan nie eind-tot-eind versleuteling gebruik nie omdat %1$s \'n kliënt gebruik wat nie OMEMO kan ondersteun nie."],"Messages are being sent in plaintext":["Boodskappe word onversleutel gestuur"],"Messages are sent encrypted":["Boodskappe word versleuteld gestuur"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Om OMEMO versleuteling te ondersteun, moet hierdie groepklets nie anoniem wees nie, en beperk wees tot slegs lede"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Jammer, ons kon nie \'n versleutelde boodskap stuur nie omdat %1$s vereis dat u ingeskryf is vir hulle teenwoordigheids-uitsendings sodat hulle OMEMO-informasie sigbaar is"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Jammer, ons kon nie \'n versleutelde boodskap stuur nie omdat die eksterne bediener vir %1$s nie gevind kon word nie"],"Unable to send an encrypted message due to an unexpected error.":["Kon nie \'n versleutelde boodskap stuur nie agv. \'n onverwagde fout."],"Sorry, an error occurred while trying to remove the devices.":["A fout het voorgekom tydens verwydering van die apparate."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Is u seker dat u nuwe OMEMO-sleutels wil genereer? Dit sal alle ou sleutels verwyder en alle voorheen versleutelde boodskappe sal nie meer ontsleutelbaar wees op hierdie toestel nie."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Jammer, geen toestelle gevind waarheen ons \'n OMEMO-versleutelde boodskap kan stuur nie."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Hierdie is \'n OMEMO-versleutelde boodskap, wat u sagteware blykbaar nie ondersteun nie. Meer informasie by https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Haal die registrasie vorm"],"Tip: A list of public XMPP providers is available":["Wenk: \'n lys van openbare XMPP-bedieners is beskikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Jammer, ons kon nie \'n verbinding maak met u gekose bediener nie."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Jammer, die gekose bediener bied nie ondersteuning vir in-band registrasie nie. Probeer asb. \'n ander bediener."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Iets het foutgegaan tydens die opstelling van \'n verbinding met %1$s. Is u seker dit bestaan?"],"Now logging you in":["U word nou aangemeld"],"Registered successfully":["Suksesvol geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Die bediener het \'n registrasie-versoek afgeleun. Kontroleer u gegewe waardes vir korrektheid."],"Leave this groupchat":["Verlaat hierdie groepgesprek"],"Click to toggle the list of open groupchats":["Klik om die lys van oop groepgesprekke te vertoon/verskuil"],"Open Groupchats":["Oop Groepgesprekke"],"Are you sure you want to leave the groupchat %1$s?":["Is u seker u wil die groepgesprek \\"%1$s\\" verlaat?"],"Add":["Voeg by"],"Add a Contact":["Voeg \'n kontak by"],"This contact is busy":["Hierdie kontak is beset"],"This contact is online":["Die kontak is aangemeld"],"This contact is offline":["Die kontak is afgemeld"],"This contact is unavailable":["Hierdie kontak is nie beskikbaar nie"],"This contact is away for an extended period":["Hierdie kontak is vir \'n uitgebreide tyd afwesig"],"This contact is away":["Hierdie kontak is afwesig"],"Contact name":["Kontaknaam"],"Optional nickname":["Opsionele bynaam"],"Sorry, could not find a contact with that name":["Jammer, kon nie \'n kontak met daardie naam vind nie"],"This contact has already been added":["Hierdie kontak is reeds bygevoeg"],"Filter":["Filtreer"],"Filter by contact name":["Filtreer volgens kontaknaam"],"Filter by group name":["Filtreer volgens groepnaam"],"Filter by status":["Filtreer volgens status"],"Any":["Enige"],"Unread":["Ongelees"],"Chatty":["Spraaksaam"],"Extended Away":["Langer afwesig"],"Click to remove %1$s as a contact":["Klik om %1$s as kontak te verwyder"],"Click to accept the contact request from %1$s":["Klik om die kontakversoek van %1$s te aanvaar"],"Click to decline the contact request from %1$s":["Klik om die kontakversoek van %1$s te verwyder"],"Click to chat with %1$s (XMPP address: %2$s)":["Klik om te klets met %1$s (XMPP adres: %2$s)"],"Are you sure you want to decline this contact request?":["Is u seker dat u hierdie kontakversoek wil afleun?"],"Contacts":["Kontakte"],"Add a contact":["Voeg \'n kontak by"],"Re-sync your contacts":["Hersinkroniseer u kontakte"]}}}')}}]);
 //# sourceMappingURL=af-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/ar-LC_MESSAGES-converse-po.js b/src/conversejs/locales/ar-LC_MESSAGES-converse-po.js
index efe63075576d4a215157e4d5c265fb879de2b550..ec4964adc1ca82058ba3b4102126b4c6bb5d2bbf 100644
--- a/src/conversejs/locales/ar-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/ar-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{420:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;","lang":"ar"},"Create your account":["إنشئ حسابك"],"Please enter the XMPP provider to register with:":["يرجى إدخال مزود خدمة XMPP الذي تود إنشاء حسابك فيه :"],"Already have a chat account?":["هل تمتلك حساب مُحادثة؟"],"Log in here":["قم بتسجيل الدخول هنا"],"Account Registration:":["إنشاء حساب :"],"Register":["تسجيل حساب"],"Choose a different provider":["إختر مزود خدمة آخَر"],"Hold tight, we\'re fetching the registration form…":["تحلى بالصبر، جارٍ جلب استمارة التسجيل …"],"Cancel":["إلغاء"],"The connection has dropped, attempting to reconnect.":["لقد إنقطع الإتصال، عملية إعادة الربط جارية."],"An error occurred while connecting to the chat server.":["طرأ هناك خطأ أثناء الربط بخادم المحادثة."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["عذرا، لم نتمكن مِن الاتصال بخادوم XMPP عبر النطاق : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["إنّ خادم XMPP لم يقدم دعم آلية المصادقة"],"Sorry, could not determine upload URL.":["عذرًا ، تعذر تحديد عنوان URL للتحميل."],"Sorry, could not determine file upload URL.":["عذرًا ، تعذر تحديد عنوان URL لتحميل الملف."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["للأسف لم نتمكّن مِن القيام برفع ملفك بنجاح. أجاب خادومك : \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["للأسف لم نتمكّن مِن القيام برفع ملفك بنجاح."],"Sorry, looks like file upload is not supported by your server.":["للأسف يبدو أن خاصية رفع الملفات لا يدعمها خادومكم."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":["الوجوه الضاحكة والعواطف"],"People":["أشخاص"],"Activities":["أنشطة"],"Travel":["سفر"],"Objects":["أشياء"],"Animals and nature":["حيوانات وطبيعة"],"Food and drink":["طعام وشراب"],"Symbols":["رموز"],"Flags":["أعلام"],"Stickers":["ملصقات"],"This groupchat is not anonymous":["فريق المحادثة هذا ليس مجهولًا"],"This groupchat now shows unavailable members":["فريق المحادثة هذا يعرض الآن الأعضاء المشغولين"],"This groupchat does not show unavailable members":["فريق المحادثة هذا لا يعرض الأعضاء المشغولين"],"The groupchat configuration has changed":["تم تعديل خيارات فريق المحادثة"],"This groupchat is now no longer anonymous":["لم يَعُد فريق المحادثة مجهولا بعد الآن"],"This groupchat is now semi-anonymous":["أصبح فريق المحادثة مجهولا نسبيًا"],"This groupchat is now fully-anonymous":["أصبح فريق المحادثة الآن مجهولا تمامًا"],"A new groupchat has been created":["تم إنشاء فريق محادثة جديد"],"Your nickname has been automatically set to %1$s":["لقد تم تغيير إسمك المستعار آليا إلى %1$s"],"Your nickname has been changed to %1$s":["لقد تم تغيير إسمك المُستعار إلى %1$s"],"You have been banned from this groupchat":["لقد تم طردُك مِن فريق المحادثة هذا"],"You have been kicked from this groupchat":["لقد تم طردُك مؤقتًا مِن فريق المحادثة هذا"],"You have been removed from this groupchat because of an affiliation change":["لقد تم إزالتك من هذه المحادثة الجماعية بسبب تغير في الانتساب"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["تمت إزالتك من فريق الدردشة هذا لأن فريق الدردشة تغير إلى الأعضاء فقط وأنت لست عضوًا فيه"],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"You\'re not allowed to register yourself in this groupchat.":["لا يُسمح لك بتسجيل نفسك في فريق المحادثة هذا."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["لا يمكن تسجيل اسمك المستعار في في فريق الدردشة هذا ، إنه لا يدعم التسجيل."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":["قام %1$s بتحديد الموضوع"],"Topic cleared by %1$s":["قام %1$s بمحو الموضوع"],"%1$s has been banned by %2$s":["لقد تم طرد %1$s من طرف %2$s"],"%1$s has been banned":["لقد تم طرد %1$s"],"%1$s\'s nickname has changed":["لقد قام %1$s بتغيير إسمه المُستعار"],"%1$s has been kicked out by %2$s":["لقد تم طرد %1$s مؤقتًا مِن طرف %2$s"],"%1$s has been kicked out":["لقد تم طرد %1$s مِن فريق المحادثة مؤقتًا"],"%1$s has been removed because of an affiliation change":["تمت إزالة %1$s بسبب تغير في الانتساب"],"%1$s has been removed for not being a member":["تمت إزالة %1$s لأنه ليس عضو مُنتم إلى الغرفة"],"%1$s is no longer an admin of this groupchat":["لم يعد %1$s مديرا لفريق المحادثة هذا بعد الآن"],"%1$s is no longer an owner of this groupchat":["لم يعد %1$s مالكا لفريق المحادثة الجماعية هذا"],"%1$s is now an %2$s of this groupchat":["أصبح الآن %1$s %2$s لفريق المحادثة هذا"],"The nickname you chose is reserved or currently in use, please choose a different one.":["إنّ الإسم المستعار الذي قمت باختياره محجوز أو مُستعمَل حاليا مِن طرف شخص آخَر، يُرجى اختيار إسمٍ آخَر."],"Password incorrect":["الكلمة السرية خاطئة"],"You are not on the member list of this groupchat.":["أنت لست مِن بين قائمة أعضاء فريق المحادثة هذا."],"You have been banned from this groupchat.":["لقد تم طردُك مِن فريق المحادثة هذا."],"You are not allowed to create new groupchats.":["لا يُسمح لك بإنشاء فِرَق محادثة جُدد."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["إنّ إسمك المستعار لا يتماشى مع سياسة فريق المحادثة هذا."],"This groupchat does not (yet) exist.":["فريق المحادثة هذا ليس له وُجود بعد."],"This groupchat has reached its maximum number of participants.":["لقد بلغ فريق المحادثة الحالي الحد الأقصى لاستيعاب الأعضاء."],"Remote server not found":["لم يتم العثور على الخادم عن بُعد"],"The explanation given is: \\"%1$s\\".":["السبب : \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["قام %1$s بدعوتك للإلتحاق بفريق المحادثة : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["قام %1$s بدعوتك للالتحاق بفريق المحادثة : %2$s لهذا السبب: \\"%3$s\\""],"Error":["خطأ"],"Sorry, something went wrong while trying to save your bookmark.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الإحتفاظ بالفواصل المرجعية."],"Timeout Error":["خطأ في مهلة الإنتظار"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["جهات إتصالي"],"Pending contacts":["المُراسلون المُعلّقون"],"Contact requests":["طلبات التراسل"],"Ungrouped":["بدون فريق"],"New messages":["الرسائل الجديدة"],"Sorry, there was an error while trying to add %1$s as a contact.":["المعذرة، لقد حدث هناك خطأ أثناء محاولة إضافة %1$s كمُراسِل."],"This client does not allow presence subscriptions":["هذا العميل لا يسمح اشتراكات التواجد"],"Click to hide these contacts":["أْنقُر لإخفاء هؤلاء المراسلين"],"Unbookmark this groupchat":["تنحية فريق المحادثة مِن الفواصل المرجعية"],"Click to open this groupchat":["أنقر لفتح فريق المحادثة هذا"],"Click to toggle the bookmarks list":["أنقر للإنتقال إلى قائمة الإشارات المرجعية"],"Bookmarks":["الفواصل المرجعية"],"Bookmark this groupchat":["إضافة فريق المحادثة هذا إلى الفواصل المرجعية"],"Would you like this groupchat to be automatically joined upon startup?":["هل تريد الإلتحاق آليًا بفريق المحادثة هذا مباشَرةً بعد الإتصال ؟"],"The name for this bookmark:":["تسمية الفاصلة المرجعية :"],"What should your nickname for this groupchat be?":["ما هو الإسم المُستعار الذي تريد استخدامه في فريق المحادثة هذا ؟"],"Save":["حفظ"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["هل أنت متأكد أنك تريد إزالة الفاصلة المرجعية \\"%1$s\\" ؟"],"Unbookmark":["إزاحة من الفواصل المرجعية"],"Bookmark":["إضافة إلى الفواصل المرجعية"],"Close":["إغلاق"],"OK":["حسنا"],"Image: ":[""],"Download audio file \\"%1$s\\"":["تنزيل الملف الصوتي: \\"%1$s\\""],"Download file \\"%1$s\\"":["تنزيل الملف: \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["أرشفة الرسائل"],"Retry":[""],"Uploading file:":["تحميل الملف:"],"This message has been edited":["تم إعادة تحرير هذه الرسالة"],"Show more":["عرض المزيد"],"No message history available.":["ليس هناك أي سجلّ متاح للرسائل."],"Search results":["نتائج البحث"],"Search":["بحث"],"Insert emojis":["إدراج وجه مبتسم"],"Send the message":["ارسل الرسالة"],"Start a call":["إبدأ مكالمة"],"Choose a file to send":["اختر الملف الذي تريد إرساله"],"The User\'s Profile Image":["الصورة الشخصية للمستخدم"],"Trusted":["موثوق فيه"],"Untrusted":["غير موثوق فيه"],"OMEMO Fingerprints":["بصمات أوميمو"],"Remove as contact":["إزالة مِن المراسِلين"],"XMPP Address":["عنوان XMPP"],"Email":["البريد الإلكتروني"],"Full Name":["الإسم الكامل"],"Nickname":["الإسم المُستعار"],"Refresh":["تحديث"],"Role":["الدور"],"URL":["عنوان الرابط"],"%1$s is typing":["إنّ %1$s يكتب حاليا"],"%1$s has stopped typing":["%1$s توقّفَ عن الكتابة"],"%1$s has gone away":["%1$s غائب"],"Remove messages":["حذف الرسائل"],"Close this chat":["اغلق هذه المحادثة"],"Write in the third person":["كتابة لشخص ثالث"],"Show this menu":["اظهار هذه القائمة"],"Hidden message":["رسالة مخفية"],"Message":["رسالة"],"Optional hint":["دليل اختياري"],"You have unread messages":["لقد ورَدَت إليك رسائل غير مقروءة"],"Details":["التفاصيل"],"See more information about this person":["عرض المزيد مِن التفاصيل عن هذا الشخص"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["هل أنت متأكد أنك تريد سحب هذه الرسالة؟"],"Confirm":["أكّد"],"You have an unsent message which will be lost if you continue. Are you sure?":["لديك رسالة غير مرسلة ستفقدها إذا تابعت. هل أنت واثق؟"],"Are you sure you want to clear the messages from this conversation?":["هل أنت متأكد أنك تود مسح الرسائل مِن نافذة المحادثة هذه ؟"],"%1$s has gone offline":["%1$s قد قطع الإتصال"],"%1$s is busy":["%1$s مشغول"],"%1$s is online":["%1$s متصل"],"Sorry, something went wrong while trying to refresh":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الاحتفاظ بالفواصل المرجعية"],"Are you sure you want to remove this contact?":["هل أنت متأكد أنك تريد حذف هذا المراسل ؟"],"Sorry, there was an error while trying to remove %1$s as a contact.":["عذرا، لقد حدث خطأ أثناء محاولة إزالة %1$s كمراسل."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":["هذا جهاز موثوق فيه"],"Password":["كلمة السر"],"Create an account":["أنشئ حسابًا"],"Don\'t have a chat account?":["لا تمتلكون حسابًا للمحادثة بعدُ؟"],"Log in":["تسجيل الدخول"],"Disconnected":["غير متصل"],"Click here to log in anonymously":["أُنقُر هنا لتسجيل الدخول كشخص مجهول"],"Username":["اسم المستخدِم"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["يرجى ادخال عنوان XMPP صحيح"],"Chat Contacts":["جهات الاتصال"],"Toggle chat":["الانتقال إلى الدردشة"],"Click to restore this chat":["أنقر لاستعادة هذه المحادثة"],"Minimized":["تصغير"],"Minimize":["تصغير"],"This field is required":["هذا الحقل مطلوب"],"Join":["الإلتحاق بالغرفة"],"Enter a new Groupchat":["الدخول إلى فريق محادثة جديد"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["اسم المحادثة الجماعية"],"Groupchat address":["عنوان فريق المحادثة"],"Invite":["دعوة"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["سبب اختياري للدعوة"],"Show groupchats":["عرض فِرَق المحادثة"],"Server address":["عنوان الخادوم"],"Show more information on this groupchat":["عرض المزيد مِن التفاصيل عن فريق المحادثة هذا"],"Query for Groupchats":["البحث عن فِرق محادثة"],"Description:":["التفاصيل :"],"Groupchat Address (JID):":["عنوان فريق المحادثة (JID) :"],"Participants:":["المشتركون :"],"Features:":["الميزات :"],"Requires authentication":["يتطلّب المصادقة"],"Hidden":["خفية"],"Requires an invitation":["تستلزم دعوة"],"Moderated":["تحت الإشراف"],"Non-anonymous":["غير مجهولة"],"Open":["مفتوحة"],"Permanent":["دائم"],"Public":["عمومية"],"Semi-anonymous":["مجهولة نسبيًا"],"Temporary":["مُؤقّتة"],"Unmoderated":["ليست تحت الإشراف"],"conference.example.org":["conference.example.org"],"No groupchats found":["لم يتم العثور على أي فريق محادثة"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"New Role":["الدورالجديد"],"Reason":["السبب"],"New affiliation":["انتماء جديد"],"Affiliation":["الانتماء"],"Moderator Tools":["أدوات الإشراف"],"No users with that affiliation found.":[""],"Type here to filter the search results":["اكتب هنا لتصفية نتائج البحث"],"Show users":["اظهر المستخدمين"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["الموضوع"],"Topic author":["كاتب الموضوع"],"Groupchat address (JID)":["عنوان فريق المحادثة (JID)"],"Message archiving":["أرشفة الرسائل"],"Messages are archived on the server":["الرسائل محفوظة على الخادوم"],"Description":["الوصف"],"Features":["الميزات"],"This groupchat is not publicly searchable":["ليس بالإمكان البحث عن فريق المحادثة هذا عبر البحث العمومي"],"This groupchat is restricted to members only":["فريق المحادثة هذا مخصص للأعضاء المُنتمين إليه فقط"],"Members only":["الأعضاء فقط"],"Participants entering this groupchat need to request permission to write":["يحتاج المشاركون الذين يدخلون فريق المحادثة هذا إلى طلب إذن للكتابة"],"Name":["الإسم"],"This groupchat does not require a password upon entry":["فريق المحادثة هذا لا يتطلّب كلمة سرية قبل الدخول إليها"],"No password required":["بدون كلمة سرية"],"Not anonymous":["غير مجهول"],"All other groupchat participants can see your XMPP address":["يُمكن لكافة المشارِكين في فريق المحادثة الإطلاع على عنوان XMPP الخاص بك"],"Not moderated":["ليس تحت الإشراف"],"Participants entering this groupchat can write right away":["يمكن للمشاركين الذين يدخلون إلى فريق الدردشة الجماعية هذا الكتابة على الفور"],"Online users":["المستخدِدون المتصلون"],"Anyone can join this groupchat":["يمكن للجميع الإلتحاق بفريق المحادثة هذا"],"This groupchat requires a password before entry":["كلمة السر لازمة للدخول إلى فريق المحادثة هذا"],"Password protected":["مؤمَّنة بكلمة سرية"],"Persistent":["دائمة"],"This groupchat persists even if it\'s unoccupied":["فريق المحادثة هذا غير زائل حتى و إن كان لا يحتوي على مقيمين"],"Only moderators can see your XMPP address":["بإمكان المشرفين فقط رؤية عنوان XMPP الخاص بك"],"This groupchat will disappear once the last person leaves":["سوف يختفي فريق المحادثة هذا عندما يخرج منه آخِر مُستخدِم"],"This groupchat is publicly searchable":["يمكن البحث العمومي عن فريق المحادثة هذا"],"Groupchat info for %1$s":["معلومات فريق المحادثة %1$s"],"You\'re not allowed to send messages in this room":["لا يُسمح لك بإرسال رسائل إلى هذه الغرفة"],"The conversation has moved. Click below to enter.":["تم نقل المحادثة. انقر أدناه للدخول."],"This groupchat no longer exists":["فريق المحادثة هذا لم يعد موجودا"],"Hide the groupchat topic":["إخفاء موضوع فريق المحادثة"],"Enter groupchat":["الإلتحاق بفريق المحادثة"],"Please choose your nickname":["يرجى اختيار إسمك المُستعار"],"This groupchat requires a password":["فريق المحادثة مؤمَّن بكلمة سرية"],"Password: ":["كلمة السر : "],"Submit":["إرسال"],"This user is a moderator.":["إنّ هذا المستخدِم مشرف في الغرفة."],"This user can send messages in this groupchat.":["بإمكان هذا المستخدم إرسال رسائل إلى فريق المحادثة هذا."],"This user can NOT send messages in this groupchat.":["لا يمكن لهذا المستخدِم إرسال رسائل في فريق المحادثة هذا."],"Owner":["مالك"],"Admin":["المدير"],"Member":["عضو"],"Moderator":["المشرف"],"Visitor":["زائر"],"Click to mention %1$s in your message.":["أنقر للإشارة إلى %1$s في رسالتك."],"Participants":["المشاركون"],"%1$s has entered the groupchat":["لقد إلتحق %1$s بفريق المحادثة"],"%1$s has left the groupchat":["غادر %1$s فريق المحادثة"],"%1$s is now a moderator":["أصبح %1$s مُشرفًا"],"%1$s is no longer a moderator":["لم يعُد %1$s مِن المُشْرِفين"],"%1$s has been muted":["تم كتم %1$s"],"%1$s and %2$s":["%1$s و %2$s"],"%1$s are typing":["إنّ %1$s يكتبون حاليا"],"%1$s have stopped typing":["%1$s توقّفوا عن الكتابة"],"Change user\'s affiliation to admin":["تغيير دور المستخدم إلى صفة مدير"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["تغيير دور المستخدِم إلى مُشترِك"],"Remove this groupchat":["إزالة فريق المحادثة هذا"],"Kick user from groupchat":["طرد المستخدِم مؤقتًا مِن فريق المحادثة"],"Write in 3rd person":[""],"Grant membership to a user":["منح صفة العضوية لمستخدِم"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["منع المستخدم مِن بعث رسائل"],"Change your nickname":["غيّر إسمك المُستعار"],"Grant moderator role to user":["ترقية المستخدِم إلى رتبة مشرف"],"Grant ownership of this groupchat":["منح صفة ملكية فريق المحادثة للمستخدِم"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["تحديد موضوع فريق المحادثة"],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":["السماح للمستخدم المكتوم نشر رسائل"],"You may optionally include a message, explaining the reason for the retraction.":[""],"Sorry, you\'re not allowed to retract this message":["عذراً، لا يُسمح لك بسحب هذه الرسالة"],"Configure this groupchat":["إعداد فريق المحادثة"],"Hide topic":["إخفاء الموضوع"],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":["مغادرة"],"Hide the list of participants":["إخفاء قائمة المشاركين"],"Forbidden: you do not have the necessary role in order to do that.":["ممنوع: ليس لديك الدور اللازم من أجل القيام بذلك."],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":["قام %1$s بهذا الإجراء."],"The reason given is: \\"%1$s\\".":["السبب : \\"%1$s\\"."],"Groupchats":["فِرَق المحادثة"],"Add a new groupchat":["إضافة فريق محادثة جديد"],"Query for groupchats":["البحث عن فِرَق للمحادثة"],"Announcements":["الإعلانات"],"Notification from %1$s":["إشعار مِن %1$s"],"%1$s says":["%1$s قال"],"has gone offline":["قد قطع الإتصال"],"has gone away":["قد غاب"],"is busy":["مشغول"],"has come online":["صار مُتّصلا الآن"],"wants to be your contact":["يُريد أن يُصبح مُراسلك"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["عن"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["برنامج %1$sحر ومفتوح المصدر%2$s للمحادثة عبر XMPP طوّره لكم %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s ترجموه %2$s إلى لغتكم"],"Log out":["الخروج"],"Click to change your chat status":["أنقر لتغيير حالتك للدردشة"],"Show details about this chat client":["عرض المزيد مِن التفاصيل عن برنامج المحادثة هذا"],"Your avatar image":["صورتك الرمزية"],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":["الجهاز مِن دون بصمة"],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":["الأجهزة الأخرى التي تدعم أوميمو"],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":["أزالة الأجهزة التي تم اختيارها ثم إغلاق"],"Select all":["اختيار الكل"],"This device\'s OMEMO fingerprint":["بصمة أوميمو الخاصة بهذا الجهاز"],"Generate new keys and fingerprint":["توليد مفاتيح جديدة وبصمة"],"Your Profile":["ملفك الشخصي"],"XMPP Address (JID)":["عنوان  XMPP (JID)"],"Save and close":["حفظ وإغلاق"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":["OMEMO"],"Sorry, an error happened while trying to save your profile data.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الاحتفاظ ببيانات ملفك الشخصي."],"You can check your browser\'s developer console for any error output.":[""],"Away":["غائب"],"Busy":["مشغول"],"Custom status":["حالتك الخاصة"],"Offline":["غير متصل"],"Online":["مُتّصل"],"Away for long":["غائب لمدة قد تطول"],"Change chat status":["أنقر لتغيير حالة الدردشة"],"Personal status message":["رسالة الحالة الخاصة"],"I am %1$s":["أنا %1$s"],"Are you sure you want to log out?":["هل أنت متأكد أنك تريد الخروج ؟"],"online":["متصل"],"busy":["مشغول"],"away for long":["غائب لمدة قد تطول"],"away":["غائب"],"offline":["غير متصل"],"Sorry, could not decrypt a received OMEMO message due to an error.":["آسف ، لقد تعذر فك تشفير رسالة OMEMO المتلقاة بسبب خطا."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["يتم إرسال الرسائل كنص عادي صاف"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة حذف الأجهزة."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":["المعذرة، لا يمكن إرسال رسالة مشفرة بسبب حدوث خطأ غير متوقع."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" مثال conversejs.org"],"Fetch registration form":["جارٍ جلب استمارة التسجيل"],"Tip: A list of public XMPP providers is available":["نصيحة: قائمة علنية لمزوّدي خدمة XMPP متوفرة"],"here":["هنا"],"Sorry, we\'re unable to connect to your chosen provider.":["المعذرة، لم نتمكن بربطك بموفر خدمة المحادثة الذي قمت باختياره."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":["جارٍ تسجيل دخولك الآن"],"Registered successfully":["تم تسجيل حسابك بنجاح"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["مغادرة فريق المحادثة"],"Click to toggle the list of open groupchats":["أنقر لفتح قائمة فِرَق المحادثة"],"Open Groupchats":["فتح فِرق الدردشات الجماعية"],"Are you sure you want to leave the groupchat %1$s?":["هل أنت متأكد أنك تريد الإنسحاب مِن فريق المحادثة %1$s ؟"],"Add":["إضافة"],"Add a Contact":["إضافة مراسل"],"This contact is busy":["إنّ المُراسَل مشغول"],"This contact is online":["إنّ هذا المُراسَل غير مُتصل"],"This contact is offline":["هذا المراسل غير متصل"],"This contact is unavailable":["إنّ هذا المراسَل غير متوفر"],"This contact is away for an extended period":["لقد غاب هذا المستخدِم ثانية لفترة أطوَل"],"This contact is away":["إنّ هذا المراسَل غائب"],"Contact name":["إسم المراسل"],"Optional nickname":["إسم مستعار اختياري"],"Sorry, could not find a contact with that name":["المعذرة ، لم نعثر على مستخدم بهذا الإسم"],"Filter":["عامل التصفية"],"Filter by contact name":["فرز حسب اسم جهة الاتصال"],"Filter by group name":["فرز حسب اسم المجموعة"],"Filter by status":["تصنيف حسب الحالة"],"Any":["الكل"],"Unread":["غير مقروءة"],"Chatty":["كثيرة الدردشة"],"Extended Away":["تمديد فترة الغياب"],"Click to remove %1$s as a contact":["أنقر لإزالة %1$s مِن قائمة مراسليك"],"Click to accept the contact request from %1$s":["أنقر لقبول طلب التراسل مع %1$s"],"Click to decline the contact request from %1$s":["أنقر لرفض طلب التراسل مع %1$s"],"Are you sure you want to decline this contact request?":["هل أنت متأكد أنك تود رفض طلب التراسل مع هذا المستخدِم ؟"],"Contacts":["جهات الإتصال"],"Add a contact":["إضافة مراسل"],"Re-sync your contacts":["أعد مزامنة قائمة مراسليك"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{508:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;","lang":"ar"},"Create your account":["إنشئ حسابك"],"Please enter the XMPP provider to register with:":["يرجى إدخال مزود خدمة XMPP الذي تود إنشاء حسابك فيه :"],"Already have a chat account?":["هل تمتلك حساب مُحادثة؟"],"Log in here":["قم بتسجيل الدخول هنا"],"Account Registration:":["إنشاء حساب :"],"Register":["تسجيل حساب"],"Choose a different provider":["إختر مزود خدمة آخَر"],"Hold tight, we\'re fetching the registration form…":["تحلى بالصبر، جارٍ جلب استمارة التسجيل …"],"Cancel":["إلغاء"],"The connection has dropped, attempting to reconnect.":["لقد إنقطع الإتصال، عملية إعادة الربط جارية."],"An error occurred while connecting to the chat server.":["طرأ هناك خطأ أثناء الربط بخادم المحادثة."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["عذرا، لم نتمكن مِن الاتصال بخادوم XMPP عبر النطاق : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["إنّ خادم XMPP لم يقدم دعم آلية المصادقة"],"Sorry, could not determine upload URL.":["عذرًا ، تعذر تحديد عنوان URL للتحميل."],"Sorry, could not determine file upload URL.":["عذرًا ، تعذر تحديد عنوان URL لتحميل الملف."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["للأسف لم نتمكّن مِن القيام برفع ملفك بنجاح. أجاب خادومك : \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["للأسف لم نتمكّن مِن القيام برفع ملفك بنجاح."],"Sorry, looks like file upload is not supported by your server.":["للأسف يبدو أن خاصية رفع الملفات لا يدعمها خادومكم."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":["الوجوه الضاحكة والعواطف"],"People":["أشخاص"],"Activities":["أنشطة"],"Travel":["سفر"],"Objects":["أشياء"],"Animals and nature":["حيوانات وطبيعة"],"Food and drink":["طعام وشراب"],"Symbols":["رموز"],"Flags":["أعلام"],"Stickers":["ملصقات"],"This groupchat is not anonymous":["فريق المحادثة هذا ليس مجهولًا"],"This groupchat now shows unavailable members":["فريق المحادثة هذا يعرض الآن الأعضاء المشغولين"],"This groupchat does not show unavailable members":["فريق المحادثة هذا لا يعرض الأعضاء المشغولين"],"The groupchat configuration has changed":["تم تعديل خيارات فريق المحادثة"],"This groupchat is now no longer anonymous":["لم يَعُد فريق المحادثة مجهولا بعد الآن"],"This groupchat is now semi-anonymous":["أصبح فريق المحادثة مجهولا نسبيًا"],"This groupchat is now fully-anonymous":["أصبح فريق المحادثة الآن مجهولا تمامًا"],"A new groupchat has been created":["تم إنشاء فريق محادثة جديد"],"Your nickname has been automatically set to %1$s":["لقد تم تغيير إسمك المستعار آليا إلى %1$s"],"Your nickname has been changed to %1$s":["لقد تم تغيير إسمك المُستعار إلى %1$s"],"You have been banned from this groupchat":["لقد تم طردُك مِن فريق المحادثة هذا"],"You have been kicked from this groupchat":["لقد تم طردُك مؤقتًا مِن فريق المحادثة هذا"],"You have been removed from this groupchat because of an affiliation change":["لقد تم إزالتك من هذه المحادثة الجماعية بسبب تغير في الانتساب"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["تمت إزالتك من فريق الدردشة هذا لأن فريق الدردشة تغير إلى الأعضاء فقط وأنت لست عضوًا فيه"],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"You\'re not allowed to register yourself in this groupchat.":["لا يُسمح لك بتسجيل نفسك في فريق المحادثة هذا."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["لا يمكن تسجيل اسمك المستعار في في فريق الدردشة هذا ، إنه لا يدعم التسجيل."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":["قام %1$s بتحديد الموضوع"],"Topic cleared by %1$s":["قام %1$s بمحو الموضوع"],"%1$s has been banned by %2$s":["لقد تم طرد %1$s من طرف %2$s"],"%1$s has been banned":["لقد تم طرد %1$s"],"%1$s\'s nickname has changed":["لقد قام %1$s بتغيير إسمه المُستعار"],"%1$s has been kicked out by %2$s":["لقد تم طرد %1$s مؤقتًا مِن طرف %2$s"],"%1$s has been kicked out":["لقد تم طرد %1$s مِن فريق المحادثة مؤقتًا"],"%1$s has been removed because of an affiliation change":["تمت إزالة %1$s بسبب تغير في الانتساب"],"%1$s has been removed for not being a member":["تمت إزالة %1$s لأنه ليس عضو مُنتم إلى الغرفة"],"%1$s is no longer an admin of this groupchat":["لم يعد %1$s مديرا لفريق المحادثة هذا بعد الآن"],"%1$s is no longer an owner of this groupchat":["لم يعد %1$s مالكا لفريق المحادثة الجماعية هذا"],"%1$s is now an %2$s of this groupchat":["أصبح الآن %1$s %2$s لفريق المحادثة هذا"],"The nickname you chose is reserved or currently in use, please choose a different one.":["إنّ الإسم المستعار الذي قمت باختياره محجوز أو مُستعمَل حاليا مِن طرف شخص آخَر، يُرجى اختيار إسمٍ آخَر."],"Password incorrect":["الكلمة السرية خاطئة"],"You are not on the member list of this groupchat.":["أنت لست مِن بين قائمة أعضاء فريق المحادثة هذا."],"You have been banned from this groupchat.":["لقد تم طردُك مِن فريق المحادثة هذا."],"You are not allowed to create new groupchats.":["لا يُسمح لك بإنشاء فِرَق محادثة جُدد."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["إنّ إسمك المستعار لا يتماشى مع سياسة فريق المحادثة هذا."],"This groupchat does not (yet) exist.":["فريق المحادثة هذا ليس له وُجود بعد."],"This groupchat has reached its maximum number of participants.":["لقد بلغ فريق المحادثة الحالي الحد الأقصى لاستيعاب الأعضاء."],"Remote server not found":["لم يتم العثور على الخادم عن بُعد"],"The explanation given is: \\"%1$s\\".":["السبب : \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["قام %1$s بدعوتك للإلتحاق بفريق المحادثة : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["قام %1$s بدعوتك للالتحاق بفريق المحادثة : %2$s لهذا السبب: \\"%3$s\\""],"Error":["خطأ"],"Sorry, something went wrong while trying to save your bookmark.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الإحتفاظ بالفواصل المرجعية."],"Timeout Error":["خطأ في مهلة الإنتظار"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["جهات إتصالي"],"Pending contacts":["المُراسلون المُعلّقون"],"Contact requests":["طلبات التراسل"],"Ungrouped":["بدون فريق"],"New messages":["الرسائل الجديدة"],"Sorry, there was an error while trying to add %1$s as a contact.":["المعذرة، لقد حدث هناك خطأ أثناء محاولة إضافة %1$s كمُراسِل."],"This client does not allow presence subscriptions":["هذا العميل لا يسمح اشتراكات التواجد"],"Click to hide these contacts":["أْنقُر لإخفاء هؤلاء المراسلين"],"Unbookmark this groupchat":["تنحية فريق المحادثة مِن الفواصل المرجعية"],"Click to open this groupchat":["أنقر لفتح فريق المحادثة هذا"],"Click to toggle the bookmarks list":["أنقر للإنتقال إلى قائمة الإشارات المرجعية"],"Bookmarks":["الفواصل المرجعية"],"Bookmark this groupchat":["إضافة فريق المحادثة هذا إلى الفواصل المرجعية"],"Would you like this groupchat to be automatically joined upon startup?":["هل تريد الإلتحاق آليًا بفريق المحادثة هذا مباشَرةً بعد الإتصال ؟"],"The name for this bookmark:":["تسمية الفاصلة المرجعية :"],"What should your nickname for this groupchat be?":["ما هو الإسم المُستعار الذي تريد استخدامه في فريق المحادثة هذا ؟"],"Save":["حفظ"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["هل أنت متأكد أنك تريد إزالة الفاصلة المرجعية \\"%1$s\\" ؟"],"Unbookmark":["إزاحة من الفواصل المرجعية"],"Bookmark":["إضافة إلى الفواصل المرجعية"],"Close":["إغلاق"],"OK":["حسنا"],"Image: ":[""],"Download audio file \\"%1$s\\"":["تنزيل الملف الصوتي: \\"%1$s\\""],"Download file \\"%1$s\\"":["تنزيل الملف: \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["أرشفة الرسائل"],"Retry":[""],"Uploading file:":["تحميل الملف:"],"This message has been edited":["تم إعادة تحرير هذه الرسالة"],"Show more":["عرض المزيد"],"No message history available.":["ليس هناك أي سجلّ متاح للرسائل."],"Search results":["نتائج البحث"],"Search":["بحث"],"Insert emojis":["إدراج وجه مبتسم"],"Send the message":["ارسل الرسالة"],"Start a call":["إبدأ مكالمة"],"Choose a file to send":["اختر الملف الذي تريد إرساله"],"The User\'s Profile Image":["الصورة الشخصية للمستخدم"],"Trusted":["موثوق فيه"],"Untrusted":["غير موثوق فيه"],"OMEMO Fingerprints":["بصمات أوميمو"],"Remove as contact":["إزالة مِن المراسِلين"],"XMPP Address":["عنوان XMPP"],"Email":["البريد الإلكتروني"],"Full Name":["الإسم الكامل"],"Nickname":["الإسم المُستعار"],"Refresh":["تحديث"],"Role":["الدور"],"URL":["عنوان الرابط"],"%1$s is typing":["إنّ %1$s يكتب حاليا"],"%1$s has stopped typing":["%1$s توقّفَ عن الكتابة"],"%1$s has gone away":["%1$s غائب"],"Remove messages":["حذف الرسائل"],"Close this chat":["اغلق هذه المحادثة"],"Write in the third person":["كتابة لشخص ثالث"],"Show this menu":["اظهار هذه القائمة"],"Hidden message":["رسالة مخفية"],"Message":["رسالة"],"Optional hint":["دليل اختياري"],"You have unread messages":["لقد ورَدَت إليك رسائل غير مقروءة"],"Details":["التفاصيل"],"See more information about this person":["عرض المزيد مِن التفاصيل عن هذا الشخص"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["هل أنت متأكد أنك تريد سحب هذه الرسالة؟"],"Confirm":["أكّد"],"You have an unsent message which will be lost if you continue. Are you sure?":["لديك رسالة غير مرسلة ستفقدها إذا تابعت. هل أنت واثق؟"],"Are you sure you want to clear the messages from this conversation?":["هل أنت متأكد أنك تود مسح الرسائل مِن نافذة المحادثة هذه ؟"],"%1$s has gone offline":["%1$s قد قطع الإتصال"],"%1$s is busy":["%1$s مشغول"],"%1$s is online":["%1$s متصل"],"Sorry, something went wrong while trying to refresh":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الاحتفاظ بالفواصل المرجعية"],"Are you sure you want to remove this contact?":["هل أنت متأكد أنك تريد حذف هذا المراسل ؟"],"Sorry, there was an error while trying to remove %1$s as a contact.":["عذرا، لقد حدث خطأ أثناء محاولة إزالة %1$s كمراسل."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":["هذا جهاز موثوق فيه"],"Password":["كلمة السر"],"Create an account":["أنشئ حسابًا"],"Don\'t have a chat account?":["لا تمتلكون حسابًا للمحادثة بعدُ؟"],"Log in":["تسجيل الدخول"],"Disconnected":["غير متصل"],"Click here to log in anonymously":["أُنقُر هنا لتسجيل الدخول كشخص مجهول"],"Username":["اسم المستخدِم"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["يرجى ادخال عنوان XMPP صحيح"],"Chat Contacts":["جهات الاتصال"],"Toggle chat":["الانتقال إلى الدردشة"],"Click to restore this chat":["أنقر لاستعادة هذه المحادثة"],"Minimized":["تصغير"],"Minimize":["تصغير"],"This user is a moderator.":["إنّ هذا المستخدِم مشرف في الغرفة."],"This user can send messages in this groupchat.":["بإمكان هذا المستخدم إرسال رسائل إلى فريق المحادثة هذا."],"This user can NOT send messages in this groupchat.":["لا يمكن لهذا المستخدِم إرسال رسائل في فريق المحادثة هذا."],"Owner":["مالك"],"Admin":["المدير"],"Member":["عضو"],"Moderator":["المشرف"],"Visitor":["زائر"],"Click to mention %1$s in your message.":["أنقر للإشارة إلى %1$s في رسالتك."],"Participants":["المشاركون"],"This field is required":["هذا الحقل مطلوب"],"Join":["الإلتحاق بالغرفة"],"Enter a new Groupchat":["الدخول إلى فريق محادثة جديد"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["اسم المحادثة الجماعية"],"Groupchat address":["عنوان فريق المحادثة"],"Invite":["دعوة"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["سبب اختياري للدعوة"],"Show groupchats":["عرض فِرَق المحادثة"],"Server address":["عنوان الخادوم"],"Show more information on this groupchat":["عرض المزيد مِن التفاصيل عن فريق المحادثة هذا"],"Query for Groupchats":["البحث عن فِرق محادثة"],"Description:":["التفاصيل :"],"Groupchat Address (JID):":["عنوان فريق المحادثة (JID) :"],"Participants:":["المشتركون :"],"Features:":["الميزات :"],"Requires authentication":["يتطلّب المصادقة"],"Hidden":["خفية"],"Requires an invitation":["تستلزم دعوة"],"Moderated":["تحت الإشراف"],"Non-anonymous":["غير مجهولة"],"Open":["مفتوحة"],"Permanent":["دائم"],"Public":["عمومية"],"Semi-anonymous":["مجهولة نسبيًا"],"Temporary":["مُؤقّتة"],"Unmoderated":["ليست تحت الإشراف"],"conference.example.org":["conference.example.org"],"No groupchats found":["لم يتم العثور على أي فريق محادثة"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"New Role":["الدورالجديد"],"Reason":["السبب"],"New affiliation":["انتماء جديد"],"Affiliation":["الانتماء"],"Moderator Tools":["أدوات الإشراف"],"No users with that affiliation found.":[""],"Type here to filter the search results":["اكتب هنا لتصفية نتائج البحث"],"Show users":["اظهر المستخدمين"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["الموضوع"],"Topic author":["كاتب الموضوع"],"Groupchat address (JID)":["عنوان فريق المحادثة (JID)"],"Message archiving":["أرشفة الرسائل"],"Messages are archived on the server":["الرسائل محفوظة على الخادوم"],"Description":["الوصف"],"Features":["الميزات"],"This groupchat is not publicly searchable":["ليس بالإمكان البحث عن فريق المحادثة هذا عبر البحث العمومي"],"This groupchat is restricted to members only":["فريق المحادثة هذا مخصص للأعضاء المُنتمين إليه فقط"],"Members only":["الأعضاء فقط"],"Participants entering this groupchat need to request permission to write":["يحتاج المشاركون الذين يدخلون فريق المحادثة هذا إلى طلب إذن للكتابة"],"Name":["الإسم"],"This groupchat does not require a password upon entry":["فريق المحادثة هذا لا يتطلّب كلمة سرية قبل الدخول إليها"],"No password required":["بدون كلمة سرية"],"Not anonymous":["غير مجهول"],"All other groupchat participants can see your XMPP address":["يُمكن لكافة المشارِكين في فريق المحادثة الإطلاع على عنوان XMPP الخاص بك"],"Not moderated":["ليس تحت الإشراف"],"Participants entering this groupchat can write right away":["يمكن للمشاركين الذين يدخلون إلى فريق الدردشة الجماعية هذا الكتابة على الفور"],"Online users":["المستخدِدون المتصلون"],"Anyone can join this groupchat":["يمكن للجميع الإلتحاق بفريق المحادثة هذا"],"This groupchat requires a password before entry":["كلمة السر لازمة للدخول إلى فريق المحادثة هذا"],"Password protected":["مؤمَّنة بكلمة سرية"],"Persistent":["دائمة"],"This groupchat persists even if it\'s unoccupied":["فريق المحادثة هذا غير زائل حتى و إن كان لا يحتوي على مقيمين"],"Only moderators can see your XMPP address":["بإمكان المشرفين فقط رؤية عنوان XMPP الخاص بك"],"This groupchat will disappear once the last person leaves":["سوف يختفي فريق المحادثة هذا عندما يخرج منه آخِر مُستخدِم"],"This groupchat is publicly searchable":["يمكن البحث العمومي عن فريق المحادثة هذا"],"Groupchat info for %1$s":["معلومات فريق المحادثة %1$s"],"You\'re not allowed to send messages in this room":["لا يُسمح لك بإرسال رسائل إلى هذه الغرفة"],"The conversation has moved. Click below to enter.":["تم نقل المحادثة. انقر أدناه للدخول."],"This groupchat no longer exists":["فريق المحادثة هذا لم يعد موجودا"],"Hide the groupchat topic":["إخفاء موضوع فريق المحادثة"],"Enter groupchat":["الإلتحاق بفريق المحادثة"],"Please choose your nickname":["يرجى اختيار إسمك المُستعار"],"This groupchat requires a password":["فريق المحادثة مؤمَّن بكلمة سرية"],"Password: ":["كلمة السر : "],"Submit":["إرسال"],"%1$s has entered the groupchat":["لقد إلتحق %1$s بفريق المحادثة"],"%1$s has left the groupchat":["غادر %1$s فريق المحادثة"],"%1$s is now a moderator":["أصبح %1$s مُشرفًا"],"%1$s is no longer a moderator":["لم يعُد %1$s مِن المُشْرِفين"],"%1$s has been muted":["تم كتم %1$s"],"%1$s and %2$s":["%1$s و %2$s"],"%1$s are typing":["إنّ %1$s يكتبون حاليا"],"%1$s have stopped typing":["%1$s توقّفوا عن الكتابة"],"Change user\'s affiliation to admin":["تغيير دور المستخدم إلى صفة مدير"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["تغيير دور المستخدِم إلى مُشترِك"],"Remove this groupchat":["إزالة فريق المحادثة هذا"],"Kick user from groupchat":["طرد المستخدِم مؤقتًا مِن فريق المحادثة"],"Write in 3rd person":[""],"Grant membership to a user":["منح صفة العضوية لمستخدِم"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["منع المستخدم مِن بعث رسائل"],"Change your nickname":["غيّر إسمك المُستعار"],"Grant moderator role to user":["ترقية المستخدِم إلى رتبة مشرف"],"Grant ownership of this groupchat":["منح صفة ملكية فريق المحادثة للمستخدِم"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["تحديد موضوع فريق المحادثة"],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":["السماح للمستخدم المكتوم نشر رسائل"],"You may optionally include a message, explaining the reason for the retraction.":[""],"Sorry, you\'re not allowed to retract this message":["عذراً، لا يُسمح لك بسحب هذه الرسالة"],"Configure this groupchat":["إعداد فريق المحادثة"],"Hide topic":["إخفاء الموضوع"],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":["مغادرة"],"Hide the list of participants":["إخفاء قائمة المشاركين"],"Forbidden: you do not have the necessary role in order to do that.":["ممنوع: ليس لديك الدور اللازم من أجل القيام بذلك."],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":["قام %1$s بهذا الإجراء."],"The reason given is: \\"%1$s\\".":["السبب : \\"%1$s\\"."],"Groupchats":["فِرَق المحادثة"],"Add a new groupchat":["إضافة فريق محادثة جديد"],"Query for groupchats":["البحث عن فِرَق للمحادثة"],"Announcements":["الإعلانات"],"Notification from %1$s":["إشعار مِن %1$s"],"%1$s says":["%1$s قال"],"has gone offline":["قد قطع الإتصال"],"has gone away":["قد غاب"],"is busy":["مشغول"],"has come online":["صار مُتّصلا الآن"],"wants to be your contact":["يُريد أن يُصبح مُراسلك"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["عن"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["برنامج %1$sحر ومفتوح المصدر%2$s للمحادثة عبر XMPP طوّره لكم %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s ترجموه %2$s إلى لغتكم"],"Log out":["الخروج"],"Click to change your chat status":["أنقر لتغيير حالتك للدردشة"],"Show details about this chat client":["عرض المزيد مِن التفاصيل عن برنامج المحادثة هذا"],"Your avatar image":["صورتك الرمزية"],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":["الجهاز مِن دون بصمة"],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":["الأجهزة الأخرى التي تدعم أوميمو"],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":["أزالة الأجهزة التي تم اختيارها ثم إغلاق"],"Select all":["اختيار الكل"],"This device\'s OMEMO fingerprint":["بصمة أوميمو الخاصة بهذا الجهاز"],"Generate new keys and fingerprint":["توليد مفاتيح جديدة وبصمة"],"Your Profile":["ملفك الشخصي"],"XMPP Address (JID)":["عنوان  XMPP (JID)"],"Save and close":["حفظ وإغلاق"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":["OMEMO"],"Sorry, an error happened while trying to save your profile data.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة الاحتفاظ ببيانات ملفك الشخصي."],"You can check your browser\'s developer console for any error output.":[""],"Away":["غائب"],"Busy":["مشغول"],"Custom status":["حالتك الخاصة"],"Offline":["غير متصل"],"Online":["مُتّصل"],"Away for long":["غائب لمدة قد تطول"],"Change chat status":["أنقر لتغيير حالة الدردشة"],"Personal status message":["رسالة الحالة الخاصة"],"I am %1$s":["أنا %1$s"],"Are you sure you want to log out?":["هل أنت متأكد أنك تريد الخروج ؟"],"online":["متصل"],"busy":["مشغول"],"away for long":["غائب لمدة قد تطول"],"away":["غائب"],"offline":["غير متصل"],"Sorry, could not decrypt a received OMEMO message due to an error.":["آسف ، لقد تعذر فك تشفير رسالة OMEMO المتلقاة بسبب خطا."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["يتم إرسال الرسائل كنص عادي صاف"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":["المعذرة، لا يمكن إرسال رسالة مشفرة بسبب حدوث خطأ غير متوقع."],"Sorry, an error occurred while trying to remove the devices.":["المعذرة، لقد طرأ هناك خطأ أثناء محاولة حذف الأجهزة."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" مثال conversejs.org"],"Fetch registration form":["جارٍ جلب استمارة التسجيل"],"Tip: A list of public XMPP providers is available":["نصيحة: قائمة علنية لمزوّدي خدمة XMPP متوفرة"],"here":["هنا"],"Sorry, we\'re unable to connect to your chosen provider.":["المعذرة، لم نتمكن بربطك بموفر خدمة المحادثة الذي قمت باختياره."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":["جارٍ تسجيل دخولك الآن"],"Registered successfully":["تم تسجيل حسابك بنجاح"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["مغادرة فريق المحادثة"],"Click to toggle the list of open groupchats":["أنقر لفتح قائمة فِرَق المحادثة"],"Open Groupchats":["فتح فِرق الدردشات الجماعية"],"Are you sure you want to leave the groupchat %1$s?":["هل أنت متأكد أنك تريد الإنسحاب مِن فريق المحادثة %1$s ؟"],"Add":["إضافة"],"Add a Contact":["إضافة مراسل"],"This contact is busy":["إنّ المُراسَل مشغول"],"This contact is online":["إنّ هذا المُراسَل غير مُتصل"],"This contact is offline":["هذا المراسل غير متصل"],"This contact is unavailable":["إنّ هذا المراسَل غير متوفر"],"This contact is away for an extended period":["لقد غاب هذا المستخدِم ثانية لفترة أطوَل"],"This contact is away":["إنّ هذا المراسَل غائب"],"Contact name":["إسم المراسل"],"Optional nickname":["إسم مستعار اختياري"],"Sorry, could not find a contact with that name":["المعذرة ، لم نعثر على مستخدم بهذا الإسم"],"Filter":["عامل التصفية"],"Filter by contact name":["فرز حسب اسم جهة الاتصال"],"Filter by group name":["فرز حسب اسم المجموعة"],"Filter by status":["تصنيف حسب الحالة"],"Any":["الكل"],"Unread":["غير مقروءة"],"Chatty":["كثيرة الدردشة"],"Extended Away":["تمديد فترة الغياب"],"Click to remove %1$s as a contact":["أنقر لإزالة %1$s مِن قائمة مراسليك"],"Click to accept the contact request from %1$s":["أنقر لقبول طلب التراسل مع %1$s"],"Click to decline the contact request from %1$s":["أنقر لرفض طلب التراسل مع %1$s"],"Are you sure you want to decline this contact request?":["هل أنت متأكد أنك تود رفض طلب التراسل مع هذا المستخدِم ؟"],"Contacts":["جهات الإتصال"],"Add a contact":["إضافة مراسل"],"Re-sync your contacts":["أعد مزامنة قائمة مراسليك"]}}}')}}]);
 //# sourceMappingURL=ar-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/bg-LC_MESSAGES-converse-po.js b/src/conversejs/locales/bg-LC_MESSAGES-converse-po.js
index 8b6c1a3e4b6f4bb21051ac13b14c88f1bdcab587..b130e93d7d2b2b8b8a88a4fe28f117a3d794ba9c 100644
--- a/src/conversejs/locales/bg-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/bg-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{421:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"bg"},"Create your account":["Създаване на допуска ви"],"Please enter the XMPP provider to register with:":["Моля въведете XMPP доставчик, при който да се запишете:"],"Already have a chat account?":["Вече имате допуск за разговори?"],"Log in here":["Влизане тук"],"Account Registration:":["Записване за допуск:"],"Register":["Записване"],"Choose a different provider":["Избиране на друг доставчик"],"Hold tight, we\'re fetching the registration form…":["Дръжте се здраво, изтегляме формуляра за записване…"],"Cancel":["Отменяне"],"The connection has dropped, attempting to reconnect.":["Връзката е прекъснала, опитва се повторно свързване."],"An error occurred while connecting to the chat server.":["Възникна грешка при свързване към сървъра за разговори."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Извинете, не можахме да се свържем към XMPP хоста с областта: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP сървърът не предложи поддържан удостоверителен механизъм"],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"Your nickname has been automatically set to %1$s":["Вашето кратко име беше автоматично установено на %1$s"],"Your nickname has been changed to %1$s":["Краткото ви име беше променено на %1$s"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"%1$s has been banned":["Достъпът на %1$s е спрян"],"%1$s\'s nickname has changed":["Краткото име на %1$s се промени"],"%1$s has been kicked out":["%1$s беше изведен"],"%1$s has been removed because of an affiliation change":["%1$s беше премахнат заради промяна на принадлежност"],"%1$s has been removed for not being a member":["%1$s беше премахнат, защото не е член"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Краткото име, което избрахте, е запазено или понастоящем се ползва, моля изберете друго."],"Remote server not found":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":["Извинете, нещо се обърка при опита за записване на отметката ви."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Моите познати"],"Pending contacts":["Изчакващи потвърждение познати"],"Contact requests":["Заявки за познанство"],"Ungrouped":["Негрупирани"],"Sorry, there was an error while trying to add %1$s as a contact.":["Извинете, възникна грешка при опит за добавяне на %1$s като познат."],"This client does not allow presence subscriptions":["Този клиент не допуска абонаменти за присъствие"],"Click to hide these contacts":["Натиснете за скриване на тези познати"],"Click to toggle the bookmarks list":["Натиснете за скриване/показване на списъка с отметки"],"Bookmarks":["Отметки"],"The name for this bookmark:":["Името за тази отметка:"],"Save":["Запис"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Сигурни ли сте, че искате да премахнете отметката „%1$s“?"],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":["Това съобщение е редактирано"],"No message history available.":[""],"Search":["Търсене"],"Start a call":["Обаждане"],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":["Натиснете за писане на нормално (неакордеонно) съобщение"],"Click to write your message as a spoiler":["Натиснете, за да пишете съобщение, разгъващо се като акордеон"],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Кратко име"],"Refresh":[""],"Role":[""],"URL":[""],"Remove messages":["Премахване на съобщения"],"Write in the third person":["Писане от трето лице"],"Show this menu":["Показване на това меню"],"Hidden message":["Скрито съобщение"],"Message":["Съобщение"],"Optional hint":["Съвет (незадължително)"],"You have unread messages":["Имате непрочетени съобщения"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to remove this contact?":["Сигурни ли сте, че искате да премахнете този познат?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Извинете, възникна грешка при опит за премахване на %1$s като познат."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":["Създаване на допуск"],"Don\'t have a chat account?":["Нямате допуск за разговори?"],"Disconnected":[""],"Click here to log in anonymously":["Натиснете тук, за да влезете анонимно"],"Username":["Потребителско име"],"user@domain":["потребител@област"],"Please enter a valid XMPP address":["Моля въведете действителен XMPP адрес"],"Toggle chat":["Разговори"],"Click to restore this chat":["Натисне за възстановяване на този разговор"],"Minimized":["Минимизирани"],"This field is required":[""],"name@conference.example.org":[""],"Invite":["Поканване"],"Description:":["Описание:"],"Features:":["Свойства:"],"Requires authentication":["Изисква удостоверяване"],"Hidden":["Скрита"],"Requires an invitation":["Изисква покана"],"Moderated":["Модерирана"],"Non-anonymous":["Неанонимна"],"Open":["Отворена"],"Public":["Обществена"],"Semi-anonymous":["Полуанонимна"],"Temporary":["Временна"],"Unmoderated":["Немодерирана"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":[""],"Topic author":[""],"Message archiving":["Архивиране на съобщения"],"Messages are archived on the server":["Съобщенията се архивират на сървъра"],"Features":["Свойства"],"Members only":["Само за членове"],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"Participants entering this groupchat can write right away":[""],"Password protected":["Защитена с парола"],"Persistent":["Постоянна"],"The conversation has moved. Click below to enter.":[""],"Please choose your nickname":["Моля изберете си кратко име"],"Password: ":["Парола: "],"Submit":["Изпращане"],"This user is a moderator.":["Този потребител е модератор."],"Owner":[""],"Admin":[""],"Visitor":[""],"Click to mention %1$s in your message.":["Натиснете за да споменете %1$s в съобщението си."],"Participants":[""],"Change user\'s affiliation to admin":["Промяна на ролята на потребителя на администратор"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Променяне на ролята на потребителя на участник"],"Write in 3rd person":["Писане от трето лице"],"Grant membership to a user":["Даване на членство на потребител"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Премахване на възможността на потребителя да публикува съобщения"],"Change your nickname":["Промяна на краткото ви име"],"Grant moderator role to user":["Даване на роля модератор на потребителя"],"Revoke the user\'s current affiliation":[""],"Allow muted user to post messages":["Позволяване на заглушен потребител да публикува съобщения"],"Configure":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Грешка: командата “%1$s” приема два аргумента – краткото име на потребителя и, по желание, причина."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":["Това действие беше извършено от %1$s."],"The reason given is: \\"%1$s\\".":["Дадената причина е: „%1$s“."],"Announcements":[""],"Notification from %1$s":["Известие от %1$s"],"%1$s says":["%1$s казва"],"has gone offline":["се изключи"],"has gone away":["се е махнал(а)"],"is busy":["е зает(а)"],"has come online":["се включи"],"wants to be your contact":["иска да се свърже с вас"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Излизане"],"Click to change your chat status":["Натиснете, за да промените състоянието си за разговор"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["Отсъстващ(а)"],"Busy":["Зает(а)"],"Custom status":["Състояние чрез въвеждане"],"Offline":["Изключен(а)"],"Online":["Включен(а)"],"I am %1$s":["Аз съм %1$s"],"online":["включен(а)"],"busy":["зает(а)"],"away for long":["продължително отсъстващ(а)"],"away":["отсъстващ(а)"],"offline":["изключен(а)"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" например conversejs.org"],"Fetch registration form":["Изтегляне на форумляр за записване"],"Tip: A list of public XMPP providers is available":["Съвет: Наличен е списък на XMPP доставчици за обществен достъп"],"here":["тук"],"Sorry, we\'re unable to connect to your chosen provider.":["Извинете, не можем да се свържем с избрания от вас доставчик."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Извинете, даденият доставчик не поддържа пряко записване за допуск. Моля опитайте друг начин или с друг доставчик."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Нещо се обърка при установяване на връзка с „%1$s“. Сигурни ли сте, че съществува?"],"Now logging you in":["Сега бивате вписани"],"Registered successfully":["Записани сте успешно"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Доставчикът отказа опита ви за записване. Моля проверете точността на данните, които въведохте."],"Open Groupchats":[""],"Add":["Добавяне"],"This contact is busy":["Този познат е зает"],"This contact is online":["Този познат е включен"],"This contact is offline":["Този познат е изключен"],"This contact is unavailable":["Този познат не е на разположение"],"This contact is away for an extended period":["Този познат отсъства дълго време"],"This contact is away":["Този познат отсъства"],"Contact name":["Име на познатия"],"Sorry, could not find a contact with that name":[""],"Filter":["Подбор"],"Filter by group name":[""],"Filter by status":[""],"Any":["Произволно"],"Unread":["Непрочетено"],"Chatty":["Приказлив(а)"],"Extended Away":["Дълго отсъстващ(а)"],"Click to remove %1$s as a contact":["Натиснете за премахване на %1$s като познат"],"Click to accept the contact request from %1$s":["Натиснете за приемане на заявката за познанство от %1$s"],"Click to decline the contact request from %1$s":["Натиснете за отказване на заявката за познанство от %1$s"],"Are you sure you want to decline this contact request?":["Сигурни ли сте, че искате да откажете тази заявка за познанство?"],"Contacts":["Познати"],"Add a contact":["Добавяне на познат"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{509:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"bg"},"Create your account":["Създаване на допуска ви"],"Please enter the XMPP provider to register with:":["Моля въведете XMPP доставчик, при който да се запишете:"],"Already have a chat account?":["Вече имате допуск за разговори?"],"Log in here":["Влизане тук"],"Account Registration:":["Записване за допуск:"],"Register":["Записване"],"Choose a different provider":["Избиране на друг доставчик"],"Hold tight, we\'re fetching the registration form…":["Дръжте се здраво, изтегляме формуляра за записване…"],"Cancel":["Отменяне"],"The connection has dropped, attempting to reconnect.":["Връзката е прекъснала, опитва се повторно свързване."],"An error occurred while connecting to the chat server.":["Възникна грешка при свързване към сървъра за разговори."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Извинете, не можахме да се свържем към XMPP хоста с областта: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP сървърът не предложи поддържан удостоверителен механизъм"],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"Your nickname has been automatically set to %1$s":["Вашето кратко име беше автоматично установено на %1$s"],"Your nickname has been changed to %1$s":["Краткото ви име беше променено на %1$s"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"%1$s has been banned":["Достъпът на %1$s е спрян"],"%1$s\'s nickname has changed":["Краткото име на %1$s се промени"],"%1$s has been kicked out":["%1$s беше изведен"],"%1$s has been removed because of an affiliation change":["%1$s беше премахнат заради промяна на принадлежност"],"%1$s has been removed for not being a member":["%1$s беше премахнат, защото не е член"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Краткото име, което избрахте, е запазено или понастоящем се ползва, моля изберете друго."],"Remote server not found":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":["Извинете, нещо се обърка при опита за записване на отметката ви."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Моите познати"],"Pending contacts":["Изчакващи потвърждение познати"],"Contact requests":["Заявки за познанство"],"Ungrouped":["Негрупирани"],"Sorry, there was an error while trying to add %1$s as a contact.":["Извинете, възникна грешка при опит за добавяне на %1$s като познат."],"This client does not allow presence subscriptions":["Този клиент не допуска абонаменти за присъствие"],"Click to hide these contacts":["Натиснете за скриване на тези познати"],"Click to toggle the bookmarks list":["Натиснете за скриване/показване на списъка с отметки"],"Bookmarks":["Отметки"],"The name for this bookmark:":["Името за тази отметка:"],"Save":["Запис"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Сигурни ли сте, че искате да премахнете отметката „%1$s“?"],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":["Това съобщение е редактирано"],"No message history available.":[""],"Search":["Търсене"],"Start a call":["Обаждане"],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":["Натиснете за писане на нормално (неакордеонно) съобщение"],"Click to write your message as a spoiler":["Натиснете, за да пишете съобщение, разгъващо се като акордеон"],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Кратко име"],"Refresh":[""],"Role":[""],"URL":[""],"Remove messages":["Премахване на съобщения"],"Write in the third person":["Писане от трето лице"],"Show this menu":["Показване на това меню"],"Hidden message":["Скрито съобщение"],"Message":["Съобщение"],"Optional hint":["Съвет (незадължително)"],"You have unread messages":["Имате непрочетени съобщения"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to remove this contact?":["Сигурни ли сте, че искате да премахнете този познат?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Извинете, възникна грешка при опит за премахване на %1$s като познат."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":["Създаване на допуск"],"Don\'t have a chat account?":["Нямате допуск за разговори?"],"Disconnected":[""],"Click here to log in anonymously":["Натиснете тук, за да влезете анонимно"],"Username":["Потребителско име"],"user@domain":["потребител@област"],"Please enter a valid XMPP address":["Моля въведете действителен XMPP адрес"],"Toggle chat":["Разговори"],"Click to restore this chat":["Натисне за възстановяване на този разговор"],"Minimized":["Минимизирани"],"This user is a moderator.":["Този потребител е модератор."],"Owner":[""],"Admin":[""],"Visitor":[""],"Click to mention %1$s in your message.":["Натиснете за да споменете %1$s в съобщението си."],"Participants":[""],"This field is required":[""],"name@conference.example.org":[""],"Invite":["Поканване"],"Description:":["Описание:"],"Features:":["Свойства:"],"Requires authentication":["Изисква удостоверяване"],"Hidden":["Скрита"],"Requires an invitation":["Изисква покана"],"Moderated":["Модерирана"],"Non-anonymous":["Неанонимна"],"Open":["Отворена"],"Public":["Обществена"],"Semi-anonymous":["Полуанонимна"],"Temporary":["Временна"],"Unmoderated":["Немодерирана"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":[""],"Topic author":[""],"Message archiving":["Архивиране на съобщения"],"Messages are archived on the server":["Съобщенията се архивират на сървъра"],"Features":["Свойства"],"Members only":["Само за членове"],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"Participants entering this groupchat can write right away":[""],"Password protected":["Защитена с парола"],"Persistent":["Постоянна"],"The conversation has moved. Click below to enter.":[""],"Please choose your nickname":["Моля изберете си кратко име"],"Password: ":["Парола: "],"Submit":["Изпращане"],"Change user\'s affiliation to admin":["Промяна на ролята на потребителя на администратор"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Променяне на ролята на потребителя на участник"],"Write in 3rd person":["Писане от трето лице"],"Grant membership to a user":["Даване на членство на потребител"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Премахване на възможността на потребителя да публикува съобщения"],"Change your nickname":["Промяна на краткото ви име"],"Grant moderator role to user":["Даване на роля модератор на потребителя"],"Revoke the user\'s current affiliation":[""],"Allow muted user to post messages":["Позволяване на заглушен потребител да публикува съобщения"],"Configure":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Грешка: командата “%1$s” приема два аргумента – краткото име на потребителя и, по желание, причина."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":["Това действие беше извършено от %1$s."],"The reason given is: \\"%1$s\\".":["Дадената причина е: „%1$s“."],"Announcements":[""],"Notification from %1$s":["Известие от %1$s"],"%1$s says":["%1$s казва"],"has gone offline":["се изключи"],"has gone away":["се е махнал(а)"],"is busy":["е зает(а)"],"has come online":["се включи"],"wants to be your contact":["иска да се свърже с вас"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Излизане"],"Click to change your chat status":["Натиснете, за да промените състоянието си за разговор"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["Отсъстващ(а)"],"Busy":["Зает(а)"],"Custom status":["Състояние чрез въвеждане"],"Offline":["Изключен(а)"],"Online":["Включен(а)"],"I am %1$s":["Аз съм %1$s"],"online":["включен(а)"],"busy":["зает(а)"],"away for long":["продължително отсъстващ(а)"],"away":["отсъстващ(а)"],"offline":["изключен(а)"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" например conversejs.org"],"Fetch registration form":["Изтегляне на форумляр за записване"],"Tip: A list of public XMPP providers is available":["Съвет: Наличен е списък на XMPP доставчици за обществен достъп"],"here":["тук"],"Sorry, we\'re unable to connect to your chosen provider.":["Извинете, не можем да се свържем с избрания от вас доставчик."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Извинете, даденият доставчик не поддържа пряко записване за допуск. Моля опитайте друг начин или с друг доставчик."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Нещо се обърка при установяване на връзка с „%1$s“. Сигурни ли сте, че съществува?"],"Now logging you in":["Сега бивате вписани"],"Registered successfully":["Записани сте успешно"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Доставчикът отказа опита ви за записване. Моля проверете точността на данните, които въведохте."],"Open Groupchats":[""],"Add":["Добавяне"],"This contact is busy":["Този познат е зает"],"This contact is online":["Този познат е включен"],"This contact is offline":["Този познат е изключен"],"This contact is unavailable":["Този познат не е на разположение"],"This contact is away for an extended period":["Този познат отсъства дълго време"],"This contact is away":["Този познат отсъства"],"Contact name":["Име на познатия"],"Sorry, could not find a contact with that name":[""],"Filter":["Подбор"],"Filter by group name":[""],"Filter by status":[""],"Any":["Произволно"],"Unread":["Непрочетено"],"Chatty":["Приказлив(а)"],"Extended Away":["Дълго отсъстващ(а)"],"Click to remove %1$s as a contact":["Натиснете за премахване на %1$s като познат"],"Click to accept the contact request from %1$s":["Натиснете за приемане на заявката за познанство от %1$s"],"Click to decline the contact request from %1$s":["Натиснете за отказване на заявката за познанство от %1$s"],"Are you sure you want to decline this contact request?":["Сигурни ли сте, че искате да откажете тази заявка за познанство?"],"Contacts":["Познати"],"Add a contact":["Добавяне на познат"]}}}')}}]);
 //# sourceMappingURL=bg-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/ca-LC_MESSAGES-converse-po.js b/src/conversejs/locales/ca-LC_MESSAGES-converse-po.js
index 8059c3483495949113b6112496250fc0a68b53fa..fc54abe645c36d6f73549b1b7b9beae02408a066 100644
--- a/src/conversejs/locales/ca-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/ca-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{422:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"ca"},"Create your account":["Crea el teu compte"],"Please enter the XMPP provider to register with:":["Si us plau, introdueix el proveïdor XMPP per registrar-se:"],"Already have a chat account?":["Ja tens un compte de xat?"],"Log in here":["Inicia sessió aqui"],"Account Registration:":["Crea un compte:"],"Register":["Registrar-se"],"Choose a different provider":["Tria un altre proveïdor"],"Hold tight, we\'re fetching the registration form…":["Tingues paciència, s\'està obtenint el formulari de registre…"],"Cancel":["Cancel·la"],"The connection has dropped, attempting to reconnect.":["S\'ha perdut la connexió, s\'està intentant reconnectar."],"An error occurred while connecting to the chat server.":["S\'ha produït un error al intentar connectar-se al servidor de xat."],"Your XMPP address and/or password is incorrect. Please try again.":["La teva adreça XMPP i/o la contrasenya no és correcta. Intenta-ho de nou."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["No s\'ha pogut connectar al servei XMPP amb el domini: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["El servidor XMPP no ha proporcionat cap mecanisme d\'autenticació compatible"],"Sorry, could not determine upload URL.":["No s\'ha pogut determinar URL."],"Sorry, could not determine file upload URL.":["No s\'ha pogut determinar el fitxer URL."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["No s\'ha pogut carregar el teu fitxer. La resposta del teu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["No s\'ha pogut carregar el teu fitxer amb èxit."],"Sorry, looks like file upload is not supported by your server.":["El teu servei no permet pujar fitxers."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La mida del teu fitxer de %1$s, excedeix el màxim permès pel teu servei, el qual és %2$s."],"Smileys and emotions":["Emoticones i emocions"],"People":["Gent"],"Activities":["Activitats"],"Travel":["Viatges"],"Objects":["Objectes"],"Animals and nature":["Animals i natura"],"Food and drink":["Aliments i begudes"],"Symbols":["Símbols"],"Flags":["Banderes"],"Stickers":["Enganxines"],"This groupchat is not anonymous":["Aquest grup no és anònim"],"This groupchat now shows unavailable members":["Aquesta sala ara mostra membres no disponibles"],"This groupchat does not show unavailable members":["Aquesta sala no mostra membres no disponibles"],"The groupchat configuration has changed":["S\'ha canviat la configuració del grup"],"Groupchat logging is now enabled":["El registre del grup està habilitat"],"Groupchat logging is now disabled":["El registre del grup està deshabilitat"],"This groupchat is now no longer anonymous":["Aquest grup ja no és anònim"],"This groupchat is now semi-anonymous":["Aquest grup ara és parcialment anònim"],"This groupchat is now fully-anonymous":["Aquest grup ara és totalment anònim"],"A new groupchat has been created":["S\'ha creat un grup nou"],"Your nickname has been automatically set to %1$s":["El teu àlies ha canviat automàticament a: %1$s"],"Your nickname has been changed to %1$s":["El teu àlies ha canviat a: %1$s"],"You have been banned from this groupchat":["Se t\'ha denegat l\'accés a aquest grup"],"You have been kicked from this groupchat":["Se\'t ha expulsat d\'aquest grup"],"You have been removed from this groupchat because of an affiliation change":["Se\'t ha eliminat d\'aquest grup a causa d\'un canvi d\'afiliació"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Se\'t ha eliminat d\'aquest grup perquè ara només permet membres i no en sou membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Se\'t ha eliminat d\'aquest grup perquè s\'està tancant el servei de xat multiusuari"],"Your message was not delivered because you weren\'t allowed to send it.":["El missatge no ha arribat perquè no tenies permés enviar-lo."],"Your message was not delivered because you\'re not present in the groupchat.":["El teu missatge no s\'ha enviat perquè no estàs al grup."],"You\'re not allowed to register yourself in this groupchat.":["No tens permís per registrar-te a aquest grup."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["No tens permís per accedir a aquest grup perquè és de només membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["No es pot registrar el teu àlies a aquest grup, ja que no permet enregistrar àlies."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["No es pot registrar el teu àlies a aquest grup, les dades que s\'han enviat no son vàlides."],"Topic set by %1$s":["%1$s ha especificat el tema"],"Topic cleared by %1$s":["%1$s ha eliminat el tema"],"%1$s has been banned by %2$s":["%2$s ha denegat l\'accés a %1$s"],"%1$s has been banned":["S\'ha denegat l\'accés a %1$s"],"%1$s\'s nickname has changed":["L\'àlies de %1$s ha canviat"],"%1$s has been kicked out by %2$s":["%2$s ha expulsat a %1$s"],"%1$s has been kicked out":["S\'ha expulsat a %1$s"],"%1$s has been removed because of an affiliation change":["S\'ha eliminat a %1$s a causa d\'un canvi d\'afiliació"],"%1$s has been removed for not being a member":["S\'ha eliminat a %1$s perquè no és membre"],"%1$s is no longer an admin of this groupchat":["%1$s ja no és un administrador d\'aquest grup"],"%1$s is no longer an owner of this groupchat":["%1$s ja no és el propietari d\'aquest grup"],"%1$s is no longer banned from this groupchat":["Aquest grup torna a permetre l\'accés de %1$s"],"%1$s is no longer a member of this groupchat":["%1$s ja no és membre d\'aquest grup"],"%1$s is now a member of this groupchat":["%1$s ara és membre d\'aquest grup"],"%1$s is now an %2$s of this groupchat":["%1$s ara és %2$s d\'aquest grup"],"The nickname you chose is reserved or currently in use, please choose a different one.":["L\'àlies que has triat està reservat o es troba en ús, si us plau trieu-ne un altre."],"Password incorrect":["Contrasenya incorrecta"],"You are not on the member list of this groupchat.":["No ets a la llista de membres d\'aquest grup."],"You have been banned from this groupchat.":["Se t\'ha denegat l\'accés a aquest grup."],"You are not allowed to create new groupchats.":["No tens permís per crear grups."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["El vostre àlies no compleix amb la política d\'aquest grup."],"This groupchat does not (yet) exist.":["Aquest grup no existeix (encara)."],"This groupchat has reached its maximum number of participants.":["Aquest grup ha assolit el nombre màxim d\'ocupants."],"Remote server not found":["No s\'ha trobat aquest servei"],"The explanation given is: \\"%1$s\\".":["El motiu indicat és: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s t\'ha convidat a unir-te a un grup de xat: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s t\'ha convidat a unir-te a un grup de xat (%2$s) i ha deixat el següent motiu: \\"%3$s\\""],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["S\'ha produït un error intentant guardar el grup a favorits."],"Timeout Error":["Límit de temps d\'espera excedit"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["El servei ha trigat massa en enviar els teus grups. Actualitza la pàgina per a demanar-los un altra vegada."],"My contacts":["Els meus contactes"],"Pending contacts":["Contactes pendents"],"Contact requests":["Sol·licituds de contacte"],"Ungrouped":["Sense agrupar"],"New messages":["Missatges nous"],"Sorry, there was an error while trying to add %1$s as a contact.":["S\'ha produït un error en intentar afegir %1$s com a contacte."],"This client does not allow presence subscriptions":["El contacte no permet subscripcions de presència"],"Click to hide these contacts":["Fes clic per amagar aquests contactes"],"Unbookmark this groupchat":["Eliminar grup de llista de grups"],"Click to open this groupchat":["Fes clic per obrir aquest grup"],"Click to toggle the bookmarks list":["Feu clic per a mostrar la llista de grups"],"Bookmarks":["Grups"],"Bookmark this groupchat":["Marca aquest grup"],"Would you like this groupchat to be automatically joined upon startup?":["T\'agradaria entrar automàticament a aquest grup?"],"The name for this bookmark:":["El nom per a aquest marcador:"],"What should your nickname for this groupchat be?":["Tria el teu àlies:"],"Save":["Desa"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Segur que voleu eliminar \\"%1$s\\"?"],"Unbookmark":["Desmarca"],"Bookmark":["Marca"],"Close":["Tancar"],"OK":["D\'acord"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Descarregar fitxer d\'audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Descarregar fitxer \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Versions del missatge"],"Retry":[""],"Uploading file:":["Pujant fitxer:"],"%1$s has removed this message":["%1$s ha eliminat el missatge"],"This message has been edited":["Aquest missatge ha sigut editat"],"Show more":["Mostrar més"],"No message history available.":["No hi ha historial de missatges disponible."],"Search results":["Cerca resultats"],"Search":["Cerca"],"Insert emojis":["Insereix emoticones"],"Send the message":["Envia el missatge"],"Start a call":["Inicia una trucada"],"Message characters remaining":["Caràcters del missatge restants"],"Choose a file to send":["Tria el fitxer per enviar"],"Click to write as a normal (non-spoiler) message":["Fes clic per a escriure un missatge normal(sense spoiler)"],"Click to write your message as a spoiler":["Fes clic aquí per escriure un missatge amb spoiler"],"The User\'s Profile Image":["Imatge de perfil"],"Trusted":["Acceptada"],"Untrusted":["Denegada"],"OMEMO Fingerprints":["Empremta digital OMEMO"],"No OMEMO-enabled devices found":["No s\'han trobat dispositius amb OMEMO"],"Remove as contact":["Eliminar com a contacte"],"XMPP Address":["Adreça XMPP"],"Email":["Correu electrònic"],"Full Name":["Nom Complet"],"Nickname":["Àlies"],"Refresh":["Actualitzar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s està escrivint"],"%1$s has stopped typing":["%1$s ha deixat d\'escriure"],"%1$s has gone away":["%1$s és absent"],"Remove messages":["Elimina els missatges"],"Close this chat":["Tanca aquest xat"],"Write in the third person":["Escriu en tercera persona"],"Show this menu":["Mostra aquest menú"],"Hidden message":["Missatge amagat"],"Message":["Missatge"],"Optional hint":["Informació opcional"],"You have unread messages":["Tens missatges per llegir"],"Details":["Detalls"],"See more information about this person":["Mostra més informació sobre aquesta persona"],"Close and end this conversation":["Tanca i finalitza aquesta conversa"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tingues en compte que altres clients i serveis XMPP/Jabber potser no permeten eliminar missatges, és a dir, aquest missatge potser no s\'elimina totalment."],"Are you sure you want to retract this message?":["Segur que vols eliminar aquest missatge?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Tens un missatge per a enviar, s\'esborrarà si continues. Estàs segur que vols continuar?"],"Are you sure you want to clear the messages from this conversation?":["Segur que voleu esborrar els missatges d\'aquest a conversa?"],"%1$s has gone offline":["%1$s s\'ha desconnectat"],"%1$s is busy":["%1$s està ocupat"],"%1$s is online":["%1$s està en línia"],"Sorry, something went wrong while trying to refresh":["S\'ha produït un error intentant actualitzar"],"Are you sure you want to remove this contact?":["Segur que voleu eliminar aquest contacte?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["S\'ha produït un error intentant eliminar %1$s com a contacte."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per a millorar el rendiment, es recullen les teves dades a aquest navegador. Desmarca aquesta opció si estàs utilitzant un ordinador públic o si vols que les teves dades s\'esborrin quan et desconnectes. És important que explícitament et desconnectis, d\'altra manera, totes les dades recollides potser no s\'esborrin. Tingues en compte que l\'encriptació OMEMO no està disponible quan utilitzes un dispositiu amb el que no confies."],"This is a trusted device":["Aquest dispositiu és de confiança"],"Password":["Contrasenya"],"Create an account":["Crea un compte"],"Don\'t have a chat account?":["No tens un compte de xat?"],"Log in":["Inicia la sessió"],"Disconnected":["Desconnectat"],"Click here to log in anonymously":["Fes clic aquí per iniciar la sessió de manera anònima"],"Username":["Nom d\'usuari"],"user@domain":["usuari@domini"],"Please enter a valid XMPP address":["Introdueix una adreça XMPP vàlida"],"Chat Contacts":["Contactes"],"Toggle chat":["Canvia de xat"],"Click to restore this chat":["Fes clic per restaurar aquest xat"],"Minimized":["Minimitzat"],"Minimize":["Minimitzar"],"Minimize this chat":["Minimitza aquest xat"],"Minimize this groupchat":["Minimitza aquest grup"],"This field is required":["Aquest camp és necessari"],"Join":["Unir-se al grup"],"Enter a new Groupchat":["Entrar a un grup nou"],"name@conference.example.org":["nom@conferencia.exemple.org"],"Groupchat name":["Nom del grup"],"Groupchat address":["Adreça del grup"],"Groupchat id is invalid.":["El ID del grup no és vàlid."],"Invite":["Convida"],"Invite someone to this groupchat":["Convida algú a aquest grup"],"user@example.org":["usuari@exemple.org"],"Optional reason for the invitation":["Raó opcional per la invitació"],"Show groupchats":["Mostrar grups"],"Server address":["Adreça del servei"],"Show more information on this groupchat":["Mostra més informació d\'aquest grup"],"Query for Groupchats":["Cercar grups"],"Description:":["Descripció:"],"Groupchat Address (JID):":["Adreça del grup(JID):"],"Participants:":["Participants:"],"Features:":["Característiques:"],"Requires authentication":["Cal autenticar-se"],"Hidden":["Amagat"],"Requires an invitation":["Cal tenir una invitació"],"Moderated":["Moderada"],"Non-anonymous":["No és anònima"],"Open":["Obre"],"Permanent":["Grup permanent"],"Public":["Pública"],"Semi-anonymous":["Semi-anònima"],"Temporary":["Temporal"],"Unmoderated":["No moderada"],"conference.example.org":["conferencia@exemple.org"],"No groupchats found":["No s\'ha trobat cap grup"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Els moderadors son usuaris privilegiats que poden canviar el rol d\'altres usuaris, exceptuant els usuaris que tinguen afiliació d\'administrador o de propietari."],"The default role, implies that you can read and write messages.":["El rol per defecte et permet que puguis llegir i escriure missatges."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Els usuaris visitants no tenen permís per a escriure missatges a un grup amb moderadors."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["L\'afiliació més alta és la de propietari. Els propietaris poden modificar els rols i les afiliacions de tots els altres usuaris."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["La segona afiliació més alta és la d\'administrador. Els administradors poden modificar els rols i les afiliacions de tots els usuaris excepte la del propietari."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per a denegar el accés a un usuari, li dones l\'afiliació de \\"exiliat\\"."],"Change role":["Canviar rol"],"New Role":["Nou rol"],"Reason":["Raó"],"Change affiliation":["Canviar l\'afiliació"],"New affiliation":["Nova afiliació"],"Affiliation":["Afiliació"],"Moderator Tools":["Eines de moderador"],"No users with that affiliation found.":["No s\'han trobat usuaris amb aquest tipus d\'afiliació."],"No users with that role found.":["No s\'han trobat usuaris amb aquest rol."],"Type here to filter the search results":["Escriu aquí per a filtrar els resultats de recerca"],"Show users":["Mostrar els usuaris"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Els rols s\'assignen per a denegar o permetre\'ls certes habilitats dins d\'un grup. S\'assignen explícitament com a part d\'una afiliació. Un rol que no està assignat a una afiliació, només té validesa durant la sessió de l\'usuari."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliació és un dret a llarg termini que normalment implica un cert rol que concedeix privilegis i responsabilitats. Per exemple, els administradors i propietaris tenen automàticament el rol de moderador."],"Sorry, something went wrong while trying to set the affiliation":["S\'ha produït un error intentant assignar l\'afiliació"],"Affiliation changed":["L\'afiliació ha canviat"],"Role changed":["El rol ha canviat"],"You\'re not allowed to make that change":["No tens permís per fer aquest canvi"],"Sorry, something went wrong while trying to set the role":["S\'ha produït un error intentant assignar el rol"],"Topic":["Tema"],"Topic author":["Autor del tema"],"Groupchat address (JID)":["Adreça del grup(JID)"],"Message archiving":["Emmagatzematge de missatges"],"Messages are archived on the server":["Els missatges estan arxivats al servei"],"Description":["Descripció"],"Features":["Característiques"],"This groupchat is not publicly searchable":["Aquest grup no es pot buscar públicament"],"This groupchat is restricted to members only":["Aquest grup està limitat a només membres"],"Members only":["Només membres"],"Participants entering this groupchat need to request permission to write":["Els participants que entren aquest grup han de demanar permís per a escriure"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Aquest grup no requereix de contrasenya"],"No password required":["No es necessita contrasenya"],"Not anonymous":["No és anònima"],"All other groupchat participants can see your XMPP address":["Tots els participants d\'aquest grup poden veure la teva adreça XMPP"],"Not moderated":["No moderada"],"Participants entering this groupchat can write right away":["Els participants que entren a aquest grup poden escriure sense demanar permís"],"Online users":["Usuaris en línea"],"Anyone can join this groupchat":["Qualsevol usuari pot entrar a aquest grup"],"This groupchat requires a password before entry":["Aquest grup requereix una contrasenya abans d\'entrar"],"Password protected":["Protegit per contrasenya"],"Persistent":["Persistent"],"This groupchat persists even if it\'s unoccupied":["Aquest grup no s\'esborra encara que no hi hagi participants"],"Only moderators can see your XMPP address":["Només els moderadors poden veure la teva adreça XMPP"],"This groupchat will disappear once the last person leaves":["Aquest grup s\'eliminarà quan l\'últim participant surti"],"This groupchat is publicly searchable":["Aquest grup es pot buscar públicament"],"Groupchat info for %1$s":["Informació del grup per a %1$s"],"You\'re not allowed to send messages in this room":["No teniu permís per enviar missatges a aquesta sala"],"The conversation has moved. Click below to enter.":["Aquesta conversa ha sigut moguda. Fes clic a continuació per entrar."],"This groupchat no longer exists":["Aquest grup ja no existeix"],"Hide the groupchat topic":["Amaga el tema del grup"],"This groupchat is bookmarked":["Aquest grup no està marcat com a favorit"],"Enter groupchat":["Entrar al grup"],"Choose a nickname to enter":["Tria un àlies per a entrar"],"Please choose your nickname":["Tria el teu àlies"],"This groupchat requires a password":["Aquest grup requereix una contrasenya"],"Password: ":["Contrasenya: "],"Submit":["Envia"],"This user is a moderator.":["Aquest usuari és un moderador."],"This user can send messages in this groupchat.":["Aquest usuari pot enviar missatges a aquest grup."],"This user can NOT send messages in this groupchat.":["Aquest usuari NO pot enviar missatges a aquest grup."],"Owner":["Propietari"],"Admin":["Administrador"],"Member":["Membre"],"Moderator":["Moderador"],"Visitor":["Visitant"],"Click to mention %1$s in your message.":["Fes clic per a mencionar a %1$s al teu missatge."],"Participants":["Participants"],"%1$s has entered the groupchat":["%1$s ha entrat al grup"],"%1$s has left the groupchat":["%1$s ha sortit del grup"],"%1$s is now a moderator":["S\'han donat privilegis de moderació a %1$s"],"%1$s is no longer a moderator":["%1$s ja no és un moderador"],"%1$s has been given a voice":["%1$s ja pot participar a aquest grup"],"%1$s has been muted":["S\'ha silenciat a %1$s"],"%1$s and %2$s":["%1$s i %2$s"],"%1$s are typing":["%1$s estan escrivint"],"%1$s have stopped typing":["%1$s han deixat d\'escriure"],"%1$s have gone away":["%1$s no està disponible"],"%1$s have entered the groupchat":["%1$s han entrat al grup"],"%1$s have left the groupchat":["%1$s han sortit del grup"],"Change user\'s affiliation to admin":["Canvia l\'afiliació de l\'usuari a administrador"],"Ban user by changing their affiliation to outcast":["Denega l\'accés a l\'usuari canviant l\'afiliació a exiliat"],"Clear the chat area":["Neteja l\'àrea de xat"],"Close this groupchat":["Tancar aquest grup"],"Change user role to participant":["Canvia el rol de l\'usuari a participant"],"Remove this groupchat":["Esborrar aquest grup"],"Kick user from groupchat":["Expulsa l\'usuari del grup"],"Write in 3rd person":["Escriu en tercera persona"],"Grant membership to a user":["Atorga una afiliació a un usuari"],"Opens up the moderator tools GUI":["Obre les eines de moderador GUI"],"Remove user\'s ability to post messages":["Elimina la capacitat de l\'usuari de publicar missatges"],"Change your nickname":["Canvia el teu àlies"],"Grant moderator role to user":["Atorga el rol de moderador a l\'usuari"],"Grant ownership of this groupchat":["Atorga la propietat d\'aquest grup"],"Register your nickname":["Registra el teu àlies"],"Revoke the user\'s current affiliation":["Anul·la l\'afliació del usuari"],"Set groupchat subject":["Defineix un tema per al grup"],"Set groupchat subject (alias for /subject)":["Defineix el tema del grup (àlies per a / tema)"],"Allow muted user to post messages":["Permet que un usuari silenciat publiqui missatges"],"You are about to retract this message.":["Estàs apunt d\'eliminar aquest missatge."],"You may optionally include a message, explaining the reason for the retraction.":["Teniu l\'opció d\'incloure un missatge per explicar el motiu de l\'eliminació."],"Message Retraction":["Retracció del missatge"],"Optional reason":["Raó opcional"],"Sorry, you\'re not allowed to retract this message":["No tens permís per a retractar-te d\'aquest missatge"],"A timeout occurred while trying to retract the message":["El temps d\'espera a expirat intentant retractar el missatge"],"Sorry, you\'re not allowed to retract this message.":["No tens permís per a retractar aquest missatge."],"Show more information about this groupchat":["Mostra més informació sobre aquest grup"],"Configure":["Configurar"],"Configure this groupchat":["Configurar aquest grup"],"Invite someone to join this groupchat":["Convidar algú a unir-se a aquest grup"],"Show topic":["Mostrar tema"],"Hide topic":["Amagar tema"],"Show the topic message in the heading":["Mostrar el missatge del tema a la capçalera"],"Hide the topic in the heading":["Amaga el tema a la capçalera"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar aquest grup"],"Destroy":["Destruir"],"Leave":["Sortir"],"Leave and close this groupchat":["Sortir i tancar aquest grup"],"Are you sure you want to leave this groupchat?":["Segur que vols sortir d\'aquest grup?"],"Hide the list of participants":["Amaga la llista de participants"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibit: no tens el rol necessari per a fer això."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibit: no tens l\'afiliació necessària per a fer això."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error: l\'ordre %1$s accepta dos paràmetres, l\'àlies de l\'usuari i una raó opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error: no s\'ha pogut trobar un participant del grup basat amb els teus paràmetres"],"Error: found multiple groupchat participant based on your arguments":["Error: s\'han trobat diversos participants del grup basats en els teus paràmetres"],"Sorry, an error happened while running the command.":["S\'ha produït un error intentant executar l\'ordre."],"Check your browser\'s developer console for details.":["Revisa la consola del desenvolupador del navegador per a detalls."],"Are you sure you want to destroy this groupchat?":["Segur que vols eliminar aquest grup?"],"name@example.org":["nom@exemple.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["El vostre àlies és: %1$s"],"Error: invalid number of arguments":["Error: nombre de paràmetres invalid"],"This action was done by %1$s.":["Aquesta acció l\'ha fet %1$s."],"The reason given is: \\"%1$s\\".":["El motiu indicat és: \\"%1$s\\"."],"Groupchats":["Grups"],"Add a new groupchat":["Afegeix un nou grup"],"Query for groupchats":["Demana els grups"],"Sorry, an error occurred while trying to submit the config form.":["S\'ha produït un error intentant desar el formulari de configuració."],"Close these announcements":["Tanca aquests anuncis"],"Announcements":["Anuncis"],"Click to open this server message":["Fes clic per obrir aquest missatge del servei"],"Notification from %1$s":["Notificació de %1$s"],"%1$s says":["%1$s diu"],"has gone offline":["s\'ha desconnectat"],"has gone away":["ha marxat"],"is busy":["està ocupat"],"has come online":["s\'ha connectat"],"wants to be your contact":["vol ser el teu contacte"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Informació"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s codi obert %2$s client de xat XMPP facilitat per %3$s Opkode%2$s"],"%1$s Translate %2$s it into your own language":["%1$s Tradueix %2$s al teu idioma"],"Log out":["Tanca la sessió"],"Click to change your chat status":["Fes clic per canviar l\'estat del xat"],"Show details about this chat client":["Mostra més informació sobre aquest client de xat"],"Your avatar image":["La imatge del teu avatar"],"Checkbox for selecting the following fingerprint":["Casella per a seleccionar la següent empremta digital"],"Device without a fingerprint":["Verifica sense empremtes"],"Other OMEMO-enabled devices":["Altres dispositius amb OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Marca la casella per a seleccionar empremtes per als altres dispositius OMEMO"],"Remove checked devices and close":["Esborrar els dispositius marcats i tancar"],"Select all":["Seleccionar-ho tot"],"This device\'s OMEMO fingerprint":["L\'empremta OMEMO d\'aquest dispositiu"],"Generate new keys and fingerprint":["Generar noves claus i empremtes"],"Your Profile":["El Teu Perfil"],"XMPP Address (JID)":["Adreça XMPP (JID)"],"Save and close":["Guardar i tancar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilitza comes per a separar múltiples rols. Els teus rols es mostren al costat del teu nom als teus missatges."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["S\'ha produït un error intentant guardar les dades del teu perfil."],"You can check your browser\'s developer console for any error output.":["Pots revisar la consola del teu navegador per a qualsevol error resultat."],"Away":["Absent"],"Busy":["Ocupat"],"Custom status":["Estat personalitzat"],"Offline":["Desconnectat"],"Online":["En línia"],"Away for long":["Absent durant un llarg termini"],"Change chat status":["Canviar el teu estat de xat"],"Personal status message":["Missatge d\'estat personal"],"I am %1$s":["Estic %1$s"],"Are you sure you want to log out?":["Segur que vols desconnectar-te?"],"online":["en línia"],"busy":["ocupat"],"away for long":["absent durant una estona"],"away":["absent"],"offline":["desconnectat"],"Sorry, could not decrypt a received OMEMO message due to an error.":["No s\'ha pogut desencriptar aquest missatge OMEMO degut a un error."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s sembla que no té un client que permet OMEMO. Xat encriptat no serà possible a partir d\'ara."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["No es pot utilitzar encriptació end-to-end perquè %1$s utilitza un client que no utilitza OMEMO."],"Messages are being sent in plaintext":["Els missatges s\'estan enviant en text simple"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["S\'ha produït un error intentant eliminar els dispositius."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Estàs segur que vols generar claus OMEMO noves? Això esborrara les teves claus antigues i tots els missatges encriptats i ja no es podran desencriptar a aquest dispositiu."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["No és possible enviar missatges encriptats perquè %1$s et demana que estigues subscrit a la seva presencia per a poder veure la seva informació OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["No s\'han pogut enviar missatges encriptats perquè el servei %1$s no s\'ha trobat"],"Unable to send an encrypted message due to an unexpected error.":["No es poden veure els missatges encriptats degut a un error."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["No s\'han trobat dispositius als que es puguin envair missatges encriptats OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Aquest és un missatge encriptat amb OMEMO, el qual el teu client no permet. Troba més informació a https://conversations.im/omemo"]," e.g. conversejs.org":[" p. ex. conversejs.org"],"Fetch registration form":["Obtingues un formulari de registre"],"Tip: A list of public XMPP providers is available":["Consell: hi ha disponible una llista de proveïdors XMPP públics"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["No és possible connectar-se al proveïdor que has triat."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["El proveïdor indicat no admet el registre del compte. Proveu-ho amb un altre proveïdor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Ha passat alguna cosa mentre s\'establia la connexió amb \\"%1$s\\". Segur que existeix?"],"Now logging you in":["S\'està iniciant la vostra sessió"],"Registered successfully":["Registre correcte"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["El proveïdor ha rebutjat l\'intent de registre. Comproveu que els valors que heu introduït siguin correctes."],"Leave this groupchat":["Sortir del grup"],"Click to toggle the list of open groupchats":["Fes clic per obrir la llista de grups"],"Open Groupchats":["Grups oberts"],"Are you sure you want to leave the groupchat %1$s?":["Segur que vols sortir del grup %1$s?"],"Add":["Afegeix"],"Add a Contact":["Afegeix un Contacte"],"This contact is busy":["Aquest contacte està ocupat"],"This contact is online":["Aquest contacte està en línia"],"This contact is offline":["Aquest contacte està desconnectat"],"This contact is unavailable":["Aquest contacte no està disponible"],"This contact is away for an extended period":["Aquest contacte està absent durant un període prolongat"],"This contact is away":["Aquest contacte està absent"],"Contact name":["Nom del contacte"],"Optional nickname":["Àlies opcional"],"Sorry, could not find a contact with that name":["No s\'ha trobat un contacte amb aquest nom"],"This contact has already been added":["Aquest contacte ja l\'has afegit"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar per nom de contacte"],"Filter by group name":["Filtrar per nom de grup"],"Filter by status":["Filtrar per estat"],"Any":["Qualsevol"],"Unread":["No llegits"],"Chatty":["Xerraire"],"Extended Away":["No disponible durant llarg temps"],"Click to remove %1$s as a contact":["Feu clic per eliminar %1$s com a contacte"],"Click to accept the contact request from %1$s":["Feu clic per acceptar aquesta sol·licitud de contacte de %1$s"],"Click to decline the contact request from %1$s":["Feu clic per rebutjar aquesta sol·licitud de contacte de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Feu clic per conversar amb %1$s (adreça XMPP:%2$s)"],"Are you sure you want to decline this contact request?":["Segur que voleu rebutjar aquesta sol·licitud de contacte?"],"Contacts":["Contactes"],"Add a contact":["Afegeix un contacte"],"Re-sync your contacts":["Tornar a sincronitzar els contactes"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{510:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"ca"},"Create your account":["Crea el teu compte"],"Please enter the XMPP provider to register with:":["Si us plau, introdueix el proveïdor XMPP per registrar-se:"],"Already have a chat account?":["Ja tens un compte de xat?"],"Log in here":["Inicia sessió aqui"],"Account Registration:":["Crea un compte:"],"Register":["Registrar-se"],"Choose a different provider":["Tria un altre proveïdor"],"Hold tight, we\'re fetching the registration form…":["Tingues paciència, s\'està obtenint el formulari de registre…"],"Cancel":["Cancel·la"],"The connection has dropped, attempting to reconnect.":["S\'ha perdut la connexió, s\'està intentant reconnectar."],"An error occurred while connecting to the chat server.":["S\'ha produït un error al intentar connectar-se al servidor de xat."],"Your XMPP address and/or password is incorrect. Please try again.":["La teva adreça XMPP i/o la contrasenya no és correcta. Intenta-ho de nou."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["No s\'ha pogut connectar al servei XMPP amb el domini: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["El servidor XMPP no ha proporcionat cap mecanisme d\'autenticació compatible"],"Sorry, could not determine upload URL.":["No s\'ha pogut determinar URL."],"Sorry, could not determine file upload URL.":["No s\'ha pogut determinar el fitxer URL."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["No s\'ha pogut carregar el teu fitxer. La resposta del teu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["No s\'ha pogut carregar el teu fitxer amb èxit."],"Sorry, looks like file upload is not supported by your server.":["El teu servei no permet pujar fitxers."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La mida del teu fitxer de %1$s, excedeix el màxim permès pel teu servei, el qual és %2$s."],"Smileys and emotions":["Emoticones i emocions"],"People":["Gent"],"Activities":["Activitats"],"Travel":["Viatges"],"Objects":["Objectes"],"Animals and nature":["Animals i natura"],"Food and drink":["Aliments i begudes"],"Symbols":["Símbols"],"Flags":["Banderes"],"Stickers":["Enganxines"],"This groupchat is not anonymous":["Aquest grup no és anònim"],"This groupchat now shows unavailable members":["Aquesta sala ara mostra membres no disponibles"],"This groupchat does not show unavailable members":["Aquesta sala no mostra membres no disponibles"],"The groupchat configuration has changed":["S\'ha canviat la configuració del grup"],"Groupchat logging is now enabled":["El registre del grup està habilitat"],"Groupchat logging is now disabled":["El registre del grup està deshabilitat"],"This groupchat is now no longer anonymous":["Aquest grup ja no és anònim"],"This groupchat is now semi-anonymous":["Aquest grup ara és parcialment anònim"],"This groupchat is now fully-anonymous":["Aquest grup ara és totalment anònim"],"A new groupchat has been created":["S\'ha creat un grup nou"],"Your nickname has been automatically set to %1$s":["El teu àlies ha canviat automàticament a: %1$s"],"Your nickname has been changed to %1$s":["El teu àlies ha canviat a: %1$s"],"You have been banned from this groupchat":["Se t\'ha denegat l\'accés a aquest grup"],"You have been kicked from this groupchat":["Se\'t ha expulsat d\'aquest grup"],"You have been removed from this groupchat because of an affiliation change":["Se\'t ha eliminat d\'aquest grup a causa d\'un canvi d\'afiliació"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Se\'t ha eliminat d\'aquest grup perquè ara només permet membres i no en sou membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Se\'t ha eliminat d\'aquest grup perquè s\'està tancant el servei de xat multiusuari"],"Your message was not delivered because you weren\'t allowed to send it.":["El missatge no ha arribat perquè no tenies permés enviar-lo."],"Your message was not delivered because you\'re not present in the groupchat.":["El teu missatge no s\'ha enviat perquè no estàs al grup."],"You\'re not allowed to register yourself in this groupchat.":["No tens permís per registrar-te a aquest grup."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["No tens permís per accedir a aquest grup perquè és de només membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["No es pot registrar el teu àlies a aquest grup, ja que no permet enregistrar àlies."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["No es pot registrar el teu àlies a aquest grup, les dades que s\'han enviat no son vàlides."],"Topic set by %1$s":["%1$s ha especificat el tema"],"Topic cleared by %1$s":["%1$s ha eliminat el tema"],"%1$s has been banned by %2$s":["%2$s ha denegat l\'accés a %1$s"],"%1$s has been banned":["S\'ha denegat l\'accés a %1$s"],"%1$s\'s nickname has changed":["L\'àlies de %1$s ha canviat"],"%1$s has been kicked out by %2$s":["%2$s ha expulsat a %1$s"],"%1$s has been kicked out":["S\'ha expulsat a %1$s"],"%1$s has been removed because of an affiliation change":["S\'ha eliminat a %1$s a causa d\'un canvi d\'afiliació"],"%1$s has been removed for not being a member":["S\'ha eliminat a %1$s perquè no és membre"],"%1$s is no longer an admin of this groupchat":["%1$s ja no és un administrador d\'aquest grup"],"%1$s is no longer an owner of this groupchat":["%1$s ja no és el propietari d\'aquest grup"],"%1$s is no longer banned from this groupchat":["Aquest grup torna a permetre l\'accés de %1$s"],"%1$s is no longer a member of this groupchat":["%1$s ja no és membre d\'aquest grup"],"%1$s is now a member of this groupchat":["%1$s ara és membre d\'aquest grup"],"%1$s is now an %2$s of this groupchat":["%1$s ara és %2$s d\'aquest grup"],"The nickname you chose is reserved or currently in use, please choose a different one.":["L\'àlies que has triat està reservat o es troba en ús, si us plau trieu-ne un altre."],"Password incorrect":["Contrasenya incorrecta"],"You are not on the member list of this groupchat.":["No ets a la llista de membres d\'aquest grup."],"You have been banned from this groupchat.":["Se t\'ha denegat l\'accés a aquest grup."],"You are not allowed to create new groupchats.":["No tens permís per crear grups."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["El vostre àlies no compleix amb la política d\'aquest grup."],"This groupchat does not (yet) exist.":["Aquest grup no existeix (encara)."],"This groupchat has reached its maximum number of participants.":["Aquest grup ha assolit el nombre màxim d\'ocupants."],"Remote server not found":["No s\'ha trobat aquest servei"],"The explanation given is: \\"%1$s\\".":["El motiu indicat és: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s t\'ha convidat a unir-te a un grup de xat: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s t\'ha convidat a unir-te a un grup de xat (%2$s) i ha deixat el següent motiu: \\"%3$s\\""],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["S\'ha produït un error intentant guardar el grup a favorits."],"Timeout Error":["Límit de temps d\'espera excedit"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["El servei ha trigat massa en enviar els teus grups. Actualitza la pàgina per a demanar-los un altra vegada."],"My contacts":["Els meus contactes"],"Pending contacts":["Contactes pendents"],"Contact requests":["Sol·licituds de contacte"],"Ungrouped":["Sense agrupar"],"New messages":["Missatges nous"],"Sorry, there was an error while trying to add %1$s as a contact.":["S\'ha produït un error en intentar afegir %1$s com a contacte."],"This client does not allow presence subscriptions":["El contacte no permet subscripcions de presència"],"Click to hide these contacts":["Fes clic per amagar aquests contactes"],"Unbookmark this groupchat":["Eliminar grup de llista de grups"],"Click to open this groupchat":["Fes clic per obrir aquest grup"],"Click to toggle the bookmarks list":["Feu clic per a mostrar la llista de grups"],"Bookmarks":["Grups"],"Bookmark this groupchat":["Marca aquest grup"],"Would you like this groupchat to be automatically joined upon startup?":["T\'agradaria entrar automàticament a aquest grup?"],"The name for this bookmark:":["El nom per a aquest marcador:"],"What should your nickname for this groupchat be?":["Tria el teu àlies:"],"Save":["Desa"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Segur que voleu eliminar \\"%1$s\\"?"],"Unbookmark":["Desmarca"],"Bookmark":["Marca"],"Close":["Tancar"],"OK":["D\'acord"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Descarregar fitxer d\'audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Descarregar fitxer \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Versions del missatge"],"Retry":[""],"Uploading file:":["Pujant fitxer:"],"%1$s has removed this message":["%1$s ha eliminat el missatge"],"This message has been edited":["Aquest missatge ha sigut editat"],"Show more":["Mostrar més"],"No message history available.":["No hi ha historial de missatges disponible."],"Search results":["Cerca resultats"],"Search":["Cerca"],"Insert emojis":["Insereix emoticones"],"Send the message":["Envia el missatge"],"Start a call":["Inicia una trucada"],"Message characters remaining":["Caràcters del missatge restants"],"Choose a file to send":["Tria el fitxer per enviar"],"Click to write as a normal (non-spoiler) message":["Fes clic per a escriure un missatge normal(sense spoiler)"],"Click to write your message as a spoiler":["Fes clic aquí per escriure un missatge amb spoiler"],"The User\'s Profile Image":["Imatge de perfil"],"Trusted":["Acceptada"],"Untrusted":["Denegada"],"OMEMO Fingerprints":["Empremta digital OMEMO"],"No OMEMO-enabled devices found":["No s\'han trobat dispositius amb OMEMO"],"Remove as contact":["Eliminar com a contacte"],"XMPP Address":["Adreça XMPP"],"Email":["Correu electrònic"],"Full Name":["Nom Complet"],"Nickname":["Àlies"],"Refresh":["Actualitzar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s està escrivint"],"%1$s has stopped typing":["%1$s ha deixat d\'escriure"],"%1$s has gone away":["%1$s és absent"],"Remove messages":["Elimina els missatges"],"Close this chat":["Tanca aquest xat"],"Write in the third person":["Escriu en tercera persona"],"Show this menu":["Mostra aquest menú"],"Hidden message":["Missatge amagat"],"Message":["Missatge"],"Optional hint":["Informació opcional"],"You have unread messages":["Tens missatges per llegir"],"Details":["Detalls"],"See more information about this person":["Mostra més informació sobre aquesta persona"],"Close and end this conversation":["Tanca i finalitza aquesta conversa"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tingues en compte que altres clients i serveis XMPP/Jabber potser no permeten eliminar missatges, és a dir, aquest missatge potser no s\'elimina totalment."],"Are you sure you want to retract this message?":["Segur que vols eliminar aquest missatge?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Tens un missatge per a enviar, s\'esborrarà si continues. Estàs segur que vols continuar?"],"Are you sure you want to clear the messages from this conversation?":["Segur que voleu esborrar els missatges d\'aquest a conversa?"],"%1$s has gone offline":["%1$s s\'ha desconnectat"],"%1$s is busy":["%1$s està ocupat"],"%1$s is online":["%1$s està en línia"],"Sorry, something went wrong while trying to refresh":["S\'ha produït un error intentant actualitzar"],"Are you sure you want to remove this contact?":["Segur que voleu eliminar aquest contacte?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["S\'ha produït un error intentant eliminar %1$s com a contacte."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per a millorar el rendiment, es recullen les teves dades a aquest navegador. Desmarca aquesta opció si estàs utilitzant un ordinador públic o si vols que les teves dades s\'esborrin quan et desconnectes. És important que explícitament et desconnectis, d\'altra manera, totes les dades recollides potser no s\'esborrin. Tingues en compte que l\'encriptació OMEMO no està disponible quan utilitzes un dispositiu amb el que no confies."],"This is a trusted device":["Aquest dispositiu és de confiança"],"Password":["Contrasenya"],"Create an account":["Crea un compte"],"Don\'t have a chat account?":["No tens un compte de xat?"],"Log in":["Inicia la sessió"],"Disconnected":["Desconnectat"],"Click here to log in anonymously":["Fes clic aquí per iniciar la sessió de manera anònima"],"Username":["Nom d\'usuari"],"user@domain":["usuari@domini"],"Please enter a valid XMPP address":["Introdueix una adreça XMPP vàlida"],"Chat Contacts":["Contactes"],"Toggle chat":["Canvia de xat"],"Click to restore this chat":["Fes clic per restaurar aquest xat"],"Minimized":["Minimitzat"],"Minimize":["Minimitzar"],"Minimize this chat":["Minimitza aquest xat"],"Minimize this groupchat":["Minimitza aquest grup"],"This user is a moderator.":["Aquest usuari és un moderador."],"This user can send messages in this groupchat.":["Aquest usuari pot enviar missatges a aquest grup."],"This user can NOT send messages in this groupchat.":["Aquest usuari NO pot enviar missatges a aquest grup."],"Owner":["Propietari"],"Admin":["Administrador"],"Member":["Membre"],"Moderator":["Moderador"],"Visitor":["Visitant"],"Click to mention %1$s in your message.":["Fes clic per a mencionar a %1$s al teu missatge."],"Participants":["Participants"],"This field is required":["Aquest camp és necessari"],"Join":["Unir-se al grup"],"Enter a new Groupchat":["Entrar a un grup nou"],"name@conference.example.org":["nom@conferencia.exemple.org"],"Groupchat name":["Nom del grup"],"Groupchat address":["Adreça del grup"],"Groupchat id is invalid.":["El ID del grup no és vàlid."],"Invite":["Convida"],"Invite someone to this groupchat":["Convida algú a aquest grup"],"user@example.org":["usuari@exemple.org"],"Optional reason for the invitation":["Raó opcional per la invitació"],"Show groupchats":["Mostrar grups"],"Server address":["Adreça del servei"],"Show more information on this groupchat":["Mostra més informació d\'aquest grup"],"Query for Groupchats":["Cercar grups"],"Description:":["Descripció:"],"Groupchat Address (JID):":["Adreça del grup(JID):"],"Participants:":["Participants:"],"Features:":["Característiques:"],"Requires authentication":["Cal autenticar-se"],"Hidden":["Amagat"],"Requires an invitation":["Cal tenir una invitació"],"Moderated":["Moderada"],"Non-anonymous":["No és anònima"],"Open":["Obre"],"Permanent":["Grup permanent"],"Public":["Pública"],"Semi-anonymous":["Semi-anònima"],"Temporary":["Temporal"],"Unmoderated":["No moderada"],"conference.example.org":["conferencia@exemple.org"],"No groupchats found":["No s\'ha trobat cap grup"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Els moderadors son usuaris privilegiats que poden canviar el rol d\'altres usuaris, exceptuant els usuaris que tinguen afiliació d\'administrador o de propietari."],"The default role, implies that you can read and write messages.":["El rol per defecte et permet que puguis llegir i escriure missatges."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Els usuaris visitants no tenen permís per a escriure missatges a un grup amb moderadors."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["L\'afiliació més alta és la de propietari. Els propietaris poden modificar els rols i les afiliacions de tots els altres usuaris."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["La segona afiliació més alta és la d\'administrador. Els administradors poden modificar els rols i les afiliacions de tots els usuaris excepte la del propietari."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per a denegar el accés a un usuari, li dones l\'afiliació de \\"exiliat\\"."],"Change role":["Canviar rol"],"New Role":["Nou rol"],"Reason":["Raó"],"Change affiliation":["Canviar l\'afiliació"],"New affiliation":["Nova afiliació"],"Affiliation":["Afiliació"],"Moderator Tools":["Eines de moderador"],"No users with that affiliation found.":["No s\'han trobat usuaris amb aquest tipus d\'afiliació."],"No users with that role found.":["No s\'han trobat usuaris amb aquest rol."],"Type here to filter the search results":["Escriu aquí per a filtrar els resultats de recerca"],"Show users":["Mostrar els usuaris"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Els rols s\'assignen per a denegar o permetre\'ls certes habilitats dins d\'un grup. S\'assignen explícitament com a part d\'una afiliació. Un rol que no està assignat a una afiliació, només té validesa durant la sessió de l\'usuari."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliació és un dret a llarg termini que normalment implica un cert rol que concedeix privilegis i responsabilitats. Per exemple, els administradors i propietaris tenen automàticament el rol de moderador."],"Sorry, something went wrong while trying to set the affiliation":["S\'ha produït un error intentant assignar l\'afiliació"],"Affiliation changed":["L\'afiliació ha canviat"],"Role changed":["El rol ha canviat"],"You\'re not allowed to make that change":["No tens permís per fer aquest canvi"],"Sorry, something went wrong while trying to set the role":["S\'ha produït un error intentant assignar el rol"],"Topic":["Tema"],"Topic author":["Autor del tema"],"Groupchat address (JID)":["Adreça del grup(JID)"],"Message archiving":["Emmagatzematge de missatges"],"Messages are archived on the server":["Els missatges estan arxivats al servei"],"Description":["Descripció"],"Features":["Característiques"],"This groupchat is not publicly searchable":["Aquest grup no es pot buscar públicament"],"This groupchat is restricted to members only":["Aquest grup està limitat a només membres"],"Members only":["Només membres"],"Participants entering this groupchat need to request permission to write":["Els participants que entren aquest grup han de demanar permís per a escriure"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Aquest grup no requereix de contrasenya"],"No password required":["No es necessita contrasenya"],"Not anonymous":["No és anònima"],"All other groupchat participants can see your XMPP address":["Tots els participants d\'aquest grup poden veure la teva adreça XMPP"],"Not moderated":["No moderada"],"Participants entering this groupchat can write right away":["Els participants que entren a aquest grup poden escriure sense demanar permís"],"Online users":["Usuaris en línea"],"Anyone can join this groupchat":["Qualsevol usuari pot entrar a aquest grup"],"This groupchat requires a password before entry":["Aquest grup requereix una contrasenya abans d\'entrar"],"Password protected":["Protegit per contrasenya"],"Persistent":["Persistent"],"This groupchat persists even if it\'s unoccupied":["Aquest grup no s\'esborra encara que no hi hagi participants"],"Only moderators can see your XMPP address":["Només els moderadors poden veure la teva adreça XMPP"],"This groupchat will disappear once the last person leaves":["Aquest grup s\'eliminarà quan l\'últim participant surti"],"This groupchat is publicly searchable":["Aquest grup es pot buscar públicament"],"Groupchat info for %1$s":["Informació del grup per a %1$s"],"You\'re not allowed to send messages in this room":["No teniu permís per enviar missatges a aquesta sala"],"The conversation has moved. Click below to enter.":["Aquesta conversa ha sigut moguda. Fes clic a continuació per entrar."],"This groupchat no longer exists":["Aquest grup ja no existeix"],"Hide the groupchat topic":["Amaga el tema del grup"],"This groupchat is bookmarked":["Aquest grup no està marcat com a favorit"],"Enter groupchat":["Entrar al grup"],"Choose a nickname to enter":["Tria un àlies per a entrar"],"Please choose your nickname":["Tria el teu àlies"],"This groupchat requires a password":["Aquest grup requereix una contrasenya"],"Password: ":["Contrasenya: "],"Submit":["Envia"],"%1$s has entered the groupchat":["%1$s ha entrat al grup"],"%1$s has left the groupchat":["%1$s ha sortit del grup"],"%1$s is now a moderator":["S\'han donat privilegis de moderació a %1$s"],"%1$s is no longer a moderator":["%1$s ja no és un moderador"],"%1$s has been given a voice":["%1$s ja pot participar a aquest grup"],"%1$s has been muted":["S\'ha silenciat a %1$s"],"%1$s and %2$s":["%1$s i %2$s"],"%1$s are typing":["%1$s estan escrivint"],"%1$s have stopped typing":["%1$s han deixat d\'escriure"],"%1$s have gone away":["%1$s no està disponible"],"%1$s have entered the groupchat":["%1$s han entrat al grup"],"%1$s have left the groupchat":["%1$s han sortit del grup"],"Change user\'s affiliation to admin":["Canvia l\'afiliació de l\'usuari a administrador"],"Ban user by changing their affiliation to outcast":["Denega l\'accés a l\'usuari canviant l\'afiliació a exiliat"],"Clear the chat area":["Neteja l\'àrea de xat"],"Close this groupchat":["Tancar aquest grup"],"Change user role to participant":["Canvia el rol de l\'usuari a participant"],"Remove this groupchat":["Esborrar aquest grup"],"Kick user from groupchat":["Expulsa l\'usuari del grup"],"Write in 3rd person":["Escriu en tercera persona"],"Grant membership to a user":["Atorga una afiliació a un usuari"],"Opens up the moderator tools GUI":["Obre les eines de moderador GUI"],"Remove user\'s ability to post messages":["Elimina la capacitat de l\'usuari de publicar missatges"],"Change your nickname":["Canvia el teu àlies"],"Grant moderator role to user":["Atorga el rol de moderador a l\'usuari"],"Grant ownership of this groupchat":["Atorga la propietat d\'aquest grup"],"Register your nickname":["Registra el teu àlies"],"Revoke the user\'s current affiliation":["Anul·la l\'afliació del usuari"],"Set groupchat subject":["Defineix un tema per al grup"],"Set groupchat subject (alias for /subject)":["Defineix el tema del grup (àlies per a / tema)"],"Allow muted user to post messages":["Permet que un usuari silenciat publiqui missatges"],"You are about to retract this message.":["Estàs apunt d\'eliminar aquest missatge."],"You may optionally include a message, explaining the reason for the retraction.":["Teniu l\'opció d\'incloure un missatge per explicar el motiu de l\'eliminació."],"Message Retraction":["Retracció del missatge"],"Optional reason":["Raó opcional"],"Sorry, you\'re not allowed to retract this message":["No tens permís per a retractar-te d\'aquest missatge"],"A timeout occurred while trying to retract the message":["El temps d\'espera a expirat intentant retractar el missatge"],"Sorry, you\'re not allowed to retract this message.":["No tens permís per a retractar aquest missatge."],"Show more information about this groupchat":["Mostra més informació sobre aquest grup"],"Configure":["Configurar"],"Configure this groupchat":["Configurar aquest grup"],"Invite someone to join this groupchat":["Convidar algú a unir-se a aquest grup"],"Show topic":["Mostrar tema"],"Hide topic":["Amagar tema"],"Show the topic message in the heading":["Mostrar el missatge del tema a la capçalera"],"Hide the topic in the heading":["Amaga el tema a la capçalera"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar aquest grup"],"Destroy":["Destruir"],"Leave":["Sortir"],"Leave and close this groupchat":["Sortir i tancar aquest grup"],"Are you sure you want to leave this groupchat?":["Segur que vols sortir d\'aquest grup?"],"Hide the list of participants":["Amaga la llista de participants"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibit: no tens el rol necessari per a fer això."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibit: no tens l\'afiliació necessària per a fer això."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error: l\'ordre %1$s accepta dos paràmetres, l\'àlies de l\'usuari i una raó opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error: no s\'ha pogut trobar un participant del grup basat amb els teus paràmetres"],"Error: found multiple groupchat participant based on your arguments":["Error: s\'han trobat diversos participants del grup basats en els teus paràmetres"],"Sorry, an error happened while running the command.":["S\'ha produït un error intentant executar l\'ordre."],"Check your browser\'s developer console for details.":["Revisa la consola del desenvolupador del navegador per a detalls."],"Are you sure you want to destroy this groupchat?":["Segur que vols eliminar aquest grup?"],"name@example.org":["nom@exemple.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["El vostre àlies és: %1$s"],"Error: invalid number of arguments":["Error: nombre de paràmetres invalid"],"This action was done by %1$s.":["Aquesta acció l\'ha fet %1$s."],"The reason given is: \\"%1$s\\".":["El motiu indicat és: \\"%1$s\\"."],"Groupchats":["Grups"],"Add a new groupchat":["Afegeix un nou grup"],"Query for groupchats":["Demana els grups"],"Sorry, an error occurred while trying to submit the config form.":["S\'ha produït un error intentant desar el formulari de configuració."],"Close these announcements":["Tanca aquests anuncis"],"Announcements":["Anuncis"],"Click to open this server message":["Fes clic per obrir aquest missatge del servei"],"Notification from %1$s":["Notificació de %1$s"],"%1$s says":["%1$s diu"],"has gone offline":["s\'ha desconnectat"],"has gone away":["ha marxat"],"is busy":["està ocupat"],"has come online":["s\'ha connectat"],"wants to be your contact":["vol ser el teu contacte"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Informació"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s codi obert %2$s client de xat XMPP facilitat per %3$s Opkode%2$s"],"%1$s Translate %2$s it into your own language":["%1$s Tradueix %2$s al teu idioma"],"Log out":["Tanca la sessió"],"Click to change your chat status":["Fes clic per canviar l\'estat del xat"],"Show details about this chat client":["Mostra més informació sobre aquest client de xat"],"Your avatar image":["La imatge del teu avatar"],"Checkbox for selecting the following fingerprint":["Casella per a seleccionar la següent empremta digital"],"Device without a fingerprint":["Verifica sense empremtes"],"Other OMEMO-enabled devices":["Altres dispositius amb OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Marca la casella per a seleccionar empremtes per als altres dispositius OMEMO"],"Remove checked devices and close":["Esborrar els dispositius marcats i tancar"],"Select all":["Seleccionar-ho tot"],"This device\'s OMEMO fingerprint":["L\'empremta OMEMO d\'aquest dispositiu"],"Generate new keys and fingerprint":["Generar noves claus i empremtes"],"Your Profile":["El Teu Perfil"],"XMPP Address (JID)":["Adreça XMPP (JID)"],"Save and close":["Guardar i tancar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilitza comes per a separar múltiples rols. Els teus rols es mostren al costat del teu nom als teus missatges."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["S\'ha produït un error intentant guardar les dades del teu perfil."],"You can check your browser\'s developer console for any error output.":["Pots revisar la consola del teu navegador per a qualsevol error resultat."],"Away":["Absent"],"Busy":["Ocupat"],"Custom status":["Estat personalitzat"],"Offline":["Desconnectat"],"Online":["En línia"],"Away for long":["Absent durant un llarg termini"],"Change chat status":["Canviar el teu estat de xat"],"Personal status message":["Missatge d\'estat personal"],"I am %1$s":["Estic %1$s"],"Are you sure you want to log out?":["Segur que vols desconnectar-te?"],"online":["en línia"],"busy":["ocupat"],"away for long":["absent durant una estona"],"away":["absent"],"offline":["desconnectat"],"Sorry, could not decrypt a received OMEMO message due to an error.":["No s\'ha pogut desencriptar aquest missatge OMEMO degut a un error."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s sembla que no té un client que permet OMEMO. Xat encriptat no serà possible a partir d\'ara."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["No es pot utilitzar encriptació end-to-end perquè %1$s utilitza un client que no utilitza OMEMO."],"Messages are being sent in plaintext":["Els missatges s\'estan enviant en text simple"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["No és possible enviar missatges encriptats perquè %1$s et demana que estigues subscrit a la seva presencia per a poder veure la seva informació OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["No s\'han pogut enviar missatges encriptats perquè el servei %1$s no s\'ha trobat"],"Unable to send an encrypted message due to an unexpected error.":["No es poden veure els missatges encriptats degut a un error."],"Sorry, an error occurred while trying to remove the devices.":["S\'ha produït un error intentant eliminar els dispositius."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Estàs segur que vols generar claus OMEMO noves? Això esborrara les teves claus antigues i tots els missatges encriptats i ja no es podran desencriptar a aquest dispositiu."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["No s\'han trobat dispositius als que es puguin envair missatges encriptats OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Aquest és un missatge encriptat amb OMEMO, el qual el teu client no permet. Troba més informació a https://conversations.im/omemo"]," e.g. conversejs.org":[" p. ex. conversejs.org"],"Fetch registration form":["Obtingues un formulari de registre"],"Tip: A list of public XMPP providers is available":["Consell: hi ha disponible una llista de proveïdors XMPP públics"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["No és possible connectar-se al proveïdor que has triat."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["El proveïdor indicat no admet el registre del compte. Proveu-ho amb un altre proveïdor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Ha passat alguna cosa mentre s\'establia la connexió amb \\"%1$s\\". Segur que existeix?"],"Now logging you in":["S\'està iniciant la vostra sessió"],"Registered successfully":["Registre correcte"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["El proveïdor ha rebutjat l\'intent de registre. Comproveu que els valors que heu introduït siguin correctes."],"Leave this groupchat":["Sortir del grup"],"Click to toggle the list of open groupchats":["Fes clic per obrir la llista de grups"],"Open Groupchats":["Grups oberts"],"Are you sure you want to leave the groupchat %1$s?":["Segur que vols sortir del grup %1$s?"],"Add":["Afegeix"],"Add a Contact":["Afegeix un Contacte"],"This contact is busy":["Aquest contacte està ocupat"],"This contact is online":["Aquest contacte està en línia"],"This contact is offline":["Aquest contacte està desconnectat"],"This contact is unavailable":["Aquest contacte no està disponible"],"This contact is away for an extended period":["Aquest contacte està absent durant un període prolongat"],"This contact is away":["Aquest contacte està absent"],"Contact name":["Nom del contacte"],"Optional nickname":["Àlies opcional"],"Sorry, could not find a contact with that name":["No s\'ha trobat un contacte amb aquest nom"],"This contact has already been added":["Aquest contacte ja l\'has afegit"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar per nom de contacte"],"Filter by group name":["Filtrar per nom de grup"],"Filter by status":["Filtrar per estat"],"Any":["Qualsevol"],"Unread":["No llegits"],"Chatty":["Xerraire"],"Extended Away":["No disponible durant llarg temps"],"Click to remove %1$s as a contact":["Feu clic per eliminar %1$s com a contacte"],"Click to accept the contact request from %1$s":["Feu clic per acceptar aquesta sol·licitud de contacte de %1$s"],"Click to decline the contact request from %1$s":["Feu clic per rebutjar aquesta sol·licitud de contacte de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Feu clic per conversar amb %1$s (adreça XMPP:%2$s)"],"Are you sure you want to decline this contact request?":["Segur que voleu rebutjar aquesta sol·licitud de contacte?"],"Contacts":["Contactes"],"Add a contact":["Afegeix un contacte"],"Re-sync your contacts":["Tornar a sincronitzar els contactes"]}}}')}}]);
 //# sourceMappingURL=ca-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/cs-LC_MESSAGES-converse-po.js b/src/conversejs/locales/cs-LC_MESSAGES-converse-po.js
index 87517ccd6a3cbe7723f741f4a752e7c039405bf2..faf014c1275c36ed4287eb9b5e3dcdb8d96d1d22 100644
--- a/src/conversejs/locales/cs-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/cs-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{423:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"cs"},"Create your account":["Vytvořit svůj účet"],"Please enter the XMPP provider to register with:":["Prosím zadejte poskytovatele XMPP, se kterým se chcete registrovat:"],"Already have a chat account?":["Již máte chatovací účet?"],"Log in here":["Přihlaste se zde"],"Account Registration:":["Registrace účtu:"],"Register":["Registrovat"],"Choose a different provider":["Vybrat jiného poskytovatele"],"Hold tight, we\'re fetching the registration form…":["Vydržte, sháníte registrační formulář…"],"Cancel":["Zrušit"],"The connection has dropped, attempting to reconnect.":["Spojení bylo přerušeno, pokoušíme se znovu spojit."],"An error occurred while connecting to the chat server.":["Při připojování na chatovací server se vyskytla chyba."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Omlouváme se, nemohli jsme se spojit s XMPP hostem s doménou: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP server nenabídl podporovaný autentikační mechanismus"],"Sorry, could not determine upload URL.":["Omlouváme se, nelze určit URL nahrání."],"Sorry, could not determine file upload URL.":["Omlouváme se, nelze určit URL nahraného souboru."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Omlouváme se, nelze úspěšně nahrát váš soubor. Odpověď vašeho serveru: „%1$s“"],"Sorry, could not succesfully upload your file.":["Omlouváme se, nelze úspěšně nahrát váš soubor."],"Sorry, looks like file upload is not supported by your server.":["Omlouváme se, vypadá to, že váš server nepodporuje nahrávání souborů."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Velikost vašeho serveru, %1$s, přesahuje maximum povolené vaším serverem, což je %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Tento skupinový chat není anonymní"],"This groupchat now shows unavailable members":["Tento skupinový chat nyní zobrazuje nedostupné členy"],"This groupchat does not show unavailable members":["Tento skupinový chat nezobrazuje nedostupné členy"],"The groupchat configuration has changed":["Nastavení skupinového chatu se změnila"],"This groupchat is now no longer anonymous":["Tento skupinový chat již není anonymní"],"This groupchat is now semi-anonymous":["Tento skupinový chat je nyní zčásti anonymní"],"This groupchat is now fully-anonymous":["Tento skupinový chat je nyní zcela anonymní"],"A new groupchat has been created":["Byl vytvořen nový skupinový chat"],"Your nickname has been automatically set to %1$s":["Vaše přezdívka byla automaticky nastavena na %1$s"],"Your nickname has been changed to %1$s":["Vaše přezdívka byla změněna na %1$s"],"You have been banned from this groupchat":["Byl/a jste na tomto skupinovém chatu zakázán/a"],"You have been kicked from this groupchat":["Byl/a jste z tohoto skupinového chatu vyhozen/a"],"You have been removed from this groupchat because of an affiliation change":["Byl/a jste z tohoto skupinového chatu odebrán/a kvůli změně příslušnosti"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Byl/a jste z tohoto skupinového chatu odstraněn/a, protože se skupinový chat změnil na pouze pro členy a vy nejste členem"],"You have been removed from this groupchat because the service hosting it is being shut down":["Byl/a jste z tohoto skupinového chatu odstraněn/a, protože se služba, která jej hostuje, vypíná"],"You\'re not allowed to register yourself in this groupchat.":["Nemáte povolení se registrovat v tomto skupinovém chatu."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nemáte povolení se registrovat v tomto skupinovém chatu, neboť je pouze pro členy."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nelze registrovat vaši přezdívku v tomto skupinovém chatu, protože nepodporuje registraci."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nelze registrovat vaši přezdívku v tomto skupinovém chatu, protože je poskytnuta neplatná forma dat."],"Topic set by %1$s":["Téma nastavené uživatelem %1$s"],"Topic cleared by %1$s":["Téma potvrzené uživatelem %1$s"],"%1$s has been banned":["%1$s byl/a zakázán/a"],"%1$s\'s nickname has changed":["Přezdívka uživatele %1$s se změnila"],"%1$s has been kicked out":["%1$s byl/a vyhozen/a"],"%1$s has been removed because of an affiliation change":["%1$s byl/a odstraněn/a kvůli změně příslušnosti"],"%1$s has been removed for not being a member":["%1$s byl/a odstraněna, protože není členem"],"%1$s is no longer an admin of this groupchat":["%1$s již není administrátorem tohoto skupinového chatu"],"%1$s is no longer an owner of this groupchat":["%1$s již není vlastníkem tohoto skupinového chatu"],"%1$s is no longer banned from this groupchat":["%1$s již není na tomto skupinovém chatu zakázán/a"],"%1$s is now an %2$s of this groupchat":["%1$s je nyní %2$s tohoto skupinového chatu"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Přezdívka, kterou jste si vybral/a, je rezervována či aktuálně používána, prosím vyberte si jinou."],"You are not on the member list of this groupchat.":["Nejste na seznamu členů tohoto skupinového chatu."],"You have been banned from this groupchat.":["Byl/a jste na tomto skupinovém chatu zakázán/a."],"You are not allowed to create new groupchats.":["Nemáte povolení vytvářet nové skupinové chaty."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Vaše přezdívka nevyhovuje zásadám tohoto skupinového chatu."],"This groupchat does not (yet) exist.":["Tento skupinový chat (ještě) neexistuje."],"This groupchat has reached its maximum number of participants.":["Tento skupinový chat dosáhl svého maximálního počtu účastníků."],"Remote server not found":["Vzdálený server nenalezen"],"The explanation given is: \\"%1$s\\".":["Dané vysvětlení je: „%1$s“."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vás pozval/a do skupinového chatu: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vás pozval/a do skupinového chatu: %2$s, a zanechal/a následující důvod: „%3$s“"],"Error":["Chyba"],"Sorry, something went wrong while trying to save your bookmark.":["Omlouváme se, při pokusu o uložení vaší záložky se něco pokazilo."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Moje kontakty"],"Pending contacts":["Čekající kontakty"],"Contact requests":["Požadavky o kontakt"],"Ungrouped":["Neseskupené"],"Sorry, there was an error while trying to add %1$s as a contact.":["Omlouváme se při pokusu přidat uživatele %1$s do kontaktů se stala chyba."],"This client does not allow presence subscriptions":["Tento klient nedovoluje presenční odběry"],"Click to hide these contacts":["Kliknutím skryjete tyto kontakty"],"Unbookmark this groupchat":["Odstranit tento skupinový chat ze záložek"],"Click to open this groupchat":["Kliknutím otevřete tento skupinový chat"],"Click to toggle the bookmarks list":["Kliknutím otevřete/zavřete seznam záložek"],"Bookmarks":["Záložky"],"Bookmark this groupchat":["Přidat tento skupinový chat do záložek"],"Would you like this groupchat to be automatically joined upon startup?":["Chcete se k tomuto skupinovému chatu automaticky připojit po startu?"],"The name for this bookmark:":["Název pro tuto záložku:"],"What should your nickname for this groupchat be?":["Jaká bude vaše přezdívka pro tento skupinový chat?"],"Save":["Uložit"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Opravdu chcete odstranit záložku „%1$s“?"],"Close":["Zavřít"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Stáhnout audiosoubor „%1$s“"],"Download file \\"%1$s\\"":["Stáhnout soubor „%1$s“"],"Edit":[""],"Retract":[""],"Message versions":["Verze zprávy"],"Retry":[""],"Uploading file:":["Nahrává se soubor:"],"This message has been edited":["Tahle zpráva byla upravena"],"Show more":["Zobrazit více"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Vložit emoji"],"Start a call":["Začít hovor"],"Choose a file to send":["Vyberte soubor k odeslání"],"Click to write as a normal (non-spoiler) message":["Kliknutím napíšete jako normální zprávu (bez spoilerů)"],"Click to write your message as a spoiler":["Kliknutím napíšete svou zprávu jako spoiler"],"The User\'s Profile Image":["Profilový obrázek uživatele"],"Trusted":["Důvěryhodné"],"Untrusted":["Nedůvěryhodné"],"OMEMO Fingerprints":["Otisky OMEMO"],"Remove as contact":["Odstranit z kontaktů"],"XMPP Address":["XMPP adresa"],"Email":["E-mail"],"Full Name":["Celé jméno"],"Nickname":["Přezdívka"],"Refresh":["Obnovit"],"Role":["Role"],"URL":["URL"],"%1$s is typing":["%1$s píše"],"%1$s has stopped typing":["%1$s přestal/a psát"],"%1$s has gone away":["%1$s odešel/la pryč"],"Remove messages":["Odstranit zprávy"],"Write in the third person":["Psát ve třetí osobě"],"Show this menu":["Zobrazit tohle menu"],"Hidden message":["Skrytá zpráva"],"Message":["Zpráva"],"Optional hint":["Volitelná nápověda"],"You have unread messages":["Máte nepřečtené zprávy"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Opravdu chcete vymazat zprávy z téhle konverzace?"],"%1$s has gone offline":["%1$s se odpojil/a"],"%1$s is busy":["%1$s je zaneprázdněn/a"],"%1$s is online":["%1$s je připojen/a"],"Sorry, something went wrong while trying to refresh":["Omlouváme se, při pokusu o obnovení se něco pokazilo"],"Are you sure you want to remove this contact?":["Opravdu chcete odstranit tento kontakt?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Omlouváme se, při odstraňování uživatele %1$s z kontaktů se vyskytla chyba."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["K vylepšení výkonu ukládáme vaše data do mezipaměti tohoto prohlížeče. Je-li tohle veřejný počítač, nebo chcete-li, aby byla vaše data po odhlášení smazána, odškrtněte toto pole. Je důležité, abyste se výslovně odhlásil/a, jinak nemusí být smazána všechna data v mezipaměti. Mějte prosím na vědomí, že pokud používáte nedůvěryhodné zařízení, NENÍ podporováno šifrování OMEMO."],"This is a trusted device":["Tohle je důvěryhodné zařízení"],"Create an account":["Vytvořte si účet"],"Don\'t have a chat account?":["Nemáte chatovací účet?"],"Log in":["Přihlásit"],"Disconnected":[""],"Click here to log in anonymously":["Kliknutím sem se přihlásíte anonymně"],"Username":["Uživatelské jméno"],"user@domain":["uživatel@doména"],"Please enter a valid XMPP address":["Prosím zadejte platnou XMPP adresu"],"Chat Contacts":["Chatové kontakty"],"Toggle chat":["Otevřít chat"],"Click to restore this chat":["Kliknutím obnovíte tento chat"],"Minimized":["Zmenšeno"],"This field is required":["Toto pole je vyžadováno"],"Join":["Přidat se"],"Enter a new Groupchat":["Vstoupit do nového skupinového chatu"],"name@conference.example.org":["jmeno@conference.priklad.cz"],"Groupchat name":["Název skupinového chatu"],"Groupchat address":["Adresa skupinového chatu"],"Invite":["Pozvat"],"Show groupchats":["Zobrazit skupinové chaty"],"Server address":["Adresa serveru"],"Show more information on this groupchat":["Zobrazit více informací o tomto skupinovém chatu"],"Query for Groupchats":["Dotaz pro skupinové chaty"],"Description:":["Popis:"],"Groupchat Address (JID):":["Adresa skupinového chatu (JID):"],"Participants:":["Účastníci:"],"Features:":["Vlastnosti:"],"Requires authentication":["Vyžaduje ověření"],"Hidden":["Skryté"],"Requires an invitation":["Vyžaduje pozvání"],"Moderated":["Moderováno"],"Non-anonymous":["Neanonymní"],"Open":["Otevřené"],"Permanent":["Trvalé"],"Public":["Veřejné"],"Semi-anonymous":["Zčásti anonymní"],"Temporary":["Dočasné"],"Unmoderated":["Nemoderováno"],"conference.example.org":["conference.priklad.cz"],"No groupchats found":["Nenalezeny žádné skupinové chaty"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Téma"],"Topic author":["Autor tématu"],"Groupchat address (JID)":["Název skupinového chatu (JID)"],"Message archiving":["Archivace zpráv"],"Messages are archived on the server":["Na tomto serveru jsou archivovány zprávy"],"Description":["Popis"],"Features":["Vlastnosti"],"This groupchat is not publicly searchable":["Tento skupinový chat není veřejně vyhledávatelný"],"This groupchat is restricted to members only":["Tento skupinový chat je omezen pouze na členy"],"Members only":["Pouze pro členy"],"Participants entering this groupchat need to request permission to write":["Účastníci vstupující do tohoto skupinového chatu si musí vyžádat povolení psát"],"Name":["Jméno"],"This groupchat does not require a password upon entry":["Tento skupinový chat nevyžaduje při vstupu heslo"],"No password required":["Heslo nevyžadováno"],"Not anonymous":["Není anonymní"],"All other groupchat participants can see your XMPP address":["Všichni ostatní účastníci skupinového chatu mohou vidět vaši XMPP adresu"],"Not moderated":["Není moderován"],"Participants entering this groupchat can write right away":["Účastníci vstupující do tohoto skupinového chatu mohou psát ihned"],"Online users":["Připojení uživatelé"],"Anyone can join this groupchat":["Kdokoliv se k tomuto skupinovému chatu může připojit"],"This groupchat requires a password before entry":["Tento skupinový chat vyžaduje před vstupem heslo"],"Password protected":["Ochráněno heslem"],"Persistent":["Trvalý"],"This groupchat persists even if it\'s unoccupied":["Tento skupinový chat přetrvává, i když na něm nikdo není"],"Only moderators can see your XMPP address":["Pouze moderátoři mohou vidět vaši XMPP adresu"],"This groupchat will disappear once the last person leaves":["Tento skupinový chat zmizí, jakmile poslední osoba odejde"],"This groupchat is publicly searchable":["Tento skupinový chat je veřejně vyhledávatelný"],"Groupchat info for %1$s":["Informace o skupinovém chatu %1$s"],"The conversation has moved. Click below to enter.":["Konverzace se přesunula. Kliknutím níže do ní vstoupíte."],"This groupchat no longer exists":["Tento skupinový chat již neexistuje"],"Enter groupchat":["Vstoupit do skupinového chatu"],"Please choose your nickname":["Prosím vyberte si přezdívku"],"This groupchat requires a password":["Tento skupinový chat vyžaduje heslo"],"Password: ":["Heslo: "],"Submit":["Odeslat"],"This user is a moderator.":["Tento uživatel je moderátorem."],"This user can send messages in this groupchat.":["Tento uživatel může posílat zprávy v tomto skupinovém chatu."],"This user can NOT send messages in this groupchat.":["Tento uživatel NEMŮŽE posílat zprávy v tomto skupinovém chatu."],"Owner":["Vlastník"],"Admin":["Administrátor"],"Member":["Člen"],"Moderator":["Moderátor"],"Visitor":["Návštěvník"],"Click to mention %1$s in your message.":["Kliknutím zmíníte uživatele %1$s ve své zprávě."],"Participants":["Účastníci"],"%1$s has entered the groupchat":["%1$s vstoupil/a do skupinového chatu"],"%1$s has left the groupchat":["%1$s odešel/la ze skupinového chatu"],"%1$s is now a moderator":["%1$s je nyní moderátorem"],"%1$s is no longer a moderator":["%1$s již není moderátorem"],"%1$s has been muted":["%1$s byl/a utišen/a"],"Change user\'s affiliation to admin":["Změnit příslušnost uživatele na administrátora"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Změnit roli uživatele na účastníka"],"Remove this groupchat":["Odstranit tento skupinový chat"],"Kick user from groupchat":["Vyhodit uživatele ze skupinového chatu"],"Write in 3rd person":["Psát ve 3. osobě"],"Grant membership to a user":["Poskytnout uživateli členství"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Odstranit schopnost uživatele posílat zprávy"],"Change your nickname":["Změnit svou přezdívku"],"Grant moderator role to user":["Poskytnout uživateli roli moderátora"],"Grant ownership of this groupchat":["Poskytnout vlastnictví tohoto skupinového chatu"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Nastavit předmět skupinového chatu"],"Set groupchat subject (alias for /subject)":["Nastavit předmět skupinového chatu (alias pro /subject)"],"Allow muted user to post messages":["Povolit utišeným uživatelům posílat zprávy"],"Configure":[""],"Configure this groupchat":["Nastavit tento skupinový chat"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Skrýt seznam účastníků"],"Forbidden: you do not have the necessary role in order to do that.":["Zakázáno: k této akci nemáte potřebnou roli."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Zakázáno: k této akci nemáte potřebnou příslušnost."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Chyba: příkaz „%1$s“ bere dva argumenty, přezdívku uživatele a volitelně důvod."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["jmeno@priklad.cz"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Chyba: neplatný počet argumentů"],"This action was done by %1$s.":["Tuto akci vykonal/a %1$s."],"The reason given is: \\"%1$s\\".":["Daný důvod je: „%1$s“."],"Groupchats":["Skupinové chaty"],"Add a new groupchat":["Přidat nový skupinový chat"],"Query for groupchats":["Dotaz pro skupinové chaty"],"Announcements":[""],"Notification from %1$s":["Oznámení od uživatele %1$s"],"%1$s says":["%1$s říká"],"has gone offline":["se odpojil/a"],"has gone away":["odešel/la pryč"],"is busy":["je zaneprázdněn/a"],"has come online":["se připojil/a"],"wants to be your contact":["chce být vaším kontaktem"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["O nás"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Otevřený %2$s chatovací klient pro XMPP vám přináší %3$s Opkode%2$s"],"%1$s Translate %2$s it into your own language":["%1$s Přeložte %2$s jej do svého vlastního jazyka"],"Log out":["Odhlásit"],"Click to change your chat status":["Kliknutím změníte svůj chatový stav"],"Show details about this chat client":["Zobrazit detaily o tomto chatovacím klientovi"],"Your avatar image":["Váš avatarový obrázek"],"Checkbox for selecting the following fingerprint":["Zaškrtnutím políčka vyberete následující otisk"],"Device without a fingerprint":["Zařízení bez otisku"],"Other OMEMO-enabled devices":["Další zařízení s podporou OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Zaškrtnutím políček vyberete otisky všech ostatních zařízení OMEMO"],"Remove checked devices and close":["Odstranit zaškrtnutá zařízení a zavřít"],"Select all":["Vybrat vše"],"This device\'s OMEMO fingerprint":["Otisk OMEMO tohoto zařízení"],"Generate new keys and fingerprint":["Generovat nové klíče a otisk"],"Your Profile":["Váš profil"],"XMPP Address (JID)":["XMPP adresa (JID)"],"Save and close":["Uložit a zavřít"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Oddělujte více rolí čárkami. Vaše role jsou zobrazeny vedle vašeho jména na vašich chatových zprávách."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Omlouváme se, při pokusu o uložení vašich profilových dat se stala chyba."],"You can check your browser\'s developer console for any error output.":["Můžete zkontrolovat vývojářskou konzoli vašeho prohlížeče pro jakýkoliv chybový výstup."],"Away":["Pryč"],"Busy":["Zaneprázdněn/a"],"Custom status":["Vlastní stav"],"Offline":["Odpojen/a"],"Online":["Připojen/a"],"Away for long":["Pryč na dlouho"],"Change chat status":["Změnit chatový stav"],"Personal status message":["Osobní stavová zpráva"],"I am %1$s":["Jsem %1$s"],"Are you sure you want to log out?":["Opravdu se chcete odhlásit?"],"online":["připojen/a"],"busy":["zaneprázdněn/a"],"away for long":["pryč na dlouho"],"away":["pryč"],"offline":["odpojen/a"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Omlouváme se, kvůli chybě nelze dešifrovat obdrženou právu OMEMO."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s nejspíš nemá klienta podporujícího OMEMO. Šifrované chatování nebude v tomto skupinovém chatu již možné."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Nelze použít šifrování end-to-end, protože %1$s používá klienta, který nepodporuje OMEMO."],"Messages are being sent in plaintext":["Zprávy jsou odesílány v prostém textu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Omlouváme se, při pokusu o odstranění zařízení se vyskytla chyba."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Opravdu chcete generovat nové klíče OMEMO? Tímto budou odstraněny vaše staré klíče a všechny dříve zašifrované zprávy již nepůjde na tomto zařízení dešifrovat."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Omlouváme se, nemohli jsme odeslat šifrovanou zprávu, protože %1$s požaduje, abyste měl/a jeho/její presenční odběr, pokud chcete vidět jeho/její informace OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Omlouváme se, nemohli jsme odeslat šifrovanou zprávu, protože vzdálený server pro uživatele %1$s nemohl být nalezen"],"Unable to send an encrypted message due to an unexpected error.":["Kvůli neočekávané chybě nelze odeslat zprávu."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tohle je zpráva zašifrovaná pomocí OMEMO, které, jak se zdá, váš klient nepodporuje. Více informací najdete na https://conversations.im/omemo"]," e.g. conversejs.org":[" např. conversejs.org"],"Fetch registration form":["Sehnat registrační formulář"],"Tip: A list of public XMPP providers is available":["Tip: Seznam veřejných poskytovatelů XMPP je dostupný"],"here":["zde"],"Sorry, we\'re unable to connect to your chosen provider.":["Omlouváme se, nelze se připojit k vašemu zvolenému poskytovateli."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Omlouváme se, daný poskytovatel nepodporuje in-band registraci účtu. Prosím zkuste to s jiným poskytovatelem."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Při navazování spojení s „%1$s“  se  něco pokazilo. Jste si jistý/á, že existuje?"],"Now logging you in":["Nyní vás přihlašujeme"],"Registered successfully":["Úspěšně zaregistrováno"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Poskytovatel odmítl váš pokus o registraci. Prosím zkontrolujte hodnoty, které jste zadal/a, kvůli správnosti."],"Leave this groupchat":["Odejít z tohoto skupinového chatu"],"Click to toggle the list of open groupchats":["Kliknutím otevřete/zavřete seznam otevřených skupinových chatů"],"Open Groupchats":["Otevřené skupinové chaty"],"Are you sure you want to leave the groupchat %1$s?":["Opravdu chcete odejít ze skupinového chatu %1$s?"],"Add":["Přidat"],"Add a Contact":["Přidat kontakt"],"This contact is busy":["Tento kontakt je zaneprázdněn"],"This contact is online":["Tento kontakt je připojen"],"This contact is offline":["Tento kontakt je odpojen"],"This contact is unavailable":["Tento kontakt je nedostupný"],"This contact is away for an extended period":["Tento kontakt je na delší dobu pryč"],"This contact is away":["Tento kontakt je pryč"],"Contact name":["Jméno kontaktu"],"Optional nickname":["Volitelná přezdívka"],"Sorry, could not find a contact with that name":["Omlouváme se, nelze najít kontakt s tímto jménem"],"This contact has already been added":["Tento kontakt byl již přidán"],"Filter":["Filtrovat"],"Filter by contact name":["Filtrovat dle jména kontaktu"],"Filter by group name":["Filtrovat dle názvu skupiny"],"Filter by status":["Filtrovat dle stavu"],"Any":["Libovolné"],"Unread":["Nepřečtené"],"Chatty":["Hovorný/á"],"Extended Away":["Na delší dobu pryč"],"Click to remove %1$s as a contact":["Kliknutím odstraníte uživatele %1$s z kontaktů"],"Click to accept the contact request from %1$s":["Kliknutím přijmete požadavek o kontakt od uživatele %1$s"],"Click to decline the contact request from %1$s":["Kliknutím odmítnete požadavek o kontakt od uživatele %1$s"],"Are you sure you want to decline this contact request?":["Opravdu chcete odmítnout tento požadavek o kontakt?"],"Contacts":["Kontakty"],"Add a contact":["Přidat kontakt"],"Re-sync your contacts":["Znovu synchronizovat své kontakty"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{511:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"cs"},"Create your account":["Vytvořit svůj účet"],"Please enter the XMPP provider to register with:":["Prosím zadejte poskytovatele XMPP, se kterým se chcete registrovat:"],"Already have a chat account?":["Již máte chatovací účet?"],"Log in here":["Přihlaste se zde"],"Account Registration:":["Registrace účtu:"],"Register":["Registrovat"],"Choose a different provider":["Vybrat jiného poskytovatele"],"Hold tight, we\'re fetching the registration form…":["Vydržte, sháníte registrační formulář…"],"Cancel":["Zrušit"],"The connection has dropped, attempting to reconnect.":["Spojení bylo přerušeno, pokoušíme se znovu spojit."],"An error occurred while connecting to the chat server.":["Při připojování na chatovací server se vyskytla chyba."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Omlouváme se, nemohli jsme se spojit s XMPP hostem s doménou: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP server nenabídl podporovaný autentikační mechanismus"],"Sorry, could not determine upload URL.":["Omlouváme se, nelze určit URL nahrání."],"Sorry, could not determine file upload URL.":["Omlouváme se, nelze určit URL nahraného souboru."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Omlouváme se, nelze úspěšně nahrát váš soubor. Odpověď vašeho serveru: „%1$s“"],"Sorry, could not succesfully upload your file.":["Omlouváme se, nelze úspěšně nahrát váš soubor."],"Sorry, looks like file upload is not supported by your server.":["Omlouváme se, vypadá to, že váš server nepodporuje nahrávání souborů."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Velikost vašeho serveru, %1$s, přesahuje maximum povolené vaším serverem, což je %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Tento skupinový chat není anonymní"],"This groupchat now shows unavailable members":["Tento skupinový chat nyní zobrazuje nedostupné členy"],"This groupchat does not show unavailable members":["Tento skupinový chat nezobrazuje nedostupné členy"],"The groupchat configuration has changed":["Nastavení skupinového chatu se změnila"],"This groupchat is now no longer anonymous":["Tento skupinový chat již není anonymní"],"This groupchat is now semi-anonymous":["Tento skupinový chat je nyní zčásti anonymní"],"This groupchat is now fully-anonymous":["Tento skupinový chat je nyní zcela anonymní"],"A new groupchat has been created":["Byl vytvořen nový skupinový chat"],"Your nickname has been automatically set to %1$s":["Vaše přezdívka byla automaticky nastavena na %1$s"],"Your nickname has been changed to %1$s":["Vaše přezdívka byla změněna na %1$s"],"You have been banned from this groupchat":["Byl/a jste na tomto skupinovém chatu zakázán/a"],"You have been kicked from this groupchat":["Byl/a jste z tohoto skupinového chatu vyhozen/a"],"You have been removed from this groupchat because of an affiliation change":["Byl/a jste z tohoto skupinového chatu odebrán/a kvůli změně příslušnosti"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Byl/a jste z tohoto skupinového chatu odstraněn/a, protože se skupinový chat změnil na pouze pro členy a vy nejste členem"],"You have been removed from this groupchat because the service hosting it is being shut down":["Byl/a jste z tohoto skupinového chatu odstraněn/a, protože se služba, která jej hostuje, vypíná"],"You\'re not allowed to register yourself in this groupchat.":["Nemáte povolení se registrovat v tomto skupinovém chatu."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nemáte povolení se registrovat v tomto skupinovém chatu, neboť je pouze pro členy."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nelze registrovat vaši přezdívku v tomto skupinovém chatu, protože nepodporuje registraci."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nelze registrovat vaši přezdívku v tomto skupinovém chatu, protože je poskytnuta neplatná forma dat."],"Topic set by %1$s":["Téma nastavené uživatelem %1$s"],"Topic cleared by %1$s":["Téma potvrzené uživatelem %1$s"],"%1$s has been banned":["%1$s byl/a zakázán/a"],"%1$s\'s nickname has changed":["Přezdívka uživatele %1$s se změnila"],"%1$s has been kicked out":["%1$s byl/a vyhozen/a"],"%1$s has been removed because of an affiliation change":["%1$s byl/a odstraněn/a kvůli změně příslušnosti"],"%1$s has been removed for not being a member":["%1$s byl/a odstraněna, protože není členem"],"%1$s is no longer an admin of this groupchat":["%1$s již není administrátorem tohoto skupinového chatu"],"%1$s is no longer an owner of this groupchat":["%1$s již není vlastníkem tohoto skupinového chatu"],"%1$s is no longer banned from this groupchat":["%1$s již není na tomto skupinovém chatu zakázán/a"],"%1$s is now an %2$s of this groupchat":["%1$s je nyní %2$s tohoto skupinového chatu"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Přezdívka, kterou jste si vybral/a, je rezervována či aktuálně používána, prosím vyberte si jinou."],"You are not on the member list of this groupchat.":["Nejste na seznamu členů tohoto skupinového chatu."],"You have been banned from this groupchat.":["Byl/a jste na tomto skupinovém chatu zakázán/a."],"You are not allowed to create new groupchats.":["Nemáte povolení vytvářet nové skupinové chaty."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Vaše přezdívka nevyhovuje zásadám tohoto skupinového chatu."],"This groupchat does not (yet) exist.":["Tento skupinový chat (ještě) neexistuje."],"This groupchat has reached its maximum number of participants.":["Tento skupinový chat dosáhl svého maximálního počtu účastníků."],"Remote server not found":["Vzdálený server nenalezen"],"The explanation given is: \\"%1$s\\".":["Dané vysvětlení je: „%1$s“."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vás pozval/a do skupinového chatu: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vás pozval/a do skupinového chatu: %2$s, a zanechal/a následující důvod: „%3$s“"],"Error":["Chyba"],"Sorry, something went wrong while trying to save your bookmark.":["Omlouváme se, při pokusu o uložení vaší záložky se něco pokazilo."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Moje kontakty"],"Pending contacts":["Čekající kontakty"],"Contact requests":["Požadavky o kontakt"],"Ungrouped":["Neseskupené"],"Sorry, there was an error while trying to add %1$s as a contact.":["Omlouváme se při pokusu přidat uživatele %1$s do kontaktů se stala chyba."],"This client does not allow presence subscriptions":["Tento klient nedovoluje presenční odběry"],"Click to hide these contacts":["Kliknutím skryjete tyto kontakty"],"Unbookmark this groupchat":["Odstranit tento skupinový chat ze záložek"],"Click to open this groupchat":["Kliknutím otevřete tento skupinový chat"],"Click to toggle the bookmarks list":["Kliknutím otevřete/zavřete seznam záložek"],"Bookmarks":["Záložky"],"Bookmark this groupchat":["Přidat tento skupinový chat do záložek"],"Would you like this groupchat to be automatically joined upon startup?":["Chcete se k tomuto skupinovému chatu automaticky připojit po startu?"],"The name for this bookmark:":["Název pro tuto záložku:"],"What should your nickname for this groupchat be?":["Jaká bude vaše přezdívka pro tento skupinový chat?"],"Save":["Uložit"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Opravdu chcete odstranit záložku „%1$s“?"],"Close":["Zavřít"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Stáhnout audiosoubor „%1$s“"],"Download file \\"%1$s\\"":["Stáhnout soubor „%1$s“"],"Edit":[""],"Retract":[""],"Message versions":["Verze zprávy"],"Retry":[""],"Uploading file:":["Nahrává se soubor:"],"This message has been edited":["Tahle zpráva byla upravena"],"Show more":["Zobrazit více"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Vložit emoji"],"Start a call":["Začít hovor"],"Choose a file to send":["Vyberte soubor k odeslání"],"Click to write as a normal (non-spoiler) message":["Kliknutím napíšete jako normální zprávu (bez spoilerů)"],"Click to write your message as a spoiler":["Kliknutím napíšete svou zprávu jako spoiler"],"The User\'s Profile Image":["Profilový obrázek uživatele"],"Trusted":["Důvěryhodné"],"Untrusted":["Nedůvěryhodné"],"OMEMO Fingerprints":["Otisky OMEMO"],"Remove as contact":["Odstranit z kontaktů"],"XMPP Address":["XMPP adresa"],"Email":["E-mail"],"Full Name":["Celé jméno"],"Nickname":["Přezdívka"],"Refresh":["Obnovit"],"Role":["Role"],"URL":["URL"],"%1$s is typing":["%1$s píše"],"%1$s has stopped typing":["%1$s přestal/a psát"],"%1$s has gone away":["%1$s odešel/la pryč"],"Remove messages":["Odstranit zprávy"],"Write in the third person":["Psát ve třetí osobě"],"Show this menu":["Zobrazit tohle menu"],"Hidden message":["Skrytá zpráva"],"Message":["Zpráva"],"Optional hint":["Volitelná nápověda"],"You have unread messages":["Máte nepřečtené zprávy"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Opravdu chcete vymazat zprávy z téhle konverzace?"],"%1$s has gone offline":["%1$s se odpojil/a"],"%1$s is busy":["%1$s je zaneprázdněn/a"],"%1$s is online":["%1$s je připojen/a"],"Sorry, something went wrong while trying to refresh":["Omlouváme se, při pokusu o obnovení se něco pokazilo"],"Are you sure you want to remove this contact?":["Opravdu chcete odstranit tento kontakt?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Omlouváme se, při odstraňování uživatele %1$s z kontaktů se vyskytla chyba."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["K vylepšení výkonu ukládáme vaše data do mezipaměti tohoto prohlížeče. Je-li tohle veřejný počítač, nebo chcete-li, aby byla vaše data po odhlášení smazána, odškrtněte toto pole. Je důležité, abyste se výslovně odhlásil/a, jinak nemusí být smazána všechna data v mezipaměti. Mějte prosím na vědomí, že pokud používáte nedůvěryhodné zařízení, NENÍ podporováno šifrování OMEMO."],"This is a trusted device":["Tohle je důvěryhodné zařízení"],"Create an account":["Vytvořte si účet"],"Don\'t have a chat account?":["Nemáte chatovací účet?"],"Log in":["Přihlásit"],"Disconnected":[""],"Click here to log in anonymously":["Kliknutím sem se přihlásíte anonymně"],"Username":["Uživatelské jméno"],"user@domain":["uživatel@doména"],"Please enter a valid XMPP address":["Prosím zadejte platnou XMPP adresu"],"Chat Contacts":["Chatové kontakty"],"Toggle chat":["Otevřít chat"],"Click to restore this chat":["Kliknutím obnovíte tento chat"],"Minimized":["Zmenšeno"],"This user is a moderator.":["Tento uživatel je moderátorem."],"This user can send messages in this groupchat.":["Tento uživatel může posílat zprávy v tomto skupinovém chatu."],"This user can NOT send messages in this groupchat.":["Tento uživatel NEMŮŽE posílat zprávy v tomto skupinovém chatu."],"Owner":["Vlastník"],"Admin":["Administrátor"],"Member":["Člen"],"Moderator":["Moderátor"],"Visitor":["Návštěvník"],"Click to mention %1$s in your message.":["Kliknutím zmíníte uživatele %1$s ve své zprávě."],"Participants":["Účastníci"],"This field is required":["Toto pole je vyžadováno"],"Join":["Přidat se"],"Enter a new Groupchat":["Vstoupit do nového skupinového chatu"],"name@conference.example.org":["jmeno@conference.priklad.cz"],"Groupchat name":["Název skupinového chatu"],"Groupchat address":["Adresa skupinového chatu"],"Invite":["Pozvat"],"Show groupchats":["Zobrazit skupinové chaty"],"Server address":["Adresa serveru"],"Show more information on this groupchat":["Zobrazit více informací o tomto skupinovém chatu"],"Query for Groupchats":["Dotaz pro skupinové chaty"],"Description:":["Popis:"],"Groupchat Address (JID):":["Adresa skupinového chatu (JID):"],"Participants:":["Účastníci:"],"Features:":["Vlastnosti:"],"Requires authentication":["Vyžaduje ověření"],"Hidden":["Skryté"],"Requires an invitation":["Vyžaduje pozvání"],"Moderated":["Moderováno"],"Non-anonymous":["Neanonymní"],"Open":["Otevřené"],"Permanent":["Trvalé"],"Public":["Veřejné"],"Semi-anonymous":["Zčásti anonymní"],"Temporary":["Dočasné"],"Unmoderated":["Nemoderováno"],"conference.example.org":["conference.priklad.cz"],"No groupchats found":["Nenalezeny žádné skupinové chaty"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Téma"],"Topic author":["Autor tématu"],"Groupchat address (JID)":["Název skupinového chatu (JID)"],"Message archiving":["Archivace zpráv"],"Messages are archived on the server":["Na tomto serveru jsou archivovány zprávy"],"Description":["Popis"],"Features":["Vlastnosti"],"This groupchat is not publicly searchable":["Tento skupinový chat není veřejně vyhledávatelný"],"This groupchat is restricted to members only":["Tento skupinový chat je omezen pouze na členy"],"Members only":["Pouze pro členy"],"Participants entering this groupchat need to request permission to write":["Účastníci vstupující do tohoto skupinového chatu si musí vyžádat povolení psát"],"Name":["Jméno"],"This groupchat does not require a password upon entry":["Tento skupinový chat nevyžaduje při vstupu heslo"],"No password required":["Heslo nevyžadováno"],"Not anonymous":["Není anonymní"],"All other groupchat participants can see your XMPP address":["Všichni ostatní účastníci skupinového chatu mohou vidět vaši XMPP adresu"],"Not moderated":["Není moderován"],"Participants entering this groupchat can write right away":["Účastníci vstupující do tohoto skupinového chatu mohou psát ihned"],"Online users":["Připojení uživatelé"],"Anyone can join this groupchat":["Kdokoliv se k tomuto skupinovému chatu může připojit"],"This groupchat requires a password before entry":["Tento skupinový chat vyžaduje před vstupem heslo"],"Password protected":["Ochráněno heslem"],"Persistent":["Trvalý"],"This groupchat persists even if it\'s unoccupied":["Tento skupinový chat přetrvává, i když na něm nikdo není"],"Only moderators can see your XMPP address":["Pouze moderátoři mohou vidět vaši XMPP adresu"],"This groupchat will disappear once the last person leaves":["Tento skupinový chat zmizí, jakmile poslední osoba odejde"],"This groupchat is publicly searchable":["Tento skupinový chat je veřejně vyhledávatelný"],"Groupchat info for %1$s":["Informace o skupinovém chatu %1$s"],"The conversation has moved. Click below to enter.":["Konverzace se přesunula. Kliknutím níže do ní vstoupíte."],"This groupchat no longer exists":["Tento skupinový chat již neexistuje"],"Enter groupchat":["Vstoupit do skupinového chatu"],"Please choose your nickname":["Prosím vyberte si přezdívku"],"This groupchat requires a password":["Tento skupinový chat vyžaduje heslo"],"Password: ":["Heslo: "],"Submit":["Odeslat"],"%1$s has entered the groupchat":["%1$s vstoupil/a do skupinového chatu"],"%1$s has left the groupchat":["%1$s odešel/la ze skupinového chatu"],"%1$s is now a moderator":["%1$s je nyní moderátorem"],"%1$s is no longer a moderator":["%1$s již není moderátorem"],"%1$s has been muted":["%1$s byl/a utišen/a"],"Change user\'s affiliation to admin":["Změnit příslušnost uživatele na administrátora"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Změnit roli uživatele na účastníka"],"Remove this groupchat":["Odstranit tento skupinový chat"],"Kick user from groupchat":["Vyhodit uživatele ze skupinového chatu"],"Write in 3rd person":["Psát ve 3. osobě"],"Grant membership to a user":["Poskytnout uživateli členství"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Odstranit schopnost uživatele posílat zprávy"],"Change your nickname":["Změnit svou přezdívku"],"Grant moderator role to user":["Poskytnout uživateli roli moderátora"],"Grant ownership of this groupchat":["Poskytnout vlastnictví tohoto skupinového chatu"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Nastavit předmět skupinového chatu"],"Set groupchat subject (alias for /subject)":["Nastavit předmět skupinového chatu (alias pro /subject)"],"Allow muted user to post messages":["Povolit utišeným uživatelům posílat zprávy"],"Configure":[""],"Configure this groupchat":["Nastavit tento skupinový chat"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Skrýt seznam účastníků"],"Forbidden: you do not have the necessary role in order to do that.":["Zakázáno: k této akci nemáte potřebnou roli."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Zakázáno: k této akci nemáte potřebnou příslušnost."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Chyba: příkaz „%1$s“ bere dva argumenty, přezdívku uživatele a volitelně důvod."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["jmeno@priklad.cz"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Chyba: neplatný počet argumentů"],"This action was done by %1$s.":["Tuto akci vykonal/a %1$s."],"The reason given is: \\"%1$s\\".":["Daný důvod je: „%1$s“."],"Groupchats":["Skupinové chaty"],"Add a new groupchat":["Přidat nový skupinový chat"],"Query for groupchats":["Dotaz pro skupinové chaty"],"Announcements":[""],"Notification from %1$s":["Oznámení od uživatele %1$s"],"%1$s says":["%1$s říká"],"has gone offline":["se odpojil/a"],"has gone away":["odešel/la pryč"],"is busy":["je zaneprázdněn/a"],"has come online":["se připojil/a"],"wants to be your contact":["chce být vaším kontaktem"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["O nás"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Otevřený %2$s chatovací klient pro XMPP vám přináší %3$s Opkode%2$s"],"%1$s Translate %2$s it into your own language":["%1$s Přeložte %2$s jej do svého vlastního jazyka"],"Log out":["Odhlásit"],"Click to change your chat status":["Kliknutím změníte svůj chatový stav"],"Show details about this chat client":["Zobrazit detaily o tomto chatovacím klientovi"],"Your avatar image":["Váš avatarový obrázek"],"Checkbox for selecting the following fingerprint":["Zaškrtnutím políčka vyberete následující otisk"],"Device without a fingerprint":["Zařízení bez otisku"],"Other OMEMO-enabled devices":["Další zařízení s podporou OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Zaškrtnutím políček vyberete otisky všech ostatních zařízení OMEMO"],"Remove checked devices and close":["Odstranit zaškrtnutá zařízení a zavřít"],"Select all":["Vybrat vše"],"This device\'s OMEMO fingerprint":["Otisk OMEMO tohoto zařízení"],"Generate new keys and fingerprint":["Generovat nové klíče a otisk"],"Your Profile":["Váš profil"],"XMPP Address (JID)":["XMPP adresa (JID)"],"Save and close":["Uložit a zavřít"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Oddělujte více rolí čárkami. Vaše role jsou zobrazeny vedle vašeho jména na vašich chatových zprávách."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Omlouváme se, při pokusu o uložení vašich profilových dat se stala chyba."],"You can check your browser\'s developer console for any error output.":["Můžete zkontrolovat vývojářskou konzoli vašeho prohlížeče pro jakýkoliv chybový výstup."],"Away":["Pryč"],"Busy":["Zaneprázdněn/a"],"Custom status":["Vlastní stav"],"Offline":["Odpojen/a"],"Online":["Připojen/a"],"Away for long":["Pryč na dlouho"],"Change chat status":["Změnit chatový stav"],"Personal status message":["Osobní stavová zpráva"],"I am %1$s":["Jsem %1$s"],"Are you sure you want to log out?":["Opravdu se chcete odhlásit?"],"online":["připojen/a"],"busy":["zaneprázdněn/a"],"away for long":["pryč na dlouho"],"away":["pryč"],"offline":["odpojen/a"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Omlouváme se, kvůli chybě nelze dešifrovat obdrženou právu OMEMO."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s nejspíš nemá klienta podporujícího OMEMO. Šifrované chatování nebude v tomto skupinovém chatu již možné."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Nelze použít šifrování end-to-end, protože %1$s používá klienta, který nepodporuje OMEMO."],"Messages are being sent in plaintext":["Zprávy jsou odesílány v prostém textu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Omlouváme se, nemohli jsme odeslat šifrovanou zprávu, protože %1$s požaduje, abyste měl/a jeho/její presenční odběr, pokud chcete vidět jeho/její informace OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Omlouváme se, nemohli jsme odeslat šifrovanou zprávu, protože vzdálený server pro uživatele %1$s nemohl být nalezen"],"Unable to send an encrypted message due to an unexpected error.":["Kvůli neočekávané chybě nelze odeslat zprávu."],"Sorry, an error occurred while trying to remove the devices.":["Omlouváme se, při pokusu o odstranění zařízení se vyskytla chyba."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Opravdu chcete generovat nové klíče OMEMO? Tímto budou odstraněny vaše staré klíče a všechny dříve zašifrované zprávy již nepůjde na tomto zařízení dešifrovat."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tohle je zpráva zašifrovaná pomocí OMEMO, které, jak se zdá, váš klient nepodporuje. Více informací najdete na https://conversations.im/omemo"]," e.g. conversejs.org":[" např. conversejs.org"],"Fetch registration form":["Sehnat registrační formulář"],"Tip: A list of public XMPP providers is available":["Tip: Seznam veřejných poskytovatelů XMPP je dostupný"],"here":["zde"],"Sorry, we\'re unable to connect to your chosen provider.":["Omlouváme se, nelze se připojit k vašemu zvolenému poskytovateli."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Omlouváme se, daný poskytovatel nepodporuje in-band registraci účtu. Prosím zkuste to s jiným poskytovatelem."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Při navazování spojení s „%1$s“  se  něco pokazilo. Jste si jistý/á, že existuje?"],"Now logging you in":["Nyní vás přihlašujeme"],"Registered successfully":["Úspěšně zaregistrováno"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Poskytovatel odmítl váš pokus o registraci. Prosím zkontrolujte hodnoty, které jste zadal/a, kvůli správnosti."],"Leave this groupchat":["Odejít z tohoto skupinového chatu"],"Click to toggle the list of open groupchats":["Kliknutím otevřete/zavřete seznam otevřených skupinových chatů"],"Open Groupchats":["Otevřené skupinové chaty"],"Are you sure you want to leave the groupchat %1$s?":["Opravdu chcete odejít ze skupinového chatu %1$s?"],"Add":["Přidat"],"Add a Contact":["Přidat kontakt"],"This contact is busy":["Tento kontakt je zaneprázdněn"],"This contact is online":["Tento kontakt je připojen"],"This contact is offline":["Tento kontakt je odpojen"],"This contact is unavailable":["Tento kontakt je nedostupný"],"This contact is away for an extended period":["Tento kontakt je na delší dobu pryč"],"This contact is away":["Tento kontakt je pryč"],"Contact name":["Jméno kontaktu"],"Optional nickname":["Volitelná přezdívka"],"Sorry, could not find a contact with that name":["Omlouváme se, nelze najít kontakt s tímto jménem"],"This contact has already been added":["Tento kontakt byl již přidán"],"Filter":["Filtrovat"],"Filter by contact name":["Filtrovat dle jména kontaktu"],"Filter by group name":["Filtrovat dle názvu skupiny"],"Filter by status":["Filtrovat dle stavu"],"Any":["Libovolné"],"Unread":["Nepřečtené"],"Chatty":["Hovorný/á"],"Extended Away":["Na delší dobu pryč"],"Click to remove %1$s as a contact":["Kliknutím odstraníte uživatele %1$s z kontaktů"],"Click to accept the contact request from %1$s":["Kliknutím přijmete požadavek o kontakt od uživatele %1$s"],"Click to decline the contact request from %1$s":["Kliknutím odmítnete požadavek o kontakt od uživatele %1$s"],"Are you sure you want to decline this contact request?":["Opravdu chcete odmítnout tento požadavek o kontakt?"],"Contacts":["Kontakty"],"Add a contact":["Přidat kontakt"],"Re-sync your contacts":["Znovu synchronizovat své kontakty"]}}}')}}]);
 //# sourceMappingURL=cs-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/da-LC_MESSAGES-converse-po.js b/src/conversejs/locales/da-LC_MESSAGES-converse-po.js
index 0c7521f6430652d986496ce16a338deea6a96170..786519d228de630a901c868db4c382df9d9ed2e6 100644
--- a/src/conversejs/locales/da-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/da-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{424:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"da"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":[""],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"You\'re not allowed to retract your message.":[""],"Sorry, an error occurred while trying to retract your message.":[""],"You\'re not allowed to send a message.":[""],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":[""],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":[""],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":[""],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Cancel Editing":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"%1$s has removed this message":[""],"This message has been edited":[""],"Show more":[""],"Show less":[""],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":[""],"Refresh":[""],"Role":[""],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Password":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This field is required":[""],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":[""],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":[""],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"Groupchats found":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, you\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":[""],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Du har ikke tilladelse til at sende beskeder i dette rum"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":[""],"Hide the groupchat topic":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s have entered the groupchat":[""],"%1$s have left the groupchat":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"%1$s have been muted":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"Sorry, you\'re not allowed to retract this message":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Show more information about this groupchat":[""],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional reason for destroying this groupchat":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Click to open this server message":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{512:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"da"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":[""],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"You\'re not allowed to retract your message.":[""],"Sorry, an error occurred while trying to retract your message.":[""],"You\'re not allowed to send a message.":[""],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":[""],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":[""],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Timeout while trying to fetch archived messages.":[""],"An error occurred while querying for archived messages.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":[""],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Cancel Editing":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"%1$s has removed this message":[""],"This message has been edited":[""],"Show more":[""],"Show less":[""],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":[""],"Refresh":[""],"Role":[""],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Password":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":[""],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":[""],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"Groupchats found":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, you\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":[""],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Du har ikke tilladelse til at sende beskeder i dette rum"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":[""],"Hide the groupchat topic":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s have entered the groupchat":[""],"%1$s have left the groupchat":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"%1$s have been muted":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"Sorry, you\'re not allowed to retract this message":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Show more information about this groupchat":[""],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional reason for destroying this groupchat":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Click to open this server message":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=da-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/af.js b/src/conversejs/locales/dayjs/af.js
index e190b001b9ef591e6a9686b9338f7a117e2106d4..8f7750a978a9082c692e0effdf58af1ed8380603 100644
--- a/src/conversejs/locales/dayjs/af.js
+++ b/src/conversejs/locales/dayjs/af.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{147:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"af",weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),weekStart:1,weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{189:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"af",weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),weekStart:1,weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=af.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-dz.js b/src/conversejs/locales/dayjs/ar-dz.js
index 25f0c6c1567772761d63ea764312a743eb0c4f3d..e360a99294f4c268c478d7fb9830e79de805bcee 100644
--- a/src/conversejs/locales/dayjs/ar-dz.js
+++ b/src/conversejs/locales/dayjs/ar-dz.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{148:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-dz",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{190:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-dz",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=ar-dz.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-kw.js b/src/conversejs/locales/dayjs/ar-kw.js
index bf6b6fa04ed69bcf5da28514279687220b3ed6ae..d32aafcf19b4ed23412c035e386b3dd678888ef9 100644
--- a/src/conversejs/locales/dayjs/ar-kw.js
+++ b/src/conversejs/locales/dayjs/ar-kw.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{149:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-kw",weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{191:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-kw",weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=ar-kw.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-ly.js b/src/conversejs/locales/dayjs/ar-ly.js
index d152c098cc99850d0bb0b46c6385da473122506d..529320d6892404aef301159796953f80c8eea434 100644
--- a/src/conversejs/locales/dayjs/ar-ly.js
+++ b/src/conversejs/locales/dayjs/ar-ly.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{150:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-ly",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:6,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{192:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-ly",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:6,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ar-ly.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-ma.js b/src/conversejs/locales/dayjs/ar-ma.js
index 0b06f79b52272e30788dc57ddae97f6d0d2c39ad..61dc742d29defa04724628cd4391a8dc58df4395 100644
--- a/src/conversejs/locales/dayjs/ar-ma.js
+++ b/src/conversejs/locales/dayjs/ar-ma.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{151:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-ma",weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekStart:6,weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{193:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-ma",weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekStart:6,weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ar-ma.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-sa.js b/src/conversejs/locales/dayjs/ar-sa.js
index 6031074817ad8dc992138cb9b097bdffca6e7a2b..39e7218e733b48a27fc445ef0a5ccad7dcbc0ffb 100644
--- a/src/conversejs/locales/dayjs/ar-sa.js
+++ b/src/conversejs/locales/dayjs/ar-sa.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{152:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-sa",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{194:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ar-sa",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=ar-sa.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar-tn.js b/src/conversejs/locales/dayjs/ar-tn.js
index 8b3287b690629c30ad4ba4d2037883313e279dd7..b551a0ce5805447e510a5d9b33bd926b1c95db34 100644
--- a/src/conversejs/locales/dayjs/ar-tn.js
+++ b/src/conversejs/locales/dayjs/ar-tn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{153:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-tn",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{195:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ar-tn",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ar-tn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ar.js b/src/conversejs/locales/dayjs/ar.js
index fa3d140b0b00c38a1f0043cf92981581110eaf79..345f1654789472bbe3d6b7172edab6d99709065d 100644
--- a/src/conversejs/locales/dayjs/ar.js
+++ b/src/conversejs/locales/dayjs/ar.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{154:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),e={name:"ar",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),months:t,monthsShort:t,weekStart:6,relativeTime:{future:"بعد %s",past:"منذ %s",s:"ثانية واحدة",m:"دقيقة واحدة",mm:"%d دقائق",h:"ساعة واحدة",hh:"%d ساعات",d:"يوم واحد",dd:"%d أيام",M:"شهر واحد",MM:"%d أشهر",y:"عام واحد",yy:"%d أعوام"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return _.locale(e,null,!0),e}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{196:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),e={name:"ar",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),months:t,monthsShort:t,weekStart:6,relativeTime:{future:"بعد %s",past:"منذ %s",s:"ثانية واحدة",m:"دقيقة واحدة",mm:"%d دقائق",h:"ساعة واحدة",hh:"%d ساعات",d:"يوم واحد",dd:"%d أيام",M:"شهر واحد",MM:"%d أشهر",y:"عام واحد",yy:"%d أعوام"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return _.locale(e,null,!0),e}(e(5))}}]);
 //# sourceMappingURL=ar.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/az.js b/src/conversejs/locales/dayjs/az.js
index c42149ec5e160eb3aee263ed1936a4052c2f950a..fc2a5947513a8d40b13d1c5615e72ec59078d42e 100644
--- a/src/conversejs/locales/dayjs/az.js
+++ b/src/conversejs/locales/dayjs/az.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{155:function(a,_,r){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"az",weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},ordinal:function(a){return a}};return a.locale(_,null,!0),_}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{197:function(a,_,r){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"az",weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},ordinal:function(a){return a}};return a.locale(_,null,!0),_}(r(5))}}]);
 //# sourceMappingURL=az.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/be.js b/src/conversejs/locales/dayjs/be.js
index 005f82ab3af3eef8c04868d0337d2c995bf49d52..904019ed42bfa865029afb8837b696cd77a4cb5b 100644
--- a/src/conversejs/locales/dayjs/be.js
+++ b/src/conversejs/locales/dayjs/be.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{156:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"be",weekdays:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),months:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),weekStart:1,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"}};return _.locale(t,null,!0),t}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{198:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"be",weekdays:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),months:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),weekStart:1,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"}};return _.locale(t,null,!0),t}(e(5))}}]);
 //# sourceMappingURL=be.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bg.js b/src/conversejs/locales/dayjs/bg.js
index f3a276af34f0a0520ac36d0cbb9a883acfa05d52..e43a2974285d076a225c329cfd5ae4035eed706f 100644
--- a/src/conversejs/locales/dayjs/bg.js
+++ b/src/conversejs/locales/dayjs/bg.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{157:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"bg",weekdays:"Неделя_Понеделник_Вторник_Сряда_Четвъртък_Петък_Събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:"Януари_Февруари_Март_Април_Май_Юни_Юли_Август_Септември_Октомври_Ноември_Декември".split("_"),monthsShort:"Янр_Фев_Мар_Апр_Май_Юни_Юли_Авг_Сеп_Окт_Ное_Дек".split("_"),weekStart:1,ordinal:function(_){return _+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{199:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"bg",weekdays:"Неделя_Понеделник_Вторник_Сряда_Четвъртък_Петък_Събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:"Януари_Февруари_Март_Април_Май_Юни_Юли_Август_Септември_Октомври_Ноември_Декември".split("_"),monthsShort:"Янр_Фев_Мар_Апр_Май_Юни_Юли_Авг_Сеп_Окт_Ное_Дек".split("_"),weekStart:1,ordinal:function(_){return _+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=bg.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bi.js b/src/conversejs/locales/dayjs/bi.js
index f26c1699ff8620c8668e87369a44e3716a501887..a9650a510095757c1feb08e93057deb97c6b0196 100644
--- a/src/conversejs/locales/dayjs/bi.js
+++ b/src/conversejs/locales/dayjs/bi.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{158:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"bi",weekdays:"Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade".split("_"),months:"Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba".split("_"),weekStart:1,weekdaysShort:"San_Man_Tus_Wen_Tos_Frae_Sar".split("_"),monthsShort:"Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"San_Ma_Tu_We_To_Fr_Sar".split("_"),ordinal:function(a){return a},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"lo %s",past:"%s bifo",s:"sam seken",m:"wan minit",mm:"%d minit",h:"wan haoa",hh:"%d haoa",d:"wan dei",dd:"%d dei",M:"wan manis",MM:"%d manis",y:"wan yia",yy:"%d yia"}};return a.locale(e,null,!0),e}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{200:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"bi",weekdays:"Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade".split("_"),months:"Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba".split("_"),weekStart:1,weekdaysShort:"San_Man_Tus_Wen_Tos_Frae_Sar".split("_"),monthsShort:"Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"San_Ma_Tu_We_To_Fr_Sar".split("_"),ordinal:function(a){return a},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"lo %s",past:"%s bifo",s:"sam seken",m:"wan minit",mm:"%d minit",h:"wan haoa",hh:"%d haoa",d:"wan dei",dd:"%d dei",M:"wan manis",MM:"%d manis",y:"wan yia",yy:"%d yia"}};return a.locale(e,null,!0),e}(_(5))}}]);
 //# sourceMappingURL=bi.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bm.js b/src/conversejs/locales/dayjs/bm.js
index 17e9b2a26652e5abe9346e44f4450ce366f5541a..f473728cc6c6a8bb56919a1cb9d75e32b8068eba 100644
--- a/src/conversejs/locales/dayjs/bm.js
+++ b/src/conversejs/locales/dayjs/bm.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{159:function(a,l,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var l={name:"bm",weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),weekStart:1,weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"}};return a.locale(l,null,!0),l}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{201:function(a,l,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var l={name:"bm",weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),weekStart:1,weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"}};return a.locale(l,null,!0),l}(e(5))}}]);
 //# sourceMappingURL=bm.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bn.js b/src/conversejs/locales/dayjs/bn.js
index e385f6b807264a5a0d3e59dd494779932b0c395a..d6ab5c02b541b895c667d41f9deacbfba44e550f 100644
--- a/src/conversejs/locales/dayjs/bn.js
+++ b/src/conversejs/locales/dayjs/bn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{160:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"bn",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{202:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"bn",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=bn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bo.js b/src/conversejs/locales/dayjs/bo.js
index f9030ea7abab399b04dc205b5a1277d961bcae20..36d8623d6d74347d6893d0bc50d26104db5a0abf 100644
--- a/src/conversejs/locales/dayjs/bo.js
+++ b/src/conversejs/locales/dayjs/bo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{161:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"bo",weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{203:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"bo",weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=bo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/br.js b/src/conversejs/locales/dayjs/br.js
index 80f7fc48a4096bec0c9746da787fffd68b870f66..17d67ff46446e30710fa50b2698f1fc8179c7d61 100644
--- a/src/conversejs/locales/dayjs/br.js
+++ b/src/conversejs/locales/dayjs/br.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{162:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"br",weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),weekStart:1,weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},meridiem:function(e){return e<12?"a.m.":"g.m."}};return e.locale(_,null,!0),_}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{204:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"br",weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),weekStart:1,weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},meridiem:function(e){return e<12?"a.m.":"g.m."}};return e.locale(_,null,!0),_}(r(5))}}]);
 //# sourceMappingURL=br.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/bs.js b/src/conversejs/locales/dayjs/bs.js
index 651e599211de97fc58f22ccae7fbc074cbb04727..f196f4038461594f932193e8a80321214dad0e33 100644
--- a/src/conversejs/locales/dayjs/bs.js
+++ b/src/conversejs/locales/dayjs/bs.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{163:function(_,e,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(e,null,!0),e}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{205:function(_,e,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(e,null,!0),e}(a(5))}}]);
 //# sourceMappingURL=bs.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ca.js b/src/conversejs/locales/dayjs/ca.js
index 25c3a387e13aec03b5a7f21f59ac5db0e56062a6..1c36683e320f8767d33eeb74ee1ed8bc07289de2 100644
--- a/src/conversejs/locales/dayjs/ca.js
+++ b/src/conversejs/locales/dayjs/ca.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{164:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{206:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=ca.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/cs.js b/src/conversejs/locales/dayjs/cs.js
index ccc8e6a0cb1ceef6761b0db1cb090a782e676cb4..829aad0fc6bc5c2c7483c593fb570f461f46f0f1 100644
--- a/src/conversejs/locales/dayjs/cs.js
+++ b/src/conversejs/locales/dayjs/cs.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{165:function(e,n,t){e.exports=function(e){"use strict";function n(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,r,s){var _=e+" ";switch(r){case"s":return t||s?"pár sekund":"pár sekundami";case"m":return t?"minuta":s?"minutu":"minutou";case"mm":return t||s?_+(n(e)?"minuty":"minut"):_+"minutami";case"h":return t?"hodina":s?"hodinu":"hodinou";case"hh":return t||s?_+(n(e)?"hodiny":"hodin"):_+"hodinami";case"d":return t||s?"den":"dnem";case"dd":return t||s?_+(n(e)?"dny":"dní"):_+"dny";case"M":return t||s?"měsíc":"měsícem";case"MM":return t||s?_+(n(e)?"měsíce":"měsíců"):_+"měsíci";case"y":return t||s?"rok":"rokem";case"yy":return t||s?_+(n(e)?"roky":"let"):_+"lety"}}e=e&&e.hasOwnProperty("default")?e.default:e;var r={name:"cs",weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),months:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),monthsShort:"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"před %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return e.locale(r,null,!0),r}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{207:function(e,n,t){e.exports=function(e){"use strict";function n(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,r,s){var _=e+" ";switch(r){case"s":return t||s?"pár sekund":"pár sekundami";case"m":return t?"minuta":s?"minutu":"minutou";case"mm":return t||s?_+(n(e)?"minuty":"minut"):_+"minutami";case"h":return t?"hodina":s?"hodinu":"hodinou";case"hh":return t||s?_+(n(e)?"hodiny":"hodin"):_+"hodinami";case"d":return t||s?"den":"dnem";case"dd":return t||s?_+(n(e)?"dny":"dní"):_+"dny";case"M":return t||s?"měsíc":"měsícem";case"MM":return t||s?_+(n(e)?"měsíce":"měsíců"):_+"měsíci";case"y":return t||s?"rok":"rokem";case"yy":return t||s?_+(n(e)?"roky":"let"):_+"lety"}}e=e&&e.hasOwnProperty("default")?e.default:e;var r={name:"cs",weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),months:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),monthsShort:"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"před %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return e.locale(r,null,!0),r}(t(5))}}]);
 //# sourceMappingURL=cs.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/cv.js b/src/conversejs/locales/dayjs/cv.js
index dead1885c27b19a2c6ffdbbc96c020e0a9b87661..33d63b93f109a31793082ed01d482ff2ea860f8b 100644
--- a/src/conversejs/locales/dayjs/cv.js
+++ b/src/conversejs/locales/dayjs/cv.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{166:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"cv",weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),weekStart:1,weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{208:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"cv",weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),weekStart:1,weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=cv.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/cy.js b/src/conversejs/locales/dayjs/cy.js
index c0ffc890a4513cb8c6bb080768c25794ee3b8396..613c700abd207cdd88665350a931f613fc05b3e4 100644
--- a/src/conversejs/locales/dayjs/cy.js
+++ b/src/conversejs/locales/dayjs/cy.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{167:function(d,_,e){d.exports=function(d){"use strict";d=d&&d.hasOwnProperty("default")?d.default:d;var _={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return d.locale(_,null,!0),_}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{209:function(d,_,e){d.exports=function(d){"use strict";d=d&&d.hasOwnProperty("default")?d.default:d;var _={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return d.locale(_,null,!0),_}(e(5))}}]);
 //# sourceMappingURL=cy.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/da.js b/src/conversejs/locales/dayjs/da.js
index 312ed5a5ba61ba0e0b89849e81deb654135db1c1..6232890bcf062fd3bdfb289dbd3b03783929f8f0 100644
--- a/src/conversejs/locales/dayjs/da.js
+++ b/src/conversejs/locales/dayjs/da.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{168:function(e,t,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"da",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn._man._tirs._ons._tors._fre._lør.".split("_"),weekdaysMin:"sø._ma._ti._on._to._fr._lø.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"}};return e.locale(t,null,!0),t}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{210:function(e,t,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"da",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn._man._tirs._ons._tors._fre._lør.".split("_"),weekdaysMin:"sø._ma._ti._on._to._fr._lø.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"}};return e.locale(t,null,!0),t}(_(5))}}]);
 //# sourceMappingURL=da.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/de-at.js b/src/conversejs/locales/dayjs/de-at.js
index df143718d2c296c3203c4b6b193a1e41530b4ac6..5f3806c11dae9091ebd88cf593e5d85ddc2e7ef1 100644
--- a/src/conversejs/locales/dayjs/de-at.js
+++ b/src/conversejs/locales/dayjs/de-at.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{169:function(e,n,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"de-at",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:"einer Minute",mm:"%d Minuten",h:"einer Stunde",hh:"%d Stunden",d:"einem Tag",dd:"%d Tagen",M:"einem Monat",MM:"%d Monaten",y:"einem Jahr",yy:"%d Jahren"}};return e.locale(n,null,!0),n}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{211:function(e,n,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"de-at",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:"einer Minute",mm:"%d Minuten",h:"einer Stunde",hh:"%d Stunden",d:"einem Tag",dd:"%d Tagen",M:"einem Monat",MM:"%d Monaten",y:"einem Jahr",yy:"%d Jahren"}};return e.locale(n,null,!0),n}(t(5))}}]);
 //# sourceMappingURL=de-at.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/de-ch.js b/src/conversejs/locales/dayjs/de-ch.js
index 821831696734746e47e7807fde51c07a8d0d0f9b..5e78d55540601eeeddc4336e33c833a80922bc17 100644
--- a/src/conversejs/locales/dayjs/de-ch.js
+++ b/src/conversejs/locales/dayjs/de-ch.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{170:function(_,e,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"de-ch",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"}};return _.locale(e,null,!0),e}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{212:function(_,e,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"de-ch",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"}};return _.locale(e,null,!0),e}(t(5))}}]);
 //# sourceMappingURL=de-ch.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/de.js b/src/conversejs/locales/dayjs/de.js
index b53b355c46d19f3d06696ede7fc5e9628a40cc1d..733f52a070561d108c0271c3e804b57108497f2a 100644
--- a/src/conversejs/locales/dayjs/de.js
+++ b/src/conversejs/locales/dayjs/de.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{171:function(e,n,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_März_Apr_Mai_Juni_Juli_Aug_Sept_Okt_Nov_Dez".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:"wenigen Sekunden",m:"einer Minute",mm:"%d Minuten",h:"einer Stunde",hh:"%d Stunden",d:"einem Tag",dd:"%d Tagen",M:"einem Monat",MM:"%d Monaten",y:"einem Jahr",yy:"%d Jahren"}};return e.locale(n,null,!0),n}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{213:function(e,n,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_März_Apr_Mai_Juni_Juli_Aug_Sept_Okt_Nov_Dez".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:"wenigen Sekunden",m:"einer Minute",mm:"%d Minuten",h:"einer Stunde",hh:"%d Stunden",d:"einem Tag",dd:"%d Tagen",M:"einem Monat",MM:"%d Monaten",y:"einem Jahr",yy:"%d Jahren"}};return e.locale(n,null,!0),n}(t(5))}}]);
 //# sourceMappingURL=de.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/dv.js b/src/conversejs/locales/dayjs/dv.js
index f02774b186c2eb4208bfe7f7902f9f90a445f50f..2cadf98e0fbfe091bce45be323c7d12b8a0889d0 100644
--- a/src/conversejs/locales/dayjs/dv.js
+++ b/src/conversejs/locales/dayjs/dv.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{172:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"dv",weekdays:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),months:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekStart:7,weekdaysShort:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),monthsShort:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{214:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"dv",weekdays:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),months:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekStart:7,weekdaysShort:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),monthsShort:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=dv.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/el.js b/src/conversejs/locales/dayjs/el.js
index 54ddc2b5b979072e05465251b56e32534e026b16..cf586b88548e22d3989a73423fac8480e4393565 100644
--- a/src/conversejs/locales/dayjs/el.js
+++ b/src/conversejs/locales/dayjs/el.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{173:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"el",weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),months:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ".split("_"),ordinal:function(_){return _},weekStart:1,relativeTime:{future:"σε %s",past:"πριν %s",s:"μερικά δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένα μήνα",MM:"%d μήνες",y:"ένα χρόνο",yy:"%d χρόνια"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"}};return _.locale(t,null,!0),t}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{215:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"el",weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),months:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ".split("_"),ordinal:function(_){return _},weekStart:1,relativeTime:{future:"σε %s",past:"πριν %s",s:"μερικά δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένα μήνα",MM:"%d μήνες",y:"ένα χρόνο",yy:"%d χρόνια"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"}};return _.locale(t,null,!0),t}(e(5))}}]);
 //# sourceMappingURL=el.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-SG.js b/src/conversejs/locales/dayjs/en-SG.js
index bc41df062b5c45d5792c5eabcec91387cc6c28b9..61af7960bcae6569558f1ee2629db766a1564f99 100644
--- a/src/conversejs/locales/dayjs/en-SG.js
+++ b/src/conversejs/locales/dayjs/en-SG.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{174:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-SG",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{216:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-SG",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-SG.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-au.js b/src/conversejs/locales/dayjs/en-au.js
index e5eab95e10ff863da99c0895a4b85fccc1c95f42..fd6bfd6553f4a6f614dcf45f47a3d449b1c67c65 100644
--- a/src/conversejs/locales/dayjs/en-au.js
+++ b/src/conversejs/locales/dayjs/en-au.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{175:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-au",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{217:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-au",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-au.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-ca.js b/src/conversejs/locales/dayjs/en-ca.js
index cbd4fe4a3a43d9cd448ca7d2848b609a7a60b951..102c0e6f37452e7a9e9b36b62aa7bb16eb5009cc 100644
--- a/src/conversejs/locales/dayjs/en-ca.js
+++ b/src/conversejs/locales/dayjs/en-ca.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{176:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-ca",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{218:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-ca",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-ca.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-gb.js b/src/conversejs/locales/dayjs/en-gb.js
index 01638e9dc5f9f3e9d36165a6b51e5181771ecc74..42eb9e1b86a7800b43823161d1c3ae87da8e2f81 100644
--- a/src/conversejs/locales/dayjs/en-gb.js
+++ b/src/conversejs/locales/dayjs/en-gb.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{177:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-gb",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{219:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-gb",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-gb.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-ie.js b/src/conversejs/locales/dayjs/en-ie.js
index eb60f41ea93c677a357080f1c7e337a3d92ea838..72ae6fbe17db195546665f118e90f92e1a3911a5 100644
--- a/src/conversejs/locales/dayjs/en-ie.js
+++ b/src/conversejs/locales/dayjs/en-ie.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{178:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-ie",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{220:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-ie",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-ie.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-il.js b/src/conversejs/locales/dayjs/en-il.js
index 342e0e463b7eafa02b1888bf1c7a01d9a7642412..999401dbb19e1925739dccc8f87180b13c5bc681 100644
--- a/src/conversejs/locales/dayjs/en-il.js
+++ b/src/conversejs/locales/dayjs/en-il.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{179:function(e,_,a){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"en-il",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(_,null,!0),_}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{221:function(e,_,a){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"en-il",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(_,null,!0),_}(a(5))}}]);
 //# sourceMappingURL=en-il.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-in.js b/src/conversejs/locales/dayjs/en-in.js
index 5d2213d8d8595a6bfa3bbf82ecb55ac0b8f23cc4..a328a92c7dcd9ad4f8f9a24ebd1f5a312f981d2f 100644
--- a/src/conversejs/locales/dayjs/en-in.js
+++ b/src/conversejs/locales/dayjs/en-in.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{180:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-in",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{222:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-in",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-in.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-nz.js b/src/conversejs/locales/dayjs/en-nz.js
index 09a5ff6c08aa5495be7fa5a7e5e3642bacb4583c..95df15151109f0ec1f4807729afaedb002404b8e 100644
--- a/src/conversejs/locales/dayjs/en-nz.js
+++ b/src/conversejs/locales/dayjs/en-nz.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{181:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-nz",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{223:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-nz",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-nz.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en-tt.js b/src/conversejs/locales/dayjs/en-tt.js
index 4409fc8359b55ee55122ca9ac6451bc854949326..0c22e8efe45cc27670f8543207779edfad7ddef3 100644
--- a/src/conversejs/locales/dayjs/en-tt.js
+++ b/src/conversejs/locales/dayjs/en-tt.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{182:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-tt",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{224:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"en-tt",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],_=e%100;return"["+e+(a[(_-20)%10]||a[_]||a[0])+"]"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=en-tt.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/en.js b/src/conversejs/locales/dayjs/en.js
index 98abc944e3dd7e98e4bde9f3127293d396ec31a3..c8653469ecb3af9146e44f195e27e77124bb36d3 100644
--- a/src/conversejs/locales/dayjs/en.js
+++ b/src/conversejs/locales/dayjs/en.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{183:function(e,_,a){e.exports=function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")}}()}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{225:function(e,_,a){e.exports=function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")}}()}}]);
 //# sourceMappingURL=en.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/eo.js b/src/conversejs/locales/dayjs/eo.js
index c18217017e0e2b73ca89328f8906270c104e8f91..062791de59803e748feca536fb0d0f54bcdff425 100644
--- a/src/conversejs/locales/dayjs/eo.js
+++ b/src/conversejs/locales/dayjs/eo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{184:function(o,a,e){o.exports=function(o){"use strict";o=o&&o.hasOwnProperty("default")?o.default:o;var a={name:"eo",weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"}};return o.locale(a,null,!0),a}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{226:function(o,a,e){o.exports=function(o){"use strict";o=o&&o.hasOwnProperty("default")?o.default:o;var a={name:"eo",weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"}};return o.locale(a,null,!0),a}(e(5))}}]);
 //# sourceMappingURL=eo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/es-do.js b/src/conversejs/locales/dayjs/es-do.js
index 36e72c9042fa0ceb2748498c6887e637fe800953..bb47c31941077c42269100ee5c65bad5ee8b85ec 100644
--- a/src/conversejs/locales/dayjs/es-do.js
+++ b/src/conversejs/locales/dayjs/es-do.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{185:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-do",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekStart:1,relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{227:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-do",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekStart:1,relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=es-do.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/es-pr.js b/src/conversejs/locales/dayjs/es-pr.js
index 96a7a331c62d5723dbeabe350941f44106c5ed32..bef3415b3647095c741e6d7fa6b4a6e65db055ce 100644
--- a/src/conversejs/locales/dayjs/es-pr.js
+++ b/src/conversejs/locales/dayjs/es-pr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{186:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-pr",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{228:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-pr",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=es-pr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/es-us.js b/src/conversejs/locales/dayjs/es-us.js
index 6ad30ae235150566c25e6b0c1b89dfe35d8caee6..dafb9c02de99f92c739a21ff0b905b3231d333d5 100644
--- a/src/conversejs/locales/dayjs/es-us.js
+++ b/src/conversejs/locales/dayjs/es-us.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{187:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-us",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{229:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es-us",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=es-us.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/es.js b/src/conversejs/locales/dayjs/es.js
index 547af82b0377eb379603adc6472efa0d1d1ddbb4..c3ae41ea3a09541077e7ceb05283d5ff171944f5 100644
--- a/src/conversejs/locales/dayjs/es.js
+++ b/src/conversejs/locales/dayjs/es.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{188:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{230:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=es.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/et.js b/src/conversejs/locales/dayjs/et.js
index a70caec1b843fbdddf02a58a54acde7fa9288f29..7731d79c3857fbd8eff8f0e463736b5a63271b20 100644
--- a/src/conversejs/locales/dayjs/et.js
+++ b/src/conversejs/locales/dayjs/et.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{189:function(e,a,t){e.exports=function(e){"use strict";function a(e,a,t,s){var u={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:["%d minuti","%d minutit"],h:["ühe tunni","tund aega","üks tund"],hh:["%d tunni","%d tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:["%d kuu","%d kuud"],y:["ühe aasta","aasta","üks aasta"],yy:["%d aasta","%d aastat"]};return a?(u[t][2]?u[t][2]:u[t][1]).replace("%d",e):(s?u[t][0]:u[t][1]).replace("%d",e)}e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"et",weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s pärast",past:"%s tagasi",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d päeva",M:a,MM:a,y:a,yy:a},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(t,null,!0),t}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{231:function(e,a,t){e.exports=function(e){"use strict";function a(e,a,t,s){var u={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:["%d minuti","%d minutit"],h:["ühe tunni","tund aega","üks tund"],hh:["%d tunni","%d tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:["%d kuu","%d kuud"],y:["ühe aasta","aasta","üks aasta"],yy:["%d aasta","%d aastat"]};return a?(u[t][2]?u[t][2]:u[t][1]).replace("%d",e):(s?u[t][0]:u[t][1]).replace("%d",e)}e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"et",weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s pärast",past:"%s tagasi",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d päeva",M:a,MM:a,y:a,yy:a},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(t,null,!0),t}(t(5))}}]);
 //# sourceMappingURL=et.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/eu.js b/src/conversejs/locales/dayjs/eu.js
index 5cc9a4550e19d9b97ca6b92bad70da3c075c3f57..f3f4e2de845ffbaef901518caf0c781742d0dc7e 100644
--- a/src/conversejs/locales/dayjs/eu.js
+++ b/src/conversejs/locales/dayjs/eu.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{190:function(a,t,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var t={name:"eu",weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),weekStart:1,weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"}};return a.locale(t,null,!0),t}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{232:function(a,t,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var t={name:"eu",weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),weekStart:1,weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"}};return a.locale(t,null,!0),t}(e(5))}}]);
 //# sourceMappingURL=eu.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fa.js b/src/conversejs/locales/dayjs/fa.js
index 2a95baff33fdfc8a6a1585aea2ff8cbe1072e44d..e91bbea99328c96ff14613a607c6ebd6a5b77abb 100644
--- a/src/conversejs/locales/dayjs/fa.js
+++ b/src/conversejs/locales/dayjs/fa.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{191:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"fa",weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekStart:6,months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{233:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"fa",weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekStart:6,months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=fa.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fi.js b/src/conversejs/locales/dayjs/fi.js
index 2560976f4d79e33eda8fef702f1f28dda249e5e1..32fef3f4774fb5ce7e2c79b6c9f04da7a066fe5e 100644
--- a/src/conversejs/locales/dayjs/fi.js
+++ b/src/conversejs/locales/dayjs/fi.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{192:function(u,n,t){u.exports=function(u){"use strict";function n(u,n,t,i){var a={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"päivä",dd:"%d päivää",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän".split("_")},e={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"päivän",dd:"%d päivän",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän".split("_")},s=i&&!n?e:a,_=s[t];return u<10?_.replace("%d",s.numbers[u]):_.replace("%d",u)}u=u&&u.hasOwnProperty("default")?u.default:u;var t={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),ordinal:function(u){return u+"."},weekStart:1,relativeTime:{future:"%s päästä",past:"%s sitten",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"}};return u.locale(t,null,!0),t}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{234:function(u,n,t){u.exports=function(u){"use strict";function n(u,n,t,i){var a={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"päivä",dd:"%d päivää",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän".split("_")},e={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"päivän",dd:"%d päivän",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän".split("_")},s=i&&!n?e:a,_=s[t];return u<10?_.replace("%d",s.numbers[u]):_.replace("%d",u)}u=u&&u.hasOwnProperty("default")?u.default:u;var t={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),ordinal:function(u){return u+"."},weekStart:1,relativeTime:{future:"%s päästä",past:"%s sitten",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"}};return u.locale(t,null,!0),t}(t(5))}}]);
 //# sourceMappingURL=fi.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fo.js b/src/conversejs/locales/dayjs/fo.js
index 07c8d4b5493487b12b30f96e5d30cffedfe58a1b..06dcf70001211d890683979feab41a9d3a41e427 100644
--- a/src/conversejs/locales/dayjs/fo.js
+++ b/src/conversejs/locales/dayjs/fo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{193:function(r,a,e){r.exports=function(r){"use strict";r=r&&r.hasOwnProperty("default")?r.default:r;var a={name:"fo",weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),ordinal:function(r){return r},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"}};return r.locale(a,null,!0),a}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{235:function(r,a,e){r.exports=function(r){"use strict";r=r&&r.hasOwnProperty("default")?r.default:r;var a={name:"fo",weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),ordinal:function(r){return r},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"}};return r.locale(a,null,!0),a}(e(5))}}]);
 //# sourceMappingURL=fo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fr-ca.js b/src/conversejs/locales/dayjs/fr-ca.js
index 87b9886525bd0a5a01312dec9988f52ebb3cd72c..f0a102a451613a38c1238286acc9f6af19b1a0fd 100644
--- a/src/conversejs/locales/dayjs/fr-ca.js
+++ b/src/conversejs/locales/dayjs/fr-ca.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{194:function(e,_,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr-ca",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return e.locale(_,null,!0),_}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{236:function(e,_,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr-ca",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return e.locale(_,null,!0),_}(n(5))}}]);
 //# sourceMappingURL=fr-ca.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fr-ch.js b/src/conversejs/locales/dayjs/fr-ch.js
index ecfc159dfc711ca3060328f7109d32878d038442..cbf1d56acb41dbb794c178a1f6b5f9ccb73704f5 100644
--- a/src/conversejs/locales/dayjs/fr-ch.js
+++ b/src/conversejs/locales/dayjs/fr-ch.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{195:function(e,_,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr-ch",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekStart:1,weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return e.locale(_,null,!0),_}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{237:function(e,_,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr-ch",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekStart:1,weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return e.locale(_,null,!0),_}(n(5))}}]);
 //# sourceMappingURL=fr-ch.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fr.js b/src/conversejs/locales/dayjs/fr.js
index 68b3709212266390edaee453222e67326f65d8b7..4484ca64e239340a3591e38a49476020d55134eb 100644
--- a/src/conversejs/locales/dayjs/fr.js
+++ b/src/conversejs/locales/dayjs/fr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{196:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return e+(1===e?"er":"")}};return e.locale(_,null,!0),_}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{238:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return e+(1===e?"er":"")}};return e.locale(_,null,!0),_}(r(5))}}]);
 //# sourceMappingURL=fr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/fy.js b/src/conversejs/locales/dayjs/fy.js
index 60c53de54ecd9b99ff29aa0adde4e0a8e5672b46..ea47ff5864e151656a169820be1807f1afc93541 100644
--- a/src/conversejs/locales/dayjs/fy.js
+++ b/src/conversejs/locales/dayjs/fy.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{197:function(e,n,i){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"fy",weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),weekStart:1,weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"}};return e.locale(n,null,!0),n}(i(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{239:function(e,n,i){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"fy",weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),weekStart:1,weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"}};return e.locale(n,null,!0),n}(i(5))}}]);
 //# sourceMappingURL=fy.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ga.js b/src/conversejs/locales/dayjs/ga.js
index 42214bbc539fb879de4b9f92c7eff2b704e9f0bc..e11e64ab9dbdea8fbf71c8df19153b92107a334c 100644
--- a/src/conversejs/locales/dayjs/ga.js
+++ b/src/conversejs/locales/dayjs/ga.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{198:function(a,i,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"ga",weekdays:"Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Satharn".split("_"),months:"Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Méitheamh_Iúil_Lúnasa_Meán Fómhair_Deaireadh Fómhair_Samhain_Nollaig".split("_"),weekStart:1,weekdaysShort:"Dom_Lua_Mái_Céa_Déa_hAo_Sat".split("_"),monthsShort:"Eaná_Feab_Márt_Aibr_Beal_Méit_Iúil_Lúna_Meán_Deai_Samh_Noll".split("_"),weekdaysMin:"Do_Lu_Má_Ce_Dé_hA_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"}};return a.locale(i,null,!0),i}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{240:function(a,i,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"ga",weekdays:"Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Satharn".split("_"),months:"Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Méitheamh_Iúil_Lúnasa_Meán Fómhair_Deaireadh Fómhair_Samhain_Nollaig".split("_"),weekStart:1,weekdaysShort:"Dom_Lua_Mái_Céa_Déa_hAo_Sat".split("_"),monthsShort:"Eaná_Feab_Márt_Aibr_Beal_Méit_Iúil_Lúna_Meán_Deai_Samh_Noll".split("_"),weekdaysMin:"Do_Lu_Má_Ce_Dé_hA_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"}};return a.locale(i,null,!0),i}(_(5))}}]);
 //# sourceMappingURL=ga.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/gd.js b/src/conversejs/locales/dayjs/gd.js
index 66d196227510cff3f0b1eaa5727d69324cd6fa4a..372b343b44e2d4bc8a51f61ef4b314bfcbdba40f 100644
--- a/src/conversejs/locales/dayjs/gd.js
+++ b/src/conversejs/locales/dayjs/gd.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{199:function(a,i,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"gd",weekdays:"Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne".split("_"),months:"Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd".split("_"),weekStart:1,weekdaysShort:"Did_Dil_Dim_Dic_Dia_Dih_Dis".split("_"),monthsShort:"Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh".split("_"),weekdaysMin:"Dò_Lu_Mà_Ci_Ar_Ha_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"}};return a.locale(i,null,!0),i}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{241:function(a,i,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"gd",weekdays:"Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne".split("_"),months:"Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd".split("_"),weekStart:1,weekdaysShort:"Did_Dil_Dim_Dic_Dia_Dih_Dis".split("_"),monthsShort:"Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh".split("_"),weekdaysMin:"Dò_Lu_Mà_Ci_Ar_Ha_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"}};return a.locale(i,null,!0),i}(n(5))}}]);
 //# sourceMappingURL=gd.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/gl.js b/src/conversejs/locales/dayjs/gl.js
index afe2728f7f8a5a58d60e1241d4f9f3a641d812bc..6ae2b029ce7f9e63306f358b24b5eb1332d4391f 100644
--- a/src/conversejs/locales/dayjs/gl.js
+++ b/src/conversejs/locales/dayjs/gl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{200:function(_,e,o){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"gl",weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"}};return _.locale(e,null,!0),e}(o(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{242:function(_,e,o){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"gl",weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"}};return _.locale(e,null,!0),e}(o(5))}}]);
 //# sourceMappingURL=gl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/gom-latn.js b/src/conversejs/locales/dayjs/gom-latn.js
index 1b3b46b163395008d8c4ca6804663fb35250b883..1bab71bd4499d911f07736873eabd0fae3c83b31 100644
--- a/src/conversejs/locales/dayjs/gom-latn.js
+++ b/src/conversejs/locales/dayjs/gom-latn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{201:function(_,a,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"gom-latn",weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),weekStart:1,weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"}};return _.locale(a,null,!0),a}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{243:function(_,a,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"gom-latn",weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),weekStart:1,weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"}};return _.locale(a,null,!0),a}(t(5))}}]);
 //# sourceMappingURL=gom-latn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/gu.js b/src/conversejs/locales/dayjs/gu.js
index 03e98886f24df69d8fc74777865cfd703da023ec..af9e5b427a296f29652133d10d5d412b8e49a160 100644
--- a/src/conversejs/locales/dayjs/gu.js
+++ b/src/conversejs/locales/dayjs/gu.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{202:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"gu",weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{244:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"gu",weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=gu.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/he.js b/src/conversejs/locales/dayjs/he.js
index e0d80fcf4c476ce664f616ed8c780205b8492f57..5e9789711cf6c842d8b8b43268c0c3d4fcf0ec2e 100644
--- a/src/conversejs/locales/dayjs/he.js
+++ b/src/conversejs/locales/dayjs/he.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{203:function(Y,M,_){Y.exports=function(Y){"use strict";Y=Y&&Y.hasOwnProperty("default")?Y.default:Y;var M={name:"he",weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳".split("_"),months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ".split("_"),relativeTime:{future:"בעוד %s",past:"לפני %s",s:"כמה שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:"%d שעות",d:"יום",dd:"%d ימים",M:"חודש",MM:"%d חודשים",y:"שנה",yy:"%d שנים"},ordinal:function(Y){return Y},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"}};return Y.locale(M,null,!0),M}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{245:function(Y,M,_){Y.exports=function(Y){"use strict";Y=Y&&Y.hasOwnProperty("default")?Y.default:Y;var M={name:"he",weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳".split("_"),months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ".split("_"),relativeTime:{future:"בעוד %s",past:"לפני %s",s:"כמה שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:"%d שעות",d:"יום",dd:"%d ימים",M:"חודש",MM:"%d חודשים",y:"שנה",yy:"%d שנים"},ordinal:function(Y){return Y},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"}};return Y.locale(M,null,!0),M}(_(5))}}]);
 //# sourceMappingURL=he.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/hi.js b/src/conversejs/locales/dayjs/hi.js
index cd66a152d6943ac055b8df2156902500e6d6d206..3b3863299e0f1da2dbe89dc0914a149ab10e099d 100644
--- a/src/conversejs/locales/dayjs/hi.js
+++ b/src/conversejs/locales/dayjs/hi.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{204:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"hi",weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{246:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"hi",weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=hi.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/hr.js b/src/conversejs/locales/dayjs/hr.js
index 1cc249194cd4d25e1fc3b638afe6edd2ae060fa2..87518c6fd13534ab80e8893fdf9a08f470aba750 100644
--- a/src/conversejs/locales/dayjs/hr.js
+++ b/src/conversejs/locales/dayjs/hr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{205:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"hr",weekdays:"Nedjelja_Ponedjeljak_Utorak_Srijeda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sri._Čet._Pet._Sub.".split("_"),weekdaysMin:"Ne_Po_Ut_Sr_Če_Pe_Su".split("_"),months:"Siječanj_Veljača_Ožujak_Travanj_Svibanj_Lipanj_Srpanj_Kolovoz_Rujan_Listopad_Studeni_Prosinac".split("_"),monthsShort:"Sij._Velj._Ožu._Tra._Svi._Lip._Srp._Kol._Ruj._Lis._Stu._Pro.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},relativeTime:{future:"za %s",past:"prije %s",s:"sekunda",m:"minuta",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mjesec",MM:"%d mjeseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{247:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"hr",weekdays:"Nedjelja_Ponedjeljak_Utorak_Srijeda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sri._Čet._Pet._Sub.".split("_"),weekdaysMin:"Ne_Po_Ut_Sr_Če_Pe_Su".split("_"),months:"Siječanj_Veljača_Ožujak_Travanj_Svibanj_Lipanj_Srpanj_Kolovoz_Rujan_Listopad_Studeni_Prosinac".split("_"),monthsShort:"Sij._Velj._Ožu._Tra._Svi._Lip._Srp._Kol._Ruj._Lis._Stu._Pro.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},relativeTime:{future:"za %s",past:"prije %s",s:"sekunda",m:"minuta",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mjesec",MM:"%d mjeseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=hr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ht.js b/src/conversejs/locales/dayjs/ht.js
index d011006bd74d248c141d6c87535da3291cb648d0..9a1fe418b769798570d17978f7dc945ec6e7ffcb 100644
--- a/src/conversejs/locales/dayjs/ht.js
+++ b/src/conversejs/locales/dayjs/ht.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{206:function(n,e,_){n.exports=function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var e={name:"ht",weekdays:"dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi".split("_"),months:"janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm".split("_"),weekdaysShort:"dim._len._mad._mèk._jed._van._sam.".split("_"),monthsShort:"jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.".split("_"),weekdaysMin:"di_le_ma_mè_je_va_sa".split("_"),ordinal:function(n){return n},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"nan %s",past:"sa gen %s",s:"kèk segond",m:"yon minit",mm:"%d minit",h:"inèdtan",hh:"%d zè",d:"yon jou",dd:"%d jou",M:"yon mwa",MM:"%d mwa",y:"yon ane",yy:"%d ane"}};return n.locale(e,null,!0),e}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{248:function(n,e,_){n.exports=function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var e={name:"ht",weekdays:"dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi".split("_"),months:"janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm".split("_"),weekdaysShort:"dim._len._mad._mèk._jed._van._sam.".split("_"),monthsShort:"jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.".split("_"),weekdaysMin:"di_le_ma_mè_je_va_sa".split("_"),ordinal:function(n){return n},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"nan %s",past:"sa gen %s",s:"kèk segond",m:"yon minit",mm:"%d minit",h:"inèdtan",hh:"%d zè",d:"yon jou",dd:"%d jou",M:"yon mwa",MM:"%d mwa",y:"yon ane",yy:"%d ane"}};return n.locale(e,null,!0),e}(_(5))}}]);
 //# sourceMappingURL=ht.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/hu.js b/src/conversejs/locales/dayjs/hu.js
index 94fe513dc2b7870aa893c95e796a9991c62c6a53..7a505fd741c45d2d667e96311ac97379f5027ac3 100644
--- a/src/conversejs/locales/dayjs/hu.js
+++ b/src/conversejs/locales/dayjs/hu.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{207:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"hu",weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s múlva",past:"%s",s:"néhány másodperc",m:"egy perc",mm:"%d perc",h:"egy óra",hh:"%d óra",d:"egy nap",dd:"%d nap",M:"egy hónap",MM:"%d hónap",y:"egy éve",yy:"%d év"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{249:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"hu",weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s múlva",past:"%s",s:"néhány másodperc",m:"egy perc",mm:"%d perc",h:"egy óra",hh:"%d óra",d:"egy nap",dd:"%d nap",M:"egy hónap",MM:"%d hónap",y:"egy éve",yy:"%d év"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=hu.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/hy-am.js b/src/conversejs/locales/dayjs/hy-am.js
index 38d6925effd0804c81d9a92e16149810a9762a05..1418cd3d90484c7bca5eed5f41014cc0305b787a 100644
--- a/src/conversejs/locales/dayjs/hy-am.js
+++ b/src/conversejs/locales/dayjs/hy-am.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{208:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"hy-am",weekdays:"Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©".split("_"),months:"Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«".split("_"),weekStart:1,weekdaysShort:"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©".split("_"),monthsShort:"Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿".split("_"),weekdaysMin:"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY Õ©.",LLL:"D MMMM YYYY Õ©., HH:mm",LLLL:"dddd, D MMMM YYYY Õ©., HH:mm"},relativeTime:{future:"%s Õ°Õ¥Õ¿Õ¸",past:"%s Õ¡Õ¼Õ¡Õ»",s:"Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶",m:"Ö€Õ¸ÕºÕ¥",mm:"%d Ö€Õ¸ÕºÕ¥",h:"ÕªÕ¡Õ´",hh:"%d ÕªÕ¡Õ´",d:"Ö…Ö€",dd:"%d Ö…Ö€",M:"Õ¡Õ´Õ«Õ½",MM:"%d Õ¡Õ´Õ«Õ½",y:"Õ¿Õ¡Ö€Õ«",yy:"%d Õ¿Õ¡Ö€Õ«"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{250:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"hy-am",weekdays:"Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©".split("_"),months:"Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«".split("_"),weekStart:1,weekdaysShort:"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©".split("_"),monthsShort:"Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿".split("_"),weekdaysMin:"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY Õ©.",LLL:"D MMMM YYYY Õ©., HH:mm",LLLL:"dddd, D MMMM YYYY Õ©., HH:mm"},relativeTime:{future:"%s Õ°Õ¥Õ¿Õ¸",past:"%s Õ¡Õ¼Õ¡Õ»",s:"Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶",m:"Ö€Õ¸ÕºÕ¥",mm:"%d Ö€Õ¸ÕºÕ¥",h:"ÕªÕ¡Õ´",hh:"%d ÕªÕ¡Õ´",d:"Ö…Ö€",dd:"%d Ö…Ö€",M:"Õ¡Õ´Õ«Õ½",MM:"%d Õ¡Õ´Õ«Õ½",y:"Õ¿Õ¡Ö€Õ«",yy:"%d Õ¿Õ¡Ö€Õ«"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=hy-am.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/id.js b/src/conversejs/locales/dayjs/id.js
index f3fef7243f9495c2065c1f4f9a8521bbea686937..dee6594758d53840f01f64d7072cbe5a20068efd 100644
--- a/src/conversejs/locales/dayjs/id.js
+++ b/src/conversejs/locales/dayjs/id.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{209:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{251:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=id.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/index-d-ts.js b/src/conversejs/locales/dayjs/index-d-ts.js
index a56d95b0831ac515c0d62f1c522a7c8820e93283..8864bcd17932e3273b85f66ad908d744ddd86681 100644
--- a/src/conversejs/locales/dayjs/index-d-ts.js
+++ b/src/conversejs/locales/dayjs/index-d-ts.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{455:function(e,n){throw new Error("Module parse failed: Unexpected token (3:8)\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\n| /// <reference path=\"./types.d.ts\" />\n| \n> declare module 'dayjs/locale/*' {\n|   namespace locale {\n|     interface Locale extends ILocale {}")}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{544:function(e,n){throw new Error("Module parse failed: Unexpected token (3:8)\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\n| /// <reference path=\"./types.d.ts\" />\n| \n> declare module 'dayjs/locale/*' {\n|   namespace locale {\n|     interface Locale extends ILocale {}")}}]);
 //# sourceMappingURL=index-d-ts.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/is.js b/src/conversejs/locales/dayjs/is.js
index 41ae39becfdbceabf62e14b8dd57399a68a32dd3..d97486f1c259309ac7dc49e859d957974a16fd46 100644
--- a/src/conversejs/locales/dayjs/is.js
+++ b/src/conversejs/locales/dayjs/is.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{210:function(_,r,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var r={name:"is",weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"}};return _.locale(r,null,!0),r}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{252:function(_,r,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var r={name:"is",weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"}};return _.locale(r,null,!0),r}(a(5))}}]);
 //# sourceMappingURL=is.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/it-ch.js b/src/conversejs/locales/dayjs/it-ch.js
index fb9038146b5bb296dc702fc7e9dd615c94a9193e..cd15dab304c0f30d0388aa2c7905499e6ac0db1a 100644
--- a/src/conversejs/locales/dayjs/it-ch.js
+++ b/src/conversejs/locales/dayjs/it-ch.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{211:function(e,_,o){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"it-ch",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return e.locale(_,null,!0),_}(o(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{253:function(e,_,o){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"it-ch",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return e.locale(_,null,!0),_}(o(5))}}]);
 //# sourceMappingURL=it-ch.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/it.js b/src/conversejs/locales/dayjs/it.js
index d56e4ce7890388d5aa93f53c398e0b5481aa5f4c..4d80a1d79cd26bb76ffc8304f88b1208053f759c 100644
--- a/src/conversejs/locales/dayjs/it.js
+++ b/src/conversejs/locales/dayjs/it.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{212:function(e,o,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var o={name:"it",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"º"}};return e.locale(o,null,!0),o}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{254:function(e,o,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var o={name:"it",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"º"}};return e.locale(o,null,!0),o}(_(5))}}]);
 //# sourceMappingURL=it.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ja.js b/src/conversejs/locales/dayjs/ja.js
index 7ec943ca9e4787aa8ad17859624a64d01df4d8ad..051e5368ef7740304edf10212950944b28237a82 100644
--- a/src/conversejs/locales/dayjs/ja.js
+++ b/src/conversejs/locales/dayjs/ja.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{213:function(_,Y,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var Y={name:"ja",weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiem:function(_){return _<12?"午前":"午後"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}};return _.locale(Y,null,!0),Y}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{255:function(_,Y,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var Y={name:"ja",weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiem:function(_){return _<12?"午前":"午後"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}};return _.locale(Y,null,!0),Y}(t(5))}}]);
 //# sourceMappingURL=ja.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/jv.js b/src/conversejs/locales/dayjs/jv.js
index f26080c1dbe5d4f10a97e4fdd56ac44863e7bc77..8758ac987b4c952ae870f1311adc37d3b3677efb 100644
--- a/src/conversejs/locales/dayjs/jv.js
+++ b/src/conversejs/locales/dayjs/jv.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{214:function(e,n,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"jv",weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),weekStart:1,weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"}};return e.locale(n,null,!0),n}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{256:function(e,n,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"jv",weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),weekStart:1,weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"}};return e.locale(n,null,!0),n}(_(5))}}]);
 //# sourceMappingURL=jv.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ka.js b/src/conversejs/locales/dayjs/ka.js
index 8f2e6a3bfb4ab6ec11c1c0d04cbfb45a0cbee7d8..086f4e46f4d9f38b8a5655a255b43960453f0352 100644
--- a/src/conversejs/locales/dayjs/ka.js
+++ b/src/conversejs/locales/dayjs/ka.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{215:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ka",weekdays:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s შემდეგ",past:"%s წინ",s:"წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათის",d:"დღეს",dd:"%d დღის განმავლობაში",M:"თვის",MM:"%d თვის",y:"წელი",yy:"%d წლის"},ordinal:function(_){return _}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{257:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ka",weekdays:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s შემდეგ",past:"%s წინ",s:"წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათის",d:"დღეს",dd:"%d დღის განმავლობაში",M:"თვის",MM:"%d თვის",y:"წელი",yy:"%d წლის"},ordinal:function(_){return _}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ka.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/kk.js b/src/conversejs/locales/dayjs/kk.js
index dbb9d5f2161206cec9af08e500df36ad19741936..3f3ccab299cc8213706ea17fee6e4a90ebd4caa1 100644
--- a/src/conversejs/locales/dayjs/kk.js
+++ b/src/conversejs/locales/dayjs/kk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{216:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"kk",weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekStart:1,relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{258:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"kk",weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekStart:1,relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=kk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/km.js b/src/conversejs/locales/dayjs/km.js
index 7594a7a38ab5feac8989f64c5896b246dc19131f..fccfc0f4033cdcc351bd86d5a9cd57286c9a80a8 100644
--- a/src/conversejs/locales/dayjs/km.js
+++ b/src/conversejs/locales/dayjs/km.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{217:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"km",weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekStart:1,weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{259:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"km",weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekStart:1,weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=km.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/kn.js b/src/conversejs/locales/dayjs/kn.js
index 0a0fc0ae0ed9c0805d4a8f821513f38c0e9d0475..50d28f24709f5d3b203f1914a710bc2eb5cb4dd9 100644
--- a/src/conversejs/locales/dayjs/kn.js
+++ b/src/conversejs/locales/dayjs/kn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{218:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"kn",weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{260:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"kn",weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=kn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ko.js b/src/conversejs/locales/dayjs/ko.js
index 8d8e24532d57a6f79ed7a05f3f6429e7c0f280b7..de8c03740723d08071f04b968697c8b68a67a53a 100644
--- a/src/conversejs/locales/dayjs/ko.js
+++ b/src/conversejs/locales/dayjs/ko.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{219:function(_,M,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var M={name:"ko",weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},meridiem:function(_){return _<12?"오전":"오후"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"}};return _.locale(M,null,!0),M}(Y(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{261:function(_,M,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var M={name:"ko",weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},meridiem:function(_){return _<12?"오전":"오후"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"}};return _.locale(M,null,!0),M}(Y(5))}}]);
 //# sourceMappingURL=ko.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ku.js b/src/conversejs/locales/dayjs/ku.js
index 7cc00e1eabbd5b7423f8f2179a5a3a1f2eedb0a1..bb183b4c886cbc38b373a94886ac48d34fa9e764 100644
--- a/src/conversejs/locales/dayjs/ku.js
+++ b/src/conversejs/locales/dayjs/ku.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{220:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ku",weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),months:"کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم".split("_"),weekStart:6,weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),monthsShort:"کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{262:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ku",weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),months:"کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم".split("_"),weekStart:6,weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),monthsShort:"کانونی دووەم_شوبات_ئازار_نیسان_ئایار_حوزەیران_تەمموز_ئاب_ئەیلوول_تشرینی یەكەم_تشرینی دووەم_كانونی یەکەم".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ku.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ky.js b/src/conversejs/locales/dayjs/ky.js
index 6a59288a4d4940eef51f4f4654fc4cb65069b773..e7734b27625e1cc0b54e77fd58a5248d21120c3d 100644
--- a/src/conversejs/locales/dayjs/ky.js
+++ b/src/conversejs/locales/dayjs/ky.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{221:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ky",weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),weekStart:1,weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{263:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ky",weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),weekStart:1,weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ky.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/lb.js b/src/conversejs/locales/dayjs/lb.js
index 9612a0bb0ae9f21a1e606ad6170a3d5f5f8a8bbe..e4190688229037497c488baec870060784c1f910 100644
--- a/src/conversejs/locales/dayjs/lb.js
+++ b/src/conversejs/locales/dayjs/lb.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{222:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"lb",weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"}};return e.locale(_,null,!0),_}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{264:function(e,_,r){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"lb",weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"}};return e.locale(_,null,!0),_}(r(5))}}]);
 //# sourceMappingURL=lb.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/lo.js b/src/conversejs/locales/dayjs/lo.js
index d8b16538c0dbf1917cf74a5ddc6483f77b60e043..7c0a319dfa6aa87615c62662ff55855fa22c19bc 100644
--- a/src/conversejs/locales/dayjs/lo.js
+++ b/src/conversejs/locales/dayjs/lo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{223:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"lo",weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{265:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"lo",weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=lo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/lt.js b/src/conversejs/locales/dayjs/lt.js
index ea3ca6bca51a3172e15c2c54bd013aa2b548875c..a7db0e9e461a5b331bd2984a94c38730b82c85c8 100644
--- a/src/conversejs/locales/dayjs/lt.js
+++ b/src/conversejs/locales/dayjs/lt.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{224:function(s,Y,M){s.exports=function(s){"use strict";s=s&&s.hasOwnProperty("default")?s.default:s;var Y={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_šeš".split("_"),weekdaysMin:"s_p_a_t_k_pn_š".split("_"),months:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(s){return s+"."},weekStart:1,relativeTime:{future:"už %s",past:"prieš %s",s:"kelias sekundes",m:"minutę",mm:"%d minutes",h:"valandą",hh:"%d valandas",d:"dieną",dd:"%d dienas",M:"menesį",MM:"%d mėnesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.locale(Y,null,!0),Y}(M(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{266:function(s,Y,M){s.exports=function(s){"use strict";s=s&&s.hasOwnProperty("default")?s.default:s;var Y={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_šeš".split("_"),weekdaysMin:"s_p_a_t_k_pn_š".split("_"),months:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(s){return s+"."},weekStart:1,relativeTime:{future:"už %s",past:"prieš %s",s:"kelias sekundes",m:"minutę",mm:"%d minutes",h:"valandą",hh:"%d valandas",d:"dieną",dd:"%d dienas",M:"menesį",MM:"%d mėnesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.locale(Y,null,!0),Y}(M(5))}}]);
 //# sourceMappingURL=lt.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/lv.js b/src/conversejs/locales/dayjs/lv.js
index 6a99e94273815aa7f9a411765e46bd2621a331df..bbd4c41787bf33a1ec8753c8e99cd00198354878 100644
--- a/src/conversejs/locales/dayjs/lv.js
+++ b/src/conversejs/locales/dayjs/lv.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{225:function(_,e,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"lv",weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"}};return _.locale(e,null,!0),e}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{267:function(_,e,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"lv",weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"}};return _.locale(e,null,!0),e}(s(5))}}]);
 //# sourceMappingURL=lv.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/me.js b/src/conversejs/locales/dayjs/me.js
index a9366d2ad0ef502dc78d254a4b940cf28408fc1c..9991fd19b2889c38fe233e5306d3356d2dae6f9a 100644
--- a/src/conversejs/locales/dayjs/me.js
+++ b/src/conversejs/locales/dayjs/me.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{226:function(_,e,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"me",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(e,null,!0),e}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{268:function(_,e,a){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var e={name:"me",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(e,null,!0),e}(a(5))}}]);
 //# sourceMappingURL=me.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/mi.js b/src/conversejs/locales/dayjs/mi.js
index 141437071daca1aeff98c48fe8219c4e32d2b71e..bff1dea9f3f79a730398b5287cffcf984bcd526f 100644
--- a/src/conversejs/locales/dayjs/mi.js
+++ b/src/conversejs/locales/dayjs/mi.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{227:function(a,i,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"mi",weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),weekStart:1,weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"}};return a.locale(i,null,!0),i}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{269:function(a,i,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var i={name:"mi",weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),weekStart:1,weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"}};return a.locale(i,null,!0),i}(e(5))}}]);
 //# sourceMappingURL=mi.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/mk.js b/src/conversejs/locales/dayjs/mk.js
index e19a6af48558d928cce2f3b1417be77a869dff12..426cb42a63ec3bbf4a3b698813b96eca95221b40 100644
--- a/src/conversejs/locales/dayjs/mk.js
+++ b/src/conversejs/locales/dayjs/mk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{228:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"mk",weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),weekStart:1,weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"}};return _.locale(t,null,!0),t}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{270:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"mk",weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),weekStart:1,weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),ordinal:function(_){return _},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"}};return _.locale(t,null,!0),t}(e(5))}}]);
 //# sourceMappingURL=mk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ml.js b/src/conversejs/locales/dayjs/ml.js
index ef53b3684f656aa6f4fe3791370ca2babb0c09fc..68741c93430fecac5014628c9ffb44973be619d9 100644
--- a/src/conversejs/locales/dayjs/ml.js
+++ b/src/conversejs/locales/dayjs/ml.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{229:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ml",weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{271:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"ml",weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=ml.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/mn.js b/src/conversejs/locales/dayjs/mn.js
index b15be1a882b8476c59b45e96cf248bba7f5fe803..d9e353cefcba572e44aeefe70a22b6b3b2252d6a 100644
--- a/src/conversejs/locales/dayjs/mn.js
+++ b/src/conversejs/locales/dayjs/mn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{230:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"mn",weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},relativeTime:{future:"%s",past:"%s",s:"саяхан",m:"м",mm:"%dм",h:"1ц",hh:"%dц",d:"1ө",dd:"%dө",M:"1с",MM:"%dс",y:"1ж",yy:"%dж"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{272:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"mn",weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},relativeTime:{future:"%s",past:"%s",s:"саяхан",m:"м",mm:"%dм",h:"1ц",hh:"%dц",d:"1ө",dd:"%dө",M:"1с",MM:"%dс",y:"1ж",yy:"%dж"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=mn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/mr.js b/src/conversejs/locales/dayjs/mr.js
index 1ec48e75238524c49a590c5d2165bd9a6efb41d5..8923ad84fe5cc77b260274dceb286acd8d9a1358 100644
--- a/src/conversejs/locales/dayjs/mr.js
+++ b/src/conversejs/locales/dayjs/mr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{231:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"mr",weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{273:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"mr",weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=mr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ms-my.js b/src/conversejs/locales/dayjs/ms-my.js
index 58505086340d78bb285ae61b0e2b5280c7aad984..b9ff98f153ef85b692e84d9989508d189d22cb20 100644
--- a/src/conversejs/locales/dayjs/ms-my.js
+++ b/src/conversejs/locales/dayjs/ms-my.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[86],{232:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"ms-my",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),weekStart:1,weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),ordinal:function(a){return a},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"}};return a.locale(e,null,!0),e}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[86],{274:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"ms-my",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),weekStart:1,weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),ordinal:function(a){return a},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"}};return a.locale(e,null,!0),e}(_(5))}}]);
 //# sourceMappingURL=ms-my.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ms.js b/src/conversejs/locales/dayjs/ms.js
index 9b5f2eedb59c45c1443dda5503c0765aacad665e..7376af27ff4c76b44dcc130f9dc572f02b580652 100644
--- a/src/conversejs/locales/dayjs/ms.js
+++ b/src/conversejs/locales/dayjs/ms.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{233:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(a){return a+"."}};return a.locale(e,null,!0),e}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{275:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(a){return a+"."}};return a.locale(e,null,!0),e}(_(5))}}]);
 //# sourceMappingURL=ms.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/mt.js b/src/conversejs/locales/dayjs/mt.js
index 3ed2b1edf83d0b6f0876de934c24db096fe11a34..0c1ec0b30cef94e39cefb0d94d0f35059a531831 100644
--- a/src/conversejs/locales/dayjs/mt.js
+++ b/src/conversejs/locales/dayjs/mt.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[87],{234:function(t,_,a){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var _={name:"mt",weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),weekStart:1,weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"}};return t.locale(_,null,!0),_}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[87],{276:function(t,_,a){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var _={name:"mt",weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),weekStart:1,weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"}};return t.locale(_,null,!0),_}(a(5))}}]);
 //# sourceMappingURL=mt.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/my.js b/src/conversejs/locales/dayjs/my.js
index f68574e7e84bb36554964fb1a6915e77fded82e0..697b5c4bdfd212b44a185706f869bf4613387f04 100644
--- a/src/conversejs/locales/dayjs/my.js
+++ b/src/conversejs/locales/dayjs/my.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[88],{235:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"my",weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),weekStart:1,weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[88],{277:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"my",weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),weekStart:1,weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=my.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/nb.js b/src/conversejs/locales/dayjs/nb.js
index a1a1a4ac9170aa6a0c1220cc13ed26a732b6d1dd..7acd0e8e7269d88891ad107551c2a1e5e2a67cfe 100644
--- a/src/conversejs/locales/dayjs/nb.js
+++ b/src/conversejs/locales/dayjs/nb.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[89],{236:function(e,t,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"nb",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"}};return e.locale(t,null,!0),t}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[89],{278:function(e,t,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t={name:"nb",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"}};return e.locale(t,null,!0),t}(_(5))}}]);
 //# sourceMappingURL=nb.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ne.js b/src/conversejs/locales/dayjs/ne.js
index 75e0bccd2bfec3e0c5c583066b1a4c0c23197822..3161709b7ce37f089e88a61a59f1194736df1077 100644
--- a/src/conversejs/locales/dayjs/ne.js
+++ b/src/conversejs/locales/dayjs/ne.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[90],{237:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ne",weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),relativeTime:{future:"%s पछि",past:"%s अघि",s:"सेकेन्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"घन्टा",hh:"%d घन्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक वर्ष",yy:"%d वर्ष"},ordinal:function(_){return(""+_).replace(/\d/g,(function(_){return"०१२३४५६७८९"[_]}))},formats:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"}};return _.locale(t,null,!0),t}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[90],{279:function(_,t,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ne",weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),relativeTime:{future:"%s पछि",past:"%s अघि",s:"सेकेन्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"घन्टा",hh:"%d घन्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक वर्ष",yy:"%d वर्ष"},ordinal:function(_){return(""+_).replace(/\d/g,(function(_){return"०१२३४५६७८९"[_]}))},formats:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"}};return _.locale(t,null,!0),t}(e(5))}}]);
 //# sourceMappingURL=ne.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/nl-be.js b/src/conversejs/locales/dayjs/nl-be.js
index c9f3355c89021fb36066aa11e96056527810e06c..ce6f11ea4c2f8ddeae836d862dd97c65de1165a4 100644
--- a/src/conversejs/locales/dayjs/nl-be.js
+++ b/src/conversejs/locales/dayjs/nl-be.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[92],{238:function(e,a,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"nl-be",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),weekStart:1,weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[92],{280:function(e,a,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"nl-be",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),weekStart:1,weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(n(5))}}]);
 //# sourceMappingURL=nl-be.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/nl.js b/src/conversejs/locales/dayjs/nl.js
index a79e9f83a21b542bd7ba210fb15c5309cd165b71..666bd382da0cec2a3f13c052e5d7b4e99a5e5ca2 100644
--- a/src/conversejs/locales/dayjs/nl.js
+++ b/src/conversejs/locales/dayjs/nl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[91],{239:function(e,a,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[91],{281:function(e,a,n){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return e.locale(a,null,!0),a}(n(5))}}]);
 //# sourceMappingURL=nl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/nn.js b/src/conversejs/locales/dayjs/nn.js
index 5915b8df9a7846060debf969548976d772aa6714..295104b7eeccfcfd4ed267732213b3c120738861 100644
--- a/src/conversejs/locales/dayjs/nn.js
+++ b/src/conversejs/locales/dayjs/nn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{240:function(a,e,t){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"nn",weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),ordinal:function(a){return a+"."},weekStart:1,relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eitt minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månadar",y:"eitt år",yy:"%d år"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"}};return a.locale(e,null,!0),e}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{282:function(a,e,t){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"nn",weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),ordinal:function(a){return a+"."},weekStart:1,relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eitt minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månadar",y:"eitt år",yy:"%d år"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"}};return a.locale(e,null,!0),e}(t(5))}}]);
 //# sourceMappingURL=nn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/oc-lnc.js b/src/conversejs/locales/dayjs/oc-lnc.js
index a2011f13f33ecb0842c0e48e61d489d8c449f957..3ba7471f91f1d98bd329b35e9229c69ca9bad1c3 100644
--- a/src/conversejs/locales/dayjs/oc-lnc.js
+++ b/src/conversejs/locales/dayjs/oc-lnc.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{241:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"oc-lnc",weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"Dg_Dl_Dm_Dc_Dj_Dv_Ds".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),months:"genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),monthsShort:"gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{283:function(e,s,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var s={name:"oc-lnc",weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"Dg_Dl_Dm_Dc_Dj_Dv_Ds".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),months:"genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),monthsShort:"gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},ordinal:function(e){return e+"º"}};return e.locale(s,null,!0),s}(_(5))}}]);
 //# sourceMappingURL=oc-lnc.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/pa-in.js b/src/conversejs/locales/dayjs/pa-in.js
index a55422a9822c7d117b712b4c84b4a805d15444df..c4b70253aaf97663b45d6c600fd1a949295f0cfa 100644
--- a/src/conversejs/locales/dayjs/pa-in.js
+++ b/src/conversejs/locales/dayjs/pa-in.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[95],{242:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"pa-in",weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[95],{284:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"pa-in",weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=pa-in.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/pl.js b/src/conversejs/locales/dayjs/pl.js
index 9af5d5e1e3723f847ae714fd632db260257d7986..40567717d68eadaacb2920aac6b8e2b7b64d340f 100644
--- a/src/conversejs/locales/dayjs/pl.js
+++ b/src/conversejs/locales/dayjs/pl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[96],{243:function(e,i,t){e.exports=function(e){"use strict";function i(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,r){var _=e+" ";switch(r){case"m":return t?"minuta":"minutę";case"mm":return _+(i(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return _+(i(e)?"godziny":"godzin");case"MM":return _+(i(e)?"miesiące":"miesięcy");case"yy":return _+(i(e)?"lata":"lat")}}e=e&&e.hasOwnProperty("default")?e.default:e;var r={name:"pl",weekdays:"Niedziela_Poniedziałek_Wtorek_Środa_Czwartek_Piątek_Sobota".split("_"),weekdaysShort:"Ndz_Pon_Wt_Śr_Czw_Pt_Sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),months:"Styczeń_Luty_Marzec_Kwiecień_Maj_Czerwiec_Lipiec_Sierpień_Wrzesień_Październik_Listopad_Grudzień".split("_"),monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return e.locale(r,null,!0),r}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[96],{285:function(e,i,t){e.exports=function(e){"use strict";function i(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,r){var _=e+" ";switch(r){case"m":return t?"minuta":"minutę";case"mm":return _+(i(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return _+(i(e)?"godziny":"godzin");case"MM":return _+(i(e)?"miesiące":"miesięcy");case"yy":return _+(i(e)?"lata":"lat")}}e=e&&e.hasOwnProperty("default")?e.default:e;var r={name:"pl",weekdays:"Niedziela_Poniedziałek_Wtorek_Środa_Czwartek_Piątek_Sobota".split("_"),weekdaysShort:"Ndz_Pon_Wt_Śr_Czw_Pt_Sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),months:"Styczeń_Luty_Marzec_Kwiecień_Maj_Czerwiec_Lipiec_Sierpień_Wrzesień_Październik_Listopad_Grudzień".split("_"),monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return e.locale(r,null,!0),r}(t(5))}}]);
 //# sourceMappingURL=pl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/pt-br.js b/src/conversejs/locales/dayjs/pt-br.js
index 1b5ecc2cf4b89d46cb87cda5023cb600ddd48a5d..439dee8e3fd3315658f0e08beb255b4c0cdfba0c 100644
--- a/src/conversejs/locales/dayjs/pt-br.js
+++ b/src/conversejs/locales/dayjs/pt-br.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[98],{244:function(e,o,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var o={name:"pt-br",weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekStart:1,months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return e.locale(o,null,!0),o}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[98],{286:function(e,o,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var o={name:"pt-br",weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekStart:1,months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return e.locale(o,null,!0),o}(_(5))}}]);
 //# sourceMappingURL=pt-br.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/pt.js b/src/conversejs/locales/dayjs/pt.js
index 59f543e13ff57d29a1af270f1c5aefe2e365267a..21bc5211ac2bd9a913db42d0c40269e736788d94 100644
--- a/src/conversejs/locales/dayjs/pt.js
+++ b/src/conversejs/locales/dayjs/pt.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[97],{245:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"pt",weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sab".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sa".split("_"),months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),ordinal:function(e){return e+"º"},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[97],{287:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"pt",weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sab".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sa".split("_"),months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),ordinal:function(e){return e+"º"},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=pt.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ro.js b/src/conversejs/locales/dayjs/ro.js
index 7d78e11bde0031d036ef29ef779aa28db436994a..80a41fcbd931eae575e2aeaf6de1370da1d1b4fe 100644
--- a/src/conversejs/locales/dayjs/ro.js
+++ b/src/conversejs/locales/dayjs/ro.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[99],{246:function(e,i,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var i={name:"ro",weekdays:"Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return e.locale(i,null,!0),i}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[99],{288:function(e,i,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var i={name:"ro",weekdays:"Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return e.locale(i,null,!0),i}(_(5))}}]);
 //# sourceMappingURL=ro.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ru.js b/src/conversejs/locales/dayjs/ru.js
index 112333c737ce970e8af09662c8e2b19c7986e10e..fe92b6cad64b5591e7befa0e654918ce412386ac 100644
--- a/src/conversejs/locales/dayjs/ru.js
+++ b/src/conversejs/locales/dayjs/ru.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{247:function(_,t,n){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),n="январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),s="янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),e="янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(_,t,n){var s,e;return"m"===n?t?"минута":"минуту":_+" "+(s=+_,e={mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),s%10==1&&s%100!=11?e[0]:s%10>=2&&s%10<=4&&(s%100<10||s%100>=20)?e[1]:e[2])}var M=function(_,s){return r.test(s)?t[_.month()]:n[_.month()]};M.s=n,M.f=t;var m=function(_,t){return r.test(t)?s[_.month()]:e[_.month()]};m.s=e,m.f=s;var i={name:"ru",weekdays:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),months:M,monthsShort:m,weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:o,mm:o,h:"час",hh:o,d:"день",dd:o,M:"месяц",MM:o,y:"год",yy:o},ordinal:function(_){return _}};return _.locale(i,null,!0),i}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{289:function(_,t,n){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),n="январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),s="янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),e="янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(_,t,n){var s,e;return"m"===n?t?"минута":"минуту":_+" "+(s=+_,e={mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),s%10==1&&s%100!=11?e[0]:s%10>=2&&s%10<=4&&(s%100<10||s%100>=20)?e[1]:e[2])}var M=function(_,s){return r.test(s)?t[_.month()]:n[_.month()]};M.s=n,M.f=t;var m=function(_,t){return r.test(t)?s[_.month()]:e[_.month()]};m.s=e,m.f=s;var i={name:"ru",weekdays:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),months:M,monthsShort:m,weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:o,mm:o,h:"час",hh:o,d:"день",dd:o,M:"месяц",MM:o,y:"год",yy:o},ordinal:function(_){return _}};return _.locale(i,null,!0),i}(n(5))}}]);
 //# sourceMappingURL=ru.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/rw.js b/src/conversejs/locales/dayjs/rw.js
index 03b89d63871faa6496def9c433b6cdb22bde3c25..1c37460342df6ba7b26ea13e757440ed7c9a7847 100644
--- a/src/conversejs/locales/dayjs/rw.js
+++ b/src/conversejs/locales/dayjs/rw.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{248:function(a,u,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var u={name:"rw",weekdays:"Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu".split("_"),months:"Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza".split("_"),relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(a){return a}};return a.locale(u,null,!0),u}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{290:function(a,u,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var u={name:"rw",weekdays:"Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu".split("_"),months:"Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza".split("_"),relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(a){return a}};return a.locale(u,null,!0),u}(n(5))}}]);
 //# sourceMappingURL=rw.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sd.js b/src/conversejs/locales/dayjs/sd.js
index 8f8a8dd7f18ffb94619312e837fc03ad0376ffa6..8810cc98bf553619d38bbd8342265ca872aea7c9 100644
--- a/src/conversejs/locales/dayjs/sd.js
+++ b/src/conversejs/locales/dayjs/sd.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{249:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"sd",weekdays:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),months:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekStart:1,weekdaysShort:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),monthsShort:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekdaysMin:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{291:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"sd",weekdays:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),months:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekStart:1,weekdaysShort:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),monthsShort:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekdaysMin:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=sd.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/se.js b/src/conversejs/locales/dayjs/se.js
index f69a2a1298f0b9247c153f8e26c093197d2a2cbe..a37f1f566205270fe26c166a7ef45f87a989386a 100644
--- a/src/conversejs/locales/dayjs/se.js
+++ b/src/conversejs/locales/dayjs/se.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{250:function(a,n,t){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var n={name:"se",weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),weekStart:1,weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"}};return a.locale(n,null,!0),n}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{292:function(a,n,t){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var n={name:"se",weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),weekStart:1,weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"}};return a.locale(n,null,!0),n}(t(5))}}]);
 //# sourceMappingURL=se.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/si.js b/src/conversejs/locales/dayjs/si.js
index d6008ef4fa7df43ac6d28dba96faa54111f00761..1bc982045f6d16a13cbbc21b84cbd22cc3be2610 100644
--- a/src/conversejs/locales/dayjs/si.js
+++ b/src/conversejs/locales/dayjs/si.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{251:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"si",weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),ordinal:function(_){return _},formats:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{293:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"si",weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),ordinal:function(_){return _},formats:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=si.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sk.js b/src/conversejs/locales/dayjs/sk.js
index 0a3536f55db5410b13683c4c1a2048279db95459..3cd467206e271b7f6db12111c83d01785706b27f 100644
--- a/src/conversejs/locales/dayjs/sk.js
+++ b/src/conversejs/locales/dayjs/sk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{252:function(e,r,t){e.exports=function(e){"use strict";function r(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,a){var s=e+" ";switch(n){case"s":return t||a?"pár sekúnd":"pár sekundami";case"m":return t?"minúta":a?"minútu":"minútou";case"mm":return t||a?s+(r(e)?"minúty":"minút"):s+"minútami";case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":return t||a?s+(r(e)?"hodiny":"hodín"):s+"hodinami";case"d":return t||a?"deň":"dňom";case"dd":return t||a?s+(r(e)?"dni":"dní"):s+"dňami";case"M":return t||a?"mesiac":"mesiacom";case"MM":return t||a?s+(r(e)?"mesiace":"mesiacov"):s+"mesiacmi";case"y":return t||a?"rok":"rokom";case"yy":return t||a?s+(r(e)?"roky":"rokov"):s+"rokmi"}}e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"sk",weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),months:"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),monthsShort:"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"pred %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return e.locale(n,null,!0),n}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{294:function(e,r,t){e.exports=function(e){"use strict";function r(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,a){var s=e+" ";switch(n){case"s":return t||a?"pár sekúnd":"pár sekundami";case"m":return t?"minúta":a?"minútu":"minútou";case"mm":return t||a?s+(r(e)?"minúty":"minút"):s+"minútami";case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":return t||a?s+(r(e)?"hodiny":"hodín"):s+"hodinami";case"d":return t||a?"deň":"dňom";case"dd":return t||a?s+(r(e)?"dni":"dní"):s+"dňami";case"M":return t||a?"mesiac":"mesiacom";case"MM":return t||a?s+(r(e)?"mesiace":"mesiacov"):s+"mesiacmi";case"y":return t||a?"rok":"rokom";case"yy":return t||a?s+(r(e)?"roky":"rokov"):s+"rokmi"}}e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"sk",weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),months:"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),monthsShort:"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"pred %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return e.locale(n,null,!0),n}(t(5))}}]);
 //# sourceMappingURL=sk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sl.js b/src/conversejs/locales/dayjs/sl.js
index 0b1eba168d665b82f5b928c7feda037c441f5c7c..7c8afe00f34f35c7288c790c16b73613fdfe3b8f 100644
--- a/src/conversejs/locales/dayjs/sl.js
+++ b/src/conversejs/locales/dayjs/sl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{253:function(e,_,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"sl",weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),weekStart:1,weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(_,null,!0),_}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{295:function(e,_,t){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"sl",weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),weekStart:1,weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(_,null,!0),_}(t(5))}}]);
 //# sourceMappingURL=sl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sq.js b/src/conversejs/locales/dayjs/sq.js
index ecc5fdce3ad06bfdbd50fefb97bc518d83743b63..5692c8e677ef56a2f289e166d16bc0b592568a5d 100644
--- a/src/conversejs/locales/dayjs/sq.js
+++ b/src/conversejs/locales/dayjs/sq.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{254:function(t,_,r){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var _={name:"sq",weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),weekStart:1,weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"}};return t.locale(_,null,!0),_}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{296:function(t,_,r){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var _={name:"sq",weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),weekStart:1,weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"}};return t.locale(_,null,!0),_}(r(5))}}]);
 //# sourceMappingURL=sq.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sr-cyrl.js b/src/conversejs/locales/dayjs/sr-cyrl.js
index a65cd224603ce2130faab4d4bec31fafee620704..0a35ec013366a2595ee65d18dca6c5b849c2269e 100644
--- a/src/conversejs/locales/dayjs/sr-cyrl.js
+++ b/src/conversejs/locales/dayjs/sr-cyrl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{255:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"sr-cyrl",weekdays:"Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота".split("_"),weekdaysShort:"Нед._Пон._Уто._Сре._Чет._Пет._Суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),months:"Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар".split("_"),monthsShort:"Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"пре %s",s:"секунда",m:"минут",mm:"%d минута",h:"сат",hh:"%d сати",d:"дан",dd:"%d дана",M:"месец",MM:"%d месеци",y:"година",yy:"%d године"},ordinal:function(_){return _+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{297:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"sr-cyrl",weekdays:"Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота".split("_"),weekdaysShort:"Нед._Пон._Уто._Сре._Чет._Пет._Суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),months:"Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар".split("_"),monthsShort:"Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"пре %s",s:"секунда",m:"минут",mm:"%d минута",h:"сат",hh:"%d сати",d:"дан",dd:"%d дана",M:"месец",MM:"%d месеци",y:"година",yy:"%d године"},ordinal:function(_){return _+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=sr-cyrl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sr.js b/src/conversejs/locales/dayjs/sr.js
index f9e94d4aa03e1701feb4054c6e973a6074668255..39d1f2524236a57dc1097f3afd19ff3c367df478 100644
--- a/src/conversejs/locales/dayjs/sr.js
+++ b/src/conversejs/locales/dayjs/sr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{256:function(e,_,a){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"sr",weekdays:"Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sre._Čet._Pet._Sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar".split("_"),monthsShort:"Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.".split("_"),weekStart:1,relativeTime:{future:"za %s",past:"pre %s",s:"sekunda",m:"minut",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mesec",MM:"%d meseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(_,null,!0),_}(a(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{298:function(e,_,a){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var _={name:"sr",weekdays:"Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sre._Čet._Pet._Sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar".split("_"),monthsShort:"Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.".split("_"),weekStart:1,relativeTime:{future:"za %s",past:"pre %s",s:"sekunda",m:"minut",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mesec",MM:"%d meseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return e.locale(_,null,!0),_}(a(5))}}]);
 //# sourceMappingURL=sr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ss.js b/src/conversejs/locales/dayjs/ss.js
index 2a1d85cdab857226b2f490653f7aefdf63a09855..d4872bbba78f272b00dff204bab5e492a9d3c536 100644
--- a/src/conversejs/locales/dayjs/ss.js
+++ b/src/conversejs/locales/dayjs/ss.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{257:function(n,a,_){n.exports=function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var a={name:"ss",weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),weekStart:1,weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),ordinal:function(n){return n},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"}};return n.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{299:function(n,a,_){n.exports=function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var a={name:"ss",weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),weekStart:1,weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),ordinal:function(n){return n},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"}};return n.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=ss.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sv.js b/src/conversejs/locales/dayjs/sv.js
index b2699f4dea14b35c37fa831fc5bd62613e829889..a4c906fda858c9bae81b7c7301d69fbc46a681fd 100644
--- a/src/conversejs/locales/dayjs/sv.js
+++ b/src/conversejs/locales/dayjs/sv.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{258:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,ordinal:function(e){var a=e%10;return"["+e+(1===a||2===a?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return e.locale(a,null,!0),a}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{300:function(e,a,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var a={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,ordinal:function(e){var a=e%10;return"["+e+(1===a||2===a?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return e.locale(a,null,!0),a}(_(5))}}]);
 //# sourceMappingURL=sv.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/sw.js b/src/conversejs/locales/dayjs/sw.js
index 8cd47454c49f3df44af38cd98bbab60ac990b75a..c8349236ee3a8b9f85afea365a9742f5f7fd0c08 100644
--- a/src/conversejs/locales/dayjs/sw.js
+++ b/src/conversejs/locales/dayjs/sw.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{259:function(a,_,m){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"sw",weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return a.locale(_,null,!0),_}(m(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{301:function(a,_,m){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"sw",weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return a.locale(_,null,!0),_}(m(5))}}]);
 //# sourceMappingURL=sw.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ta.js b/src/conversejs/locales/dayjs/ta.js
index b7d4328cbf1633f1857ada7f0db9a0069ff4a3bf..b92627bdaaa04b92831f5a15fead92ee95586150 100644
--- a/src/conversejs/locales/dayjs/ta.js
+++ b/src/conversejs/locales/dayjs/ta.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{260:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ta",weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{302:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ta",weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ta.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/te.js b/src/conversejs/locales/dayjs/te.js
index e24eca5f7bbf881e743422613a44d426033c7add..451b9f90da0ebad3bd12a228abb7077ed9b4a4e6 100644
--- a/src/conversejs/locales/dayjs/te.js
+++ b/src/conversejs/locales/dayjs/te.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{261:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"te",weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{303:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"te",weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=te.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tet.js b/src/conversejs/locales/dayjs/tet.js
index 581453ae01b518cc3c5c48e9dcc3561a6772b310..593b67fad94c8bfc6affc55c2a42bedf8653a172 100644
--- a/src/conversejs/locales/dayjs/tet.js
+++ b/src/conversejs/locales/dayjs/tet.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{262:function(a,u,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var u={name:"tet",weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),weekStart:1,weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"}};return a.locale(u,null,!0),u}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{304:function(a,u,e){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var u={name:"tet",weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),weekStart:1,weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"}};return a.locale(u,null,!0),u}(e(5))}}]);
 //# sourceMappingURL=tet.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tg.js b/src/conversejs/locales/dayjs/tg.js
index 55a0093acff5adae0d883fb5581bed10b99724ba..0c4c9a8f5af13059ee746ee5daf9fac728a375f5 100644
--- a/src/conversejs/locales/dayjs/tg.js
+++ b/src/conversejs/locales/dayjs/tg.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{263:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"tg",weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{305:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"tg",weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=tg.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/th.js b/src/conversejs/locales/dayjs/th.js
index 9097d82e9ef888ffe3e0e6d135ecfea8c484edd8..589c76a3ec0145938700e5f13c79acf7d900ae07 100644
--- a/src/conversejs/locales/dayjs/th.js
+++ b/src/conversejs/locales/dayjs/th.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{264:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"th",weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"},ordinal:function(_){return _+"."}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{306:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"th",weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"},ordinal:function(_){return _+"."}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=th.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tk.js b/src/conversejs/locales/dayjs/tk.js
index 7c9944d4c429eb2f5893cb68f74f6dd2208e584b..1e581d1bd09933adf77ac8689397f5b347216a70 100644
--- a/src/conversejs/locales/dayjs/tk.js
+++ b/src/conversejs/locales/dayjs/tk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{265:function(e,n,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"tk",weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e){return e+"."}};return e.locale(n,null,!0),n}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{307:function(e,n,_){e.exports=function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n={name:"tk",weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e){return e+"."}};return e.locale(n,null,!0),n}(_(5))}}]);
 //# sourceMappingURL=tk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tl-ph.js b/src/conversejs/locales/dayjs/tl-ph.js
index ea8ab8a5e57e9e3c60084e3a063f683be655364e..479fe290791bab8650db898b214e1858179c83d5 100644
--- a/src/conversejs/locales/dayjs/tl-ph.js
+++ b/src/conversejs/locales/dayjs/tl-ph.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{266:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"tl-ph",weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),weekStart:1,weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"}};return a.locale(e,null,!0),e}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{308:function(a,e,_){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var e={name:"tl-ph",weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),weekStart:1,weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"}};return a.locale(e,null,!0),e}(_(5))}}]);
 //# sourceMappingURL=tl-ph.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tlh.js b/src/conversejs/locales/dayjs/tlh.js
index fab77291615772f8bfc5c39c38c7262af5253e61..7b80182d488fe3aa890008404a014d16391ff12e 100644
--- a/src/conversejs/locales/dayjs/tlh.js
+++ b/src/conversejs/locales/dayjs/tlh.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[120],{267:function(a,j,r){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var j={name:"tlh",weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),weekStart:1,weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return a.locale(j,null,!0),j}(r(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[120],{309:function(a,j,r){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var j={name:"tlh",weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),weekStart:1,weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return a.locale(j,null,!0),j}(r(5))}}]);
 //# sourceMappingURL=tlh.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tr.js b/src/conversejs/locales/dayjs/tr.js
index cbfed3f7ac1a67176e1b3811038b07c56960a8d0..9204aca96b1430173fbfcd64e28a126ca518f354 100644
--- a/src/conversejs/locales/dayjs/tr.js
+++ b/src/conversejs/locales/dayjs/tr.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{268:function(a,_,s){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"tr",weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){return a+"."}};return a.locale(_,null,!0),_}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{310:function(a,_,s){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"tr",weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){return a+"."}};return a.locale(_,null,!0),_}(s(5))}}]);
 //# sourceMappingURL=tr.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/types-d-ts.js b/src/conversejs/locales/dayjs/types-d-ts.js
index 7c4623f1e4f3c090ab98d2e7cf242deefc8d35c3..181df0dbefceda8e1cd8228ed583baed4e0eac7e 100644
--- a/src/conversejs/locales/dayjs/types-d-ts.js
+++ b/src/conversejs/locales/dayjs/types-d-ts.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[146],{456:function(e,n){throw new Error("Module parse failed: Unexpected token (1:8)\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\n> declare interface ILocale {\n|   name: string\n|   weekdays?: string[]")}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[146],{545:function(e,n){throw new Error("Module parse failed: Unexpected token (1:8)\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\n> declare interface ILocale {\n|   name: string\n|   weekdays?: string[]")}}]);
 //# sourceMappingURL=types-d-ts.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tzl.js b/src/conversejs/locales/dayjs/tzl.js
index 19a53cbfe13c29993854cef3bfefc7d617c8f039..e60b08b2e8d71589fefc378920293d141c11583b 100644
--- a/src/conversejs/locales/dayjs/tzl.js
+++ b/src/conversejs/locales/dayjs/tzl.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{269:function(_,a,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"tzl",weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),weekStart:1,weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),ordinal:function(_){return _},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"}};return _.locale(a,null,!0),a}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{311:function(_,a,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"tzl",weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),weekStart:1,weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),ordinal:function(_){return _},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"}};return _.locale(a,null,!0),a}(t(5))}}]);
 //# sourceMappingURL=tzl.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tzm-latn.js b/src/conversejs/locales/dayjs/tzm-latn.js
index 927966a9856b05358de367da871b8e1ad587bbee..f7e2cefe82bd296c5adb59f560ba4b9334ccec5d 100644
--- a/src/conversejs/locales/dayjs/tzm-latn.js
+++ b/src/conversejs/locales/dayjs/tzm-latn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{270:function(a,s,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var s={name:"tzm-latn",weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekStart:6,weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"}};return a.locale(s,null,!0),s}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{312:function(a,s,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var s={name:"tzm-latn",weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekStart:6,weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"}};return a.locale(s,null,!0),s}(n(5))}}]);
 //# sourceMappingURL=tzm-latn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/tzm.js b/src/conversejs/locales/dayjs/tzm.js
index 99e67b886c07ac0901a77a54f22f299a08bde885..d9e47c77b7ee7e5edf055b5cca954da9e035d42b 100644
--- a/src/conversejs/locales/dayjs/tzm.js
+++ b/src/conversejs/locales/dayjs/tzm.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{271:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"tzm",weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekStart:6,weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{313:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"tzm",weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekStart:6,weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=tzm.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ug-cn.js b/src/conversejs/locales/dayjs/ug-cn.js
index 8554741bfc79c8092b7c4f4837198b6dac40d3f3..48f4ae2217c0df5314c664af1730bf6680faed92 100644
--- a/src/conversejs/locales/dayjs/ug-cn.js
+++ b/src/conversejs/locales/dayjs/ug-cn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{272:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ug-cn",weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekStart:1,weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{314:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ug-cn",weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekStart:1,weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ug-cn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/uk.js b/src/conversejs/locales/dayjs/uk.js
index 7b1b1c7bdb8875345a3f6cba4d10dba79b362cbb..d7987f3264ca7fdb7ae1e7043c4fccc1133ea6c2 100644
--- a/src/conversejs/locales/dayjs/uk.js
+++ b/src/conversejs/locales/dayjs/uk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{273:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),s="січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),n=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function e(_,t,s){var n,e;return"m"===s?t?"хвилина":"хвилину":"h"===s?t?"година":"годину":_+" "+(n=+_,e={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[s].split("_"),n%10==1&&n%100!=11?e[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?e[1]:e[2])}var M=function(_,e){return n.test(e)?t[_.month()]:s[_.month()]};M.s=s,M.f=t;var r={name:"uk",weekdays:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),weekdaysShort:"ндл_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:M,monthsShort:"сiч_лют_бер_квiт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:e,mm:e,h:e,hh:e,d:"день",dd:e,M:"місяць",MM:e,y:"рік",yy:e},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"}};return _.locale(r,null,!0),r}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{315:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t="січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),s="січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),n=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function e(_,t,s){var n,e;return"m"===s?t?"хвилина":"хвилину":"h"===s?t?"година":"годину":_+" "+(n=+_,e={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[s].split("_"),n%10==1&&n%100!=11?e[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?e[1]:e[2])}var M=function(_,e){return n.test(e)?t[_.month()]:s[_.month()]};M.s=s,M.f=t;var r={name:"uk",weekdays:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),weekdaysShort:"ндл_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:M,monthsShort:"сiч_лют_бер_квiт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:e,mm:e,h:e,hh:e,d:"день",dd:e,M:"місяць",MM:e,y:"рік",yy:e},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"}};return _.locale(r,null,!0),r}(s(5))}}]);
 //# sourceMappingURL=uk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/ur.js b/src/conversejs/locales/dayjs/ur.js
index 9fdf0d419df51cfd459bdaffd92b7d0910d83794..3cc68cc47383c938a0867874a96d97de4390de13 100644
--- a/src/conversejs/locales/dayjs/ur.js
+++ b/src/conversejs/locales/dayjs/ur.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{274:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ur",weekdays:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),months:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekStart:1,weekdaysShort:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),monthsShort:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekdaysMin:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{316:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"ur",weekdays:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),months:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekStart:1,weekdaysShort:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),monthsShort:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekdaysMin:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=ur.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/uz-latn.js b/src/conversejs/locales/dayjs/uz-latn.js
index 65f96ef14ebca25849d532dbd29d333766c724ea..442cc057d8bea57d3f6b5626b40eac2c344dd7c9 100644
--- a/src/conversejs/locales/dayjs/uz-latn.js
+++ b/src/conversejs/locales/dayjs/uz-latn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{275:function(a,_,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"uz-latn",weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),weekStart:1,weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"}};return a.locale(_,null,!0),_}(n(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{317:function(a,_,n){a.exports=function(a){"use strict";a=a&&a.hasOwnProperty("default")?a.default:a;var _={name:"uz-latn",weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),weekStart:1,weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"}};return a.locale(_,null,!0),_}(n(5))}}]);
 //# sourceMappingURL=uz-latn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/uz.js b/src/conversejs/locales/dayjs/uz.js
index aa4312bfce6f1399ada96464c5d29558ddb31a9a..29280f88ca6114355d7c18fdd15202873feff519 100644
--- a/src/conversejs/locales/dayjs/uz.js
+++ b/src/conversejs/locales/dayjs/uz.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{276:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"uz",weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"}};return _.locale(t,null,!0),t}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{318:function(_,t,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"uz",weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"}};return _.locale(t,null,!0),t}(s(5))}}]);
 //# sourceMappingURL=uz.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/vi.js b/src/conversejs/locales/dayjs/vi.js
index 5ed810046711fdf08af11562e5ebe01ac972845d..07f514578ae3c0fa161c925e6dc6df458510bbf9 100644
--- a/src/conversejs/locales/dayjs/vi.js
+++ b/src/conversejs/locales/dayjs/vi.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{277:function(t,h,_){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var h={name:"vi",weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"}};return t.locale(h,null,!0),h}(_(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{319:function(t,h,_){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var h={name:"vi",weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"}};return t.locale(h,null,!0),h}(_(5))}}]);
 //# sourceMappingURL=vi.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/x-pseudo.js b/src/conversejs/locales/dayjs/x-pseudo.js
index 03b5fa75677fd61eb3c35957125a3f2e5b946e14..fe33df08ae6d04a4e571026f9f394e24e6dd093b 100644
--- a/src/conversejs/locales/dayjs/x-pseudo.js
+++ b/src/conversejs/locales/dayjs/x-pseudo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{278:function(_,r,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var r={name:"x-pseudo",weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),weekStart:1,weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"}};return _.locale(r,null,!0),r}(s(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{320:function(_,r,s){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var r={name:"x-pseudo",weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),weekStart:1,weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"}};return _.locale(r,null,!0),r}(s(5))}}]);
 //# sourceMappingURL=x-pseudo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/yo.js b/src/conversejs/locales/dayjs/yo.js
index bad9718f465bbc79b4278cd55b324be248e14878..0e1367388d0533753a5aeed91b1e9ecaa4dc6b9d 100644
--- a/src/conversejs/locales/dayjs/yo.js
+++ b/src/conversejs/locales/dayjs/yo.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{279:function(_,a,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"yo",weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),weekStart:1,weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),ordinal:function(_){return _},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"}};return _.locale(a,null,!0),a}(e(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{321:function(_,a,e){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var a={name:"yo",weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),weekStart:1,weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),ordinal:function(_){return _},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"}};return _.locale(a,null,!0),a}(e(5))}}]);
 //# sourceMappingURL=yo.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/zh-cn.js b/src/conversejs/locales/dayjs/zh-cn.js
index a4786c68fcb1679b34fad2350f7b6e11b304b67a..da50e98a0d742cfeaefbf62b7da0a7b2e0fe3553 100644
--- a/src/conversejs/locales/dayjs/zh-cn.js
+++ b/src/conversejs/locales/dayjs/zh-cn.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{280:function(_,t,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,t){switch(t){case"W":return _+"周";default:return _+"日"}},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(_,t){var Y=100*_+t;return Y<600?"凌晨":Y<900?"早上":Y<1130?"上午":Y<1230?"中午":Y<1800?"下午":"晚上"}};return _.locale(t,null,!0),t}(Y(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{322:function(_,t,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,t){switch(t){case"W":return _+"周";default:return _+"日"}},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(_,t){var Y=100*_+t;return Y<600?"凌晨":Y<900?"早上":Y<1130?"上午":Y<1230?"中午":Y<1800?"下午":"晚上"}};return _.locale(t,null,!0),t}(Y(5))}}]);
 //# sourceMappingURL=zh-cn.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/zh-hk.js b/src/conversejs/locales/dayjs/zh-hk.js
index c9a87943372aed1b61be0a4277369a687a42b596..cc4cd919f5a3eedb08f0204016e4e36bfdd3e298 100644
--- a/src/conversejs/locales/dayjs/zh-hk.js
+++ b/src/conversejs/locales/dayjs/zh-hk.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{281:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"zh-hk",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d 分鐘",h:"一小時",hh:"%d 小時",d:"一天",dd:"%d 天",M:"一個月",MM:"%d 個月",y:"一年",yy:"%d 年"}};return _.locale(s,null,!0),s}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{323:function(_,s,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var s={name:"zh-hk",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d 分鐘",h:"一小時",hh:"%d 小時",d:"一天",dd:"%d 天",M:"一個月",MM:"%d 個月",y:"一年",yy:"%d 年"}};return _.locale(s,null,!0),s}(t(5))}}]);
 //# sourceMappingURL=zh-hk.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/zh-tw.js b/src/conversejs/locales/dayjs/zh-tw.js
index 6eb4f029fbe58f1dbc23e9404fecc0bb31012d5e..bedf1fce602bdcede3a078a0e41d4c7effb44229 100644
--- a/src/conversejs/locales/dayjs/zh-tw.js
+++ b/src/conversejs/locales/dayjs/zh-tw.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{282:function(_,Y,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var Y={name:"zh-tw",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}};return _.locale(Y,null,!0),Y}(t(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{324:function(_,Y,t){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var Y={name:"zh-tw",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_){return _+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}};return _.locale(Y,null,!0),Y}(t(5))}}]);
 //# sourceMappingURL=zh-tw.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/dayjs/zh.js b/src/conversejs/locales/dayjs/zh.js
index 68118dc5ba5b4a4b6f28fa1626dd7c53c02d06c1..ecb4964944acca7d2dd0c6d5d343a79cdb81ecfc 100644
--- a/src/conversejs/locales/dayjs/zh.js
+++ b/src/conversejs/locales/dayjs/zh.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{283:function(_,t,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,t){switch(t){case"W":return _+"周";default:return _+"日"}},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(_,t){var Y=100*_+t;return Y<600?"凌晨":Y<900?"早上":Y<1130?"上午":Y<1230?"中午":Y<1800?"下午":"晚上"}};return _.locale(t,null,!0),t}(Y(4))}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{325:function(_,t,Y){_.exports=function(_){"use strict";_=_&&_.hasOwnProperty("default")?_.default:_;var t={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,t){switch(t){case"W":return _+"周";default:return _+"日"}},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(_,t){var Y=100*_+t;return Y<600?"凌晨":Y<900?"早上":Y<1130?"上午":Y<1230?"中午":Y<1800?"下午":"晚上"}};return _.locale(t,null,!0),t}(Y(5))}}]);
 //# sourceMappingURL=zh.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/de-LC_MESSAGES-converse-po.js b/src/conversejs/locales/de-LC_MESSAGES-converse-po.js
index 482d5dcfd552926563cf614bb7ac08b0e0ceade5..225011e646211b867eb35edd74fe1c3bb0724081 100644
--- a/src/conversejs/locales/de-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/de-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{425:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"de"},"Create your account":["Erstellen Sie Ihr Konto"],"Please enter the XMPP provider to register with:":["Bitte geben Sie den XMPP-Provider ein, bei dem Sie sich anmelden möchten:"],"Already have a chat account?":["Sie haben bereits ein Chat-Konto?"],"Log in here":["Hier anmelden"],"Account Registration:":["Konto-Registrierung:"],"Register":["Registrierung"],"Choose a different provider":["Wählen Sie einen anderen Anbieter"],"Hold tight, we\'re fetching the registration form…":["Bitte warten, das Anmeldeformular wird geladen …"],"Cancel":["Abbrechen"],"The connection has dropped, attempting to reconnect.":["Die Verbindung ist abgebrochen und es wird versucht, die Verbindung wiederherzustellen."],"An error occurred while connecting to the chat server.":["Beim Verbinden mit dem Chatserver ist ein Fehler aufgetreten."],"Your XMPP address and/or password is incorrect. Please try again.":["Ihre XMPP-Adresse und/oder Ihr Kennwort sind falsch. Bitte versuchen Sie es noch einmal."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Leider konnten wir keine Verbindung zum XMPP-Host mit der Domain %1$s herstellen"],"The XMPP server did not offer a supported authentication mechanism":["Der XMPP-Server hat keinen unterstützten Authentifizierungsmechanismus angeboten"],"Undecryptable OMEMO message":["Unentschlüsselbare OMEMO-Nachricht"],"Sorry, could not determine upload URL.":["Leider konnte die Upload-URL nicht ermittelt werden."],"Sorry, could not determine file upload URL.":["Konnte die Hochlade-URL leider nicht bestimmen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Leider konnte die Datei nicht hochgeladen werden. Der Server antwortete: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Leider konnte Ihre Datei nicht erfolgreich hochgeladen werden."],"You\'re not allowed to retract your message.":["Sie dürfen Ihre Nachricht nicht widerrufen."],"Sorry, an error occurred while trying to retract your message.":["Es ist leider ein Fehler aufgetreten, als Sie versucht haben, Ihre Nachricht zu widerrufen."],"You\'re not allowed to send a message.":["Sie dürfen keine Nachricht senden."],"Sorry, an error occurred while trying to send your message.":["Es ist leider ein Fehler beim Senden Ihrer Nachricht aufgetreten."],"Sorry, looks like file upload is not supported by your server.":["Scheint als werde das Hochladen von Dateien auf dem Server nicht unterstützt."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Die Größe Ihrer Datei, %1$s, überschreitet das erlaubte Maximum vom Server, welches bei %2$s liegt."],"Smileys and emotions":["Smileys und Emotionen"],"People":["Menschen"],"Activities":["Aktivitäten"],"Travel":["Reisen"],"Objects":["Objekte"],"Animals and nature":["Tiere und Natur"],"Food and drink":["Essen und Trinken"],"Symbols":["Symbole"],"Flags":["Flaggen"],"Stickers":["Aufkleber"],"This groupchat is not anonymous":["Dieser Gruppenchat ist nicht anonym"],"This groupchat now shows unavailable members":["Dieser Gruppenchat zeigt nicht verfügbare Mitglieder an"],"This groupchat does not show unavailable members":["Dieser Gruppenchat zeigt keine nicht verfügbaren Mitglieder an"],"The groupchat configuration has changed":["Die Gruppenchatkonfiguration hat sich geändert"],"Groupchat logging is now enabled":["Gruppenchat wird ab jetzt protokolliert"],"Groupchat logging is now disabled":["Gruppenchat wird nicht mehr protokolliert"],"This groupchat is now no longer anonymous":["Dieser Gruppenchat ist jetzt nicht mehr anonym"],"This groupchat is now semi-anonymous":["Dieser Gruppenchat ist jetzt nur teilweise anonym"],"This groupchat is now fully-anonymous":["Dieser Gruppenchat ist jetzt vollständig anonym"],"A new groupchat has been created":["Ein neuer Gruppenchat wurde erstellt"],"Your nickname has been automatically set to %1$s":["Ihr Spitzname wurde automatisch geändert zu: %1$s"],"Your nickname has been changed to %1$s":["Ihr Spitzname wurde geändert zu: %1$s"],"You have been banned from this groupchat":["Sie wurden aus diesem Gruppenchat entfernt"],"You have exited this groupchat due to a technical problem":["Sie haben diesen Gruppenchat aufgrund eines technischen Problems verlassen"],"You have been kicked from this groupchat":["Sie wurden aus diesem Gruppenchat hinausgeworfen"],"You have been removed from this groupchat because of an affiliation change":["Sie wurden aus diesem Gruppenchat wegen einer Zugehörigkeitsänderung entfernt"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sie wurden aus diesem Gruppenchat ausgeschlossen, da der Gruppenchat jetzt nur noch Mitglieder erlaubt und Sie kein Mitglied sind"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sie wurden aus dem Gruppenchat entfernt, weil der Hostingservice heruntergefahren wurde"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Ihr Widerruf wurde nicht zugestellt, weil Sie nicht im Gruppenchat vertreten sind."],"Your message was not delivered because you weren\'t allowed to send it.":["Ihre Nachricht wurde nicht zugestellt, weil Sie sie nicht abschicken durften."],"Your message was not delivered because you\'re not present in the groupchat.":["Ihre Nachricht wurde nicht zugestellt, weil Sie im Gruppenchat nicht vertreten sind."],"A timeout happened while while trying to retract your message.":["Beim Versuch, Ihre Nachricht zurückzuziehen, ist eine Zeitüberschreitung aufgetreten."],"You\'re not allowed to register yourself in this groupchat.":["Sie dürfen nicht diesem Gruppenchat beitreten."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Es ist Ihnen nicht erlaubt diesem Raum beizutreten da sie kein Mitglied sind."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Registrierung fehlgeschlagen, dieser Raum unterstützt keine Registrierung von Spitznamen."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Spitzname-Registrierung fehlgeschlagen, falsche Informationen eingetragen."],"Topic set by %1$s":["Thema von %1$s festgelegt"],"Topic cleared by %1$s":["Thema wurde durch %1$s bereinigt"],"%1$s has been banned by %2$s":["%1$s wurde von %2$s verbannt"],"%1$s has been banned":["%1$s wurde verbannt"],"%1$s\'s nickname has changed":["Der Spitzname von %1$s hat sich geändert"],"%1$s has been kicked out by %2$s":["%1$s wurde von %2$s hinausgeworfen"],"%1$s has been kicked out":["%1$s wurde hinausgeworfen"],"%1$s has been removed because of an affiliation change":["%1$s wurde wegen einer Zugehörigkeitsänderung entfernt"],"%1$s has been removed for not being a member":["%1$s ist kein Mitglied und wurde daher entfernt"],"%1$s is no longer an admin of this groupchat":["%1$s ist nicht mehr ein Admin dieses Gruppenchats"],"%1$s is no longer an owner of this groupchat":["%1$s ist nicht mehr Eigentümer dieses Gruppenchats"],"%1$s is no longer banned from this groupchat":["%1$s ist in diesem Gruppenchat nicht mehr gesperrt"],"%1$s is no longer a member of this groupchat":["%1$s ist nicht mehr ein Mitglied dieses Gruppenchats"],"%1$s is now a member of this groupchat":["%1$s ist nun Mitglied dieses Gruppenchats"],"%1$s is now an %2$s of this groupchat":["%1$s ist nun ein %2$s dieses Gruppenchats"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Der gewählte Spitzname ist reserviert oder derzeit in Gebrauch. Bitte wählen Sie einen Anderen."],"Password incorrect":["Passwort falsch"],"You are not on the member list of this groupchat.":["Sie sind nicht auf der Mitgliederliste dieses Gruppenchats."],"You have been banned from this groupchat.":["Sie wurden aus diesem Gruppenchat entfernt."],"You are not allowed to create new groupchats.":["Es ist Ihnen nicht erlaubt neue Räume anzulegen."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Ihr Spitzname entspricht nicht den Richtlinien dieses Gruppenchats."],"This groupchat does not (yet) exist.":["Dieser Gruppenchat existiert (noch) nicht."],"This groupchat has reached its maximum number of participants.":["Maximale Anzahl an Teilnehmern für diesen Gruppenchat erreicht."],"Remote server not found":["Server wurde nicht gefunden"],"The explanation given is: \\"%1$s\\".":["Angegebene Grund: „%1$s”."],"%1$s has invited you to join a groupchat: %2$s":["%1$s hat Sie in den Gruppenchat „%2$s” eingeladen"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s hat Sie in den Gruppenchat „%2$s” eingeladen. Begründung: „%3$s”"],"Error":["Fehler"],"Sorry, something went wrong while trying to save your bookmark.":["Leider konnte das Lesezeichen nicht gespeichert werden."],"Timeout Error":["Timeout-Fehler"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Der Server hat Ihre Lesezeichen nicht innerhalb der zulässigen Zeit zurückgegeben. Sie können die Seite neu laden, um sie erneut anzufordern."],"My contacts":["Meine Kontakte"],"Pending contacts":["Unbestätigte Kontakte"],"Contact requests":["Kontaktanfragen"],"Ungrouped":["Ungruppiert"],"New messages":["Neue Nachrichten"],"Sorry, there was an error while trying to add %1$s as a contact.":["Leider gab es einen Fehler beim Versuch, %1$s als Kontakt hinzuzufügen."],"This client does not allow presence subscriptions":["Dieser Client erlaubt keine Anwesenheitsabonnements"],"Click to hide these contacts":["Hier klicken, um diese Kontakte auszublenden"],"Unbookmark this groupchat":["Lesezeichen für diesen Gruppenchat entfernen"],"Click to open this groupchat":["Hier klicken, um diesen Gruppenchat zu öffnen"],"Click to toggle the bookmarks list":["Liste der Lesezeichen umschalten"],"Bookmarks":["Lesezeichen"],"Bookmark this groupchat":["Lesezeichen für diesen Gruppenchat speichern"],"Would you like this groupchat to be automatically joined upon startup?":["Beim Anmelden diesem Gruppenchat automatisch beitreten?"],"The name for this bookmark:":["Name des Lesezeichens:"],"What should your nickname for this groupchat be?":["Welcher Spitzname soll für diesen Gruppenchat verwendet werden?"],"Save":["Speichern"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Möchten Sie das Lesezeichen „%1$s” wirklich löschen?"],"Unbookmark":["Lesezeichen entfernen"],"Bookmark":["Lesezeichen"],"Close":["Schließen"],"OK":["OK"],"Image: ":["Bild: "],"Download audio file \\"%1$s\\"":["Audiodatei \\"%1$s\\" herunterladen"],"Download file \\"%1$s\\"":["Datei \\"%1$s\\" herunterladen"],"Cancel Editing":["Bearbeitung abbrechen"],"Edit":["Bearbeiten"],"Retract":["Widerrufen"],"Message versions":["Nachrichtenarchivierung"],"Retry":["Wiederholen"],"Uploading file:":["Lade Datei hoch:"],"%1$s has removed this message":["%1$s hat diese Nachricht entfernt"],"This message has been edited":["Diese Nachricht wurde geändert"],"Show more":["Mehr anzeigen"],"Show less":["Weniger anzeigen"],"No message history available.":["Kein Nachrichtenverlauf vorhanden."],"Search results":["Suchergebnisse"],"Search":["Suchen"],"Insert emojis":["Emojis einfügen"],"Send the message":["Nachricht senden"],"Start a call":["Beginne eine Unterhaltung"],"Message characters remaining":["Verbleibende Zeichen"],"Hide participants":["Teilnehmer ausblenden"],"Show participants":["Teilnehmer anzeigen"],"Choose a file to send":["Datei versenden"],"Click to write as a normal (non-spoiler) message":["Hier klicken, um Statusnachricht zu ändern (ohne Spoiler)"],"Click to write your message as a spoiler":["Hier klicken, um die Nachricht als Spoiler zu kennzeichnen"],"The User\'s Profile Image":["Benutzerprofilbild"],"Trusted":["Vertrauenswürdig"],"Untrusted":["Nicht vertrauenswürdig"],"OMEMO Fingerprints":["OMEMO Fingerabdrücke"],"No OMEMO-enabled devices found":["Keine OMEMO-fähigen Geräte gefunden"],"Remove as contact":["Kontakt entfernen"],"XMPP Address":["XMPP-Adresse"],"Email":["E-Mail"],"Full Name":["Name"],"Nickname":["Spitzname"],"Refresh":["Aktualisieren"],"Role":["Rolle"],"URL":["URL"],"%1$s is typing":["%1$s schreibt"],"%1$s has stopped typing":["%1$s tippt nicht mehr"],"%1$s has gone away":["%1$s ist jetzt abwesend"],"Remove messages":["Nachrichten entfernen"],"Close this chat":["Diesen Chat schließen"],"Write in the third person":["In der dritten Person schreiben"],"Show this menu":["Dieses Menü anzeigen"],"Hidden message":["Versteckte Nachricht"],"Message":["Nachricht"],"Optional hint":["Optionaler Hinweis"],"You have unread messages":["Sie haben ungelesene Nachrichten"],"Details":["Details"],"See more information about this person":["Weitere Informationen über diese Person anzeigen"],"Close and end this conversation":["Schließen und beenden Sie dieses Gespräch"],"Sorry, the connection has been lost, and your message could not be sent":["Die Verbindung wurde leider unterbrochen und Ihre Nachricht konnte nicht gesendet werden"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Beachten Sie, dass andere XMPP/Jabber-Clients (und Server) möglicherweise noch keinen Widerruf unterstützen und dass diese Nachricht möglicherweise nicht überall entfernt wird."],"Are you sure you want to retract this message?":["Sind Sie sicher, dass Sie diese Nachricht widerrufen wollen?"],"Confirm":["Bestätigen"],"You have an unsent message which will be lost if you continue. Are you sure?":["Sie haben eine nicht gesendete Nachricht, die verloren geht, wenn Sie fortfahren. Sind Sie sicher?"],"Are you sure you want to clear the messages from this conversation?":["Sind Sie sicher, dass Sie alle Nachrichten dieses Chats löschen möchten?"],"%1$s has gone offline":["%1$s hat sich abgemeldet"],"%1$s is busy":["%1$s ist beschäftigt"],"%1$s is online":["%1$s ist jetzt online"],"Sorry, something went wrong while trying to refresh":["Leider ist bei der Aktualisierung etwas schief gelaufen"],"Are you sure you want to remove this contact?":["Möchten Sie diesen Kontakt wirklich entfernen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Leider gab es einen Fehler beim Versuch, %1$s als Kontakt zu entfernen."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Um die Leistung zu verbessern, werden Ihre Daten in diesem Browser zwischengespeichert. Deaktivieren Sie dieses Kontrollkästchen, wenn es sich um einen öffentlichen Computer handelt oder wenn Sie möchten, dass Ihre Daten beim Abmelden gelöscht werden. Es ist wichtig, dass Sie sich explizit abmelden, da sonst möglicherweise nicht alle zwischengespeicherten Daten gelöscht werden. Bitte beachten Sie, dass bei Verwendung eines nicht vertrauenswürdigen Geräts die OMEMO-Verschlüsselung NICHT verfügbar ist."],"This is a trusted device":["Diesem Gerät wird vertraut"],"Password":["Passwort"],"Create an account":["Konto erstellen"],"Don\'t have a chat account?":["Sie haben noch kein Chat-Konto?"],"Log in":["Anmelden"],"Disconnected":["Getrennt"],"Click here to log in anonymously":["Hier klicken, um sich anonym anzumelden"],"Username":["Benutzername"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["Bitte eine gültige XMPP-Adresse eingeben"],"Chat Contacts":["Kontakte"],"Toggle chat":["Chat ein-/ausblenden"],"Click to restore this chat":["Hier klicken, um diesen Chat wiederherzustellen"],"Minimized":["Minimiert"],"Minimize":["Minimieren"],"Minimize this chat":["Diesen Chat minimieren"],"Minimize this groupchat":["Diesen Gruppenchat minimieren"],"This field is required":["Dieses Feld ist ein Pflichtfeld"],"Join":["Betreten"],"Enter a new Groupchat":["Einem neuen Gruppenchat beitreten"],"name@conference.example.org":["name@conference.beispiel.org"],"Groupchat name":["Gruppenchatname"],"Groupchat address":["Gruppenchat-Adresse"],"Groupchat id is invalid.":["Gruppenchat-ID ist ungültig."],"Invite":["Einladen"],"Invite someone to this groupchat":["Laden Sie jemanden zu diesem Gruppenchat ein"],"user@example.org":["benutzer@beispiel.org"],"Optional reason for the invitation":["Optionaler Grund für die Einladung"],"Show groupchats":["Gruppen"],"Server address":["Server"],"Show more information on this groupchat":["Zeige mehr Informationen über diesen Gruppenchat"],"Query for Groupchats":["Gruppenchats abfragen"],"Description:":["Beschreibung:"],"Groupchat Address (JID):":["Gruppenchat-Adresse (JID):"],"Participants:":["Teilnehmer:"],"Features:":["Funktionen:"],"Requires authentication":["Authentifizierung erforderlich"],"Hidden":["Ausblenden"],"Requires an invitation":["Einladung erforderlich"],"Moderated":["Moderiert"],"Non-anonymous":["Nicht anonym"],"Open":["Offen"],"Permanent":["Dauerhafter Raum"],"Public":["Öffentlich"],"Semi-anonymous":["Teilweise anonym"],"Temporary":["Vorübergehend"],"Unmoderated":["Nicht moderiert"],"conference.example.org":["konferenz.beispiel.org"],"Groupchats found":["Gruppenchats gefunden"],"No groupchats found":["Keine Räume gefunden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatoren sind privilegierte Benutzer, die die Rollen anderer Benutzer ändern können (außer denen mit Administrator- oder Eigentümerzugehörigkeit)."],"The default role, implies that you can read and write messages.":["Die Standardrolle bedeutet, dass Sie Nachrichten lesen und schreiben können."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besucher dürfen keine Nachrichten in einem moderierten Mehrbenutzer-Chat schreiben."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Besitzer ist die höchste Zugehörigkeit. Besitzer können Rollen und Zugehörigkeiten aller anderen Benutzer ändern."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administrator ist die zweithöchste Zugehörigkeit. Administratoren können Rollen und Zugehörigkeiten aller anderen Benutzer mit Ausnahme der Eigentümer ändern."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Sperren Sie Benutzer, indem Sie ihre Zugehörigkeit zu ausgeschlossenen Personen ändern."],"Change role":["Rolle ändern"],"New Role":["Neue Rolle"],"Reason":["Grund"],"Change affiliation":["Zugehörigkeit ändern"],"New affiliation":["Neue Zugehörigkeit"],"Affiliation":["Zugehörigkeit"],"Moderator Tools":["Moderatoren-Tools"],"No users with that affiliation found.":["Keine Benutzer mit dieser Zugehörigkeit gefunden."],"No users with that role found.":["Keine Nutzer mit dieser Rolle gefunden."],"Type here to filter the search results":["Hier Filter für Suchergebnisse eingeben"],"Show users":["Nutzer anzeigen"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rollen werden den Benutzern zugewiesen, um ihnen in einem Mehrbenutzer-Chat bestimmte Fähigkeiten zu gewähren oder zu verweigern. Sie werden entweder explizit oder implizit als Teil einer Zugehörigkeit zugewiesen. Eine Rolle, die nicht auf eine Zugehörigkeit zurückzuführen ist, ist nur für die Dauer der Sitzung des Benutzers gültig."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Eine Zugehörigkeit ist ein langlebiger Anspruch, der typischerweise eine bestimmte Rolle beinhaltet und Privilegien und Verantwortlichkeiten gewährt. Beispielsweise haben Administratoren und Eigentümer automatisch die Moderatorenrolle."],"Timeout error while trying to set the affiliation":["Zeitüberschreitungsfehler beim Versuch, die Zugehörigkeit festzulegen"],"Sorry, you\'re not allowed to make that change":["Es tut uns leid, Sie dürfen diese Änderung nicht vornehmen"],"Sorry, something went wrong while trying to set the affiliation":["Leider ist bei der Änderung der Zugehörigkeiten etwas schief gelaufen"],"Affiliation changed":["Zugehörigkeit geändert"],"Role changed":["Rolle geändert"],"You\'re not allowed to make that change":["Du darfst diese Änderung nicht vornehmen"],"Sorry, something went wrong while trying to set the role":["Leider ist bei der Festlegung der Rolle etwas schief gelaufen"],"Topic":["Thema"],"Topic author":["Autor des Themas"],"Groupchat address (JID)":["Gruppenchat-Adresse (JID)"],"Message archiving":["Nachrichtenarchivierung"],"Messages are archived on the server":["Nachrichten werden auf dem Server archiviert"],"Description":["Beschreibung"],"Features":["Funktionen"],"This groupchat is not publicly searchable":["Dieser Gruppenchat ist nicht öffentlich auffindbar"],"This groupchat is restricted to members only":["Dieser Gruppenchat ist nur für Mitglieder zugänglich"],"Members only":["Nur Mitglieder"],"Participants entering this groupchat need to request permission to write":["Teilnehmer, die diesem Gruppenchat beitreten, müssen die Erlaubnis zum Schreiben anfordern"],"Name":["Name"],"This groupchat does not require a password upon entry":["Dieser Gruppenchat erfordert kein Passwort"],"No password required":["Kein Passwort benötigt"],"Not anonymous":["Nicht anonym"],"All other groupchat participants can see your XMPP address":["Jeder in dem Gruppenchat kann Ihre XMPP-Adresse sehen"],"Not moderated":["Nicht moderiert"],"Participants entering this groupchat can write right away":["Teilnehmer, die diesem Gruppenchat beitreten, können sofort schreiben"],"Online users":["Online"],"Anyone can join this groupchat":["Jeder kann diesem Gruppenchat beitreten"],"This groupchat requires a password before entry":["Dieser Gruppenchat erfordert ein Passwort"],"Password protected":["Passwortgeschützt"],"Persistent":["Dauerhaft"],"This groupchat persists even if it\'s unoccupied":["Dieser Gruppenchat bleibt bestehen, auch wenn er nicht besetzt ist"],"Only moderators can see your XMPP address":["Nur Moderatoren können Ihre XMPP-Adresse sehen"],"This groupchat will disappear once the last person leaves":["Dieser Gruppenchat verschwindet, sobald die letzte Person den Gruppenchat verlässt"],"This groupchat is publicly searchable":["Dieser Gruppenchat ist öffentlich auffindbar"],"Groupchat info for %1$s":["Gruppenchat-Benachrichtigung für %1$s"],"You\'re not allowed to send messages in this room":["Sie dürfen in diesem Gruppenchat keine Nachrichten senden"],"The conversation has moved. Click below to enter.":["Das Gespräch wurde verschoben. Klicken Sie unten, um einzutreten."],"This groupchat no longer exists":["Dieser Gruppenchat existiert nicht mehr"],"Hide the groupchat topic":["Gruppen-Chatraum verbergen"],"This groupchat is bookmarked":["Dieser Raum ist als Lesezechen gekennzeichnet"],"Enter groupchat":["Gruppenchat beitreten"],"Choose a nickname to enter":["Wählen Sie einen Spitznamen für die Eingabe"],"Please choose your nickname":["Wählen Sie Ihren Spitznamen"],"This groupchat requires a password":["Dieser Gruppenchat erfordert ein Passwort"],"Password: ":["Passwort: "],"Submit":["Senden"],"This user is a moderator.":["Dieser Benutzer ist ein Moderator."],"This user can send messages in this groupchat.":["Dieser Teilnehmer kann Nachrichten in diesem Gruppenchat versenden."],"This user can NOT send messages in this groupchat.":["Dieser Teilnehmer kann keine Nachrichten in diesem Gruppenchat versenden."],"Owner":["Eigentümer"],"Admin":["Administrator"],"Member":["Mitglieder"],"Moderator":["Moderator"],"Visitor":["Besucher"],"Click to mention %1$s in your message.":["Klicken Sie hier, um %1$s in Ihrer Nachricht zu erwähnen."],"Participants":["Teilnehmer"],"%1$s has entered the groupchat":["%1$s ist dem Gruppenchat beigetreten"],"%1$s has left the groupchat":["%1$s hat den Gruppenchat verlassen"],"%1$s is now a moderator":["%1$s ist jetzt ein Moderator"],"%1$s is no longer a moderator":["%1$s ist kein Moderator mehr"],"%1$s has been given a voice":["%1$s darf nun wieder schreiben"],"%1$s has been muted":["%1$s wurde das Schreibrecht entzogen"],"%1$s and %2$s":["%1$s und %2$s"],"%1$s are typing":["%1$s tippt"],"%1$s have stopped typing":["%1$s tippt nicht mehr"],"%1$s have gone away":["%1$s ist jetzt abwesend"],"%1$s have entered the groupchat":["%1$s ist dem Gruppenchat beigetreten"],"%1$s have left the groupchat":["%1$s hat den Gruppenchat verlassen"],"%1$s are now moderators":["%1$s sind jetzt Moderatoren"],"%1$s are no longer moderators":["%1$s sind keine Moderatoren mehr"],"%1$s have been given voices":["%1$s dürfen nun wieder schreiben"],"%1$s have been muted":["%1$s wurde das Schreibrecht entzogen"],"Change user\'s affiliation to admin":["Zugehörigkeit des Benutzers zu Administrator ändern"],"Ban user by changing their affiliation to outcast":["Sperren Sie Benutzer, indem Sie ihre Zugehörigkeit zu ausgeschlossenen Personen ändern"],"Clear the chat area":["Löschen des Chatbereichs"],"Close this groupchat":["Dieses Gruppenchat schließen"],"Change user role to participant":["Rolle zu Teilnehmer ändern"],"Remove this groupchat":["Diesen Gruppenchat entfernen"],"Kick user from groupchat":["Mitglied aus diesem Gruppenchat entfernen"],"Write in 3rd person":["In der dritten Person schreiben"],"Grant membership to a user":["Einem Benutzer die Mitgliedschaft gewähren"],"Opens up the moderator tools GUI":["Öffnet die Benutzeroberfläche der Moderatorentools"],"Remove user\'s ability to post messages":["Die Möglichkeit des Benutzers, Nachrichten zu senden, entfernen"],"Change your nickname":["Eigenen Spitznamen ändern"],"Grant moderator role to user":["Benutzer Moderatorenrechte gewähren"],"Grant ownership of this groupchat":["Besitzrechte an diesem Gruppenchat vergeben"],"Register your nickname":["Registrieren Sie Ihren Spitznamen"],"Revoke the user\'s current affiliation":["Widerrufen der aktuellen Zugehörigkeit des Benutzers"],"Set groupchat subject":["Thema des Gruppenchats festlegen"],"Set groupchat subject (alias for /subject)":["Gruppenchatthema (alias für /subject) festlegen"],"Allow muted user to post messages":["Stummgeschaltetem Benutzer erlauben Nachrichten zu senden"],"You are about to retract this message.":["Sie sind dabei, diese Nachricht zu widerrufen."],"You may optionally include a message, explaining the reason for the retraction.":["Sie können optional eine Nachricht mit einer Erklärung und Grund für den Widerruf einfügen."],"Message Retraction":["Nachricht Widerruf"],"Optional reason":["Optionaler Grund"],"Sorry, you\'re not allowed to retract this message":["Es tut uns leid, Sie dürfen diese Nachricht nicht widerrufen"],"A timeout occurred while trying to retract the message":["Eine Zeitüberschreitung ist beim Versuch aufgetreten, die Nachricht zu widerrufen"],"Sorry, you\'re not allowed to retract this message.":["Es tut uns leid, Sie dürfen diese Nachricht nicht widerrufen."],"Show more information about this groupchat":["Weitere Informationen zu diesem Gruppenchat anzeigen"],"Configure":["Konfigurieren"],"Configure this groupchat":["Diesen Gruppenchat konfigurieren"],"Invite someone to join this groupchat":["Laden Sie jemanden zu diesem Gruppenchat ein"],"Show topic":["Thema anzeigen"],"Hide topic":["Thema ausblenden"],"Show the topic message in the heading":["Thema in der Überschrift anzeigen"],"Hide the topic in the heading":["Thema in der Überschrift ausblenden"],"Moderate":["Moderiert"],"Moderate this groupchat":["Diesen Gruppenchat moderieren"],"Destroy":["Gruppenchat zerstören"],"Leave":["Verlassen"],"Leave and close this groupchat":["Verlassen und diesen Gruppenchat schließen"],"Are you sure you want to leave this groupchat?":["Sind Sie sicher, dass Sie diesen Gruppenchat verlassen wollen?"],"Hide the list of participants":["Teilnehmerliste ausblenden"],"Forbidden: you do not have the necessary role in order to do that.":["Verboten: Sie haben nicht die nötigen Rechte, um das zu tun."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Verboten: Sie haben nicht die nötige Zugehörigkeit, um das zu tun."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fehler: Das „%1$s”-Kommando benötigt zwei Argumente: Den Spitznamen und einen Grund."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fehler: Konnte keinen Groupchat-Teilnehmer anhand ihrer Kriterien finden"],"Error: found multiple groupchat participant based on your arguments":["Fehler: Mehrere Gruppenchat-Teilnehmer basierend auf ihren Kriterien gefunden"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Konnte keinen Teilnehmer mit diesem Spitznamen finden. Möglicherweise haben sie den Gruppenchat verlassen."],"Sorry, an error happened while running the command.":["Entschuldigung, bei der Ausführung des Befehls ist ein Fehler aufgetreten."],"Check your browser\'s developer console for details.":["Einzelheiten finden Sie in der Entwicklerkonsole Ihres Browsers."],"Are you sure you want to destroy this groupchat?":["Möchten Sie den Gruppenchat „%1$s” wirklich zerstören?"],"Please enter the XMPP address of this groupchat to confirm":["Bitte geben Sie die XMPP-Adresse dieses Gruppenchats zur Bestätigung ein"],"name@example.org":["benutzer@beispiel.org"],"Optional reason for destroying this groupchat":["Optionaler Grund für die Zerstörung dieses Gruppenchats"],"Optional XMPP address for a new groupchat that replaces this one":["Optionale XMPP-Adresse für einen neuen Gruppenchat, der diese ersetzt"],"replacement@example.org":["ersatz@beispiel.org"],"Your nickname is \\"%1$s\\"":["Ihr Spitzname ist \\"%1$s\\""],"Error: invalid number of arguments":["Fehler: ungültige Anzahl von Argumenten"],"This action was done by %1$s.":["Diese Aktion wurde durch %1$s ausgeführt."],"The reason given is: \\"%1$s\\".":["Angegebener Grund: „%1$s”."],"Groupchats":["Gruppenchat"],"Add a new groupchat":["Neuen Gruppenchat hinzufügen"],"Query for groupchats":["Gruppenchats abfragen"],"Sorry, an error occurred while trying to submit the config form.":["Beim Senden des Konfigurationsformulars ist leider ein Fehler aufgetreten."],"Close these announcements":["Ankündigungen schließen"],"Announcements":["Ankündigungen"],"Click to open this server message":["Klicken Sie hier, um diese Servernachricht zu öffnen"],"Notification from %1$s":["Benachrichtigung von %1$s"],"%1$s says":["%1$s sagt"],"Encrypted message received":["Verschlüsselte Nachricht empfangen"],"has gone offline":["hat sich abgemeldet"],"has gone away":["ist jetzt abwesend"],"is busy":["ist beschäftigt"],"has come online":["kam online"],"wants to be your contact":["möchte Ihr Kontakt sein"],"Hide":["Ausblenden"],"Execute":["Ausführen"],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":["Befehle gefunden"],"List available commands":["Verfügbare Befehle auflisten"],"No commands found":["Keine Befehle gefunden"],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Es ist leider ein Fehler beim Ausführen des Befehls aufgetreten. Weitere Informationen finden Sie in der Entwicklerkonsole"],"About":["Über"],"Commands":["Befehle"],"Settings":["Einstellungen"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s XMPP Chat Client, der Ihnen von %3$s Opkode %2$s zur Verfügung gestellt wird"],"%1$s Translate %2$s it into your own language":["%1$s Übersetzen Sie %2$s es in Ihre eigene Sprache"],"Log out":["Abmelden"],"Click to change your chat status":["Hier klicken, um Ihren Status zu ändern"],"Show details about this chat client":["Details zu diesem Chat-Client anzeigen"],"Your avatar image":["Dein Avatarbild"],"Checkbox for selecting the following fingerprint":["Kontrollkästchen zur Auswahl des folgenden Fingerabdrucks"],"Device without a fingerprint":["Gerät ohne Fingerabdruck"],"Checkbox for selecting the following device":["Kontrollkästchen zur Auswahl des folgenden Geräts"],"Other OMEMO-enabled devices":["Andere OMEMO-fähige Geräte"],"Checkbox to select fingerprints of all other OMEMO devices":["Kontrollkästchen zur Auswahl der Fingerabdrücke aller anderen OMEMO-Geräte"],"Remove checked devices and close":["Markierte Geräte entfernen und schließen"],"Select all":["Alle auswählen"],"This device\'s OMEMO fingerprint":["OMEMO-Fingerabdruck dieses Geräts"],"Generate new keys and fingerprint":["Neuer Schlüssel und Fingerabdrücke generieren"],"Your Profile":["Dein Profil"],"XMPP Address (JID)":["XMPP/Jabber-ID (JID)"],"Save and close":["Speichern und schließen"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Benutze Kommas um die Rollen zu separieren. Die Rollen erscheinen neben deinem Namen."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Leider ist beim Speichern deiner Profildaten ein Fehler aufgetreten."],"You can check your browser\'s developer console for any error output.":["Schau in die Entwicklerkonsole des Browsers um mögliche Fehlerausgaben zu sehen."],"Away":["Abwesend"],"Busy":["Beschäftigt"],"Custom status":["Statusnachricht"],"Offline":["Abgemeldet"],"Online":["Online"],"Away for long":["Lange abwesend"],"Change chat status":["Hier klicken, um Ihren Status zu ändern"],"Personal status message":["Persönliche Statusnachricht"],"I am %1$s":["Ich bin %1$s"],"Are you sure you want to log out?":["Möchten Sie sich wirklich abmelden?"],"online":["online"],"busy":["beschäftigt"],"away for long":["länger abwesend"],"away":["abwesend"],"offline":["abgemeldet"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Leider konnte eine empfangene OMEMO-Nachricht aufgrund eines Fehlers nicht entschlüsselt werden."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s scheint keinen Client zu haben, der OMEMO unterstützt. Ein verschlüsselter Chat wird in diesem Gruppenchat nicht mehr möglich sein."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["In diesem Gruppenchat kann keine Ende-zu-Ende-Verschlüsselung verwendet werden, entweder der Gruppenchat hat eine gewisse Anonymität oder nicht alle Teilnehmer unterstützen OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Ende-zu-Ende Verschlüsselung konnte nicht verwendet werden, da %1$s einen Client verwendet, der OMEMO nicht unterstützt."],"Messages are being sent in plaintext":["Nachrichten werden im Klartext gesendet"],"Messages are sent encrypted":["Nachrichten werden verschlüsselt gesendet"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Dieser Gruppenchat muss nur für Mitglieder zugänglich und nicht anonym sein, um OMEMO-verschlüsselte Nachrichten zu unterstützen"],"Sorry, an error occurred while trying to remove the devices.":["Leider ist beim Versuch, die Geräte zu entfernen, ein Fehler aufgetreten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sind Sie sicher, dass Sie neue OMEMO-Schlüssel erzeugen möchten? Dann werden Ihre alten Schlüssel entfernt und alle zuvor verschlüsselten Nachrichten sind auf diesem Gerät nicht mehr entschlüsselbar."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Leider können wir keine verschlüsselte Nachricht senden, da %1$s erfordert, dass Sie für ihre Teilnahme angemeldet sind, um ihre OMEMO-Informationen zu sehen"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Leider können wir keine verschlüsselte Nachricht senden, da der Remote-Server für %1$s nicht gefunden werden konnte"],"Unable to send an encrypted message due to an unexpected error.":["Die verschlüsselte Nachricht konnte aufgrund eines unerwarteten Fehlers nicht versendet werden."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Leider können wir keine Geräte finden, an die wir eine OMEMO-verschlüsselte Nachricht senden können."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dies ist eine OMEMO-verschlüsselte Nachricht, die Ihr Client nicht zu unterstützen scheint. Weitere Informationen finden Sie unter https://conversations.im/omemo"]," e.g. conversejs.org":[" z. B. conversejs.org"],"Fetch registration form":["Anmeldeformular wird abgerufen"],"Tip: A list of public XMPP providers is available":["Tipp: Eine Liste öffentlicher Provider ist verfügbar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Leider können wir keine Verbindung zu dem von Ihnen gewählten Provider herstellen."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Leider unterstützt der angegebene Anbieter die keine Benutzerregistrierung. Bitte versuche es bei einem anderen Anbieter."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Die Verbindung zu „%1$s” konnte nicht hergestellt werden. Sind Sie sicher, dass „%1$s” existiert?"],"Now logging you in":["Sie werden angemeldet"],"Registered successfully":["Registrierung erfolgreich"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Der Provider hat die Registrierung abgelehnt. Bitte überprüfen Sie Ihre Angaben auf Richtigkeit."],"Leave this groupchat":["Diesen Gruppenchat verlassen"],"Click to toggle the list of open groupchats":["Gruppenteilnehmer anzeigen"],"Open Groupchats":["Offene Gruppenchats"],"Are you sure you want to leave the groupchat %1$s?":["Möchten Sie den Gruppenchat „%1$s” wirklich verlassen?"],"Add":["Hinzufügen"],"Add a Contact":["Kontakt hinzufügen"],"This contact is busy":["Dieser Kontakt ist beschäftigt"],"This contact is online":["Dieser Kontakt ist online"],"This contact is offline":["Dieser Kontakt ist offline"],"This contact is unavailable":["Dieser Kontakt ist nicht verfügbar"],"This contact is away for an extended period":["Dieser Kontakt ist für längere Zeit abwesend"],"This contact is away":["Dieser Kontakt ist abwesend"],"Contact name":["Name des Kontakts"],"Optional nickname":["Optionaler Spitzname"],"Sorry, could not find a contact with that name":["Leider konnte kein Kontakt mit diesem Namen gefunden werden"],"This contact has already been added":["Dieser Kontakt wurde bereits hinzugefügt"],"Filter":["Filter"],"Filter by contact name":["Nach Name des Kontakts filtern"],"Filter by group name":["Nach Gruppennamen filtern"],"Filter by status":["Filtern via Status"],"Any":["Jeder"],"Unread":["Ungelesen"],"Chatty":["Gesprächsbereit"],"Extended Away":["Länger nicht anwesend"],"Click to remove %1$s as a contact":["Hier klicken, um %1$s als Kontakt zu entfernen"],"Click to accept the contact request from %1$s":["Hier klicken, um die Kontaktanfrage von %1$s zu akzeptieren"],"Click to decline the contact request from %1$s":["Hier klicken, um die Kontaktanfrage von %1$s abzulehnen"],"Click to chat with %1$s (XMPP address: %2$s)":["Klicken Sie hier, um mit %1$s zu chatten (XMPP-Adresse: %2$s)"],"Are you sure you want to decline this contact request?":["Möchten Sie diese Kontaktanfrage wirklich ablehnen?"],"Contacts":["Kontakte"],"Add a contact":["Kontakt hinzufügen"],"Re-sync your contacts":["Resynchronisieren Sie Ihre Kontakte"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{513:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"de"},"Create your account":["Erstellen Sie Ihr Konto"],"Please enter the XMPP provider to register with:":["Bitte geben Sie den XMPP-Provider ein, bei dem Sie sich anmelden möchten:"],"Already have a chat account?":["Sie haben bereits ein Chat-Konto?"],"Log in here":["Hier anmelden"],"Account Registration:":["Konto-Registrierung:"],"Register":["Registrierung"],"Choose a different provider":["Wählen Sie einen anderen Anbieter"],"Hold tight, we\'re fetching the registration form…":["Bitte warten, das Anmeldeformular wird geladen …"],"Cancel":["Abbrechen"],"The connection has dropped, attempting to reconnect.":["Die Verbindung ist abgebrochen und es wird versucht, die Verbindung wiederherzustellen."],"An error occurred while connecting to the chat server.":["Beim Verbinden mit dem Chatserver ist ein Fehler aufgetreten."],"Your XMPP address and/or password is incorrect. Please try again.":["Ihre XMPP-Adresse und/oder Ihr Kennwort sind falsch. Bitte versuchen Sie es noch einmal."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Leider konnten wir keine Verbindung zum XMPP-Host mit der Domain %1$s herstellen"],"The XMPP server did not offer a supported authentication mechanism":["Der XMPP-Server hat keinen unterstützten Authentifizierungsmechanismus angeboten"],"Undecryptable OMEMO message":["Unentschlüsselbare OMEMO-Nachricht"],"Sorry, could not determine upload URL.":["Leider konnte die Upload-URL nicht ermittelt werden."],"Sorry, could not determine file upload URL.":["Konnte die Hochlade-URL leider nicht bestimmen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Leider konnte die Datei nicht hochgeladen werden. Der Server antwortete: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Leider konnte Ihre Datei nicht erfolgreich hochgeladen werden."],"You\'re not allowed to retract your message.":["Sie dürfen Ihre Nachricht nicht widerrufen."],"Sorry, an error occurred while trying to retract your message.":["Es ist leider ein Fehler aufgetreten, als Sie versucht haben, Ihre Nachricht zu widerrufen."],"You\'re not allowed to send a message.":["Sie dürfen keine Nachricht senden."],"Sorry, an error occurred while trying to send your message.":["Es ist leider ein Fehler beim Senden Ihrer Nachricht aufgetreten."],"Sorry, looks like file upload is not supported by your server.":["Scheint als werde das Hochladen von Dateien auf dem Server nicht unterstützt."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Die Größe Ihrer Datei, %1$s, überschreitet das erlaubte Maximum vom Server, welches bei %2$s liegt."],"Smileys and emotions":["Smileys und Emotionen"],"People":["Menschen"],"Activities":["Aktivitäten"],"Travel":["Reisen"],"Objects":["Objekte"],"Animals and nature":["Tiere und Natur"],"Food and drink":["Essen und Trinken"],"Symbols":["Symbole"],"Flags":["Flaggen"],"Stickers":["Aufkleber"],"This groupchat is not anonymous":["Dieser Gruppenchat ist nicht anonym"],"This groupchat now shows unavailable members":["Dieser Gruppenchat zeigt nicht verfügbare Mitglieder an"],"This groupchat does not show unavailable members":["Dieser Gruppenchat zeigt keine nicht verfügbaren Mitglieder an"],"The groupchat configuration has changed":["Die Gruppenchatkonfiguration hat sich geändert"],"Groupchat logging is now enabled":["Gruppenchat wird ab jetzt protokolliert"],"Groupchat logging is now disabled":["Gruppenchat wird nicht mehr protokolliert"],"This groupchat is now no longer anonymous":["Dieser Gruppenchat ist jetzt nicht mehr anonym"],"This groupchat is now semi-anonymous":["Dieser Gruppenchat ist jetzt nur teilweise anonym"],"This groupchat is now fully-anonymous":["Dieser Gruppenchat ist jetzt vollständig anonym"],"A new groupchat has been created":["Ein neuer Gruppenchat wurde erstellt"],"Your nickname has been automatically set to %1$s":["Ihr Spitzname wurde automatisch geändert zu: %1$s"],"Your nickname has been changed to %1$s":["Ihr Spitzname wurde geändert zu: %1$s"],"You have been banned from this groupchat":["Sie wurden aus diesem Gruppenchat entfernt"],"You have exited this groupchat due to a technical problem":["Sie haben diesen Gruppenchat aufgrund eines technischen Problems verlassen"],"You have been kicked from this groupchat":["Sie wurden aus diesem Gruppenchat hinausgeworfen"],"You have been removed from this groupchat because of an affiliation change":["Sie wurden aus diesem Gruppenchat wegen einer Zugehörigkeitsänderung entfernt"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sie wurden aus diesem Gruppenchat ausgeschlossen, da der Gruppenchat jetzt nur noch Mitglieder erlaubt und Sie kein Mitglied sind"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sie wurden aus dem Gruppenchat entfernt, weil der Hostingservice heruntergefahren wurde"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Ihr Widerruf wurde nicht zugestellt, weil Sie nicht im Gruppenchat vertreten sind."],"Your message was not delivered because you weren\'t allowed to send it.":["Ihre Nachricht wurde nicht zugestellt, weil Sie sie nicht abschicken durften."],"Your message was not delivered because you\'re not present in the groupchat.":["Ihre Nachricht wurde nicht zugestellt, weil Sie im Gruppenchat nicht vertreten sind."],"A timeout happened while while trying to retract your message.":["Beim Versuch, Ihre Nachricht zurückzuziehen, ist eine Zeitüberschreitung aufgetreten."],"You\'re not allowed to register yourself in this groupchat.":["Sie dürfen nicht diesem Gruppenchat beitreten."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Es ist Ihnen nicht erlaubt diesem Raum beizutreten da sie kein Mitglied sind."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Registrierung fehlgeschlagen, dieser Raum unterstützt keine Registrierung von Spitznamen."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Spitzname-Registrierung fehlgeschlagen, falsche Informationen eingetragen."],"Topic set by %1$s":["Thema von %1$s festgelegt"],"Topic cleared by %1$s":["Thema wurde durch %1$s bereinigt"],"%1$s has been banned by %2$s":["%1$s wurde von %2$s verbannt"],"%1$s has been banned":["%1$s wurde verbannt"],"%1$s\'s nickname has changed":["Der Spitzname von %1$s hat sich geändert"],"%1$s has been kicked out by %2$s":["%1$s wurde von %2$s hinausgeworfen"],"%1$s has been kicked out":["%1$s wurde hinausgeworfen"],"%1$s has been removed because of an affiliation change":["%1$s wurde wegen einer Zugehörigkeitsänderung entfernt"],"%1$s has been removed for not being a member":["%1$s ist kein Mitglied und wurde daher entfernt"],"%1$s is no longer an admin of this groupchat":["%1$s ist nicht mehr ein Admin dieses Gruppenchats"],"%1$s is no longer an owner of this groupchat":["%1$s ist nicht mehr Eigentümer dieses Gruppenchats"],"%1$s is no longer banned from this groupchat":["%1$s ist in diesem Gruppenchat nicht mehr gesperrt"],"%1$s is no longer a member of this groupchat":["%1$s ist nicht mehr ein Mitglied dieses Gruppenchats"],"%1$s is now a member of this groupchat":["%1$s ist nun Mitglied dieses Gruppenchats"],"%1$s is now an %2$s of this groupchat":["%1$s ist nun ein %2$s dieses Gruppenchats"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Der gewählte Spitzname ist reserviert oder derzeit in Gebrauch. Bitte wählen Sie einen Anderen."],"Password incorrect":["Passwort falsch"],"You are not on the member list of this groupchat.":["Sie sind nicht auf der Mitgliederliste dieses Gruppenchats."],"You have been banned from this groupchat.":["Sie wurden aus diesem Gruppenchat entfernt."],"You are not allowed to create new groupchats.":["Es ist Ihnen nicht erlaubt neue Räume anzulegen."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Ihr Spitzname entspricht nicht den Richtlinien dieses Gruppenchats."],"This groupchat does not (yet) exist.":["Dieser Gruppenchat existiert (noch) nicht."],"This groupchat has reached its maximum number of participants.":["Maximale Anzahl an Teilnehmern für diesen Gruppenchat erreicht."],"Remote server not found":["Server wurde nicht gefunden"],"The explanation given is: \\"%1$s\\".":["Angegebene Grund: „%1$s”."],"%1$s has invited you to join a groupchat: %2$s":["%1$s hat Sie in den Gruppenchat „%2$s” eingeladen"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s hat Sie in den Gruppenchat „%2$s” eingeladen. Begründung: „%3$s”"],"Error":["Fehler"],"Sorry, something went wrong while trying to save your bookmark.":["Leider konnte das Lesezeichen nicht gespeichert werden."],"Timeout Error":["Timeout-Fehler"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Der Server hat Ihre Lesezeichen nicht innerhalb der zulässigen Zeit zurückgegeben. Sie können die Seite neu laden, um sie erneut anzufordern."],"Timeout while trying to fetch archived messages.":["Zeitüberschreitung beim Abrufen archivierter Nachrichten."],"An error occurred while querying for archived messages.":["Beim Abfragen der archivierten Nachrichten ist ein Fehler aufgetreten."],"My contacts":["Meine Kontakte"],"Pending contacts":["Unbestätigte Kontakte"],"Contact requests":["Kontaktanfragen"],"Ungrouped":["Ungruppiert"],"New messages":["Neue Nachrichten"],"Sorry, there was an error while trying to add %1$s as a contact.":["Leider gab es einen Fehler beim Versuch, %1$s als Kontakt hinzuzufügen."],"This client does not allow presence subscriptions":["Dieser Client erlaubt keine Anwesenheitsabonnements"],"Click to hide these contacts":["Hier klicken, um diese Kontakte auszublenden"],"Unbookmark this groupchat":["Lesezeichen für diesen Gruppenchat entfernen"],"Click to open this groupchat":["Hier klicken, um diesen Gruppenchat zu öffnen"],"Click to toggle the bookmarks list":["Liste der Lesezeichen umschalten"],"Bookmarks":["Lesezeichen"],"Bookmark this groupchat":["Lesezeichen für diesen Gruppenchat speichern"],"Would you like this groupchat to be automatically joined upon startup?":["Beim Anmelden diesem Gruppenchat automatisch beitreten?"],"The name for this bookmark:":["Name des Lesezeichens:"],"What should your nickname for this groupchat be?":["Welcher Spitzname soll für diesen Gruppenchat verwendet werden?"],"Save":["Speichern"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Möchten Sie das Lesezeichen „%1$s” wirklich löschen?"],"Unbookmark":["Lesezeichen entfernen"],"Bookmark":["Lesezeichen"],"Close":["Schließen"],"OK":["OK"],"Image: ":["Bild: "],"Download audio file \\"%1$s\\"":["Audiodatei \\"%1$s\\" herunterladen"],"Download image file \\"%1$s\\"":["Bild \\"%1$s\\" herunterladen"],"Download file \\"%1$s\\"":["Datei \\"%1$s\\" herunterladen"],"Cancel Editing":["Bearbeitung abbrechen"],"Edit":["Bearbeiten"],"Retract":["Widerrufen"],"Message versions":["Nachrichtenarchivierung"],"Retry":["Wiederholen"],"Uploading file:":["Lade Datei hoch:"],"%1$s has removed this message":["%1$s hat diese Nachricht entfernt"],"This message has been edited":["Diese Nachricht wurde geändert"],"Show more":["Mehr anzeigen"],"Show less":["Weniger anzeigen"],"No message history available.":["Kein Nachrichtenverlauf vorhanden."],"Search results":["Suchergebnisse"],"Search":["Suchen"],"Insert emojis":["Emojis einfügen"],"Send the message":["Nachricht senden"],"Start a call":["Beginne eine Unterhaltung"],"Message characters remaining":["Verbleibende Zeichen"],"Hide participants":["Teilnehmer ausblenden"],"Show participants":["Teilnehmer anzeigen"],"Choose a file to send":["Datei versenden"],"Click to write as a normal (non-spoiler) message":["Hier klicken, um Statusnachricht zu ändern (ohne Spoiler)"],"Click to write your message as a spoiler":["Hier klicken, um die Nachricht als Spoiler zu kennzeichnen"],"The User\'s Profile Image":["Benutzerprofilbild"],"Trusted":["Vertrauenswürdig"],"Untrusted":["Nicht vertrauenswürdig"],"OMEMO Fingerprints":["OMEMO Fingerabdrücke"],"No OMEMO-enabled devices found":["Keine OMEMO-fähigen Geräte gefunden"],"Remove as contact":["Kontakt entfernen"],"XMPP Address":["XMPP-Adresse"],"Email":["E-Mail"],"Full Name":["Name"],"Nickname":["Spitzname"],"Refresh":["Aktualisieren"],"Role":["Rolle"],"URL":["URL"],"%1$s is typing":["%1$s schreibt"],"%1$s has stopped typing":["%1$s tippt nicht mehr"],"%1$s has gone away":["%1$s ist jetzt abwesend"],"Remove messages":["Nachrichten entfernen"],"Close this chat":["Diesen Chat schließen"],"Write in the third person":["In der dritten Person schreiben"],"Show this menu":["Dieses Menü anzeigen"],"Hidden message":["Versteckte Nachricht"],"Message":["Nachricht"],"Optional hint":["Optionaler Hinweis"],"You have unread messages":["Sie haben ungelesene Nachrichten"],"Details":["Details"],"See more information about this person":["Weitere Informationen über diese Person anzeigen"],"Close and end this conversation":["Schließen und beenden Sie dieses Gespräch"],"Sorry, the connection has been lost, and your message could not be sent":["Die Verbindung wurde leider unterbrochen und Ihre Nachricht konnte nicht gesendet werden"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Beachten Sie, dass andere XMPP/Jabber-Clients (und Server) möglicherweise noch keinen Widerruf unterstützen und dass diese Nachricht möglicherweise nicht überall entfernt wird."],"Are you sure you want to retract this message?":["Sind Sie sicher, dass Sie diese Nachricht widerrufen wollen?"],"Confirm":["Bestätigen"],"You have an unsent message which will be lost if you continue. Are you sure?":["Sie haben eine nicht gesendete Nachricht, die verloren geht, wenn Sie fortfahren. Sind Sie sicher?"],"Are you sure you want to clear the messages from this conversation?":["Sind Sie sicher, dass Sie alle Nachrichten dieses Chats löschen möchten?"],"%1$s has gone offline":["%1$s hat sich abgemeldet"],"%1$s is busy":["%1$s ist beschäftigt"],"%1$s is online":["%1$s ist jetzt online"],"Sorry, something went wrong while trying to refresh":["Leider ist bei der Aktualisierung etwas schief gelaufen"],"Are you sure you want to remove this contact?":["Möchten Sie diesen Kontakt wirklich entfernen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Leider gab es einen Fehler beim Versuch, %1$s als Kontakt zu entfernen."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Um die Leistung zu verbessern, werden Ihre Daten in diesem Browser zwischengespeichert. Deaktivieren Sie dieses Kontrollkästchen, wenn es sich um einen öffentlichen Computer handelt oder wenn Sie möchten, dass Ihre Daten beim Abmelden gelöscht werden. Es ist wichtig, dass Sie sich explizit abmelden, da sonst möglicherweise nicht alle zwischengespeicherten Daten gelöscht werden. Bitte beachten Sie, dass bei Verwendung eines nicht vertrauenswürdigen Geräts die OMEMO-Verschlüsselung NICHT verfügbar ist."],"This is a trusted device":["Diesem Gerät wird vertraut"],"Password":["Passwort"],"Create an account":["Konto erstellen"],"Don\'t have a chat account?":["Sie haben noch kein Chat-Konto?"],"Log in":["Anmelden"],"Disconnected":["Getrennt"],"Click here to log in anonymously":["Hier klicken, um sich anonym anzumelden"],"Username":["Benutzername"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["Bitte eine gültige XMPP-Adresse eingeben"],"Chat Contacts":["Kontakte"],"Toggle chat":["Chat ein-/ausblenden"],"Click to restore this chat":["Hier klicken, um diesen Chat wiederherzustellen"],"Minimized":["Minimiert"],"Minimize":["Minimieren"],"Minimize this chat":["Diesen Chat minimieren"],"Minimize this groupchat":["Diesen Gruppenchat minimieren"],"This user is a moderator.":["Dieser Benutzer ist ein Moderator."],"This user can send messages in this groupchat.":["Dieser Teilnehmer kann Nachrichten in diesem Gruppenchat versenden."],"This user can NOT send messages in this groupchat.":["Dieser Teilnehmer kann keine Nachrichten in diesem Gruppenchat versenden."],"Owner":["Eigentümer"],"Admin":["Administrator"],"Member":["Mitglieder"],"Moderator":["Moderator"],"Visitor":["Besucher"],"Click to mention %1$s in your message.":["Klicken Sie hier, um %1$s in Ihrer Nachricht zu erwähnen."],"Participants":["Teilnehmer"],"This field is required":["Dieses Feld ist ein Pflichtfeld"],"Join":["Betreten"],"Enter a new Groupchat":["Einem neuen Gruppenchat beitreten"],"name@conference.example.org":["name@conference.beispiel.org"],"Groupchat name":["Gruppenchatname"],"Groupchat address":["Gruppenchat-Adresse"],"Groupchat id is invalid.":["Gruppenchat-ID ist ungültig."],"Invite":["Einladen"],"Invite someone to this groupchat":["Laden Sie jemanden zu diesem Gruppenchat ein"],"user@example.org":["benutzer@beispiel.org"],"Optional reason for the invitation":["Optionaler Grund für die Einladung"],"Show groupchats":["Gruppen"],"Server address":["Server"],"Show more information on this groupchat":["Zeige mehr Informationen über diesen Gruppenchat"],"Query for Groupchats":["Gruppenchats abfragen"],"Description:":["Beschreibung:"],"Groupchat Address (JID):":["Gruppenchat-Adresse (JID):"],"Participants:":["Teilnehmer:"],"Features:":["Funktionen:"],"Requires authentication":["Authentifizierung erforderlich"],"Hidden":["Ausblenden"],"Requires an invitation":["Einladung erforderlich"],"Moderated":["Moderiert"],"Non-anonymous":["Nicht anonym"],"Open":["Offen"],"Permanent":["Dauerhafter Raum"],"Public":["Öffentlich"],"Semi-anonymous":["Teilweise anonym"],"Temporary":["Vorübergehend"],"Unmoderated":["Nicht moderiert"],"conference.example.org":["konferenz.beispiel.org"],"Groupchats found":["Gruppenchats gefunden"],"No groupchats found":["Keine Räume gefunden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatoren sind privilegierte Benutzer, die die Rollen anderer Benutzer ändern können (außer denen mit Administrator- oder Eigentümerzugehörigkeit)."],"The default role, implies that you can read and write messages.":["Die Standardrolle bedeutet, dass Sie Nachrichten lesen und schreiben können."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besucher dürfen keine Nachrichten in einem moderierten Mehrbenutzer-Chat schreiben."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Besitzer ist die höchste Zugehörigkeit. Besitzer können Rollen und Zugehörigkeiten aller anderen Benutzer ändern."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administrator ist die zweithöchste Zugehörigkeit. Administratoren können Rollen und Zugehörigkeiten aller anderen Benutzer mit Ausnahme der Eigentümer ändern."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Sperren Sie Benutzer, indem Sie ihre Zugehörigkeit zu ausgeschlossenen Personen ändern."],"Change role":["Rolle ändern"],"New Role":["Neue Rolle"],"Reason":["Grund"],"Change affiliation":["Zugehörigkeit ändern"],"New affiliation":["Neue Zugehörigkeit"],"Affiliation":["Zugehörigkeit"],"Moderator Tools":["Moderatoren-Tools"],"No users with that affiliation found.":["Keine Benutzer mit dieser Zugehörigkeit gefunden."],"No users with that role found.":["Keine Nutzer mit dieser Rolle gefunden."],"Type here to filter the search results":["Hier Filter für Suchergebnisse eingeben"],"Show users":["Nutzer anzeigen"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rollen werden den Benutzern zugewiesen, um ihnen in einem Mehrbenutzer-Chat bestimmte Fähigkeiten zu gewähren oder zu verweigern. Sie werden entweder explizit oder implizit als Teil einer Zugehörigkeit zugewiesen. Eine Rolle, die nicht auf eine Zugehörigkeit zurückzuführen ist, ist nur für die Dauer der Sitzung des Benutzers gültig."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Eine Zugehörigkeit ist ein langlebiger Anspruch, der typischerweise eine bestimmte Rolle beinhaltet und Privilegien und Verantwortlichkeiten gewährt. Beispielsweise haben Administratoren und Eigentümer automatisch die Moderatorenrolle."],"Timeout error while trying to set the affiliation":["Zeitüberschreitungsfehler beim Versuch, die Zugehörigkeit festzulegen"],"Sorry, you\'re not allowed to make that change":["Es tut uns leid, Sie dürfen diese Änderung nicht vornehmen"],"Sorry, something went wrong while trying to set the affiliation":["Leider ist bei der Änderung der Zugehörigkeiten etwas schief gelaufen"],"Affiliation changed":["Zugehörigkeit geändert"],"Role changed":["Rolle geändert"],"You\'re not allowed to make that change":["Du darfst diese Änderung nicht vornehmen"],"Sorry, something went wrong while trying to set the role":["Leider ist bei der Festlegung der Rolle etwas schief gelaufen"],"Topic":["Thema"],"Topic author":["Autor des Themas"],"Groupchat address (JID)":["Gruppenchat-Adresse (JID)"],"Message archiving":["Nachrichtenarchivierung"],"Messages are archived on the server":["Nachrichten werden auf dem Server archiviert"],"Description":["Beschreibung"],"Features":["Funktionen"],"This groupchat is not publicly searchable":["Dieser Gruppenchat ist nicht öffentlich auffindbar"],"This groupchat is restricted to members only":["Dieser Gruppenchat ist nur für Mitglieder zugänglich"],"Members only":["Nur Mitglieder"],"Participants entering this groupchat need to request permission to write":["Teilnehmer, die diesem Gruppenchat beitreten, müssen die Erlaubnis zum Schreiben anfordern"],"Name":["Name"],"This groupchat does not require a password upon entry":["Dieser Gruppenchat erfordert kein Passwort"],"No password required":["Kein Passwort benötigt"],"Not anonymous":["Nicht anonym"],"All other groupchat participants can see your XMPP address":["Jeder in dem Gruppenchat kann Ihre XMPP-Adresse sehen"],"Not moderated":["Nicht moderiert"],"Participants entering this groupchat can write right away":["Teilnehmer, die diesem Gruppenchat beitreten, können sofort schreiben"],"Online users":["Online"],"Anyone can join this groupchat":["Jeder kann diesem Gruppenchat beitreten"],"This groupchat requires a password before entry":["Dieser Gruppenchat erfordert ein Passwort"],"Password protected":["Passwortgeschützt"],"Persistent":["Dauerhaft"],"This groupchat persists even if it\'s unoccupied":["Dieser Gruppenchat bleibt bestehen, auch wenn er nicht besetzt ist"],"Only moderators can see your XMPP address":["Nur Moderatoren können Ihre XMPP-Adresse sehen"],"This groupchat will disappear once the last person leaves":["Dieser Gruppenchat verschwindet, sobald die letzte Person den Gruppenchat verlässt"],"This groupchat is publicly searchable":["Dieser Gruppenchat ist öffentlich auffindbar"],"Groupchat info for %1$s":["Gruppenchat-Benachrichtigung für %1$s"],"You\'re not allowed to send messages in this room":["Sie dürfen in diesem Gruppenchat keine Nachrichten senden"],"The conversation has moved. Click below to enter.":["Das Gespräch wurde verschoben. Klicken Sie unten, um einzutreten."],"This groupchat no longer exists":["Dieser Gruppenchat existiert nicht mehr"],"Hide the groupchat topic":["Gruppen-Chatraum verbergen"],"This groupchat is bookmarked":["Dieser Raum ist als Lesezechen gekennzeichnet"],"Enter groupchat":["Gruppenchat beitreten"],"Choose a nickname to enter":["Wählen Sie einen Spitznamen für die Eingabe"],"Please choose your nickname":["Wählen Sie Ihren Spitznamen"],"This groupchat requires a password":["Dieser Gruppenchat erfordert ein Passwort"],"Password: ":["Passwort: "],"Submit":["Senden"],"%1$s has entered the groupchat":["%1$s ist dem Gruppenchat beigetreten"],"%1$s has left the groupchat":["%1$s hat den Gruppenchat verlassen"],"%1$s is now a moderator":["%1$s ist jetzt ein Moderator"],"%1$s is no longer a moderator":["%1$s ist kein Moderator mehr"],"%1$s has been given a voice":["%1$s darf nun wieder schreiben"],"%1$s has been muted":["%1$s wurde das Schreibrecht entzogen"],"%1$s and %2$s":["%1$s und %2$s"],"%1$s are typing":["%1$s tippt"],"%1$s have stopped typing":["%1$s tippt nicht mehr"],"%1$s have gone away":["%1$s ist jetzt abwesend"],"%1$s have entered the groupchat":["%1$s ist dem Gruppenchat beigetreten"],"%1$s have left the groupchat":["%1$s hat den Gruppenchat verlassen"],"%1$s are now moderators":["%1$s sind jetzt Moderatoren"],"%1$s are no longer moderators":["%1$s sind keine Moderatoren mehr"],"%1$s have been given voices":["%1$s dürfen nun wieder schreiben"],"%1$s have been muted":["%1$s wurde das Schreibrecht entzogen"],"Change user\'s affiliation to admin":["Zugehörigkeit des Benutzers zu Administrator ändern"],"Ban user by changing their affiliation to outcast":["Sperren Sie Benutzer, indem Sie ihre Zugehörigkeit zu ausgeschlossenen Personen ändern"],"Clear the chat area":["Löschen des Chatbereichs"],"Close this groupchat":["Dieses Gruppenchat schließen"],"Change user role to participant":["Rolle zu Teilnehmer ändern"],"Remove this groupchat":["Diesen Gruppenchat entfernen"],"Kick user from groupchat":["Mitglied aus diesem Gruppenchat entfernen"],"Write in 3rd person":["In der dritten Person schreiben"],"Grant membership to a user":["Einem Benutzer die Mitgliedschaft gewähren"],"Opens up the moderator tools GUI":["Öffnet die Benutzeroberfläche der Moderatorentools"],"Remove user\'s ability to post messages":["Die Möglichkeit des Benutzers, Nachrichten zu senden, entfernen"],"Change your nickname":["Eigenen Spitznamen ändern"],"Grant moderator role to user":["Benutzer Moderatorenrechte gewähren"],"Grant ownership of this groupchat":["Besitzrechte an diesem Gruppenchat vergeben"],"Register your nickname":["Registrieren Sie Ihren Spitznamen"],"Revoke the user\'s current affiliation":["Widerrufen der aktuellen Zugehörigkeit des Benutzers"],"Set groupchat subject":["Thema des Gruppenchats festlegen"],"Set groupchat subject (alias for /subject)":["Gruppenchatthema (alias für /subject) festlegen"],"Allow muted user to post messages":["Stummgeschaltetem Benutzer erlauben Nachrichten zu senden"],"You are about to retract this message.":["Sie sind dabei, diese Nachricht zu widerrufen."],"You may optionally include a message, explaining the reason for the retraction.":["Sie können optional eine Nachricht mit einer Erklärung und Grund für den Widerruf einfügen."],"Message Retraction":["Nachricht Widerruf"],"Optional reason":["Optionaler Grund"],"Sorry, you\'re not allowed to retract this message":["Es tut uns leid, Sie dürfen diese Nachricht nicht widerrufen"],"A timeout occurred while trying to retract the message":["Eine Zeitüberschreitung ist beim Versuch aufgetreten, die Nachricht zu widerrufen"],"Sorry, you\'re not allowed to retract this message.":["Es tut uns leid, Sie dürfen diese Nachricht nicht widerrufen."],"Show more information about this groupchat":["Weitere Informationen zu diesem Gruppenchat anzeigen"],"Configure":["Konfigurieren"],"Configure this groupchat":["Diesen Gruppenchat konfigurieren"],"Invite someone to join this groupchat":["Laden Sie jemanden zu diesem Gruppenchat ein"],"Show topic":["Thema anzeigen"],"Hide topic":["Thema ausblenden"],"Show the topic message in the heading":["Thema in der Überschrift anzeigen"],"Hide the topic in the heading":["Thema in der Überschrift ausblenden"],"Moderate":["Moderiert"],"Moderate this groupchat":["Diesen Gruppenchat moderieren"],"Destroy":["Gruppenchat zerstören"],"Leave":["Verlassen"],"Leave and close this groupchat":["Verlassen und diesen Gruppenchat schließen"],"Are you sure you want to leave this groupchat?":["Sind Sie sicher, dass Sie diesen Gruppenchat verlassen wollen?"],"Hide the list of participants":["Teilnehmerliste ausblenden"],"Forbidden: you do not have the necessary role in order to do that.":["Verboten: Sie haben nicht die nötigen Rechte, um das zu tun."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Verboten: Sie haben nicht die nötige Zugehörigkeit, um das zu tun."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fehler: Das „%1$s”-Kommando benötigt zwei Argumente: Den Spitznamen und einen Grund."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fehler: Konnte keinen Groupchat-Teilnehmer anhand ihrer Kriterien finden"],"Error: found multiple groupchat participant based on your arguments":["Fehler: Mehrere Gruppenchat-Teilnehmer basierend auf ihren Kriterien gefunden"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Konnte keinen Teilnehmer mit diesem Spitznamen finden. Möglicherweise haben sie den Gruppenchat verlassen."],"Sorry, an error happened while running the command.":["Entschuldigung, bei der Ausführung des Befehls ist ein Fehler aufgetreten."],"Check your browser\'s developer console for details.":["Einzelheiten finden Sie in der Entwicklerkonsole Ihres Browsers."],"Are you sure you want to destroy this groupchat?":["Möchten Sie den diesen Gruppenchat wirklich zerstören?"],"Please enter the XMPP address of this groupchat to confirm":["Bitte geben Sie die XMPP-Adresse dieses Gruppenchats zur Bestätigung ein"],"name@example.org":["benutzer@beispiel.org"],"Optional reason for destroying this groupchat":["Optionaler Grund für die Zerstörung dieses Gruppenchats"],"Optional XMPP address for a new groupchat that replaces this one":["Optionale XMPP-Adresse für einen neuen Gruppenchat, der diese ersetzt"],"replacement@example.org":["ersatz@beispiel.org"],"Your nickname is \\"%1$s\\"":["Ihr Spitzname ist \\"%1$s\\""],"Error: invalid number of arguments":["Fehler: ungültige Anzahl von Argumenten"],"This action was done by %1$s.":["Diese Aktion wurde durch %1$s ausgeführt."],"The reason given is: \\"%1$s\\".":["Angegebener Grund: „%1$s”."],"Groupchats":["Gruppenchat"],"Add a new groupchat":["Neuen Gruppenchat hinzufügen"],"Query for groupchats":["Gruppenchats abfragen"],"Sorry, an error occurred while trying to submit the config form.":["Beim Senden des Konfigurationsformulars ist leider ein Fehler aufgetreten."],"Close these announcements":["Ankündigungen schließen"],"Announcements":["Ankündigungen"],"Click to open this server message":["Klicken Sie hier, um diese Servernachricht zu öffnen"],"Notification from %1$s":["Benachrichtigung von %1$s"],"%1$s says":["%1$s sagt"],"Encrypted message received":["Verschlüsselte Nachricht empfangen"],"has gone offline":["hat sich abgemeldet"],"has gone away":["ist jetzt abwesend"],"is busy":["ist beschäftigt"],"has come online":["kam online"],"wants to be your contact":["möchte Ihr Kontakt sein"],"Hide":["Ausblenden"],"Execute":["Ausführen"],"On which entity do you want to run commands?":["Auf welcher Instanz wollen Sie Befehle ausführen?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Bestimmte XMPP-Dienste und Instanzen erlauben es privilegierten Benutzern, Ad-hoc-Befehle darauf auszuführen."],"Commands found":["Befehle gefunden"],"List available commands":["Verfügbare Befehle auflisten"],"No commands found":["Keine Befehle gefunden"],"Sorry, an error occurred while looking for commands on that entity.":["Entschuldigung, bei der Suche nach Befehlen für diese Instanz ist ein Fehler aufgetreten."],"The specified entity doesn\'t support ad-hoc commands":["Die angegebene Instanz unterstützt keine Ad-hoc-Befehle"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Es ist leider ein Fehler beim Ausführen des Befehls aufgetreten. Weitere Informationen finden Sie in der Entwicklerkonsole"],"About":["Über"],"Commands":["Befehle"],"Settings":["Einstellungen"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s XMPP Chat Client, der Ihnen von %3$s Opkode %2$s zur Verfügung gestellt wird"],"%1$s Translate %2$s it into your own language":["%1$s Übersetzen Sie %2$s es in Ihre eigene Sprache"],"Log out":["Abmelden"],"Click to change your chat status":["Hier klicken, um Ihren Status zu ändern"],"Show details about this chat client":["Details zu diesem Chat-Client anzeigen"],"Your avatar image":["Dein Avatarbild"],"Checkbox for selecting the following fingerprint":["Kontrollkästchen zur Auswahl des folgenden Fingerabdrucks"],"Device without a fingerprint":["Gerät ohne Fingerabdruck"],"Checkbox for selecting the following device":["Kontrollkästchen zur Auswahl des folgenden Geräts"],"Other OMEMO-enabled devices":["Andere OMEMO-fähige Geräte"],"Checkbox to select fingerprints of all other OMEMO devices":["Kontrollkästchen zur Auswahl der Fingerabdrücke aller anderen OMEMO-Geräte"],"Remove checked devices and close":["Markierte Geräte entfernen und schließen"],"Select all":["Alle auswählen"],"This device\'s OMEMO fingerprint":["OMEMO-Fingerabdruck dieses Geräts"],"Generate new keys and fingerprint":["Neuer Schlüssel und Fingerabdrücke generieren"],"Your Profile":["Dein Profil"],"XMPP Address (JID)":["XMPP/Jabber-ID (JID)"],"Save and close":["Speichern und schließen"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Benutze Kommas um die Rollen zu separieren. Die Rollen erscheinen neben deinem Namen."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Leider ist beim Speichern deiner Profildaten ein Fehler aufgetreten."],"You can check your browser\'s developer console for any error output.":["Schau in die Entwicklerkonsole des Browsers um mögliche Fehlerausgaben zu sehen."],"Away":["Abwesend"],"Busy":["Beschäftigt"],"Custom status":["Statusnachricht"],"Offline":["Abgemeldet"],"Online":["Online"],"Away for long":["Lange abwesend"],"Change chat status":["Hier klicken, um Ihren Status zu ändern"],"Personal status message":["Persönliche Statusnachricht"],"I am %1$s":["Ich bin %1$s"],"Are you sure you want to log out?":["Möchten Sie sich wirklich abmelden?"],"online":["online"],"busy":["beschäftigt"],"away for long":["länger abwesend"],"away":["abwesend"],"offline":["abgemeldet"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Leider konnte eine empfangene OMEMO-Nachricht aufgrund eines Fehlers nicht entschlüsselt werden."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Leider konnte eine empfangene OMEMO-Nachricht aufgrund der fehlenden JID des Nutzers nicht entschlüsselt werden."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s scheint keinen Client zu haben, der OMEMO unterstützt. Ein verschlüsselter Chat wird in diesem Gruppenchat nicht mehr möglich sein."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["In diesem Gruppenchat kann keine Ende-zu-Ende-Verschlüsselung verwendet werden, entweder der Gruppenchat hat eine gewisse Anonymität oder nicht alle Teilnehmer unterstützen OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Ende-zu-Ende Verschlüsselung konnte nicht verwendet werden, da %1$s einen Client verwendet, der OMEMO nicht unterstützt."],"Messages are being sent in plaintext":["Nachrichten werden im Klartext gesendet"],"Messages are sent encrypted":["Nachrichten werden verschlüsselt gesendet"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Dieser Gruppenchat muss nur für Mitglieder zugänglich und nicht anonym sein, um OMEMO-verschlüsselte Nachrichten zu unterstützen"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Leider können wir keine verschlüsselte Nachricht senden, da %1$s erfordert, dass Sie für ihre Teilnahme angemeldet sind, um ihre OMEMO-Informationen zu sehen"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Leider können wir keine verschlüsselte Nachricht senden, da der Remote-Server für %1$s nicht gefunden werden konnte"],"Unable to send an encrypted message due to an unexpected error.":["Die verschlüsselte Nachricht konnte aufgrund eines unerwarteten Fehlers nicht versendet werden."],"Sorry, an error occurred while trying to remove the devices.":["Leider ist beim Versuch, die Geräte zu entfernen, ein Fehler aufgetreten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sind Sie sicher, dass Sie neue OMEMO-Schlüssel erzeugen möchten? Dann werden Ihre alten Schlüssel entfernt und alle zuvor verschlüsselten Nachrichten sind auf diesem Gerät nicht mehr entschlüsselbar."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Leider können wir keine Geräte finden, an die wir eine OMEMO-verschlüsselte Nachricht senden können."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dies ist eine OMEMO-verschlüsselte Nachricht, die Ihr Client nicht zu unterstützen scheint. Weitere Informationen finden Sie unter https://conversations.im/omemo"]," e.g. conversejs.org":[" z. B. conversejs.org"],"Fetch registration form":["Anmeldeformular wird abgerufen"],"Tip: A list of public XMPP providers is available":["Tipp: Eine Liste öffentlicher Provider ist verfügbar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Leider können wir keine Verbindung zu dem von Ihnen gewählten Provider herstellen."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Leider unterstützt der angegebene Anbieter die keine Benutzerregistrierung. Bitte versuche es bei einem anderen Anbieter."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Die Verbindung zu „%1$s” konnte nicht hergestellt werden. Sind Sie sicher, dass „%1$s” existiert?"],"Now logging you in":["Sie werden angemeldet"],"Registered successfully":["Registrierung erfolgreich"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Der Provider hat die Registrierung abgelehnt. Bitte überprüfen Sie Ihre Angaben auf Richtigkeit."],"Leave this groupchat":["Diesen Gruppenchat verlassen"],"Click to toggle the list of open groupchats":["Gruppenteilnehmer anzeigen"],"Open Groupchats":["Offene Gruppenchats"],"Are you sure you want to leave the groupchat %1$s?":["Möchten Sie den Gruppenchat „%1$s” wirklich verlassen?"],"Add":["Hinzufügen"],"Add a Contact":["Kontakt hinzufügen"],"This contact is busy":["Dieser Kontakt ist beschäftigt"],"This contact is online":["Dieser Kontakt ist online"],"This contact is offline":["Dieser Kontakt ist offline"],"This contact is unavailable":["Dieser Kontakt ist nicht verfügbar"],"This contact is away for an extended period":["Dieser Kontakt ist für längere Zeit abwesend"],"This contact is away":["Dieser Kontakt ist abwesend"],"Contact name":["Name des Kontakts"],"Optional nickname":["Optionaler Spitzname"],"Sorry, could not find a contact with that name":["Leider konnte kein Kontakt mit diesem Namen gefunden werden"],"This contact has already been added":["Dieser Kontakt wurde bereits hinzugefügt"],"Filter":["Filter"],"Filter by contact name":["Nach Name des Kontakts filtern"],"Filter by group name":["Nach Gruppennamen filtern"],"Filter by status":["Filtern via Status"],"Any":["Jeder"],"Unread":["Ungelesen"],"Chatty":["Gesprächsbereit"],"Extended Away":["Länger nicht anwesend"],"Click to remove %1$s as a contact":["Hier klicken, um %1$s als Kontakt zu entfernen"],"Click to accept the contact request from %1$s":["Hier klicken, um die Kontaktanfrage von %1$s zu akzeptieren"],"Click to decline the contact request from %1$s":["Hier klicken, um die Kontaktanfrage von %1$s abzulehnen"],"Click to chat with %1$s (XMPP address: %2$s)":["Klicken Sie hier, um mit %1$s zu chatten (XMPP-Adresse: %2$s)"],"Are you sure you want to decline this contact request?":["Möchten Sie diese Kontaktanfrage wirklich ablehnen?"],"Contacts":["Kontakte"],"Add a contact":["Kontakt hinzufügen"],"Re-sync your contacts":["Resynchronisieren Sie Ihre Kontakte"]}}}')}}]);
 //# sourceMappingURL=de-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/eo-LC_MESSAGES-converse-po.js b/src/conversejs/locales/eo-LC_MESSAGES-converse-po.js
index aab6a505d526dac724dd4ffbd7bbf6dc5242b78b..3ffd53147c418018ae52ad89acaf33365a26b01d 100644
--- a/src/conversejs/locales/eo-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/eo-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[148],{426:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"eo"},"Create your account":["Krei vian konton"],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":["Jam havas konversacian konton?"],"Log in here":["Ensaluti ĉi tie"],"Account Registration:":[""],"Register":["Registri"],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["Nuligi"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Ĉi tiu babilejo ne estas anonima"],"This groupchat now shows unavailable members":["Tiu babilejo nun afiŝas maldisponeblajn anojn"],"This groupchat does not show unavailable members":["Tiu babilejo ne afiŝas nedisponeblajn anojn"],"The groupchat configuration has changed":["La babilejo konfiguracio ŝanĝis"],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":["Ĉi tiu babilejo estas nun malanonima"],"This groupchat is now semi-anonymous":["Ĉi tiu babilejo estas nun parta anonima"],"This groupchat is now fully-anonymous":["Ĉi tiu babilejo estas nun anonima"],"A new groupchat has been created":["Kreis novan babilejon"],"Your nickname has been automatically set to %1$s":["Via kromnomo estis aŭtomate fiksita al %1$s"],"Your nickname has been changed to %1$s":["Via kromnomo estis ŝanĝita al %1$s"],"You have been banned from this groupchat":["Vi estis malpermesita de ĉi tiu babilejo"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s estis malpermesita"],"%1$s\'s nickname has changed":["Kromnomo de %1$s ŝanĝis"],"%1$s has been removed for not being a member":["%1$s estis forigita ĉar ne estanta ano"],"%1$s is no longer an admin of this groupchat":["%1$s ne plu estas administranto de tiu grupbabilejo"],"%1$s is no longer an owner of this groupchat":["%1$s ne plu estas posedanto de tiu grupbabilejo"],"%1$s is no longer banned from this groupchat":[""],"%1$s is now an %2$s of this groupchat":["%1$s estas nun %2$s en ĉi tiu babilejo"],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":["Vi estis malpermesita de ĉi tiu babilejo."],"You are not allowed to create new groupchats.":["Vi ne estas permesita krei novajn babilejojn."],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":["Ĉi tiu babilejo ne (ankoraŭ) ekzistas."],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Eraro"],"Sorry, something went wrong while trying to save your bookmark.":["Pardonu, io malĝustis dum provanta savi vian legosignon."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Miaj kontaktoj"],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":["Mallegosigni tiun babilejon"],"Click to open this groupchat":["Klaku por malfermi tiun babilejon"],"Bookmarks":["Legosignoj"],"Bookmark this groupchat":["Legosigni tiun babilejon"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["La nomo por ĉi tiu legosigno:"],"What should your nickname for this groupchat be?":["Kiu devas esti vian kromnomon por tiu babilejo ?"],"Save":["Konservi"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ĉu vi certas ke vi volas forigi la legosignon %1$s ?"],"Close":["Fermi"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Eksaj versioj"],"Retry":[""],"Uploading file:":["Alŝutado de dosiero:"],"This message has been edited":[""],"Show more":["Montri pli"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Profilbildo de la uzanto"],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":["Forigi kontakton"],"XMPP Address":["XMPPa adreso"],"Email":["Retpoŝto"],"Full Name":["Kompleta nomo"],"Nickname":[""],"Refresh":[""],"Role":["Rolo"],"URL":["URL"],"%1$s is typing":["%1$s estas tajpanta"],"%1$s has stopped typing":["%1$s ĉesis tajpi"],"%1$s has gone away":["%1$s iris for"],"Remove messages":["Forigi mesaĝojn"],"Write in the third person":[""],"Show this menu":["Montri ĉi tiun menuon"],"Hidden message":["Kaŝita mesaĝo"],"Message":["Mesaĝo"],"Optional hint":[""],"You have unread messages":["Vi havas nelegitajn mesaĝojn"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Ĉu vi certas ke vi volas viŝi mesaĝojn de tiu konversacio ?"],"%1$s has gone offline":[""],"%1$s is busy":["%1$s estas okupata"],"%1$s is online":["%1$s estas enreta"],"Sorry, something went wrong while trying to refresh":["Pardonu, io malĝustis dum provanta reŝargi"],"Are you sure you want to remove this contact?":["Ĉu vi certas ke vi volas forigi tiun kontakton ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Pardonu, estis eraro dum provanta forigi %1$s kiel kontakto."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":["Krei konton"],"Don\'t have a chat account?":["Ne havas konversacian konton?"],"Log in":["Ensaluti"],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":["Salutnomo"],"user@domain":["uzanto@domajno"],"Please enter a valid XMPP address":["Bonvolu eniri validan XMPPan adreson"],"Chat Contacts":["Konversaciaj kontaktoj"],"Toggle chat":["Baskuli babilejon"],"Click to restore this chat":["Klaku por restaŭri tiun konversacion"],"Minimized":["Minimumigita"],"This field is required":[""],"Join":["Aliĝi"],"Enter a new Groupchat":["Eniri novan babilejon"],"name@conference.example.org":["nomo@konferenco.ekzemplo.org"],"Groupchat address":["Adreso de babilejo"],"Invite":["Inviti"],"Show groupchats":["Montri babilejojn"],"Server address":["Adreso de servilo"],"Show more information on this groupchat":["Afiŝi pli da informo pri tiu babilejo"],"Query for Groupchats":["Peti babilejon"],"Description:":["Priskribo :"],"Groupchat Address (JID):":["Babilejo adresa (JID-o):"],"Participants:":["Partoprenantoj:"],"Features:":["Funkcioj:"],"Requires authentication":["Devigas aŭtentigon"],"Hidden":["Kaŝita"],"Requires an invitation":["Devigas inviton"],"Moderated":["Kontrolata"],"Non-anonymous":["Ne-anonima"],"Open":["Malfermi"],"Permanent":["Konstanta"],"Public":["Publika"],"Semi-anonymous":[""],"Temporary":["Provizora"],"Unmoderated":["Nekontrolata"],"conference.example.org":["konferenco.ekzemplo.org"],"No groupchats found":["Neniu babilejoj trovita"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Temo"],"Topic author":[""],"Groupchat address (JID)":["Adreso de babilejo (JIDo)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Priskribo"],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Nur anoj"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Nomo"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":["Ne anonima"],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":["Grupbabilejo informoj por %1$s"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["Ĉi tiu babilejo jam ne ekzistas"],"Enter groupchat":["Eniri babilejon"],"Please choose your nickname":[""],"This groupchat requires a password":["Ĉi tiu babilejo necesigas pasvorton"],"Password: ":["Pasvorto: "],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":["Posedanto"],"Admin":["Administranto"],"Member":["Ano"],"Moderator":[""],"Visitor":["Vizitanto"],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":["%1$s eniris la babilejon"],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been muted":["%1$s estis silentigita"],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Ŝanĝi uzanton rolon al partoprenanto"],"Kick user from groupchat":[""],"Write in 3rd person":["Skribas en 3a persono"],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":["Ŝanĝi vian kromnomon"],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"A timeout occurred while trying to retract the message":[""],"Configure":[""],"Configure this groupchat":["Agordi tiun babilejon"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Kaŝi liston de partoprenantoj"],"Forbidden: you do not have the necessary role in order to do that.":["Malpermesita: vi ne havas la necesan rolon por fari tion."],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":["nomo@ekzemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":["Babilejoj"],"Add a new groupchat":["Aldoni novan babilejon"],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":["Sciigo de %1$s"],"%1$s says":["%1$s diras"],"has gone offline":[""],"has gone away":[""],"is busy":["estas okupata"],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Elsaluti"],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":["Via profilbildo"],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":["Elekti ĉiujn"],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":["Via profilo"],"XMPP Address (JID)":["XMPPa adreso (JIDo)"],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["For"],"Busy":["Okupite"],"Custom status":[""],"Offline":["Elrete"],"Online":["Enrete"],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":["Mi estas %1$s"],"Are you sure you want to log out?":[""],"online":["enrete"],"busy":["okupite"],"away for long":[""],"away":["fore"],"offline":["elrete"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" ekz. conversejs.org"],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":["ĉi tie"],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":["Registrita sukcese"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["Lasi ĉi tiun babilejon"],"Click to toggle the list of open groupchats":[""],"Open Groupchats":["Enbabilejoj"],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":["Aldoni"],"Add a Contact":["Aldoni kontakton"],"This contact is busy":["Ĉi tiu kontakto estas okupata"],"This contact is online":["Ĉi tiu kontakto estas enreta"],"This contact is offline":["Ĉi tiu kontakto estas elreta"],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":["Ĉi tiu kontakto estas for"],"Contact name":["Nomo de kontakto"],"Optional nickname":["Nedeviga kromnomo"],"Sorry, could not find a contact with that name":[""],"Filter":["Filtri"],"Filter by contact name":["Filtri laŭ kontaktnomo"],"Filter by group name":["Filtri laŭ grupnomo"],"Filter by status":["Filtri laŭ statuso"],"Any":[""],"Unread":["Nelegita"],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":["Kontaktoj"],"Add a contact":["Aldoni kontakton"],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[148],{514:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"eo"},"Create your account":["Krei vian konton"],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":["Jam havas konversacian konton?"],"Log in here":["Ensaluti ĉi tie"],"Account Registration:":[""],"Register":["Registri"],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["Nuligi"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Ĉi tiu babilejo ne estas anonima"],"This groupchat now shows unavailable members":["Tiu babilejo nun afiŝas maldisponeblajn anojn"],"This groupchat does not show unavailable members":["Tiu babilejo ne afiŝas nedisponeblajn anojn"],"The groupchat configuration has changed":["La babilejo konfiguracio ŝanĝis"],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":["Ĉi tiu babilejo estas nun malanonima"],"This groupchat is now semi-anonymous":["Ĉi tiu babilejo estas nun parta anonima"],"This groupchat is now fully-anonymous":["Ĉi tiu babilejo estas nun anonima"],"A new groupchat has been created":["Kreis novan babilejon"],"Your nickname has been automatically set to %1$s":["Via kromnomo estis aŭtomate fiksita al %1$s"],"Your nickname has been changed to %1$s":["Via kromnomo estis ŝanĝita al %1$s"],"You have been banned from this groupchat":["Vi estis malpermesita de ĉi tiu babilejo"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s estis malpermesita"],"%1$s\'s nickname has changed":["Kromnomo de %1$s ŝanĝis"],"%1$s has been removed for not being a member":["%1$s estis forigita ĉar ne estanta ano"],"%1$s is no longer an admin of this groupchat":["%1$s ne plu estas administranto de tiu grupbabilejo"],"%1$s is no longer an owner of this groupchat":["%1$s ne plu estas posedanto de tiu grupbabilejo"],"%1$s is no longer banned from this groupchat":[""],"%1$s is now an %2$s of this groupchat":["%1$s estas nun %2$s en ĉi tiu babilejo"],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":["Vi estis malpermesita de ĉi tiu babilejo."],"You are not allowed to create new groupchats.":["Vi ne estas permesita krei novajn babilejojn."],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":["Ĉi tiu babilejo ne (ankoraŭ) ekzistas."],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Eraro"],"Sorry, something went wrong while trying to save your bookmark.":["Pardonu, io malĝustis dum provanta savi vian legosignon."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Miaj kontaktoj"],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":["Mallegosigni tiun babilejon"],"Click to open this groupchat":["Klaku por malfermi tiun babilejon"],"Bookmarks":["Legosignoj"],"Bookmark this groupchat":["Legosigni tiun babilejon"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["La nomo por ĉi tiu legosigno:"],"What should your nickname for this groupchat be?":["Kiu devas esti vian kromnomon por tiu babilejo ?"],"Save":["Konservi"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ĉu vi certas ke vi volas forigi la legosignon %1$s ?"],"Close":["Fermi"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Eksaj versioj"],"Retry":[""],"Uploading file:":["Alŝutado de dosiero:"],"This message has been edited":[""],"Show more":["Montri pli"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Profilbildo de la uzanto"],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":["Forigi kontakton"],"XMPP Address":["XMPPa adreso"],"Email":["Retpoŝto"],"Full Name":["Kompleta nomo"],"Nickname":[""],"Refresh":[""],"Role":["Rolo"],"URL":["URL"],"%1$s is typing":["%1$s estas tajpanta"],"%1$s has stopped typing":["%1$s ĉesis tajpi"],"%1$s has gone away":["%1$s iris for"],"Remove messages":["Forigi mesaĝojn"],"Write in the third person":[""],"Show this menu":["Montri ĉi tiun menuon"],"Hidden message":["Kaŝita mesaĝo"],"Message":["Mesaĝo"],"Optional hint":[""],"You have unread messages":["Vi havas nelegitajn mesaĝojn"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Ĉu vi certas ke vi volas viŝi mesaĝojn de tiu konversacio ?"],"%1$s has gone offline":[""],"%1$s is busy":["%1$s estas okupata"],"%1$s is online":["%1$s estas enreta"],"Sorry, something went wrong while trying to refresh":["Pardonu, io malĝustis dum provanta reŝargi"],"Are you sure you want to remove this contact?":["Ĉu vi certas ke vi volas forigi tiun kontakton ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Pardonu, estis eraro dum provanta forigi %1$s kiel kontakto."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":["Krei konton"],"Don\'t have a chat account?":["Ne havas konversacian konton?"],"Log in":["Ensaluti"],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":["Salutnomo"],"user@domain":["uzanto@domajno"],"Please enter a valid XMPP address":["Bonvolu eniri validan XMPPan adreson"],"Chat Contacts":["Konversaciaj kontaktoj"],"Toggle chat":["Baskuli babilejon"],"Click to restore this chat":["Klaku por restaŭri tiun konversacion"],"Minimized":["Minimumigita"],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":["Posedanto"],"Admin":["Administranto"],"Member":["Ano"],"Moderator":[""],"Visitor":["Vizitanto"],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":["Aliĝi"],"Enter a new Groupchat":["Eniri novan babilejon"],"name@conference.example.org":["nomo@konferenco.ekzemplo.org"],"Groupchat address":["Adreso de babilejo"],"Invite":["Inviti"],"Show groupchats":["Montri babilejojn"],"Server address":["Adreso de servilo"],"Show more information on this groupchat":["Afiŝi pli da informo pri tiu babilejo"],"Query for Groupchats":["Peti babilejon"],"Description:":["Priskribo :"],"Groupchat Address (JID):":["Babilejo adresa (JID-o):"],"Participants:":["Partoprenantoj:"],"Features:":["Funkcioj:"],"Requires authentication":["Devigas aŭtentigon"],"Hidden":["Kaŝita"],"Requires an invitation":["Devigas inviton"],"Moderated":["Kontrolata"],"Non-anonymous":["Ne-anonima"],"Open":["Malfermi"],"Permanent":["Konstanta"],"Public":["Publika"],"Semi-anonymous":[""],"Temporary":["Provizora"],"Unmoderated":["Nekontrolata"],"conference.example.org":["konferenco.ekzemplo.org"],"No groupchats found":["Neniu babilejoj trovita"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Temo"],"Topic author":[""],"Groupchat address (JID)":["Adreso de babilejo (JIDo)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Priskribo"],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Nur anoj"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Nomo"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":["Ne anonima"],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":["Grupbabilejo informoj por %1$s"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["Ĉi tiu babilejo jam ne ekzistas"],"Enter groupchat":["Eniri babilejon"],"Please choose your nickname":[""],"This groupchat requires a password":["Ĉi tiu babilejo necesigas pasvorton"],"Password: ":["Pasvorto: "],"Submit":[""],"%1$s has entered the groupchat":["%1$s eniris la babilejon"],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been muted":["%1$s estis silentigita"],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Ŝanĝi uzanton rolon al partoprenanto"],"Kick user from groupchat":[""],"Write in 3rd person":["Skribas en 3a persono"],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":["Ŝanĝi vian kromnomon"],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"A timeout occurred while trying to retract the message":[""],"Configure":[""],"Configure this groupchat":["Agordi tiun babilejon"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Kaŝi liston de partoprenantoj"],"Forbidden: you do not have the necessary role in order to do that.":["Malpermesita: vi ne havas la necesan rolon por fari tion."],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":["nomo@ekzemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":["Babilejoj"],"Add a new groupchat":["Aldoni novan babilejon"],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":["Sciigo de %1$s"],"%1$s says":["%1$s diras"],"has gone offline":[""],"has gone away":[""],"is busy":["estas okupata"],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Elsaluti"],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":["Via profilbildo"],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":["Elekti ĉiujn"],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":["Via profilo"],"XMPP Address (JID)":["XMPPa adreso (JIDo)"],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["For"],"Busy":["Okupite"],"Custom status":[""],"Offline":["Elrete"],"Online":["Enrete"],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":["Mi estas %1$s"],"Are you sure you want to log out?":[""],"online":["enrete"],"busy":["okupite"],"away for long":[""],"away":["fore"],"offline":["elrete"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" ekz. conversejs.org"],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":["ĉi tie"],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":["Registrita sukcese"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["Lasi ĉi tiun babilejon"],"Click to toggle the list of open groupchats":[""],"Open Groupchats":["Enbabilejoj"],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":["Aldoni"],"Add a Contact":["Aldoni kontakton"],"This contact is busy":["Ĉi tiu kontakto estas okupata"],"This contact is online":["Ĉi tiu kontakto estas enreta"],"This contact is offline":["Ĉi tiu kontakto estas elreta"],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":["Ĉi tiu kontakto estas for"],"Contact name":["Nomo de kontakto"],"Optional nickname":["Nedeviga kromnomo"],"Sorry, could not find a contact with that name":[""],"Filter":["Filtri"],"Filter by contact name":["Filtri laŭ kontaktnomo"],"Filter by group name":["Filtri laŭ grupnomo"],"Filter by status":["Filtri laŭ statuso"],"Any":[""],"Unread":["Nelegita"],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":["Kontaktoj"],"Add a contact":["Aldoni kontakton"],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=eo-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/es-LC_MESSAGES-converse-po.js b/src/conversejs/locales/es-LC_MESSAGES-converse-po.js
index 10e25708f7deb61856317df3452939e773573d5c..7d88f9b0bd0de6bf2f3ce6b0b6bd5c73fbffd1a0 100644
--- a/src/conversejs/locales/es-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/es-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{427:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"es"},"Create your account":["Crea tu cuenta"],"Please enter the XMPP provider to register with:":["Por favor, introduce el proveedor de XMPP para registrarse:"],"Already have a chat account?":["¿Ya tienes una cuenta?"],"Log in here":["Inicia sesión aquí"],"Account Registration:":["Registro de cuenta:"],"Register":["Registrar"],"Choose a different provider":["Elige un proveedor diferente"],"Hold tight, we\'re fetching the registration form…":["Espera, estamos recuperando el formulario de registro…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["La conexión se ha perdido, intentando reconectar."],"An error occurred while connecting to the chat server.":["Ocurrió un error mientras se conectaba al servidor de chat."],"Your XMPP address and/or password is incorrect. Please try again.":["Tu dirección XMPP y/o tu contraseña no es correcta. Por favor, inténtalo de nuevo."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Lo sentimos, no pudimos conectarnos al servidor XMPP con el dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["El servidor XMPP no ofreció un mecanismo de autenticación soportado"],"Sorry, could not determine upload URL.":["Lo sentimos, no se ha podido determinar la URL de subida."],"Sorry, could not determine file upload URL.":["Lo sentimos, no se pudo determinar la URL de subida de archivos."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Lo sentimos, no se ha podido subir el archivo con éxito. La respuesta de tu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Lo sentimos, no se ha podido subir el archivo con éxito."],"Sorry, looks like file upload is not supported by your server.":["Lo sentimos, parece que tu servidor no soporta la subida de archivos."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["El tamaño del archivo, %1$s, excede el máximo permitido por tu servidor, que es %2$s."],"Smileys and emotions":["Smileys y emoticonos"],"People":["Personas"],"Activities":["Actividades"],"Travel":["Viajes"],"Objects":["Objectos"],"Animals and nature":["Animales y naturaleza"],"Food and drink":["Comida y bebida"],"Symbols":["Símbolos"],"Flags":["Banderas"],"Stickers":["Stickers"],"This groupchat is not anonymous":["Esta conversación en grupo no es anónima"],"This groupchat now shows unavailable members":["Esta conversación en grupo ahora muestra los miembros no disponibles"],"This groupchat does not show unavailable members":["Esta conversación en grupo no muestra los miembros no disponibles"],"The groupchat configuration has changed":["La configuración de la conversación en grupo ha cambiado"],"Groupchat logging is now enabled":["El registro de la conversación en grupo está ahora activado"],"Groupchat logging is now disabled":["El registro de la conversación en grupo está ahora desactivado"],"This groupchat is now no longer anonymous":["Esta conversación en grupo ya no es anónima"],"This groupchat is now semi-anonymous":["Esta conversación en grupo es ahora semi-anónima"],"This groupchat is now fully-anonymous":["Esta conversación en grupo es ahora completamente anónima"],"A new groupchat has been created":["Se ha creado una nueva conversación en grupo"],"Your nickname has been automatically set to %1$s":["Tu apodo ha sido establecido automáticamente como %1$s"],"Your nickname has been changed to %1$s":["Tu apodo ha sido cambiado a %1$s"],"You have been banned from this groupchat":["Has sido bloqueado de esta conversación en grupo"],"You have been kicked from this groupchat":["Has sido expulsado de esta conversación en grupo"],"You have been removed from this groupchat because of an affiliation change":["Has sido eliminado de esta conversación en gurpo debido a un cambio de afiliación"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Has sido eliminado de esta conversación en grupo debido a que la conversación cambió su configuración a solo miembros y tú no eres miembro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Has sido eliminado de esta conversación en grupo debido a que el servicio está apagándose"],"Your message was not delivered because you weren\'t allowed to send it.":["Tu mensaje no fue enviado porque no tienes permitido enviar mensajes."],"Your message was not delivered because you\'re not present in the groupchat.":["No se entregó tu mensaje porque no estás presente en la conversación en grupo."],"You\'re not allowed to register yourself in this groupchat.":["No se te permite ingresar en esta conversación en grupo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["No se te permite ingresar en esta conversación en grupo dado que es solo para miembros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["No puede registrar tu apodo en esta conversación en grupo; no admite registros."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["No puedes registrar tu apodo en esta conversación en grupo; se han proporcionado datos no válidos."],"Topic set by %1$s":["Asunto fijado por %1$s"],"Topic cleared by %1$s":["Asunto limpiado por %1$s"],"%1$s has been banned by %2$s":["%1$s ha sido bloqueado por %2$s"],"%1$s has been banned":["%1$s ha sido bloqueado"],"%1$s\'s nickname has changed":["El apodo de %1$s ha cambiado"],"%1$s has been kicked out by %2$s":["%1$s ha sido expulsado por %2$s"],"%1$s has been kicked out":["%1$s ha sido expulsado"],"%1$s has been removed because of an affiliation change":["%1$s ha sido eliminado debido a un cambio de afiliación"],"%1$s has been removed for not being a member":["%1$s ha sido eliminado por no ser un miembro"],"%1$s is no longer an admin of this groupchat":["%1$s ya no es administrador de esta conversación en grupo"],"%1$s is no longer an owner of this groupchat":["%1$s ya no es propietario de esta conversación en grupo"],"%1$s is no longer banned from this groupchat":["%1$s ya no está bloqueado de esta conversación en grupo"],"%1$s is no longer a member of this groupchat":["%1$s ya no es miembro de esta conversación en grupo"],"%1$s is now a member of this groupchat":["%1$s es ahora miembro de esta conversación en grupo"],"%1$s is now an %2$s of this groupchat":["%1$s es ahora %2$s de esta conversación en grupo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["El apodo que elegiste está reservado o en uso actualmente, por favor, elige uno diferente."],"Password incorrect":["Contraseña incorrecta"],"You are not on the member list of this groupchat.":["No estás en la lista de miembros de esta conversación en grupo."],"You have been banned from this groupchat.":["Has sido bloqueado de esta conversación en grupo."],"You are not allowed to create new groupchats.":["No estás autorizado para crear nuevas conversación en grupo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Tu apodo no se ajusta a la normativa de esta conversación en grupo."],"This groupchat does not (yet) exist.":["Esta conversación en gurpo (aún) no existe."],"This groupchat has reached its maximum number of participants.":["Esta conversación en grupo ha alcanzado su número máximo de ocupantes."],"Remote server not found":["Servidor remoto no encontrado"],"The explanation given is: \\"%1$s\\".":["La razón dada es: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s te ha invitado a unirse a la conversación en grupo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s te ha invitado a ingresar a la conversación en grupo: %2$s, y dejó la siguiente razón: \\"%3$s\\""],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["Lo sentimos, algo salió mal mientras se trataba de guardar el marcador."],"Timeout Error":["Error de tiempo de espera"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["El servidor no devolvió tus marcadores en el tiempo establecido. Puedes recargar la página para realizar la petición de nuevo."],"My contacts":["Mis contactos"],"Pending contacts":["Contactos pendientes"],"Contact requests":["Solicitudes de contacto"],"Ungrouped":["Sin grupo"],"New messages":["Nuevos mensajes"],"Sorry, there was an error while trying to add %1$s as a contact.":["Lo sentimos, hubo un error intentando añadir a %1$s a tu lista de contactos."],"This client does not allow presence subscriptions":["Este cliente no permite las suscripciones presenciales"],"Click to hide these contacts":["Haz clic para ocultar estos contactos"],"Unbookmark this groupchat":["Quitar esta conversación en grupo de los marcadores"],"Click to open this groupchat":["Pulse para abrir esta conversación en grupo"],"Click to toggle the bookmarks list":["Haz clic para alternar la lista de marcadores"],"Bookmarks":["Marcadores"],"Bookmark this groupchat":["Guardar esta conversación en grupo en los marcadores"],"Would you like this groupchat to be automatically joined upon startup?":["¿Le gustaría entrar automáticamente a esta conversación en grupo al inicio?"],"The name for this bookmark:":["El nombre para este marcador:"],"What should your nickname for this groupchat be?":["¿Cual debería ser su apodo para esta conversación en grupo?"],"Save":["Guardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["¿Confirma que quiere eliminar el marcador \\"%1$s\\"?"],"Unbookmark":["Eliminar de marcadores"],"Bookmark":["Añadir a marcadores"],"Close":["Cerrar"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Descargar archivo de audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Descargar archivo \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Versiones del mensaje"],"Retry":[""],"Uploading file:":["Subiendo archivo:"],"%1$s has removed this message":["%1$s ha eliminado este mensaje"],"This message has been edited":["Este mensaje ha sido editado"],"Show more":["Mostrar más"],"No message history available.":["No hay historial de mensajes disponible."],"Search results":["Resultados de la búsqueda"],"Search":["Búsqueda"],"Insert emojis":["Insertar un emoticono"],"Send the message":["Enviar el mensaje"],"Start a call":["Empezar una llamada"],"Message characters remaining":["Caracteres restantes del mensaje"],"Choose a file to send":["Elige un archivo para enviar"],"Click to write as a normal (non-spoiler) message":["Click para escribir un mensaje normal (no spoiler)"],"Click to write your message as a spoiler":["Click para escribir un mensaje de spoiler"],"The User\'s Profile Image":["Imagen de perfil del usuario"],"Trusted":["De confianza"],"Untrusted":["No es de confianza"],"OMEMO Fingerprints":["Huellas digitales OMEMO"],"No OMEMO-enabled devices found":["No se han encontrado dispositivos habilitados para OMEMO"],"Remove as contact":["Eliminar de tu lista de contactos"],"XMPP Address":["Dirección XMPP"],"Email":["Email"],"Full Name":["Nombre completo"],"Nickname":["Apodo"],"Refresh":["Actualizar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s está escribiendo"],"%1$s has stopped typing":["%1$s ha parado de escribir"],"%1$s has gone away":["%1$s se ha marchado"],"Remove messages":["Eliminar mensajes"],"Close this chat":["Cerrar esta conversación"],"Write in the third person":["Escribir en tercera persona"],"Show this menu":["Mostrar este menú"],"Hidden message":["Mensaje oculto"],"Message":["Mensaje"],"Optional hint":["Pista opcional"],"You have unread messages":["Tienes mensajes sin leer"],"Details":["Detalles"],"See more information about this person":["Mostrar más información de esta persona"],"Close and end this conversation":["Cerrar y terminar esta conversación"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tenga en cuenta que otros clientes (y servidores) de XMPP/Jabber pueden no soportar aún la funcionalidad de retractarse y que este mensaje puede no ser eliminado en todas partes."],"Are you sure you want to retract this message?":["¿Estás seguro de que quieres retractarte de este mensaje?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Se perderá el mensaje no enviado. ¿Confirmas que quieres continuar?"],"Are you sure you want to clear the messages from this conversation?":["¿Estás seguro de que quieres limpiar los mensajes de esta conversación?"],"%1$s has gone offline":["%1$s se ha desconectado"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está conectado"],"Sorry, something went wrong while trying to refresh":["Lo sentimos, algo salió mal mientras se trataba de actualizar"],"Are you sure you want to remove this contact?":["¿Estás seguro de que quieres eliminar este contacto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Lo sentimos, hubo un error mientras se trataba de eliminar a %1$s de tu lista de contactos."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para mejorar el rendimiento, guardamos tus datos en la caché del navegador. Desmarca esta opción si este es un ordenador público o si quieres que tus datos sean borrados cuando te desconectes. Es importante que cierres la sesión explícitamente, de lo contrario podrían no borrarse todos los datos almacenados en la caché. Por favor, ten en cuenta que cuando estés usando un dispositivo que no es de confianza, el cifrado OMEMO no está disponible."],"This is a trusted device":["Este es un dispositivo de confianza"],"Password":["Contraseña"],"Create an account":["Crear una cuenta"],"Don\'t have a chat account?":["¿No tienes una cuenta?"],"Log in":["Iniciar sesión"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Haz clic aquí para iniciar sesión de forma anónima"],"Username":["Nombre de usuario"],"user@domain":["usuario@dominio"],"Please enter a valid XMPP address":["Por favor, introduce una dirección XMPP válida"],"Chat Contacts":["Contactos"],"Toggle chat":["Alternar contactos"],"Click to restore this chat":["Haz clic para recuperar esta conversación"],"Minimized":["Minimizado"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar esta conversación"],"Minimize this groupchat":["Minimizar esta conversación en grupo"],"This field is required":["Este campo es requerido"],"Join":["Unirse"],"Enter a new Groupchat":["Entrar en una nueva conversación en grupo"],"name@conference.example.org":["nombre@conferencia.ejemplo.org"],"Groupchat name":["Nombre de la conversación en grupo"],"Groupchat address":["Dirección de la conversación en grupo"],"Groupchat id is invalid.":["El identificador de esta conversación es inválido."],"Invite":["Invitar"],"Invite someone to this groupchat":["Invitar a alguien a esta conversación en grupo"],"user@example.org":["usuario@ejemplo.org"],"Optional reason for the invitation":["Razón para la invitación (opcional)"],"Show groupchats":["Mostrar conversaciones en grupo"],"Server address":["Dirección del servidor"],"Show more information on this groupchat":["Mostrar más información de esta conversación en grupo"],"Query for Groupchats":["Buscar una conversación en grupo"],"Description:":["Descripción:"],"Groupchat Address (JID):":["Dirección de la conversación en grupo (JID):"],"Participants:":["Participantes:"],"Features:":["Características:"],"Requires authentication":["Autenticación requerida"],"Hidden":["Oculto"],"Requires an invitation":["Requiere una invitación"],"Moderated":["Moderado"],"Non-anonymous":["No anónimo"],"Open":["Abierta"],"Permanent":["Permanente"],"Public":["Pública"],"Semi-anonymous":["Semi-anónima"],"Temporary":["Temporal"],"Unmoderated":["Sin moderar"],"conference.example.org":["conferencia.ejemplo.org"],"No groupchats found":["No se ha encontrado ninguna conversación en grupo"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Los Moderadores son usuarios privilegiados que pueden cambiar los roles de otros usuarios (excepto aquellos que son administradores o propietarios)."],"The default role, implies that you can read and write messages.":["El rol por defecto, implica que pueden leer y escribir mensajes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Los visitantes no pueden escribir mensajes en una conversación en grupo moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Propietario es la máxima afiliación. Los propietarios pueden modificar roles y afiliaciones de otros usuarios."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administrador es la segunda máxima afiliación. Los administradores pueden modificar roles y afiliaciones para todos los usuarios excepto a propietarios."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para prohibir a un usuario, debes cambiar su afiliación a \\"marginado\\"."],"Change role":["Cambiar rol"],"New Role":["Nuevo Rol"],"Reason":["Razón"],"Change affiliation":["Cambiar afiliación"],"New affiliation":["Nueva afiliación"],"Affiliation":["Afiliación"],"Moderator Tools":["Herramientas del moderador"],"No users with that affiliation found.":["No se han encontrado usuarios con esa afiliación."],"No users with that role found.":["No se encontraron usuarios con ese rol."],"Type here to filter the search results":["Escribe aquí para filtrar los resultados de la búsqueda"],"Show users":["Mostrar usuarios"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Los Roles son asignados a los usuarios para permitir o denegarles ciertas habilidades en las conversaciones en grupo. Estos son asignados explícitamente o implícitamente como parte de su afiliación. Un rol que no tiene afiliación, es solo válido mientras dure la sesión del usuario."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliación es un derecho de larga duración que normalmente implica un cierto role que otorga privilegios y responsabilidades. Por ejemplo, los administradores y los propietarios automáticamente tiene el rol de moderador."],"Sorry, something went wrong while trying to set the affiliation":["Lo sentimos, algo salió mal mientras se trataba de cambiar la afiliación"],"Affiliation changed":["Afiliación cambiada"],"Role changed":["Rol cambiado"],"You\'re not allowed to make that change":["No estás autorizado para hacer este cambio"],"Sorry, something went wrong while trying to set the role":["Lo sentimos, algo salió mal mientras se trataba de cambiar el rol"],"Topic":["Asunto"],"Topic author":["Autor del asunto"],"Groupchat address (JID)":["Dirección de la conversación en grupo (JID)"],"Message archiving":["Archivado de mensajes"],"Messages are archived on the server":["Los mensajes son archivados en el servidor"],"Description":["Descripción"],"Features":["Características"],"This groupchat is not publicly searchable":["Esta conversación en grupo no es pública"],"This groupchat is restricted to members only":["Esta conversación en grupo está restringida solamente a miembros"],"Members only":["Solo miembros"],"Participants entering this groupchat need to request permission to write":["Los participantes en esta conversación en grupo necesitan pedir permiso para escribir"],"Name":["Nombre"],"This groupchat does not require a password upon entry":["Esta conversación en grupo no requiere contraseña para la entrada"],"No password required":["No se requiere contraseña"],"Not anonymous":["No anónima"],"All other groupchat participants can see your XMPP address":["Todos los participantes de la conversación pueden ver su dirección XMPP"],"Not moderated":["No moderada"],"Participants entering this groupchat can write right away":["Los participantes en esta conversación en grupo pueden escribir directamente"],"Online users":["Usuarios en línea"],"Anyone can join this groupchat":["Cualquiera puede unirse a esta conversación en grupo"],"This groupchat requires a password before entry":["Esta conversación en grupo requiere una contraseña para entrar"],"Password protected":["Protegido con contraseña"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Esta conversación en grupo persiste incluso si está desocupada"],"Only moderators can see your XMPP address":["Sólo los moderadores pueden ver tu dirección XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversación en grupo desaparecerá una vez que la última persona la abandone"],"This groupchat is publicly searchable":["Esta conversación en grupo es pública"],"Groupchat info for %1$s":["Información de la conversación en grupo %1$s"],"You\'re not allowed to send messages in this room":["No tiene permitido enviar mensajes en esta sala"],"The conversation has moved. Click below to enter.":["La conversación se ha movido. Haz clic debajo para entrar."],"This groupchat no longer exists":["Esta conversación en grupo ya no existe"],"Hide the groupchat topic":["Ocultar el asunto de la conversación"],"This groupchat is bookmarked":["Esta conversación está en los marcadores"],"Enter groupchat":["Entrar en la conversación en grupo"],"Choose a nickname to enter":["Elige un alias para entrar"],"Please choose your nickname":["Por favor, elige un apodo"],"This groupchat requires a password":["Esta conversación en grupo requiere una contraseña"],"Password: ":["Contraseña: "],"Submit":["Enviar"],"This user is a moderator.":["Este usuario es un moderador."],"This user can send messages in this groupchat.":["Este usuario puede enviar mensajes en esta conversación en grupo."],"This user can NOT send messages in this groupchat.":["Este usuario NO puede enviar mensajes en esta conversación en grupo."],"Owner":["Propietario"],"Admin":["Administrador"],"Member":["Miembro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Haz clic para mencionar a %1$s en tu mensaje."],"Participants":["Participantes"],"%1$s has entered the groupchat":["%1$s ha entrado en la conversación en grupo"],"%1$s has left the groupchat":["%1$s ha dejado la conversación en grupo"],"%1$s is now a moderator":["%1$s es ahora un moderador"],"%1$s is no longer a moderator":["%1$s ya no es moderador"],"%1$s has been given a voice":["A %1$s le han permitido voz"],"%1$s has been muted":["%1$s ha sido silenciado"],"%1$s and %2$s":["%1$s y %2$s"],"%1$s are typing":["%1$s están escribiendo"],"%1$s have stopped typing":["%1$s han parado de escribir"],"%1$s have gone away":["%1$s se han marchado"],"%1$s have entered the groupchat":["%1$s han entrado en la conversación"],"%1$s have left the groupchat":["%1$s han dejado la conversación"],"Change user\'s affiliation to admin":["Cambiar la afiliación del usuario a administrador"],"Ban user by changing their affiliation to outcast":["Expulse usuarios cambiando su afiliación a \\"rechazado\\""],"Clear the chat area":["Vaciar el área de conversación"],"Close this groupchat":["Cerrar esta conversación"],"Change user role to participant":["Cambiar rol del usuario a participante"],"Remove this groupchat":["Eliminar esta conversación en grupo"],"Kick user from groupchat":["Expulsar al usuario de esta conversación en grupo"],"Write in 3rd person":["Escribir en tercera persona"],"Grant membership to a user":["Conceder membresía a un usuario"],"Opens up the moderator tools GUI":["Abre las herramientas del moderador"],"Remove user\'s ability to post messages":["Eliminar la posibilidad de que el usuario pueda publicar mensajes"],"Change your nickname":["Cambiar tu apodo"],"Grant moderator role to user":["Conceder rol de moderador al usuario"],"Grant ownership of this groupchat":["Conceder propiedad de esta conversación en grupo"],"Register your nickname":["Registra tu apodo"],"Revoke the user\'s current affiliation":["Revocar afiliación actual de usuario"],"Set groupchat subject":["Establecer asunto de la conversación en grupo"],"Set groupchat subject (alias for /subject)":["Establecer asunto de la conversación en grupo (equivalente a /subject)"],"Allow muted user to post messages":["Permitir a usuario silenciado publicar mensajes"],"You are about to retract this message.":["Estás a punto de retractarte de este mensaje."],"You may optionally include a message, explaining the reason for the retraction.":["Opcionalmente, puedes incluir un mensaje explicando el motivo de la retractación."],"Message Retraction":["Retractación del mensaje"],"Optional reason":["Razón (opcional)"],"Sorry, you\'re not allowed to retract this message":["Lo sentimos, no tienes permisos para retractarte de este mensaje."],"A timeout occurred while trying to retract the message":["Se produjo un error de tiempo excedido mientras se intentaba retractar el mensaje"],"Sorry, you\'re not allowed to retract this message.":["Lo sentimos, no tienes permisos para retractarte de este mensaje."],"Show more information about this groupchat":["Mostrar más información de esta conversación"],"Configure":["Configurar"],"Configure this groupchat":["Configurar esta conversación en grupo"],"Invite someone to join this groupchat":["Invitar a algiuen para que se una a esta conversación en grupo"],"Show topic":["Mostrar asunto"],"Hide topic":["Ocultar asunto"],"Show the topic message in the heading":["Muestra el asunto del mensaje en la cabecera"],"Hide the topic in the heading":["Ocultar el asunto en la cabecera"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar esta conversación en grupo"],"Destroy":["Destruir"],"Leave":["Salir"],"Leave and close this groupchat":["Salir y cerrar esta conversación"],"Are you sure you want to leave this groupchat?":["¿Confirmas que quieres abandonar esta conversación en grupo?"],"Hide the list of participants":["Ocultar la lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibido: no tienes el rol necesario para hacer eso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibido: no tienes la afiliación necesaria para hacer eso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error: el comando \\"%1$s\\" toma dos argumentos, el apodo del usuario y la razón de forma opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error: no se encontró ningún participante en la conversación en grupo según sus argumentos"],"Error: found multiple groupchat participant based on your arguments":["Error: se encontraron varios participantes en la conversación en grupo según sus argumentos"],"Sorry, an error happened while running the command.":["Lo sentimos, algo salió mal mientras se ejecutaba el comando."],"Check your browser\'s developer console for details.":["Comprueba la consola de desarrollador del navegador para más detalles."],"Are you sure you want to destroy this groupchat?":["¿Confirmas que quieres destruir esta conversación en grupo?"],"name@example.org":["usuario@ejemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Tu apodo es \\"%1$s\\""],"Error: invalid number of arguments":["Error: número de argumentos inválido"],"This action was done by %1$s.":["Esta acción fue hecha por %1$s."],"The reason given is: \\"%1$s\\".":["La razón dada es: %1$s."],"Groupchats":["Conversaciones en grupo"],"Add a new groupchat":["Añadir nueva conversación en grupo"],"Query for groupchats":["Búsqueda de conversaciones en grupo"],"Sorry, an error occurred while trying to submit the config form.":["Lo sentimos, ocurrió un error mientras se intentaba enviar el formulario de configuración."],"Close these announcements":["Cerrar estos anuncios"],"Announcements":["Anuncios"],"Click to open this server message":["Pulsa para abrir este mensaje del servidor"],"Notification from %1$s":["Notificación de %1$s"],"%1$s says":["%1$s dice"],"has gone offline":["se ha desconectado"],"has gone away":["se ha marchado"],"is busy":["está ocupado"],"has come online":["se ha conectado"],"wants to be your contact":["quiere añadirte a su lista de contactos"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Acerca de"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Software Libre %2$s Cliente de mensajería XMPP traído para ti por %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduce %2$s en tu propio idioma"],"Log out":["Desconectarse"],"Click to change your chat status":["Haz clic para cambiar tu estado"],"Show details about this chat client":["Mostrar más detalles sobre este cliente de mensajería"],"Your avatar image":["Tu imagen de perfil"],"Checkbox for selecting the following fingerprint":["Casilla para seleccionar las siguientes huellas digitales"],"Device without a fingerprint":["Dispositivo sin huella digital"],"Other OMEMO-enabled devices":["Otros dispositivos habilitados para OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Casilla para seleccionar las huellas digitales de otros dispositivos OMEMO"],"Remove checked devices and close":["Eliminar los dispositivos seleccionados y cerrar"],"Select all":["Seleccionar todo"],"This device\'s OMEMO fingerprint":["Huella digital OMEMO de este dispositivo"],"Generate new keys and fingerprint":["Generar nuevas claves y huella digital"],"Your Profile":["Tu Perfil"],"XMPP Address (JID)":["Dirección XMPP (JID)"],"Save and close":["Guardar y cerrar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Usa comas para separar múltiples roles. Tus roles se muestran junto a tu nombre en tus mensajes."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Lo sentimos, algo salió mal mientras se trataba de guardar tus datos de perfil."],"You can check your browser\'s developer console for any error output.":["Puedes comprobar cualquier error en la consola de desarrollador del navegador."],"Away":["Ausente"],"Busy":["Ocupado"],"Custom status":["Estado personalizado"],"Offline":["Desconectado"],"Online":["En línea"],"Away for long":["Ausente por mucho tiempo"],"Change chat status":["Cambiar tu estado"],"Personal status message":["Mensaje personal de estado"],"I am %1$s":["Estoy %1$s"],"Are you sure you want to log out?":["¿Estás seguro de que quieres salir?"],"online":["en línea"],"busy":["ocupado"],"away for long":["ausente por mucho tiempo"],"away":["ausente"],"offline":["desconectado"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Lo sentimos, no se puede descifrar un mensaje OMEMO recibido debido a un error."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s no parece tener un cliente que soporte OMEMO. El cifrado ya no será posible en esta conversación en grupo."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["No se puede usar cifrado punto a punto porque %1$s usa un cliente que no soporta OMEMO."],"Messages are being sent in plaintext":["Los mensajes se envían en texto plano"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Lo sentimos, ocurrió un error mientras se eliminaban los dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["¿Estás seguro que quieres generar nuevas claves OMEMO? Esto eliminará tus antiguas claves y todos los mensajes previamente cifrados no serán legibles en este dispositivo."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Lo sentimos, no se puede enviar el mensaje cifrado porque %1$s requiere que estés suscrito a sus actualizaciones de presencia para ver su información OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Lo sentimos, no se puede enviar el mensaje cifrado porque el servidor remoto para %1$s no se ha encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Lo sentimos, no se puede enviar el mensaje debido a un error."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["No se encontró ningún dispositivo compatible con mensajes cifrados de OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esto es un mensaje cifrado con OMEMO el cual tu cliente parece no soportar. Encuentra más información en https://conversations.im/omemo"]," e.g. conversejs.org":[" ej. conversejs.org"],"Fetch registration form":["Recuperar formulario de registro"],"Tip: A list of public XMPP providers is available":["Consejo: Hay una lista de proveedores públicos de XMPP disponible"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Lo sentimos, no hemos podido conectarnos con tu proveedor elegido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Lo sentimos, el proveedor dado no soporta registro de cuentas. Por favor, inténtalo con otro proveedor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo salió mal mientras se establecía la conexión con \\"%1$s\\". ¿Estás seguro de que existe?"],"Now logging you in":["Iniciando ahora"],"Registered successfully":["Registrado exitosamente"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["El proveedor rechazó tu intento de registro. Por favor, revisa que los valores que ingresaste sean correctos."],"Leave this groupchat":["Salir de esta conversación en grupo"],"Click to toggle the list of open groupchats":["Haz clic para alternar la lista de conversaciones en grupo"],"Open Groupchats":["Conversaciones en grupo abiertas"],"Are you sure you want to leave the groupchat %1$s?":["¿Confirmas que quieres abandonar la conversación en grupo %1$s?"],"Add":["Añadir"],"Add a Contact":["Agregar un contacto"],"This contact is busy":["Este contacto está ocupado"],"This contact is online":["Este contacto está en línea"],"This contact is offline":["Este contacto está desconectado"],"This contact is unavailable":["Este contacto no está disponible"],"This contact is away for an extended period":["Este contacto está ausente por un largo periodo de tiempo"],"This contact is away":["Este contacto está ausente"],"Contact name":["Nombre de contacto"],"Optional nickname":["Apodo opcional"],"Sorry, could not find a contact with that name":["Lo sentimos. no se pudo encontrar ningún contacto con ese nombre"],"This contact has already been added":["Este contacto ya ha sido añadido"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar por nombre de contacto"],"Filter by group name":["Filtrar por nombre de grupo"],"Filter by status":["Filtrar por estado"],"Any":["Cualquier"],"Unread":["Sin leer"],"Chatty":["Hablador"],"Extended Away":["Ausencia extendida"],"Click to remove %1$s as a contact":["Haz clic para eliminar a %1$s de tu lista de contactos"],"Click to accept the contact request from %1$s":["Haz clic para aceptar la solicitud de contacto %1$s"],"Click to decline the contact request from %1$s":["Haz clic para rechazar la solicitud de contacto %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Haz clic para conversar con %1$s (Dirección XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["¿Estás seguro de que quieres rechazar esta solicitud de contacto?"],"Contacts":["Contactos"],"Add a contact":["Agregar un contacto"],"Re-sync your contacts":["Re-sincronizar tus contactos"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{515:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"es"},"Create your account":["Crea tu cuenta"],"Please enter the XMPP provider to register with:":["Por favor, introduce el proveedor de XMPP para registrarse:"],"Already have a chat account?":["¿Ya tienes una cuenta?"],"Log in here":["Inicia sesión aquí"],"Account Registration:":["Registro de cuenta:"],"Register":["Registrar"],"Choose a different provider":["Elige un proveedor diferente"],"Hold tight, we\'re fetching the registration form…":["Espera, estamos recuperando el formulario de registro…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["La conexión se ha perdido, intentando reconectar."],"An error occurred while connecting to the chat server.":["Ocurrió un error mientras se conectaba al servidor de chat."],"Your XMPP address and/or password is incorrect. Please try again.":["Tu dirección XMPP y/o tu contraseña no es correcta. Por favor, inténtalo de nuevo."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Lo sentimos, no pudimos conectarnos al servidor XMPP con el dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["El servidor XMPP no ofreció un mecanismo de autenticación soportado"],"Sorry, could not determine upload URL.":["Lo sentimos, no se ha podido determinar la URL de subida."],"Sorry, could not determine file upload URL.":["Lo sentimos, no se pudo determinar la URL de subida de archivos."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Lo sentimos, no se ha podido subir el archivo con éxito. La respuesta de tu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Lo sentimos, no se ha podido subir el archivo con éxito."],"Sorry, looks like file upload is not supported by your server.":["Lo sentimos, parece que tu servidor no soporta la subida de archivos."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["El tamaño del archivo, %1$s, excede el máximo permitido por tu servidor, que es %2$s."],"Smileys and emotions":["Smileys y emoticonos"],"People":["Personas"],"Activities":["Actividades"],"Travel":["Viajes"],"Objects":["Objectos"],"Animals and nature":["Animales y naturaleza"],"Food and drink":["Comida y bebida"],"Symbols":["Símbolos"],"Flags":["Banderas"],"Stickers":["Stickers"],"This groupchat is not anonymous":["Esta conversación en grupo no es anónima"],"This groupchat now shows unavailable members":["Esta conversación en grupo ahora muestra los miembros no disponibles"],"This groupchat does not show unavailable members":["Esta conversación en grupo no muestra los miembros no disponibles"],"The groupchat configuration has changed":["La configuración de la conversación en grupo ha cambiado"],"Groupchat logging is now enabled":["El registro de la conversación en grupo está ahora activado"],"Groupchat logging is now disabled":["El registro de la conversación en grupo está ahora desactivado"],"This groupchat is now no longer anonymous":["Esta conversación en grupo ya no es anónima"],"This groupchat is now semi-anonymous":["Esta conversación en grupo es ahora semi-anónima"],"This groupchat is now fully-anonymous":["Esta conversación en grupo es ahora completamente anónima"],"A new groupchat has been created":["Se ha creado una nueva conversación en grupo"],"Your nickname has been automatically set to %1$s":["Tu apodo ha sido establecido automáticamente como %1$s"],"Your nickname has been changed to %1$s":["Tu apodo ha sido cambiado a %1$s"],"You have been banned from this groupchat":["Has sido bloqueado de esta conversación en grupo"],"You have been kicked from this groupchat":["Has sido expulsado de esta conversación en grupo"],"You have been removed from this groupchat because of an affiliation change":["Has sido eliminado de esta conversación en gurpo debido a un cambio de afiliación"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Has sido eliminado de esta conversación en grupo debido a que la conversación cambió su configuración a solo miembros y tú no eres miembro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Has sido eliminado de esta conversación en grupo debido a que el servicio está apagándose"],"Your message was not delivered because you weren\'t allowed to send it.":["Tu mensaje no fue enviado porque no tienes permitido enviar mensajes."],"Your message was not delivered because you\'re not present in the groupchat.":["No se entregó tu mensaje porque no estás presente en la conversación en grupo."],"You\'re not allowed to register yourself in this groupchat.":["No se te permite ingresar en esta conversación en grupo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["No se te permite ingresar en esta conversación en grupo dado que es solo para miembros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["No puede registrar tu apodo en esta conversación en grupo; no admite registros."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["No puedes registrar tu apodo en esta conversación en grupo; se han proporcionado datos no válidos."],"Topic set by %1$s":["Asunto fijado por %1$s"],"Topic cleared by %1$s":["Asunto limpiado por %1$s"],"%1$s has been banned by %2$s":["%1$s ha sido bloqueado por %2$s"],"%1$s has been banned":["%1$s ha sido bloqueado"],"%1$s\'s nickname has changed":["El apodo de %1$s ha cambiado"],"%1$s has been kicked out by %2$s":["%1$s ha sido expulsado por %2$s"],"%1$s has been kicked out":["%1$s ha sido expulsado"],"%1$s has been removed because of an affiliation change":["%1$s ha sido eliminado debido a un cambio de afiliación"],"%1$s has been removed for not being a member":["%1$s ha sido eliminado por no ser un miembro"],"%1$s is no longer an admin of this groupchat":["%1$s ya no es administrador de esta conversación en grupo"],"%1$s is no longer an owner of this groupchat":["%1$s ya no es propietario de esta conversación en grupo"],"%1$s is no longer banned from this groupchat":["%1$s ya no está bloqueado de esta conversación en grupo"],"%1$s is no longer a member of this groupchat":["%1$s ya no es miembro de esta conversación en grupo"],"%1$s is now a member of this groupchat":["%1$s es ahora miembro de esta conversación en grupo"],"%1$s is now an %2$s of this groupchat":["%1$s es ahora %2$s de esta conversación en grupo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["El apodo que elegiste está reservado o en uso actualmente, por favor, elige uno diferente."],"Password incorrect":["Contraseña incorrecta"],"You are not on the member list of this groupchat.":["No estás en la lista de miembros de esta conversación en grupo."],"You have been banned from this groupchat.":["Has sido bloqueado de esta conversación en grupo."],"You are not allowed to create new groupchats.":["No estás autorizado para crear nuevas conversación en grupo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Tu apodo no se ajusta a la normativa de esta conversación en grupo."],"This groupchat does not (yet) exist.":["Esta conversación en gurpo (aún) no existe."],"This groupchat has reached its maximum number of participants.":["Esta conversación en grupo ha alcanzado su número máximo de ocupantes."],"Remote server not found":["Servidor remoto no encontrado"],"The explanation given is: \\"%1$s\\".":["La razón dada es: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s te ha invitado a unirse a la conversación en grupo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s te ha invitado a ingresar a la conversación en grupo: %2$s, y dejó la siguiente razón: \\"%3$s\\""],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["Lo sentimos, algo salió mal mientras se trataba de guardar el marcador."],"Timeout Error":["Error de tiempo de espera"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["El servidor no devolvió tus marcadores en el tiempo establecido. Puedes recargar la página para realizar la petición de nuevo."],"My contacts":["Mis contactos"],"Pending contacts":["Contactos pendientes"],"Contact requests":["Solicitudes de contacto"],"Ungrouped":["Sin grupo"],"New messages":["Nuevos mensajes"],"Sorry, there was an error while trying to add %1$s as a contact.":["Lo sentimos, hubo un error intentando añadir a %1$s a tu lista de contactos."],"This client does not allow presence subscriptions":["Este cliente no permite las suscripciones presenciales"],"Click to hide these contacts":["Haz clic para ocultar estos contactos"],"Unbookmark this groupchat":["Quitar esta conversación en grupo de los marcadores"],"Click to open this groupchat":["Pulse para abrir esta conversación en grupo"],"Click to toggle the bookmarks list":["Haz clic para alternar la lista de marcadores"],"Bookmarks":["Marcadores"],"Bookmark this groupchat":["Guardar esta conversación en grupo en los marcadores"],"Would you like this groupchat to be automatically joined upon startup?":["¿Le gustaría entrar automáticamente a esta conversación en grupo al inicio?"],"The name for this bookmark:":["El nombre para este marcador:"],"What should your nickname for this groupchat be?":["¿Cual debería ser su apodo para esta conversación en grupo?"],"Save":["Guardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["¿Confirma que quiere eliminar el marcador \\"%1$s\\"?"],"Unbookmark":["Eliminar de marcadores"],"Bookmark":["Añadir a marcadores"],"Close":["Cerrar"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Descargar archivo de audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Descargar archivo \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Versiones del mensaje"],"Retry":[""],"Uploading file:":["Subiendo archivo:"],"%1$s has removed this message":["%1$s ha eliminado este mensaje"],"This message has been edited":["Este mensaje ha sido editado"],"Show more":["Mostrar más"],"No message history available.":["No hay historial de mensajes disponible."],"Search results":["Resultados de la búsqueda"],"Search":["Búsqueda"],"Insert emojis":["Insertar un emoticono"],"Send the message":["Enviar el mensaje"],"Start a call":["Empezar una llamada"],"Message characters remaining":["Caracteres restantes del mensaje"],"Choose a file to send":["Elige un archivo para enviar"],"Click to write as a normal (non-spoiler) message":["Click para escribir un mensaje normal (no spoiler)"],"Click to write your message as a spoiler":["Click para escribir un mensaje de spoiler"],"The User\'s Profile Image":["Imagen de perfil del usuario"],"Trusted":["De confianza"],"Untrusted":["No es de confianza"],"OMEMO Fingerprints":["Huellas digitales OMEMO"],"No OMEMO-enabled devices found":["No se han encontrado dispositivos habilitados para OMEMO"],"Remove as contact":["Eliminar de tu lista de contactos"],"XMPP Address":["Dirección XMPP"],"Email":["Correo electrónico"],"Full Name":["Nombre completo"],"Nickname":["Apodo"],"Refresh":["Actualizar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s está escribiendo"],"%1$s has stopped typing":["%1$s ha parado de escribir"],"%1$s has gone away":["%1$s se ha marchado"],"Remove messages":["Eliminar mensajes"],"Close this chat":["Cerrar esta conversación"],"Write in the third person":["Escribir en tercera persona"],"Show this menu":["Mostrar este menú"],"Hidden message":["Mensaje oculto"],"Message":["Mensaje"],"Optional hint":["Pista opcional"],"You have unread messages":["Tienes mensajes sin leer"],"Details":["Detalles"],"See more information about this person":["Mostrar más información de esta persona"],"Close and end this conversation":["Cerrar y terminar esta conversación"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tenga en cuenta que otros clientes (y servidores) de XMPP/Jabber pueden no soportar aún la funcionalidad de retractarse y que este mensaje puede no ser eliminado en todas partes."],"Are you sure you want to retract this message?":["¿Estás seguro de que quieres retractarte de este mensaje?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Se perderá el mensaje no enviado. ¿Confirmas que quieres continuar?"],"Are you sure you want to clear the messages from this conversation?":["¿Estás seguro de que quieres limpiar los mensajes de esta conversación?"],"%1$s has gone offline":["%1$s se ha desconectado"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está conectado"],"Sorry, something went wrong while trying to refresh":["Lo sentimos, algo salió mal mientras se trataba de actualizar"],"Are you sure you want to remove this contact?":["¿Estás seguro de que quieres eliminar este contacto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Lo sentimos, hubo un error mientras se trataba de eliminar a %1$s de tu lista de contactos."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para mejorar el rendimiento, guardamos tus datos en la caché del navegador. Desmarca esta opción si este es un ordenador público o si quieres que tus datos sean borrados cuando te desconectes. Es importante que cierres la sesión explícitamente, de lo contrario podrían no borrarse todos los datos almacenados en la caché. Por favor, ten en cuenta que cuando estés usando un dispositivo que no es de confianza, el cifrado OMEMO no está disponible."],"This is a trusted device":["Este es un dispositivo de confianza"],"Password":["Contraseña"],"Create an account":["Crear una cuenta"],"Don\'t have a chat account?":["¿No tienes una cuenta?"],"Log in":["Iniciar sesión"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Haz clic aquí para iniciar sesión de forma anónima"],"Username":["Nombre de usuario"],"user@domain":["usuario@dominio"],"Please enter a valid XMPP address":["Por favor, introduce una dirección XMPP válida"],"Chat Contacts":["Contactos"],"Toggle chat":["Alternar contactos"],"Click to restore this chat":["Haz clic para recuperar esta conversación"],"Minimized":["Minimizado"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar esta conversación"],"Minimize this groupchat":["Minimizar esta conversación en grupo"],"This user is a moderator.":["Este usuario es un moderador."],"This user can send messages in this groupchat.":["Este usuario puede enviar mensajes en esta conversación en grupo."],"This user can NOT send messages in this groupchat.":["Este usuario NO puede enviar mensajes en esta conversación en grupo."],"Owner":["Propietario"],"Admin":["Administrador"],"Member":["Miembro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Haz clic para mencionar a %1$s en tu mensaje."],"Participants":["Participantes"],"This field is required":["Este campo es requerido"],"Join":["Unirse"],"Enter a new Groupchat":["Entrar en una nueva conversación en grupo"],"name@conference.example.org":["nombre@conferencia.ejemplo.org"],"Groupchat name":["Nombre de la conversación en grupo"],"Groupchat address":["Dirección de la conversación en grupo"],"Groupchat id is invalid.":["El identificador de esta conversación es inválido."],"Invite":["Invitar"],"Invite someone to this groupchat":["Invitar a alguien a esta conversación en grupo"],"user@example.org":["usuario@ejemplo.org"],"Optional reason for the invitation":["Razón para la invitación (opcional)"],"Show groupchats":["Mostrar conversaciones en grupo"],"Server address":["Dirección del servidor"],"Show more information on this groupchat":["Mostrar más información de esta conversación en grupo"],"Query for Groupchats":["Buscar una conversación en grupo"],"Description:":["Descripción:"],"Groupchat Address (JID):":["Dirección de la conversación en grupo (JID):"],"Participants:":["Participantes:"],"Features:":["Características:"],"Requires authentication":["Autenticación requerida"],"Hidden":["Oculto"],"Requires an invitation":["Requiere una invitación"],"Moderated":["Moderado"],"Non-anonymous":["No anónimo"],"Open":["Abierta"],"Permanent":["Permanente"],"Public":["Pública"],"Semi-anonymous":["Semi-anónima"],"Temporary":["Temporal"],"Unmoderated":["Sin moderar"],"conference.example.org":["conferencia.ejemplo.org"],"No groupchats found":["No se ha encontrado ninguna conversación en grupo"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Los Moderadores son usuarios privilegiados que pueden cambiar los roles de otros usuarios (excepto aquellos que son administradores o propietarios)."],"The default role, implies that you can read and write messages.":["El rol por defecto, implica que pueden leer y escribir mensajes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Los visitantes no pueden escribir mensajes en una conversación en grupo moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Propietario es la máxima afiliación. Los propietarios pueden modificar roles y afiliaciones de otros usuarios."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administrador es la segunda máxima afiliación. Los administradores pueden modificar roles y afiliaciones para todos los usuarios excepto a propietarios."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para prohibir a un usuario, debes cambiar su afiliación a \\"marginado\\"."],"Change role":["Cambiar rol"],"New Role":["Nuevo Rol"],"Reason":["Razón"],"Change affiliation":["Cambiar afiliación"],"New affiliation":["Nueva afiliación"],"Affiliation":["Afiliación"],"Moderator Tools":["Herramientas del moderador"],"No users with that affiliation found.":["No se han encontrado usuarios con esa afiliación."],"No users with that role found.":["No se encontraron usuarios con ese rol."],"Type here to filter the search results":["Escribe aquí para filtrar los resultados de la búsqueda"],"Show users":["Mostrar usuarios"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Los Roles son asignados a los usuarios para permitir o denegarles ciertas habilidades en las conversaciones en grupo. Estos son asignados explícitamente o implícitamente como parte de su afiliación. Un rol que no tiene afiliación, es solo válido mientras dure la sesión del usuario."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliación es un derecho de larga duración que normalmente implica un cierto role que otorga privilegios y responsabilidades. Por ejemplo, los administradores y los propietarios automáticamente tiene el rol de moderador."],"Sorry, something went wrong while trying to set the affiliation":["Lo sentimos, algo salió mal mientras se trataba de cambiar la afiliación"],"Affiliation changed":["Afiliación cambiada"],"Role changed":["Rol cambiado"],"You\'re not allowed to make that change":["No estás autorizado para hacer este cambio"],"Sorry, something went wrong while trying to set the role":["Lo sentimos, algo salió mal mientras se trataba de cambiar el rol"],"Topic":["Asunto"],"Topic author":["Autor del asunto"],"Groupchat address (JID)":["Dirección de la conversación en grupo (JID)"],"Message archiving":["Archivado de mensajes"],"Messages are archived on the server":["Los mensajes son archivados en el servidor"],"Description":["Descripción"],"Features":["Características"],"This groupchat is not publicly searchable":["Esta conversación en grupo no es pública"],"This groupchat is restricted to members only":["Esta conversación en grupo está restringida solamente a miembros"],"Members only":["Solo miembros"],"Participants entering this groupchat need to request permission to write":["Los participantes en esta conversación en grupo necesitan pedir permiso para escribir"],"Name":["Nombre"],"This groupchat does not require a password upon entry":["Esta conversación en grupo no requiere contraseña para la entrada"],"No password required":["No se requiere contraseña"],"Not anonymous":["No anónima"],"All other groupchat participants can see your XMPP address":["Todos los participantes de la conversación pueden ver su dirección XMPP"],"Not moderated":["No moderada"],"Participants entering this groupchat can write right away":["Los participantes en esta conversación en grupo pueden escribir directamente"],"Online users":["Usuarios en línea"],"Anyone can join this groupchat":["Cualquiera puede unirse a esta conversación en grupo"],"This groupchat requires a password before entry":["Esta conversación en grupo requiere una contraseña para entrar"],"Password protected":["Protegido con contraseña"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Esta conversación en grupo persiste incluso si está desocupada"],"Only moderators can see your XMPP address":["Sólo los moderadores pueden ver tu dirección XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversación en grupo desaparecerá una vez que la última persona la abandone"],"This groupchat is publicly searchable":["Esta conversación en grupo es pública"],"Groupchat info for %1$s":["Información de la conversación en grupo %1$s"],"You\'re not allowed to send messages in this room":["No tiene permitido enviar mensajes en esta sala"],"The conversation has moved. Click below to enter.":["La conversación se ha movido. Haz clic debajo para entrar."],"This groupchat no longer exists":["Esta conversación en grupo ya no existe"],"Hide the groupchat topic":["Ocultar el asunto de la conversación"],"This groupchat is bookmarked":["Esta conversación está en los marcadores"],"Enter groupchat":["Entrar en la conversación en grupo"],"Choose a nickname to enter":["Elige un alias para entrar"],"Please choose your nickname":["Por favor, elige un apodo"],"This groupchat requires a password":["Esta conversación en grupo requiere una contraseña"],"Password: ":["Contraseña: "],"Submit":["Enviar"],"%1$s has entered the groupchat":["%1$s ha entrado en la conversación en grupo"],"%1$s has left the groupchat":["%1$s ha dejado la conversación en grupo"],"%1$s is now a moderator":["%1$s es ahora un moderador"],"%1$s is no longer a moderator":["%1$s ya no es moderador"],"%1$s has been given a voice":["A %1$s le han permitido voz"],"%1$s has been muted":["%1$s ha sido silenciado"],"%1$s and %2$s":["%1$s y %2$s"],"%1$s are typing":["%1$s están escribiendo"],"%1$s have stopped typing":["%1$s han parado de escribir"],"%1$s have gone away":["%1$s se han marchado"],"%1$s have entered the groupchat":["%1$s han entrado en la conversación"],"%1$s have left the groupchat":["%1$s han dejado la conversación"],"Change user\'s affiliation to admin":["Cambiar la afiliación del usuario a administrador"],"Ban user by changing their affiliation to outcast":["Expulse usuarios cambiando su afiliación a \\"rechazado\\""],"Clear the chat area":["Vaciar el área de conversación"],"Close this groupchat":["Cerrar esta conversación"],"Change user role to participant":["Cambiar rol del usuario a participante"],"Remove this groupchat":["Eliminar esta conversación en grupo"],"Kick user from groupchat":["Expulsar al usuario de esta conversación en grupo"],"Write in 3rd person":["Escribir en tercera persona"],"Grant membership to a user":["Conceder membresía a un usuario"],"Opens up the moderator tools GUI":["Abre las herramientas del moderador"],"Remove user\'s ability to post messages":["Eliminar la posibilidad de que el usuario pueda publicar mensajes"],"Change your nickname":["Cambiar tu apodo"],"Grant moderator role to user":["Conceder rol de moderador al usuario"],"Grant ownership of this groupchat":["Conceder propiedad de esta conversación en grupo"],"Register your nickname":["Registra tu apodo"],"Revoke the user\'s current affiliation":["Revocar afiliación actual de usuario"],"Set groupchat subject":["Establecer asunto de la conversación en grupo"],"Set groupchat subject (alias for /subject)":["Establecer asunto de la conversación en grupo (equivalente a /subject)"],"Allow muted user to post messages":["Permitir a usuario silenciado publicar mensajes"],"You are about to retract this message.":["Estás a punto de retractarte de este mensaje."],"You may optionally include a message, explaining the reason for the retraction.":["Opcionalmente, puedes incluir un mensaje explicando el motivo de la retractación."],"Message Retraction":["Retractación del mensaje"],"Optional reason":["Razón (opcional)"],"Sorry, you\'re not allowed to retract this message":["Lo sentimos, no tienes permisos para retractarte de este mensaje."],"A timeout occurred while trying to retract the message":["Se produjo un error de tiempo excedido mientras se intentaba retractar el mensaje"],"Sorry, you\'re not allowed to retract this message.":["Lo sentimos, no tienes permisos para retractarte de este mensaje."],"Show more information about this groupchat":["Mostrar más información de esta conversación"],"Configure":["Configurar"],"Configure this groupchat":["Configurar esta conversación en grupo"],"Invite someone to join this groupchat":["Invitar a algiuen para que se una a esta conversación en grupo"],"Show topic":["Mostrar asunto"],"Hide topic":["Ocultar asunto"],"Show the topic message in the heading":["Muestra el asunto del mensaje en la cabecera"],"Hide the topic in the heading":["Ocultar el asunto en la cabecera"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar esta conversación en grupo"],"Destroy":["Destruir"],"Leave":["Salir"],"Leave and close this groupchat":["Salir y cerrar esta conversación"],"Are you sure you want to leave this groupchat?":["¿Confirmas que quieres abandonar esta conversación en grupo?"],"Hide the list of participants":["Ocultar la lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibido: no tienes el rol necesario para hacer eso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibido: no tienes la afiliación necesaria para hacer eso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error: el comando \\"%1$s\\" toma dos argumentos, el apodo del usuario y la razón de forma opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error: no se encontró ningún participante en la conversación en grupo según sus argumentos"],"Error: found multiple groupchat participant based on your arguments":["Error: se encontraron varios participantes en la conversación en grupo según sus argumentos"],"Sorry, an error happened while running the command.":["Lo sentimos, algo salió mal mientras se ejecutaba el comando."],"Check your browser\'s developer console for details.":["Comprueba la consola de desarrollador del navegador para más detalles."],"Are you sure you want to destroy this groupchat?":["¿Confirmas que quieres destruir esta conversación en grupo?"],"name@example.org":["usuario@ejemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Tu apodo es \\"%1$s\\""],"Error: invalid number of arguments":["Error: número de argumentos inválido"],"This action was done by %1$s.":["Esta acción fue hecha por %1$s."],"The reason given is: \\"%1$s\\".":["La razón dada es: %1$s."],"Groupchats":["Conversaciones en grupo"],"Add a new groupchat":["Añadir nueva conversación en grupo"],"Query for groupchats":["Búsqueda de conversaciones en grupo"],"Sorry, an error occurred while trying to submit the config form.":["Lo sentimos, ocurrió un error mientras se intentaba enviar el formulario de configuración."],"Close these announcements":["Cerrar estos anuncios"],"Announcements":["Anuncios"],"Click to open this server message":["Pulsa para abrir este mensaje del servidor"],"Notification from %1$s":["Notificación de %1$s"],"%1$s says":["%1$s dice"],"has gone offline":["se ha desconectado"],"has gone away":["se ha marchado"],"is busy":["está ocupado"],"has come online":["se ha conectado"],"wants to be your contact":["quiere añadirte a su lista de contactos"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Acerca de"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Software Libre %2$s Cliente de mensajería XMPP traído para ti por %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduce %2$s en tu propio idioma"],"Log out":["Desconectarse"],"Click to change your chat status":["Haz clic para cambiar tu estado"],"Show details about this chat client":["Mostrar más detalles sobre este cliente de mensajería"],"Your avatar image":["Tu imagen de perfil"],"Checkbox for selecting the following fingerprint":["Casilla para seleccionar las siguientes huellas digitales"],"Device without a fingerprint":["Dispositivo sin huella digital"],"Other OMEMO-enabled devices":["Otros dispositivos habilitados para OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Casilla para seleccionar las huellas digitales de otros dispositivos OMEMO"],"Remove checked devices and close":["Eliminar los dispositivos seleccionados y cerrar"],"Select all":["Seleccionar todo"],"This device\'s OMEMO fingerprint":["Huella digital OMEMO de este dispositivo"],"Generate new keys and fingerprint":["Generar nuevas claves y huella digital"],"Your Profile":["Tu Perfil"],"XMPP Address (JID)":["Dirección XMPP (JID)"],"Save and close":["Guardar y cerrar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Usa comas para separar múltiples roles. Tus roles se muestran junto a tu nombre en tus mensajes."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Lo sentimos, algo salió mal mientras se trataba de guardar tus datos de perfil."],"You can check your browser\'s developer console for any error output.":["Puedes comprobar cualquier error en la consola de desarrollador del navegador."],"Away":["Ausente"],"Busy":["Ocupado"],"Custom status":["Estado personalizado"],"Offline":["Desconectado"],"Online":["En línea"],"Away for long":["Ausente por mucho tiempo"],"Change chat status":["Cambiar tu estado"],"Personal status message":["Mensaje personal de estado"],"I am %1$s":["Estoy %1$s"],"Are you sure you want to log out?":["¿Estás seguro de que quieres salir?"],"online":["en línea"],"busy":["ocupado"],"away for long":["ausente por mucho tiempo"],"away":["ausente"],"offline":["desconectado"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Lo sentimos, no se puede descifrar un mensaje OMEMO recibido debido a un error."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s no parece tener un cliente que soporte OMEMO. El cifrado ya no será posible en esta conversación en grupo."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["No se puede usar cifrado punto a punto porque %1$s usa un cliente que no soporta OMEMO."],"Messages are being sent in plaintext":["Los mensajes se envían en texto plano"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Lo sentimos, no se puede enviar el mensaje cifrado porque %1$s requiere que estés suscrito a sus actualizaciones de presencia para ver su información OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Lo sentimos, no se puede enviar el mensaje cifrado porque el servidor remoto para %1$s no se ha encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Lo sentimos, no se puede enviar el mensaje debido a un error."],"Sorry, an error occurred while trying to remove the devices.":["Lo sentimos, ocurrió un error mientras se eliminaban los dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["¿Estás seguro que quieres generar nuevas claves OMEMO? Esto eliminará tus antiguas claves y todos los mensajes previamente cifrados no serán legibles en este dispositivo."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["No se encontró ningún dispositivo compatible con mensajes cifrados de OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esto es un mensaje cifrado con OMEMO el cual tu cliente parece no soportar. Encuentra más información en https://conversations.im/omemo"]," e.g. conversejs.org":[" ej. conversejs.org"],"Fetch registration form":["Recuperar formulario de registro"],"Tip: A list of public XMPP providers is available":["Consejo: Hay una lista de proveedores públicos de XMPP disponible"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Lo sentimos, no hemos podido conectarnos con tu proveedor elegido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Lo sentimos, el proveedor dado no soporta registro de cuentas. Por favor, inténtalo con otro proveedor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo salió mal mientras se establecía la conexión con \\"%1$s\\". ¿Estás seguro de que existe?"],"Now logging you in":["Iniciando ahora"],"Registered successfully":["Registrado exitosamente"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["El proveedor rechazó tu intento de registro. Por favor, revisa que los valores que ingresaste sean correctos."],"Leave this groupchat":["Salir de esta conversación en grupo"],"Click to toggle the list of open groupchats":["Haz clic para alternar la lista de conversaciones en grupo"],"Open Groupchats":["Conversaciones en grupo abiertas"],"Are you sure you want to leave the groupchat %1$s?":["¿Confirmas que quieres abandonar la conversación en grupo %1$s?"],"Add":["Añadir"],"Add a Contact":["Agregar un contacto"],"This contact is busy":["Este contacto está ocupado"],"This contact is online":["Este contacto está en línea"],"This contact is offline":["Este contacto está desconectado"],"This contact is unavailable":["Este contacto no está disponible"],"This contact is away for an extended period":["Este contacto está ausente por un largo periodo de tiempo"],"This contact is away":["Este contacto está ausente"],"Contact name":["Nombre de contacto"],"Optional nickname":["Apodo opcional"],"Sorry, could not find a contact with that name":["Lo sentimos. no se pudo encontrar ningún contacto con ese nombre"],"This contact has already been added":["Este contacto ya ha sido añadido"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar por nombre de contacto"],"Filter by group name":["Filtrar por nombre de grupo"],"Filter by status":["Filtrar por estado"],"Any":["Cualquier"],"Unread":["Sin leer"],"Chatty":["Hablador"],"Extended Away":["Ausencia extendida"],"Click to remove %1$s as a contact":["Haz clic para eliminar a %1$s de tu lista de contactos"],"Click to accept the contact request from %1$s":["Haz clic para aceptar la solicitud de contacto %1$s"],"Click to decline the contact request from %1$s":["Haz clic para rechazar la solicitud de contacto %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Haz clic para conversar con %1$s (Dirección XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["¿Estás seguro de que quieres rechazar esta solicitud de contacto?"],"Contacts":["Contactos"],"Add a contact":["Agregar un contacto"],"Re-sync your contacts":["Re-sincronizar tus contactos"]}}}')}}]);
 //# sourceMappingURL=es-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/eu-LC_MESSAGES-converse-po.js b/src/conversejs/locales/eu-LC_MESSAGES-converse-po.js
index abc32ff96457a1a402554b33ef5d73451c1cf126..ddfceebbbe5f21fcbdbe349e642c5d27b209a007 100644
--- a/src/conversejs/locales/eu-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/eu-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[150],{428:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"eu"},"Create your account":["Zure kontua sortu"],"Please enter the XMPP provider to register with:":["Mesedez sartu XMPP hornitzailea:"],"Already have a chat account?":["Baduzu txat konturik?"],"Log in here":["Hasi saioa hemen"],"Account Registration:":["Kontu erregistroa:"],"Register":["Erregistratu"],"Choose a different provider":["Hornitzaile ezberdin bat aukeratu"],"Hold tight, we\'re fetching the registration form…":["Itxaron, erregistro formularioa eskuratzen ari gara…"],"Cancel":["Utzi"],"The connection has dropped, attempting to reconnect.":["Konexioa galdu egin da, birkonektatzen saiatzen."],"An error occurred while connecting to the chat server.":["Akats bat izan da txat zerbitzariarekin konektatzean."],"Your XMPP address and/or password is incorrect. Please try again.":["Zure XMPP ID-a/edo pasahitza ez dira zuzenak. Mesedez saiatu berriro."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Barkatu, ezin izan dugu XMPP ostalarira konektatu %1$s domeinuarekin"],"The XMPP server did not offer a supported authentication mechanism":["XMPP zerbitzariak ez du lagunduriko autentikazio mekanismorik eskaintzen"],"Sorry, could not determine upload URL.":["Barkatu, ezin izan da igoera URL-a zehaztu."],"Sorry, could not determine file upload URL.":["Barkatu, ezin izan da fitxategi igotzeko URL-a zehaztu."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Ezin izan da zure fitxategia igo. Zure zerbitzariaren erantzuna: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Barkatu, ezin izan da zure fitxategia behar bezala igo."],"Sorry, looks like file upload is not supported by your server.":["Barkatu, badirudi zure zerbitzariak ez duela fitxategi igoera onartzen."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Zure fitxategiaren neurriak, %1$s, zure zerbitzariak gehienez onarturiko muga( %2$s ) gainditzen du."],"Smileys and emotions":["Smiley eta emotikonoak"],"People":["Pertsonak"],"Activities":["Jarduerak"],"Travel":["Bidaia"],"Objects":["Objektu"],"Animals and nature":["Animaliak eta natura"],"Food and drink":["Janaria eta edaria"],"Symbols":["Sinboloak"],"Flags":["Banderak"],"Stickers":["Eranskailuak"],"This groupchat is not anonymous":["Gela hau ez da erabiltzaile anonimoentzat"],"This groupchat now shows unavailable members":["Gela honek orain kide eskuragaitzak erakusten ditu"],"This groupchat does not show unavailable members":["Gela honek ez ditu kide eskuragaitzak erakusten"],"The groupchat configuration has changed":["Gelaren ezarpenak aldatu egin dira"],"Groupchat logging is now enabled":["Talde-elkarrizketan izen ematea gaituta dago orain"],"Groupchat logging is now disabled":["Talde-elkarrizketan izen ematea desgaituta dago orain"],"This groupchat is now no longer anonymous":["dagoeneko gela hau ez da anonimoa"],"This groupchat is now semi-anonymous":["gela hau orain erdi-anonimoa da orain"],"This groupchat is now fully-anonymous":["gela hau orain erabat anonimoa da"],"A new groupchat has been created":["Gela berri bat sortu da"],"Your nickname has been automatically set to %1$s":["Zure ezizena %1$s bezala ezarria izan da automatikoki"],"Your nickname has been changed to %1$s":["Zure ezizena %1$s -ra aldatua izan da"],"You have been banned from this groupchat":["Gela honetan debekatua  izan zara"],"You have been kicked from this groupchat":["Gela honetatik kanporatua  izan zara"],"You have been removed from this groupchat because of an affiliation change":["Gela honetatik ezabatua izan zara afiliazio aldaketa bat dela eta"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Gela honetatik ezabatua izan zara gelako sarbidea kideentzako soilik ezarri delako eta zu ez zara kidea"],"You have been removed from this groupchat because the service hosting it is being shut down":["Gela honetatik ezabatua izan zara zerbitzuaren ostatatzea itxi egingo delako"],"Your message was not delivered because you weren\'t allowed to send it.":["Zure mezua ez da bidali, bidaltzeko baimenik ez duzulako."],"Your message was not delivered because you\'re not present in the groupchat.":["Zure mezua ez da bidali ez zaudelako talde elkarrizketan orain."],"You\'re not allowed to register yourself in this groupchat.":["Ez duzu baimenik zure burua gela honetan erregistratzeko."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Ez duzu baimenik zure burua gela honetan erregistratzeko kideentzako bakarrik delako."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Ezin da zure ezizena gela honetan erregistratu, ez du erregistratzea onartzen."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Ezin da zure ezizena gela honetan erregistratu, datu formulario baliogabea eman da."],"Topic set by %1$s":["%1$s -k ezarritako gaia"],"Topic cleared by %1$s":["%1$s erabiltzaileak mintzagaia garbitu du"],"%1$s has been banned":["%1$s bidalia izan da"],"%1$s\'s nickname has changed":["%1$s -(r)en ezizena aldatu egin da"],"%1$s has been kicked out":["%1$s bidalia izan da"],"%1$s has been removed because of an affiliation change":["%1$s ezabatua izan da afiliazio aldaketa bat dela eta"],"%1$s has been removed for not being a member":["%1$s ezabatua izan da kidea ez delako"],"%1$s is no longer an admin of this groupchat":["%1$s ez da jada gela honetako administratzailea"],"%1$s is no longer an owner of this groupchat":["%1$s ez da jada gela honetako jabeetako bat"],"%1$s is no longer banned from this groupchat":["%1$s ez dago jada gela honetan debekatua"],"%1$s is no longer a member of this groupchat":["%1$s ez da jada gela honetako partaide"],"%1$s is now a member of this groupchat":["%1$s orain gela honetako kidea da"],"%1$s is now an %2$s of this groupchat":["%1$s orain berriketa honetako %2$s da"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Aukeratutako ezizena erreserbatuta dago edo erabiltzen ari da une honetan, aukeratu beste bat."],"Password incorrect":["Pasahitza ez da zuzena"],"You are not on the member list of this groupchat.":["Ez zaude gela honetako kideen zerrendan."],"You have been banned from this groupchat.":["Gela honetatik debekatua izan zara."],"You are not allowed to create new groupchats.":["Ez duzu baimenik gela berriak sortzeko."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Zure ezizenak ez ditu gela honetako arauak betetzen."],"This groupchat does not (yet) exist.":["Gela hau ez da existitzen (oraindik)."],"This groupchat has reached its maximum number of participants.":["Gela hau gehienezko parte-hartzaile  kopurura iritsi da."],"Remote server not found":["Ez da urruneko zerbitzaria aurkitu"],"The explanation given is: \\"%1$s\\".":["Emandako arrazoia ondorengoa da: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s erabiltzaileak %2$s gelara gonbidatu zaitu"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s erabiltzaileak %2$s gelara elkartzera gonbidatu zaitu, eta ondorengo arrazoia eman du: \\"%3$s\\""],"Error":["Errorea"],"Sorry, something went wrong while trying to save your bookmark.":["Barkatu, zerbaitek huts egin du zure laster-marka gordetzerakoan."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Nere kontaktuak"],"Pending contacts":["Zain dauden kontaktuak"],"Contact requests":["Kontaktu eskaerak"],"Ungrouped":["Sailkatu gabe"],"Sorry, there was an error while trying to add %1$s as a contact.":["Barkatu, akats bat izan da %1$s kontaktu moduan gehitzean."],"This client does not allow presence subscriptions":["Bezero honek ez du onartzen aurrez aurreko harpidetzarik"],"Click to hide these contacts":["Klikatu kontaktu hauek ezkutatzeko"],"Unbookmark this groupchat":["Kendu gela hau laster-marketatik"],"Click to open this groupchat":["Klikatu gela hau irekitzeko"],"Click to toggle the bookmarks list":["Klikatu laster-marka zerrenda ordezkatzeko"],"Bookmarks":["Laster-markak"],"Bookmark this groupchat":["Egin gela honen laster-marka"],"Would you like this groupchat to be automatically joined upon startup?":["Gela honetan automatikoki sartu nahiko zenuke abioan?"],"The name for this bookmark:":["Laster-marka honen izena:"],"What should your nickname for this groupchat be?":["Zein izango litzateke gela honetarako zure ezizena?"],"Save":["Gorde"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ziur al zaude \\"%1$s\\" laster-marka ezabatu nahi duzula?"],"Close":["Itxi"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Deskargatu audio fitxategia \\"%1$s\\""],"Download file \\"%1$s\\"":["Deskargatu fitxategia: \\"%1$s"],"Edit":[""],"Retract":[""],"Message versions":["Mezuaren bertsioak"],"Retry":[""],"Uploading file:":["Fitxategia igotzen:"],"This message has been edited":["Mezu hau editatu da"],"Show more":["Gehiago erakutsi"],"No message history available.":[""],"Search results":["Bilaketa emaitzak"],"Search":["Bilatu"],"Insert emojis":["Emojiak txertatu"],"Send the message":["Bidali mezua"],"Start a call":["Dei bat hasi"],"Choose a file to send":["Aukeratu bidaltzeko fitxategia"],"Click to write as a normal (non-spoiler) message":["Klikatu mezua ohiko moduan idazteko"],"Click to write your message as a spoiler":["Klikatu zure mezua iragarki moduan idazteko"],"The User\'s Profile Image":["Erabiltzailearen profileko argazkia"],"Trusted":["Fidagarria"],"Untrusted":["Ez fidagarria"],"OMEMO Fingerprints":["OMEMO hatz-markak"],"Remove as contact":["Kendu kontaktuetatik"],"XMPP Address":["XMPP Helbidea"],"Email":["Emaila"],"Full Name":["Izen osoa"],"Nickname":["Ezizena"],"Refresh":["Freskatu"],"Role":["Rola"],"URL":["URLa"],"%1$s is typing":["%1$s idazten ari da"],"%1$s has stopped typing":["%1$s idazteari utzi dio"],"%1$s has gone away":["%1$s joan egin da"],"Remove messages":["mezuak ezabatu"],"Write in the third person":["Hirugarrengo pertsonan idatzi"],"Show this menu":["Menu hau erakutsi"],"Hidden message":["Ezkutuko mezua"],"Message":["Mezua"],"Optional hint":["Aukerako haztarna"],"You have unread messages":["Irakurri gabeko mezuak dituzu"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Ziur al zaude elkarrizketa honetako mezuak ezabatu nahi dituzula?"],"%1$s has gone offline":["%1$s deskonektatu egin da"],"%1$s is busy":["%1$s lanpeturik dago"],"%1$s is online":["%1$s linean dago"],"Sorry, something went wrong while trying to refresh":["Barkatu, zerbaitek huts egin du zure laster-marka gordetzerakoan"],"Are you sure you want to remove this contact?":["Ziur al zaude kontaktu hau ezabatu nahi duzula?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Barkatu, akats bat izan da %1$s kontaktu moduan ezabatzean."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Errendimendua hobetzeko, zure datuak nabigatzaile honen cachean gordetzen dira. Desmarkatu hau ordenagailua publikoa bada edo saioa amaitzean datuak ezabatzea nahiago baduzu. Saioa esplizituki amaitzea ezinbestekoa da, bestela agian ez dira datu guztiak ezabatuko."],"This is a trusted device":["Hau gailu fidagarri bat da"],"Create an account":["Sortu kontu bat"],"Don\'t have a chat account?":["Ez duzu txat konturik?"],"Log in":["Hasi saioa"],"Disconnected":[""],"Click here to log in anonymously":["Klikatu hemen saioa anonimoki hasteko"],"Username":["Erabiltzaile izena"],"user@domain":["erabiltzailea@domeinua"],"Please enter a valid XMPP address":["Mesedez sar ezazu baleko XMPP helbide bat"],"Chat Contacts":["Txat kontaktuak"],"Toggle chat":["Txata gaitu"],"Click to restore this chat":["Klikatu txat hau berrezartzeko"],"Minimized":["Minimizaturik"],"This field is required":["Eremu hau beharrezkoa da"],"Join":["Batu"],"Enter a new Groupchat":["Sartu gela berri batean"],"name@conference.example.org":["izena@conference.example.org"],"Groupchat name":["Talde elkarrizketaren izena"],"Groupchat address":["Gelaren helbidea"],"Invite":["Gonbidatu"],"Show groupchats":["Erakutsi gelak"],"Server address":["Zerbitzariaren helbidea"],"Show more information on this groupchat":["Erakutsi gela honi buruzko informazio gehiago"],"Query for Groupchats":["Bilatu gelak"],"Description:":["Deskribapena:"],"Groupchat Address (JID):":["Gelaren helbidea (JID):"],"Participants:":["Parte-hartzaileak:"],"Features:":["Ezaugarriak:"],"Requires authentication":["Autentifikazioa behar da"],"Hidden":["Ezkutua"],"Requires an invitation":["Gonbidapena behar da"],"Moderated":["Moderatua"],"Non-anonymous":["Ez-anonimoa"],"Open":["Ireki"],"Permanent":["Iraunkorra"],"Public":["Publikoa"],"Semi-anonymous":["Erdi-anonimoa"],"Temporary":["Aldi baterako"],"Unmoderated":["Moderatu gabea"],"conference.example.org":["conference.example.org"],"No groupchats found":["Ez da gelarik aurkitu"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatzaileak pribilegiodun erabiltzaileak dira, beste erabiltzaile batzuen rolak alda ditzaketelarik.(administratzaile edo jabeenak izan ezik."],"The default role, implies that you can read and write messages.":["Lehenetsitako rolak, mezuak irakurri eta idatzi ditzakezula adierazten du."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Bisitariek ez dute baimenik moderaturiko erabiltzaile anitzeko berriketan mezurik idazteko."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["Rola aldatu"],"New Role":["Rol Berria"],"Reason":["Arrazoia"],"Change affiliation":["Aldatu afiliazioa"],"New affiliation":["Afiliazio berria"],"Affiliation":["Afiliazioa"],"Moderator Tools":["Moderatzaile tresnak"],"No users with that affiliation found.":["Ez da erabiltzailerik aurkitu afiliazio horrekin."],"No users with that role found.":["Ez da rol hori duen erabiltzailerik aurkitu."],"Type here to filter the search results":[""],"Show users":["Erabiltzaileak erakutsi"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rolak erabiltzaileei egokitzen zaizkie erabiltzaile anitzeko berriketetan hainbat gaitasun eman edo ukatzeko. Esplizituki edo inplizituki esleitzen dira afiliazioaren baitan. Afiliazio bati ez dagokion rolak, erabiltzailearen saioan zehar bakarrik balio du."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Mintzagaia"],"Topic author":["Mintzagaiaren egilea"],"Groupchat address (JID)":["Gelaren helbidea (JID)"],"Message archiving":["Mezu artxibaketa"],"Messages are archived on the server":["Mezuak zerbitzarian gordetzen dira"],"Description":["Deskribapena"],"Features":["Ezaugarriak"],"This groupchat is not publicly searchable":["Gela hau ezin da publikoki bilatua izan"],"This groupchat is restricted to members only":["Gela hau kideei soilik dagokie"],"Members only":["Kideak soilik"],"Participants entering this groupchat need to request permission to write":["Grla honetara sartzen diren kideek idazteko baimena eskatu behar dute"],"Name":["Izena"],"This groupchat does not require a password upon entry":["Gela honek ez du pasahitzik eskatzen sartzeko"],"No password required":["Ez da pasahitzik eskatzen"],"Not anonymous":["Ez-anonimoa"],"All other groupchat participants can see your XMPP address":["Gelako gainontzeko parte-hartzaileek zure XMPP erabiltzailea ikus dezakete"],"Not moderated":["Moderatu gabea"],"Participants entering this groupchat can write right away":["Gela honetara gehitzen diren kideek berehala idatz dezakete"],"Online users":["Erabiltzaileak linean"],"Anyone can join this groupchat":["Gela honetan edozein sartu daiteke"],"This groupchat requires a password before entry":["Gela honek pasahitza eskatzen du sartu ahal izateko"],"Password protected":["Pasahitzez babestua"],"Persistent":["Iraunkorra"],"This groupchat persists even if it\'s unoccupied":["Gela honek bere horretan jarraituko du hustu arren"],"Only moderators can see your XMPP address":["Moderatzaileek soilik ikus dezakete zure XMPP helbidea"],"This groupchat will disappear once the last person leaves":["Gela hau desagertu egingo da azken pertsonak uzten duen unean"],"This groupchat is publicly searchable":["Gela hau publikoki bilatua izan daiteke"],"Groupchat info for %1$s":["%1$s gelaren informazioa"],"You\'re not allowed to send messages in this room":["Ez duzu baimenik gela honetan mezuak bidaltzeko"],"The conversation has moved. Click below to enter.":["Elkarrizketa hau mugitua izan da. Klikatu azpian sartzeko."],"This groupchat no longer exists":["Talde berriketa hau jada ez da existitzen"],"Enter groupchat":["Elkartu gelara"],"Please choose your nickname":["Mesedez, aukeratu zure ezizena"],"This groupchat requires a password":["Txat gela honek pasahitza behar du"],"Password: ":["Pasahitza: "],"Submit":["Bidali"],"This user is a moderator.":["Erabiltzaile hau moderatzailea da."],"This user can send messages in this groupchat.":["Erabiltzaile honek mezuak bidal ditzake gela honetan."],"This user can NOT send messages in this groupchat.":["Erabiltzaile honek EZIN ditu mezuak bidali gela honetan."],"Owner":["Jabea"],"Admin":["Administratzailea"],"Member":["Kidea"],"Moderator":["Moderatzailea"],"Visitor":["Bisitaria"],"Click to mention %1$s in your message.":["Klikatu %1$s zure mezuan aipatzeko."],"Participants":["Parte-hartzaileak"],"%1$s has entered the groupchat":["%1$s gelara elkartu da"],"%1$s has left the groupchat":["%1$s gelatik atera da"],"%1$s is now a moderator":["%1$s orain moderatzailea da"],"%1$s is no longer a moderator":["%1$s jada ez da moderatzailea"],"%1$s has been given a voice":["%1$s -(e)k idatz dezake berriro"],"%1$s has been muted":["%1$s ezikusia izan da"],"Change user\'s affiliation to admin":["Aldatu erabiltzailearen afiliazioa administratzailera"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Ezarri erabiltzailearen rola parte-hartzaile gisa"],"Remove this groupchat":["Ezabatu chat talde hau"],"Kick user from groupchat":["Kanporatu erabiltzailea gelatik"],"Write in 3rd person":["3. pertsonan idatzi"],"Grant membership to a user":["Eman kidetza erabiltzaile bati"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Kendu mezuak argitaratzeko erabiltzailearen gaitasuna"],"Change your nickname":["Zure ezizena aldatu"],"Grant moderator role to user":["Eman moderatzaile rola erabiltzaileari"],"Grant ownership of this groupchat":["Eman gela honen jabetza"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Ezarri gelaren mintzagaia"],"Set groupchat subject (alias for /subject)":["Ezarri gelaren mintzagaia (/subject aginduaren aliasa)"],"Allow muted user to post messages":["Baimendu isilarazitako erabiltzaileari mezuak argitaratzea"],"Configure":[""],"Configure this groupchat":["Konfiguratu gela hau"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Ezkutatu parte-hartzaileen zerrena"],"Forbidden: you do not have the necessary role in order to do that.":["Debekatua: Ez duzu hori egiteko behar den rola."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Debekatua: Ez duzu hori egiteko behar den afiliazioa."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Akatsa: %1$s aginduak bi argumentu hartzen ditu, erabiltzailearen ezizena eta aukerako arrazoi bat."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["izena@adibidea.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Errorea: Argumentu kopuru baliogabea"],"This action was done by %1$s.":["Ekintza hau %1$s -k egina izan da."],"The reason given is: \\"%1$s\\".":["Emandako arrazoia ondorengoa da: \\"%1$s\\"."],"Groupchats":["Gelak"],"Add a new groupchat":["Gehitu gela berri bat"],"Query for groupchats":["Bilatu gelak"],"Announcements":[""],"Notification from %1$s":["%1$s -(r)en jakinarazpena"],"%1$s says":["%1$s -k dio"],"has gone offline":["deskonektatu egin da"],"has gone away":["joan egin da"],"is busy":["lanpeturik dago"],"has come online":["linean jarri da"],"wants to be your contact":["zure kontaktua izan nahi du"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Honi buruz"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Saioa itxi"],"Click to change your chat status":["Klikatu zure txat egoera aldatzeko"],"Your avatar image":["Zure abatarraren irudia"],"Checkbox for selecting the following fingerprint":["Hurrengo hatz-marka hautatzeko laukia"],"Device without a fingerprint":["Hatz-markarik gabeko gailua"],"Other OMEMO-enabled devices":["OMEMO gaiturik duten beste gailu batzuk"],"Checkbox to select fingerprints of all other OMEMO devices":["Beste OMEMO gailuen hatz-markak hautatzeko laukia"],"Remove checked devices and close":["Kendu markatutako gailuak eta itxi"],"Select all":["Hautatu guztiak"],"This device\'s OMEMO fingerprint":["Gailu honen OMEMO hatz-marka"],"Generate new keys and fingerprint":["Gako eta hatz-marka berriak sortu"],"Your Profile":["Zure profila"],"XMPP Address (JID)":["XMPP helbidea (JID)"],"Save and close":["Gorde eta itxi"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Banatu rolak komen bidez. Zure rolak izenaren ondoan agertzen dira txat mezuetan."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Errore bat gertatu da zure profileko datuak gordetzen saiatzean."],"You can check your browser\'s developer console for any error output.":["Zure nabigatzaileko garatzaile kontsolan egiaztatu dezakezu errorerik dagoen."],"Away":["Kanpoan"],"Busy":["Lanpetua"],"Custom status":["Egoera pertsonalizatua"],"Offline":["Deskonektaturik"],"Online":["Linean"],"Away for long":["Kanpoan denbora luzerako"],"Change chat status":["Txat egoera aldatu"],"Personal status message":["Egoera mezu pertsonala"],"I am %1$s":["%1$s nago"],"Are you sure you want to log out?":["Ziur al zaude saioa itxi nahi duzula?"],"online":["Linean"],"busy":["Lanpetua"],"away for long":["kanpoan denbora luzerako"],"away":["Kanpoan"],"offline":["deskonektatua"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Ezin izan da jasotako OMEMO mezu bat deszifratu errore bat dela eta."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["Badirudi %1$s -(e)k ez daukala OMEMO erabiltzeko gai den bezerorik. Ezingo da enkriptaturiko elkarrizketarik izan talde honetan."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Mezuak testu lauan bidaltzen dira"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Errore bat gertatu da gailuak kentzen saiatzean."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Ziur al zaude OMEMO gako berriak sortu nahi  dituzula? Honek zure gako zaharrak ezabatuko ditu eta aurretiaz enkriptaturiko mezu guztiak ezingo dira irakurri gailu honetan."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Barkatu, ez gara gai enkriptaturiko mezua bidaltzeko %1$s -(e)k beraien presentzia eguneraketetara izen emanda egotea behar duelako beraien OMEMO informazioa ikusi ahal izateko."],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Barkatu, ez gara gai enkriptaturiko mezua bidaltzeko %1$s -rentzako urruneko zerbitzaria ezin delako topatu."],"Unable to send an encrypted message due to an unexpected error.":["Ezin izan da mezua bidali errore bat dela eta."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Hau zifratutako OMEMO mezu bat da eta badirudi zure bezeroak ez duela onartzen. Gehiago jakiteko:  https://conversations.im/omemo"]," e.g. conversejs.org":[" adib. conversejs.org"],"Fetch registration form":["Erregistro formularioa eskuratu"],"Tip: A list of public XMPP providers is available":["Aholkua: XMPP hornitzaile publikoen zerrenda bat dago eskuragarri"],"here":["hemen"],"Sorry, we\'re unable to connect to your chosen provider.":["Barkatu, ezin izan dugu zuk aukeraturiko hornitzailera konektatu."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Barkatu, emandako hornitzaileak ez du banda kontuen erregistroa onartzen. Saiatu beste hornitzaile batekin."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Zerbait oker joan da \\"%1$s\\"-(r)ekin konexioa ezartzean. Ziur al zaude existitzen dela?"],"Now logging you in":["Orain saio hasten"],"Registered successfully":["Arrakastaz erregistratua"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Hornitzaileak zure izen emate saiakera ukatu du. Mesedez egiaztatu sartutako balioak zuzenak direla."],"Leave this groupchat":["Atera gela honetatik"],"Click to toggle the list of open groupchats":["Egin klik irekitako gelen zerrenda hedatu/tolesteko"],"Open Groupchats":["Irekitako gelak"],"Are you sure you want to leave the groupchat %1$s?":["Ziur al zaude %1$s gelatik atera nahi duzula?"],"Add":["Gehitu"],"Add a Contact":["Kontaktu bat gehitu"],"This contact is busy":["Kontaktu hau lanpeturik dago"],"This contact is online":["Kontaktu hau linean dago"],"This contact is offline":["Kontaktu hau lineaz kanpo dago"],"This contact is unavailable":["Kontaktu hau ez dago erabilgarri"],"This contact is away for an extended period":["Kontaktu hau kanpoan dago denbora luzez"],"This contact is away":["Kontaktu hau kanpoan dago"],"Contact name":["Kontaktu izena"],"Optional nickname":["Aukerako ezizena"],"Sorry, could not find a contact with that name":[""],"Filter":["Iragazi"],"Filter by contact name":["Kontaktu izenaz iragazi"],"Filter by group name":["Talde izenaz iragazi"],"Filter by status":["Egoeraren araberan iragazi"],"Any":["Edozein"],"Unread":["Irakurri gabe"],"Chatty":["Hitzduna"],"Extended Away":["Denbora luzez at"],"Click to remove %1$s as a contact":["Klikatu %1$s kontaktuetatik ezabatzeko"],"Click to accept the contact request from %1$s":["Klikatu %1$s -(r)en kontaktu eskaera onartzeko"],"Click to decline the contact request from %1$s":["Klikatu %1$s -(r)en kontaktu eskaera baztertzeko"],"Are you sure you want to decline this contact request?":["Ziur al,zaude kontaktu eskaera hau baztertu nahi duzula?"],"Contacts":["Kontaktuak"],"Add a contact":["Kontaktu bat gehitu"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[150],{516:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"eu"},"Create your account":["Zure kontua sortu"],"Please enter the XMPP provider to register with:":["Mesedez sartu XMPP hornitzailea:"],"Already have a chat account?":["Baduzu txat konturik?"],"Log in here":["Hasi saioa hemen"],"Account Registration:":["Kontu erregistroa:"],"Register":["Erregistratu"],"Choose a different provider":["Hornitzaile ezberdin bat aukeratu"],"Hold tight, we\'re fetching the registration form…":["Itxaron, erregistro formularioa eskuratzen ari gara…"],"Cancel":["Utzi"],"The connection has dropped, attempting to reconnect.":["Konexioa galdu egin da, birkonektatzen saiatzen."],"An error occurred while connecting to the chat server.":["Akats bat izan da txat zerbitzariarekin konektatzean."],"Your XMPP address and/or password is incorrect. Please try again.":["Zure XMPP ID-a/edo pasahitza ez dira zuzenak. Mesedez saiatu berriro."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Barkatu, ezin izan dugu XMPP ostalarira konektatu %1$s domeinuarekin"],"The XMPP server did not offer a supported authentication mechanism":["XMPP zerbitzariak ez du lagunduriko autentikazio mekanismorik eskaintzen"],"Sorry, could not determine upload URL.":["Barkatu, ezin izan da igoera URL-a zehaztu."],"Sorry, could not determine file upload URL.":["Barkatu, ezin izan da fitxategi igotzeko URL-a zehaztu."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Ezin izan da zure fitxategia igo. Zure zerbitzariaren erantzuna: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Barkatu, ezin izan da zure fitxategia behar bezala igo."],"Sorry, looks like file upload is not supported by your server.":["Barkatu, badirudi zure zerbitzariak ez duela fitxategi igoera onartzen."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Zure fitxategiaren neurriak, %1$s, zure zerbitzariak gehienez onarturiko muga( %2$s ) gainditzen du."],"Smileys and emotions":["Smiley eta emotikonoak"],"People":["Pertsonak"],"Activities":["Jarduerak"],"Travel":["Bidaia"],"Objects":["Objektu"],"Animals and nature":["Animaliak eta natura"],"Food and drink":["Janaria eta edaria"],"Symbols":["Sinboloak"],"Flags":["Banderak"],"Stickers":["Eranskailuak"],"This groupchat is not anonymous":["Gela hau ez da erabiltzaile anonimoentzat"],"This groupchat now shows unavailable members":["Gela honek orain kide eskuragaitzak erakusten ditu"],"This groupchat does not show unavailable members":["Gela honek ez ditu kide eskuragaitzak erakusten"],"The groupchat configuration has changed":["Gelaren ezarpenak aldatu egin dira"],"Groupchat logging is now enabled":["Talde-elkarrizketan izen ematea gaituta dago orain"],"Groupchat logging is now disabled":["Talde-elkarrizketan izen ematea desgaituta dago orain"],"This groupchat is now no longer anonymous":["dagoeneko gela hau ez da anonimoa"],"This groupchat is now semi-anonymous":["gela hau orain erdi-anonimoa da orain"],"This groupchat is now fully-anonymous":["gela hau orain erabat anonimoa da"],"A new groupchat has been created":["Gela berri bat sortu da"],"Your nickname has been automatically set to %1$s":["Zure ezizena %1$s bezala ezarria izan da automatikoki"],"Your nickname has been changed to %1$s":["Zure ezizena %1$s -ra aldatua izan da"],"You have been banned from this groupchat":["Gela honetan debekatua  izan zara"],"You have been kicked from this groupchat":["Gela honetatik kanporatua  izan zara"],"You have been removed from this groupchat because of an affiliation change":["Gela honetatik ezabatua izan zara afiliazio aldaketa bat dela eta"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Gela honetatik ezabatua izan zara gelako sarbidea kideentzako soilik ezarri delako eta zu ez zara kidea"],"You have been removed from this groupchat because the service hosting it is being shut down":["Gela honetatik ezabatua izan zara zerbitzuaren ostatatzea itxi egingo delako"],"Your message was not delivered because you weren\'t allowed to send it.":["Zure mezua ez da bidali, bidaltzeko baimenik ez duzulako."],"Your message was not delivered because you\'re not present in the groupchat.":["Zure mezua ez da bidali ez zaudelako talde elkarrizketan orain."],"You\'re not allowed to register yourself in this groupchat.":["Ez duzu baimenik zure burua gela honetan erregistratzeko."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Ez duzu baimenik zure burua gela honetan erregistratzeko kideentzako bakarrik delako."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Ezin da zure ezizena gela honetan erregistratu, ez du erregistratzea onartzen."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Ezin da zure ezizena gela honetan erregistratu, datu formulario baliogabea eman da."],"Topic set by %1$s":["%1$s -k ezarritako gaia"],"Topic cleared by %1$s":["%1$s erabiltzaileak mintzagaia garbitu du"],"%1$s has been banned":["%1$s bidalia izan da"],"%1$s\'s nickname has changed":["%1$s -(r)en ezizena aldatu egin da"],"%1$s has been kicked out":["%1$s bidalia izan da"],"%1$s has been removed because of an affiliation change":["%1$s ezabatua izan da afiliazio aldaketa bat dela eta"],"%1$s has been removed for not being a member":["%1$s ezabatua izan da kidea ez delako"],"%1$s is no longer an admin of this groupchat":["%1$s ez da jada gela honetako administratzailea"],"%1$s is no longer an owner of this groupchat":["%1$s ez da jada gela honetako jabeetako bat"],"%1$s is no longer banned from this groupchat":["%1$s ez dago jada gela honetan debekatua"],"%1$s is no longer a member of this groupchat":["%1$s ez da jada gela honetako partaide"],"%1$s is now a member of this groupchat":["%1$s orain gela honetako kidea da"],"%1$s is now an %2$s of this groupchat":["%1$s orain berriketa honetako %2$s da"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Aukeratutako ezizena erreserbatuta dago edo erabiltzen ari da une honetan, aukeratu beste bat."],"Password incorrect":["Pasahitza ez da zuzena"],"You are not on the member list of this groupchat.":["Ez zaude gela honetako kideen zerrendan."],"You have been banned from this groupchat.":["Gela honetatik debekatua izan zara."],"You are not allowed to create new groupchats.":["Ez duzu baimenik gela berriak sortzeko."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Zure ezizenak ez ditu gela honetako arauak betetzen."],"This groupchat does not (yet) exist.":["Gela hau ez da existitzen (oraindik)."],"This groupchat has reached its maximum number of participants.":["Gela hau gehienezko parte-hartzaile  kopurura iritsi da."],"Remote server not found":["Ez da urruneko zerbitzaria aurkitu"],"The explanation given is: \\"%1$s\\".":["Emandako arrazoia ondorengoa da: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s erabiltzaileak %2$s gelara gonbidatu zaitu"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s erabiltzaileak %2$s gelara elkartzera gonbidatu zaitu, eta ondorengo arrazoia eman du: \\"%3$s\\""],"Error":["Errorea"],"Sorry, something went wrong while trying to save your bookmark.":["Barkatu, zerbaitek huts egin du zure laster-marka gordetzerakoan."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Nere kontaktuak"],"Pending contacts":["Zain dauden kontaktuak"],"Contact requests":["Kontaktu eskaerak"],"Ungrouped":["Sailkatu gabe"],"Sorry, there was an error while trying to add %1$s as a contact.":["Barkatu, akats bat izan da %1$s kontaktu moduan gehitzean."],"This client does not allow presence subscriptions":["Bezero honek ez du onartzen aurrez aurreko harpidetzarik"],"Click to hide these contacts":["Klikatu kontaktu hauek ezkutatzeko"],"Unbookmark this groupchat":["Kendu gela hau laster-marketatik"],"Click to open this groupchat":["Klikatu gela hau irekitzeko"],"Click to toggle the bookmarks list":["Klikatu laster-marka zerrenda ordezkatzeko"],"Bookmarks":["Laster-markak"],"Bookmark this groupchat":["Egin gela honen laster-marka"],"Would you like this groupchat to be automatically joined upon startup?":["Gela honetan automatikoki sartu nahiko zenuke abioan?"],"The name for this bookmark:":["Laster-marka honen izena:"],"What should your nickname for this groupchat be?":["Zein izango litzateke gela honetarako zure ezizena?"],"Save":["Gorde"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ziur al zaude \\"%1$s\\" laster-marka ezabatu nahi duzula?"],"Close":["Itxi"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Deskargatu audio fitxategia \\"%1$s\\""],"Download file \\"%1$s\\"":["Deskargatu fitxategia: \\"%1$s"],"Edit":[""],"Retract":[""],"Message versions":["Mezuaren bertsioak"],"Retry":[""],"Uploading file:":["Fitxategia igotzen:"],"This message has been edited":["Mezu hau editatu da"],"Show more":["Gehiago erakutsi"],"No message history available.":[""],"Search results":["Bilaketa emaitzak"],"Search":["Bilatu"],"Insert emojis":["Emojiak txertatu"],"Send the message":["Bidali mezua"],"Start a call":["Dei bat hasi"],"Choose a file to send":["Aukeratu bidaltzeko fitxategia"],"Click to write as a normal (non-spoiler) message":["Klikatu mezua ohiko moduan idazteko"],"Click to write your message as a spoiler":["Klikatu zure mezua iragarki moduan idazteko"],"The User\'s Profile Image":["Erabiltzailearen profileko argazkia"],"Trusted":["Fidagarria"],"Untrusted":["Ez fidagarria"],"OMEMO Fingerprints":["OMEMO hatz-markak"],"Remove as contact":["Kendu kontaktuetatik"],"XMPP Address":["XMPP Helbidea"],"Email":["Emaila"],"Full Name":["Izen osoa"],"Nickname":["Ezizena"],"Refresh":["Freskatu"],"Role":["Rola"],"URL":["URLa"],"%1$s is typing":["%1$s idazten ari da"],"%1$s has stopped typing":["%1$s idazteari utzi dio"],"%1$s has gone away":["%1$s joan egin da"],"Remove messages":["mezuak ezabatu"],"Write in the third person":["Hirugarrengo pertsonan idatzi"],"Show this menu":["Menu hau erakutsi"],"Hidden message":["Ezkutuko mezua"],"Message":["Mezua"],"Optional hint":["Aukerako haztarna"],"You have unread messages":["Irakurri gabeko mezuak dituzu"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Ziur al zaude elkarrizketa honetako mezuak ezabatu nahi dituzula?"],"%1$s has gone offline":["%1$s deskonektatu egin da"],"%1$s is busy":["%1$s lanpeturik dago"],"%1$s is online":["%1$s linean dago"],"Sorry, something went wrong while trying to refresh":["Barkatu, zerbaitek huts egin du zure laster-marka gordetzerakoan"],"Are you sure you want to remove this contact?":["Ziur al zaude kontaktu hau ezabatu nahi duzula?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Barkatu, akats bat izan da %1$s kontaktu moduan ezabatzean."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Errendimendua hobetzeko, zure datuak nabigatzaile honen cachean gordetzen dira. Desmarkatu hau ordenagailua publikoa bada edo saioa amaitzean datuak ezabatzea nahiago baduzu. Saioa esplizituki amaitzea ezinbestekoa da, bestela agian ez dira datu guztiak ezabatuko."],"This is a trusted device":["Hau gailu fidagarri bat da"],"Create an account":["Sortu kontu bat"],"Don\'t have a chat account?":["Ez duzu txat konturik?"],"Log in":["Hasi saioa"],"Disconnected":[""],"Click here to log in anonymously":["Klikatu hemen saioa anonimoki hasteko"],"Username":["Erabiltzaile izena"],"user@domain":["erabiltzailea@domeinua"],"Please enter a valid XMPP address":["Mesedez sar ezazu baleko XMPP helbide bat"],"Chat Contacts":["Txat kontaktuak"],"Toggle chat":["Txata gaitu"],"Click to restore this chat":["Klikatu txat hau berrezartzeko"],"Minimized":["Minimizaturik"],"This user is a moderator.":["Erabiltzaile hau moderatzailea da."],"This user can send messages in this groupchat.":["Erabiltzaile honek mezuak bidal ditzake gela honetan."],"This user can NOT send messages in this groupchat.":["Erabiltzaile honek EZIN ditu mezuak bidali gela honetan."],"Owner":["Jabea"],"Admin":["Administratzailea"],"Member":["Kidea"],"Moderator":["Moderatzailea"],"Visitor":["Bisitaria"],"Click to mention %1$s in your message.":["Klikatu %1$s zure mezuan aipatzeko."],"Participants":["Parte-hartzaileak"],"This field is required":["Eremu hau beharrezkoa da"],"Join":["Batu"],"Enter a new Groupchat":["Sartu gela berri batean"],"name@conference.example.org":["izena@conference.example.org"],"Groupchat name":["Talde elkarrizketaren izena"],"Groupchat address":["Gelaren helbidea"],"Invite":["Gonbidatu"],"Show groupchats":["Erakutsi gelak"],"Server address":["Zerbitzariaren helbidea"],"Show more information on this groupchat":["Erakutsi gela honi buruzko informazio gehiago"],"Query for Groupchats":["Bilatu gelak"],"Description:":["Deskribapena:"],"Groupchat Address (JID):":["Gelaren helbidea (JID):"],"Participants:":["Parte-hartzaileak:"],"Features:":["Ezaugarriak:"],"Requires authentication":["Autentifikazioa behar da"],"Hidden":["Ezkutua"],"Requires an invitation":["Gonbidapena behar da"],"Moderated":["Moderatua"],"Non-anonymous":["Ez-anonimoa"],"Open":["Ireki"],"Permanent":["Iraunkorra"],"Public":["Publikoa"],"Semi-anonymous":["Erdi-anonimoa"],"Temporary":["Aldi baterako"],"Unmoderated":["Moderatu gabea"],"conference.example.org":["conference.example.org"],"No groupchats found":["Ez da gelarik aurkitu"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatzaileak pribilegiodun erabiltzaileak dira, beste erabiltzaile batzuen rolak alda ditzaketelarik.(administratzaile edo jabeenak izan ezik."],"The default role, implies that you can read and write messages.":["Lehenetsitako rolak, mezuak irakurri eta idatzi ditzakezula adierazten du."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Bisitariek ez dute baimenik moderaturiko erabiltzaile anitzeko berriketan mezurik idazteko."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["Rola aldatu"],"New Role":["Rol Berria"],"Reason":["Arrazoia"],"Change affiliation":["Aldatu afiliazioa"],"New affiliation":["Afiliazio berria"],"Affiliation":["Afiliazioa"],"Moderator Tools":["Moderatzaile tresnak"],"No users with that affiliation found.":["Ez da erabiltzailerik aurkitu afiliazio horrekin."],"No users with that role found.":["Ez da rol hori duen erabiltzailerik aurkitu."],"Type here to filter the search results":[""],"Show users":["Erabiltzaileak erakutsi"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rolak erabiltzaileei egokitzen zaizkie erabiltzaile anitzeko berriketetan hainbat gaitasun eman edo ukatzeko. Esplizituki edo inplizituki esleitzen dira afiliazioaren baitan. Afiliazio bati ez dagokion rolak, erabiltzailearen saioan zehar bakarrik balio du."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Mintzagaia"],"Topic author":["Mintzagaiaren egilea"],"Groupchat address (JID)":["Gelaren helbidea (JID)"],"Message archiving":["Mezu artxibaketa"],"Messages are archived on the server":["Mezuak zerbitzarian gordetzen dira"],"Description":["Deskribapena"],"Features":["Ezaugarriak"],"This groupchat is not publicly searchable":["Gela hau ezin da publikoki bilatua izan"],"This groupchat is restricted to members only":["Gela hau kideei soilik dagokie"],"Members only":["Kideak soilik"],"Participants entering this groupchat need to request permission to write":["Grla honetara sartzen diren kideek idazteko baimena eskatu behar dute"],"Name":["Izena"],"This groupchat does not require a password upon entry":["Gela honek ez du pasahitzik eskatzen sartzeko"],"No password required":["Ez da pasahitzik eskatzen"],"Not anonymous":["Ez-anonimoa"],"All other groupchat participants can see your XMPP address":["Gelako gainontzeko parte-hartzaileek zure XMPP erabiltzailea ikus dezakete"],"Not moderated":["Moderatu gabea"],"Participants entering this groupchat can write right away":["Gela honetara gehitzen diren kideek berehala idatz dezakete"],"Online users":["Erabiltzaileak linean"],"Anyone can join this groupchat":["Gela honetan edozein sartu daiteke"],"This groupchat requires a password before entry":["Gela honek pasahitza eskatzen du sartu ahal izateko"],"Password protected":["Pasahitzez babestua"],"Persistent":["Iraunkorra"],"This groupchat persists even if it\'s unoccupied":["Gela honek bere horretan jarraituko du hustu arren"],"Only moderators can see your XMPP address":["Moderatzaileek soilik ikus dezakete zure XMPP helbidea"],"This groupchat will disappear once the last person leaves":["Gela hau desagertu egingo da azken pertsonak uzten duen unean"],"This groupchat is publicly searchable":["Gela hau publikoki bilatua izan daiteke"],"Groupchat info for %1$s":["%1$s gelaren informazioa"],"You\'re not allowed to send messages in this room":["Ez duzu baimenik gela honetan mezuak bidaltzeko"],"The conversation has moved. Click below to enter.":["Elkarrizketa hau mugitua izan da. Klikatu azpian sartzeko."],"This groupchat no longer exists":["Talde berriketa hau jada ez da existitzen"],"Enter groupchat":["Elkartu gelara"],"Please choose your nickname":["Mesedez, aukeratu zure ezizena"],"This groupchat requires a password":["Txat gela honek pasahitza behar du"],"Password: ":["Pasahitza: "],"Submit":["Bidali"],"%1$s has entered the groupchat":["%1$s gelara elkartu da"],"%1$s has left the groupchat":["%1$s gelatik atera da"],"%1$s is now a moderator":["%1$s orain moderatzailea da"],"%1$s is no longer a moderator":["%1$s jada ez da moderatzailea"],"%1$s has been given a voice":["%1$s -(e)k idatz dezake berriro"],"%1$s has been muted":["%1$s ezikusia izan da"],"Change user\'s affiliation to admin":["Aldatu erabiltzailearen afiliazioa administratzailera"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Ezarri erabiltzailearen rola parte-hartzaile gisa"],"Remove this groupchat":["Ezabatu chat talde hau"],"Kick user from groupchat":["Kanporatu erabiltzailea gelatik"],"Write in 3rd person":["3. pertsonan idatzi"],"Grant membership to a user":["Eman kidetza erabiltzaile bati"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Kendu mezuak argitaratzeko erabiltzailearen gaitasuna"],"Change your nickname":["Zure ezizena aldatu"],"Grant moderator role to user":["Eman moderatzaile rola erabiltzaileari"],"Grant ownership of this groupchat":["Eman gela honen jabetza"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Ezarri gelaren mintzagaia"],"Set groupchat subject (alias for /subject)":["Ezarri gelaren mintzagaia (/subject aginduaren aliasa)"],"Allow muted user to post messages":["Baimendu isilarazitako erabiltzaileari mezuak argitaratzea"],"Configure":[""],"Configure this groupchat":["Konfiguratu gela hau"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Ezkutatu parte-hartzaileen zerrena"],"Forbidden: you do not have the necessary role in order to do that.":["Debekatua: Ez duzu hori egiteko behar den rola."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Debekatua: Ez duzu hori egiteko behar den afiliazioa."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Akatsa: %1$s aginduak bi argumentu hartzen ditu, erabiltzailearen ezizena eta aukerako arrazoi bat."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["izena@adibidea.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Errorea: Argumentu kopuru baliogabea"],"This action was done by %1$s.":["Ekintza hau %1$s -k egina izan da."],"The reason given is: \\"%1$s\\".":["Emandako arrazoia ondorengoa da: \\"%1$s\\"."],"Groupchats":["Gelak"],"Add a new groupchat":["Gehitu gela berri bat"],"Query for groupchats":["Bilatu gelak"],"Announcements":[""],"Notification from %1$s":["%1$s -(r)en jakinarazpena"],"%1$s says":["%1$s -k dio"],"has gone offline":["deskonektatu egin da"],"has gone away":["joan egin da"],"is busy":["lanpeturik dago"],"has come online":["linean jarri da"],"wants to be your contact":["zure kontaktua izan nahi du"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Honi buruz"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Saioa itxi"],"Click to change your chat status":["Klikatu zure txat egoera aldatzeko"],"Your avatar image":["Zure abatarraren irudia"],"Checkbox for selecting the following fingerprint":["Hurrengo hatz-marka hautatzeko laukia"],"Device without a fingerprint":["Hatz-markarik gabeko gailua"],"Other OMEMO-enabled devices":["OMEMO gaiturik duten beste gailu batzuk"],"Checkbox to select fingerprints of all other OMEMO devices":["Beste OMEMO gailuen hatz-markak hautatzeko laukia"],"Remove checked devices and close":["Kendu markatutako gailuak eta itxi"],"Select all":["Hautatu guztiak"],"This device\'s OMEMO fingerprint":["Gailu honen OMEMO hatz-marka"],"Generate new keys and fingerprint":["Gako eta hatz-marka berriak sortu"],"Your Profile":["Zure profila"],"XMPP Address (JID)":["XMPP helbidea (JID)"],"Save and close":["Gorde eta itxi"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Banatu rolak komen bidez. Zure rolak izenaren ondoan agertzen dira txat mezuetan."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Errore bat gertatu da zure profileko datuak gordetzen saiatzean."],"You can check your browser\'s developer console for any error output.":["Zure nabigatzaileko garatzaile kontsolan egiaztatu dezakezu errorerik dagoen."],"Away":["Kanpoan"],"Busy":["Lanpetua"],"Custom status":["Egoera pertsonalizatua"],"Offline":["Deskonektaturik"],"Online":["Linean"],"Away for long":["Kanpoan denbora luzerako"],"Change chat status":["Txat egoera aldatu"],"Personal status message":["Egoera mezu pertsonala"],"I am %1$s":["%1$s nago"],"Are you sure you want to log out?":["Ziur al zaude saioa itxi nahi duzula?"],"online":["Linean"],"busy":["Lanpetua"],"away for long":["kanpoan denbora luzerako"],"away":["Kanpoan"],"offline":["deskonektatua"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Ezin izan da jasotako OMEMO mezu bat deszifratu errore bat dela eta."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["Badirudi %1$s -(e)k ez daukala OMEMO erabiltzeko gai den bezerorik. Ezingo da enkriptaturiko elkarrizketarik izan talde honetan."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Mezuak testu lauan bidaltzen dira"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Barkatu, ez gara gai enkriptaturiko mezua bidaltzeko %1$s -(e)k beraien presentzia eguneraketetara izen emanda egotea behar duelako beraien OMEMO informazioa ikusi ahal izateko."],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Barkatu, ez gara gai enkriptaturiko mezua bidaltzeko %1$s -rentzako urruneko zerbitzaria ezin delako topatu."],"Unable to send an encrypted message due to an unexpected error.":["Ezin izan da mezua bidali errore bat dela eta."],"Sorry, an error occurred while trying to remove the devices.":["Errore bat gertatu da gailuak kentzen saiatzean."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Ziur al zaude OMEMO gako berriak sortu nahi  dituzula? Honek zure gako zaharrak ezabatuko ditu eta aurretiaz enkriptaturiko mezu guztiak ezingo dira irakurri gailu honetan."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Hau zifratutako OMEMO mezu bat da eta badirudi zure bezeroak ez duela onartzen. Gehiago jakiteko:  https://conversations.im/omemo"]," e.g. conversejs.org":[" adib. conversejs.org"],"Fetch registration form":["Erregistro formularioa eskuratu"],"Tip: A list of public XMPP providers is available":["Aholkua: XMPP hornitzaile publikoen zerrenda bat dago eskuragarri"],"here":["hemen"],"Sorry, we\'re unable to connect to your chosen provider.":["Barkatu, ezin izan dugu zuk aukeraturiko hornitzailera konektatu."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Barkatu, emandako hornitzaileak ez du banda kontuen erregistroa onartzen. Saiatu beste hornitzaile batekin."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Zerbait oker joan da \\"%1$s\\"-(r)ekin konexioa ezartzean. Ziur al zaude existitzen dela?"],"Now logging you in":["Orain saio hasten"],"Registered successfully":["Arrakastaz erregistratua"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Hornitzaileak zure izen emate saiakera ukatu du. Mesedez egiaztatu sartutako balioak zuzenak direla."],"Leave this groupchat":["Atera gela honetatik"],"Click to toggle the list of open groupchats":["Egin klik irekitako gelen zerrenda hedatu/tolesteko"],"Open Groupchats":["Irekitako gelak"],"Are you sure you want to leave the groupchat %1$s?":["Ziur al zaude %1$s gelatik atera nahi duzula?"],"Add":["Gehitu"],"Add a Contact":["Kontaktu bat gehitu"],"This contact is busy":["Kontaktu hau lanpeturik dago"],"This contact is online":["Kontaktu hau linean dago"],"This contact is offline":["Kontaktu hau lineaz kanpo dago"],"This contact is unavailable":["Kontaktu hau ez dago erabilgarri"],"This contact is away for an extended period":["Kontaktu hau kanpoan dago denbora luzez"],"This contact is away":["Kontaktu hau kanpoan dago"],"Contact name":["Kontaktu izena"],"Optional nickname":["Aukerako ezizena"],"Sorry, could not find a contact with that name":[""],"Filter":["Iragazi"],"Filter by contact name":["Kontaktu izenaz iragazi"],"Filter by group name":["Talde izenaz iragazi"],"Filter by status":["Egoeraren araberan iragazi"],"Any":["Edozein"],"Unread":["Irakurri gabe"],"Chatty":["Hitzduna"],"Extended Away":["Denbora luzez at"],"Click to remove %1$s as a contact":["Klikatu %1$s kontaktuetatik ezabatzeko"],"Click to accept the contact request from %1$s":["Klikatu %1$s -(r)en kontaktu eskaera onartzeko"],"Click to decline the contact request from %1$s":["Klikatu %1$s -(r)en kontaktu eskaera baztertzeko"],"Are you sure you want to decline this contact request?":["Ziur al,zaude kontaktu eskaera hau baztertu nahi duzula?"],"Contacts":["Kontaktuak"],"Add a contact":["Kontaktu bat gehitu"]}}}')}}]);
 //# sourceMappingURL=eu-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/fi-LC_MESSAGES-converse-po.js b/src/conversejs/locales/fi-LC_MESSAGES-converse-po.js
index 0c48d81620bc484edb8a51eb265561067d344962..ffe4d164779a9d699929680b773e9b2357b333cc 100644
--- a/src/conversejs/locales/fi-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/fi-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[151],{429:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"fi"},"Create your account":["Luo tilisi"],"Please enter the XMPP provider to register with:":["Ole hyvä ja kirjoita XMPP-palveluntarjoaja rekisteröidäksesi:"],"Already have a chat account?":["Onko sinulla jo chat-tili?"],"Log in here":["Kirjaudu sisään tästä"],"Account Registration:":["Tilin rekisteröinti:"],"Register":["Rekisteröidy"],"Choose a different provider":["Valitse toinen tarjoaja"],"Hold tight, we\'re fetching the registration form…":["Odota, haemme rekisteröintilomaketta …"],"Cancel":["Peruuta"],"The connection has dropped, attempting to reconnect.":["Yhteys katkesi, yritetään muodostaa uudelleen yhteyttä."],"An error occurred while connecting to the chat server.":["Yhdistettäessä chat-palvelimeen tapahtui virhe."],"Your XMPP address and/or password is incorrect. Please try again.":["XMPP-osoitteesi ja / tai salasanasi ovat väärin. Yritä uudelleen."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Valitettavasti emme pystyneet muodostamaan yhteyttä XMPP-isäntään verkkotunnuksella:%1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP-palvelin ei tarjonnut tuettua todennusmekanismia"],"Sorry, could not determine upload URL.":["Valitettavasti lataus-URL-osoitetta ei voitu määrittää."],"Sorry, could not determine file upload URL.":["Valitettavasti tiedoston lataus-URL-osoitetta ei voitu määrittää."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Valitettavasti tiedostoa ei voitu ladata. Palvelimesi vastaus: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Valitettavasti tiedostoa ei voitu ladata."],"Sorry, looks like file upload is not supported by your server.":["Valitettavasti palvelin ei tue tiedostojen lähettämistä."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Tiedoston koko, %1$s, ylittää palvelimen salliman enimmäismäärän, joka on %2$s."],"Smileys and emotions":["Hymiöt ja tunteet"],"People":["Ihmiset"],"Activities":["Toiminta"],"Travel":["Matkustaa"],"Objects":["Esineet"],"Animals and nature":["Eläimet ja luonto"],"Food and drink":["Ruoka ja juoma"],"Symbols":["Symbolit"],"Flags":["Liput"],"Stickers":["Tarrat"],"This groupchat is not anonymous":["Tämä ryhmäkeskustelu ei ole anonyymi"],"This groupchat now shows unavailable members":["Tämä ryhmäkeskustelu näyttää nyt poissa olevat jäsenet"],"This groupchat does not show unavailable members":["Tämä ryhmäkeskustelu ei näytä jäseniä, joita ei ole käytettävissä"],"The groupchat configuration has changed":["Ryhmäkeskusteluasetukset ovat muuttuneet"],"Groupchat logging is now enabled":["Ryhmäkeskustelujen kirjaaminen on nyt käytössä"],"Groupchat logging is now disabled":["Ryhmäkeskustelujen kirjaaminen on nyt poistettu käytöstä"],"This groupchat is now no longer anonymous":["Tämä ryhmäkeskustelu ei ole enää anonyymi"],"This groupchat is now semi-anonymous":["Tämä ryhmäkeskustelu on nyt osittain anonyymi"],"This groupchat is now fully-anonymous":["Tämä ryhmäkeskustelu on nyt täysin anonyymi"],"A new groupchat has been created":["Uusi ryhmäkeskustelu on luotu"],"Your nickname has been automatically set to %1$s":["Nimimerkkisi on asetettu automaattisesti arvoon %1$s"],"Your nickname has been changed to %1$s":["Nimimerkkisi on muutettu muotoon %1$s"],"You have been banned from this groupchat":["Sinulta on ryhmäkeskustelu estetty"],"You have been kicked from this groupchat":["Sinut on poistettu tästä ryhmäkeskusteluista"],"You have been removed from this groupchat because of an affiliation change":["Sinut on poistettu tästä ryhmäkeskusteluista jäsenyyden muutoksen vuoksi"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sinut on poistettu tästä ryhmäkeskusteluista, koska ryhmäkeskustelu on vaihdettu vain jäsenille etkä ole jäsen"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sinut on poistettu tästä ryhmäkeskusteluista, koska sitä ylläpitävä palvelu suljetaan"],"Your message was not delivered because you weren\'t allowed to send it.":["Viestiäsi ei toimitettu, koska sinulla ei ollut oikeutta lähettää sitä."],"Your message was not delivered because you\'re not present in the groupchat.":["Viestiäsi ei toimitettu, koska et ole läsnä ryhmäkeskusteluissa."],"You\'re not allowed to register yourself in this groupchat.":["Et voi rekisteröidä itseäsi tähän ryhmäkeskusteluun."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Et voi rekisteröityä tähän ryhmäkeskusteluun, koska se on vain jäsenille."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nimimerkilläsi ei voi rekisteröidä tähän ryhmäkeskusteluun, se ei tue rekisteröintiä."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nimimerkkiäsi ei voi rekisteröidä tähän ryhmäkeskusteluun, toimitettu virheellinen tietolomake."],"Topic set by %1$s":["Aihe asetettu %1$s toimesta"],"Topic cleared by %1$s":["Aihe poistettu %1$s"],"%1$s has been banned by %2$s":["%2$s antoi porttikiellon käyttäjälle %1$s"],"%1$s has been banned":["%1$s on kielletty"],"%1$s\'s nickname has changed":["%1$s nimimerkki on muuttunut"],"%1$s has been kicked out by %2$s":["%2$s potki ulos käyttäjän %1$s"],"%1$s has been kicked out":["%1$s on poistettu"],"%1$s has been removed because of an affiliation change":["%1$s on poistettu jäsenyyden muutoksen vuoksi"],"%1$s has been removed for not being a member":["%1$s on poistettu, koska hän ei ole jäsen"],"%1$s is no longer an admin of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun järjestelmänvalvoja"],"%1$s is no longer an owner of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun omistaja"],"%1$s is no longer banned from this groupchat":["%1$s ei ole enää kielletty tästä ryhmäkeskustelusta"],"%1$s is no longer a member of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun jäsen"],"%1$s is now a member of this groupchat":["%1$s on nyt tämän ryhmäkeskustelun jäsen"],"%1$s is now an %2$s of this groupchat":["%1$s on nyt %2$s tästä ryhmäkeskustelusta"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Valitsemasi nimimerkki on varattu tai käytössä. Ole hyvä ja valitse toinen."],"Password incorrect":["Salasana väärin"],"You are not on the member list of this groupchat.":["Et ole tämän ryhmäkeskustelun jäsenluettelossa."],"You have been banned from this groupchat.":["Sinulta on kielletty ryhmäkeskustelu."],"You are not allowed to create new groupchats.":["Et voi luoda uusia ryhmäkeskusteluja."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Nimimerkkisi ei ole tämän ryhmäkeskustelun käytäntöjen mukainen."],"This groupchat does not (yet) exist.":["Tätä ryhmäkeskustelua ei ole (vielä) olemassa."],"This groupchat has reached its maximum number of participants.":["Tämä ryhmäkeskustelu on saavuttanut maksimimäärän osallistujia."],"Remote server not found":["Palvelinta ei löytynyt"],"The explanation given is: \\"%1$s\\".":["Annettu selitys on: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s on kutsunut sinut ryhmäkeskusteluun: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s on kutsunut sinut ryhmäkeskusteluun: %2$s, ja jättänyt seuraavan syyn: \\"%3$s\\""],"Error":["Virhe"],"Sorry, something went wrong while trying to save your bookmark.":["Jokin meni pieleen yritettäessä tallentaa kirjanmerkkiäsi."],"Timeout Error":["Aikakatkaisuvirhe"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Palvelin ei palauttanut kirjanmerkkejäsi sallitussa ajassa. Voit ladata sivun uudelleen ja pyytää niitä uudelleen."],"My contacts":["Yhteystiedot"],"Pending contacts":["Odottavat yhteystiedot"],"Contact requests":["Yhteyspyynnöt"],"Ungrouped":["Ryhmittämätön"],"New messages":["Uudet viestit"],"Sorry, there was an error while trying to add %1$s as a contact.":["Valitettavasti tapahtui virhe yrittäessäsi lisätä %1$s yhteystiedoksi."],"This client does not allow presence subscriptions":["Tämä asiakasohjelma ei salli läsnäolotilauksia"],"Click to hide these contacts":["Piilota nämä yhteystiedot napsauttamalla"],"Unbookmark this groupchat":["Poista tämä ryhmäkeskustelu kirjanmerkeistä"],"Click to open this groupchat":["Avaa tämä ryhmäkeskustelu napsauttamalla"],"Click to toggle the bookmarks list":["Napsauta vaihtaaksesi kirjanmerkkiluetteloa"],"Bookmarks":["Kirjanmerkit"],"Bookmark this groupchat":["Lisää tämä ryhmäkeskustelu kirjanmerkkeihin"],"Would you like this groupchat to be automatically joined upon startup?":["Haluatko, että tämä ryhmäkeskustelu liitetään automaattisesti käynnistyksen yhteydessä?"],"The name for this bookmark:":["Tämän kirjanmerkin nimi:"],"What should your nickname for this groupchat be?":["Mikä nimimerkkisi tähän ryhmäkeskusteluun pitäisi olla?"],"Save":["Tallentaa"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Haluatko varmasti poistaa kirjanmerkin \\"%1$s\\"?"],"Close":["Sulje"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Lataa äänitiedosto \\"%1$s\\""],"Download file \\"%1$s\\"":["Lataa tiedosto \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Viestiversiot"],"Retry":[""],"Uploading file:":["Lähetetään tiedosto:"],"%1$s has removed this message":["%1$s on poistanut tämän viestin"],"This message has been edited":["Tätä viestiä on muokattu"],"Show more":["Näytä lisää"],"No message history available.":["Viestihistoriaa ei ole saatavilla."],"Search results":["Hakutulokset"],"Search":["Hae"],"Insert emojis":["Lisää hymiöt"],"Send the message":["Lähetä viesti"],"Start a call":["Aloita puhelu"],"Message characters remaining":["Viestimerkkejä jäljellä"],"Choose a file to send":["Valitse lähetettävä tiedosto"],"Click to write as a normal (non-spoiler) message":["Napsauta kirjoittaaksesi normaalina (ei-spoileri) viestinä"],"Click to write your message as a spoiler":["Napsauta kirjoittaaksesi viestin spoilerina"],"The User\'s Profile Image":["Käyttäjän profiilikuva"],"Trusted":["Luotettu"],"Untrusted":["Ei-luotettu"],"OMEMO Fingerprints":["OMEMO-sormenjäljet"],"No OMEMO-enabled devices found":["OMEMO-yhteensopivia laitteita ei löytynyt"],"Remove as contact":["Poista kontakti"],"XMPP Address":["XMPP-osoite"],"Email":["Sähköposti"],"Full Name":["Koko nimi"],"Nickname":["Nimimerkki"],"Refresh":["Virkistää"],"Role":["Rooli"],"URL":["URL"],"%1$s is typing":["%1$s kirjoittaa"],"%1$s has stopped typing":["%1$s on lopettanut kirjoittamisen"],"%1$s has gone away":["%1$s on poissa"],"Remove messages":["Poista viestit"],"Close this chat":["Sulje chat"],"Write in the third person":["Kirjoita kolmannessa persoonassa"],"Show this menu":["Näytä tämä valikko"],"Hidden message":["Piilotettu viesti"],"Message":["Viesti"],"Optional hint":["Valinnainen vihje"],"You have unread messages":["Sinulla on lukemattomia viestejä"],"Details":["Tiedot"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Huomaa, että muut XMPP / Jabber-asiakkaat (ja palvelimet) eivät ehkä vielä tue peruuttamista ja että tätä viestiä ei välttämättä poisteta kaikkialta."],"Are you sure you want to retract this message?":["Haluatko varmasti peruuttaa tämän viestin?"],"Confirm":["Vahvistaa"],"You have an unsent message which will be lost if you continue. Are you sure?":["Sinulla on lähettämätön viesti, joka katoaa, jos jatkat. Oletko varma?"],"Are you sure you want to clear the messages from this conversation?":["Haluatko varmasti tyhjentää tämän keskustelun viestit?"],"%1$s has gone offline":["%1$s on mennyt offline-tilaan"],"%1$s is busy":["%1$s on varattu"],"%1$s is online":["%1$s on online-tilassa"],"Sorry, something went wrong while trying to refresh":["Jokin meni pieleen yrittäessäsi päivittää"],"Are you sure you want to remove this contact?":["Haluatko varmasti poistaa tämän yhteystiedon?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Valitettavasti tapahtui virhe yrittäessäsi poistaa %1$s yhteyshenkilönä."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Suorituskyvyn parantamiseksi tallennamme tietosi tämän selaimen välimuistiin. Poista tämä valintaruutu, jos kyseessä on julkinen tietokone tai jos haluat, että tietosi poistetaan, kun kirjaudut ulos. On tärkeää, että kirjaudut nimenomaisesti ulos, muuten kaikkia välimuistissa olevia tietoja ei ehkä poisteta. Huomaa, että kun käytetään epäluotettavaa laitetta, OMEMO-salaus EI ole käytettävissä."],"This is a trusted device":["Tämä on luotettava laite"],"Password":["Salasana"],"Create an account":["Luo tili"],"Don\'t have a chat account?":["Eikö sinulla ole chat-tiliä?"],"Log in":["Kirjaudu sisään"],"Disconnected":["Katkaistu"],"Click here to log in anonymously":["Napsauta tätä kirjautuaksesi anonyymisti"],"Username":["Käyttäjätunnus"],"user@domain":["käyttäjä@toimialue"],"Please enter a valid XMPP address":["Anna kelvollinen XMPP-osoite"],"Chat Contacts":["Chat-yhteystiedot"],"Toggle chat":["Vaihda chatti"],"Click to restore this chat":["Palauta tämä chat napsauttamalla"],"Minimized":["Minimoitu"],"Minimize this groupchat":["Pienennä tämä ryhmäkeskustelu"],"This field is required":["Tämä kenttä pitää täyttää"],"Join":["Liity"],"Enter a new Groupchat":["Anna uusi ryhmäkeskustelu"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["Ryhmäkeskustelun nimi"],"Groupchat address":["Ryhmäkeskusteluosoite"],"Groupchat id is invalid.":["Ryhmäkeskustelun tunnus on virheellinen."],"Invite":["Kutsu"],"Invite someone to this groupchat":["Kutsu henkilö tähän ryhmäkeskusteluun"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["Kutsun valinnainen syy"],"Show groupchats":["Näytä ryhmäkeskustelut"],"Server address":["Palvelimen osoite"],"Show more information on this groupchat":["Näytä lisätietoja tästä ryhmäkeskustelusta"],"Query for Groupchats":["Ryhmäkeskustelujen kysely"],"Description:":["Kuvaus:"],"Groupchat Address (JID):":["Groupchat-osoite (JID):"],"Participants:":["Osallistujat:"],"Features:":["Ominaisuuksia:"],"Requires authentication":["Edellyttää todennusta"],"Hidden":["Piilotettu"],"Requires an invitation":["Vaatii kutsun"],"Moderated":["Valvottu"],"Non-anonymous":["Ei-anonyymi"],"Open":["Avata"],"Permanent":["Pysyvä"],"Public":["Julkinen"],"Semi-anonymous":["Semi-anonyymi"],"Temporary":["Tilapäinen"],"Unmoderated":["Valvomattomat"],"conference.example.org":["conference.example.org"],"No groupchats found":["Ryhmäkeskusteluja ei löytynyt"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Valvojat ovat etuoikeutettuja käyttäjiä, jotka voivat muuttaa muiden käyttäjien rooleja (lukuun ottamatta niitä, joilla on järjestelmänvalvojan tai omistajan kytköksiä."],"The default role, implies that you can read and write messages.":["Oletusrooli tarkoittaa, että voit lukea ja kirjoittaa viestejä."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Vierailijat eivät saa kirjoittaa viestejä valvotussa usean käyttäjän keskustelussa."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Omistaja on korkein rooli. Omistajat voivat muokata kaikkien muiden käyttäjien rooleja ja yhteyksiä."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Järjestelmänvalvoja on toiseksi korkein rooli. Järjestelmänvalvojat voivat muokata kaikkien muiden käyttäjien rooleja ja yhteyksiä omistajia lukuun ottamatta."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Voit kieltää käyttäjän, annat heille kuuluminen \\"hylkiö\\"."],"Change role":["Vaihda rooli"],"New Role":["Uusi rooli"],"Reason":["Syy"],"Change affiliation":["Muuta kuulumista"],"New affiliation":["Uusi kuuluminen"],"Affiliation":["Kuuluminen"],"Moderator Tools":["Moderaattori työkalut"],"No users with that affiliation found.":["Käyttäjiä, joista on kyse, ei löytynyt."],"No users with that role found.":["Tätä roolia käyttäviä käyttäjiä ei löytynyt."],"Type here to filter the search results":[""],"Show users":["Näytä käyttäjät"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rooleja annetaan käyttäjille, jotka myöntävät tai kieltävät heille tiettyjä kyvykkyyksiä usean käyttäjän keskustelussa. Ne on määritetty joko eksplisiittisesti tai implisiittisesti osana kuulumista. Rooli, joka ei johdu liitoksesta, on voimassa vain käyttäjän istunnon ajan."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Kuuluminen on pitkäaikainen oikeus, joka tyypillisesti edellyttää tiettyä roolia ja joka antaa etuoikeuksia ja velvollisuuksia. Esimerkiksi järjestelmänvalvojilla ja omistajilla on automaattisesti moderaattorin rooli."],"Sorry, something went wrong while trying to set the affiliation":["Anteeksi, jokin meni pieleen, kun yrittää asettaa kuuluminen"],"Affiliation changed":["Kuuluminen muuttui"],"Role changed":["Rooli muuttui"],"You\'re not allowed to make that change":["Et saa tehdä sitä muutosta"],"Sorry, something went wrong while trying to set the role":["Anteeksi, jotain meni pieleen, kun yritetään asettaa rooli"],"Topic":["Aihe"],"Topic author":["Aiheen tekijä"],"Groupchat address (JID)":["Ryhmäkeskusteluosoite (JID)"],"Message archiving":["Viestien arkistointi"],"Messages are archived on the server":["Viestit arkistoidaan palvelimelle"],"Description":["Kuvaus"],"Features":["Ominaisuudet"],"This groupchat is not publicly searchable":["Tämä ryhmäkeskustelu ei ole julkisesti haettavissa"],"This groupchat is restricted to members only":["Tämä ryhmäkeskustelu on rajoitettu vain jäsenille"],"Members only":["Vain jäsenille"],"Participants entering this groupchat need to request permission to write":["Ryhmäkeskusteluun osallistuvien osallistujien on pyydettävä lupaa kirjoittaa"],"Name":["Nimi"],"This groupchat does not require a password upon entry":["Tämä ryhmäkeskustelu ei vaadi salasanaa sisäänkirjautumisen yhteydessä"],"No password required":["Salasanaa ei vaadita"],"Not anonymous":["Ei anonyymi"],"All other groupchat participants can see your XMPP address":["Kaikki muut ryhmäkeskusteluun osallistujat näkevät XMPP-osoitteesi"],"Not moderated":["Ei valvottu"],"Participants entering this groupchat can write right away":["Ryhmäkeskusteluun osallistujat voivat kirjoittaa heti"],"Online users":["Online-käyttäjät"],"Anyone can join this groupchat":["Kuka tahansa voi liittyä tähän ryhmäkeskusteluun"],"This groupchat requires a password before entry":["Tämä ryhmäkeskustelu vaatii salasanan ennen sisäänpääsyä"],"Password protected":["Salasana suojattu"],"Persistent":["Jatkuva"],"This groupchat persists even if it\'s unoccupied":["Tämä ryhmäkeskustelu jatkuu, vaikka se olisi tyhjillään"],"Only moderators can see your XMPP address":["Vain moderaattorit näkevät XMPP-osoitteesi"],"This groupchat will disappear once the last person leaves":["Tämä ryhmäkeskustelu katoaa, kun viimeinen henkilö lähtee"],"This groupchat is publicly searchable":["Tämä ryhmäkeskustelu on julkisesti haettavissa"],"Groupchat info for %1$s":["Ryhmäkeskustelun tiedot kohteelle %1$s"],"You\'re not allowed to send messages in this room":["Et voi lähettää viestejä tässä huoneessa"],"The conversation has moved. Click below to enter.":["Keskustelu on siirtynyt. Napsauta alta siirtyäksesi."],"This groupchat no longer exists":["Tätä ryhmäkeskustelua ei enää ole"],"Enter groupchat":["Liity ryhmäkeskusteluun"],"Choose a nickname to enter":["Valitse nimimerkki kirjoittaaksesi"],"Please choose your nickname":["Valitse nimimerkkisi"],"This groupchat requires a password":["Tämä groupchat vaatii salasanan"],"Password: ":["Salasana: "],"Submit":["Lähetä"],"This user is a moderator.":["Tämä käyttäjä on moderaattori."],"This user can send messages in this groupchat.":["Tämä käyttäjä voi lähettää viestejä tässä ryhmäkeskustelussa."],"This user can NOT send messages in this groupchat.":["Tämä käyttäjä EI VOI lähettää viestejä tässä ryhmäkeskustelussa."],"Owner":["Omistaja"],"Admin":["Admin"],"Member":["Jäsen"],"Moderator":["Moderaattori"],"Visitor":["Vierailija"],"Click to mention %1$s in your message.":["Valitse tämä, jos haluat mainita viestissäsi %1$s."],"Participants":["Osallistujat"],"%1$s has entered the groupchat":["%1$s on liittynyt ryhmäkeskusteluun"],"%1$s has left the groupchat":["%1$s on poistunut ryhmäkeskustelusta"],"%1$s is now a moderator":["%1$s on nyt moderaattori"],"%1$s is no longer a moderator":["%1$s ei ole enää moderaattori"],"%1$s has been given a voice":["%1$s on saanut äänen"],"%1$s has been muted":["%1$s on mykistetty"],"%1$s and %2$s":["%1$s ja %2$s"],"Change user\'s affiliation to admin":["Muuta käyttäjän liitos adminiksi"],"Ban user by changing their affiliation to outcast":["Estä käyttäjä muuttamalla heidän kuulumisensa hylkiöksi"],"Clear the chat area":["Tyhjennä chat-alue"],"Close this groupchat":["Sulje tämä ryhmäkeskustelu"],"Change user role to participant":["Käyttäjän roolin muuttaminen osallistujaksi"],"Remove this groupchat":["Poista tämä ryhmäkeskustelu"],"Kick user from groupchat":["Poista käyttäjä ryhmäkeskusteluista"],"Write in 3rd person":["Kirjoita kolmannessa persoonassa"],"Grant membership to a user":["Jäsenyyden myöntäminen käyttäjälle"],"Opens up the moderator tools GUI":["Avaa moderaattorityökalujen graafisen käyttöliittymän"],"Remove user\'s ability to post messages":["Poista käyttäjän kyky lähettää viestejä"],"Change your nickname":["Nimimerkin muuttaminen"],"Grant moderator role to user":["Myönnä moderaattorin rooli käyttäjälle"],"Grant ownership of this groupchat":["Myönnä omistajuus tähän ryhmäkeskusteluun"],"Register your nickname":["Rekisteröi nimimerkkisi"],"Revoke the user\'s current affiliation":["Peruuta käyttäjän nykyinen yhteys"],"Set groupchat subject":["Aseta ryhmäkeskustelu aihe"],"Set groupchat subject (alias for /subject)":["Aseta ryhmäkeskusteluaihe (alias / aiheelle)"],"Allow muted user to post messages":["Salli mykistetyn käyttäjän lähettää viestejä"],"You are about to retract this message.":["Olet perumassa tämän viestin."],"You may optionally include a message, explaining the reason for the retraction.":["Voit valinnaisesti sisällyttää viestin, joka selittää peruuttamisen syyn."],"Message Retraction":["Viestin peruuttaminen"],"Optional reason":["Valinnainen syy"],"Sorry, you\'re not allowed to retract this message":["Valitettavasti et voi peruuttaa tätä viestiä."],"A timeout occurred while trying to retract the message":["Aikakatkaisu yritettäessä peruuttaa viestiä"],"Sorry, you\'re not allowed to retract this message.":["Valitettavasti et saa peruuttaa tätä viestiä."],"Configure this groupchat":["Määritä tämä ryhmäkeskustelu"],"Invite someone to join this groupchat":["Kutsu joku liittymään tähän ryhmäkeskusteluun"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":["Tuhoa"],"Leave":["Lähde"],"Hide the list of participants":["Piilota osallistujien luettelo"],"Forbidden: you do not have the necessary role in order to do that.":["Kielletty: sinulla ei ole tarvittavaa roolia sen tekemiseen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Kielletty: sinulla ei ole tarvittavaa yhteyttä, jotta voit tehdä sen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Virhe: Komento %1$s ottaa kaksi argumenttia, käyttäjän nimimerkin ja valinnaisesti syyn."],"Error: couldn\'t find a groupchat participant based on your arguments":["Virhe: ryhmäkeskustelun osallistujaa ei löytynyt argumenttiesi perusteella"],"Error: found multiple groupchat participant based on your arguments":["Virhe: löytyi useita ryhmäkeskustelun osallistujia argumenttiesi perusteella"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":["Anteeksi, komennon suorittamisessa tapahtui virhe."],"Check your browser\'s developer console for details.":["Tarkista yksityiskohdat selaimesi kehittäjäkonsolista."],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Lempinimesi on \\"%1$s\\""],"Error: invalid number of arguments":["Virhe: virheellinen määrä argumentteja"],"This action was done by %1$s.":["Tämän toiminnon suoritti %1$s."],"The reason given is: \\"%1$s\\".":["Annettu syy on: \\"%1$s\\"."],"Groupchats":["Ryhmäkeskustelut"],"Add a new groupchat":["Uuden ryhmäkeskustelun lisääminen"],"Query for groupchats":["Ryhmäkeskustelujen kysely"],"Sorry, an error occurred while trying to submit the config form.":["Virhe yritettäessä lähettää määrityslomaketta."],"Announcements":["Ilmoitukset"],"Click to open this server message":["Avaa tämä palvelinviesti napsauttamalla"],"Notification from %1$s":["Ilmoitus kohteesta %1$s"],"%1$s says":["%1$s sanoo"],"has gone offline":["on mennyt offline-tilaan"],"has gone away":["on mennyt pois"],"is busy":["on varattu"],"has come online":["on tullut verkkoon"],"wants to be your contact":["haluaa olla yhteyshenkilösi"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Noin"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Avoimen Lähdekoodin %2$s XMPP chat client tuonut sinulle %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Käännä %2$s se omalle kielellesi"],"Log out":["Kirjaudu ulos"],"Click to change your chat status":["Muuta keskustelutilaasi napsauttamalla tätä"],"Show details about this chat client":["Näytä tämän chat-asiakkaan tiedot"],"Your avatar image":["Avatar-kuvasi"],"Checkbox for selecting the following fingerprint":["Valintaruutu seuraavan sormenjäljen valitsemiseksi"],"Device without a fingerprint":["Laite ilman sormenjälkiä"],"Other OMEMO-enabled devices":["Muut OMEMO-yhteensopivat laitteet"],"Checkbox to select fingerprints of all other OMEMO devices":["Valintaruutu valitaksesi kaikkien muiden OMEMO-laitteiden sormenjäljet"],"Remove checked devices and close":["Poista valitut laitteet ja sulje"],"Select all":["Valitse kaikki"],"This device\'s OMEMO fingerprint":["Tämän laitteen OMEMO-sormenjälki"],"Generate new keys and fingerprint":["Luo uusia avaimia ja sormenjälkiä"],"Your Profile":["Profiilisi"],"XMPP Address (JID)":["XMPP-osoite (JID)"],"Save and close":["Tallenna ja sulje"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Käytä pilkkuja erottamaan useita rooleja. Teidän roolit ovat osoittaneet, nimesi vieressä chat-viestejä."],"OMEMO":["OMEMO"],"Profile":["Profiili"],"Sorry, an error happened while trying to save your profile data.":["Anteeksi, tapahtui virhe yrittäessäsi tallentaa profiilisi tietoja."],"You can check your browser\'s developer console for any error output.":["Voit tarkistaa virheet selaimesi kehittäjäkonsolista."],"Away":["Poissa"],"Busy":["Varattu"],"Custom status":["Mukautettu tila"],"Offline":["Poissa"],"Online":["Online"],"Away for long":["Poissa pitkään"],"Change chat status":["Vaihda chatin tila"],"Personal status message":["Henkilökohtainen tilaviesti"],"I am %1$s":["Olen %1$s"],"Are you sure you want to log out?":["Haluatko varmasti kirjautua ulos?"],"online":["verkossa"],"busy":["Varattu"],"away for long":["pois pitkään"],"away":["pois"],"offline":["Offline"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ei näytä olevan asiakasta, joka tukee OMEMO:ta. Salattu chat ei ole enää mahdollista tässä ryhmäkeskustelussa."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Päästä päähän salausta ei voida käyttää, koska %1$s käyttää asiakasta, joka ei tue OMEMO:t a."],"Messages are being sent in plaintext":["Viestit lähetetään tekstinä"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Virhe yritettäessä poistaa laitteita."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Haluatko varmasti luoda uusia OMEMO-avaimia? Tämä poistaa vanhat avaimesi, eikä kaikkia aiemmin salattuja viestejä voi enää purkaa tässä laitteessa."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Emme valitettavasti voi lähettää salattua viestiä, koska %1$s edellyttää, että olet tilannut heidän läsnäolonsa, jotta näet heidän OMEMO-tietonsa"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Salattua viestiä ei voi lähettää, koska kohteen %1$s palvelinta ei löytynyt"],"Unable to send an encrypted message due to an unexpected error.":["Salattua viestiä ei voi lähettää odottamattoman virheen vuoksi."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Valitettavasti mitään laitteita ei löytynyt, joihin voimme lähettää OMEMO-salatun viestin."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tämä on OMEMO-salattu viesti, jota asiakkaasi ei näytä tukevan. Lisätietoja https://conversations.im/omemo"]," e.g. conversejs.org":[" esim. conversejs.org"],"Fetch registration form":["Hae rekisteröintilomake"],"Tip: A list of public XMPP providers is available":["Vihje: Julkisten XMPP-palveluntarjoajien luettelo on käytettävissä"],"here":["tässä"],"Sorry, we\'re unable to connect to your chosen provider.":["Valitettavasti emme voi muodostaa yhteyttä valitsemaasi palveluntarjoajaan."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Anteeksi, annettu tarjoaja ei tue bänditilin rekisteröintiä. Kokeile toista palveluntarjoajaa."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Jotain meni pieleen, kun muodostat yhteyden \\"%1$s\\". Oletko varma, että se on olemassa?"],"Now logging you in":["Kirjaudutaan sisään"],"Registered successfully":["Rekisteröity onnistuneesti"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Palveluntarjoaja hylkäsi rekisteröintiyrityksen. Tarkista syöttämiesi arvojen oikeellisuus."],"Leave this groupchat":["Jätä tämä ryhmäkeskustelu"],"Click to toggle the list of open groupchats":["Valitse tämä, jos haluat vaihtaa avoimien ryhmäkeskusteluiden luettelon"],"Open Groupchats":["Avaa ryhmäkeskusteluja"],"Are you sure you want to leave the groupchat %1$s?":["Oletko varma, että haluat jättää ryhmäkeskustelun %1$s?"],"Add":["Lisää"],"Add a Contact":["Lisää yhteystieto"],"This contact is busy":["Tämä yhteystieto on varattu"],"This contact is online":["Tämä yhteyshenkilö on verkossa"],"This contact is offline":["Tämä yhteyshenkilö on offline-tilassa"],"This contact is unavailable":["Tämä yhteystieto ei ole käytettävissä"],"This contact is away for an extended period":["Tämä kontakti on poissa pidemmän aikaa"],"This contact is away":["Tämä yhteyshenkilö on poissa"],"Contact name":["Yhteyshenkilön nimi"],"Optional nickname":["Valinnainen nimimerkki"],"Sorry, could not find a contact with that name":["Anteeksi, ei löytynyt kontaktia tällä nimellä"],"This contact has already been added":["Tämä yhteystieto on jo lisätty"],"Filter":["Suodatin"],"Filter by contact name":["Suodata yhteyshenkilön nimen perusteella"],"Filter by group name":["Suodata ryhmän nimen mukaan"],"Filter by status":["Suodata tilan mukaan"],"Any":["Mitään"],"Unread":["Lukemattomat"],"Chatty":["Puhelias"],"Extended Away":["Laajennettu pois"],"Click to remove %1$s as a contact":["Poista %1$s yhteystietona napsauttamalla tätä"],"Click to accept the contact request from %1$s":["Hyväksy yhteystietopyyntö kohteesta %1$s napsauttamalla tätä"],"Click to decline the contact request from %1$s":["Hylkää yhteystietopyyntö kohteesta %1$s napsauttamalla tätä"],"Are you sure you want to decline this contact request?":["Haluatko varmasti hylätä tämän yhteydenottopyynnön?"],"Contacts":["Yhteystiedot"],"Add a contact":["Lisää yhteystieto"],"Re-sync your contacts":["Yhteystietojen synkronointi uudelleen"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[151],{517:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"fi"},"Create your account":["Luo tilisi"],"Please enter the XMPP provider to register with:":["Ole hyvä ja kirjoita XMPP-palveluntarjoaja rekisteröidäksesi:"],"Already have a chat account?":["Onko sinulla jo chat-tili?"],"Log in here":["Kirjaudu sisään tästä"],"Account Registration:":["Tilin rekisteröinti:"],"Register":["Rekisteröidy"],"Choose a different provider":["Valitse toinen tarjoaja"],"Hold tight, we\'re fetching the registration form…":["Odota, haemme rekisteröintilomaketta …"],"Cancel":["Peruuta"],"The connection has dropped, attempting to reconnect.":["Yhteys katkesi, yritetään muodostaa uudelleen yhteyttä."],"An error occurred while connecting to the chat server.":["Yhdistettäessä chat-palvelimeen tapahtui virhe."],"Your XMPP address and/or password is incorrect. Please try again.":["XMPP-osoitteesi ja / tai salasanasi ovat väärin. Yritä uudelleen."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Valitettavasti emme pystyneet muodostamaan yhteyttä XMPP-isäntään verkkotunnuksella:%1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP-palvelin ei tarjonnut tuettua todennusmekanismia"],"Sorry, could not determine upload URL.":["Valitettavasti lataus-URL-osoitetta ei voitu määrittää."],"Sorry, could not determine file upload URL.":["Valitettavasti tiedoston lataus-URL-osoitetta ei voitu määrittää."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Valitettavasti tiedostoa ei voitu ladata. Palvelimesi vastaus: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Valitettavasti tiedostoa ei voitu ladata."],"You\'re not allowed to send a message.":["Et voi lähettää viestejä tässä huoneessa."],"Sorry, looks like file upload is not supported by your server.":["Valitettavasti palvelin ei tue tiedostojen lähettämistä."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Tiedoston koko, %1$s, ylittää palvelimen salliman enimmäismäärän, joka on %2$s."],"Smileys and emotions":["Hymiöt ja tunteet"],"People":["Ihmiset"],"Activities":["Toiminta"],"Travel":["Matkustaa"],"Objects":["Esineet"],"Animals and nature":["Eläimet ja luonto"],"Food and drink":["Ruoka ja juoma"],"Symbols":["Symbolit"],"Flags":["Liput"],"Stickers":["Tarrat"],"This groupchat is not anonymous":["Tämä ryhmäkeskustelu ei ole anonyymi"],"This groupchat now shows unavailable members":["Tämä ryhmäkeskustelu näyttää nyt poissa olevat jäsenet"],"This groupchat does not show unavailable members":["Tämä ryhmäkeskustelu ei näytä jäseniä, joita ei ole käytettävissä"],"The groupchat configuration has changed":["Ryhmäkeskusteluasetukset ovat muuttuneet"],"Groupchat logging is now enabled":["Ryhmäkeskustelujen kirjaaminen on nyt käytössä"],"Groupchat logging is now disabled":["Ryhmäkeskustelujen kirjaaminen on nyt poistettu käytöstä"],"This groupchat is now no longer anonymous":["Tämä ryhmäkeskustelu ei ole enää anonyymi"],"This groupchat is now semi-anonymous":["Tämä ryhmäkeskustelu on nyt osittain anonyymi"],"This groupchat is now fully-anonymous":["Tämä ryhmäkeskustelu on nyt täysin anonyymi"],"A new groupchat has been created":["Uusi ryhmäkeskustelu on luotu"],"Your nickname has been automatically set to %1$s":["Nimimerkkisi on asetettu automaattisesti arvoon %1$s"],"Your nickname has been changed to %1$s":["Nimimerkkisi on muutettu muotoon %1$s"],"You have been banned from this groupchat":["Sinulta on ryhmäkeskustelu estetty"],"You have been kicked from this groupchat":["Sinut on poistettu tästä ryhmäkeskusteluista"],"You have been removed from this groupchat because of an affiliation change":["Sinut on poistettu tästä ryhmäkeskusteluista jäsenyyden muutoksen vuoksi"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sinut on poistettu tästä ryhmäkeskusteluista, koska ryhmäkeskustelu on vaihdettu vain jäsenille etkä ole jäsen"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sinut on poistettu tästä ryhmäkeskusteluista, koska sitä ylläpitävä palvelu suljetaan"],"Your message was not delivered because you weren\'t allowed to send it.":["Viestiäsi ei toimitettu, koska sinulla ei ollut oikeutta lähettää sitä."],"Your message was not delivered because you\'re not present in the groupchat.":["Viestiäsi ei toimitettu, koska et ole läsnä ryhmäkeskusteluissa."],"A timeout happened while while trying to retract your message.":["Aikakatkaisu yritettäessä peruuttaa viestiä."],"You\'re not allowed to register yourself in this groupchat.":["Et voi rekisteröidä itseäsi tähän ryhmäkeskusteluun."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Et voi rekisteröityä tähän ryhmäkeskusteluun, koska se on vain jäsenille."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nimimerkilläsi ei voi rekisteröidä tähän ryhmäkeskusteluun, se ei tue rekisteröintiä."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nimimerkkiäsi ei voi rekisteröidä tähän ryhmäkeskusteluun, toimitettu virheellinen tietolomake."],"Topic set by %1$s":["Aihe asetettu %1$s toimesta"],"Topic cleared by %1$s":["Aihe poistettu %1$s"],"%1$s has been banned by %2$s":["%2$s antoi porttikiellon käyttäjälle %1$s"],"%1$s has been banned":["%1$s on kielletty"],"%1$s\'s nickname has changed":["%1$s nimimerkki on muuttunut"],"%1$s has been kicked out by %2$s":["%2$s potki ulos käyttäjän %1$s"],"%1$s has been kicked out":["%1$s on poistettu"],"%1$s has been removed because of an affiliation change":["%1$s on poistettu jäsenyyden muutoksen vuoksi"],"%1$s has been removed for not being a member":["%1$s on poistettu, koska hän ei ole jäsen"],"%1$s is no longer an admin of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun järjestelmänvalvoja"],"%1$s is no longer an owner of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun omistaja"],"%1$s is no longer banned from this groupchat":["%1$s ei ole enää kielletty tästä ryhmäkeskustelusta"],"%1$s is no longer a member of this groupchat":["%1$s ei ole enää tämän ryhmäkeskustelun jäsen"],"%1$s is now a member of this groupchat":["%1$s on nyt tämän ryhmäkeskustelun jäsen"],"%1$s is now an %2$s of this groupchat":["%1$s on nyt %2$s tästä ryhmäkeskustelusta"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Valitsemasi nimimerkki on varattu tai käytössä. Ole hyvä ja valitse toinen."],"Password incorrect":["Salasana väärin"],"You are not on the member list of this groupchat.":["Et ole tämän ryhmäkeskustelun jäsenluettelossa."],"You have been banned from this groupchat.":["Sinulta on kielletty ryhmäkeskustelu."],"You are not allowed to create new groupchats.":["Et voi luoda uusia ryhmäkeskusteluja."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Nimimerkkisi ei ole tämän ryhmäkeskustelun käytäntöjen mukainen."],"This groupchat does not (yet) exist.":["Tätä ryhmäkeskustelua ei ole (vielä) olemassa."],"This groupchat has reached its maximum number of participants.":["Tämä ryhmäkeskustelu on saavuttanut maksimimäärän osallistujia."],"Remote server not found":["Palvelinta ei löytynyt"],"The explanation given is: \\"%1$s\\".":["Annettu selitys on: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s on kutsunut sinut ryhmäkeskusteluun: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s on kutsunut sinut ryhmäkeskusteluun: %2$s, ja jättänyt seuraavan syyn: \\"%3$s\\""],"Error":["Virhe"],"Sorry, something went wrong while trying to save your bookmark.":["Jokin meni pieleen yritettäessä tallentaa kirjanmerkkiäsi."],"Timeout Error":["Aikakatkaisuvirhe"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Palvelin ei palauttanut kirjanmerkkejäsi sallitussa ajassa. Voit ladata sivun uudelleen ja pyytää niitä uudelleen."],"My contacts":["Yhteystiedot"],"Pending contacts":["Odottavat yhteystiedot"],"Contact requests":["Yhteyspyynnöt"],"Ungrouped":["Ryhmittämätön"],"New messages":["Uudet viestit"],"Sorry, there was an error while trying to add %1$s as a contact.":["Valitettavasti tapahtui virhe yrittäessäsi lisätä %1$s yhteystiedoksi."],"This client does not allow presence subscriptions":["Tämä asiakasohjelma ei salli läsnäolotilauksia"],"Click to hide these contacts":["Piilota nämä yhteystiedot napsauttamalla"],"Unbookmark this groupchat":["Poista tämä ryhmäkeskustelu kirjanmerkeistä"],"Click to open this groupchat":["Avaa tämä ryhmäkeskustelu napsauttamalla"],"Click to toggle the bookmarks list":["Napsauta vaihtaaksesi kirjanmerkkiluetteloa"],"Bookmarks":["Kirjanmerkit"],"Bookmark this groupchat":["Lisää tämä ryhmäkeskustelu kirjanmerkkeihin"],"Would you like this groupchat to be automatically joined upon startup?":["Haluatko, että tämä ryhmäkeskustelu liitetään automaattisesti käynnistyksen yhteydessä?"],"The name for this bookmark:":["Tämän kirjanmerkin nimi:"],"What should your nickname for this groupchat be?":["Mikä nimimerkkisi tähän ryhmäkeskusteluun pitäisi olla?"],"Save":["Tallentaa"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Haluatko varmasti poistaa kirjanmerkin \\"%1$s\\"?"],"Close":["Sulje"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Lataa äänitiedosto \\"%1$s\\""],"Download file \\"%1$s\\"":["Lataa tiedosto \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Viestiversiot"],"Retry":[""],"Uploading file:":["Lähetetään tiedosto:"],"%1$s has removed this message":["%1$s on poistanut tämän viestin"],"This message has been edited":["Tätä viestiä on muokattu"],"Show more":["Näytä lisää"],"No message history available.":["Viestihistoriaa ei ole saatavilla."],"Search results":["Hakutulokset"],"Search":["Hae"],"Insert emojis":["Lisää hymiöt"],"Send the message":["Lähetä viesti"],"Start a call":["Aloita puhelu"],"Message characters remaining":["Viestimerkkejä jäljellä"],"Choose a file to send":["Valitse lähetettävä tiedosto"],"Click to write as a normal (non-spoiler) message":["Napsauta kirjoittaaksesi normaalina (ei-spoileri) viestinä"],"Click to write your message as a spoiler":["Napsauta kirjoittaaksesi viestin spoilerina"],"The User\'s Profile Image":["Käyttäjän profiilikuva"],"Trusted":["Luotettu"],"Untrusted":["Ei-luotettu"],"OMEMO Fingerprints":["OMEMO-sormenjäljet"],"No OMEMO-enabled devices found":["OMEMO-yhteensopivia laitteita ei löytynyt"],"Remove as contact":["Poista kontakti"],"XMPP Address":["XMPP-osoite"],"Email":["Sähköposti"],"Full Name":["Koko nimi"],"Nickname":["Nimimerkki"],"Refresh":["Virkistää"],"Role":["Rooli"],"URL":["URL"],"%1$s is typing":["%1$s kirjoittaa"],"%1$s has stopped typing":["%1$s on lopettanut kirjoittamisen"],"%1$s has gone away":["%1$s on poissa"],"Remove messages":["Poista viestit"],"Close this chat":["Sulje chat"],"Write in the third person":["Kirjoita kolmannessa persoonassa"],"Show this menu":["Näytä tämä valikko"],"Hidden message":["Piilotettu viesti"],"Message":["Viesti"],"Optional hint":["Valinnainen vihje"],"You have unread messages":["Sinulla on lukemattomia viestejä"],"Details":["Tiedot"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Huomaa, että muut XMPP / Jabber-asiakkaat (ja palvelimet) eivät ehkä vielä tue peruuttamista ja että tätä viestiä ei välttämättä poisteta kaikkialta."],"Are you sure you want to retract this message?":["Haluatko varmasti peruuttaa tämän viestin?"],"Confirm":["Vahvistaa"],"You have an unsent message which will be lost if you continue. Are you sure?":["Sinulla on lähettämätön viesti, joka katoaa, jos jatkat. Oletko varma?"],"Are you sure you want to clear the messages from this conversation?":["Haluatko varmasti tyhjentää tämän keskustelun viestit?"],"%1$s has gone offline":["%1$s on mennyt offline-tilaan"],"%1$s is busy":["%1$s on varattu"],"%1$s is online":["%1$s on online-tilassa"],"Sorry, something went wrong while trying to refresh":["Jokin meni pieleen yrittäessäsi päivittää"],"Are you sure you want to remove this contact?":["Haluatko varmasti poistaa tämän yhteystiedon?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Valitettavasti tapahtui virhe yrittäessäsi poistaa %1$s yhteyshenkilönä."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Suorituskyvyn parantamiseksi tallennamme tietosi tämän selaimen välimuistiin. Poista tämä valintaruutu, jos kyseessä on julkinen tietokone tai jos haluat, että tietosi poistetaan, kun kirjaudut ulos. On tärkeää, että kirjaudut nimenomaisesti ulos, muuten kaikkia välimuistissa olevia tietoja ei ehkä poisteta. Huomaa, että kun käytetään epäluotettavaa laitetta, OMEMO-salaus EI ole käytettävissä."],"This is a trusted device":["Tämä on luotettava laite"],"Password":["Salasana"],"Create an account":["Luo tili"],"Don\'t have a chat account?":["Eikö sinulla ole chat-tiliä?"],"Log in":["Kirjaudu sisään"],"Disconnected":["Katkaistu"],"Click here to log in anonymously":["Napsauta tätä kirjautuaksesi anonyymisti"],"Username":["Käyttäjätunnus"],"user@domain":["käyttäjä@toimialue"],"Please enter a valid XMPP address":["Anna kelvollinen XMPP-osoite"],"Chat Contacts":["Chat-yhteystiedot"],"Toggle chat":["Vaihda chatti"],"Click to restore this chat":["Palauta tämä chat napsauttamalla"],"Minimized":["Minimoitu"],"Minimize this groupchat":["Pienennä tämä ryhmäkeskustelu"],"This user is a moderator.":["Tämä käyttäjä on moderaattori."],"This user can send messages in this groupchat.":["Tämä käyttäjä voi lähettää viestejä tässä ryhmäkeskustelussa."],"This user can NOT send messages in this groupchat.":["Tämä käyttäjä EI VOI lähettää viestejä tässä ryhmäkeskustelussa."],"Owner":["Omistaja"],"Admin":["Admin"],"Member":["Jäsen"],"Moderator":["Moderaattori"],"Visitor":["Vierailija"],"Click to mention %1$s in your message.":["Valitse tämä, jos haluat mainita viestissäsi %1$s."],"Participants":["Osallistujat"],"This field is required":["Tämä kenttä pitää täyttää"],"Join":["Liity"],"Enter a new Groupchat":["Anna uusi ryhmäkeskustelu"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["Ryhmäkeskustelun nimi"],"Groupchat address":["Ryhmäkeskusteluosoite"],"Groupchat id is invalid.":["Ryhmäkeskustelun tunnus on virheellinen."],"Invite":["Kutsu"],"Invite someone to this groupchat":["Kutsu henkilö tähän ryhmäkeskusteluun"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["Kutsun valinnainen syy"],"Show groupchats":["Näytä ryhmäkeskustelut"],"Server address":["Palvelimen osoite"],"Show more information on this groupchat":["Näytä lisätietoja tästä ryhmäkeskustelusta"],"Query for Groupchats":["Ryhmäkeskustelujen kysely"],"Description:":["Kuvaus:"],"Groupchat Address (JID):":["Groupchat-osoite (JID):"],"Participants:":["Osallistujat:"],"Features:":["Ominaisuuksia:"],"Requires authentication":["Edellyttää todennusta"],"Hidden":["Piilotettu"],"Requires an invitation":["Vaatii kutsun"],"Moderated":["Valvottu"],"Non-anonymous":["Ei-anonyymi"],"Open":["Avata"],"Permanent":["Pysyvä"],"Public":["Julkinen"],"Semi-anonymous":["Semi-anonyymi"],"Temporary":["Tilapäinen"],"Unmoderated":["Valvomattomat"],"conference.example.org":["conference.example.org"],"Groupchats found":["Löytyi ryhmäkeskusteluja"],"No groupchats found":["Ryhmäkeskusteluja ei löytynyt"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Valvojat ovat etuoikeutettuja käyttäjiä, jotka voivat muuttaa muiden käyttäjien rooleja (lukuun ottamatta niitä, joilla on järjestelmänvalvojan tai omistajan kytköksiä."],"The default role, implies that you can read and write messages.":["Oletusrooli tarkoittaa, että voit lukea ja kirjoittaa viestejä."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Vierailijat eivät saa kirjoittaa viestejä valvotussa usean käyttäjän keskustelussa."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Omistaja on korkein rooli. Omistajat voivat muokata kaikkien muiden käyttäjien rooleja ja yhteyksiä."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Järjestelmänvalvoja on toiseksi korkein rooli. Järjestelmänvalvojat voivat muokata kaikkien muiden käyttäjien rooleja ja yhteyksiä omistajia lukuun ottamatta."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Voit kieltää käyttäjän, annat heille kuuluminen \\"hylkiö\\"."],"Change role":["Vaihda rooli"],"New Role":["Uusi rooli"],"Reason":["Syy"],"Change affiliation":["Muuta kuulumista"],"New affiliation":["Uusi kuuluminen"],"Affiliation":["Kuuluminen"],"Moderator Tools":["Moderaattori työkalut"],"No users with that affiliation found.":["Käyttäjiä, joista on kyse, ei löytynyt."],"No users with that role found.":["Tätä roolia käyttäviä käyttäjiä ei löytynyt."],"Type here to filter the search results":[""],"Show users":["Näytä käyttäjät"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Rooleja annetaan käyttäjille, jotka myöntävät tai kieltävät heille tiettyjä kyvykkyyksiä usean käyttäjän keskustelussa. Ne on määritetty joko eksplisiittisesti tai implisiittisesti osana kuulumista. Rooli, joka ei johdu liitoksesta, on voimassa vain käyttäjän istunnon ajan."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Kuuluminen on pitkäaikainen oikeus, joka tyypillisesti edellyttää tiettyä roolia ja joka antaa etuoikeuksia ja velvollisuuksia. Esimerkiksi järjestelmänvalvojilla ja omistajilla on automaattisesti moderaattorin rooli."],"Sorry, something went wrong while trying to set the affiliation":["Anteeksi, jokin meni pieleen, kun yrittää asettaa kuuluminen"],"Affiliation changed":["Kuuluminen muuttui"],"Role changed":["Rooli muuttui"],"You\'re not allowed to make that change":["Et saa tehdä sitä muutosta"],"Sorry, something went wrong while trying to set the role":["Anteeksi, jotain meni pieleen, kun yritetään asettaa rooli"],"Topic":["Aihe"],"Topic author":["Aiheen tekijä"],"Groupchat address (JID)":["Ryhmäkeskusteluosoite (JID)"],"Message archiving":["Viestien arkistointi"],"Messages are archived on the server":["Viestit arkistoidaan palvelimelle"],"Description":["Kuvaus"],"Features":["Ominaisuudet"],"This groupchat is not publicly searchable":["Tämä ryhmäkeskustelu ei ole julkisesti haettavissa"],"This groupchat is restricted to members only":["Tämä ryhmäkeskustelu on rajoitettu vain jäsenille"],"Members only":["Vain jäsenille"],"Participants entering this groupchat need to request permission to write":["Ryhmäkeskusteluun osallistuvien osallistujien on pyydettävä lupaa kirjoittaa"],"Name":["Nimi"],"This groupchat does not require a password upon entry":["Tämä ryhmäkeskustelu ei vaadi salasanaa sisäänkirjautumisen yhteydessä"],"No password required":["Salasanaa ei vaadita"],"Not anonymous":["Ei anonyymi"],"All other groupchat participants can see your XMPP address":["Kaikki muut ryhmäkeskusteluun osallistujat näkevät XMPP-osoitteesi"],"Not moderated":["Ei valvottu"],"Participants entering this groupchat can write right away":["Ryhmäkeskusteluun osallistujat voivat kirjoittaa heti"],"Online users":["Online-käyttäjät"],"Anyone can join this groupchat":["Kuka tahansa voi liittyä tähän ryhmäkeskusteluun"],"This groupchat requires a password before entry":["Tämä ryhmäkeskustelu vaatii salasanan ennen sisäänpääsyä"],"Password protected":["Salasana suojattu"],"Persistent":["Jatkuva"],"This groupchat persists even if it\'s unoccupied":["Tämä ryhmäkeskustelu jatkuu, vaikka se olisi tyhjillään"],"Only moderators can see your XMPP address":["Vain moderaattorit näkevät XMPP-osoitteesi"],"This groupchat will disappear once the last person leaves":["Tämä ryhmäkeskustelu katoaa, kun viimeinen henkilö lähtee"],"This groupchat is publicly searchable":["Tämä ryhmäkeskustelu on julkisesti haettavissa"],"Groupchat info for %1$s":["Ryhmäkeskustelun tiedot kohteelle %1$s"],"You\'re not allowed to send messages in this room":["Et voi lähettää viestejä tässä huoneessa"],"The conversation has moved. Click below to enter.":["Keskustelu on siirtynyt. Napsauta alta siirtyäksesi."],"This groupchat no longer exists":["Tätä ryhmäkeskustelua ei enää ole"],"Enter groupchat":["Liity ryhmäkeskusteluun"],"Choose a nickname to enter":["Valitse nimimerkki kirjoittaaksesi"],"Please choose your nickname":["Valitse nimimerkkisi"],"This groupchat requires a password":["Tämä groupchat vaatii salasanan"],"Password: ":["Salasana: "],"Submit":["Lähetä"],"%1$s has entered the groupchat":["%1$s on liittynyt ryhmäkeskusteluun"],"%1$s has left the groupchat":["%1$s on poistunut ryhmäkeskustelusta"],"%1$s is now a moderator":["%1$s on nyt moderaattori"],"%1$s is no longer a moderator":["%1$s ei ole enää moderaattori"],"%1$s has been given a voice":["%1$s on saanut äänen"],"%1$s has been muted":["%1$s on mykistetty"],"%1$s and %2$s":["%1$s ja %2$s"],"Change user\'s affiliation to admin":["Muuta käyttäjän liitos adminiksi"],"Ban user by changing their affiliation to outcast":["Estä käyttäjä muuttamalla heidän kuulumisensa hylkiöksi"],"Clear the chat area":["Tyhjennä chat-alue"],"Close this groupchat":["Sulje tämä ryhmäkeskustelu"],"Change user role to participant":["Käyttäjän roolin muuttaminen osallistujaksi"],"Remove this groupchat":["Poista tämä ryhmäkeskustelu"],"Kick user from groupchat":["Poista käyttäjä ryhmäkeskusteluista"],"Write in 3rd person":["Kirjoita kolmannessa persoonassa"],"Grant membership to a user":["Jäsenyyden myöntäminen käyttäjälle"],"Opens up the moderator tools GUI":["Avaa moderaattorityökalujen graafisen käyttöliittymän"],"Remove user\'s ability to post messages":["Poista käyttäjän kyky lähettää viestejä"],"Change your nickname":["Nimimerkin muuttaminen"],"Grant moderator role to user":["Myönnä moderaattorin rooli käyttäjälle"],"Grant ownership of this groupchat":["Myönnä omistajuus tähän ryhmäkeskusteluun"],"Register your nickname":["Rekisteröi nimimerkkisi"],"Revoke the user\'s current affiliation":["Peruuta käyttäjän nykyinen yhteys"],"Set groupchat subject":["Aseta ryhmäkeskustelu aihe"],"Set groupchat subject (alias for /subject)":["Aseta ryhmäkeskusteluaihe (alias / aiheelle)"],"Allow muted user to post messages":["Salli mykistetyn käyttäjän lähettää viestejä"],"You are about to retract this message.":["Olet perumassa tämän viestin."],"You may optionally include a message, explaining the reason for the retraction.":["Voit valinnaisesti sisällyttää viestin, joka selittää peruuttamisen syyn."],"Message Retraction":["Viestin peruuttaminen"],"Optional reason":["Valinnainen syy"],"Sorry, you\'re not allowed to retract this message":["Valitettavasti et voi peruuttaa tätä viestiä"],"A timeout occurred while trying to retract the message":["Aikakatkaisu yritettäessä peruuttaa viestiä"],"Sorry, you\'re not allowed to retract this message.":["Valitettavasti et saa peruuttaa tätä viestiä."],"Configure this groupchat":["Määritä tämä ryhmäkeskustelu"],"Invite someone to join this groupchat":["Kutsu joku liittymään tähän ryhmäkeskusteluun"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":["Tuhoa"],"Leave":["Lähde"],"Hide the list of participants":["Piilota osallistujien luettelo"],"Forbidden: you do not have the necessary role in order to do that.":["Kielletty: sinulla ei ole tarvittavaa roolia sen tekemiseen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Kielletty: sinulla ei ole tarvittavaa yhteyttä, jotta voit tehdä sen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Virhe: Komento %1$s ottaa kaksi argumenttia, käyttäjän nimimerkin ja valinnaisesti syyn."],"Error: couldn\'t find a groupchat participant based on your arguments":["Virhe: ryhmäkeskustelun osallistujaa ei löytynyt argumenttiesi perusteella"],"Error: found multiple groupchat participant based on your arguments":["Virhe: löytyi useita ryhmäkeskustelun osallistujia argumenttiesi perusteella"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":["Anteeksi, komennon suorittamisessa tapahtui virhe."],"Check your browser\'s developer console for details.":["Tarkista yksityiskohdat selaimesi kehittäjäkonsolista."],"Please enter the XMPP address of this groupchat to confirm":["Ole hyvä ja kirjoita XMPP-palveluntarjoaja rekisteröidäksesi"],"name@example.org":["name@example.org"],"Optional reason for destroying this groupchat":["Valinnainen syy tämän ryhmäkeskuksen tuhoamiseen"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Lempinimesi on \\"%1$s\\""],"Error: invalid number of arguments":["Virhe: virheellinen määrä argumentteja"],"This action was done by %1$s.":["Tämän toiminnon suoritti %1$s."],"The reason given is: \\"%1$s\\".":["Annettu syy on: \\"%1$s\\"."],"Groupchats":["Ryhmäkeskustelut"],"Add a new groupchat":["Uuden ryhmäkeskustelun lisääminen"],"Query for groupchats":["Ryhmäkeskustelujen kysely"],"Sorry, an error occurred while trying to submit the config form.":["Virhe yritettäessä lähettää määrityslomaketta."],"Announcements":["Ilmoitukset"],"Click to open this server message":["Avaa tämä palvelinviesti napsauttamalla"],"Notification from %1$s":["Ilmoitus kohteesta %1$s"],"%1$s says":["%1$s sanoo"],"has gone offline":["on mennyt offline-tilaan"],"has gone away":["on mennyt pois"],"is busy":["on varattu"],"has come online":["on tullut verkkoon"],"wants to be your contact":["haluaa olla yhteyshenkilösi"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Noin"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Avoimen Lähdekoodin %2$s XMPP chat client tuonut sinulle %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Käännä %2$s se omalle kielellesi"],"Log out":["Kirjaudu ulos"],"Click to change your chat status":["Muuta keskustelutilaasi napsauttamalla tätä"],"Show details about this chat client":["Näytä tämän chat-asiakkaan tiedot"],"Your avatar image":["Avatar-kuvasi"],"Checkbox for selecting the following fingerprint":["Valintaruutu seuraavan sormenjäljen valitsemiseksi"],"Device without a fingerprint":["Laite ilman sormenjälkiä"],"Other OMEMO-enabled devices":["Muut OMEMO-yhteensopivat laitteet"],"Checkbox to select fingerprints of all other OMEMO devices":["Valintaruutu valitaksesi kaikkien muiden OMEMO-laitteiden sormenjäljet"],"Remove checked devices and close":["Poista valitut laitteet ja sulje"],"Select all":["Valitse kaikki"],"This device\'s OMEMO fingerprint":["Tämän laitteen OMEMO-sormenjälki"],"Generate new keys and fingerprint":["Luo uusia avaimia ja sormenjälkiä"],"Your Profile":["Profiilisi"],"XMPP Address (JID)":["XMPP-osoite (JID)"],"Save and close":["Tallenna ja sulje"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Käytä pilkkuja erottamaan useita rooleja. Teidän roolit ovat osoittaneet, nimesi vieressä chat-viestejä."],"OMEMO":["OMEMO"],"Profile":["Profiili"],"Sorry, an error happened while trying to save your profile data.":["Anteeksi, tapahtui virhe yrittäessäsi tallentaa profiilisi tietoja."],"You can check your browser\'s developer console for any error output.":["Voit tarkistaa virheet selaimesi kehittäjäkonsolista."],"Away":["Poissa"],"Busy":["Varattu"],"Custom status":["Mukautettu tila"],"Offline":["Poissa"],"Online":["Online"],"Away for long":["Poissa pitkään"],"Change chat status":["Vaihda chatin tila"],"Personal status message":["Henkilökohtainen tilaviesti"],"I am %1$s":["Olen %1$s"],"Are you sure you want to log out?":["Haluatko varmasti kirjautua ulos?"],"online":["verkossa"],"busy":["Varattu"],"away for long":["pois pitkään"],"away":["pois"],"offline":["Offline"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ei näytä olevan asiakasta, joka tukee OMEMO:ta. Salattu chat ei ole enää mahdollista tässä ryhmäkeskustelussa."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Päästä päähän salausta ei voida käyttää, koska %1$s käyttää asiakasta, joka ei tue OMEMO:t a."],"Messages are being sent in plaintext":["Viestit lähetetään tekstinä"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Emme valitettavasti voi lähettää salattua viestiä, koska %1$s edellyttää, että olet tilannut heidän läsnäolonsa, jotta näet heidän OMEMO-tietonsa"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Salattua viestiä ei voi lähettää, koska kohteen %1$s palvelinta ei löytynyt"],"Unable to send an encrypted message due to an unexpected error.":["Salattua viestiä ei voi lähettää odottamattoman virheen vuoksi."],"Sorry, an error occurred while trying to remove the devices.":["Virhe yritettäessä poistaa laitteita."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Haluatko varmasti luoda uusia OMEMO-avaimia? Tämä poistaa vanhat avaimesi, eikä kaikkia aiemmin salattuja viestejä voi enää purkaa tässä laitteessa."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Valitettavasti mitään laitteita ei löytynyt, joihin voimme lähettää OMEMO-salatun viestin."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tämä on OMEMO-salattu viesti, jota asiakkaasi ei näytä tukevan. Lisätietoja https://conversations.im/omemo"]," e.g. conversejs.org":[" esim. conversejs.org"],"Fetch registration form":["Hae rekisteröintilomake"],"Tip: A list of public XMPP providers is available":["Vihje: Julkisten XMPP-palveluntarjoajien luettelo on käytettävissä"],"here":["tässä"],"Sorry, we\'re unable to connect to your chosen provider.":["Valitettavasti emme voi muodostaa yhteyttä valitsemaasi palveluntarjoajaan."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Anteeksi, annettu tarjoaja ei tue bänditilin rekisteröintiä. Kokeile toista palveluntarjoajaa."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Jotain meni pieleen, kun muodostat yhteyden \\"%1$s\\". Oletko varma, että se on olemassa?"],"Now logging you in":["Kirjaudutaan sisään"],"Registered successfully":["Rekisteröity onnistuneesti"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Palveluntarjoaja hylkäsi rekisteröintiyrityksen. Tarkista syöttämiesi arvojen oikeellisuus."],"Leave this groupchat":["Jätä tämä ryhmäkeskustelu"],"Click to toggle the list of open groupchats":["Valitse tämä, jos haluat vaihtaa avoimien ryhmäkeskusteluiden luettelon"],"Open Groupchats":["Avaa ryhmäkeskusteluja"],"Are you sure you want to leave the groupchat %1$s?":["Oletko varma, että haluat jättää ryhmäkeskustelun %1$s?"],"Add":["Lisää"],"Add a Contact":["Lisää yhteystieto"],"This contact is busy":["Tämä yhteystieto on varattu"],"This contact is online":["Tämä yhteyshenkilö on verkossa"],"This contact is offline":["Tämä yhteyshenkilö on offline-tilassa"],"This contact is unavailable":["Tämä yhteystieto ei ole käytettävissä"],"This contact is away for an extended period":["Tämä kontakti on poissa pidemmän aikaa"],"This contact is away":["Tämä yhteyshenkilö on poissa"],"Contact name":["Yhteyshenkilön nimi"],"Optional nickname":["Valinnainen nimimerkki"],"Sorry, could not find a contact with that name":["Anteeksi, ei löytynyt kontaktia tällä nimellä"],"This contact has already been added":["Tämä yhteystieto on jo lisätty"],"Filter":["Suodatin"],"Filter by contact name":["Suodata yhteyshenkilön nimen perusteella"],"Filter by group name":["Suodata ryhmän nimen mukaan"],"Filter by status":["Suodata tilan mukaan"],"Any":["Mitään"],"Unread":["Lukemattomat"],"Chatty":["Puhelias"],"Extended Away":["Laajennettu pois"],"Click to remove %1$s as a contact":["Poista %1$s yhteystietona napsauttamalla tätä"],"Click to accept the contact request from %1$s":["Hyväksy yhteystietopyyntö kohteesta %1$s napsauttamalla tätä"],"Click to decline the contact request from %1$s":["Hylkää yhteystietopyyntö kohteesta %1$s napsauttamalla tätä"],"Are you sure you want to decline this contact request?":["Haluatko varmasti hylätä tämän yhteydenottopyynnön?"],"Contacts":["Yhteystiedot"],"Add a contact":["Lisää yhteystieto"],"Re-sync your contacts":["Yhteystietojen synkronointi uudelleen"]}}}')}}]);
 //# sourceMappingURL=fi-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/fr-LC_MESSAGES-converse-po.js b/src/conversejs/locales/fr-LC_MESSAGES-converse-po.js
index 17550951ca012cdbaf11d4e68c1eea30fa597042..fd4b3b1c71aa6b3a952a90cc80a07f3602db9e56 100644
--- a/src/conversejs/locales/fr-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/fr-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[152],{430:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Create your account":["Créer votre compte"],"Please enter the XMPP provider to register with:":["Veuillez saisir le fournisseur XMPP auprès duquel s’inscrire :"],"Already have a chat account?":["Vous avez déjà un compte ?"],"Log in here":["Connectez-vous ici"],"Account Registration:":["Création de compte :"],"Register":["S’inscrire"],"Choose a different provider":["Choisir un autre fournisseur"],"Hold tight, we\'re fetching the registration form…":["Ne bougez pas, on va chercher le formulaire d’inscription…"],"Cancel":["Annuler"],"The connection has dropped, attempting to reconnect.":["La connexion a été perdue, tentative de reconnexion en cours."],"An error occurred while connecting to the chat server.":["Une erreur est survenue lors de la connexion au serveur de discussion."],"Your XMPP address and/or password is incorrect. Please try again.":["Votre addresse XMPP et/ou votre mot de passe sont/est incorrect(s). Veuillez réessayer."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Désolé, nous n’avons pas pu nous connecter à l’hôte XMPP avec le domaine : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Le serveur XMPP n’a pas proposé un mécanisme d’authentification pris en charge"],"Sorry, could not determine upload URL.":["Désolé, impossible de déterminer l’URL d’envoi de fichier."],"Sorry, could not determine file upload URL.":["Désolé, impossible de déterminer l’URL pour envoyer le fichier."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Désolé, le téléversement du fichier a échoué. Votre serveur a répondu : « %1$s »"],"Sorry, could not succesfully upload your file.":["Désolé, le téléversement du fichier a échoué."],"You\'re not allowed to retract your message.":["Vous n’êtes pas autorisé(e) a retirer votre message."],"Sorry, an error occurred while trying to retract your message.":["Désolé, une erreur s’est produite lors du retrait de votre message."],"You\'re not allowed to send a message.":["Vous n’êtes pas autorisé(e) à envoyer de message."],"Sorry, an error occurred while trying to send your message.":["Désolé, une erreur est survenue lors de l’envoi de votre message."],"Sorry, looks like file upload is not supported by your server.":["Désolé, votre serveur semble ne pas prendre en charge le téléversement de fichiers."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La taille de votre fichier, %1$s, dépasse le maximum autorisé par votre serveur, qui est %2$s."],"Smileys and emotions":["Émoticônes"],"People":["Personnes"],"Activities":["Activités"],"Travel":["Voyage"],"Objects":["Objets"],"Animals and nature":["Animaux et nature"],"Food and drink":["Cuisine et boissons"],"Symbols":["Symboles"],"Flags":["Drapeaux"],"Stickers":["Autocollants"],"This groupchat is not anonymous":["Ce salon n’est pas anonyme"],"This groupchat now shows unavailable members":["Ce salon affiche maintenant les membres indisponibles"],"This groupchat does not show unavailable members":["Ce salon n’affiche pas les membres indisponibles"],"The groupchat configuration has changed":["Les paramètres de ce salon ont été modifiés"],"Groupchat logging is now enabled":["L’inscription est maintenant activé sur ce salon"],"Groupchat logging is now disabled":["L’inscription est maintenant désactivé sur ce salon"],"This groupchat is now no longer anonymous":["Ce salon n’est plus anonyme"],"This groupchat is now semi-anonymous":["Ce salon est maintenant semi-anonyme"],"This groupchat is now fully-anonymous":["Ce salon est maintenant entièrement anonyme"],"A new groupchat has been created":["Un nouveau salon a été créé"],"Your nickname has been automatically set to %1$s":["Votre pseudo a été automatiquement défini à : %1$s"],"Your nickname has been changed to %1$s":["Votre pseudo a été modifié en : %1$s"],"You have been banned from this groupchat":["Vous avez été banni de ce salon"],"You have exited this groupchat due to a technical problem":["Vous avez été retiré de ce salon à cause d’un problème technique"],"You have been kicked from this groupchat":["Vous avez été expulsé de ce salon"],"You have been removed from this groupchat because of an affiliation change":["Vous avez été retiré de ce salon du fait d’un changement d’affiliation"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Vous avez été retiré de ce salon parce que ce salon est devenu réservé aux membres et vous n’êtes pas membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Vous avez été retiré de ce salon parce que le service sur lequel il est hébergé est en train d’être arrêté"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Votre retrait de message n\'a pas été délivré parce que vous n’êtes pas présent(e) dans le salon."],"Your message was not delivered because you weren\'t allowed to send it.":["Votre message n’a pas été délivré car vous n’avez pas été autorisé à l’envoyer."],"Your message was not delivered because you\'re not present in the groupchat.":["Votre message n\'a pas été délivré parce que vous n\'êtes pas présent dans le salon."],"You\'re not allowed to register yourself in this groupchat.":["Vous n’êtes pas autorisé à vous enregistrer vous-mêmes dans ce salon."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Vous n’êtes pas autorisé à vous inscrire dans ce salon parce qu’il est réservé aux membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Impossible d’enregistrer votre pseudo dans ce salon, il ne gère pas l’enregistrement."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Impossible d’enregistrer votre pseudo dans ce salon, un formulaire invalide a été envoyé."],"Topic set by %1$s":["Le sujet a été défini par %1$s"],"Topic cleared by %1$s":["Le sujet de ce salon a été retiré par %1$s"],"%1$s has been banned by %2$s":["%1$s a été banni par %2$s"],"%1$s has been banned":["%1$s a été banni"],"%1$s\'s nickname has changed":["Le pseudo de %1$s a changé"],"%1$s has been kicked out by %2$s":["%1$s a été expulsé par %2$s"],"%1$s has been kicked out":["%1$s a été expulsé"],"%1$s has been removed because of an affiliation change":["%1$s a été supprimé à cause d’un changement d’affiliation"],"%1$s has been removed for not being a member":["%1$s a été supprimé car il n’est pas membre"],"%1$s is no longer an admin of this groupchat":["%1$s n’est plus un administrateur de ce salon"],"%1$s is no longer an owner of this groupchat":["%1$s n’est plus un propriétaire de ce salon"],"%1$s is no longer banned from this groupchat":["%1$s n’est plus banni de ce salon"],"%1$s is no longer a member of this groupchat":["%1$s n\'est plus membre de ce salon"],"%1$s is now a member of this groupchat":["%1$s est désormais membre de ce salon"],"%1$s is now an %2$s of this groupchat":["%1$s est maintenant %2$s de ce salon"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Le pseudo choisi est réservé ou actuellement utilisé, veuillez en choisir un différent."],"Password incorrect":["Mot de passe incorrect"],"You are not on the member list of this groupchat.":["Vous n’êtes pas dans la liste des membres de ce salon."],"You have been banned from this groupchat.":["Vous avez été banni de ce salon."],"You are not allowed to create new groupchats.":["Vous n’êtes pas autorisé à créer des salons."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Votre pseudo n’est pas conforme à la politique de ce salon."],"This groupchat does not (yet) exist.":["Ce salon n’existe pas (pour l’instant)."],"This groupchat has reached its maximum number of participants.":["Ce salon a atteint sa limite maximale d’occupants."],"Remote server not found":["Serveur distant introuvable"],"The explanation given is: \\"%1$s\\".":["La raison indiquée est : « %1$s »."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vous invite à rejoindre le salon : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vous invite à rejoindre le salon : %2$s, avec le message suivant : « %3$s »"],"Error":["Erreur"],"Sorry, something went wrong while trying to save your bookmark.":["Désolé, quelque chose s’est mal passé pendant la sauvegarde de ce marque-page."],"Timeout Error":["Erreur de délai d\'attente dépassé"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Ce serveur n\'a pas renvoyé vos marque-pages dans le temps imparti. Vous pouvez recharger la page pour les demander à nouveau."],"My contacts":["Mes contacts"],"Pending contacts":["Contacts en attente"],"Contact requests":["Demandes de contacts"],"Ungrouped":["Sans groupe"],"New messages":["Nouveaux messages"],"Sorry, there was an error while trying to add %1$s as a contact.":["Désolé, il y a eu une erreur lors de la tentative d’ajout de %1$s comme contact."],"This client does not allow presence subscriptions":["Ce client ne permet pas les mises à jour de disponibilité"],"Click to hide these contacts":["Cliquez pour cacher ces contacts"],"Unbookmark this groupchat":["Retirer ce salon des marque-pages"],"Click to open this groupchat":["Cliquer pour ouvrir ce salon"],"Click to toggle the bookmarks list":["Cliquer pour ouvrir la liste des salons"],"Bookmarks":["Marques-page"],"Bookmark this groupchat":["Mettre ce salon en marque-page"],"Would you like this groupchat to be automatically joined upon startup?":["Voulez-vous que ce salon soit automatiquement rejoint au démarrage ?"],"The name for this bookmark:":["Nom de ce marque-page :"],"What should your nickname for this groupchat be?":["Que devrait être votre pseudo sur ce salon ?"],"Save":["Sauvegarder"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Voulez-vous vraiment supprimer le marque-page « %1$s » ?"],"Unbookmark":["Retirer le marque-page"],"Bookmark":["Marque-page"],"Close":["Fermer"],"OK":["OK"],"Image: ":["Image : "],"Download audio file \\"%1$s\\"":["Télécharger le fichier audio « %1$s »"],"Download file \\"%1$s\\"":["Télécharger le fichier « %1$s »"],"Cancel Editing":["Annuler l’édition"],"Edit":["Éditer"],"Retract":["Retirer"],"Message versions":["Versions du message"],"Retry":["Réessayer"],"Uploading file:":["Téléversement du fichier :"],"%1$s has removed this message":["%1$s a supprimé ce message"],"This message has been edited":["Ce message a été modifié"],"Show more":["Afficher plus"],"Show less":["Afficher moins"],"No message history available.":["Aucun historique des messages n\'est disponible."],"Search results":["Résultats de recherche"],"Search":["Rechercher"],"Insert emojis":["Insérer un emoji"],"Send the message":["Envoyer le message"],"Start a call":["Démarrer un appel"],"Message characters remaining":["Caractères de message restants"],"Hide participants":["Cacher les participants"],"Show participants":["Afficher les participants"],"Choose a file to send":["Choisir un fichier à envoyer"],"Click to write as a normal (non-spoiler) message":["Cliquez pour écrire un message sans spoiler"],"Click to write your message as a spoiler":["Cliquez pour écrire votre message en tant que spoiler"],"The User\'s Profile Image":["Image de profil de l’utilisateur"],"Trusted":["De confiance"],"Untrusted":["Pas de confiance"],"OMEMO Fingerprints":["Empreintes de clé OMEMO"],"No OMEMO-enabled devices found":["Aucun client compatible avec le chiffrement OMEMO n\'a été trouvé"],"Remove as contact":["Supprimer ce contact"],"XMPP Address":["Adresse XMPP"],"Email":["Courriel"],"Full Name":["Nom complet"],"Nickname":["Pseudo"],"Refresh":["Rafraîchir"],"Role":["Rôle"],"URL":["URL"],"%1$s is typing":["%1$s est en train d’écrire"],"%1$s has stopped typing":["%1$s a arrêté d’écrire"],"%1$s has gone away":["%1$s n’est plus disponible"],"Remove messages":["Effacer les messages"],"Close this chat":["Fermer cette fenêtre de discussion"],"Write in the third person":["Écrire à la troisième personne"],"Show this menu":["Afficher ce menu"],"Hidden message":["Message caché"],"Message":["Message"],"Optional hint":["Indice optionnel"],"You have unread messages":["Vous avez de nouveaux messages"],"Details":["Détails"],"See more information about this person":["Afficher plus d\'informations sur cette personne"],"Close and end this conversation":["Fermer et terminer cette conversation"],"Sorry, the connection has been lost, and your message could not be sent":["Désolé, la connexion a été perdue et votre message n’a pas pu être envoyé"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Sachez que d\'autres clients (et serveurs) XMPP/Jabber peuvent ne pas encore prendre en charge les rétractations et que ce message peut ne pas être supprimé partout."],"Are you sure you want to retract this message?":["Voulez-vous vraiment retirer ce message ?"],"Confirm":["Confirmer"],"You have an unsent message which will be lost if you continue. Are you sure?":["Vous avez un message non envoyé qui sera perdu si vous continuez. Êtes-vous sûr ?"],"Are you sure you want to clear the messages from this conversation?":["Voulez-vous vraiment effacer les messages de cette conversation ?"],"%1$s has gone offline":["%1$s s’est déconnecté"],"%1$s is busy":["%1$s est occupé"],"%1$s is online":["%1$s est en ligne"],"Sorry, something went wrong while trying to refresh":["Désolé, quelque chose s’est mal passé mal lors de la tentative de réactualisation"],"Are you sure you want to remove this contact?":["Voulez-vous vraiment retirer ce contact ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Désolé, il y a eu une erreur lors de la tentative de retrait de %1$s comme contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Pour améliorer les performances, nous stockons vos données dans ce navigateur. Décochez cette case si vous êtes sur un ordinateur public, ou si vous voulez que vos données soient supprimées lorsque vous vous déconnecterez. Il est important que vous vous déconnectiez explicitement, sinon les données stockées ne seront pas forcément toutes supprimées. Notez que lorsque l’ordinateur utilisé n’est pas considéré de confiance, le chiffrement OMEMO n’est PAS disponible."],"This is a trusted device":["Ceci est un appareil de confiance"],"Password":["Mot de passe"],"Create an account":["Créer un compte"],"Don\'t have a chat account?":["Vous n’avez pas de compte ?"],"Log in":["Se connecter"],"Disconnected":["Déconnecté"],"Click here to log in anonymously":["Cliquez ici pour se connecter anonymement"],"Username":["Nom"],"user@domain":["utilisateur@domaine"],"Please enter a valid XMPP address":["Veuillez saisir une adresse XMPP valide"],"Chat Contacts":["Contacts de chat"],"Toggle chat":["Ouvrir la discussion"],"Click to restore this chat":["Cliquez pour afficher cette discussion"],"Minimized":["Réduit(s)"],"Minimize":["Réduire"],"Minimize this chat":["Réduire cette discussion"],"Minimize this groupchat":["Réduire ce groupe de discussion"],"This field is required":["Ce champ est requis"],"Join":["Rejoindre"],"Enter a new Groupchat":["Entrer dans un nouveau salon"],"name@conference.example.org":["nom@chat.example.org"],"Groupchat name":["Nom du salon"],"Groupchat address":["Adresse du salon"],"Groupchat id is invalid.":["L’identifiant du groupe de discussion est invalide."],"Invite":["Inviter"],"Invite someone to this groupchat":["Inviter quelqu’un à ce groupe de discussion"],"user@example.org":["utilisateur@exemple.org"],"Optional reason for the invitation":["Raison facultative pour l’invitation"],"Show groupchats":["Afficher les salons"],"Server address":["Adresse du serveur"],"Show more information on this groupchat":["Afficher plus d’informations sur ce salon"],"Query for Groupchats":["Chercher un salon"],"Description:":["Description :"],"Groupchat Address (JID):":["Adresse du salon (JID) :"],"Participants:":["Participants :"],"Features:":["Caractéristiques :"],"Requires authentication":["Nécessite une authentification"],"Hidden":["Caché"],"Requires an invitation":["Nécessite une invitation"],"Moderated":["Modéré"],"Non-anonymous":["Non-anonyme"],"Open":["Ouvert"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semi-anonyme"],"Temporary":["Temporaire"],"Unmoderated":["Non modéré"],"conference.example.org":["chat.exemple.org"],"Groupchats found":["Salons trouvés"],"No groupchats found":["Aucun salon trouvé"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Les modérateurs sont des utilisateurs privilégiés qui peuvent changer les rôles d\'autres utilisateurs (exceptés les administrateurs ou les propriétaires d\'affiliation)."],"The default role, implies that you can read and write messages.":["Le rôle par défaut donne le droit de lire et écrire des messages."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Les visiteurs ne sont pas autorisés à écrire dans une conversation à plusieurs sous modération."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["L\'affiliation la plus distinctive est celle de propriétaire. Un propriétaire peut changer les rôles et les affiliations de tout les utilisateurs."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["L\'affiliation d\'administrateur est la 2e plus haute. Un administrateur peut changer les rôles de tout les utilisateurs sauf le propriétaire."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Donner l\'affiliation de « banni » exclue un utilisateur."],"Change role":["Changer de rôle"],"New Role":["Nouveau rôle"],"Reason":["Motif"],"Change affiliation":["Changer d\'affiliation"],"New affiliation":["Nouvelle affiliation"],"Affiliation":["Affiliation"],"Moderator Tools":["Outils de modération"],"No users with that affiliation found.":["Aucun utilisateur trouvé avec cette affiliation."],"No users with that role found.":["Aucun utilisateur trouvé avec ce rôle."],"Type here to filter the search results":["Écrivez ici pour filtrer les résultats de recherche"],"Show users":["Afficher les utilisateurs"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Des rôles sont désignés pour autoriser ou non certaines actions dans une conversation à plusieurs. Les désignations peuvent être explicites, ou hérités implicitement d\'une affiliation. Un rôle qui n\'est pas hérité d\'une affiliation est valable que pendant la session de l\'utilisateur."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Typiquement, une affiliation est un titre à vie qui donne un rôle particulier avec ses privilèges et ses responsabilités. Par exemple, les administrateurs et les propriétaires ont d\'office le rôle de modérateur."],"Sorry, you\'re not allowed to make that change":["Désolé, vous n’êtes pas autorisé(e) à faire cette modification"],"Sorry, something went wrong while trying to set the affiliation":["Désolé, un problème est survenu lors de la modification de l\'affiliation"],"Affiliation changed":["Affiliation modifiée"],"Role changed":["Rôle modifié"],"You\'re not allowed to make that change":["Vous n’êtes pas autorisé·e à faire cette modification"],"Sorry, something went wrong while trying to set the role":["Désolé, un problème est survenu lors de la modification de rôle"],"Topic":["Sujet"],"Topic author":["Auteur du sujet"],"Groupchat address (JID)":["Adresse du salon (JID)"],"Message archiving":["Archivage des messages"],"Messages are archived on the server":["Les messages sont archivés sur le serveur"],"Description":["Description"],"Features":["Caractéristiques"],"This groupchat is not publicly searchable":["Ce salon ne peut pas être recherché publiquement"],"This groupchat is restricted to members only":["Ce salon est restreint aux membres uniquement"],"Members only":["Membres uniquement"],"Participants entering this groupchat need to request permission to write":["Les participants qui entrent dans ce salon doivent demander la permission pour écrire"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Ce salon ne nécessite pas de mot de passe pour y accéder"],"No password required":["Pas de mot de passe nécessaire"],"Not anonymous":["Non-anonyme"],"All other groupchat participants can see your XMPP address":["Tous les autres occupants de ce salon peuvent voir votre adresse XMPP"],"Not moderated":["Non modéré"],"Participants entering this groupchat can write right away":["Les participants qui entrent dans ce salon peuvent écrire directement"],"Online users":["Utilisateurs en ligne"],"Anyone can join this groupchat":["N’importe qui peut rejoindre ce salon"],"This groupchat requires a password before entry":["Ce salon nécessite un mot de passe pour y accéder"],"Password protected":["Protégé par mot de passe"],"Persistent":["Persistant"],"This groupchat persists even if it\'s unoccupied":["Ce salon persiste même s’il est inoccupé"],"Only moderators can see your XMPP address":["Seuls les modérateurs peuvent voir votre adresse XMPP"],"This groupchat will disappear once the last person leaves":["Ce salon disparaîtra au départ de la dernière personne"],"This groupchat is publicly searchable":["Ce salon peut être recherché publiquement"],"Groupchat info for %1$s":["Informations sur le salon %1$s"],"You\'re not allowed to send messages in this room":["Vous n\'êtes pas autorisé à envoyer des messages dans ce salon"],"The conversation has moved. Click below to enter.":["Ce salon a déménagé. Cliquez ci-dessous pour rejoindre sa nouvelle adresse."],"This groupchat no longer exists":["Ce salon n’existe plus"],"Hide the groupchat topic":["Masquer le sujet de la discussion de groupe"],"This groupchat is bookmarked":["Cette salon est mis en marque-page"],"Enter groupchat":["Entrer dans le salon"],"Choose a nickname to enter":["Choisir un surnom"],"Please choose your nickname":["Veuillez choisir votre pseudo"],"This groupchat requires a password":["Ce salon nécessite un mot de passe"],"Password: ":["Mot de passe : "],"Submit":["Soumettre"],"This user is a moderator.":["Cet utilisateur est un modérateur."],"This user can send messages in this groupchat.":["Cet utilisateur peut envoyer des messages dans ce salon."],"This user can NOT send messages in this groupchat.":["Cet utilisateur ne peut PAS envoyer de messages dans ce salon."],"Owner":["Propriétaire"],"Admin":["Administrateur"],"Member":["Membre"],"Moderator":["Modérateur"],"Visitor":["Visiteur"],"Click to mention %1$s in your message.":["Cliquer pour citer %1$s dans votre message."],"Participants":["Participants"],"%1$s has entered the groupchat":["%1$s a rejoint le salon"],"%1$s has left the groupchat":["%1$s a quitté le salon"],"%1$s is now a moderator":["%1$s est désormais un modérateur"],"%1$s is no longer a moderator":["%1$s n’est plus un modérateur"],"%1$s has been given a voice":["%1$s s\'est vu accorder la parole"],"%1$s has been muted":["%1$s a été mis en sourdine"],"%1$s and %2$s":["%1$s et %2$s"],"%1$s are typing":["%1$s est en train d’écrire"],"%1$s have stopped typing":["%1$s a arrêté d’écrire"],"%1$s have gone away":["%1$s n’est plus disponible"],"%1$s have entered the groupchat":["%1$s a rejoint le salon"],"%1$s have left the groupchat":["%1$s a quitté le salon"],"%1$s are now moderators":["%1$s sont désormais modérateurs"],"%1$s are no longer moderators":["%1$s ne sont plus modérateurs"],"%1$s have been given voices":["%1$s se sont vus accorder la parole"],"%1$s have been muted":["%1$s ont été mis en sourdine"],"Change user\'s affiliation to admin":["Changer le rôle de l’utilisateur en administrateur"],"Ban user by changing their affiliation to outcast":["Bannir un utilisateur en changeant son affiliation"],"Clear the chat area":["Fermer cette fenêtre de discussion"],"Close this groupchat":["Fermer ce groupe de discussion"],"Change user role to participant":["Changer le rôle de l’utilisateur en participant"],"Remove this groupchat":["Supprimer ce salon"],"Kick user from groupchat":["Expulser l’utilisateur du salon"],"Write in 3rd person":["Écrire à la troisième personne"],"Grant membership to a user":["Autoriser l’utilisateur à être membre"],"Opens up the moderator tools GUI":["Ouvre l\'interface graphique des outils de modération"],"Remove user\'s ability to post messages":["Retirer le droit d’envoyer des messages"],"Change your nickname":["Changer votre pseudo"],"Grant moderator role to user":["Changer le rôle de l’utilisateur en modérateur"],"Grant ownership of this groupchat":["Accorder la propriété de ce salon"],"Register your nickname":["Enregistrer votre pseudo"],"Revoke the user\'s current affiliation":["Révoquer l\'affiliation actuelle de l\'utilisateur"],"Set groupchat subject":["Définir le sujet du salon"],"Set groupchat subject (alias for /subject)":["Définir le sujet du salon (alias pour /subject)"],"Allow muted user to post messages":["Autoriser les utilisateurs muets à poster des messages"],"You are about to retract this message.":["Vous êtes sur le point de retirer ce message."],"You may optionally include a message, explaining the reason for the retraction.":["Vous pouvez, de façon optionnelle, inclure un message expliquant la raison du retrait."],"Message Retraction":["Retrait du message"],"Optional reason":["Raison facultative"],"Sorry, you\'re not allowed to retract this message":["Désolé, vous n\'êtes pas autorisé à retirer ce message"],"A timeout occurred while trying to retract the message":["Une erreur s\'est produite lors du retrait du message, le délai d\'attente est dépassé"],"Sorry, you\'re not allowed to retract this message.":["Désolé, vous n\'êtes pas autorisé a retirer ce message."],"Show more information about this groupchat":["Afficher plus d’informations sur ce salon"],"Configure":["Configurer"],"Configure this groupchat":["Configurer ce salon"],"Invite someone to join this groupchat":["Inviter quelqu’un à rejoindre ce salon"],"Show topic":["Afficher le sujet"],"Hide topic":["Masquer le sujet"],"Show the topic message in the heading":["Afficher le message de sujet dans l\'en-tête"],"Hide the topic in the heading":["Masquer le sujet dans l\'en-tête"],"Moderate":["Modérer"],"Moderate this groupchat":["Modérer ce salon"],"Destroy":["Détruire"],"Leave":["Quitter"],"Leave and close this groupchat":["Quitter et fermer ce salon"],"Are you sure you want to leave this groupchat?":["Voulez-vous vraiment quitter ce salon ?"],"Hide the list of participants":["Cacher la liste des participants"],"Forbidden: you do not have the necessary role in order to do that.":["Interdit : vous n’avez pas le rôle nécessaire pour faire ça."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Interdit : vous n’avez pas l’affiliation nécessaire pour faire ça."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erreur : la commande « %1$s » prend deux paramètres, le pseudo de l’utilisateur et une raison optionnelle."],"Error: couldn\'t find a groupchat participant based on your arguments":["Erreur : ne trouve pas de participant au salon sur la base de vos arguments"],"Error: found multiple groupchat participant based on your arguments":["Erreur : plusieurs participants au salon trouvés sur la base de vos arguments"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Impossible de trouver de participant avec ce pseudo. Il se peut qu’il ait quitté le salon."],"Sorry, an error happened while running the command.":["Désolé, une erreur est survenue lors de l\'exécution de la commande."],"Check your browser\'s developer console for details.":["Vérifiez les erreurs dans la console de développement de votre navigateur."],"Are you sure you want to destroy this groupchat?":["Voulez-vous vraiment détruire ce salon ?"],"Please enter the XMPP address of this groupchat to confirm":["Veuillez saisir l’adresse XMPP de ce salon pour confirmation"],"name@example.org":["nom@exemple.org"],"Optional reason for destroying this groupchat":["Raison optionnelle pour détruire ce salon"],"Optional XMPP address for a new groupchat that replaces this one":["Adresse XMPP optionnelle du nouveau salon qui remplace celui-ci"],"replacement@example.org":["remplacement@exemple.org"],"Your nickname is \\"%1$s\\"":["Votre pseudo est \\"%1$s\\""],"Error: invalid number of arguments":["Erreur : nombre d’arguments invalide"],"This action was done by %1$s.":["Cette action a été réalisée par %1$s."],"The reason given is: \\"%1$s\\".":["La raison indiquée est : « %1$s »."],"Groupchats":["Salons"],"Add a new groupchat":["Ajouter un nouveau salon"],"Query for groupchats":["Chercher un salon"],"Sorry, an error occurred while trying to submit the config form.":["Désolé, une erreur est survenue lors de la validation du formulaire de configuration."],"Close these announcements":["Fermer ces annonces"],"Announcements":["Annonces"],"Click to open this server message":["Cliquez pour ouvrir le message de ce serveur"],"Notification from %1$s":["Notification depuis %1$s"],"%1$s says":["%1$s dit"],"has gone offline":["s’est déconnecté"],"has gone away":["est absent"],"is busy":["est occupé"],"has come online":["s’est déconnecté"],"wants to be your contact":["veut être votre contact"],"Hide":["Cacher"],"Execute":["Exécuter"],"On which entity do you want to run commands?":["Sur quelle entité voulez-vous lancer des commandes ?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Certains services et entités XMPP permettent à des utilisateurs privilégiés d’exécuter des commandes ad-hoc sur eux."],"Commands found":["Commandes trouvées"],"List available commands":["Lister les commandes disponibles"],"No commands found":["Aucune commande trouvée"],"Sorry, an error occurred while looking for commands on that entity.":["Désolé, une erreur est survenue en cherchant des commandes sur cette entité."],"The specified entity doesn\'t support ad-hoc commands":["L’entité spécifiée ne prend pas en charge les commandes ad-hoc"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Désolé, une erreur s’est produite lors de l’exécution de la commande. Vérifiez la console de développement de votre navigateur pour plus de détails"],"About":["À propos"],"Commands":["Commandes"],"Settings":["Préférences"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s libre %2$s qui vous est fourni par %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduisez-le %2$s dans votre langue"],"Log out":["Se déconnecter"],"Click to change your chat status":["Cliquez pour changer votre statut"],"Show details about this chat client":["Afficher plus d’informations sur ce client"],"Your avatar image":["Votre image d’avatar"],"Checkbox for selecting the following fingerprint":["Case à cocher pour sélectionner l’empreinte OMEMO suivante"],"Device without a fingerprint":["Client sans empreinte de clé OMEMO"],"Checkbox for selecting the following device":["Case à cocher pour sélectionner le périphérique OMEMO suivant"],"Other OMEMO-enabled devices":["Autres clients ayant activé le chiffrement OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Case à cocher pour sélectionner les empreintes de tous les autres clients OMEMO"],"Remove checked devices and close":["Supprimer les clients OMEMO sélectionnés, et fermer"],"Select all":["Tout sélectionner"],"This device\'s OMEMO fingerprint":["Empreinte de clé OMEMO de ce client"],"Generate new keys and fingerprint":["Générer de nouvelles clés et empreintes de clés"],"Your Profile":["Votre profil"],"XMPP Address (JID)":["Adresse XMPP (JID)"],"Save and close":["Enregistrer et fermer"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilisez une virgule pour séparer plusieurs rôles. Vos rôles sont affichés à côté de votre nom dans vos messages."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Désolé, quelque chose s’est mal passé pendant la sauvegarde de votre profil."],"You can check your browser\'s developer console for any error output.":["Vous pouvez surveiller toute erreur qui apparaîtrait dans la console de développement de votre navigateur."],"Away":["Absent"],"Busy":["Occupé"],"Custom status":["Statut personnel"],"Offline":["Déconnecté"],"Online":["En ligne"],"Away for long":["Absent pour une longue durée"],"Change chat status":["changer votre statut de chat"],"Personal status message":["Message de statut personnel"],"I am %1$s":["Je suis %1$s"],"Are you sure you want to log out?":["Voulez-vous vraiment vous déconnecter ?"],"online":["en ligne"],"busy":["occupé"],"away for long":["absent pour une longue durée"],"away":["absent"],"offline":["Déconnecté"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Désolé, impossible de déchiffrer un message chiffré avec OMEMO à cause d’une erreur."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ne semble pas avoir un client qui supporte OMEMO. Le chiffrement ne sera plus possible dans ce groupe de discussion."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Impossible d’utiliser le chiffrement bout à bout dans ce salon, soit parce qu’il est semi-anonyme, soit parce que tous les participants ne gèrent pas OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Impossible d’utiliser le chiffrement bout à bout parce que %1$s utilise un client qui ne gère pas OMEMO."],"Messages are being sent in plaintext":["Les messages sont envoyés en clair"],"Messages are sent encrypted":["Vos messages sont envoyés chiffrés"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Ce salon doit être réservé aux membres et non-anonyme pour permettre les messages chiffrés OMEMO"],"Sorry, an error occurred while trying to remove the devices.":["Désolé, une erreur est survenue en tentant de supprimer les clients OMEMO."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Voulez-vous vraiment générer de nouvelles clefs OMEMO ? Ceci retirera vos anciennes clefs et tous les messages déjà chiffrés ne seront plus déchiffrables sur ce client."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Désolé, impossible d\'envoyer un message chiffré parce que %1$s nécessitent que vous soyez abonné à leur présence afin de voir leurs informations OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Désolé, impossible d\'envoyer un message chiffré parce que le serveur distant de %1$s n\'est pas joignable"],"Unable to send an encrypted message due to an unexpected error.":["Impossible d’envoyer un message chiffré à cause d’une erreur."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Désolé, impossible de trouver un appareil auquel envoyer un message chiffré avec OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ceci est un message chiffré avec OMEMO, que votre client ne semble pas prendre en charge. Pour plus d’informations, allez voir https://conversations.im/omemo"]," e.g. conversejs.org":[" par exemple conversejs.org"],"Fetch registration form":["Récupération du formulaire d’enregistrement"],"Tip: A list of public XMPP providers is available":["Astuce : une liste publique de fournisseurs XMPP est disponible"],"here":["ici"],"Sorry, we\'re unable to connect to your chosen provider.":["Désolé, nous n’avons pas pu nous connecter à votre fournisseur."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Désolé, le fournisseur indiqué ne supporte pas l’enregistrement de compte en ligne. Merci d’essayer avec un autre fournisseur."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Quelque chose a échoué lors de l’établissement de la connexion avec « %1$s ». Existe-t-il vraiment ?"],"Now logging you in":["En cours de connexion"],"Registered successfully":["Enregistré avec succès"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Le fournisseur a rejeté votre demande d’inscription. Merci de vérifier que les données que vous avez fournies sont correctes."],"Leave this groupchat":["Quitter ce salon"],"Click to toggle the list of open groupchats":["Cliquer pour ouvrir la liste des salons ouverts"],"Open Groupchats":["Salons ouverts"],"Are you sure you want to leave the groupchat %1$s?":["Voulez-vous vraiment quitter le salon « %1$s » ?"],"Add":["Ajouter"],"Add a Contact":["Ajouter un contact"],"This contact is busy":["Ce contact est occupé"],"This contact is online":["Ce contact est connecté"],"This contact is offline":["Ce contact est déconnecté"],"This contact is unavailable":["Ce contact est indisponible"],"This contact is away for an extended period":["Ce contact est absent"],"This contact is away":["Ce contact est absent"],"Contact name":["Nom du contact"],"Optional nickname":["Pseudonyme optionnel"],"Sorry, could not find a contact with that name":["Désolé, impossible de trouver un contact avec ce nom"],"This contact has already been added":["Ce contact est déjà enregistré"],"Filter":["Filtrer"],"Filter by contact name":["Filtrer par nom de contact"],"Filter by group name":["Filtrer par nom de groupe"],"Filter by status":["Filtrer par statut"],"Any":["Aucun"],"Unread":["Non lu"],"Chatty":["Bavard"],"Extended Away":["Absence longue durée"],"Click to remove %1$s as a contact":["Cliquez pour retirer le contact %1$s"],"Click to accept the contact request from %1$s":["Cliquez pour accepter la demande d’ajout de contact de %1$s"],"Click to decline the contact request from %1$s":["Cliquez pour décliner la demande d’ajout de contact de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Cliquez pour discuter avec %1$s (adresse XMPP : %2$s)"],"Are you sure you want to decline this contact request?":["Voulez-vous vraiment rejeter cette demande d’ajout de contact ?"],"Contacts":["Contacts"],"Add a contact":["Ajouter un contact"],"Re-sync your contacts":["Resynchroniser vos contacts"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[152],{518:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Create your account":["Créer votre compte"],"Please enter the XMPP provider to register with:":["Veuillez saisir le fournisseur XMPP auprès duquel s’inscrire :"],"Already have a chat account?":["Vous avez déjà un compte ?"],"Log in here":["Connectez-vous ici"],"Account Registration:":["Création de compte :"],"Register":["S’inscrire"],"Choose a different provider":["Choisir un autre fournisseur"],"Hold tight, we\'re fetching the registration form…":["Ne bougez pas, on va chercher le formulaire d’inscription…"],"Cancel":["Annuler"],"The connection has dropped, attempting to reconnect.":["La connexion a été perdue, tentative de reconnexion en cours."],"An error occurred while connecting to the chat server.":["Une erreur est survenue lors de la connexion au serveur de discussion."],"Your XMPP address and/or password is incorrect. Please try again.":["Votre addresse XMPP et/ou votre mot de passe sont/est incorrect(s). Veuillez réessayer."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Désolé, nous n’avons pas pu nous connecter à l’hôte XMPP avec le domaine : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Le serveur XMPP n’a pas proposé un mécanisme d’authentification pris en charge"],"Undecryptable OMEMO message":["Message OMEMO non déchiffrable"],"Sorry, could not determine upload URL.":["Désolé, impossible de déterminer l’URL d’envoi de fichier."],"Sorry, could not determine file upload URL.":["Désolé, impossible de déterminer l’URL pour envoyer le fichier."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Désolé, le téléversement du fichier a échoué. Votre serveur a répondu : « %1$s »"],"Sorry, could not succesfully upload your file.":["Désolé, le téléversement du fichier a échoué."],"You\'re not allowed to retract your message.":["Vous n’êtes pas autorisé(e) a retirer votre message."],"Sorry, an error occurred while trying to retract your message.":["Désolé, une erreur s’est produite lors du retrait de votre message."],"You\'re not allowed to send a message.":["Vous n’êtes pas autorisé(e) à envoyer de message."],"Sorry, an error occurred while trying to send your message.":["Désolé, une erreur est survenue lors de l’envoi de votre message."],"Sorry, looks like file upload is not supported by your server.":["Désolé, votre serveur semble ne pas prendre en charge le téléversement de fichiers."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La taille de votre fichier, %1$s, dépasse le maximum autorisé par votre serveur, qui est %2$s."],"Smileys and emotions":["Émoticônes"],"People":["Personnes"],"Activities":["Activités"],"Travel":["Voyage"],"Objects":["Objets"],"Animals and nature":["Animaux et nature"],"Food and drink":["Cuisine et boissons"],"Symbols":["Symboles"],"Flags":["Drapeaux"],"Stickers":["Autocollants"],"This groupchat is not anonymous":["Ce salon n’est pas anonyme"],"This groupchat now shows unavailable members":["Ce salon affiche maintenant les membres indisponibles"],"This groupchat does not show unavailable members":["Ce salon n’affiche pas les membres indisponibles"],"The groupchat configuration has changed":["Les paramètres de ce salon ont été modifiés"],"Groupchat logging is now enabled":["L’inscription est maintenant activé sur ce salon"],"Groupchat logging is now disabled":["L’inscription est maintenant désactivé sur ce salon"],"This groupchat is now no longer anonymous":["Ce salon n’est plus anonyme"],"This groupchat is now semi-anonymous":["Ce salon est maintenant semi-anonyme"],"This groupchat is now fully-anonymous":["Ce salon est maintenant entièrement anonyme"],"A new groupchat has been created":["Un nouveau salon a été créé"],"Your nickname has been automatically set to %1$s":["Votre pseudo a été automatiquement défini à : %1$s"],"Your nickname has been changed to %1$s":["Votre pseudo a été modifié en : %1$s"],"You have been banned from this groupchat":["Vous avez été banni de ce salon"],"You have exited this groupchat due to a technical problem":["Vous avez été retiré de ce salon à cause d’un problème technique"],"You have been kicked from this groupchat":["Vous avez été expulsé de ce salon"],"You have been removed from this groupchat because of an affiliation change":["Vous avez été retiré de ce salon du fait d’un changement d’affiliation"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Vous avez été retiré de ce salon parce que ce salon est devenu réservé aux membres et vous n’êtes pas membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Vous avez été retiré de ce salon parce que le service sur lequel il est hébergé est en train d’être arrêté"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Votre retrait de message n\'a pas été délivré parce que vous n’êtes pas présent(e) dans le salon."],"Your message was not delivered because you weren\'t allowed to send it.":["Votre message n’a pas été délivré car vous n’avez pas été autorisé à l’envoyer."],"Your message was not delivered because you\'re not present in the groupchat.":["Votre message n\'a pas été délivré parce que vous n\'êtes pas présent dans le salon."],"A timeout happened while while trying to retract your message.":["Une erreur s\'est produite lors du retrait du message ; le délai d\'attente est dépassé."],"You\'re not allowed to register yourself in this groupchat.":["Vous n’êtes pas autorisé à vous enregistrer vous-mêmes dans ce salon."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Vous n’êtes pas autorisé à vous inscrire dans ce salon parce qu’il est réservé aux membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Impossible d’enregistrer votre pseudo dans ce salon, il ne gère pas l’enregistrement."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Impossible d’enregistrer votre pseudo dans ce salon, un formulaire invalide a été envoyé."],"Topic set by %1$s":["Le sujet a été défini par %1$s"],"Topic cleared by %1$s":["Le sujet de ce salon a été retiré par %1$s"],"%1$s has been banned by %2$s":["%1$s a été banni par %2$s"],"%1$s has been banned":["%1$s a été banni"],"%1$s\'s nickname has changed":["Le pseudo de %1$s a changé"],"%1$s has been kicked out by %2$s":["%1$s a été expulsé par %2$s"],"%1$s has been kicked out":["%1$s a été expulsé"],"%1$s has been removed because of an affiliation change":["%1$s a été supprimé à cause d’un changement d’affiliation"],"%1$s has been removed for not being a member":["%1$s a été supprimé car il n’est pas membre"],"%1$s is no longer an admin of this groupchat":["%1$s n’est plus un administrateur de ce salon"],"%1$s is no longer an owner of this groupchat":["%1$s n’est plus un propriétaire de ce salon"],"%1$s is no longer banned from this groupchat":["%1$s n’est plus banni de ce salon"],"%1$s is no longer a member of this groupchat":["%1$s n\'est plus membre de ce salon"],"%1$s is now a member of this groupchat":["%1$s est désormais membre de ce salon"],"%1$s is now an %2$s of this groupchat":["%1$s est maintenant %2$s de ce salon"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Le pseudo choisi est réservé ou actuellement utilisé, veuillez en choisir un différent."],"Password incorrect":["Mot de passe incorrect"],"You are not on the member list of this groupchat.":["Vous n’êtes pas dans la liste des membres de ce salon."],"You have been banned from this groupchat.":["Vous avez été banni de ce salon."],"You are not allowed to create new groupchats.":["Vous n’êtes pas autorisé à créer des salons."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Votre pseudo n’est pas conforme à la politique de ce salon."],"This groupchat does not (yet) exist.":["Ce salon n’existe pas (pour l’instant)."],"This groupchat has reached its maximum number of participants.":["Ce salon a atteint sa limite maximale d’occupants."],"Remote server not found":["Serveur distant introuvable"],"The explanation given is: \\"%1$s\\".":["La raison indiquée est : « %1$s »."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vous invite à rejoindre le salon : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vous invite à rejoindre le salon : %2$s, avec le message suivant : « %3$s »"],"Error":["Erreur"],"Sorry, something went wrong while trying to save your bookmark.":["Désolé, quelque chose s’est mal passé pendant la sauvegarde de ce marque-page."],"Timeout Error":["Erreur de délai d\'attente dépassé"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Ce serveur n\'a pas renvoyé vos marque-pages dans le temps imparti. Vous pouvez recharger la page pour les demander à nouveau."],"My contacts":["Mes contacts"],"Pending contacts":["Contacts en attente"],"Contact requests":["Demandes de contacts"],"Ungrouped":["Sans groupe"],"New messages":["Nouveaux messages"],"Sorry, there was an error while trying to add %1$s as a contact.":["Désolé, il y a eu une erreur lors de la tentative d’ajout de %1$s comme contact."],"This client does not allow presence subscriptions":["Ce client ne permet pas les mises à jour de disponibilité"],"Click to hide these contacts":["Cliquez pour cacher ces contacts"],"Unbookmark this groupchat":["Retirer ce salon des marque-pages"],"Click to open this groupchat":["Cliquer pour ouvrir ce salon"],"Click to toggle the bookmarks list":["Cliquer pour ouvrir la liste des salons"],"Bookmarks":["Marques-page"],"Bookmark this groupchat":["Mettre ce salon en marque-page"],"Would you like this groupchat to be automatically joined upon startup?":["Voulez-vous que ce salon soit automatiquement rejoint au démarrage ?"],"The name for this bookmark:":["Nom de ce marque-page :"],"What should your nickname for this groupchat be?":["Que devrait être votre pseudo sur ce salon ?"],"Save":["Sauvegarder"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Voulez-vous vraiment supprimer le marque-page « %1$s » ?"],"Unbookmark":["Retirer le marque-page"],"Bookmark":["Marque-page"],"Close":["Fermer"],"OK":["OK"],"Image: ":["Image : "],"Download audio file \\"%1$s\\"":["Télécharger le fichier audio « %1$s »"],"Download file \\"%1$s\\"":["Télécharger le fichier « %1$s »"],"Cancel Editing":["Annuler l’édition"],"Edit":["Éditer"],"Retract":["Retirer"],"Message versions":["Versions du message"],"Retry":["Réessayer"],"Uploading file:":["Téléversement du fichier :"],"%1$s has removed this message":["%1$s a supprimé ce message"],"This message has been edited":["Ce message a été modifié"],"Show more":["Afficher plus"],"Show less":["Afficher moins"],"No message history available.":["Aucun historique des messages n\'est disponible."],"Search results":["Résultats de recherche"],"Search":["Rechercher"],"Insert emojis":["Insérer un emoji"],"Send the message":["Envoyer le message"],"Start a call":["Démarrer un appel"],"Message characters remaining":["Caractères de message restants"],"Hide participants":["Cacher les participants"],"Show participants":["Afficher les participants"],"Choose a file to send":["Choisir un fichier à envoyer"],"Click to write as a normal (non-spoiler) message":["Cliquez pour écrire un message sans spoiler"],"Click to write your message as a spoiler":["Cliquez pour écrire votre message en tant que spoiler"],"The User\'s Profile Image":["Image de profil de l’utilisateur"],"Trusted":["De confiance"],"Untrusted":["Pas de confiance"],"OMEMO Fingerprints":["Empreintes de clé OMEMO"],"No OMEMO-enabled devices found":["Aucun client compatible avec le chiffrement OMEMO n\'a été trouvé"],"Remove as contact":["Supprimer ce contact"],"XMPP Address":["Adresse XMPP"],"Email":["Courriel"],"Full Name":["Nom complet"],"Nickname":["Pseudo"],"Refresh":["Rafraîchir"],"Role":["Rôle"],"URL":["URL"],"%1$s is typing":["%1$s est en train d’écrire"],"%1$s has stopped typing":["%1$s a arrêté d’écrire"],"%1$s has gone away":["%1$s n’est plus disponible"],"Remove messages":["Effacer les messages"],"Close this chat":["Fermer cette fenêtre de discussion"],"Write in the third person":["Écrire à la troisième personne"],"Show this menu":["Afficher ce menu"],"Hidden message":["Message caché"],"Message":["Message"],"Optional hint":["Indice optionnel"],"You have unread messages":["Vous avez de nouveaux messages"],"Details":["Détails"],"See more information about this person":["Afficher plus d\'informations sur cette personne"],"Close and end this conversation":["Fermer et terminer cette conversation"],"Sorry, the connection has been lost, and your message could not be sent":["Désolé, la connexion a été perdue et votre message n’a pas pu être envoyé"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Sachez que d\'autres clients (et serveurs) XMPP/Jabber peuvent ne pas encore prendre en charge les rétractations et que ce message peut ne pas être supprimé partout."],"Are you sure you want to retract this message?":["Voulez-vous vraiment retirer ce message ?"],"Confirm":["Confirmer"],"You have an unsent message which will be lost if you continue. Are you sure?":["Vous avez un message non envoyé qui sera perdu si vous continuez. Êtes-vous sûr ?"],"Are you sure you want to clear the messages from this conversation?":["Voulez-vous vraiment effacer les messages de cette conversation ?"],"%1$s has gone offline":["%1$s s’est déconnecté"],"%1$s is busy":["%1$s est occupé"],"%1$s is online":["%1$s est en ligne"],"Sorry, something went wrong while trying to refresh":["Désolé, quelque chose s’est mal passé mal lors de la tentative de réactualisation"],"Are you sure you want to remove this contact?":["Voulez-vous vraiment retirer ce contact ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Désolé, il y a eu une erreur lors de la tentative de retrait de %1$s comme contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Pour améliorer les performances, nous stockons vos données dans ce navigateur. Décochez cette case si vous êtes sur un ordinateur public, ou si vous voulez que vos données soient supprimées lorsque vous vous déconnecterez. Il est important que vous vous déconnectiez explicitement, sinon les données stockées ne seront pas forcément toutes supprimées. Notez que lorsque l’ordinateur utilisé n’est pas considéré de confiance, le chiffrement OMEMO n’est PAS disponible."],"This is a trusted device":["Ceci est un appareil de confiance"],"Password":["Mot de passe"],"Create an account":["Créer un compte"],"Don\'t have a chat account?":["Vous n’avez pas de compte ?"],"Log in":["Se connecter"],"Disconnected":["Déconnecté"],"Click here to log in anonymously":["Cliquez ici pour se connecter anonymement"],"Username":["Nom"],"user@domain":["utilisateur@domaine"],"Please enter a valid XMPP address":["Veuillez saisir une adresse XMPP valide"],"Chat Contacts":["Contacts de chat"],"Toggle chat":["Ouvrir la discussion"],"Click to restore this chat":["Cliquez pour afficher cette discussion"],"Minimized":["Réduit(s)"],"Minimize":["Réduire"],"Minimize this chat":["Réduire cette discussion"],"Minimize this groupchat":["Réduire ce groupe de discussion"],"This user is a moderator.":["Cet utilisateur est un modérateur."],"This user can send messages in this groupchat.":["Cet utilisateur peut envoyer des messages dans ce salon."],"This user can NOT send messages in this groupchat.":["Cet utilisateur ne peut PAS envoyer de messages dans ce salon."],"Owner":["Propriétaire"],"Admin":["Administrateur"],"Member":["Membre"],"Moderator":["Modérateur"],"Visitor":["Visiteur"],"Click to mention %1$s in your message.":["Cliquer pour citer %1$s dans votre message."],"Participants":["Participants"],"This field is required":["Ce champ est requis"],"Join":["Rejoindre"],"Enter a new Groupchat":["Entrer dans un nouveau salon"],"name@conference.example.org":["nom@chat.example.org"],"Groupchat name":["Nom du salon"],"Groupchat address":["Adresse du salon"],"Groupchat id is invalid.":["L’identifiant du groupe de discussion est invalide."],"Invite":["Inviter"],"Invite someone to this groupchat":["Inviter quelqu’un à ce groupe de discussion"],"user@example.org":["utilisateur@exemple.org"],"Optional reason for the invitation":["Raison facultative pour l’invitation"],"Show groupchats":["Afficher les salons"],"Server address":["Adresse du serveur"],"Show more information on this groupchat":["Afficher plus d’informations sur ce salon"],"Query for Groupchats":["Chercher un salon"],"Description:":["Description :"],"Groupchat Address (JID):":["Adresse du salon (JID) :"],"Participants:":["Participants :"],"Features:":["Caractéristiques :"],"Requires authentication":["Nécessite une authentification"],"Hidden":["Caché"],"Requires an invitation":["Nécessite une invitation"],"Moderated":["Modéré"],"Non-anonymous":["Non-anonyme"],"Open":["Ouvert"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semi-anonyme"],"Temporary":["Temporaire"],"Unmoderated":["Non modéré"],"conference.example.org":["chat.exemple.org"],"Groupchats found":["Salons trouvés"],"No groupchats found":["Aucun salon trouvé"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Les modérateurs sont des utilisateurs privilégiés qui peuvent changer les rôles d\'autres utilisateurs (exceptés les administrateurs ou les propriétaires d\'affiliation)."],"The default role, implies that you can read and write messages.":["Le rôle par défaut donne le droit de lire et écrire des messages."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Les visiteurs ne sont pas autorisés à écrire dans une conversation à plusieurs sous modération."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["L\'affiliation la plus distinctive est celle de propriétaire. Un propriétaire peut changer les rôles et les affiliations de tout les utilisateurs."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["L\'affiliation d\'administrateur est la 2e plus haute. Un administrateur peut changer les rôles de tout les utilisateurs sauf le propriétaire."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Donner l\'affiliation de « banni » exclue un utilisateur."],"Change role":["Changer de rôle"],"New Role":["Nouveau rôle"],"Reason":["Motif"],"Change affiliation":["Changer d\'affiliation"],"New affiliation":["Nouvelle affiliation"],"Affiliation":["Affiliation"],"Moderator Tools":["Outils de modération"],"No users with that affiliation found.":["Aucun utilisateur trouvé avec cette affiliation."],"No users with that role found.":["Aucun utilisateur trouvé avec ce rôle."],"Type here to filter the search results":["Écrivez ici pour filtrer les résultats de recherche"],"Show users":["Afficher les utilisateurs"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Des rôles sont désignés pour autoriser ou non certaines actions dans une conversation à plusieurs. Les désignations peuvent être explicites, ou hérités implicitement d\'une affiliation. Un rôle qui n\'est pas hérité d\'une affiliation est valable que pendant la session de l\'utilisateur."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Typiquement, une affiliation est un titre à vie qui donne un rôle particulier avec ses privilèges et ses responsabilités. Par exemple, les administrateurs et les propriétaires ont d\'office le rôle de modérateur."],"Timeout error while trying to set the affiliation":["Un problème de délai est survenu lors de la modification de l\'affiliation"],"Sorry, you\'re not allowed to make that change":["Désolé, vous n’êtes pas autorisé(e) à faire cette modification"],"Sorry, something went wrong while trying to set the affiliation":["Désolé, un problème est survenu lors de la modification de l\'affiliation"],"Affiliation changed":["Affiliation modifiée"],"Role changed":["Rôle modifié"],"You\'re not allowed to make that change":["Vous n’êtes pas autorisé·e à faire cette modification"],"Sorry, something went wrong while trying to set the role":["Désolé, un problème est survenu lors de la modification de rôle"],"Topic":["Sujet"],"Topic author":["Auteur du sujet"],"Groupchat address (JID)":["Adresse du salon (JID)"],"Message archiving":["Archivage des messages"],"Messages are archived on the server":["Les messages sont archivés sur le serveur"],"Description":["Description"],"Features":["Caractéristiques"],"This groupchat is not publicly searchable":["Ce salon ne peut pas être recherché publiquement"],"This groupchat is restricted to members only":["Ce salon est restreint aux membres uniquement"],"Members only":["Membres uniquement"],"Participants entering this groupchat need to request permission to write":["Les participants qui entrent dans ce salon doivent demander la permission pour écrire"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Ce salon ne nécessite pas de mot de passe pour y accéder"],"No password required":["Pas de mot de passe nécessaire"],"Not anonymous":["Non-anonyme"],"All other groupchat participants can see your XMPP address":["Tous les autres occupants de ce salon peuvent voir votre adresse XMPP"],"Not moderated":["Non modéré"],"Participants entering this groupchat can write right away":["Les participants qui entrent dans ce salon peuvent écrire directement"],"Online users":["Utilisateurs en ligne"],"Anyone can join this groupchat":["N’importe qui peut rejoindre ce salon"],"This groupchat requires a password before entry":["Ce salon nécessite un mot de passe pour y accéder"],"Password protected":["Protégé par mot de passe"],"Persistent":["Persistant"],"This groupchat persists even if it\'s unoccupied":["Ce salon persiste même s’il est inoccupé"],"Only moderators can see your XMPP address":["Seuls les modérateurs peuvent voir votre adresse XMPP"],"This groupchat will disappear once the last person leaves":["Ce salon disparaîtra au départ de la dernière personne"],"This groupchat is publicly searchable":["Ce salon peut être recherché publiquement"],"Groupchat info for %1$s":["Informations sur le salon %1$s"],"You\'re not allowed to send messages in this room":["Vous n\'êtes pas autorisé à envoyer des messages dans ce salon"],"The conversation has moved. Click below to enter.":["Ce salon a déménagé. Cliquez ci-dessous pour rejoindre sa nouvelle adresse."],"This groupchat no longer exists":["Ce salon n’existe plus"],"Hide the groupchat topic":["Masquer le sujet de la discussion de groupe"],"This groupchat is bookmarked":["Cette salon est mis en marque-page"],"Enter groupchat":["Entrer dans le salon"],"Choose a nickname to enter":["Choisir un surnom"],"Please choose your nickname":["Veuillez choisir votre pseudo"],"This groupchat requires a password":["Ce salon nécessite un mot de passe"],"Password: ":["Mot de passe : "],"Submit":["Soumettre"],"%1$s has entered the groupchat":["%1$s a rejoint le salon"],"%1$s has left the groupchat":["%1$s a quitté le salon"],"%1$s is now a moderator":["%1$s est désormais un modérateur"],"%1$s is no longer a moderator":["%1$s n’est plus un modérateur"],"%1$s has been given a voice":["%1$s s\'est vu accorder la parole"],"%1$s has been muted":["%1$s a été mis en sourdine"],"%1$s and %2$s":["%1$s et %2$s"],"%1$s are typing":["%1$s est en train d’écrire"],"%1$s have stopped typing":["%1$s a arrêté d’écrire"],"%1$s have gone away":["%1$s n’est plus disponible"],"%1$s have entered the groupchat":["%1$s a rejoint le salon"],"%1$s have left the groupchat":["%1$s a quitté le salon"],"%1$s are now moderators":["%1$s sont désormais modérateurs"],"%1$s are no longer moderators":["%1$s ne sont plus modérateurs"],"%1$s have been given voices":["%1$s se sont vus accorder la parole"],"%1$s have been muted":["%1$s ont été mis en sourdine"],"Change user\'s affiliation to admin":["Changer le rôle de l’utilisateur en administrateur"],"Ban user by changing their affiliation to outcast":["Bannir un utilisateur en changeant son affiliation"],"Clear the chat area":["Fermer cette fenêtre de discussion"],"Close this groupchat":["Fermer ce groupe de discussion"],"Change user role to participant":["Changer le rôle de l’utilisateur en participant"],"Remove this groupchat":["Supprimer ce salon"],"Kick user from groupchat":["Expulser l’utilisateur du salon"],"Write in 3rd person":["Écrire à la troisième personne"],"Grant membership to a user":["Autoriser l’utilisateur à être membre"],"Opens up the moderator tools GUI":["Ouvre l\'interface graphique des outils de modération"],"Remove user\'s ability to post messages":["Retirer le droit d’envoyer des messages"],"Change your nickname":["Changer votre pseudo"],"Grant moderator role to user":["Changer le rôle de l’utilisateur en modérateur"],"Grant ownership of this groupchat":["Accorder la propriété de ce salon"],"Register your nickname":["Enregistrer votre pseudo"],"Revoke the user\'s current affiliation":["Révoquer l\'affiliation actuelle de l\'utilisateur"],"Set groupchat subject":["Définir le sujet du salon"],"Set groupchat subject (alias for /subject)":["Définir le sujet du salon (alias pour /subject)"],"Allow muted user to post messages":["Autoriser les utilisateurs muets à poster des messages"],"You are about to retract this message.":["Vous êtes sur le point de retirer ce message."],"You may optionally include a message, explaining the reason for the retraction.":["Vous pouvez, de façon optionnelle, inclure un message expliquant la raison du retrait."],"Message Retraction":["Retrait du message"],"Optional reason":["Raison facultative"],"Sorry, you\'re not allowed to retract this message":["Désolé, vous n\'êtes pas autorisé à retirer ce message"],"A timeout occurred while trying to retract the message":["Une erreur s\'est produite lors du retrait du message, le délai d\'attente est dépassé"],"Sorry, you\'re not allowed to retract this message.":["Désolé, vous n\'êtes pas autorisé a retirer ce message."],"Show more information about this groupchat":["Afficher plus d’informations sur ce salon"],"Configure":["Configurer"],"Configure this groupchat":["Configurer ce salon"],"Invite someone to join this groupchat":["Inviter quelqu’un à rejoindre ce salon"],"Show topic":["Afficher le sujet"],"Hide topic":["Masquer le sujet"],"Show the topic message in the heading":["Afficher le message de sujet dans l\'en-tête"],"Hide the topic in the heading":["Masquer le sujet dans l\'en-tête"],"Moderate":["Modérer"],"Moderate this groupchat":["Modérer ce salon"],"Destroy":["Détruire"],"Leave":["Quitter"],"Leave and close this groupchat":["Quitter et fermer ce salon"],"Are you sure you want to leave this groupchat?":["Voulez-vous vraiment quitter ce salon ?"],"Hide the list of participants":["Cacher la liste des participants"],"Forbidden: you do not have the necessary role in order to do that.":["Interdit : vous n’avez pas le rôle nécessaire pour faire ça."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Interdit : vous n’avez pas l’affiliation nécessaire pour faire ça."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erreur : la commande « %1$s » prend deux paramètres, le pseudo de l’utilisateur et une raison optionnelle."],"Error: couldn\'t find a groupchat participant based on your arguments":["Erreur : ne trouve pas de participant au salon sur la base de vos arguments"],"Error: found multiple groupchat participant based on your arguments":["Erreur : plusieurs participants au salon trouvés sur la base de vos arguments"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Impossible de trouver de participant avec ce pseudo. Il se peut qu’il ait quitté le salon."],"Sorry, an error happened while running the command.":["Désolé, une erreur est survenue lors de l\'exécution de la commande."],"Check your browser\'s developer console for details.":["Vérifiez les erreurs dans la console de développement de votre navigateur."],"Are you sure you want to destroy this groupchat?":["Voulez-vous vraiment détruire ce salon ?"],"Please enter the XMPP address of this groupchat to confirm":["Veuillez saisir l’adresse XMPP de ce salon pour confirmation"],"name@example.org":["nom@exemple.org"],"Optional reason for destroying this groupchat":["Raison optionnelle pour détruire ce salon"],"Optional XMPP address for a new groupchat that replaces this one":["Adresse XMPP optionnelle du nouveau salon qui remplace celui-ci"],"replacement@example.org":["remplacement@exemple.org"],"Your nickname is \\"%1$s\\"":["Votre pseudo est \\"%1$s\\""],"Error: invalid number of arguments":["Erreur : nombre d’arguments invalide"],"This action was done by %1$s.":["Cette action a été réalisée par %1$s."],"The reason given is: \\"%1$s\\".":["La raison indiquée est : « %1$s »."],"Groupchats":["Salons"],"Add a new groupchat":["Ajouter un nouveau salon"],"Query for groupchats":["Chercher un salon"],"Sorry, an error occurred while trying to submit the config form.":["Désolé, une erreur est survenue lors de la validation du formulaire de configuration."],"Close these announcements":["Fermer ces annonces"],"Announcements":["Annonces"],"Click to open this server message":["Cliquez pour ouvrir le message de ce serveur"],"Notification from %1$s":["Notification depuis %1$s"],"%1$s says":["%1$s dit"],"Encrypted message received":["Message chiffré reçu"],"has gone offline":["s’est déconnecté"],"has gone away":["est absent"],"is busy":["est occupé"],"has come online":["s’est déconnecté"],"wants to be your contact":["veut être votre contact"],"Hide":["Cacher"],"Execute":["Exécuter"],"On which entity do you want to run commands?":["Sur quelle entité voulez-vous lancer des commandes ?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Certains services et entités XMPP permettent à des utilisateurs privilégiés d’exécuter des commandes ad-hoc sur eux."],"Commands found":["Commandes trouvées"],"List available commands":["Lister les commandes disponibles"],"No commands found":["Aucune commande trouvée"],"Sorry, an error occurred while looking for commands on that entity.":["Désolé, une erreur est survenue en cherchant des commandes sur cette entité."],"The specified entity doesn\'t support ad-hoc commands":["L’entité spécifiée ne prend pas en charge les commandes ad-hoc"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Désolé, une erreur s’est produite lors de l’exécution de la commande. Vérifiez la console de développement de votre navigateur pour plus de détails"],"About":["À propos"],"Commands":["Commandes"],"Settings":["Préférences"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s libre %2$s qui vous est fourni par %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduisez-le %2$s dans votre langue"],"Log out":["Se déconnecter"],"Click to change your chat status":["Cliquez pour changer votre statut"],"Show details about this chat client":["Afficher plus d’informations sur ce client"],"Your avatar image":["Votre image d’avatar"],"Checkbox for selecting the following fingerprint":["Case à cocher pour sélectionner l’empreinte OMEMO suivante"],"Device without a fingerprint":["Client sans empreinte de clé OMEMO"],"Checkbox for selecting the following device":["Case à cocher pour sélectionner le périphérique OMEMO suivant"],"Other OMEMO-enabled devices":["Autres clients ayant activé le chiffrement OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Case à cocher pour sélectionner les empreintes de tous les autres clients OMEMO"],"Remove checked devices and close":["Supprimer les clients OMEMO sélectionnés, et fermer"],"Select all":["Tout sélectionner"],"This device\'s OMEMO fingerprint":["Empreinte de clé OMEMO de ce client"],"Generate new keys and fingerprint":["Générer de nouvelles clés et empreintes de clés"],"Your Profile":["Votre profil"],"XMPP Address (JID)":["Adresse XMPP (JID)"],"Save and close":["Enregistrer et fermer"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilisez une virgule pour séparer plusieurs rôles. Vos rôles sont affichés à côté de votre nom dans vos messages."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Désolé, quelque chose s’est mal passé pendant la sauvegarde de votre profil."],"You can check your browser\'s developer console for any error output.":["Vous pouvez surveiller toute erreur qui apparaîtrait dans la console de développement de votre navigateur."],"Away":["Absent"],"Busy":["Occupé"],"Custom status":["Statut personnel"],"Offline":["Déconnecté"],"Online":["En ligne"],"Away for long":["Absent pour une longue durée"],"Change chat status":["changer votre statut de chat"],"Personal status message":["Message de statut personnel"],"I am %1$s":["Je suis %1$s"],"Are you sure you want to log out?":["Voulez-vous vraiment vous déconnecter ?"],"online":["en ligne"],"busy":["occupé"],"away for long":["absent pour une longue durée"],"away":["absent"],"offline":["Déconnecté"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Désolé, impossible de déchiffrer un message chiffré avec OMEMO à cause d’une erreur."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Désolé, impossible de déchiffrer un message chiffré avec OMEMO parce que nous n\'avons pas le JID pour cet utilisateur."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ne semble pas avoir un client qui supporte OMEMO. Le chiffrement ne sera plus possible dans ce groupe de discussion."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Impossible d’utiliser le chiffrement bout à bout dans ce salon, soit parce qu’il est semi-anonyme, soit parce que tous les participants ne gèrent pas OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Impossible d’utiliser le chiffrement bout à bout parce que %1$s utilise un client qui ne gère pas OMEMO."],"Messages are being sent in plaintext":["Les messages sont envoyés en clair"],"Messages are sent encrypted":["Vos messages sont envoyés chiffrés"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Ce salon doit être réservé aux membres et non-anonyme pour permettre les messages chiffrés OMEMO"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Désolé, impossible d\'envoyer un message chiffré parce que %1$s nécessitent que vous soyez abonné à leur présence afin de voir leurs informations OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Désolé, impossible d\'envoyer un message chiffré parce que le serveur distant de %1$s n\'est pas joignable"],"Unable to send an encrypted message due to an unexpected error.":["Impossible d’envoyer un message chiffré à cause d’une erreur."],"Sorry, an error occurred while trying to remove the devices.":["Désolé, une erreur est survenue en tentant de supprimer les clients OMEMO."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Voulez-vous vraiment générer de nouvelles clefs OMEMO ? Ceci retirera vos anciennes clefs et tous les messages déjà chiffrés ne seront plus déchiffrables sur ce client."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Désolé, impossible de trouver un appareil auquel envoyer un message chiffré avec OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ceci est un message chiffré avec OMEMO, que votre client ne semble pas prendre en charge. Pour plus d’informations, allez voir https://conversations.im/omemo"]," e.g. conversejs.org":[" par exemple conversejs.org"],"Fetch registration form":["Récupération du formulaire d’enregistrement"],"Tip: A list of public XMPP providers is available":["Astuce : une liste publique de fournisseurs XMPP est disponible"],"here":["ici"],"Sorry, we\'re unable to connect to your chosen provider.":["Désolé, nous n’avons pas pu nous connecter à votre fournisseur."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Désolé, le fournisseur indiqué ne supporte pas l’enregistrement de compte en ligne. Merci d’essayer avec un autre fournisseur."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Quelque chose a échoué lors de l’établissement de la connexion avec « %1$s ». Existe-t-il vraiment ?"],"Now logging you in":["En cours de connexion"],"Registered successfully":["Enregistré avec succès"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Le fournisseur a rejeté votre demande d’inscription. Merci de vérifier que les données que vous avez fournies sont correctes."],"Leave this groupchat":["Quitter ce salon"],"Click to toggle the list of open groupchats":["Cliquer pour ouvrir la liste des salons ouverts"],"Open Groupchats":["Salons ouverts"],"Are you sure you want to leave the groupchat %1$s?":["Voulez-vous vraiment quitter le salon « %1$s » ?"],"Add":["Ajouter"],"Add a Contact":["Ajouter un contact"],"This contact is busy":["Ce contact est occupé"],"This contact is online":["Ce contact est connecté"],"This contact is offline":["Ce contact est déconnecté"],"This contact is unavailable":["Ce contact est indisponible"],"This contact is away for an extended period":["Ce contact est absent"],"This contact is away":["Ce contact est absent"],"Contact name":["Nom du contact"],"Optional nickname":["Pseudonyme optionnel"],"Sorry, could not find a contact with that name":["Désolé, impossible de trouver un contact avec ce nom"],"This contact has already been added":["Ce contact est déjà enregistré"],"Filter":["Filtrer"],"Filter by contact name":["Filtrer par nom de contact"],"Filter by group name":["Filtrer par nom de groupe"],"Filter by status":["Filtrer par statut"],"Any":["Aucun"],"Unread":["Non lu"],"Chatty":["Bavard"],"Extended Away":["Absence longue durée"],"Click to remove %1$s as a contact":["Cliquez pour retirer le contact %1$s"],"Click to accept the contact request from %1$s":["Cliquez pour accepter la demande d’ajout de contact de %1$s"],"Click to decline the contact request from %1$s":["Cliquez pour décliner la demande d’ajout de contact de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Cliquez pour discuter avec %1$s (adresse XMPP : %2$s)"],"Are you sure you want to decline this contact request?":["Voulez-vous vraiment rejeter cette demande d’ajout de contact ?"],"Contacts":["Contacts"],"Add a contact":["Ajouter un contact"],"Re-sync your contacts":["Resynchroniser vos contacts"]}}}')}}]);
 //# sourceMappingURL=fr-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/gl-LC_MESSAGES-converse-po.js b/src/conversejs/locales/gl-LC_MESSAGES-converse-po.js
index 5a6faa5bfa7bab9ce0a7da970962f189f85fdef2..f91ea91ff8dae401436c672fece8e0f5c458e5d2 100644
--- a/src/conversejs/locales/gl-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/gl-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{431:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"gl"},"Create your account":["Cree a súa conta"],"Please enter the XMPP provider to register with:":["Por favor, introduza o provedor XMPP no que rexistrarse:"],"Already have a chat account?":["Xa ten unha conta?"],"Log in here":["Conéctese aquí"],"Account Registration:":["Rexistro de conta:"],"Register":["Rexistrar"],"Choose a different provider":["Escoller un provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Agarde, estamos solicitando o formulario de rexistro…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["Cortouse a comunicación, intentando recuperala."],"An error occurred while connecting to the chat server.":["Algo fallou ao conectar co servidor da conversa."],"Your XMPP address and/or password is incorrect. Please try again.":["O teu enderezo XMPP e/ou contrasinal son incorrectos. Inténtao de novo."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Lamentámolo, non podemos conectar co servidor XMPP con dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor XMPP non ofrece un mecanismo de autenticación soportado"],"Sorry, could not determine upload URL.":["Lamentámolo, non se puido determinar a URL de subida."],"Sorry, could not determine file upload URL.":["Lamentámolo, non se determinou a URL de subida do ficheiro."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Lamentámolo, non se subeu o ficheiro. A resposta do servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Lamentámolo, non se subeu o seu ficheiro."],"You\'re not allowed to retract your message.":["Non podes retractar desta mensaxe."],"Sorry, an error occurred while trying to retract your message.":["Lamentámolo, algo fallou ó intentar retractar a mensaxe."],"You\'re not allowed to send a message.":["Non tes permiso para enviar unha mensaxe."],"Sorry, an error occurred while trying to send your message.":["Lamentámolo, algo fallou ó intentar enviar a mensaxe."],"Sorry, looks like file upload is not supported by your server.":["Lamentámolo, semella que o servidor non soporta a subida de ficheiros."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamaño do ficheiro, %1$s, excede o límite establecido no servidor, que é %2$s."],"Smileys and emotions":["Sorrisos e emocións"],"People":["Xente"],"Activities":["Actividades"],"Travel":["Viaxar"],"Objects":["Obxetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":["Bandeiras"],"Stickers":["Pegatinas"],"This groupchat is not anonymous":["Esta conversa en grupo non é anónima"],"This groupchat now shows unavailable members":["Esta conversa en grupo agora mostra membros non dispoñibles"],"This groupchat does not show unavailable members":["Esta conversa en grupo non mostra membros non dispoñibles"],"The groupchat configuration has changed":["A configuración da conversa en grupo cambiou"],"Groupchat logging is now enabled":["O rexistro da conversa de grupo está activado"],"Groupchat logging is now disabled":["O rexistro da conversa de grupo está desactivado"],"This groupchat is now no longer anonymous":["Esta conversa en grupo xa non é anónima"],"This groupchat is now semi-anonymous":["Esta conversa en grupo agora é semi-anónima"],"This groupchat is now fully-anonymous":["Esta conversa en grupo agora é totalmente anónima"],"A new groupchat has been created":["Creouse unha nova conversa en grupo"],"Your nickname has been automatically set to %1$s":["O seu alcume estableceuse automáticamente como %1$s"],"Your nickname has been changed to %1$s":["O seu alcume foi cambiado a %1$s"],"You have been banned from this groupchat":["Excluíronte desta conversa en grupo"],"You have exited this groupchat due to a technical problem":["Saíches desta conversa en grupo debido a un problema técnico"],"You have been kicked from this groupchat":["Expulsáronte desta conversa en grupo"],"You have been removed from this groupchat because of an affiliation change":["Sacáronte desta conversa en grupo debido a un cambio na afiliación"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Elimináronte desta conversa en grupo porque o grupo cambiou a só-membros e ti non es membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Elimináronte da conversa en grupo porque o servicio de hospedaxe foi apagado"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Non se enviou a retracción porque non estás presente na conversa en grupo."],"Your message was not delivered because you weren\'t allowed to send it.":["Non se enviou a mensaxe porque non tes permiso para enviala."],"Your message was not delivered because you\'re not present in the groupchat.":["Non se entregou a mensaxe porque non está presente en este grupo."],"A timeout happened while while trying to retract your message.":["Caducou a solicitude mentras intentabas retractar a mensaxe."],"You\'re not allowed to register yourself in this groupchat.":["Non podes rexistrarte a ti mesmo nesta conversa en grupo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Non ten permiso para rexistrarse na conversa en grupo porque é só para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Non pode rexistrar o seu usuario en este grupo, non soporta o rexistro."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Non pode rexistrar o seu usuario na conversa, os datos proporcionados non son válidos."],"Topic set by %1$s":["Asunto establecido por %1$s"],"Topic cleared by %1$s":["Asunto eliminado por %1$s"],"%1$s has been banned by %2$s":["%1$s foi excluído por %2$s"],"%1$s has been banned":["%1$s foi excluído"],"%1$s\'s nickname has changed":["Cambiou o alcume de %1$s"],"%1$s has been kicked out by %2$s":["%1$s foi expulsado por %2$s"],"%1$s has been kicked out":["%1$s foi expulsado"],"%1$s has been removed because of an affiliation change":["%1$s foi eliminado debido a un cambio de afiliación"],"%1$s has been removed for not being a member":["%1$s foi eliminado por non ser membro"],"%1$s is no longer an admin of this groupchat":["%1$s xa non é admin de esta conversa en grupo"],"%1$s is no longer an owner of this groupchat":["%1$s xa non é dono de esta conversa en grupo"],"%1$s is no longer banned from this groupchat":["%1$s xa non está excluída de esta conversa en grupo"],"%1$s is no longer a member of this groupchat":["%1$s xa non é membro de este grupo"],"%1$s is now a member of this groupchat":["%1$s é un membro de este grupo"],"%1$s is now an %2$s of this groupchat":["%1$s é o %2$s de esta conversa en grupo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O alcume escollido está reservado ou en uso, por favor escolla outro."],"Password incorrect":["Contrasinal incorrecto"],"You are not on the member list of this groupchat.":["Non es membro de esta conversa en grupo."],"You have been banned from this groupchat.":["Foches excluído desta conversa en grupo."],"You are not allowed to create new groupchats.":["Non te permiso para crear novas conversas en grupo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["O seu alcume non segue as normas de esta conversa en grupo."],"This groupchat does not (yet) exist.":["Esta conversa en grupo non existe (aínda)."],"This groupchat has reached its maximum number of participants.":["Esta conversa en grupo alcanzou o número máximo de participantes."],"Remote server not found":["Non se atopou o servidor remoto"],"The explanation given is: \\"%1$s\\".":["A explicación dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidouna a unirse a conversa en grupo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidouna a unirse a conversa en grupo: %2$s, e deulle esta razón: \\"%3$s\\""],"Error":["Fallo"],"Sorry, something went wrong while trying to save your bookmark.":["Lamentámolo, algo fallou ao intentar gardar o marcador."],"Timeout Error":["Fallo de caducidade"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["O servidor non devolveu os teus marcadores no tempo estipulado. Podes recargar a páxina para solicitalos de novo."],"My contacts":["Os meus contactos"],"Pending contacts":["Contactos pendentes"],"Contact requests":["Solicitudes de contacto"],"Ungrouped":["Sen agrupar"],"New messages":["Novas mensaxes"],"Sorry, there was an error while trying to add %1$s as a contact.":["Lamentámolo, algo fallou ao intentar engadir a %1$s como contacto."],"This client does not allow presence subscriptions":["Este cliente non permite suscricións de presencia"],"Click to hide these contacts":["Pulse para ocultar estos contactos"],"Unbookmark this groupchat":["Desmarcar esta conversa de grupo"],"Click to open this groupchat":["Pulse para abrir esta conversa en grupo"],"Click to toggle the bookmarks list":["Pulse para mostrar a lista de marcadores"],"Bookmarks":["Marcadores"],"Bookmark this groupchat":["Marcar esta conversa de grupo"],"Would you like this groupchat to be automatically joined upon startup?":["Desexaría conectarse automáticamente ao inicio a esta conversa de grupo?"],"The name for this bookmark:":["O nome para este marcador:"],"What should your nickname for this groupchat be?":["Qué alcume desexa ter para esta conversa en grupo?"],"Save":["Gardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Realmente desexa eliminar o marcador \\"%1$s\\"?"],"Unbookmark":["Eliminar marcador"],"Bookmark":["Marcar"],"Close":["Pechar"],"OK":["OK"],"Image: ":["Imaxe: "],"Download audio file \\"%1$s\\"":["Descargar ficheiro de audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Descargar ficheiro \\"%1$s\\""],"Cancel Editing":["Cancelar a edición"],"Edit":["Editar"],"Retract":["Retractar"],"Message versions":["Versións da mensaxe"],"Retry":["Reintentar"],"Uploading file:":["Subindo ficheiro:"],"%1$s has removed this message":["%1$s foi eliminou esta mensaxe"],"This message has been edited":["Esta mensaxe foi editada"],"Show more":["Mostrar máis"],"Show less":["Mostrar menos"],"No message history available.":["Non está dispoñible o historial de mensaxes."],"Search results":["Resultados da busca"],"Search":["Buscar"],"Insert emojis":["Inserir emojis"],"Send the message":["Enviar a mensaxe"],"Start a call":["Iniciar chamada"],"Message characters remaining":["Caracteres restantes"],"Hide participants":["Agochar participantes"],"Show participants":["Mostrar participantes"],"Choose a file to send":["Escolla o ficheiro a enviar"],"Click to write as a normal (non-spoiler) message":["Preme para escribir unha mensaxe normal (non spoiler)"],"Click to write your message as a spoiler":["Preme para escribir unha mensaxe tipo spoiler"],"The User\'s Profile Image":["Imaxe de perfil do usuario"],"Trusted":["De confianza"],"Untrusted":["Non confiable"],"OMEMO Fingerprints":["Pegadas dixitais OMEMO"],"No OMEMO-enabled devices found":["Non se atoparon dispositivos con OMEMO activado"],"Remove as contact":["Eliminar como contacto"],"XMPP Address":["Enderezo XMPP"],"Email":["Correo-e"],"Full Name":["Nome completo"],"Nickname":["Alcume"],"Refresh":["Actualizar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s está a escribir"],"%1$s has stopped typing":["%1$s deixou de escribir"],"%1$s has gone away":["%1$s marchou"],"Remove messages":["Eliminar mensaxes"],"Close this chat":["Pechar esta conversa"],"Write in the third person":["Escribir en terceira persoa"],"Show this menu":["Mostrar este menú"],"Hidden message":["Mensaxes ocultas"],"Message":["Mensaxe"],"Optional hint":["Truco opcional"],"You have unread messages":["Ten mensaxes sen ler"],"Details":["Detalles"],"See more information about this person":["Mostrar máis información sobre esta persoa"],"Close and end this conversation":["Pechar e saír da conversa"],"Sorry, the connection has been lost, and your message could not be sent":["Mágoa!, perdeuse a conexión, a mensaxe non se puido enviar"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Ten en conta que outros clientes XMPP/Jabber (e servidores) poderían non ter soporte para retirar mensaxes polo que esta mensaxe podería non ser eliminada deles."],"Are you sure you want to retract this message?":["Seguro que queres eliminar esta mensaxe?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Ten unha mensaxe sen enviar que perderá se segue adiante. Está seguro?"],"Are you sure you want to clear the messages from this conversation?":["Seguro que desexa eliminar as mensaxes de esta conversa?"],"%1$s has gone offline":["%1$s desconectouse"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está en liña"],"Sorry, something went wrong while trying to refresh":["Lamentámolo, algo fallou ao intentar actualizar"],"Are you sure you want to remove this contact?":["Seguro que quere eliminar este contacto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Lamentámolo, algo fallou ao intentar eliminar o contacto %1$s."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para mellorar o rendemento, almacenamos os seus datos no navegador. Desmarque esta opción si se trata de unha computadora pública para borrar os datos cando se desconecte. É importante que se desconecte de xeito explícito, se non non se borrarán os datos. O cifrado OMEMO non está dispoñible cando está a utilizar un dispositivo non confiable."],"This is a trusted device":["Este é un dispositivo de confianza"],"Password":["Contrasinal"],"Create an account":["Crear unha conta"],"Don\'t have a chat account?":["Non ten conta para conversar?"],"Log in":["Conectar"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Pulse aquí para conectar anónimamente"],"Username":["Nome de usuaria"],"user@domain":["usuaria@dominio"],"Please enter a valid XMPP address":["Por favor, introduza un enderezo XMPP válido"],"Chat Contacts":["Conversar con contactos"],"Toggle chat":["Iniciar chat"],"Click to restore this chat":["Pulse para restaurar esta conversa"],"Minimized":["Minimizada"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar esta conversa"],"Minimize this groupchat":["Minimizar esta conversa en grupo"],"This field is required":["Este campo é requerido"],"Join":["Unirse"],"Enter a new Groupchat":["Introduza unha nova Conversa en grupo"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Nome da conversa en grupo"],"Groupchat address":["Enderezo da conversa en grupo"],"Groupchat id is invalid.":["O id da conversa en grupo non é válido."],"Invite":["Convidar"],"Invite someone to this groupchat":["Convida a alguén a esta conversa en grupo"],"user@example.org":["nome@exemplo.org"],"Optional reason for the invitation":["Razón para o convite (optativo)"],"Show groupchats":["Mostra conversas en grupo"],"Server address":["Enderezo do servidor"],"Show more information on this groupchat":["Mostrar máis información sobre esta conversa en grupo"],"Query for Groupchats":["Busque Conversas en grupo"],"Description:":["Descrición:"],"Groupchat Address (JID):":["Enderezo da conversa en grupo (JID):"],"Participants:":["Partícipes:"],"Features:":["Características:"],"Requires authentication":["Require autenticación"],"Hidden":["Oculto"],"Requires an invitation":["Require convite"],"Moderated":["Moderada"],"Non-anonymous":["Non anónima"],"Open":["Aberta"],"Permanent":["Permanente"],"Public":["Pública"],"Semi-anonymous":["Semi anónima"],"Temporary":["Temporal"],"Unmoderated":["Non moderada"],"conference.example.org":["conferencia.exemplo.org"],"Groupchats found":["Atopáronse conversas en grupo"],"No groupchats found":["Non se atoparon conversas en grupo"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Os moderadores son usuarios con privilexios que poden cambiar os roles de outros usuarios (excepto os de administradores e donos)."],"The default role, implies that you can read and write messages.":["O rol por omisión implica que pode ler e escribir mensaxes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Os visitantes non poden escribir mensaxes nunha sala multiusuario moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Dono é a maior afiliación. Os donos poden modificar os roles e afiliación dos outros usuarios."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin é o segundo maior nivel de afiliación. Admins poden modificar roles e afiliación de todos os usuarios menos dos donos."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para excluír un usuario, daslle a afiliación de \\"forasteiro\\"."],"Change role":["Cambiar rol"],"New Role":["Novo rol"],"Reason":["Razón"],"Change affiliation":["Cambiar a afiliación"],"New affiliation":["Nova afiliación"],"Affiliation":["Afiliación"],"Moderator Tools":["Ferramentas de moderador"],"No users with that affiliation found.":["Non se atoparon usuarios con esa afiliación."],"No users with that role found.":["Non se atoparon usuarios con ese rol."],"Type here to filter the search results":["Escribe aquí para filtrar os resultados da busca"],"Show users":["Mostrar usuarios"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Os roles asígnanse as usuarias para outorgar ou denegarlles certos permisos nunha conversa multiusuario.  Asígnanse de xeito implícito ou explícito como parte da filiación. Un rol que non é debido a filiación só é valido durante a duración da sesión do usuario."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Unha afiliación é un título de alto nivel que normalmente implica certo rol e que outorga certos privilexios e responsabilidades. Por exemplo, admins e donos teñen rol de moderador de xeito automático."],"Timeout error while trying to set the affiliation":["Fallo de caducidade ó intentar establecer a afiliación"],"Sorry, you\'re not allowed to make that change":["Sentímolo, mais non tes permiso para realizar ese cambio"],"Sorry, something went wrong while trying to set the affiliation":["Lamentámolo, algo fallou ao establecer a afiliación"],"Affiliation changed":["Cambiou a afiliación"],"Role changed":["Rol cambiado"],"You\'re not allowed to make that change":["Non tes permiso para realizar ese cambio"],"Sorry, something went wrong while trying to set the role":["Lamentámolo, algo fallou ao intentar establer o rol"],"Topic":["Asunto"],"Topic author":["Autor do asunto"],"Groupchat address (JID)":["Enderezo da conversa en grupo (JID)"],"Message archiving":["Arquivado de mensaxes"],"Messages are archived on the server":["As mensaxes gárdanse no servidor"],"Description":["Descrición"],"Features":["Características"],"This groupchat is not publicly searchable":["Esta conversa en grupo non está en listas públicas"],"This groupchat is restricted to members only":["Esta conversa en grupo é accesible só para membros"],"Members only":["Só para membros"],"Participants entering this groupchat need to request permission to write":["Os participantes da conversa deben solicitar permiso para escribir"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Esta conversa en grupo non solicita contrasinal para entrar"],"No password required":["Sen protección de contrasinal"],"Not anonymous":["Non anónima"],"All other groupchat participants can see your XMPP address":["Calquera outro participante da conversa pode ver o seu enderezo XMPP"],"Not moderated":["Non moderada"],"Participants entering this groupchat can write right away":["Os participantes poden escribir libremente"],"Online users":["Usuarias conectadas"],"Anyone can join this groupchat":["Calquera pode unirse a esta conversa en grupo"],"This groupchat requires a password before entry":["Esta conversa en grupo precisa un contrasinal para entrar"],"Password protected":["Protexido por contrasinal"],"Persistent":["Perenne"],"This groupchat persists even if it\'s unoccupied":["Esta conversa en grupo permanece incluso si está baldeira"],"Only moderators can see your XMPP address":["Só os moderadores poden ver o seu enderezo XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversa en grupo desaparecerá unha vez saia a última persoa"],"This groupchat is publicly searchable":["Esta conversa en grupo está en listas públicas"],"Groupchat info for %1$s":["Info da conversa en grupo para %1$s"],"You\'re not allowed to send messages in this room":["Non ten permiso para enviar mensaxes a esta sala"],"The conversation has moved. Click below to enter.":["Moveuse a conversa. Pulse abaixo para entrar."],"This groupchat no longer exists":["Esta conversa en grupo xa non existe"],"Hide the groupchat topic":["Agochar o asunto da conversa en grupo"],"This groupchat is bookmarked":["Esta conversa está nos marcadores"],"Enter groupchat":["Entrar na conversa en grupo"],"Choose a nickname to enter":["Escolle un alcume para entrar"],"Please choose your nickname":["Por favor, escolla o seu alcume"],"This groupchat requires a password":["Esta conversa en grupo precisa de un contrasinal"],"Password: ":["Contrasinal: "],"Submit":["Enviar"],"This user is a moderator.":["Esta usuaria é moderador."],"This user can send messages in this groupchat.":["Esta usuaria pode enviar mensaxes a conversa en grupo."],"This user can NOT send messages in this groupchat.":["Esta usuaria NON pode enviar mensaxes a conversa en grupo."],"Owner":["Propietario"],"Admin":["Admin"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Pulse para mencionar a %1$s na súa mensaxe."],"Participants":["Participantes"],"%1$s has entered the groupchat":["%1$s entrou na conversa en grupo"],"%1$s has left the groupchat":["%1$s deixou a conversa en grupo"],"%1$s is now a moderator":["%1$s agora é moderador"],"%1$s is no longer a moderator":["%1$s xa non é moderador"],"%1$s has been given a voice":["%1$s ten a palabra"],"%1$s has been muted":["%1$s foi acalado"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s está escribindo"],"%1$s have stopped typing":["%1$s deixou de escribir"],"%1$s have gone away":["%1$s marchou"],"%1$s have entered the groupchat":["%1$s entrou na conversa en grupo"],"%1$s have left the groupchat":["%1$s deixou a conversa en grupo"],"%1$s are now moderators":["%1$s agora son moderadores"],"%1$s are no longer moderators":["%1$s xa non son moderadores"],"%1$s have been given voices":["Concedéronlle a palabra a %1$s"],"%1$s have been muted":["%1$s foron acaladas"],"Change user\'s affiliation to admin":["Cambiar a afiliación da usuaria a admin"],"Ban user by changing their affiliation to outcast":["Prohibir usuario cambiando a filiación na sala"],"Clear the chat area":["Limpar o área de conversa"],"Close this groupchat":["Pechar esta conversa en grupo"],"Change user role to participant":["Cambiar o rol da usuaria a participante"],"Remove this groupchat":["Eliminar esta conversa en grupo"],"Kick user from groupchat":["Expulsar a usuaria da conversa en grupo"],"Write in 3rd person":["Escribir en terceira persoa"],"Grant membership to a user":["Conceder a membresía a unha usuaria"],"Opens up the moderator tools GUI":["Abre a interface gráfica de ferramentas de moderación"],"Remove user\'s ability to post messages":["Quitarlle a posibilidade de publicar mensaxes a usuaria"],"Change your nickname":["Cambiar o seu alcume"],"Grant moderator role to user":["Conceder rol de moderador a usuaria"],"Grant ownership of this groupchat":["Conceder a propiedade de esta conversa en grupo"],"Register your nickname":["Rexistrar o seu alcume"],"Revoke the user\'s current affiliation":["Repudiar a filiación actual do usuario"],"Set groupchat subject":["Establecer o asunto da conversa en grupo"],"Set groupchat subject (alias for /subject)":["Establecer o asunto da conversa (alias para /subject)"],"Allow muted user to post messages":["Permitir as usuarias acaladas publicar mensaxes"],"You are about to retract this message.":["Vas a eliminar esta mensaxe."],"You may optionally include a message, explaining the reason for the retraction.":["De xeito opcional poderías deixar un aviso, explicando a razón de tela eliminado."],"Message Retraction":["Eliminación da mensaxe"],"Optional reason":["Razón (optativo)"],"Sorry, you\'re not allowed to retract this message":["Desculpa, pero non tes permiso para borrar esta mensaxe"],"A timeout occurred while trying to retract the message":["Caducou a solicitude de borrado da mensaxe"],"Sorry, you\'re not allowed to retract this message.":["Desculpa, pero non tes permiso para borrar esta mensaxe."],"Show more information about this groupchat":["Mostrar máis información sobre esta conversa en grupo"],"Configure":["Configurar"],"Configure this groupchat":["Configurar a conversa en grupo"],"Invite someone to join this groupchat":["Convida a alguén a unirse a conversa en grupo"],"Show topic":["Mostrar o tema"],"Hide topic":["Agochar o tema"],"Show the topic message in the heading":["Mostrar o tema da conversa na cabeceira"],"Hide the topic in the heading":["Agochar o tema da conversa na cabeceira"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar esta conversa en grupo"],"Destroy":["Destruír"],"Leave":["Saír"],"Leave and close this groupchat":["Deixar e pechar esta conversa en grupo"],"Are you sure you want to leave this groupchat?":["Seguro que queres deixar a conversa en grupo?"],"Hide the list of participants":["Agochar a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibido: non ten os permisos necesarios para facer iso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibido: non ten a afiliación necesaria para facer iso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fallo: O comando \\"%1$s\\" precisa dous argumentos, o alcume do usuario e opcionalmente unha razón."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fallo: non se atopou ao participante da conversa con esos parámetros"],"Error: found multiple groupchat participant based on your arguments":["Fallo: atopáronse varios participantes con esos parámetros"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Non se atopou un participante con ese alcume. Podería ter saído da conversa."],"Sorry, an error happened while running the command.":["Lamentámolo, algo fallou ao executar o comando."],"Check your browser\'s developer console for details.":["Mira na consola de desenvolvedor do navegador para máis detalles."],"Are you sure you want to destroy this groupchat?":["Seguro que queres desbotar a conversa en grupo?"],"Please enter the XMPP address of this groupchat to confirm":["Por favor, escribe o provedor XMPP desta conversa en grupo para confirmar"],"name@example.org":["nome@exemplo.org"],"Optional reason for destroying this groupchat":["Razón para eliminar esta conversa en grupo (optativo)"],"Optional XMPP address for a new groupchat that replaces this one":["Enderezo XMPP optativo para a nova conversa en grupo que substitúe a esta"],"replacement@example.org":["substituta@exemplo.org"],"Your nickname is \\"%1$s\\"":["O seu alcume é \\"%1$s\\""],"Error: invalid number of arguments":["Fallo: número de argumentos non válido"],"This action was done by %1$s.":["Esta acción foi feita por %1$s."],"The reason given is: \\"%1$s\\".":["A razón dada é: \\"%1$s\\"."],"Groupchats":["Conversas en grupo"],"Add a new groupchat":["Engadir unha nova conversa en grupo"],"Query for groupchats":["Buscar conversas en grupo"],"Sorry, an error occurred while trying to submit the config form.":["Lamentámolo, algo fallou ao intentar enviar o formulario de configuración."],"Close these announcements":["Pechar estos anuncios"],"Announcements":["Anuncios"],"Click to open this server message":["Preme para abrir a esta mensaxe do servidor"],"Notification from %1$s":["Notificación de %1$s"],"%1$s says":["%1$s di"],"has gone offline":["non está en liña"],"has gone away":["marchou"],"is busy":["está ocupado"],"has come online":["voltou a estar en liña"],"wants to be your contact":["quere ser un contacto seu"],"Hide":["Agochar"],"Execute":["Executar"],"On which entity do you want to run commands?":["¿En qué entidade queres executar os comandos?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Certos servizos e entidades XMPP permítenlle a usuarias autorizadas executar comandos a medida neles."],"Commands found":["Comandos atopados"],"List available commands":["Lista de comandos dispoñibles"],"No commands found":["Non se atoparon comandos"],"Sorry, an error occurred while looking for commands on that entity.":["Lamentámolo, algo fallou ó buscar os comandos nesa entidade."],"The specified entity doesn\'t support ad-hoc commands":["A entidade indicada non soporta os comandos a medida"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Lamentámolo, algo fallou ao executar o comando. Mira os detalles na consola de desenvolvedora"],"About":["Acerca de"],"Commands":["Comandos"],"Settings":["Axustes"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Cliente de %1$s código aberto %2$s para conversas XMPP proporcionado por  %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$sTradúzao%2$s para o seu idioma"],"Log out":["Desconectar"],"Click to change your chat status":["Pulse para cambiar o estado da conversa"],"Show details about this chat client":["Mostrar detalles sobre esta conversa en grupo"],"Your avatar image":["A súa imaxe avatar"],"Checkbox for selecting the following fingerprint":["Marque para escoller a seguinte pegada dixital"],"Device without a fingerprint":["Dispositivo sen pegada dixital"],"Checkbox for selecting the following device":["Marca para escoller o seguinte dispositivo"],"Other OMEMO-enabled devices":["Outros dispositivos con OMEMO habilitado"],"Checkbox to select fingerprints of all other OMEMO devices":["Marque para seleccionar as pegadas dixitais OMEMO de todos os dispositivos"],"Remove checked devices and close":["Eliminar os dispositivos marcados e pechar"],"Select all":["Escoller todo"],"This device\'s OMEMO fingerprint":["Pegada dixital OMEMO de este dispositivo"],"Generate new keys and fingerprint":["Xerar novas chaves e pegada dixital"],"Your Profile":["O seu Perfil"],"XMPP Address (JID)":["Enderezo XMPP (JID)"],"Save and close":["Gardar e pechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilice comas para separar múltiples roles. Os seus roles móstranse xunto ao seu nome nas mensaxes."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Lamentámolo, algo fallou ao intentar gardar os datos do seu perfil."],"You can check your browser\'s developer console for any error output.":["Pode mirar na consola de desenvolvemento do navegador detalles do fallo."],"Away":["Fóra"],"Busy":["Ocupado"],"Custom status":["Estado personalizado"],"Offline":["Desconectado"],"Online":["Conectado"],"Away for long":["Fóra hai tempo"],"Change chat status":["Cambiar estado da conversa"],"Personal status message":["Mensaxe de estado persoal"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Seguro que quere desconectar?"],"online":["en liña"],"busy":["ocupado"],"away for long":["fóra hai tempo"],"away":["fóra"],"offline":["desconectado"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Lamentámolo, non se descifrou a mensaxe OMEMO debido a un fallo."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s non parece ter un cliente con soporte OMEMO. O cifrado da conversa no será posible en este grupo."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Non se puido utilizar o cifrado extremo-a-extremo nesta sala, ou a conversa ten certo anonimato ou non todas as participantes soportan OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Non se puido utilizar o cifrado extremo-a-extremo porque %1$s utilizar un cliente que non soporta OMEMO."],"Messages are being sent in plaintext":["As mensaxes estanse a enviar en texto plano"],"Messages are sent encrypted":["As mensaxes envíanse cifradas"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Esta conversa de grupo ten que ser só para membros e non-anónima para poder usar mensaxes cifradas con OMEMO"],"Sorry, an error occurred while trying to remove the devices.":["Lamentámolo, algo fallou ao intentar eliminar os dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Realmente quere xerar unhas novas chaves OMEMO? Esto eliminará as antigas e todas as mensaxes anteriores cifradas con elas non se poderán ler neste dispositivo."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Lamentámolo, non podemos enviar unha mensaxe cifrada xa que %1$s require que te subscribas a súa presencia para poder ver a súa información OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Lamentámolo, non podemos enviar unha mensaxe cifrada porque non atopamos o servidor remoto de %1$s"],"Unable to send an encrypted message due to an unexpected error.":["Lamentámolo, non se enviou a mensaxe cifrada debido a un fallo."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Lamentámolo, non se atoparon dispositivos aos que enviar unha mensaxe OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta mensaxe está cifrada con OMEMO e o seu cliente non semella soportalo. Atope máis información en https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Obter formulario de rexistro"],"Tip: A list of public XMPP providers is available":["Tip: está dispoñible unha lista de servidores XMPP públicos"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Lamentámolo, non puidemos conectar co provedor escollido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Lamentámolo, o provedor escollido non soporta o rexistro directo. Por favor, inténteo con outro provedor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo foi mal ao intentar conectar con \\"%1$s\\". Seguro que existe?"],"Now logging you in":["Conectandoo"],"Registered successfully":["Rexistrado correctamente"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rexeitou o intento de rexistro. Por favor, comprobe a corrección dos datos introducidos."],"Leave this groupchat":["Deixar esta conversa en grupo"],"Click to toggle the list of open groupchats":["Pulse para activar a lista de conversas en grupo abertas"],"Open Groupchats":["Abrir conversas en grupo"],"Are you sure you want to leave the groupchat %1$s?":["Seguro que quere deixar a conversa en grupo %1$s?"],"Add":["Engadir"],"Add a Contact":["Engadir un contacto"],"This contact is busy":["Este contacto está ocupado"],"This contact is online":["Este contacto está en liña"],"This contact is offline":["Este contacto está desconectado"],"This contact is unavailable":["Este contacto non está dispoñible"],"This contact is away for an extended period":["Este contacto hai tempo que non está conectado"],"This contact is away":["Este contacto está fóra"],"Contact name":["Nome do contacto"],"Optional nickname":["Alcume opcional"],"Sorry, could not find a contact with that name":["Lamentámolo, non atopamos un contacto con ese nome"],"This contact has already been added":["Este contacto xa foi engadido"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contacto"],"Filter by group name":["Filtrar por nome de grupo"],"Filter by status":["Filtrar por estado"],"Any":["Calquera"],"Unread":["Sen ler"],"Chatty":["Falador"],"Extended Away":["Fóra por longo tempo"],"Click to remove %1$s as a contact":["Pulse para eliminar %1$s como contacto"],"Click to accept the contact request from %1$s":["Pulse para aceptar a solicitude de contacto de %1$s"],"Click to decline the contact request from %1$s":["Pulse para rexeitar a solicitude de contacto de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Preme para conversar con %1$s (enderezo XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Seguro que desexa rexeitar a solicitude do contacto?"],"Contacts":["Contactos"],"Add a contact":["Engadir un contacto"],"Re-sync your contacts":["Sincronizar contactos"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{519:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"gl"},"Create your account":["Cree a súa conta"],"Please enter the XMPP provider to register with:":["Por favor, introduza o provedor XMPP no que rexistrarse:"],"Already have a chat account?":["Xa ten unha conta?"],"Log in here":["Conéctese aquí"],"Account Registration:":["Rexistro de conta:"],"Register":["Rexistrar"],"Choose a different provider":["Escoller un provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Agarde, estamos solicitando o formulario de rexistro…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["Cortouse a comunicación, intentando recuperala."],"An error occurred while connecting to the chat server.":["Algo fallou ao conectar co servidor da conversa."],"Your XMPP address and/or password is incorrect. Please try again.":["O teu enderezo XMPP e/ou contrasinal son incorrectos. Inténtao de novo."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Lamentámolo, non podemos conectar co servidor XMPP con dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor XMPP non ofrece un mecanismo de autenticación soportado"],"Undecryptable OMEMO message":["Mensaxe OMEMO non descifrable"],"Sorry, could not determine upload URL.":["Lamentámolo, non se puido determinar a URL de subida."],"Sorry, could not determine file upload URL.":["Lamentámolo, non se determinou a URL de subida do ficheiro."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Lamentámolo, non se subeu o ficheiro. A resposta do servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Lamentámolo, non se subeu o seu ficheiro."],"You\'re not allowed to retract your message.":["Non podes retractar desta mensaxe."],"Sorry, an error occurred while trying to retract your message.":["Lamentámolo, algo fallou ó intentar retractar a mensaxe."],"You\'re not allowed to send a message.":["Non tes permiso para enviar unha mensaxe."],"Sorry, an error occurred while trying to send your message.":["Lamentámolo, algo fallou ó intentar enviar a mensaxe."],"Sorry, looks like file upload is not supported by your server.":["Lamentámolo, semella que o servidor non soporta a subida de ficheiros."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamaño do ficheiro, %1$s, excede o límite establecido no servidor, que é %2$s."],"Smileys and emotions":["Sorrisos e emocións"],"People":["Xente"],"Activities":["Actividades"],"Travel":["Viaxar"],"Objects":["Obxetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":["Bandeiras"],"Stickers":["Pegatinas"],"This groupchat is not anonymous":["Esta conversa en grupo non é anónima"],"This groupchat now shows unavailable members":["Esta conversa en grupo agora mostra membros non dispoñibles"],"This groupchat does not show unavailable members":["Esta conversa en grupo non mostra membros non dispoñibles"],"The groupchat configuration has changed":["A configuración da conversa en grupo cambiou"],"Groupchat logging is now enabled":["O rexistro da conversa de grupo está activado"],"Groupchat logging is now disabled":["O rexistro da conversa de grupo está desactivado"],"This groupchat is now no longer anonymous":["Esta conversa en grupo xa non é anónima"],"This groupchat is now semi-anonymous":["Esta conversa en grupo agora é semi-anónima"],"This groupchat is now fully-anonymous":["Esta conversa en grupo agora é totalmente anónima"],"A new groupchat has been created":["Creouse unha nova conversa en grupo"],"Your nickname has been automatically set to %1$s":["O seu alcume estableceuse automáticamente como %1$s"],"Your nickname has been changed to %1$s":["O seu alcume foi cambiado a %1$s"],"You have been banned from this groupchat":["Excluíronte desta conversa en grupo"],"You have exited this groupchat due to a technical problem":["Saíches desta conversa en grupo debido a un problema técnico"],"You have been kicked from this groupchat":["Expulsáronte desta conversa en grupo"],"You have been removed from this groupchat because of an affiliation change":["Sacáronte desta conversa en grupo debido a un cambio na afiliación"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Elimináronte desta conversa en grupo porque o grupo cambiou a só-membros e ti non es membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Elimináronte da conversa en grupo porque o servicio de hospedaxe foi apagado"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Non se enviou a retracción porque non estás presente na conversa en grupo."],"Your message was not delivered because you weren\'t allowed to send it.":["Non se enviou a mensaxe porque non tes permiso para enviala."],"Your message was not delivered because you\'re not present in the groupchat.":["Non se entregou a mensaxe porque non está presente en este grupo."],"A timeout happened while while trying to retract your message.":["Caducou a solicitude mentras intentabas retractar a mensaxe."],"You\'re not allowed to register yourself in this groupchat.":["Non podes rexistrarte a ti mesmo nesta conversa en grupo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Non ten permiso para rexistrarse na conversa en grupo porque é só para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Non pode rexistrar o seu usuario en este grupo, non soporta o rexistro."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Non pode rexistrar o seu usuario na conversa, os datos proporcionados non son válidos."],"Topic set by %1$s":["Asunto establecido por %1$s"],"Topic cleared by %1$s":["Asunto eliminado por %1$s"],"%1$s has been banned by %2$s":["%1$s foi excluído por %2$s"],"%1$s has been banned":["%1$s foi excluído"],"%1$s\'s nickname has changed":["Cambiou o alcume de %1$s"],"%1$s has been kicked out by %2$s":["%1$s foi expulsado por %2$s"],"%1$s has been kicked out":["%1$s foi expulsado"],"%1$s has been removed because of an affiliation change":["%1$s foi eliminado debido a un cambio de afiliación"],"%1$s has been removed for not being a member":["%1$s foi eliminado por non ser membro"],"%1$s is no longer an admin of this groupchat":["%1$s xa non é admin de esta conversa en grupo"],"%1$s is no longer an owner of this groupchat":["%1$s xa non é dono de esta conversa en grupo"],"%1$s is no longer banned from this groupchat":["%1$s xa non está excluída de esta conversa en grupo"],"%1$s is no longer a member of this groupchat":["%1$s xa non é membro de este grupo"],"%1$s is now a member of this groupchat":["%1$s é un membro de este grupo"],"%1$s is now an %2$s of this groupchat":["%1$s é o %2$s de esta conversa en grupo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O alcume escollido está reservado ou en uso, por favor escolla outro."],"Password incorrect":["Contrasinal incorrecto"],"You are not on the member list of this groupchat.":["Non es membro de esta conversa en grupo."],"You have been banned from this groupchat.":["Foches excluído desta conversa en grupo."],"You are not allowed to create new groupchats.":["Non te permiso para crear novas conversas en grupo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["O seu alcume non segue as normas de esta conversa en grupo."],"This groupchat does not (yet) exist.":["Esta conversa en grupo non existe (aínda)."],"This groupchat has reached its maximum number of participants.":["Esta conversa en grupo alcanzou o número máximo de participantes."],"Remote server not found":["Non se atopou o servidor remoto"],"The explanation given is: \\"%1$s\\".":["A explicación dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidouna a unirse a conversa en grupo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidouna a unirse a conversa en grupo: %2$s, e deulle esta razón: \\"%3$s\\""],"Error":["Fallo"],"Sorry, something went wrong while trying to save your bookmark.":["Lamentámolo, algo fallou ao intentar gardar o marcador."],"Timeout Error":["Fallo de caducidade"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["O servidor non devolveu os teus marcadores no tempo estipulado. Podes recargar a páxina para solicitalos de novo."],"Timeout while trying to fetch archived messages.":["Caducou a solicitude mentras se obtiñan as mensaxes arquivadas."],"An error occurred while querying for archived messages.":["Algo fallou mentras se obtiñan as mensaxes arquivadas."],"My contacts":["Os meus contactos"],"Pending contacts":["Contactos pendentes"],"Contact requests":["Solicitudes de contacto"],"Ungrouped":["Sen agrupar"],"New messages":["Novas mensaxes"],"Sorry, there was an error while trying to add %1$s as a contact.":["Lamentámolo, algo fallou ao intentar engadir a %1$s como contacto."],"This client does not allow presence subscriptions":["Este cliente non permite suscricións de presencia"],"Click to hide these contacts":["Pulse para ocultar estos contactos"],"Unbookmark this groupchat":["Desmarcar esta conversa de grupo"],"Click to open this groupchat":["Pulse para abrir esta conversa en grupo"],"Click to toggle the bookmarks list":["Pulse para mostrar a lista de marcadores"],"Bookmarks":["Marcadores"],"Bookmark this groupchat":["Marcar esta conversa de grupo"],"Would you like this groupchat to be automatically joined upon startup?":["Desexaría conectarse automáticamente ao inicio a esta conversa de grupo?"],"The name for this bookmark:":["O nome para este marcador:"],"What should your nickname for this groupchat be?":["Qué alcume desexa ter para esta conversa en grupo?"],"Save":["Gardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Realmente desexa eliminar o marcador \\"%1$s\\"?"],"Unbookmark":["Eliminar marcador"],"Bookmark":["Marcar"],"Close":["Pechar"],"OK":["OK"],"Image: ":["Imaxe: "],"Download audio file \\"%1$s\\"":["Descargar ficheiro de audio \\"%1$s\\""],"Download image file \\"%1$s\\"":["Descargar imaxe \\"%1$s\\""],"Download file \\"%1$s\\"":["Descargar ficheiro \\"%1$s\\""],"Cancel Editing":["Cancelar a edición"],"Edit":["Editar"],"Retract":["Retractar"],"Message versions":["Versións da mensaxe"],"Retry":["Reintentar"],"Uploading file:":["Subindo ficheiro:"],"%1$s has removed this message":["%1$s foi eliminou esta mensaxe"],"This message has been edited":["Esta mensaxe foi editada"],"Show more":["Mostrar máis"],"Show less":["Mostrar menos"],"No message history available.":["Non está dispoñible o historial de mensaxes."],"Search results":["Resultados da busca"],"Search":["Buscar"],"Insert emojis":["Inserir emojis"],"Send the message":["Enviar a mensaxe"],"Start a call":["Iniciar chamada"],"Message characters remaining":["Caracteres restantes"],"Hide participants":["Agochar participantes"],"Show participants":["Mostrar participantes"],"Choose a file to send":["Escolla o ficheiro a enviar"],"Click to write as a normal (non-spoiler) message":["Preme para escribir unha mensaxe normal (non spoiler)"],"Click to write your message as a spoiler":["Preme para escribir unha mensaxe tipo spoiler"],"The User\'s Profile Image":["Imaxe de perfil do usuario"],"Trusted":["De confianza"],"Untrusted":["Non confiable"],"OMEMO Fingerprints":["Pegadas dixitais OMEMO"],"No OMEMO-enabled devices found":["Non se atoparon dispositivos con OMEMO activado"],"Remove as contact":["Eliminar como contacto"],"XMPP Address":["Enderezo XMPP"],"Email":["Correo-e"],"Full Name":["Nome completo"],"Nickname":["Alcume"],"Refresh":["Actualizar"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s está a escribir"],"%1$s has stopped typing":["%1$s deixou de escribir"],"%1$s has gone away":["%1$s marchou"],"Remove messages":["Eliminar mensaxes"],"Close this chat":["Pechar esta conversa"],"Write in the third person":["Escribir en terceira persoa"],"Show this menu":["Mostrar este menú"],"Hidden message":["Mensaxes ocultas"],"Message":["Mensaxe"],"Optional hint":["Truco opcional"],"You have unread messages":["Ten mensaxes sen ler"],"Details":["Detalles"],"See more information about this person":["Mostrar máis información sobre esta persoa"],"Close and end this conversation":["Pechar e saír da conversa"],"Sorry, the connection has been lost, and your message could not be sent":["Mágoa!, perdeuse a conexión, a mensaxe non se puido enviar"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Ten en conta que outros clientes XMPP/Jabber (e servidores) poderían non ter soporte para retirar mensaxes polo que esta mensaxe podería non ser eliminada deles."],"Are you sure you want to retract this message?":["Seguro que queres eliminar esta mensaxe?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Ten unha mensaxe sen enviar que perderá se segue adiante. Está seguro?"],"Are you sure you want to clear the messages from this conversation?":["Seguro que desexa eliminar as mensaxes de esta conversa?"],"%1$s has gone offline":["%1$s desconectouse"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está en liña"],"Sorry, something went wrong while trying to refresh":["Lamentámolo, algo fallou ao intentar actualizar"],"Are you sure you want to remove this contact?":["Seguro que quere eliminar este contacto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Lamentámolo, algo fallou ao intentar eliminar o contacto %1$s."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para mellorar o rendemento, almacenamos os teus datos no navegador. Desmarca esta opción se se trata dunha computadora pública para borrar os datos cando te desconectes. É importante que te desconectes de xeito explícito, se non non se borrarán os datos. O cifrado OMEMO non está dispoñible cando estás a utilizar un dispositivo non confiable."],"This is a trusted device":["Este é un dispositivo de confianza"],"Password":["Contrasinal"],"Create an account":["Crear unha conta"],"Don\'t have a chat account?":["Non ten conta para conversar?"],"Log in":["Conectar"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Pulse aquí para conectar anónimamente"],"Username":["Nome de usuaria"],"user@domain":["usuaria@dominio"],"Please enter a valid XMPP address":["Por favor, introduza un enderezo XMPP válido"],"Chat Contacts":["Conversar con contactos"],"Toggle chat":["Iniciar chat"],"Click to restore this chat":["Pulse para restaurar esta conversa"],"Minimized":["Minimizada"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar esta conversa"],"Minimize this groupchat":["Minimizar esta conversa en grupo"],"This user is a moderator.":["Esta usuaria é moderador."],"This user can send messages in this groupchat.":["Esta usuaria pode enviar mensaxes a conversa en grupo."],"This user can NOT send messages in this groupchat.":["Esta usuaria NON pode enviar mensaxes a conversa en grupo."],"Owner":["Propietario"],"Admin":["Admin"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Pulse para mencionar a %1$s na súa mensaxe."],"Participants":["Participantes"],"This field is required":["Este campo é requerido"],"Join":["Unirse"],"Enter a new Groupchat":["Introduza unha nova Conversa en grupo"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Nome da conversa en grupo"],"Groupchat address":["Enderezo da conversa en grupo"],"Groupchat id is invalid.":["O id da conversa en grupo non é válido."],"Invite":["Convidar"],"Invite someone to this groupchat":["Convida a alguén a esta conversa en grupo"],"user@example.org":["nome@exemplo.org"],"Optional reason for the invitation":["Razón para o convite (optativo)"],"Show groupchats":["Mostra conversas en grupo"],"Server address":["Enderezo do servidor"],"Show more information on this groupchat":["Mostrar máis información sobre esta conversa en grupo"],"Query for Groupchats":["Busque Conversas en grupo"],"Description:":["Descrición:"],"Groupchat Address (JID):":["Enderezo da conversa en grupo (JID):"],"Participants:":["Partícipes:"],"Features:":["Características:"],"Requires authentication":["Require autenticación"],"Hidden":["Oculto"],"Requires an invitation":["Require convite"],"Moderated":["Moderada"],"Non-anonymous":["Non anónima"],"Open":["Aberta"],"Permanent":["Permanente"],"Public":["Pública"],"Semi-anonymous":["Semi anónima"],"Temporary":["Temporal"],"Unmoderated":["Non moderada"],"conference.example.org":["conferencia.exemplo.org"],"Groupchats found":["Atopáronse conversas en grupo"],"No groupchats found":["Non se atoparon conversas en grupo"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Os moderadores son usuarios con privilexios que poden cambiar os roles de outros usuarios (excepto os de administradores e donos)."],"The default role, implies that you can read and write messages.":["O rol por omisión implica que pode ler e escribir mensaxes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Os visitantes non poden escribir mensaxes nunha sala multiusuario moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Dono é a maior afiliación. Os donos poden modificar os roles e afiliación dos outros usuarios."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin é o segundo maior nivel de afiliación. Admins poden modificar roles e afiliación de todos os usuarios menos dos donos."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para excluír un usuario, daslle a afiliación de \\"forasteiro\\"."],"Change role":["Cambiar rol"],"New Role":["Novo rol"],"Reason":["Razón"],"Change affiliation":["Cambiar a afiliación"],"New affiliation":["Nova afiliación"],"Affiliation":["Afiliación"],"Moderator Tools":["Ferramentas de moderador"],"No users with that affiliation found.":["Non se atoparon usuarios con esa afiliación."],"No users with that role found.":["Non se atoparon usuarios con ese rol."],"Type here to filter the search results":["Escribe aquí para filtrar os resultados da busca"],"Show users":["Mostrar usuarios"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Os roles asígnanse ás usuarias para outorgar ou denegarlles certos permisos nunha conversa multiusuario. Asígnanse de xeito implícito ou explícito como parte da filiación. Un rol que non é debido a filiación só é valido durante a duración da sesión do usuario."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Unha afiliación é un título de alto nivel que normalmente implica certo rol e que outorga certos privilexios e responsabilidades. Por exemplo, admins e donos teñen rol de moderador de xeito automático."],"Timeout error while trying to set the affiliation":["Fallo de caducidade ó intentar establecer a afiliación"],"Sorry, you\'re not allowed to make that change":["Sentímolo, mais non tes permiso para realizar ese cambio"],"Sorry, something went wrong while trying to set the affiliation":["Lamentámolo, algo fallou ao establecer a afiliación"],"Affiliation changed":["Cambiou a afiliación"],"Role changed":["Rol cambiado"],"You\'re not allowed to make that change":["Non tes permiso para realizar ese cambio"],"Sorry, something went wrong while trying to set the role":["Lamentámolo, algo fallou ao intentar establer o rol"],"Topic":["Asunto"],"Topic author":["Autor do asunto"],"Groupchat address (JID)":["Enderezo da conversa en grupo (JID)"],"Message archiving":["Arquivado de mensaxes"],"Messages are archived on the server":["As mensaxes gárdanse no servidor"],"Description":["Descrición"],"Features":["Características"],"This groupchat is not publicly searchable":["Esta conversa en grupo non está en listas públicas"],"This groupchat is restricted to members only":["Esta conversa en grupo é accesible só para membros"],"Members only":["Só para membros"],"Participants entering this groupchat need to request permission to write":["Os participantes da conversa deben solicitar permiso para escribir"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Esta conversa en grupo non solicita contrasinal para entrar"],"No password required":["Sen protección de contrasinal"],"Not anonymous":["Non anónima"],"All other groupchat participants can see your XMPP address":["Calquera outro participante da conversa pode ver o seu enderezo XMPP"],"Not moderated":["Non moderada"],"Participants entering this groupchat can write right away":["Os participantes poden escribir libremente"],"Online users":["Usuarias conectadas"],"Anyone can join this groupchat":["Calquera pode unirse a esta conversa en grupo"],"This groupchat requires a password before entry":["Esta conversa en grupo precisa un contrasinal para entrar"],"Password protected":["Protexido por contrasinal"],"Persistent":["Perenne"],"This groupchat persists even if it\'s unoccupied":["Esta conversa en grupo permanece incluso si está baldeira"],"Only moderators can see your XMPP address":["Só os moderadores poden ver o seu enderezo XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversa en grupo desaparecerá unha vez saia a última persoa"],"This groupchat is publicly searchable":["Esta conversa en grupo está en listas públicas"],"Groupchat info for %1$s":["Info da conversa en grupo para %1$s"],"You\'re not allowed to send messages in this room":["Non ten permiso para enviar mensaxes a esta sala"],"The conversation has moved. Click below to enter.":["Moveuse a conversa. Pulse abaixo para entrar."],"This groupchat no longer exists":["Esta conversa en grupo xa non existe"],"Hide the groupchat topic":["Agochar o asunto da conversa en grupo"],"This groupchat is bookmarked":["Esta conversa está nos marcadores"],"Enter groupchat":["Entrar na conversa en grupo"],"Choose a nickname to enter":["Escolle un alcume para entrar"],"Please choose your nickname":["Por favor, escolla o seu alcume"],"This groupchat requires a password":["Esta conversa en grupo precisa de un contrasinal"],"Password: ":["Contrasinal: "],"Submit":["Enviar"],"%1$s has entered the groupchat":["%1$s entrou na conversa en grupo"],"%1$s has left the groupchat":["%1$s deixou a conversa en grupo"],"%1$s is now a moderator":["%1$s agora é moderador"],"%1$s is no longer a moderator":["%1$s xa non é moderador"],"%1$s has been given a voice":["%1$s ten a palabra"],"%1$s has been muted":["%1$s foi acalado"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s está escribindo"],"%1$s have stopped typing":["%1$s deixou de escribir"],"%1$s have gone away":["%1$s marchou"],"%1$s have entered the groupchat":["%1$s entrou na conversa en grupo"],"%1$s have left the groupchat":["%1$s deixou a conversa en grupo"],"%1$s are now moderators":["%1$s agora son moderadores"],"%1$s are no longer moderators":["%1$s xa non son moderadores"],"%1$s have been given voices":["Concedéronlle a palabra a %1$s"],"%1$s have been muted":["%1$s foron acaladas"],"Change user\'s affiliation to admin":["Cambiar a afiliación da usuaria a admin"],"Ban user by changing their affiliation to outcast":["Prohibir usuario cambiando a filiación na sala"],"Clear the chat area":["Limpar o área de conversa"],"Close this groupchat":["Pechar esta conversa en grupo"],"Change user role to participant":["Cambiar o rol da usuaria a participante"],"Remove this groupchat":["Eliminar esta conversa en grupo"],"Kick user from groupchat":["Expulsar a usuaria da conversa en grupo"],"Write in 3rd person":["Escribir en terceira persoa"],"Grant membership to a user":["Conceder a membresía a unha usuaria"],"Opens up the moderator tools GUI":["Abre a interface gráfica de ferramentas de moderación"],"Remove user\'s ability to post messages":["Quitarlle a posibilidade de publicar mensaxes a usuaria"],"Change your nickname":["Cambiar o seu alcume"],"Grant moderator role to user":["Conceder rol de moderador a usuaria"],"Grant ownership of this groupchat":["Conceder a propiedade de esta conversa en grupo"],"Register your nickname":["Rexistrar o seu alcume"],"Revoke the user\'s current affiliation":["Repudiar a filiación actual do usuario"],"Set groupchat subject":["Establecer o asunto da conversa en grupo"],"Set groupchat subject (alias for /subject)":["Establecer o asunto da conversa (alias para /subject)"],"Allow muted user to post messages":["Permitir as usuarias acaladas publicar mensaxes"],"You are about to retract this message.":["Vas a eliminar esta mensaxe."],"You may optionally include a message, explaining the reason for the retraction.":["De xeito opcional poderías deixar un aviso, explicando a razón de tela eliminado."],"Message Retraction":["Eliminación da mensaxe"],"Optional reason":["Razón (optativo)"],"Sorry, you\'re not allowed to retract this message":["Desculpa, pero non tes permiso para borrar esta mensaxe"],"A timeout occurred while trying to retract the message":["Caducou a solicitude de borrado da mensaxe"],"Sorry, you\'re not allowed to retract this message.":["Desculpa, pero non tes permiso para borrar esta mensaxe."],"Show more information about this groupchat":["Mostrar máis información sobre esta conversa en grupo"],"Configure":["Configurar"],"Configure this groupchat":["Configurar a conversa en grupo"],"Invite someone to join this groupchat":["Convida a alguén a unirse a conversa en grupo"],"Show topic":["Mostrar o tema"],"Hide topic":["Agochar o tema"],"Show the topic message in the heading":["Mostrar o tema da conversa na cabeceira"],"Hide the topic in the heading":["Agochar o tema da conversa na cabeceira"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar esta conversa en grupo"],"Destroy":["Destruír"],"Leave":["Saír"],"Leave and close this groupchat":["Deixar e pechar esta conversa en grupo"],"Are you sure you want to leave this groupchat?":["Seguro que queres deixar a conversa en grupo?"],"Hide the list of participants":["Agochar a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Prohibido: non ten os permisos necesarios para facer iso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Prohibido: non ten a afiliación necesaria para facer iso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fallo: O comando \\"%1$s\\" precisa dous argumentos, o alcume do usuario e opcionalmente unha razón."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fallo: non se atopou ao participante da conversa con esos parámetros"],"Error: found multiple groupchat participant based on your arguments":["Fallo: atopáronse varios participantes con esos parámetros"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Non se atopou un participante con ese alcume. Podería ter saído da conversa."],"Sorry, an error happened while running the command.":["Lamentámolo, algo fallou ao executar o comando."],"Check your browser\'s developer console for details.":["Mira na consola de desenvolvedor do navegador para máis detalles."],"Are you sure you want to destroy this groupchat?":["Seguro que queres desbotar a conversa en grupo?"],"Please enter the XMPP address of this groupchat to confirm":["Por favor, escribe o provedor XMPP desta conversa en grupo para confirmar"],"name@example.org":["nome@exemplo.org"],"Optional reason for destroying this groupchat":["Razón para eliminar esta conversa en grupo (optativo)"],"Optional XMPP address for a new groupchat that replaces this one":["Enderezo XMPP optativo para a nova conversa en grupo que substitúe a esta"],"replacement@example.org":["substituta@exemplo.org"],"Your nickname is \\"%1$s\\"":["O seu alcume é \\"%1$s\\""],"Error: invalid number of arguments":["Fallo: número de argumentos non válido"],"This action was done by %1$s.":["Esta acción foi feita por %1$s."],"The reason given is: \\"%1$s\\".":["A razón dada é: \\"%1$s\\"."],"Groupchats":["Conversas en grupo"],"Add a new groupchat":["Engadir unha nova conversa en grupo"],"Query for groupchats":["Buscar conversas en grupo"],"Sorry, an error occurred while trying to submit the config form.":["Lamentámolo, algo fallou ao intentar enviar o formulario de configuración."],"Close these announcements":["Pechar estos anuncios"],"Announcements":["Anuncios"],"Click to open this server message":["Preme para abrir a esta mensaxe do servidor"],"Notification from %1$s":["Notificación de %1$s"],"%1$s says":["%1$s di"],"Encrypted message received":["Recibida unha mensaxe cifrada"],"has gone offline":["non está en liña"],"has gone away":["marchou"],"is busy":["está ocupado"],"has come online":["voltou a estar en liña"],"wants to be your contact":["quere ser un contacto seu"],"Hide":["Agochar"],"Execute":["Executar"],"On which entity do you want to run commands?":["¿En qué entidade queres executar os comandos?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Certos servizos e entidades XMPP permítenlle a usuarias autorizadas executar comandos a medida neles."],"Commands found":["Comandos atopados"],"List available commands":["Lista de comandos dispoñibles"],"No commands found":["Non se atoparon comandos"],"Sorry, an error occurred while looking for commands on that entity.":["Lamentámolo, algo fallou ó buscar os comandos nesa entidade."],"The specified entity doesn\'t support ad-hoc commands":["A entidade indicada non soporta os comandos a medida"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Lamentámolo, algo fallou ao executar o comando. Mira os detalles na consola de desenvolvedora"],"About":["Acerca de"],"Commands":["Comandos"],"Settings":["Axustes"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Cliente de %1$s código aberto %2$s para conversas XMPP proporcionado por %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$sTradúzao%2$s para o seu idioma"],"Log out":["Desconectar"],"Click to change your chat status":["Pulse para cambiar o estado da conversa"],"Show details about this chat client":["Mostrar detalles sobre esta conversa en grupo"],"Your avatar image":["A súa imaxe avatar"],"Checkbox for selecting the following fingerprint":["Marque para escoller a seguinte pegada dixital"],"Device without a fingerprint":["Dispositivo sen pegada dixital"],"Checkbox for selecting the following device":["Marca para escoller o seguinte dispositivo"],"Other OMEMO-enabled devices":["Outros dispositivos con OMEMO habilitado"],"Checkbox to select fingerprints of all other OMEMO devices":["Marque para seleccionar as pegadas dixitais OMEMO de todos os dispositivos"],"Remove checked devices and close":["Eliminar os dispositivos marcados e pechar"],"Select all":["Escoller todo"],"This device\'s OMEMO fingerprint":["Pegada dixital OMEMO de este dispositivo"],"Generate new keys and fingerprint":["Xerar novas chaves e pegada dixital"],"Your Profile":["O seu Perfil"],"XMPP Address (JID)":["Enderezo XMPP (JID)"],"Save and close":["Gardar e pechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilice comas para separar múltiples roles. Os seus roles móstranse xunto ao seu nome nas mensaxes."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Lamentámolo, algo fallou ao intentar gardar os datos do seu perfil."],"You can check your browser\'s developer console for any error output.":["Pode mirar na consola de desenvolvemento do navegador detalles do fallo."],"Away":["Fóra"],"Busy":["Ocupado"],"Custom status":["Estado personalizado"],"Offline":["Desconectado"],"Online":["Conectado"],"Away for long":["Fóra hai tempo"],"Change chat status":["Cambiar estado da conversa"],"Personal status message":["Mensaxe de estado persoal"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Seguro que quere desconectar?"],"online":["en liña"],"busy":["ocupado"],"away for long":["fóra hai tempo"],"away":["fóra"],"offline":["desconectado"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Lamentámolo, non se descifrou a mensaxe OMEMO debido a un fallo."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Lamentámolo, non se descifrou a mensaxe OMEMO porque non temos o JID desta usuaria."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s non parece ter un cliente con soporte OMEMO. O cifrado da conversa no será posible en este grupo."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Non se puido utilizar o cifrado extremo-a-extremo nesta sala, ou a conversa ten certo anonimato ou non todas as participantes soportan OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Non se puido utilizar o cifrado extremo-a-extremo porque %1$s utilizar un cliente que non soporta OMEMO."],"Messages are being sent in plaintext":["As mensaxes estanse a enviar en texto plano"],"Messages are sent encrypted":["As mensaxes envíanse cifradas"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Esta conversa de grupo ten que ser só para membros e non-anónima para poder usar mensaxes cifradas con OMEMO"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Lamentámolo, non podemos enviar unha mensaxe cifrada xa que %1$s require que te subscribas a súa presencia para poder ver a súa información OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Lamentámolo, non podemos enviar unha mensaxe cifrada porque non atopamos o servidor remoto de %1$s"],"Unable to send an encrypted message due to an unexpected error.":["Lamentámolo, non se enviou a mensaxe cifrada debido a un fallo."],"Sorry, an error occurred while trying to remove the devices.":["Lamentámolo, algo fallou ao intentar eliminar os dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Realmente quere xerar unhas novas chaves OMEMO? Esto eliminará as antigas e todas as mensaxes anteriores cifradas con elas non se poderán ler neste dispositivo."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Lamentámolo, non se atoparon dispositivos aos que enviar unha mensaxe OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta mensaxe está cifrada con OMEMO e o seu cliente non semella soportalo. Atope máis información en https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Obter formulario de rexistro"],"Tip: A list of public XMPP providers is available":["Tip: está dispoñible unha lista de servidores XMPP públicos"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Lamentámolo, non puidemos conectar co provedor escollido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Lamentámolo, o provedor escollido non soporta o rexistro directo. Por favor, inténteo con outro provedor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo foi mal ao intentar conectar con \\"%1$s\\". Seguro que existe?"],"Now logging you in":["Conectandoo"],"Registered successfully":["Rexistrado correctamente"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rexeitou o intento de rexistro. Por favor, comprobe a corrección dos datos introducidos."],"Leave this groupchat":["Deixar esta conversa en grupo"],"Click to toggle the list of open groupchats":["Pulse para activar a lista de conversas en grupo abertas"],"Open Groupchats":["Abrir conversas en grupo"],"Are you sure you want to leave the groupchat %1$s?":["Seguro que quere deixar a conversa en grupo %1$s?"],"Add":["Engadir"],"Add a Contact":["Engadir un contacto"],"This contact is busy":["Este contacto está ocupado"],"This contact is online":["Este contacto está en liña"],"This contact is offline":["Este contacto está desconectado"],"This contact is unavailable":["Este contacto non está dispoñible"],"This contact is away for an extended period":["Este contacto hai tempo que non está conectado"],"This contact is away":["Este contacto está fóra"],"Contact name":["Nome do contacto"],"Optional nickname":["Alcume opcional"],"Sorry, could not find a contact with that name":["Lamentámolo, non atopamos un contacto con ese nome"],"This contact has already been added":["Este contacto xa foi engadido"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contacto"],"Filter by group name":["Filtrar por nome de grupo"],"Filter by status":["Filtrar por estado"],"Any":["Calquera"],"Unread":["Sen ler"],"Chatty":["Falador"],"Extended Away":["Fóra por longo tempo"],"Click to remove %1$s as a contact":["Pulse para eliminar %1$s como contacto"],"Click to accept the contact request from %1$s":["Pulse para aceptar a solicitude de contacto de %1$s"],"Click to decline the contact request from %1$s":["Pulse para rexeitar a solicitude de contacto de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Preme para conversar con %1$s (enderezo XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Seguro que desexa rexeitar a solicitude do contacto?"],"Contacts":["Contactos"],"Add a contact":["Engadir un contacto"],"Re-sync your contacts":["Sincronizar contactos"]}}}')}}]);
 //# sourceMappingURL=gl-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/he-LC_MESSAGES-converse-po.js b/src/conversejs/locales/he-LC_MESSAGES-converse-po.js
index f584d4d638779a6b91a12015e783756f44127c82..8122b0d3596e6487617b6261199597b50b66db1b 100644
--- a/src/conversejs/locales/he-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/he-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[154],{432:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=(n != 1);","lang":"he"},"Create your account":["יצירת חשבון משלך"],"Please enter the XMPP provider to register with:":["נא להקליד את ספק ה־XMPP להרשמה מולו:"],"Already have a chat account?":["כבר יש לך חשבון להתכתבות?"],"Log in here":["כניסה מכאן"],"Account Registration:":["רישום חשבון:"],"Register":["הירשם"],"Choose a different provider":["נא לבחור בספק אחר"],"Hold tight, we\'re fetching the registration form…":["להחזיק חזק, אנחנו מביאים את טופס ההרשמה…"],"Cancel":["ביטול"],"The connection has dropped, attempting to reconnect.":["החיבור נקטע, מתבצע ניסיון חיבור מחדש."],"An error occurred while connecting to the chat server.":["אירעה שגיאה במהלך ההתחברות לשרת הצ׳אט."],"Your XMPP address and/or password is incorrect. Please try again.":["כתובת ה־XMPP ו/או הססמה שגויים. נא לנסות שוב."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["לא הצלחנו להתחבר למארח ה־XMPP עם שם המתחם: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["שרת ה־XMPP לא הציע מנגנון אימות נתמך"],"Sorry, could not determine upload URL.":["לא ניתן לפענח את כתובת ההעלאה, עמך הסליחה."],"Sorry, could not determine file upload URL.":["לא ניתן לפענח את כתובת העלאת הקבצים, עמך הסליחה."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["העלאת הקובץ שלך לא הצליחה. תגובת השרת היא: „%1$s”, עמך הסליחה"],"Sorry, could not succesfully upload your file.":["העלאת הקובץ שלך לא הצליחה, עמך הסליחה."],"Sorry, looks like file upload is not supported by your server.":["נראה כי השרת שלך אינו תומך בהעלאת קבצים, עמך הסליחה."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["גודל הקובץ שלך, %1$s, חורג מהגודל המרבי שמרשה השרת שהוא %2$s."],"Smileys and emotions":["חייכנים ורגשונים"],"People":["אנשים"],"Activities":["פעילויות"],"Travel":["טיול"],"Objects":["חפצים"],"Animals and nature":["חיות וטבע"],"Food and drink":["מזון ושתייה"],"Symbols":["סמלים"],"Flags":["דגלים"],"Stickers":["מדבקות"],"This groupchat is not anonymous":["התכתבות קבוצתית זו זה אינה אלמונית"],"This groupchat now shows unavailable members":["התכתבות קבוצתית זו מציגה כעת חברים שאינם זמינים"],"This groupchat does not show unavailable members":["התכתבות קבוצתית זו אינה מציגה חברים שאינם זמינים"],"The groupchat configuration has changed":["הגדרות ההתכתבות הקבוצתית הזאת נערכו"],"Groupchat logging is now enabled":["תיעוד ההתכתבות הקבוצתית פעיל כעת"],"Groupchat logging is now disabled":["תיעוד ההתכתבות הקבוצתית מושבת כעת"],"This groupchat is now no longer anonymous":["ההתכתבות הקבוצתית הזאת אינה אלמונית יותר"],"This groupchat is now semi-anonymous":["ההתכתבות הקבוצתית הזאת היא אלמונית למחצה כעת"],"This groupchat is now fully-anonymous":["התכתבות קבוצתית זו הנה אלמונית לחלוטין כעת"],"A new groupchat has been created":["נוצרה התכתבות קבוצתית חדשה"],"Your nickname has been automatically set to %1$s":["הכינוי שלך הוגדר לכדי %1$s אוטומטית"],"Your nickname has been changed to %1$s":["הכינוי שלך נערך לכדי %1$s"],"You have been banned from this groupchat":["גישתך להתכתבות הקבוצתית הזו נחסמה"],"You have been kicked from this groupchat":["נזרקת מההתכתבות הקבוצתית הזאת"],"You have been removed from this groupchat because of an affiliation change":["הוסרת מההתכתבות הקבוצתית הזו עקב שינוי שיוך"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["הוסרת מההתכתבות הקבוצתית הזאת כיוון שההשתתפות מעתה מיועדת לחברים בלבד ולך אין חברות"],"You have been removed from this groupchat because the service hosting it is being shut down":["הוסרת מההתכתבות הקבוצתית הזאת כיוון שאחסון השירות בהליכי כיבוי"],"Your message was not delivered because you weren\'t allowed to send it.":["ההודעה שלך לא נשלחה כיוון שאין לך הרשאה לשלוח אותה."],"Your message was not delivered because you\'re not present in the groupchat.":["ההודעה שלך לא נשלחה כיוון שאינך בהתכתבות קבוצתית זו."],"You\'re not allowed to register yourself in this groupchat.":["אין לך הרשאה להירשם עצמאית להתכתבות קבוצתית זו."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["אין לך הרשאה להירשם להתכתבות קבוצתית זו כי היא מיועדת לחברים בלבד."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["לא ניתן לרשום את הכינוי לך בהתכתבות הקבוצתית הזאת, אין לה תמיכה בהרשמה."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["אין אפשרות לרשום את הכינוי שלך בהתכתבות הקבוצתית הזו, תצורת הנתונים שסופקה שגויה."],"Topic set by %1$s":["נושא התכתבות קבוצתית זו הוגדר על ידי %1$s"],"Topic cleared by %1$s":["נושא התכתבות קבוצתית זו נמחק על ידי %1$s"],"%1$s has been banned by %2$s":["הגישה של %1$s נחסמה על ידי %2$s"],"%1$s has been banned":["הגישה של %1$s נחסמה"],"%1$s\'s nickname has changed":["הכינוי של %1$s הוחלף"],"%1$s has been kicked out by %2$s":["%1$s נבעט/ה על ידי %2$s"],"%1$s has been kicked out":["%1$s נבעט/ה"],"%1$s has been removed because of an affiliation change":["%1$s הוסר/ה עקב שינוי שיוך"],"%1$s has been removed for not being a member":["%1$s הוסר/ה עקב העדר מעמד חברות"],"%1$s is no longer an admin of this groupchat":["התפקיד הניהולי של %1$s הוסר עבור ההתכתבות הקבוצתית הזו"],"%1$s is no longer an owner of this groupchat":["הבעלות של %1$s על ההתכתבות הקבוצתית הזו אינה תקפה עוד"],"%1$s is no longer banned from this groupchat":["הגישה של %1$s להתכתבות הקבוצתית הזו אינה חסומה יותר"],"%1$s is now an %2$s of this groupchat":["התפקיד של %1$s בהתכתבות הקבוצתית הזו הוא עכשיו %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["הכינוי שבחרת שמור או בשימוש, נא לבחור באחד אחר."],"Password incorrect":["הססמה שגויה"],"You are not on the member list of this groupchat.":["אינך ברשימת החברים של התכתבות קבוצתית זו."],"You have been banned from this groupchat.":["גישתך להתכתבות קבוצתית זו נחסמה."],"You are not allowed to create new groupchats.":["אין לך הרשאה ליצור התכתבויות קבוצתיות חדשות."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["הכינוי שלך אינו תואם למדיניות של ההתכתבות הקבוצתית הזו."],"This groupchat does not (yet) exist.":["התכתבות קבוצתית זו (עדיין) אינה קיימת."],"This groupchat has reached its maximum number of participants.":["התכתבות קבוצתית זו הגיעה לרף הנוכחים העליון שלה."],"Remote server not found":["השרת המרוחק לא נמצא"],"The explanation given is: \\"%1$s\\".":["ההסבר שסופק הוא: „%1$s”."],"%1$s has invited you to join a groupchat: %2$s":["קיבלת הזמנה מאת %1$s להצטרף להתכתבות קבוצתית: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["קיבלת הזמנה מאת %1$s להצטרף להתכתבות קבוצתית: %2$s, הסיבה שניתנה להזמנה הזו היא: „%3$s”"],"Error":["שגיאה"],"Sorry, something went wrong while trying to save your bookmark.":["משהו השתבש במהלך ניסיון שמירת הסימנייה שלך, עמך הסליחה."],"Timeout Error":["שגיאת תום זמן קצוב"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["אנשי הקשר שלי"],"Pending contacts":["אנשי קשר ממתינים"],"Contact requests":["בקשות איש קשר"],"Ungrouped":["ללא קבוצה"],"Sorry, there was an error while trying to add %1$s as a contact.":["הוספת %1$s לאנשי הקשר נכשלה, עמך הסליחה."],"This client does not allow presence subscriptions":["לקוח זה לא מתיר הרשמות נוכחות"],"Click to hide these contacts":["לחץ כדי להסתיר את אנשי קשר אלה"],"Unbookmark this groupchat":["הסרת התכתבות קבוצתית זו מהסימניות"],"Click to open this groupchat":["יש ללחוץ כדי לפתוח את ההתכתבות הקבוצתית הזאת"],"Click to toggle the bookmarks list":["יש ללחוץ כדי להסתיר/להציג רשימת סימניות"],"Bookmarks":["סימניות"],"Bookmark this groupchat":["הוספת התכתבות קבוצתית זו לסימניות"],"Would you like this groupchat to be automatically joined upon startup?":["להצטרף להתכתבות הקבוצתית הזאת עם ההפעלה?"],"The name for this bookmark:":["שם הסימנייה הזאת:"],"What should your nickname for this groupchat be?":["מה אמור להיות הכינוי שלך בהתכתבות הקבוצתית הזאת?"],"Save":["שמירה"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["להסיר את הסימנייה „%1$s”?"],"Close":["סגירה"],"OK":["אישור"],"Image: ":[""],"Download audio file \\"%1$s\\"":["הורדת קובץ השמע „%1$s”"],"Download file \\"%1$s\\"":["הורדת הקובץ „%1$s”"],"Edit":[""],"Retract":[""],"Message versions":["גרסאות ההודעה"],"Retry":[""],"Uploading file:":["קובץ נשלח:"],"This message has been edited":["ההודעה נערכה"],"Show more":["להציג עוד"],"No message history available.":["אין היסטוריית הודעות זמינה."],"Search results":["תוצאות חיפוש"],"Search":["חיפוש"],"Insert emojis":["הוספת אמוג׳ים"],"Send the message":["שליחת ההודעה"],"Start a call":["התחל שיחה"],"Message characters remaining":["תווים שנותרו להודעה"],"Choose a file to send":["נא לבחור קובץ לשליחה"],"Click to write as a normal (non-spoiler) message":["יש ללחוץ כאן כדי לכתוב הודעת מצב רגילה (לא מותאמת)"],"Click to write your message as a spoiler":["יש ללחוץ כאן כדי לכתוב הודעת מצב מותאמת"],"The User\'s Profile Image":["תמונת הפרופיל של המשתמש"],"Trusted":["מהימן"],"Untrusted":["בלתי מהימן"],"OMEMO Fingerprints":["טביעות אצבע OMEMO"],"Remove as contact":["הסרה כאיש קשר"],"XMPP Address":["כתובת XMPP"],"Email":["דוא״ל"],"Full Name":["שם מלא"],"Nickname":["שם כינוי"],"Refresh":["רענון"],"Role":["תפקיד"],"URL":["כתובת"],"%1$s is typing":["הקלדה מצד %1$s"],"%1$s has stopped typing":["ההקלדה של %1$s הפסיקה"],"%1$s has gone away":["הפעילות של %1$s מושהית"],"Remove messages":["הסרת הודעות"],"Write in the third person":["כתיבה בגוף השלישי"],"Show this menu":["הצגת תפריט זה"],"Hidden message":["הודעה מוסתרת"],"Message":["הודעה"],"Optional hint":["רמז כרשות"],"You have unread messages":["יש לך הודעות שלא נקראו"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["יש לך הודעה שלא נשלחה שתאבד אם לא תישמר. להמשיך?"],"Are you sure you want to clear the messages from this conversation?":["לפנות את ההודעות מהדיון הזה?"],"%1$s has gone offline":["החיבור של %1$s נותק"],"%1$s is busy":["אין זמינות מצד %1$s"],"%1$s is online":["התחברות מצד %1$s"],"Sorry, something went wrong while trying to refresh":["אירעה שגיאה במהלך ניסיון הרענון, עמך הסליחה"],"Are you sure you want to remove this contact?":["להסיר איש קשר זה?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["אירעה שגיאה במהלך ניסיון הסרת %1$s כאיש קשר."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["כדי לשפר את הביצועים, אנו שומרים את הנתונים שלך במטמון בדפדפן. יש לבטל סימון תיבה זו אם מדובר במחשב ציבורי או שברצונך שהנתונים שלך יימחקו עם היציאה מהחשבון. חשבון מאוד לצאת בצורה מפורשת אחרת יתכן שלא כל הנתונים שנשמרו יימחקו. לתשומת לבך, בעת שימוש במכשיר בלתי מהימן, אין תמיכה בהצפנת OMEMO."],"This is a trusted device":["זה מכשיר מהימן"],"Create an account":["יצירת חשבון"],"Don\'t have a chat account?":["אין לך חשבון התכתבות?"],"Log in":["כניסה"],"Disconnected":["מנותק"],"Click here to log in anonymously":["יש ללחוץ כאן כדי להיכנס באופן אלמוני"],"Username":["שם משתמש"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["נא להקליד כתובת XMPP תקינה"],"Chat Contacts":["אנשי קשר בהתכתבות"],"Toggle chat":["הפעלה/כיבוי של התכתבות"],"Click to restore this chat":["יש ללחוץ כדי לשחזר את ההתכתבות הזאת"],"Minimized":["ממוזער"],"This field is required":["שדה זה נחוץ"],"Join":["הצטרפות"],"Enter a new Groupchat":["כניסה להתכתבות קבוצתית חדשה"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["שם ההתכתבות קבוצתית"],"Groupchat address":["כתובת התכתבות קבוצתית"],"Invite":["הזמנה"],"Show groupchats":["הצגת התכתבויות קבוצתיות"],"Server address":["כתובת שרת"],"Show more information on this groupchat":["הצגת מידע נוסף על ההתכתבות הקבוצתית הזאת"],"Query for Groupchats":["תשאול התכתבויות קבוצתיות"],"Description:":["תיאור:"],"Groupchat Address (JID):":["כתובת התכתבות קבוצתית (JID):"],"Participants:":["משתתפים:"],"Features:":["תכונות:"],"Requires authentication":["נדרש אימות"],"Hidden":["מוסתר"],"Requires an invitation":["נדרשת הזמנה"],"Moderated":["מפוקח"],"Non-anonymous":["בלתי אלמוני"],"Open":["פתוח"],"Permanent":["קבוע"],"Public":["ציבורי"],"Semi-anonymous":["אלמוני למחצה"],"Temporary":["זמני"],"Unmoderated":["ללא פיקוח"],"conference.example.org":["conference.example.org"],"No groupchats found":["לא נמצאו התכתבויות קבוצתיות"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["מפקחים הם משתמשים מורשים שיכולים לשנות תפקידים של משתמשים אחרים (למעט מנהלים או בעלים)."],"The default role, implies that you can read and write messages.":["תפקיד בררת המחדל, מעיד על היכולת שלך לקרוא ולכתוב הודעות."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["מבקרים לא יכולים לכתוב הודעות בחדרי התכתבות מפוקחים."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["שינוי תפקיד"],"New Role":["תפקיד חדש"],"Reason":["סיבה"],"Change affiliation":["שינוי שיוך"],"New affiliation":["שיוך חדש"],"Affiliation":["השתייכות"],"Moderator Tools":["כלי פיקוח"],"No users with that affiliation found.":["לא נמצאו משתמשים משויכים."],"No users with that role found.":["לא נמצאו משתמשים בתפקיד הזה."],"Type here to filter the search results":[""],"Show users":["הצגת משתמשים"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["תפקידים מוקצים למשתמשים כדי להעניק להם יכולות מסוימות בסביבת חדר שיחה מרובה משתתפים. ההקצאה היא ישירה או עקיפה כחלק מהגדרת ההשתייכות. תפקיד שאינו מתוקף ההשתייכות, תקף למהלך אותה הפעלה בלבד."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["נושא"],"Topic author":["יוצר הנושא"],"Groupchat address (JID)":["כתובת התכתבות קבוצתית (JID)"],"Message archiving":["העברת הודעות לארכיון"],"Messages are archived on the server":["ההודעות נשמרות בארכיון שבשרת"],"Description":["תיאור"],"Features":["תכונות"],"This groupchat is not publicly searchable":["התכתבות קבוצתית זו אינה גלויה לחיפוש"],"This groupchat is restricted to members only":["התכתבות קבוצתית זו מוגבלת לחברים בלבד"],"Members only":["חברים בלבד"],"Participants entering this groupchat need to request permission to write":["על משתתפים חדשים בהתכתבות קבוצתית זו לבקש הרשאה לכתוב"],"Name":["שם"],"This groupchat does not require a password upon entry":["התכתבות קבוצתית זו אינה דורשת ססמה כדי להיכנס אליה"],"No password required":["לא נדרשת ססמה"],"Not anonymous":["לא אלמוני"],"All other groupchat participants can see your XMPP address":["כל שאר המשתתפים בהתכתבות הקבוצתית יכולים לראות את כתובת ה־XMPP שלך"],"Not moderated":["ללא פיקוח"],"Participants entering this groupchat can write right away":["משתתפים שנכנסים להתכתבות הקבוצתית הזאת יכולים לכתוב מאותו הרגע"],"Online users":["משתמשים מקוונים"],"Anyone can join this groupchat":["כל אחד יכול להצטרף להתכתבות קבוצתית זו"],"This groupchat requires a password before entry":["התכתבות קבוצתית זו דורשת ססמה כדי להיכנס אליה"],"Password protected":["הגנה בססמה"],"Persistent":["עקבי"],"This groupchat persists even if it\'s unoccupied":["התכתבות קבוצתית זו נשמרת גם אם אין בה משתתפים"],"Only moderators can see your XMPP address":["רק משגיחים יכולים לראות את כתובת ה־XMPP שלך"],"This groupchat will disappear once the last person leaves":["התכתבות קבוצתית זו תיעלם עם יציאת החבר האחרון"],"This groupchat is publicly searchable":["התכתבות קבוצתית זו גלויה בחיפושים"],"Groupchat info for %1$s":["פרטי התכתבות קבוצתית עבור %1$s"],"You\'re not allowed to send messages in this room":["אין לך הרשאה לשלוח הודעות בחדר זה"],"The conversation has moved. Click below to enter.":["הדיון הועבר. יש ללחוץ להלן כדי להיכנס."],"This groupchat no longer exists":["התכתבות קבוצתית זו אינה קיימת עוד"],"Enter groupchat":["כניסה להתכתבות קבוצתית"],"Please choose your nickname":["נא לבחור את הכינוי שלך"],"This groupchat requires a password":["התכתבות קבוצתית זו דורשת ססמה"],"Password: ":["ססמה: "],"Submit":["שליחה"],"This user is a moderator.":["הרשאות המשתמש הן פיקוח."],"This user can send messages in this groupchat.":["למשתמש זה יש הרשאה לשלוח הודעה בהתכתבות קבוצתית זו."],"This user can NOT send messages in this groupchat.":["למשתמש זה אין אפשרות לשלוח הודעות להתכתבות קבוצתית זו."],"Owner":["בעלים"],"Admin":["מנהל"],"Member":["חבר"],"Moderator":["מפקח"],"Visitor":["מבקר"],"Click to mention %1$s in your message.":["יש ללחוץ כדי לאזכר את %1$s בהודעה שלך."],"Participants":["משתתפים"],"%1$s has entered the groupchat":["%1$s נכנס/ה להתכתבות הקבוצתית הזו"],"%1$s has left the groupchat":["%1$s עזב/ה את ההתכתבות הקבוצתית הזו"],"%1$s is now a moderator":["הוענקו הרשאות פיקוח לטובת %1$s"],"%1$s is no longer a moderator":["הרשאות הפיקוח של %1$s הוסרו"],"%1$s has been muted":["הקול של %1$s הושתק"],"%1$s and %2$s":["%1$s וגם %2$s"],"Change user\'s affiliation to admin":["שנה סינוף משתמש למנהל"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["החלפת תפקיד המשתמש למשתתף"],"Remove this groupchat":["הסרת ההתכתבות הקבוצתית הזאת"],"Kick user from groupchat":["לזרוק את המשתמש מההתכתבות הקבוצתית"],"Write in 3rd person":["כתוב בגוף שלישי"],"Grant membership to a user":["הענק חברות למשתמש"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["הסר יכולת משתמש לפרסם הודעות"],"Change your nickname":["שנה את השם כינוי שלך"],"Grant moderator role to user":["הענק תפקיד אחראי למשתמש"],"Grant ownership of this groupchat":["הענקת בעלות על התכתבות קבוצתית זו"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["הגדרת נושא להתכתבות הקבוצתית"],"Set groupchat subject (alias for /subject)":["הגדרת נושא להתכתבות הקבוצתית (שם חלופי ל־‎/subject)"],"Allow muted user to post messages":["התר למשתמש מושתק לפרסם הודעות"],"Sorry, you\'re not allowed to retract this message":["אין לך הרשאות למשוך את ההודעה הזאת, עמך הסליחה"],"Configure":[""],"Configure this groupchat":["הגדרות התכתבות קבוצתית זו"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["הסתרת רשימת המשתתפים"],"Forbidden: you do not have the necessary role in order to do that.":["אסור: אין לך את התפקיד המתאים כדי לבצע את הפעולה הזאת."],"Forbidden: you do not have the necessary affiliation in order to do that.":["אסור: אין לך את ההשתייכות הנדרשת כדי לבצע את הפעולה הזאת."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["שגיאה: הפקודה „%1$s” מקבלת שני ארגומנטים, כינוי המשתמש וסיבה כרשות."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["שגיאה: מספר הארגומנטים שגוי"],"This action was done by %1$s.":["פעולה זו נערכה על ידי %1$s."],"The reason given is: \\"%1$s\\".":["הסיבה שסופקה היא: „%1$s”."],"Groupchats":["התכתבויות קבוצתיות"],"Add a new groupchat":["הוספת התכתבות קבוצתית חדשה"],"Query for groupchats":["תשאול התכתבויות קבוצתיות"],"Announcements":[""],"Notification from %1$s":["התראה מאת %1$s"],"%1$s says":["נאמר על ידי %1$s"],"has gone offline":["כבר לא מקוון"],"has gone away":["נעדר(ת)"],"is busy":["עסוק(ה) כעת"],"has come online":["התחבר/ה"],"wants to be your contact":["רוצה להצטרף לאנשי הקשר שלך"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["על אודות"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["לקוח התכתבות דרך XMPP ב%1$sקוד פתוח%2$s שמוגש מטעם %3$sOpokde%2$s"],"%1$s Translate %2$s it into your own language":["%1$sלתרגם%2$s זאת לשפה שלך"],"Log out":["התנתקות"],"Click to change your chat status":["לחץ כדי לשנות את הודעת השיחה שלך"],"Show details about this chat client":["הצגת פרטים על לקוח התכתבות זה"],"Your avatar image":["התמונה המייצגת שלך"],"Checkbox for selecting the following fingerprint":["תיבת סימון לבחירת טביעת האצבע הבאה"],"Device without a fingerprint":["מכשיר ללא טביעות אצבע"],"Other OMEMO-enabled devices":["מכשירים אחרים תומכי OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["תיבת סימון לבחירת טביעות אצבע של כל מכשירי ה־OMEMO האחרים"],"Remove checked devices and close":["להסיר את המכשירים המסומנים ולסגור"],"Select all":["לבחור הכול"],"This device\'s OMEMO fingerprint":["טביעת אצבע ה־OMEMO של המכשיר"],"Generate new keys and fingerprint":["יצירת מפתחות וטביעות אצבע חדשים"],"Your Profile":["הפרופיל שלך"],"XMPP Address (JID)":["כתובת XMPP‏ (JID)"],"Save and close":["לשמור ולסגור"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["ניתן להשתמש בפסיקים כדי להפריד בין מספר תפקידים. התפקידים מופיעים ליד השם בהודעות שלך כחלק מההתכתבות."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["אירעה שגיאה במהלך הניסיון לשמור את נתוני הפרופיל שלך, עמך הסליחה."],"You can check your browser\'s developer console for any error output.":["מוטב לחפש שגיאות במסוף הפיתוח של הדפדפן שלך."],"Away":["נעדר"],"Busy":["עסוק"],"Custom status":["מצב מותאם"],"Offline":["לא מקוון"],"Online":["מקוון"],"Away for long":["היעדרות לזמן מה"],"Change chat status":["החלפת מצב התכתבות"],"Personal status message":["הודעת מצב אישית"],"I am %1$s":["מצבי כעת הינו %1$s"],"Are you sure you want to log out?":["לצאת?"],"online":["מקוון"],"busy":["עסוק"],"away for long":["נעדר לזמן מה"],"away":["נעדר"],"offline":["לא מקוון"],"Sorry, could not decrypt a received OMEMO message due to an error.":["לא ניתן לפענח הודעת OMEMO שהתקבלה עקב שגיאה, עמך הסליחה."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["כנראה שהלקוח שמותקן אצל %1$s אינו תומך ב־‏OMEMO. אין עוד תמיכה בהתכתבות מוצפנת בהתכתבות הקבוצתית הזאת."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["לא ניתן להשתמש בהצפנה מקצה לקצה כיוון שהלקוח של %1$s אינו תומך ב־OMEMO."],"Messages are being sent in plaintext":["ההודעות נשלחות כטקסט פשוט"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["אירעה שגיאה במהלך הניסיון להסרת ההתקנים, עמך הסליחה."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["לייצר מפתחות OMEMO חדשים? פעולה זו תסיר את המפתחות הישנים שלך ואת כל ההודעות שהוצפנו בעבר לא תהיה לך אפשרות לפענח במכשיר הזה."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["לא הצלחנו לשלוח הודעה מוצפנת כיוון שקיימת דרישת מצד %1$s להירשם למצב הנוכחות שלהם כדי לצפות בפרטי OMEMO, עמך הסליחה"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["לא הצלחנו לשלוח הודעה מוצפנת כיוון שלא ניתן למצוא את השרת המרוחק %1$s"],"Unable to send an encrypted message due to an unexpected error.":["לא ניתן לשלוח הודעה מוצפנת עקב שגיאה בלתי צפויה."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["זו הודעה שמוצפנת ב־OMEMO שכפי הנראה הלקוח שלך אינו תומך בה. ניתן למצוא פרטים נוספים בכתובת https://conversations.im/omemo"]," e.g. conversejs.org":[" למשל conversejs.org"],"Fetch registration form":["משוך טופס הרשמה"],"Tip: A list of public XMPP providers is available":["טיפ: רשימה פומבית של ספקי XMPP הינה זמינה"],"here":["כאן"],"Sorry, we\'re unable to connect to your chosen provider.":["לא הצלחנו להתחבר לספק שבחרת, עמך הסליחה."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["מצטערים, הספק שניתן לא תומך ברישום חשבונות in band. אנא נסה עם ספק אחר."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["משהו השתבש במהלך ההתחברות עם „%1$s”. החיבור הזה קיים בכלל?"],"Now logging you in":["כעת מחבר אותך פנימה"],"Registered successfully":["נרשם בהצלחה"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["הספק דחה את ניסיון הרישום שלך. נא לוודא את הנתונים שהקלדת."],"Leave this groupchat":["יציאה מההתכתבות הקבוצתית הזאת"],"Click to toggle the list of open groupchats":["יש ללחוץ כדי להציג/להסתיר את רשימת קבוצות ההתכתבות הפתוחות"],"Open Groupchats":["התכתבויות קבוצתיות פתוחות"],"Are you sure you want to leave the groupchat %1$s?":["לעזוב את ההתכתבות הקבוצתית %1$s?"],"Add":["הוסף"],"Add a Contact":["הוספת איש קשר"],"This contact is busy":["איש קשר זה עסוק"],"This contact is online":["איש קשר זה מקוון"],"This contact is offline":["איש קשר זה אינו מקוון"],"This contact is unavailable":["איש קשר זה לא זמין"],"This contact is away for an extended period":["איש קשר זה נעדר למשך זמן ממושך"],"This contact is away":["איש קשר זה הינו נעדר"],"Contact name":["שם איש קשר"],"Optional nickname":["כינוי כרשות"],"Sorry, could not find a contact with that name":["אין אפשרות למצוא איש קשר בשם זה, עמך הסליחה"],"This contact has already been added":["איש קשר זה כבר נוסף"],"Filter":["מסנן"],"Filter by contact name":["סינון לפי שם איש קשר"],"Filter by group name":["סינון לפי שם קבוצה"],"Filter by status":["סינון לפי מצב"],"Any":["כלשהו"],"Unread":["לא נקראו"],"Chatty":["קשקשנות"],"Extended Away":["היעדרות ממושכת"],"Click to remove %1$s as a contact":["יש ללחוץ כדי להסיר את איש הקשר %1$s"],"Click to accept the contact request from %1$s":["יש ללחוץ כדי לקבל בקשת איש קשר שנשלחה על ידי %1$s"],"Click to decline the contact request from %1$s":["יש ללחוץ כדי לסרב לבקשת הקשר שהגיעה מצד %1$s"],"Are you sure you want to decline this contact request?":["האם אתה בטוח כי ברצונך לסרב את בקשת איש קשר זה?"],"Contacts":["אנשי קשר"],"Add a contact":["הוסף איש קשר"],"Re-sync your contacts":["סנכרון אנשי הקשר שלך מחדש"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[154],{520:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=(n != 1);","lang":"he"},"Create your account":["יצירת חשבון משלך"],"Please enter the XMPP provider to register with:":["נא להקליד את ספק ה־XMPP להרשמה מולו:"],"Already have a chat account?":["כבר יש לך חשבון להתכתבות?"],"Log in here":["כניסה מכאן"],"Account Registration:":["רישום חשבון:"],"Register":["הירשם"],"Choose a different provider":["נא לבחור בספק אחר"],"Hold tight, we\'re fetching the registration form…":["להחזיק חזק, אנחנו מביאים את טופס ההרשמה…"],"Cancel":["ביטול"],"The connection has dropped, attempting to reconnect.":["החיבור נקטע, מתבצע ניסיון חיבור מחדש."],"An error occurred while connecting to the chat server.":["אירעה שגיאה במהלך ההתחברות לשרת הצ׳אט."],"Your XMPP address and/or password is incorrect. Please try again.":["כתובת ה־XMPP ו/או הססמה שגויים. נא לנסות שוב."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["לא הצלחנו להתחבר למארח ה־XMPP עם שם המתחם: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["שרת ה־XMPP לא הציע מנגנון אימות נתמך"],"Undecryptable OMEMO message":["הודעת OMEMO שלא ניתן להצפין"],"Sorry, could not determine upload URL.":["לא ניתן לפענח את כתובת ההעלאה, עמך הסליחה."],"Sorry, could not determine file upload URL.":["לא ניתן לפענח את כתובת העלאת הקבצים, עמך הסליחה."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["העלאת הקובץ שלך לא הצליחה. תגובת השרת היא: „%1$s”, עמך הסליחה"],"Sorry, could not succesfully upload your file.":["העלאת הקובץ שלך לא הצליחה, עמך הסליחה."],"You\'re not allowed to retract your message.":["אין לך הרשאה למשוך את ההודעה שלך."],"Sorry, an error occurred while trying to retract your message.":["אירעה שגיאה במהלך הניסיון למשוך את ההודעה שלך, עמך סליחה."],"You\'re not allowed to send a message.":["אסור לך לשלוח הודעות."],"Sorry, an error occurred while trying to send your message.":["אירעה שגיאה במהלך הניסיון לשליחת ההודעה שלך, עמך הסליחה."],"Sorry, looks like file upload is not supported by your server.":["נראה כי השרת שלך אינו תומך בהעלאת קבצים, עמך הסליחה."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["גודל הקובץ שלך, %1$s, חורג מהגודל המרבי שמרשה השרת שהוא %2$s."],"Smileys and emotions":["חייכנים ורגשונים"],"People":["אנשים"],"Activities":["פעילויות"],"Travel":["טיול"],"Objects":["חפצים"],"Animals and nature":["חיות וטבע"],"Food and drink":["מזון ושתייה"],"Symbols":["סמלים"],"Flags":["דגלים"],"Stickers":["מדבקות"],"This groupchat is not anonymous":["התכתבות קבוצתית זו זה אינה אלמונית"],"This groupchat now shows unavailable members":["התכתבות קבוצתית זו מציגה כעת חברים שאינם זמינים"],"This groupchat does not show unavailable members":["התכתבות קבוצתית זו אינה מציגה חברים שאינם זמינים"],"The groupchat configuration has changed":["הגדרות ההתכתבות הקבוצתית הזאת נערכו"],"Groupchat logging is now enabled":["תיעוד ההתכתבות הקבוצתית פעיל כעת"],"Groupchat logging is now disabled":["תיעוד ההתכתבות הקבוצתית מושבת כעת"],"This groupchat is now no longer anonymous":["ההתכתבות הקבוצתית הזאת אינה אלמונית יותר"],"This groupchat is now semi-anonymous":["ההתכתבות הקבוצתית הזאת היא אלמונית למחצה כעת"],"This groupchat is now fully-anonymous":["התכתבות קבוצתית זו הנה אלמונית לחלוטין כעת"],"A new groupchat has been created":["נוצרה התכתבות קבוצתית חדשה"],"Your nickname has been automatically set to %1$s":["הכינוי שלך הוגדר לכדי %1$s אוטומטית"],"Your nickname has been changed to %1$s":["הכינוי שלך נערך לכדי %1$s"],"You have been banned from this groupchat":["גישתך להתכתבות הקבוצתית הזו נחסמה"],"You have exited this groupchat due to a technical problem":["יצאת מההתכתבות הקבוצתית הזאת עקב תקלה טכנית"],"You have been kicked from this groupchat":["נזרקת מההתכתבות הקבוצתית הזאת"],"You have been removed from this groupchat because of an affiliation change":["הוסרת מההתכתבות הקבוצתית הזו עקב שינוי שיוך"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["הוסרת מההתכתבות הקבוצתית הזאת כיוון שההשתתפות מעתה מיועדת לחברים בלבד ולך אין חברות"],"You have been removed from this groupchat because the service hosting it is being shut down":["הוסרת מההתכתבות הקבוצתית הזאת כיוון שאחסון השירות בהליכי כיבוי"],"Your message was not delivered because you weren\'t allowed to send it.":["ההודעה שלך לא נשלחה כיוון שאין לך הרשאה לשלוח אותה."],"Your message was not delivered because you\'re not present in the groupchat.":["ההודעה שלך לא נשלחה כיוון שאינך בהתכתבות קבוצתית זו."],"You\'re not allowed to register yourself in this groupchat.":["אין לך הרשאה להירשם עצמאית להתכתבות קבוצתית זו."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["אין לך הרשאה להירשם להתכתבות קבוצתית זו כי היא מיועדת לחברים בלבד."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["לא ניתן לרשום את הכינוי לך בהתכתבות הקבוצתית הזאת, אין לה תמיכה בהרשמה."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["אין אפשרות לרשום את הכינוי שלך בהתכתבות הקבוצתית הזו, תצורת הנתונים שסופקה שגויה."],"Topic set by %1$s":["נושא התכתבות קבוצתית זו הוגדר על ידי %1$s"],"Topic cleared by %1$s":["נושא התכתבות קבוצתית זו נמחק על ידי %1$s"],"%1$s has been banned by %2$s":["הגישה של %1$s נחסמה על ידי %2$s"],"%1$s has been banned":["הגישה של %1$s נחסמה"],"%1$s\'s nickname has changed":["הכינוי של %1$s הוחלף"],"%1$s has been kicked out by %2$s":["%1$s נבעט/ה על ידי %2$s"],"%1$s has been kicked out":["%1$s נבעט/ה"],"%1$s has been removed because of an affiliation change":["%1$s הוסר/ה עקב שינוי שיוך"],"%1$s has been removed for not being a member":["%1$s הוסר/ה עקב העדר מעמד חברות"],"%1$s is no longer an admin of this groupchat":["התפקיד הניהולי של %1$s הוסר עבור ההתכתבות הקבוצתית הזו"],"%1$s is no longer an owner of this groupchat":["הבעלות של %1$s על ההתכתבות הקבוצתית הזו אינה תקפה עוד"],"%1$s is no longer banned from this groupchat":["הגישה של %1$s להתכתבות הקבוצתית הזו אינה חסומה יותר"],"%1$s is now an %2$s of this groupchat":["התפקיד של %1$s בהתכתבות הקבוצתית הזו הוא עכשיו %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["הכינוי שבחרת שמור או בשימוש, נא לבחור באחד אחר."],"Password incorrect":["הססמה שגויה"],"You are not on the member list of this groupchat.":["אינך ברשימת החברים של התכתבות קבוצתית זו."],"You have been banned from this groupchat.":["גישתך להתכתבות קבוצתית זו נחסמה."],"You are not allowed to create new groupchats.":["אין לך הרשאה ליצור התכתבויות קבוצתיות חדשות."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["הכינוי שלך אינו תואם למדיניות של ההתכתבות הקבוצתית הזו."],"This groupchat does not (yet) exist.":["התכתבות קבוצתית זו (עדיין) אינה קיימת."],"This groupchat has reached its maximum number of participants.":["התכתבות קבוצתית זו הגיעה לרף הנוכחים העליון שלה."],"Remote server not found":["השרת המרוחק לא נמצא"],"The explanation given is: \\"%1$s\\".":["ההסבר שסופק הוא: „%1$s”."],"%1$s has invited you to join a groupchat: %2$s":["קיבלת הזמנה מאת %1$s להצטרף להתכתבות קבוצתית: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["קיבלת הזמנה מאת %1$s להצטרף להתכתבות קבוצתית: %2$s, הסיבה שניתנה להזמנה הזו היא: „%3$s”"],"Error":["שגיאה"],"Sorry, something went wrong while trying to save your bookmark.":["משהו השתבש במהלך ניסיון שמירת הסימנייה שלך, עמך הסליחה."],"Timeout Error":["שגיאת תום זמן קצוב"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["אנשי הקשר שלי"],"Pending contacts":["אנשי קשר ממתינים"],"Contact requests":["בקשות איש קשר"],"Ungrouped":["ללא קבוצה"],"Sorry, there was an error while trying to add %1$s as a contact.":["הוספת %1$s לאנשי הקשר נכשלה, עמך הסליחה."],"This client does not allow presence subscriptions":["לקוח זה לא מתיר הרשמות נוכחות"],"Click to hide these contacts":["לחץ כדי להסתיר את אנשי קשר אלה"],"Unbookmark this groupchat":["הסרת התכתבות קבוצתית זו מהסימניות"],"Click to open this groupchat":["יש ללחוץ כדי לפתוח את ההתכתבות הקבוצתית הזאת"],"Click to toggle the bookmarks list":["יש ללחוץ כדי להסתיר/להציג רשימת סימניות"],"Bookmarks":["סימניות"],"Bookmark this groupchat":["הוספת התכתבות קבוצתית זו לסימניות"],"Would you like this groupchat to be automatically joined upon startup?":["להצטרף להתכתבות הקבוצתית הזאת עם ההפעלה?"],"The name for this bookmark:":["שם הסימנייה הזאת:"],"What should your nickname for this groupchat be?":["מה אמור להיות הכינוי שלך בהתכתבות הקבוצתית הזאת?"],"Save":["שמירה"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["להסיר את הסימנייה „%1$s”?"],"Close":["סגירה"],"OK":["אישור"],"Image: ":[""],"Download audio file \\"%1$s\\"":["הורדת קובץ השמע „%1$s”"],"Download file \\"%1$s\\"":["הורדת הקובץ „%1$s”"],"Edit":[""],"Retract":[""],"Message versions":["גרסאות ההודעה"],"Retry":[""],"Uploading file:":["קובץ נשלח:"],"This message has been edited":["ההודעה נערכה"],"Show more":["להציג עוד"],"No message history available.":["אין היסטוריית הודעות זמינה."],"Search results":["תוצאות חיפוש"],"Search":["חיפוש"],"Insert emojis":["הוספת אמוג׳ים"],"Send the message":["שליחת ההודעה"],"Start a call":["התחל שיחה"],"Message characters remaining":["תווים שנותרו להודעה"],"Choose a file to send":["נא לבחור קובץ לשליחה"],"Click to write as a normal (non-spoiler) message":["יש ללחוץ כאן כדי לכתוב הודעת מצב רגילה (לא מותאמת)"],"Click to write your message as a spoiler":["יש ללחוץ כאן כדי לכתוב הודעת מצב מותאמת"],"The User\'s Profile Image":["תמונת הפרופיל של המשתמש"],"Trusted":["מהימן"],"Untrusted":["בלתי מהימן"],"OMEMO Fingerprints":["טביעות אצבע OMEMO"],"Remove as contact":["הסרה כאיש קשר"],"XMPP Address":["כתובת XMPP"],"Email":["דוא״ל"],"Full Name":["שם מלא"],"Nickname":["שם כינוי"],"Refresh":["רענון"],"Role":["תפקיד"],"URL":["כתובת"],"%1$s is typing":["הקלדה מצד %1$s"],"%1$s has stopped typing":["ההקלדה של %1$s הפסיקה"],"%1$s has gone away":["הפעילות של %1$s מושהית"],"Remove messages":["הסרת הודעות"],"Write in the third person":["כתיבה בגוף השלישי"],"Show this menu":["הצגת תפריט זה"],"Hidden message":["הודעה מוסתרת"],"Message":["הודעה"],"Optional hint":["רמז כרשות"],"You have unread messages":["יש לך הודעות שלא נקראו"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["יש לך הודעה שלא נשלחה שתאבד אם לא תישמר. להמשיך?"],"Are you sure you want to clear the messages from this conversation?":["לפנות את ההודעות מהדיון הזה?"],"%1$s has gone offline":["החיבור של %1$s נותק"],"%1$s is busy":["אין זמינות מצד %1$s"],"%1$s is online":["התחברות מצד %1$s"],"Sorry, something went wrong while trying to refresh":["אירעה שגיאה במהלך ניסיון הרענון, עמך הסליחה"],"Are you sure you want to remove this contact?":["להסיר איש קשר זה?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["אירעה שגיאה במהלך ניסיון הסרת %1$s כאיש קשר."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["כדי לשפר את הביצועים, אנו שומרים את הנתונים שלך במטמון בדפדפן. יש לבטל סימון תיבה זו אם מדובר במחשב ציבורי או שברצונך שהנתונים שלך יימחקו עם היציאה מהחשבון. חשבון מאוד לצאת בצורה מפורשת אחרת יתכן שלא כל הנתונים שנשמרו יימחקו. לתשומת לבך, בעת שימוש במכשיר בלתי מהימן, אין תמיכה בהצפנת OMEMO."],"This is a trusted device":["זה מכשיר מהימן"],"Password":["ססמה"],"Create an account":["יצירת חשבון"],"Don\'t have a chat account?":["אין לך חשבון התכתבות?"],"Log in":["כניסה"],"Disconnected":["מנותק"],"Click here to log in anonymously":["יש ללחוץ כאן כדי להיכנס באופן אלמוני"],"Username":["שם משתמש"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["נא להקליד כתובת XMPP תקינה"],"Chat Contacts":["אנשי קשר בהתכתבות"],"Toggle chat":["הפעלה/כיבוי של התכתבות"],"Click to restore this chat":["יש ללחוץ כדי לשחזר את ההתכתבות הזאת"],"Minimized":["ממוזער"],"This user is a moderator.":["הרשאות המשתמש הן פיקוח."],"This user can send messages in this groupchat.":["למשתמש זה יש הרשאה לשלוח הודעה בהתכתבות קבוצתית זו."],"This user can NOT send messages in this groupchat.":["למשתמש זה אין אפשרות לשלוח הודעות להתכתבות קבוצתית זו."],"Owner":["בעלים"],"Admin":["מנהל"],"Member":["חבר"],"Moderator":["מפקח"],"Visitor":["מבקר"],"Click to mention %1$s in your message.":["יש ללחוץ כדי לאזכר את %1$s בהודעה שלך."],"Participants":["משתתפים"],"This field is required":["שדה זה נחוץ"],"Join":["הצטרפות"],"Enter a new Groupchat":["כניסה להתכתבות קבוצתית חדשה"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["שם ההתכתבות קבוצתית"],"Groupchat address":["כתובת התכתבות קבוצתית"],"Invite":["הזמנה"],"Show groupchats":["הצגת התכתבויות קבוצתיות"],"Server address":["כתובת שרת"],"Show more information on this groupchat":["הצגת מידע נוסף על ההתכתבות הקבוצתית הזאת"],"Query for Groupchats":["תשאול התכתבויות קבוצתיות"],"Description:":["תיאור:"],"Groupchat Address (JID):":["כתובת התכתבות קבוצתית (JID):"],"Participants:":["משתתפים:"],"Features:":["תכונות:"],"Requires authentication":["נדרש אימות"],"Hidden":["מוסתר"],"Requires an invitation":["נדרשת הזמנה"],"Moderated":["מפוקח"],"Non-anonymous":["בלתי אלמוני"],"Open":["פתוח"],"Permanent":["קבוע"],"Public":["ציבורי"],"Semi-anonymous":["אלמוני למחצה"],"Temporary":["זמני"],"Unmoderated":["ללא פיקוח"],"conference.example.org":["conference.example.org"],"Groupchats found":["התכתבויות קבוצתיות שנמצאו"],"No groupchats found":["לא נמצאו התכתבויות קבוצתיות"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["מפקחים הם משתמשים מורשים שיכולים לשנות תפקידים של משתמשים אחרים (למעט מנהלים או בעלים)."],"The default role, implies that you can read and write messages.":["תפקיד בררת המחדל, מעיד על היכולת שלך לקרוא ולכתוב הודעות."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["מבקרים לא יכולים לכתוב הודעות בחדרי התכתבות מפוקחים."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["שינוי תפקיד"],"New Role":["תפקיד חדש"],"Reason":["סיבה"],"Change affiliation":["שינוי שיוך"],"New affiliation":["שיוך חדש"],"Affiliation":["השתייכות"],"Moderator Tools":["כלי פיקוח"],"No users with that affiliation found.":["לא נמצאו משתמשים משויכים."],"No users with that role found.":["לא נמצאו משתמשים בתפקיד הזה."],"Type here to filter the search results":[""],"Show users":["הצגת משתמשים"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["תפקידים מוקצים למשתמשים כדי להעניק להם יכולות מסוימות בסביבת חדר שיחה מרובה משתתפים. ההקצאה היא ישירה או עקיפה כחלק מהגדרת ההשתייכות. תפקיד שאינו מתוקף ההשתייכות, תקף למהלך אותה הפעלה בלבד."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["נושא"],"Topic author":["יוצר הנושא"],"Groupchat address (JID)":["כתובת התכתבות קבוצתית (JID)"],"Message archiving":["העברת הודעות לארכיון"],"Messages are archived on the server":["ההודעות נשמרות בארכיון שבשרת"],"Description":["תיאור"],"Features":["תכונות"],"This groupchat is not publicly searchable":["התכתבות קבוצתית זו אינה גלויה לחיפוש"],"This groupchat is restricted to members only":["התכתבות קבוצתית זו מוגבלת לחברים בלבד"],"Members only":["חברים בלבד"],"Participants entering this groupchat need to request permission to write":["על משתתפים חדשים בהתכתבות קבוצתית זו לבקש הרשאה לכתוב"],"Name":["שם"],"This groupchat does not require a password upon entry":["התכתבות קבוצתית זו אינה דורשת ססמה כדי להיכנס אליה"],"No password required":["לא נדרשת ססמה"],"Not anonymous":["לא אלמוני"],"All other groupchat participants can see your XMPP address":["כל שאר המשתתפים בהתכתבות הקבוצתית יכולים לראות את כתובת ה־XMPP שלך"],"Not moderated":["ללא פיקוח"],"Participants entering this groupchat can write right away":["משתתפים שנכנסים להתכתבות הקבוצתית הזאת יכולים לכתוב מאותו הרגע"],"Online users":["משתמשים מקוונים"],"Anyone can join this groupchat":["כל אחד יכול להצטרף להתכתבות קבוצתית זו"],"This groupchat requires a password before entry":["התכתבות קבוצתית זו דורשת ססמה כדי להיכנס אליה"],"Password protected":["הגנה בססמה"],"Persistent":["עקבי"],"This groupchat persists even if it\'s unoccupied":["התכתבות קבוצתית זו נשמרת גם אם אין בה משתתפים"],"Only moderators can see your XMPP address":["רק משגיחים יכולים לראות את כתובת ה־XMPP שלך"],"This groupchat will disappear once the last person leaves":["התכתבות קבוצתית זו תיעלם עם יציאת החבר האחרון"],"This groupchat is publicly searchable":["התכתבות קבוצתית זו גלויה בחיפושים"],"Groupchat info for %1$s":["פרטי התכתבות קבוצתית עבור %1$s"],"You\'re not allowed to send messages in this room":["אין לך הרשאה לשלוח הודעות בחדר זה"],"The conversation has moved. Click below to enter.":["הדיון הועבר. יש ללחוץ להלן כדי להיכנס."],"This groupchat no longer exists":["התכתבות קבוצתית זו אינה קיימת עוד"],"Enter groupchat":["כניסה להתכתבות קבוצתית"],"Please choose your nickname":["נא לבחור את הכינוי שלך"],"This groupchat requires a password":["התכתבות קבוצתית זו דורשת ססמה"],"Password: ":["ססמה: "],"Submit":["שליחה"],"%1$s has entered the groupchat":["%1$s נכנס/ה להתכתבות הקבוצתית הזו"],"%1$s has left the groupchat":["%1$s עזב/ה את ההתכתבות הקבוצתית הזו"],"%1$s is now a moderator":["הוענקו הרשאות פיקוח לטובת %1$s"],"%1$s is no longer a moderator":["הרשאות הפיקוח של %1$s הוסרו"],"%1$s has been muted":["הקול של %1$s הושתק"],"%1$s and %2$s":["%1$s וגם %2$s"],"Change user\'s affiliation to admin":["שנה סינוף משתמש למנהל"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["החלפת תפקיד המשתמש למשתתף"],"Remove this groupchat":["הסרת ההתכתבות הקבוצתית הזאת"],"Kick user from groupchat":["לזרוק את המשתמש מההתכתבות הקבוצתית"],"Write in 3rd person":["כתוב בגוף שלישי"],"Grant membership to a user":["הענק חברות למשתמש"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["הסר יכולת משתמש לפרסם הודעות"],"Change your nickname":["שנה את השם כינוי שלך"],"Grant moderator role to user":["הענק תפקיד אחראי למשתמש"],"Grant ownership of this groupchat":["הענקת בעלות על התכתבות קבוצתית זו"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["הגדרת נושא להתכתבות הקבוצתית"],"Set groupchat subject (alias for /subject)":["הגדרת נושא להתכתבות הקבוצתית (שם חלופי ל־‎/subject)"],"Allow muted user to post messages":["התר למשתמש מושתק לפרסם הודעות"],"Sorry, you\'re not allowed to retract this message":["אין לך הרשאות למשוך את ההודעה הזאת, עמך הסליחה"],"Configure":[""],"Configure this groupchat":["הגדרות התכתבות קבוצתית זו"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["הסתרת רשימת המשתתפים"],"Forbidden: you do not have the necessary role in order to do that.":["אסור: אין לך את התפקיד המתאים כדי לבצע את הפעולה הזאת."],"Forbidden: you do not have the necessary affiliation in order to do that.":["אסור: אין לך את ההשתייכות הנדרשת כדי לבצע את הפעולה הזאת."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["שגיאה: הפקודה „%1$s” מקבלת שני ארגומנטים, כינוי המשתמש וסיבה כרשות."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["שגיאה: מספר הארגומנטים שגוי"],"This action was done by %1$s.":["פעולה זו נערכה על ידי %1$s."],"The reason given is: \\"%1$s\\".":["הסיבה שסופקה היא: „%1$s”."],"Groupchats":["התכתבויות קבוצתיות"],"Add a new groupchat":["הוספת התכתבות קבוצתית חדשה"],"Query for groupchats":["תשאול התכתבויות קבוצתיות"],"Announcements":[""],"Notification from %1$s":["התראה מאת %1$s"],"%1$s says":["נאמר על ידי %1$s"],"has gone offline":["כבר לא מקוון"],"has gone away":["נעדר(ת)"],"is busy":["עסוק(ה) כעת"],"has come online":["התחבר/ה"],"wants to be your contact":["רוצה להצטרף לאנשי הקשר שלך"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["על אודות"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["לקוח התכתבות דרך XMPP ב%1$sקוד פתוח%2$s שמוגש מטעם %3$sOpokde%2$s"],"%1$s Translate %2$s it into your own language":["%1$sלתרגם%2$s זאת לשפה שלך"],"Log out":["התנתקות"],"Click to change your chat status":["לחץ כדי לשנות את הודעת השיחה שלך"],"Show details about this chat client":["הצגת פרטים על לקוח התכתבות זה"],"Your avatar image":["התמונה המייצגת שלך"],"Checkbox for selecting the following fingerprint":["תיבת סימון לבחירת טביעת האצבע הבאה"],"Device without a fingerprint":["מכשיר ללא טביעות אצבע"],"Other OMEMO-enabled devices":["מכשירים אחרים תומכי OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["תיבת סימון לבחירת טביעות אצבע של כל מכשירי ה־OMEMO האחרים"],"Remove checked devices and close":["להסיר את המכשירים המסומנים ולסגור"],"Select all":["לבחור הכול"],"This device\'s OMEMO fingerprint":["טביעת אצבע ה־OMEMO של המכשיר"],"Generate new keys and fingerprint":["יצירת מפתחות וטביעות אצבע חדשים"],"Your Profile":["הפרופיל שלך"],"XMPP Address (JID)":["כתובת XMPP‏ (JID)"],"Save and close":["לשמור ולסגור"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["ניתן להשתמש בפסיקים כדי להפריד בין מספר תפקידים. התפקידים מופיעים ליד השם בהודעות שלך כחלק מההתכתבות."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["אירעה שגיאה במהלך הניסיון לשמור את נתוני הפרופיל שלך, עמך הסליחה."],"You can check your browser\'s developer console for any error output.":["מוטב לחפש שגיאות במסוף הפיתוח של הדפדפן שלך."],"Away":["נעדר"],"Busy":["עסוק"],"Custom status":["מצב מותאם"],"Offline":["לא מקוון"],"Online":["מקוון"],"Away for long":["היעדרות לזמן מה"],"Change chat status":["החלפת מצב התכתבות"],"Personal status message":["הודעת מצב אישית"],"I am %1$s":["מצבי כעת הינו %1$s"],"Are you sure you want to log out?":["לצאת?"],"online":["מקוון"],"busy":["עסוק"],"away for long":["נעדר לזמן מה"],"away":["נעדר"],"offline":["לא מקוון"],"Sorry, could not decrypt a received OMEMO message due to an error.":["לא ניתן לפענח הודעת OMEMO שהתקבלה עקב שגיאה, עמך הסליחה."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["כנראה שהלקוח שמותקן אצל %1$s אינו תומך ב־‏OMEMO. אין עוד תמיכה בהתכתבות מוצפנת בהתכתבות הקבוצתית הזאת."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["לא ניתן להשתמש בהצפנה מקצה לקצה כיוון שהלקוח של %1$s אינו תומך ב־OMEMO."],"Messages are being sent in plaintext":["ההודעות נשלחות כטקסט פשוט"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["לא הצלחנו לשלוח הודעה מוצפנת כיוון שקיימת דרישת מצד %1$s להירשם למצב הנוכחות שלהם כדי לצפות בפרטי OMEMO, עמך הסליחה"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["לא הצלחנו לשלוח הודעה מוצפנת כיוון שלא ניתן למצוא את השרת המרוחק %1$s"],"Unable to send an encrypted message due to an unexpected error.":["לא ניתן לשלוח הודעה מוצפנת עקב שגיאה בלתי צפויה."],"Sorry, an error occurred while trying to remove the devices.":["אירעה שגיאה במהלך הניסיון להסרת ההתקנים, עמך הסליחה."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["לייצר מפתחות OMEMO חדשים? פעולה זו תסיר את המפתחות הישנים שלך ואת כל ההודעות שהוצפנו בעבר לא תהיה לך אפשרות לפענח במכשיר הזה."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["זו הודעה שמוצפנת ב־OMEMO שכפי הנראה הלקוח שלך אינו תומך בה. ניתן למצוא פרטים נוספים בכתובת https://conversations.im/omemo"]," e.g. conversejs.org":[" למשל conversejs.org"],"Fetch registration form":["משוך טופס הרשמה"],"Tip: A list of public XMPP providers is available":["טיפ: רשימה פומבית של ספקי XMPP הינה זמינה"],"here":["כאן"],"Sorry, we\'re unable to connect to your chosen provider.":["לא הצלחנו להתחבר לספק שבחרת, עמך הסליחה."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["מצטערים, הספק שניתן לא תומך ברישום חשבונות in band. אנא נסה עם ספק אחר."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["משהו השתבש במהלך ההתחברות עם „%1$s”. החיבור הזה קיים בכלל?"],"Now logging you in":["כעת מחבר אותך פנימה"],"Registered successfully":["נרשם בהצלחה"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["הספק דחה את ניסיון הרישום שלך. נא לוודא את הנתונים שהקלדת."],"Leave this groupchat":["יציאה מההתכתבות הקבוצתית הזאת"],"Click to toggle the list of open groupchats":["יש ללחוץ כדי להציג/להסתיר את רשימת קבוצות ההתכתבות הפתוחות"],"Open Groupchats":["התכתבויות קבוצתיות פתוחות"],"Are you sure you want to leave the groupchat %1$s?":["לעזוב את ההתכתבות הקבוצתית %1$s?"],"Add":["הוסף"],"Add a Contact":["הוספת איש קשר"],"This contact is busy":["איש קשר זה עסוק"],"This contact is online":["איש קשר זה מקוון"],"This contact is offline":["איש קשר זה אינו מקוון"],"This contact is unavailable":["איש קשר זה לא זמין"],"This contact is away for an extended period":["איש קשר זה נעדר למשך זמן ממושך"],"This contact is away":["איש קשר זה הינו נעדר"],"Contact name":["שם איש קשר"],"Optional nickname":["כינוי כרשות"],"Sorry, could not find a contact with that name":["אין אפשרות למצוא איש קשר בשם זה, עמך הסליחה"],"This contact has already been added":["איש קשר זה כבר נוסף"],"Filter":["מסנן"],"Filter by contact name":["סינון לפי שם איש קשר"],"Filter by group name":["סינון לפי שם קבוצה"],"Filter by status":["סינון לפי מצב"],"Any":["כלשהו"],"Unread":["לא נקראו"],"Chatty":["קשקשנות"],"Extended Away":["היעדרות ממושכת"],"Click to remove %1$s as a contact":["יש ללחוץ כדי להסיר את איש הקשר %1$s"],"Click to accept the contact request from %1$s":["יש ללחוץ כדי לקבל בקשת איש קשר שנשלחה על ידי %1$s"],"Click to decline the contact request from %1$s":["יש ללחוץ כדי לסרב לבקשת הקשר שהגיעה מצד %1$s"],"Are you sure you want to decline this contact request?":["האם אתה בטוח כי ברצונך לסרב את בקשת איש קשר זה?"],"Contacts":["אנשי קשר"],"Add a contact":["הוסף איש קשר"],"Re-sync your contacts":["סנכרון אנשי הקשר שלך מחדש"]}}}')}}]);
 //# sourceMappingURL=he-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/hi-LC_MESSAGES-converse-po.js b/src/conversejs/locales/hi-LC_MESSAGES-converse-po.js
index b7a2b59ec648110583ee71f38bbfa6b2e9ceb38c..956241d7af25b2df21105107c0168817cf6f353e 100644
--- a/src/conversejs/locales/hi-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/hi-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[155],{433:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"hi"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["छोड़ें"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":["क्षमाँ करें, फ़ाईल अपलोड करने का यू.आ.एल. समझ नहीं आया।"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["क्षमाँ करें, आपकी फ़ाईल अपलोड नहीं हो पाई। सर्वर का जवाब: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["क्षमाँ करें, आपकी फ़ाईल अपलोड नहीं हो पाई।"],"Sorry, looks like file upload is not supported by your server.":["क्षमाँ करें, लगता है आपके सर्वर पर फ़ाईल अपलोड की सेवा उपलब्ध नहीं है।"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":["एक नया कमरा बना दिया गया है"],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":["आपको इस कमरे से प्रतिबन्धित कर दिया गया है"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":["आपको इस कमरे से बाहर कर दिया गया है"],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s को प्रतिबन्धित कर दिया गया है"],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out":["%1$s को बाहर कर दिया गया है"],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["दिक्कत"],"Sorry, something went wrong while trying to save your bookmark.":["क्षमाँ करें, आपका बुकमार्क सम्भालनें में कुछ गड़बड़ हुई।"],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":["ग्रुप चैट कौ अनबुकमार्क करें"],"Click to open this groupchat":["इस कमरे को खोलने के लिए यहाँ क्लिक करें"],"Click to toggle the bookmarks list":["बुकमार्क-सूची खोलें/बंद करें"],"Bookmarks":["बुकमार्क"],"Bookmark this groupchat":["ग्रुप चैट कौ बुकमार्क करें"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["इस बुकमार्क का नाम:"],"What should your nickname for this groupchat be?":[""],"Save":["सम्भालें"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["क्या आप वाकई \\"%1$s\\" के बुकमार्क को हटाना चाहते हैं?"],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":[""],"Show more":["और दिखाएं"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["इमोजी डालें"],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":["कोई फ़ाईल भेजें"],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":[""],"Refresh":[""],"Role":[""],"URL":[""],"%1$s is typing":["%1$s लिख रहे हैं"],"%1$s has stopped typing":["%1$s लिखते-लिखते रुक गए"],"%1$s has gone away":[""],"Remove messages":["सन्देश हटाएं"],"Write in the third person":["अन्य पुरुष में लिखें"],"Show this menu":["यह मेन्यू देखाएं"],"Hidden message":[""],"Message":["सन्देश"],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["क्या आप वाकई इस वार्तालाप के सन्देश हटाना चाहते हैं?"],"%1$s has gone offline":[""],"%1$s is busy":["%1$s व्यस्त है"],"%1$s is online":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Password":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":["यूज़रनेम"],"user@domain":["यूज़र@डोमेन"],"Please enter a valid XMPP address":["क्रिपया कोई मान्य एक्स.एम.पी.पी. ऐड्रेस डालें"],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This field is required":[""],"Join":["हिस्सा बनें"],"Enter a new Groupchat":["एक नये कमरे का हिस्सा बनें"],"name@conference.example.org":[""],"Groupchat address":[""],"Invite":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":["इस कमरे के बारे में और जानकारी दिखाएं"],"Query for Groupchats":[""],"Description:":["विवरण :"],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["छिपा हुआ"],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":["कोई कमरे नहीं मिले"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Role changed":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":[""],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Change user role to participant":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"A timeout occurred while trying to retract the message":[""],"Configure":[""],"Configure this groupchat":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["इस कमरे को छोड़ें"],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[155],{521:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"hi"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["छोड़ें"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":["क्षमाँ करें, फ़ाईल अपलोड करने का यू.आ.एल. समझ नहीं आया।"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["क्षमाँ करें, आपकी फ़ाईल अपलोड नहीं हो पाई। सर्वर का जवाब: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["क्षमाँ करें, आपकी फ़ाईल अपलोड नहीं हो पाई।"],"Sorry, looks like file upload is not supported by your server.":["क्षमाँ करें, लगता है आपके सर्वर पर फ़ाईल अपलोड की सेवा उपलब्ध नहीं है।"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":["एक नया कमरा बना दिया गया है"],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":["आपको इस कमरे से प्रतिबन्धित कर दिया गया है"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":["आपको इस कमरे से बाहर कर दिया गया है"],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s को प्रतिबन्धित कर दिया गया है"],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out":["%1$s को बाहर कर दिया गया है"],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["दिक्कत"],"Sorry, something went wrong while trying to save your bookmark.":["क्षमाँ करें, आपका बुकमार्क सम्भालनें में कुछ गड़बड़ हुई।"],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":["ग्रुप चैट कौ अनबुकमार्क करें"],"Click to open this groupchat":["इस कमरे को खोलने के लिए यहाँ क्लिक करें"],"Click to toggle the bookmarks list":["बुकमार्क-सूची खोलें/बंद करें"],"Bookmarks":["बुकमार्क"],"Bookmark this groupchat":["ग्रुप चैट कौ बुकमार्क करें"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["इस बुकमार्क का नाम:"],"What should your nickname for this groupchat be?":[""],"Save":["सम्भालें"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["क्या आप वाकई \\"%1$s\\" के बुकमार्क को हटाना चाहते हैं?"],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":[""],"Show more":["और दिखाएं"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["इमोजी डालें"],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":["कोई फ़ाईल भेजें"],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":[""],"Refresh":[""],"Role":[""],"URL":[""],"%1$s is typing":["%1$s लिख रहे हैं"],"%1$s has stopped typing":["%1$s लिखते-लिखते रुक गए"],"%1$s has gone away":[""],"Remove messages":["सन्देश हटाएं"],"Write in the third person":["अन्य पुरुष में लिखें"],"Show this menu":["यह मेन्यू देखाएं"],"Hidden message":[""],"Message":["सन्देश"],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["क्या आप वाकई इस वार्तालाप के सन्देश हटाना चाहते हैं?"],"%1$s has gone offline":[""],"%1$s is busy":["%1$s व्यस्त है"],"%1$s is online":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Password":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":["यूज़रनेम"],"user@domain":["यूज़र@डोमेन"],"Please enter a valid XMPP address":["क्रिपया कोई मान्य एक्स.एम.पी.पी. ऐड्रेस डालें"],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":["हिस्सा बनें"],"Enter a new Groupchat":["एक नये कमरे का हिस्सा बनें"],"name@conference.example.org":[""],"Groupchat address":[""],"Invite":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":["इस कमरे के बारे में और जानकारी दिखाएं"],"Query for Groupchats":[""],"Description:":["विवरण :"],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["छिपा हुआ"],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":["कोई कमरे नहीं मिले"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Role changed":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":[""],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Change user role to participant":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"A timeout occurred while trying to retract the message":[""],"Configure":[""],"Configure this groupchat":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["इस कमरे को छोड़ें"],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=hi-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/hu-LC_MESSAGES-converse-po.js b/src/conversejs/locales/hu-LC_MESSAGES-converse-po.js
index 0a3f8515e197221c68aeaf1d0185bbd5939b7a5a..6e171edba0240be7758ac20cc671ec5b5a25e45d 100644
--- a/src/conversejs/locales/hu-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/hu-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[156],{434:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"hu"},"Create your account":["Hozza létre fiókját"],"Please enter the XMPP provider to register with:":["Kérjük, adja meg az XMPP szolgáltatót a regisztráláshoz:"],"Already have a chat account?":["Már van csevegő fiókja?"],"Log in here":["Bejelentkezés itt"],"Account Registration:":["Fiók Regisztráció:"],"Register":["Regisztráció"],"Choose a different provider":["Válasszon egy másik szolgáltatót"],"Hold tight, we\'re fetching the registration form…":["Tartson ki, most kérjük le a regisztrációs űrlapot…"],"Cancel":["Mégsem"],"The connection has dropped, attempting to reconnect.":["A kapcsolat megszakadt, megpróbál újra csatlakozni."],"An error occurred while connecting to the chat server.":["Hiba történt a chat szerverhez való csatlakozás közben."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sajnáljuk, nem tudtunk csatlakozni a domainhez tartozó XMPP gazdagéphez: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Az XMPP kiszolgáló nem ajánlott fel támogatott hitelesítési mechanizmust"],"Sorry, could not determine upload URL.":["Sajnáljuk, nem sikerült meghatározni a feltöltési URL-t."],"Sorry, could not determine file upload URL.":["Sajnáljuk, nem sikerült meghatározni a fájl feltöltési URL-jét."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sajnáljuk, a fájlt nem sikerült feltölteni. A szervered válasza: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Sajnáljuk, a fájlt nem sikerült feltölteni."],"Sorry, looks like file upload is not supported by your server.":["Sajnálom, úgy tűnik, hogy a szerver nem támogatja a fájl feltöltést."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["A fájlod mérete: %1$s meghaladja a szervered által megengedettet, ami: %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Ez a konferencia NEM névtelen"],"This groupchat now shows unavailable members":["A konferencia mostantól nem elérhető tagokat mutat"],"This groupchat does not show unavailable members":["Ez a konferencia nem mutat elérhetetlen tagokat"],"The groupchat configuration has changed":["A konferencia beállítása megváltozott"],"This groupchat is now no longer anonymous":["A konferencia most már nem névtelen"],"This groupchat is now semi-anonymous":["A konferencia most már félig névtelen"],"This groupchat is now fully-anonymous":["A konferencia most már teljesen névtelen"],"A new groupchat has been created":["Létrejött egy új konferencia"],"Your nickname has been automatically set to %1$s":["A beceneve automatikusan ez lett: %1$s"],"Your nickname has been changed to %1$s":["A beceneved a következőre módosult: %1$s"],"You have been banned from this groupchat":["Ki lettél tiltva ebből a konferenciából"],"You have been kicked from this groupchat":["Ki lettél dobva ebből a konferenciából"],"You have been removed from this groupchat because of an affiliation change":["Taglista módosítás miatt kiléptettünk a konferenciából"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Kiléptettünk a konferenciából, mert mostantól csak a taglistán szereplők lehetnek jelen"],"You have been removed from this groupchat because the service hosting it is being shut down":["Kiléptettük a konferenciából, mert a szolgáltatás leállításra került"],"You\'re not allowed to register yourself in this groupchat.":["Nem regisztrálhatod magad ebben a konferenciában."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nem regisztrálhatod magad ebben a konferenciában, mert meghívás alapú."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nem lehet regisztrálni a becenevedet ebben a konferenciában, a regisztrációt nem támogatja."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nem lehet regisztrálni a becenevedet ebben a konferenciában, érvénytelen az űrlap."],"Topic set by %1$s":["Témát beállította: %1$s"],"Topic cleared by %1$s":["A témát törölte: %1$s"],"%1$s has been banned":["%1$s ki lett tiltva"],"%1$s\'s nickname has changed":["%1$s beceneve módosult"],"%1$s has been kicked out":["%1$s ki lett dobva"],"%1$s has been removed because of an affiliation change":["%1$s el lett távolítva, tagság változás miatt"],"%1$s has been removed for not being a member":["%1$s el lett távolítva, mert nem volt tag"],"%1$s is no longer an admin of this groupchat":["%1$s már nem admin ebben a konferenciában"],"%1$s is no longer an owner of this groupchat":["%1$s már nem tulajdonos ebben a konferenciában"],"%1$s is no longer banned from this groupchat":["%1$s már nincs kitiltva ebből a konferenciából"],"%1$s is now an %2$s of this groupchat":["%1$s most már %2$s ebben a konferenciában"],"The nickname you chose is reserved or currently in use, please choose a different one.":["A kiválasztott becenév fenntartva vagy jelenleg használatban van, kérjük, válasszon másikat."],"You are not on the member list of this groupchat.":["Nem vagy a konferencia taglistáján."],"You have been banned from this groupchat.":["Ki lettél tiltva ebből a konferenciából."],"You are not allowed to create new groupchats.":["Nem hozhatsz létre új konferenciákat."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["A beceneved nem felel meg a konferencia szabályzatának."],"This groupchat does not (yet) exist.":["Ez a konferencia (még) nem létezik."],"This groupchat has reached its maximum number of participants.":["Ez a konferencia elérte a maximális jelenlévők számát."],"Remote server not found":["Távoli kiszolgáló nem található"],"The explanation given is: \\"%1$s\\".":["A kapott magyarázat: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s meghívott a(z) %2$s nevű csevegőszobába"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s meghívott a(z) %2$s nevű csevegőszobába. Indoka: \\"%3$s\\""],"Error":["Hiba"],"Sorry, something went wrong while trying to save your bookmark.":["Sajnáljuk, valami hiba történt a könyvjelző mentése közben."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Névjegyeim"],"Pending contacts":["Függő kapcsolatok"],"Contact requests":["Partnerfelvételi kérések"],"Ungrouped":["Nem csoportosított"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sajnáljuk, hiba történt a(z) %1$s nevű névjegy hozzáadása során."],"This client does not allow presence subscriptions":["Ez a kliens nem engedélyezi a jelenlét követését"],"Click to hide these contacts":["Kattintson ide a névjegyek elrejtéséhez"],"Unbookmark this groupchat":["Konferencia könyvjelzőjének törlése"],"Click to open this groupchat":["Belépés a konferenciába"],"Click to toggle the bookmarks list":["Kattintson a könyvjelzők listájára váltáshoz"],"Bookmarks":["Könyvjelzők"],"Bookmark this groupchat":["Konferencia megjelölése"],"Would you like this groupchat to be automatically joined upon startup?":["Szeretné ha induláskor automatikusan csatlakozna ehhez a konferenciához?"],"The name for this bookmark:":["A könyvjelző neve legyen:"],"What should your nickname for this groupchat be?":["Mi legyen a beceneve ebben a konferenciában?"],"Save":["Mentés"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Biztosan el szeretné távolítani a(z) \\"%1$s\\" könyvjelzőt?"],"Close":["Bezár"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Hangfájl letöltése \\"%1$s\\""],"Download file \\"%1$s\\"":["Fájl letöltése \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Üzenetverziók"],"Retry":[""],"Uploading file:":["Fájl feltöltése:"],"This message has been edited":["Ez az üzenet szerkesztve van"],"Show more":["Mutass többet"],"No message history available.":["Nem található előzmény."],"Search results":["Keresés eredménye"],"Search":["Keresés"],"Insert emojis":["Emotikonok beszúrása"],"Start a call":["Hívás indítása"],"Choose a file to send":["Válasszon ki egy fájlt küldéshez"],"Click to write as a normal (non-spoiler) message":["Kattintson normál (nem spoiler) üzenet írásához"],"Click to write your message as a spoiler":["Kattintson spoiler üzenet írásához"],"The User\'s Profile Image":["A felhasználó profilképe"],"Trusted":["Megbízható"],"Untrusted":["Megbízhatatlan"],"OMEMO Fingerprints":["OMEMO Ujjlenyomatok"],"Remove as contact":["Távolítsa el, mint kapcsolatot"],"XMPP Address":["XMPP Cím"],"Email":["Email"],"Full Name":["Teljes név"],"Nickname":["Becenév"],"Refresh":["Frissítés"],"Role":["Szerepkör"],"URL":["URL"],"%1$s is typing":["%1$s éppen ír"],"%1$s has stopped typing":["%1$s abbahagyta a gépelést"],"%1$s has gone away":["%1$s távol van"],"Remove messages":["Üzenetek törlése"],"Write in the third person":["Írjon egyes szám harmadik személyben"],"Show this menu":["Mutasd a menüt"],"Hidden message":["Rejtett üzenet"],"Message":["Üzenet"],"Optional hint":["Választható tipp"],"You have unread messages":["Olvasatlan üzenetei vannak"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Biztosan törölni szeretné ebből a beszélgetésből származó üzeneteket?"],"%1$s has gone offline":["%1$s nem elérhetővé vált"],"%1$s is busy":["%1$s elfoglalt"],"%1$s is online":["%1$s elérhető"],"Sorry, something went wrong while trying to refresh":["Sajnáljuk, valami hiba történt frissítés közben"],"Are you sure you want to remove this contact?":["Valóban törölni szeretné a csevegőpartnerét?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sajnáljuk, hiba történt %1$s mint ismerős eltávolítása közben."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["A teljesítmény javítása érdekében a böngészőben tároljuk az adatokat. Törölje a jelölőnégyzetet, ha ez nyilvános számítógép vagy ha törölni kívánja adatait, amikor kijelentkezik. Fontos, hogy kifejezetten jelentkezzen ki, mert előfordulhat, hogy nem az összes tárolt adat törlődik. Kérjük, vegye figyelembe, ha nem megbízható eszközt használ, hogy az OMEMO titkosítás nem elérhető."],"This is a trusted device":["Ez egy megbízható eszköz"],"Create an account":["Fiók létrehozása"],"Don\'t have a chat account?":["Nincs csevegő fiókja?"],"Log in":["Bejelentkezés"],"Disconnected":["Szétkapcsolva"],"Click here to log in anonymously":["Kattintson ide a névtelen bejelentkezéshez"],"Username":["Felhasználónév"],"user@domain":["felhasználó@tartomány"],"Please enter a valid XMPP address":["Kérjük, adjon meg érvényes XMPP címet"],"Chat Contacts":["Csevegőpartnerek"],"Toggle chat":["Csevegőablak"],"Click to restore this chat":["A csevegés visszaállítása"],"Minimized":["Minimalizálva"],"This field is required":["Ez a mező kötelező"],"Join":["Csatlakozás"],"Enter a new Groupchat":["Adjon meg új Konferenciát"],"name@conference.example.org":["név@konferencia.példa.hu"],"Groupchat address":["Konferencia címe"],"Invite":["Meghívás"],"Show groupchats":["Konferenciák mutatása"],"Server address":["Kiszolgáló címe"],"Show more information on this groupchat":["További információk a konferenciáról"],"Query for Groupchats":["Konferenciák lekérdezése"],"Description:":["Leírás:"],"Groupchat Address (JID):":["Konferencia címe (JID):"],"Participants:":["Résztvevők:"],"Features:":["Jellemzők:"],"Requires authentication":["Azonosítás szükséges"],"Hidden":["Rejtett"],"Requires an invitation":["Meghívás szükséges"],"Moderated":["Moderált"],"Non-anonymous":["NEM névtelen"],"Open":["Nyitott"],"Permanent":["Állandó"],"Public":["Nyilvános"],"Semi-anonymous":["Félig névtelen"],"Temporary":["Ideiglenes"],"Unmoderated":["Moderálatlan"],"conference.example.org":["konferencia@pelda.hu"],"No groupchats found":["Nem találhatók szobák"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":["Moderátor Eszközök"],"No users with that affiliation found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Témakör"],"Topic author":["Téma szerző"],"Groupchat address (JID)":["Konferencia címe (JID)"],"Message archiving":["Üzenetarchiválás"],"Messages are archived on the server":["Üzenetek archiválva vannak a kiszolgálón"],"Description":["Leírás"],"Features":["Jellemzők"],"This groupchat is not publicly searchable":["Ez a konferencia nyilvánosan nem kereshető"],"This groupchat is restricted to members only":["Ez a konferencia kizárólag tagoknak szól"],"Members only":["Csak tagoknak"],"Participants entering this groupchat need to request permission to write":["A belépő résztvevőknek engedélyt kell kérni, hogy írhassanak"],"Name":["Név"],"This groupchat does not require a password upon entry":["Ez a konferencia nem igényel jelszót belépéskor"],"No password required":["Nem szükséges jelszó"],"Not anonymous":["Nem névtelen"],"All other groupchat participants can see your XMPP address":["Minden konferencia-résztvevő láthatja az XMPP felhasználónevét"],"Not moderated":["Moderálatlan"],"Participants entering this groupchat can write right away":["A belépő résztvevők egyből írhatnak is ide"],"Online users":["Jelenlevők"],"Anyone can join this groupchat":["Bárki csatlakozhat a konferenciához"],"This groupchat requires a password before entry":["A konferenciába belépéshez jelszó szükséges"],"Password protected":["Jelszóval védve"],"Persistent":["Állandó"],"This groupchat persists even if it\'s unoccupied":["Ez a konferencia akkor is fennmarad, ha üres"],"Only moderators can see your XMPP address":["Csak a moderátorok láthatják az Ön XMPP felhasználónevét"],"This groupchat will disappear once the last person leaves":["Ez a konferencia eltűnik, amint az utolsó ember elhagyja"],"This groupchat is publicly searchable":["Ez a konferencia nyilvánosan kereshető"],"Groupchat info for %1$s":["Konferencia infó számára: %1$s"],"You\'re not allowed to send messages in this room":["Nem regisztrálhatod magad ebben a szobában."],"The conversation has moved. Click below to enter.":["A beszélgetés elköltözött. Kattintson az alábbi gombra, hogy belépjen."],"This groupchat no longer exists":["Ez a szoba nem létezik többé."],"Enter groupchat":["Belépés a konferenciába"],"Please choose your nickname":["Kérjük, válasszon becenevet"],"This groupchat requires a password":["Ez a konferencia jelszót igényel"],"Password: ":["Jelszó: "],"Submit":["Küldés"],"This user is a moderator.":["Ez a felhasználó egy moderátor."],"This user can send messages in this groupchat.":["Ez a felhasználó küldhet üzeneteket a konferenciában."],"This user can NOT send messages in this groupchat.":["Ez a felhasználó NEM küldhet üzeneteket a konferenciában."],"Owner":["Tulajdonos"],"Admin":["Adminisztrátor"],"Member":["Tag"],"Moderator":["Moderátor"],"Visitor":["Látogató"],"Click to mention %1$s in your message.":["Kattintson, hogy megemlítse őt: %1$s."],"Participants":["Résztvevők"],"%1$s has entered the groupchat":["%1$s belépett a konferenciába"],"%1$s has left the groupchat":["%1$s elhagyta a konferenciát"],"%1$s is now a moderator":["%1$s most már moderátor"],"%1$s is no longer a moderator":["%1$s többé már nem moderátor"],"%1$s has been muted":["%1$s el lett némítva"],"Change user\'s affiliation to admin":["A felhasználó adminisztrátorrá tétele"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["A felhasználó szerepének változtatása résztvevőre"],"Kick user from groupchat":["Felhasználó kirúgása a konferenciából"],"Write in 3rd person":["Írjon egyes szám harmadik személyben"],"Grant membership to a user":["Tagság megadása a felhasználónak"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["A felhasználó ne küldhessen üzeneteket"],"Change your nickname":["Becenév módosítása"],"Grant moderator role to user":["Moderátori jog adása a felhasználónak"],"Grant ownership of this groupchat":["Konferencia tulajdonjogának megadása"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Konferencia témájának beállítása"],"Set groupchat subject (alias for /subject)":["Állítsa be a konferencia tárgyát (álnév a /tárgynak)"],"Allow muted user to post messages":["Elnémított felhasználók is küldhetnek üzeneteket"],"Configure":[""],"Configure this groupchat":["Konferencia beállítása"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Résztvevők listájának elrejtése"],"Forbidden: you do not have the necessary role in order to do that.":["Tilos: nincs meg a szükséges szerepköre, hogy ezt megtehesse."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Tilos: nincs meg a szükséges kapcsolata, hogy ezt megtehesse."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Hiba: a \\"%1$s\\" parancs két argumentumot tartalmaz, a felhasználó becenevét és adott esetben az okát."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["felhasznalo@pelda.hu"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Hiba: érvénytelen számú paraméter"],"This action was done by %1$s.":["Ezt a műveletet végezte: %1$s."],"The reason given is: \\"%1$s\\".":["Ennek ez az oka: \\"%1$s\\"."],"Groupchats":["Konferenciák"],"Add a new groupchat":["Új konferencia létrehozása"],"Query for groupchats":["Konferenciák lekérdezése"],"Announcements":[""],"Notification from %1$s":["Értesítő üzenet innen: %1$s"],"%1$s says":["%1$s mondja"],"has gone offline":["nem elérhetővé vált"],"has gone away":["távol van"],"is busy":["elfoglalt"],"has come online":["elérhető lett"],"wants to be your contact":["szeretne ismerősöd lenni"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Névjegy"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Nyílt Forráskódú %2$s XMPP chat kliens az %3$s Opkode %2$s jóvoltából"],"%1$s Translate %2$s it into your own language":["%1$s Lefordítani %2$s a saját nyelvére"],"Log out":["Kijelentkezés"],"Click to change your chat status":["Ide kattintva módosíthatja a csevegési állapotát"],"Show details about this chat client":["További információk a csevegő kliensről"],"Your avatar image":["A profilképed"],"Checkbox for selecting the following fingerprint":["Jelölőnégyzet az alábbi ujjlenyomat kiválasztására"],"Device without a fingerprint":["Eszköz ujjlenyomat nélkül"],"Other OMEMO-enabled devices":["Más OMEMO-engedélyezett eszközök"],"Checkbox to select fingerprints of all other OMEMO devices":["Jelölőnégyzet az összes egyéb OMEMO eszköz ujjlenyomatának kijelöléséhez"],"Remove checked devices and close":["Ellenőrzött eszközök eltávolítása és bezárás"],"Select all":["Mindent kijelöl"],"This device\'s OMEMO fingerprint":["Készülékének OMEMO ujjlenyomata"],"Generate new keys and fingerprint":["Új kulcsok és ujjlenyomat létrehozása"],"Your Profile":["Profilod"],"XMPP Address (JID)":["XMPP Cím (JID)"],"Save and close":["Mentés és bezárás"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Használjon vesszőket több szerep szétválasztásához. A szerepek a neved mellett jelennek meg a csevegési üzenetekben."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Sajnáljuk, valami hiba történt a profiladatok mentése közben."],"You can check your browser\'s developer console for any error output.":["Ellenőrizheti a böngésző fejlesztői konzolt bármilyen hiba kimenet esetén."],"Away":["Távol"],"Busy":["Elfoglalt"],"Custom status":["Egyéni állapot"],"Offline":["Nem elérhető"],"Online":["Elérhető"],"Away for long":["Hosszú ideje távol"],"Change chat status":["Chat-állapot módosítása"],"Personal status message":["Személyes állapot üzenet"],"I am %1$s":["%1$s vagyok"],"Are you sure you want to log out?":["Biztosan ki akar jelentkezni?"],"online":["elérhető"],"busy":["elfoglalt"],"away for long":["sokáig távol"],"away":["távol"],"offline":["nem elérhető"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sajnálom, nem lehet visszafejteni a kapott OMEMO üzenetet hiba miatt."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["Úgy tűnik, hogy %1$s egyik kliense sem támogatja az OMEMO-t . Titkosított beszélgetés már nem lesz lehetséges ezen a konferencián."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Üzenetek küldése egyszerű szövegként"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Sajnáljuk, de hiba történt az eszközök eltávolítása közben."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Biztos, hogy új OMEMO kulcsokat akar létrehozni? Ez eltávolítja a régi kulcsait, és minden korábbi titkosított üzenete visszafejthetetlenné válik ezen az eszközön."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sajnáljuk, de nem tudunk elküldeni egy titkosított üzenetet, mivel a %1$s távoli szervere nem található"],"Unable to send an encrypted message due to an unexpected error.":["Nem lehet elküldeni egy titkosított üzenetet egy váratlan hiba miatt."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ez egy OMEMO kódolt üzenet, amelyet az ügyfele úgy tűnik, hogy nem támogatja. További információkat itt talál: https://conversations.im/omemo"]," e.g. conversejs.org":[" pl.: conversejs.org"],"Fetch registration form":["Regisztrációs űrlap"],"Tip: A list of public XMPP providers is available":["Tipp: A nyílvános XMPP szolgáltatókról egy lista elérhető"],"here":["itt"],"Sorry, we\'re unable to connect to your chosen provider.":["Sajnáljuk, de nem tudunk csatlakozni a választott szolgáltatóhoz."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["A megadott szolgáltató nem támogatja a csevegőn keresztüli regisztrációt. Próbáljon meg egy másikat."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Valami hiba történt a következőhöz kapcsolódás közben: \\"%1$s\\". Biztos benne, hogy létezik?"],"Now logging you in":["Most bejelentkezel"],"Registered successfully":["Sikeres regisztráció"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["A szolgáltató visszautasította a regisztrációs kérelmet. Kérem ellenőrízze a bevitt adatok pontosságát."],"Leave this groupchat":["Konferencia elhagyása"],"Click to toggle the list of open groupchats":["Kattintsunk a konferenciák listájára váltáshoz"],"Open Groupchats":["Használatban"],"Are you sure you want to leave the groupchat %1$s?":["Biztosan el akarja hagyni a konferenciát: %1$s?"],"Add":["Hozzáad"],"Add a Contact":["Új névjegy felvétele"],"This contact is busy":["Ez az ismerős elfoglalt"],"This contact is online":["Ez az ismerős elérhető"],"This contact is offline":["Ez az ismerős nem elérhető"],"This contact is unavailable":["Ez az ismerős elérhetetlen"],"This contact is away for an extended period":["Ez az ismerős hosszú ideje távol van"],"This contact is away":["Ez az ismerős távol van"],"Contact name":["Partner neve"],"Optional nickname":["Választható becenév"],"Sorry, could not find a contact with that name":["Sajnáljuk, de nem találunk csevegőpartnert ezzel a névvel."],"Filter":["Szűrő"],"Filter by contact name":["Szűrés névjegy szerint"],"Filter by group name":["Szűrés csoport szerint"],"Filter by status":["Szűrés állapot szerint"],"Any":["Bármi"],"Unread":["Olvasatlan"],"Chatty":["Beszédes"],"Extended Away":["Hosszú távollét"],"Click to remove %1$s as a contact":["Kattintson %1$s nevű ismerősének eltávolításához"],"Click to accept the contact request from %1$s":["Kattintson %1$s kapcsolatkérésének elfogadásához"],"Click to decline the contact request from %1$s":["Kattintson %1$s kapcsolatkérésének elutasításához"],"Are you sure you want to decline this contact request?":["Valóban elutasítja ezt a partnerkérelmet?"],"Contacts":["Kapcsolatok"],"Add a contact":["Új névjegy felvétele"],"Re-sync your contacts":["Újra szinkronizálni a névjegyeket"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[156],{522:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"hu"},"Create your account":["Hozza létre fiókját"],"Please enter the XMPP provider to register with:":["A regisztrációhoz adja meg az XMPP szolgáltatót:"],"Already have a chat account?":["Már van csevegőfiókja?"],"Log in here":["Bejelentkezés itt"],"Account Registration:":["Fiókregisztráció:"],"Register":["Regisztráció"],"Choose a different provider":["Válasszon egy másik szolgáltatót"],"Hold tight, we\'re fetching the registration form…":["Tartson ki, most kérjük le a regisztrációs űrlapot…"],"Cancel":["Mégse"],"The connection has dropped, attempting to reconnect.":["A kapcsolat megszakadt, megpróbál újra csatlakozni."],"An error occurred while connecting to the chat server.":["Hiba történt a csevegőkiszolgálóhoz kapcsolódáskor."],"Your XMPP address and/or password is incorrect. Please try again.":["Az XMPP-azonosítója vagy jelszava helytelen. Próbálja újra."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sajnáljuk, nem tudtunk csatlakozni a domainhez tartozó XMPP gazdagéphez: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Az XMPP kiszolgáló nem ajánlott fel támogatott hitelesítési mechanizmust"],"Undecryptable OMEMO message":["Nem visszafejthető OMEMO üzenet"],"Sorry, could not determine upload URL.":["Sajnáljuk, nem sikerült meghatározni a feltöltési URL-t."],"Sorry, could not determine file upload URL.":["Sajnáljuk, nem sikerült meghatározni a fájl feltöltési URL-jét."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sajnáljuk, a fájlt nem sikerült feltölteni. A kiszolgálója válasza: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Sajnáljuk, a fájlt nem sikerült feltölteni."],"You\'re not allowed to retract your message.":["Nem vonhatja vissza az üzenetét."],"Sorry, an error occurred while trying to retract your message.":["Sajnáljuk, hiba történt az üzenet visszavonásakor."],"You\'re not allowed to send a message.":["Nem küldhet üzenetet."],"Sorry, an error occurred while trying to send your message.":["Sajnáljuk, hiba történt az üzenet elküldésekor."],"Sorry, looks like file upload is not supported by your server.":["Sajnáljuk, úgy tűnik, hogy a kiszolgálója a feltöltést nem támogatja."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["A fájl mérete, %1$s, meghaladja a kiszolgáló által megengedettet, amely %2$s."],"Smileys and emotions":["Mosolyok és érzelmek"],"People":["Emberek"],"Activities":["Tevékenységek"],"Travel":["Utazás"],"Objects":["Tárgyak"],"Animals and nature":["Állatok és természet"],"Food and drink":["Étel és ital"],"Symbols":["Szimbólumok"],"Flags":["Zászlók"],"Stickers":["Matricák"],"This groupchat is not anonymous":["Ez a konferencia nem névtelen"],"This groupchat now shows unavailable members":["Ez a konferencia mostantól megjeleníti az elérhetetlen tagokat"],"This groupchat does not show unavailable members":["Ez a konferencia nem jeleníti meg az elérhetetlen tagokat"],"The groupchat configuration has changed":["A konferencia beállítása megváltozott"],"Groupchat logging is now enabled":["A konferencia naplózása mostantól bekapcsolt"],"Groupchat logging is now disabled":["A konferencia naplózása mostantól kikapcsolt"],"This groupchat is now no longer anonymous":["A konferencia most már nem névtelen"],"This groupchat is now semi-anonymous":["A konferencia most már félig névtelen"],"This groupchat is now fully-anonymous":["A konferencia most már teljesen névtelen"],"A new groupchat has been created":["Létrejött egy új konferencia"],"Your nickname has been automatically set to %1$s":["A beceneve automatikusan ez lett: %1$s"],"Your nickname has been changed to %1$s":["A beceneve a következőre módosult: %1$s"],"You have been banned from this groupchat":["Ki lett tiltva ebből a konferenciából"],"You have exited this groupchat due to a technical problem":["Műszaki probléma miatt kilépett ebből a konferenciából"],"You have been kicked from this groupchat":["Ki lett rúgva ebből a konferenciából"],"You have been removed from this groupchat because of an affiliation change":["Taglista módosítás miatt ki lett léptetve ebből a konferenciából"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Kiléptettük a konferenciából, mert mostantól csak a taglistán szereplők lehetnek jelen"],"You have been removed from this groupchat because the service hosting it is being shut down":["Kiléptettük a konferenciából, mert a szolgáltatás leállításra került"],"Your retraction was not delivered because you\'re not present in the groupchat.":["A visszavonása nem lett elküldve, mert nincs jelen a konferenciában."],"Your message was not delivered because you weren\'t allowed to send it.":["Az üzenete nem lett elküldve, mert nem volt hozzá jogosultsága."],"Your message was not delivered because you\'re not present in the groupchat.":["Az üzenete nem lett elküldve, mert nem volt jelen a konferenciában."],"A timeout happened while while trying to retract your message.":["Időtúllépés történt, amikor megpróbálta visszavonni az üzenetet."],"You\'re not allowed to register yourself in this groupchat.":["Nem regisztrálhatod magad ebben a konferenciában."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nem regisztrálhatod magad ebben a konferenciában, mert meghívás alapú."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nem lehet regisztrálni a becenevedet ebben a konferenciában, a regisztrációt nem támogatja."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nem lehet regisztrálni a becenevedet ebben a konferenciában, érvénytelen az űrlap."],"Topic set by %1$s":["Témát beállította: %1$s"],"Topic cleared by %1$s":["A témát törölte: %1$s"],"%1$s has been banned by %2$s":["%2$s kitiltotta: %1$s"],"%1$s has been banned":["%1$s ki lett tiltva"],"%1$s\'s nickname has changed":["%1$s beceneve módosult"],"%1$s has been kicked out by %2$s":["%2$s kidobta: %1$s"],"%1$s has been kicked out":["%1$s ki lett dobva"],"%1$s has been removed because of an affiliation change":["%1$s el lett távolítva, tagság változás miatt"],"%1$s has been removed for not being a member":["%1$s el lett távolítva, mert nem volt tag"],"%1$s is no longer an admin of this groupchat":["%1$s már nem admin ebben a konferenciában"],"%1$s is no longer an owner of this groupchat":["%1$s már nem tulajdonos ebben a konferenciában"],"%1$s is no longer banned from this groupchat":["%1$s már nincs kitiltva ebből a konferenciából"],"%1$s is no longer a member of this groupchat":["%1$s már nem tagja ennek a konferenciának"],"%1$s is now a member of this groupchat":["%1$s már tagja ennek a konferenciának"],"%1$s is now an %2$s of this groupchat":["%1$s most már %2$s ebben a konferenciában"],"The nickname you chose is reserved or currently in use, please choose a different one.":["A kiválasztott becenév fenntartva vagy jelenleg használatban van, kérjük, válasszon másikat."],"Password incorrect":["A jelszó helytelen"],"You are not on the member list of this groupchat.":["Nem vagy a konferencia taglistáján."],"You have been banned from this groupchat.":["Ki lettél tiltva ebből a konferenciából."],"You are not allowed to create new groupchats.":["Nem hozhatsz létre új konferenciákat."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["A beceneved nem felel meg a konferencia szabályzatának."],"This groupchat does not (yet) exist.":["Ez a konferencia (még) nem létezik."],"This groupchat has reached its maximum number of participants.":["Ez a konferencia elérte a maximális jelenlévők számát."],"Remote server not found":["Távoli kiszolgáló nem található"],"The explanation given is: \\"%1$s\\".":["A kapott magyarázat: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s meghívott a(z) %2$s nevű csevegőszobába"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s meghívott a(z) %2$s nevű csevegőszobába. Indoka: \\"%3$s\\""],"Error":["Hiba"],"Sorry, something went wrong while trying to save your bookmark.":["Sajnáljuk, valami hiba történt a könyvjelző mentése közben."],"Timeout Error":["Időtúllépési hiba"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["A kiszolgáló nem adta vissza a könyvjelzőit a megengedett időn belül. Újratöltheti az oldalt, hogy újra lekérje őket."],"My contacts":["Csevegőpartnerek"],"Pending contacts":["Függő csevegőpartnerek"],"Contact requests":["Partnerfelvételi kérések"],"Ungrouped":["Nem csoportosított"],"New messages":["Új üzenetek"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sajnáljuk, hiba történt a(z) %1$s csevegőpartner hozzáadásakor."],"This client does not allow presence subscriptions":["Ez a kliens nem engedélyezi a jelenlét követését"],"Click to hide these contacts":["Kattintson ide a csevegőpartnerek elrejtéséhez"],"Unbookmark this groupchat":["Konferencia könyvjelzőjének törlése"],"Click to open this groupchat":["Belépés a konferenciába"],"Click to toggle the bookmarks list":["Kattintson a könyvjelzők listájára váltáshoz"],"Bookmarks":["Könyvjelzők"],"Bookmark this groupchat":["Konferencia megjelölése"],"Would you like this groupchat to be automatically joined upon startup?":["Szeretné ha induláskor automatikusan csatlakozna ehhez a konferenciához?"],"The name for this bookmark:":["A könyvjelző neve legyen:"],"What should your nickname for this groupchat be?":["Mi legyen a beceneve ebben a konferenciában?"],"Save":["Mentés"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Biztosan el szeretné távolítani a(z) \\"%1$s\\" könyvjelzőt?"],"Unbookmark":["Könyvjelző eltávolítása"],"Bookmark":["Könyvjelzőzés"],"Close":["Bezárás"],"OK":["OK"],"Image: ":["Kép: "],"Download audio file \\"%1$s\\"":["„%1$s” hangfájl letöltése"],"Download file \\"%1$s\\"":["„%1$s” fájl letöltése"],"Cancel Editing":["Szerkesztés megszakítása"],"Edit":["Szerkesztés"],"Retract":["Visszavonás"],"Message versions":["Üzenetverziók"],"Retry":["Újra"],"Uploading file:":["Fájl feltöltése:"],"%1$s has removed this message":["%1$s eltávolította ezt az üzenetet"],"This message has been edited":["Ez az üzenet szerkesztve van"],"Show more":["Több megjelenítése"],"Show less":["Kevesebb megjelenítése"],"No message history available.":["Nem található előzmény."],"Search results":["Keresés eredménye"],"Search":["Keresés"],"Insert emojis":["Emodzsik beszúrása"],"Send the message":["Üzenet elküldése"],"Start a call":["Hívás indítása"],"Message characters remaining":["Hátralévő karakterek"],"Hide participants":["Résztvevők elrejtése"],"Show participants":["Résztvevők megjelenítése"],"Choose a file to send":["Válasszon egy küldendő fájlt"],"Click to write as a normal (non-spoiler) message":["Kattintson normál (nem spoiler) üzenet írásához"],"Click to write your message as a spoiler":["Kattintson spoiler üzenet írásához"],"The User\'s Profile Image":["A felhasználó profilképe"],"Trusted":["Megbízható"],"Untrusted":["Megbízhatatlan"],"OMEMO Fingerprints":["OMEMO ujjlenyomatok"],"No OMEMO-enabled devices found":["Nem található OMEMO-képes eszköz"],"Remove as contact":["Eltávolítás a csevegőpartnerekből"],"XMPP Address":["XMPP-cím"],"Email":["E-mail"],"Full Name":["Teljes név"],"Nickname":["Becenév"],"Refresh":["Frissítés"],"Role":["Szerepkör"],"URL":["URL"],"%1$s is typing":["%1$s éppen ír"],"%1$s has stopped typing":["%1$s abbahagyta a gépelést"],"%1$s has gone away":["%1$s távol van"],"Remove messages":["Üzenetek törlése"],"Close this chat":["Csevegőablak bezárása"],"Write in the third person":["Írjon egyes szám harmadik személyben"],"Show this menu":["Mutasd a menüt"],"Hidden message":["Rejtett üzenet"],"Message":["Üzenet"],"Optional hint":["Választható tipp"],"You have unread messages":["Olvasatlan üzenetei vannak"],"Details":["Részletek"],"See more information about this person":["További információk erről a személyről"],"Close and end this conversation":["Bezárás és a beszélgetés befejezése"],"Sorry, the connection has been lost, and your message could not be sent":["Sajnáljuk, a kapcsolat elveszett, és az üzenet nem küldhető el"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Vegye figyelembe, hogy más XMPP/Jabber kliensek (és kiszolgálók) még lehet, hogy nem támogatják a visszavonást, így lehet, hogy az üzenet nem lesz mindenhonnan eltávolítva."],"Are you sure you want to retract this message?":["Valóban visszavonja ezt az üzenetet?"],"Confirm":["Megerősítés"],"You have an unsent message which will be lost if you continue. Are you sure?":["Van egy el nem küldött üzenete, amely elvész ha folytatja. Biztos benne?"],"Are you sure you want to clear the messages from this conversation?":["Valóban törölni szeretné az ebből a beszélgetésből származó üzeneteket?"],"%1$s has gone offline":["%1$s nem elérhetővé vált"],"%1$s is busy":["%1$s elfoglalt"],"%1$s is online":["%1$s elérhető"],"Sorry, something went wrong while trying to refresh":["Sajnáljuk, valami hiba történt frissítés közben"],"Are you sure you want to remove this contact?":["Valóban törölni szeretné ezt a csevegőpartnert?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sajnáljuk, hiba történt %1$s eltávolításakor a csevegőpartnerek közül."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["A teljesítmény javítása érdekében a böngészőben tároljuk az adatokat. Törölje a jelölőnégyzetet, ha ez nyilvános számítógép vagy ha törölni kívánja adatait, amikor kijelentkezik. Fontos, hogy kifejezetten jelentkezzen ki, mert előfordulhat, hogy nem az összes tárolt adat törlődik. Kérjük, vegye figyelembe, ha nem megbízható eszközt használ, hogy az OMEMO titkosítás nem elérhető."],"This is a trusted device":["Ez egy megbízható eszköz"],"Password":["Jelszó"],"Create an account":["Fiók létrehozása"],"Don\'t have a chat account?":["Nincs csevegőfiókja?"],"Log in":["Bejelentkezés"],"Disconnected":["Szétkapcsolva"],"Click here to log in anonymously":["Kattintson ide a névtelen bejelentkezéshez"],"Username":["Felhasználónév"],"user@domain":["felhasználó@tartomány"],"Please enter a valid XMPP address":["Kérjük, adjon meg érvényes XMPP címet"],"Chat Contacts":["Csevegőpartnerek"],"Toggle chat":["Csevegőablak"],"Click to restore this chat":["A csevegés visszaállítása"],"Minimized":["Minimalizálva"],"Minimize":["Minimalizálás"],"Minimize this chat":["Csevegés minimalizálása"],"Minimize this groupchat":["Konferencia minimalizálása"],"This user is a moderator.":["Ez a felhasználó egy moderátor."],"This user can send messages in this groupchat.":["Ez a felhasználó küldhet üzeneteket a konferenciában."],"This user can NOT send messages in this groupchat.":["Ez a felhasználó NEM küldhet üzeneteket a konferenciában."],"Owner":["Tulajdonos"],"Admin":["Adminisztrátor"],"Member":["Tag"],"Moderator":["Moderátor"],"Visitor":["Látogató"],"Click to mention %1$s in your message.":["Kattintson, hogy megemlítse őt: %1$s."],"Participants":["Résztvevők"],"This field is required":["Ez a mező kötelező"],"Join":["Csatlakozás"],"Enter a new Groupchat":["Adjon meg új Konferenciát"],"name@conference.example.org":["név@konferencia.példa.hu"],"Groupchat name":["Konferencia neve"],"Groupchat address":["Konferencia címe"],"Groupchat id is invalid.":["A konferenciaazonosító érvénytelen."],"Invite":["Meghívás"],"Invite someone to this groupchat":["Valaki meghívása ebbe a konferenciába"],"user@example.org":["felhasznalo@example.org"],"Optional reason for the invitation":["Meghívás oka (nem kötelező)"],"Show groupchats":["Konferenciák mutatása"],"Server address":["Kiszolgáló címe"],"Show more information on this groupchat":["További információk a konferenciáról"],"Query for Groupchats":["Konferenciák lekérdezése"],"Description:":["Leírás:"],"Groupchat Address (JID):":["Konferencia címe (JID):"],"Participants:":["Résztvevők:"],"Features:":["Jellemzők:"],"Requires authentication":["Azonosítás szükséges"],"Hidden":["Rejtett"],"Requires an invitation":["Meghívás szükséges"],"Moderated":["Moderált"],"Non-anonymous":["NEM névtelen"],"Open":["Nyitott"],"Permanent":["Állandó"],"Public":["Nyilvános"],"Semi-anonymous":["Félig névtelen"],"Temporary":["Ideiglenes"],"Unmoderated":["Moderálatlan"],"conference.example.org":["konferencia@pelda.hu"],"Groupchats found":["Konferenciák találhatók"],"No groupchats found":["Nem találhatók szobák"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["A moderátorok olyan kiemelt felhasználók, akik módosíthatják más felhasználók szerepköreit (kivéve az admin vagy tulajdonosi szintűekét)."],"The default role, implies that you can read and write messages.":["Az alapértelmezett szerepkör, azt jelenti, hogy üzeneteket olvashat és írhat."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["A látogatók nem írhatnak üzeneteket moderált többfelhasználós csevegőszobákba."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["A tulajdonos a legmagasabb szintű. A tulajdonosok módosíthatják az összes felhasználó szintjét és szerepköreit."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Az admin a második legmagasabb szint. Az adminok módosíthatják a többi felhasználó szintjét és szerepköreiket, kivéve a tulajdonosokét."],"To ban a user, you give them the affiliation of \\"outcast\\".":["A felhasználó kitiltásához állítsa be a „számkivetett” szintet."],"Change role":["Szerepkör módosítása"],"New Role":["Új szerepkör"],"Reason":["Ok"],"Change affiliation":["Szint módosítása"],"New affiliation":["Új szint"],"Affiliation":["Szint"],"Moderator Tools":["Moderátori eszközök"],"No users with that affiliation found.":["Nem található szint nélküli felhasználó."],"No users with that role found.":["Nincs felhasználó azzal a szerepkörrel."],"Type here to filter the search results":["Gépeljen ide a találatok szűréséhez"],"Show users":["Felhasználók megjelenítése"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["A szerepkörök a felhasználókhoz rendeltek, és különböző lehetőségeket engedélyeznek vagy tiltanak le a többfelhasználós csevegésekben. Kiosztásuk explicit, vagy szint alapján implicit. Azok a szerepkörök, melyek nem a szintből fakadnak, csak a felhasználó munkamenetének idejére érvényesek."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["A szint egy hosszú életű jogosultság, amely általában bizonyos szerepkört takar, amely kiváltságokat és felelősségeket ad. Például az adminok és tulajdonosok automatikusan rendelkeznek a moderátor szerepkörrel."],"Timeout error while trying to set the affiliation":["Időtúllépési hiba történt a szint beállításakor"],"Sorry, you\'re not allowed to make that change":["Sajnáljuk, nem teheti meg ezt a módosítást"],"Sorry, something went wrong while trying to set the affiliation":["Sajnáljuk, hiba történt a szint beállításakor"],"Affiliation changed":["Szint megváltozott"],"Role changed":["Szerepkör megváltozott"],"You\'re not allowed to make that change":["Nem végezheti el ezt a módosítást"],"Sorry, something went wrong while trying to set the role":["Sajnáljuk, valami hiba történt a szerepkör beállításakor"],"Topic":["Témakör"],"Topic author":["Téma szerző"],"Groupchat address (JID)":["Konferencia címe (JID)"],"Message archiving":["Üzenetarchiválás"],"Messages are archived on the server":["Üzenetek archiválva vannak a kiszolgálón"],"Description":["Leírás"],"Features":["Jellemzők"],"This groupchat is not publicly searchable":["Ez a konferencia nyilvánosan nem kereshető"],"This groupchat is restricted to members only":["Ez a konferencia kizárólag tagoknak szól"],"Members only":["Csak tagoknak"],"Participants entering this groupchat need to request permission to write":["A belépő résztvevőknek engedélyt kell kérni, hogy írhassanak"],"Name":["Név"],"This groupchat does not require a password upon entry":["Ez a konferencia nem igényel jelszót belépéskor"],"No password required":["Nem szükséges jelszó"],"Not anonymous":["Nem névtelen"],"All other groupchat participants can see your XMPP address":["Minden konferencia-résztvevő láthatja az XMPP felhasználónevét"],"Not moderated":["Moderálatlan"],"Participants entering this groupchat can write right away":["A belépő résztvevők egyből írhatnak is ide"],"Online users":["Jelenlevők"],"Anyone can join this groupchat":["Bárki csatlakozhat a konferenciához"],"This groupchat requires a password before entry":["A konferenciába belépéshez jelszó szükséges"],"Password protected":["Jelszóval védve"],"Persistent":["Állandó"],"This groupchat persists even if it\'s unoccupied":["Ez a konferencia akkor is fennmarad, ha üres"],"Only moderators can see your XMPP address":["Csak a moderátorok láthatják az Ön XMPP felhasználónevét"],"This groupchat will disappear once the last person leaves":["Ez a konferencia eltűnik, amint az utolsó ember elhagyja"],"This groupchat is publicly searchable":["Ez a konferencia nyilvánosan kereshető"],"Groupchat info for %1$s":["Konferencia infó számára: %1$s"],"You\'re not allowed to send messages in this room":["Nem küldhet üzeneteket ebben a szobában"],"The conversation has moved. Click below to enter.":["A beszélgetés elköltözött. Kattintson az alábbi gombra, hogy belépjen."],"This groupchat no longer exists":["Ez a konferencia már nem létezik"],"Hide the groupchat topic":["A konferencia témájának elrejtése"],"This groupchat is bookmarked":["Ez a konferencia könyvjelzőzött"],"Enter groupchat":["Belépés a konferenciába"],"Choose a nickname to enter":["Válasszon egy becenevet a belépéshez"],"Please choose your nickname":["Kérjük, válasszon becenevet"],"This groupchat requires a password":["Ez a konferencia jelszót igényel"],"Password: ":["Jelszó: "],"Submit":["Küldés"],"%1$s has entered the groupchat":["%1$s belépett a konferenciába"],"%1$s has left the groupchat":["%1$s elhagyta a konferenciát"],"%1$s is now a moderator":["%1$s most már moderátor"],"%1$s is no longer a moderator":["%1$s többé már nem moderátor"],"%1$s has been given a voice":["%1$s hangot kapott"],"%1$s has been muted":["%1$s el lett némítva"],"%1$s and %2$s":["%1$s és %2$s"],"%1$s are typing":["%1$s gépel"],"%1$s have stopped typing":["%1$s abbahagyta a gépelést"],"%1$s have gone away":["%1$s távol van"],"%1$s have entered the groupchat":["%1$s belépett a konferenciába"],"%1$s have left the groupchat":["%1$s elhagyta a konferenciát"],"%1$s are now moderators":["%1$s most már moderátor"],"%1$s are no longer moderators":["%1$s többé már nem moderátor"],"%1$s have been given voices":["%1$s újra hangot kapott"],"%1$s have been muted":["%1$s el lett némítva"],"Change user\'s affiliation to admin":["A felhasználó adminisztrátorrá tétele"],"Ban user by changing their affiliation to outcast":["A felhasználó kitiltása a szintjének számkivetettre állításával"],"Clear the chat area":["Csevegőterület törlése"],"Close this groupchat":["Konferencia bezárása"],"Change user role to participant":["A felhasználó szerepének változtatása résztvevőre"],"Remove this groupchat":["Konferencia eltávolítása"],"Kick user from groupchat":["Felhasználó kirúgása a konferenciából"],"Write in 3rd person":["Írjon egyes szám harmadik személyben"],"Grant membership to a user":["Tagság megadása a felhasználónak"],"Opens up the moderator tools GUI":["Megnyitja a moderátori eszközök felületét"],"Remove user\'s ability to post messages":["A felhasználó ne küldhessen üzeneteket"],"Change your nickname":["Becenév módosítása"],"Grant moderator role to user":["Moderátori jog adása a felhasználónak"],"Grant ownership of this groupchat":["Konferencia tulajdonjogának megadása"],"Register your nickname":["Becenév regisztrációja"],"Revoke the user\'s current affiliation":["A felhasználó jelenlegi szintjének visszavonása"],"Set groupchat subject":["Konferencia témájának beállítása"],"Set groupchat subject (alias for /subject)":["Állítsa be a konferencia tárgyát (álnév a /tárgynak)"],"Allow muted user to post messages":["Elnémított felhasználók is küldhetnek üzeneteket"],"You are about to retract this message.":["Az üzenet visszavonására készül."],"You may optionally include a message, explaining the reason for the retraction.":["Hozzáadhat egy üzenetet, amelyben leírhatja a visszavonás okát."],"Message Retraction":["Üzenetvisszavonás"],"Optional reason":["Nem kötelező ok"],"Sorry, you\'re not allowed to retract this message":["Sajnáljuk, nem vonhatja vissza ezt az üzenetet"],"A timeout occurred while trying to retract the message":["Időtúllépés történt az üzenet visszavonásakor"],"Sorry, you\'re not allowed to retract this message.":["Nem vonhatja vissza ezt az üzenetet."],"Show more information about this groupchat":["További információk megjelenítése a konferenciáról"],"Configure":["Beállítás"],"Configure this groupchat":["Konferencia beállítása"],"Invite someone to join this groupchat":["Valaki meghívása ebbe a konferenciába"],"Show topic":["Téma megjelenítése"],"Hide topic":["Téma elrejtése"],"Show the topic message in the heading":["A témaüzenet megjelenítése a fejlécben"],"Hide the topic in the heading":["A téma elrejtése a fejlécben"],"Moderate":["Moderálás"],"Moderate this groupchat":["Konferencia moderálása"],"Destroy":["Törlés"],"Leave":["Kilépés"],"Leave and close this groupchat":["Kilépés és a konferencia bezárása"],"Are you sure you want to leave this groupchat?":["Valóban el akarja hagyni ezt a konferenciát?"],"Hide the list of participants":["Résztvevők listájának elrejtése"],"Forbidden: you do not have the necessary role in order to do that.":["Tilos: nincs meg a szükséges szerepköre, hogy ezt megtehesse."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Tilos: nincs meg a szükséges kapcsolata, hogy ezt megtehesse."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Hiba: a „%1$s” parancs két argumentumot fogad, a felhasználó becenevét és adott esetben az okát."],"Error: couldn\'t find a groupchat participant based on your arguments":["Hiba: nem található konferencia résztvevő az argumentumok alapján"],"Error: found multiple groupchat participant based on your arguments":["Hiba: több, az argumentumoknak megfelelő konferencia-résztvevő is található"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Nem található résztvevő ezzel a becenévvel. Lehet hogy elhagyta a konferenciát."],"Sorry, an error happened while running the command.":["Sajnáljuk, valami hiba történt a parancs futtatásakor."],"Check your browser\'s developer console for details.":["Részletekért nézze meg a böngésző fejlesztői konzolját."],"Are you sure you want to destroy this groupchat?":["Valóban törölni akarja ezt a konferenciát?"],"Please enter the XMPP address of this groupchat to confirm":["A megerősítéshez adja meg a konferencia XMPP-címét"],"name@example.org":["felhasznalo@pelda.hu"],"Optional reason for destroying this groupchat":["Nem kötelező indok a konferencia megszüntetéséhez"],"Optional XMPP address for a new groupchat that replaces this one":["Nem kötelező XMPP-cím az új konferenciához, amely leváltja ezt"],"replacement@example.org":["felhasznalo@example.org"],"Your nickname is \\"%1$s\\"":["A beceneve „%1$s”"],"Error: invalid number of arguments":["Hiba: érvénytelen számú paraméter"],"This action was done by %1$s.":["Ezt a műveletet végezte: %1$s."],"The reason given is: \\"%1$s\\".":["Ennek ez az oka: \\"%1$s\\"."],"Groupchats":["Konferenciák"],"Add a new groupchat":["Új konferencia létrehozása"],"Query for groupchats":["Konferenciák lekérdezése"],"Sorry, an error occurred while trying to submit the config form.":["Sajnáljuk, hiba történt a beállítási űrlap elküldésekor."],"Close these announcements":["Ezen bejelentések bezárása"],"Announcements":["Bejelentések"],"Click to open this server message":["Kattintson a kiszolgálóüzenet megnyitásához"],"Notification from %1$s":["Értesítő üzenet innen: %1$s"],"%1$s says":["%1$s mondja"],"Encrypted message received":["Titkosított üzenet fogadva"],"has gone offline":["nem elérhetővé vált"],"has gone away":["távol van"],"is busy":["elfoglalt"],"has come online":["elérhető lett"],"wants to be your contact":["szeretne a csevegőpartnere lenni"],"Hide":["Elrejtés"],"Execute":["Végrehajtás"],"On which entity do you want to run commands?":["Melyik entitáson akarja futtatni a parancsokat?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Egyes XMPP-szolgáltatások és entitások megengedik, hogy az arra jogosult felhasználók alkalmi parancsokat futtassanak rajtuk."],"Commands found":["Talált parancsok"],"List available commands":["Elérhető parancsok felsorolása"],"No commands found":["Nem találhatók parancsok"],"Sorry, an error occurred while looking for commands on that entity.":["Sajnáljuk, hiba történt az entitás parancsainak keresésekor."],"The specified entity doesn\'t support ad-hoc commands":["A megadott entitás nem támogatja az alkalmi parancsokat"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Sajnáljuk, hiba történt a parancs végrehajtásakor. A részletekért nézze meg a böngésző fejlesztői konzolját."],"About":["Névjegy"],"Commands":["Parancsok"],"Settings":["Beállítások"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s nyílt forráskódú %2$s XMPP csevegőkliens az %3$s Opkode %2$s jóvoltából"],"%1$s Translate %2$s it into your own language":["%1$s Fordítsa le %2$s a saját nyelvére"],"Log out":["Kijelentkezés"],"Click to change your chat status":["Ide kattintva módosíthatja a csevegési állapotát"],"Show details about this chat client":["További információk a csevegő kliensről"],"Your avatar image":["A profilképed"],"Checkbox for selecting the following fingerprint":["Jelölőnégyzet az alábbi ujjlenyomat kiválasztására"],"Device without a fingerprint":["Eszköz ujjlenyomat nélkül"],"Checkbox for selecting the following device":["Jelölőnégyzet a következő eszköz kiválasztására"],"Other OMEMO-enabled devices":["Más OMEMO-engedélyezett eszközök"],"Checkbox to select fingerprints of all other OMEMO devices":["Jelölőnégyzet az összes egyéb OMEMO eszköz ujjlenyomatának kijelöléséhez"],"Remove checked devices and close":["Ellenőrzött eszközök eltávolítása és bezárás"],"Select all":["Mindent kijelöl"],"This device\'s OMEMO fingerprint":["Készülékének OMEMO ujjlenyomata"],"Generate new keys and fingerprint":["Új kulcsok és ujjlenyomat létrehozása"],"Your Profile":["Profilod"],"XMPP Address (JID)":["XMPP Cím (JID)"],"Save and close":["Mentés és bezárás"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Használjon vesszőket több szerep szétválasztásához. A szerepek a neved mellett jelennek meg a csevegési üzenetekben."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Sajnáljuk, valami hiba történt a profiladatok mentése közben."],"You can check your browser\'s developer console for any error output.":["Ellenőrizheti a böngésző fejlesztői konzolt bármilyen hiba kimenet esetén."],"Away":["Távol"],"Busy":["Elfoglalt"],"Custom status":["Egyéni állapot"],"Offline":["Nem elérhető"],"Online":["Elérhető"],"Away for long":["Hosszú ideje távol"],"Change chat status":["Chat-állapot módosítása"],"Personal status message":["Személyes állapot üzenet"],"I am %1$s":["%1$s vagyok"],"Are you sure you want to log out?":["Biztosan ki akar jelentkezni?"],"online":["elérhető"],"busy":["elfoglalt"],"away for long":["sokáig távol"],"away":["távol"],"offline":["nem elérhető"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sajnáljuk, egy hiba miatt nem lehet visszafejteni a kapott OMEMO üzenetet."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Sajnáljuk, nem lehet visszafejteni a kapott OMEMO üzenetet, mert nincs meg a JID ahhoz a felhasználóhoz."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["Úgy tűnik, hogy %1$s egyik kliense sem támogatja az OMEMO-t . Titkosított beszélgetés már nem lesz lehetséges ezen a konferencián."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Nem használható végpontok közötti titkosítás ebben a konferenciában, vagy a konferencia vagy anonim, vagy nem minden résztvevő támogatja az OMEMO-t."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Nem használható végpontok közötti titkosítás, mert %1$s olyan klienset használ, ami nem támogatja az OMEMO-t."],"Messages are being sent in plaintext":["Üzenetek küldése egyszerű szövegként"],"Messages are sent encrypted":["Az üzenetek titkosítva lesznek elküldve"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Ennek a konferenciának csak a tagokat szabad engedélyeznie, és nem lehet anonim ahhoz, hogy támogassa az OMEMO-val titkosított üzeneteket"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Sajnáljuk, de nem lehet elküldeni egy titkosított üzenetet, mert %1$s megköveteli, hogy iratkozzon fel a jelenlétére ahhoz, hogy lássa az OMEMO-információit"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sajnáljuk, de nem lehet elküldeni egy titkosított üzenetet, mert %1$s távoli kiszolgálója nem található"],"Unable to send an encrypted message due to an unexpected error.":["Nem lehet elküldeni egy titkosított üzenetet egy váratlan hiba miatt."],"Sorry, an error occurred while trying to remove the devices.":["Sajnáljuk, hiba történt az eszközök eltávolításakor."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Biztos, hogy új OMEMO kulcsokat akar létrehozni? Ez eltávolítja a régi kulcsait, és minden korábbi titkosított üzenete visszafejthetetlenné válik ezen az eszközön."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Sajnáljuk, nem található eszköz, amire OMEMO-val titkosított üzenetet lehet küldeni."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ez egy OMEMO kódolt üzenet, amelyet az ügyfele úgy tűnik, hogy nem támogatja. További információkat itt talál: https://conversations.im/omemo"]," e.g. conversejs.org":[" pl.: conversejs.org"],"Fetch registration form":["Regisztrációs űrlap"],"Tip: A list of public XMPP providers is available":["Tipp: A nyílvános XMPP szolgáltatókról egy lista elérhető"],"here":["itt"],"Sorry, we\'re unable to connect to your chosen provider.":["Sajnáljuk, de nem tudunk csatlakozni a választott szolgáltatóhoz."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["A megadott szolgáltató nem támogatja a csevegőn keresztüli regisztrációt. Próbáljon meg egy másikat."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Valami hiba történt a következőhöz kapcsolódás közben: \\"%1$s\\". Biztos benne, hogy létezik?"],"Now logging you in":["Most bejelentkezel"],"Registered successfully":["Sikeres regisztráció"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["A szolgáltató visszautasította a regisztrációs kérelmet. Kérem ellenőrízze a bevitt adatok pontosságát."],"Leave this groupchat":["Konferencia elhagyása"],"Click to toggle the list of open groupchats":["Kattintsunk a konferenciák listájára váltáshoz"],"Open Groupchats":["Használatban"],"Are you sure you want to leave the groupchat %1$s?":["Biztosan el akarja hagyni a konferenciát: %1$s?"],"Add":["Hozzáadás"],"Add a Contact":["Új csevegőpartner hozzáadása"],"This contact is busy":["Ez a csevegőpartner elfoglalt"],"This contact is online":["Ez az ismerős elérhető"],"This contact is offline":["Ez az ismerős nem elérhető"],"This contact is unavailable":["Ez az ismerős elérhetetlen"],"This contact is away for an extended period":["Ez az ismerős hosszú ideje távol van"],"This contact is away":["Ez az ismerős távol van"],"Contact name":["Partner neve"],"Optional nickname":["Választható becenév"],"Sorry, could not find a contact with that name":["Sajnáljuk, nem található csevegőpartnert ezzel a névvel"],"This contact has already been added":["Ez a csevegőpartner már hozzá lett adva"],"Filter":["Szűrő"],"Filter by contact name":["Szűrés névjegy szerint"],"Filter by group name":["Szűrés csoport szerint"],"Filter by status":["Szűrés állapot szerint"],"Any":["Bármi"],"Unread":["Olvasatlan"],"Chatty":["Beszédes"],"Extended Away":["Hosszú távollét"],"Click to remove %1$s as a contact":["Kattintson %1$s nevű ismerősének eltávolításához"],"Click to accept the contact request from %1$s":["Kattintson %1$s kapcsolatkérésének elfogadásához"],"Click to decline the contact request from %1$s":["Kattintson %1$s kapcsolatkérésének elutasításához"],"Click to chat with %1$s (XMPP address: %2$s)":["Kattintson a csevegéshez a következővel: %1$s (XMPP-cím: %2$s)"],"Are you sure you want to decline this contact request?":["Valóban elutasítja ezt a partnerkérelmet?"],"Contacts":["Kapcsolatok"],"Add a contact":["Új névjegy felvétele"],"Re-sync your contacts":["Újra szinkronizálni a névjegyeket"]}}}')}}]);
 //# sourceMappingURL=hu-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/id-LC_MESSAGES-converse-po.js b/src/conversejs/locales/id-LC_MESSAGES-converse-po.js
index df52c4d66ab9ec57d7e4df4e94638949dcba0ef9..42e2f242f84e0e20924e15949b6f9817afacd292 100644
--- a/src/conversejs/locales/id-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/id-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[157],{435:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"id"},"Create your account":["Buat akun anda"],"Please enter the XMPP provider to register with:":["Silakan masukkan penyedia XMPP untuk mendaftar:"],"Already have a chat account?":["Sudah punya akun obrolan?"],"Log in here":["Masuk disini"],"Account Registration:":["Pendaftaran Akun:"],"Register":["Daftar"],"Choose a different provider":["Pilih penyedia yang berbeda"],"Hold tight, we\'re fetching the registration form…":["Pegang erat-erat, kami mengambil formulir pendaftaran …"],"Cancel":["Batal"],"The connection has dropped, attempting to reconnect.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":["Smileys dan emotions"],"People":["Orang"],"Activities":["Aktifitas"],"Travel":["Perjalanan"],"Objects":["Obyek"],"Animals and nature":["Hewan dan alam"],"Food and drink":["Makanan dan minuman"],"Symbols":["Simbol"],"Flags":["Bendera"],"Stickers":["Stiker"],"This groupchat is not anonymous":["Obrolan grup ini tidak anonim"],"This groupchat now shows unavailable members":["Obrolan grup ini sekarang menampilkan anggota yang tidak tersedia"],"This groupchat does not show unavailable members":["Obrolan grup ini tidak menunjukkan anggota yang tidak tersedia"],"The groupchat configuration has changed":["Konfigurasi obrolan grup telah berubah"],"Groupchat logging is now enabled":["Log masuk Obrolan Group tidak diaktifkan"],"Groupchat logging is now disabled":["Log masuk Obrolan Group sekarang dinonaktifkan"],"This groupchat is now no longer anonymous":["Obrolan grup ini sekarang tidak lagi anonim"],"This groupchat is now semi-anonymous":["Obrolan grup ini sekarang semi-anonim"],"This groupchat is now fully-anonymous":["Obrolan grup ini sekarang sepenuhnya anonim"],"A new groupchat has been created":["Obrolan grup baru telah dibuat"],"Your nickname has been automatically set to %1$s":["Nama panggilan Anda telah ditetapkan secara otomatis ke %1$s"],"Your nickname has been changed to %1$s":["Nama panggilan Anda telah diubah menjadi %1$s"],"You have been banned from this groupchat":["Anda telah diblokir dari obrolan grup ini"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["Simpan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["Tutup"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Versi pesan"],"Retry":[""],"Uploading file:":["Mengunggah berkas:"],"This message has been edited":["Pesan ini telah diubah"],"Show more":[""],"No message history available.":["Riwayat pesan tidak tersedia."],"Search results":["Hasil pencarian"],"Search":["Cari"],"Insert emojis":[""],"Send the message":["Mengirim pesan ini"],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Gambar profil pengguna"],"Trusted":["Dipercaya"],"Untrusted":["Tidak dipercaya"],"OMEMO Fingerprints":["Sidik Jari OMEMO"],"Remove as contact":["Hapus dari kontak"],"XMPP Address":["Alamat XMPP"],"Email":[""],"Full Name":[""],"Nickname":["Nama panggilan"],"Refresh":["Segarkan"],"Role":["Peran"],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Untuk meningkatkan kinerja, kami menyimpan data Anda di browser ini. Hapus centang kotak ini jika ini adalah komputer umum atau jika Anda ingin data Anda dihapus saat Anda logout. Penting bagi Anda untuk keluar secara eksplisit, jika tidak, tidak semua data yang di-cache mungkin dihapus. Harap dicatat, saat menggunakan perangkat yang tidak dipercaya, enkripsi OMEMO TIDAK tersedia."],"This is a trusted device":["Ini adalah perangkat tepercaya"],"Create an account":["Buat akun"],"Don\'t have a chat account?":["Belum punya akun obrolan?"],"Log in":["Masuk"],"Disconnected":[""],"Click here to log in anonymously":["Klik disini untuk masuk secara anonim"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This field is required":["Kolom ini harus diisi"],"Join":["Gabung"],"Enter a new Groupchat":["Masukan Grup chat baru"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Invite":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["Tersembunyi"],"Requires an invitation":[""],"Moderated":["Dimoderasi"],"Non-anonymous":[""],"Open":["Buka"],"Permanent":[""],"Public":["Publik"],"Semi-anonymous":["Semi-anonim"],"Temporary":["Sementara"],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderator adalah pengguna istimewa yang dapat mengubah peran pengguna lain (kecuali yang memiliki admin atau afiliasi pemilik."],"The default role, implies that you can read and write messages.":["Peran default, menyiratkan bahwa Anda dapat membaca dan menulis pesan."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Pengunjung tidak diperbolehkan menulis pesan dalam obrolan multi-pengguna yang dimoderasi."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Pemilik adalah afiliasi tertinggi. Pemilik dapat mengubah peran dan afiliasi dari semua pengguna lain."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin adalah afiliasi tertinggi kedua. Admin dapat mengubah peran dan afiliasi semua pengguna lain kecuali pemilik."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Untuk mencekal pengguna, Anda memberi mereka afiliasi “terbuang”."],"Change role":["Rubah peran"],"New Role":["Peran baru"],"Reason":["Alasan"],"Change affiliation":["Rubah afiliasi"],"New affiliation":["Afiliasi baru"],"Affiliation":["Afiliasi"],"Moderator Tools":["Alat Moderator"],"No users with that affiliation found.":["Tidak ada pengguna dengan afiliasi itu ditemukan."],"No users with that role found.":["Tidak ada pengguna dengan peran itu ditemukan."],"Type here to filter the search results":[""],"Show users":["Tampilkan pengguna"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Peran diberikan kepada pengguna untuk memberikan atau menolak kemampuan tertentu mereka dalam obrolan multi-pengguna. Mereka ditugaskan baik secara eksplisit maupun implisit sebagai bagian dari afiliasi. Peran yang bukan karena afiliasi, hanya berlaku selama durasi sesi pengguna."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Afiliasi adalah hak yang berumur panjang yang biasanya menyiratkan peran tertentu dan yang memberikan hak istimewa dan tanggung jawab. Misalnya admin dan pemilik secara otomatis memiliki peran moderator."],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["Topik"],"Topic author":["Penulis topik"],"Groupchat address (JID)":["Alamat Obrolan Grup"],"Message archiving":["Pengarsipan pesan"],"Messages are archived on the server":["Pesan diarsipkan di server"],"Description":["Keterangan"],"Features":["Fitur"],"This groupchat is not publicly searchable":["Obrolan grup ini tidak dapat ditelusuri untuk umum"],"This groupchat is restricted to members only":["Obrolan grup ini terbatas hanya untuk anggota"],"Members only":["Hanya anggota"],"Participants entering this groupchat need to request permission to write":["Peserta yang memasuki groupchat ini perlu meminta izin untuk menulis"],"Name":["Nama"],"This groupchat does not require a password upon entry":["Obrolan grup ini tidak memerlukan kata sandi saat masuk"],"No password required":["Tidak diperlukan kata sandi"],"Not anonymous":["Bukan anonim"],"All other groupchat participants can see your XMPP address":["Semua peserta groupchat lainnya dapat melihat alamat XMPP Anda"],"Not moderated":["Tidak dimoderasi"],"Participants entering this groupchat can write right away":["Peserta yang memasuki obrolan grup ini dapat langsung menulis"],"Online users":["Pengguna Online"],"Anyone can join this groupchat":["Siapa pun dapat bergabung dengan obrolan grup ini"],"This groupchat requires a password before entry":["Obrilan grup ini membutuhkan kata sandi untuk masuk"],"Password protected":["Dilindungi kata sandi"],"Persistent":["Tetap ada"],"This groupchat persists even if it\'s unoccupied":["Obrolan grup ini tetap ada meskipun tidak dihuni"],"Only moderators can see your XMPP address":["Hanya moderator yang dapat melihat alamat XMPP Anda"],"This groupchat will disappear once the last person leaves":["Obrolan grup ini akan hilang begitu orang terakhir pergi"],"This groupchat is publicly searchable":["Obrolan grup ini dapat dicari secara publik"],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Anda tidak diperbolehkan mengirim pesan di room ini"],"The conversation has moved. Click below to enter.":["Pembicaraan sudah dipindah. Klik dibawah untuk masuk."],"This groupchat no longer exists":["Obrolan Grup ini sudah tidak ada"],"Enter groupchat":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Configure":[""],"Configure this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Tentang"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s klien obrolan XMPP dipersembahkan oleh %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Terjemahkan %2$s ke dalam bahasa Anda sendiri"],"Log out":["Keluar"],"Click to change your chat status":["Klik untuk mengubah status obrolan Anda"],"Show details about this chat client":["Tampilkan detail tentang klien obrolan ini"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":["Centang untuk memilih sidik jari berikut"],"Device without a fingerprint":["Perangkat tanpa sidik jari"],"Other OMEMO-enabled devices":["Perangkat yang support OMEMO lainnya"],"Checkbox to select fingerprints of all other OMEMO devices":["Centang untuk memilih sidik jari dari semua perangkat OMEMO lainnya"],"Remove checked devices and close":["Hapus perangkat yang dicentang dan tutup"],"Select all":["Pilih semua"],"This device\'s OMEMO fingerprint":["Sidik jari OMEMO perangkat ini"],"Generate new keys and fingerprint":["Hasilkan kunci dan sidik jari baru"],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":["Simpan dan tutup"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":["Saya %1$s"],"Are you sure you want to log out?":["Anda yakin ingin keluar?"],"online":["online"],"busy":["sibuk"],"away for long":["pergi lama"],"away":["pergi"],"offline":["offline"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s tampaknya tidak memiliki klien yang mendukung OMEMO. Obrolan terenkripsi tidak lagi dapat dilakukan di obrolan grup ini."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Tidak dapat menggunakan enkripsi ujung ke ujung karena %1$s menggunakan klien yang tidak mendukung OMEMO."],"Messages are being sent in plaintext":["Pesan sedang dikirim dalam plaintext"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Maaf, terjadi kesalahan saat mencoba menghapus perangkat."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Anda yakin ingin membuat kunci OMEMO baru? Ini akan menghapus kunci lama Anda dan semua pesan yang dienkripsi sebelumnya tidak lagi dapat didekripsi pada perangkat ini."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Maaf, kami tidak dapat mengirim pesan terenkripsi karena %1$s mengharuskan Anda untuk berlangganan keberadaan mereka untuk melihat informasi OMEMO mereka"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Maaf, kami tidak dapat mengirim pesan terenkripsi karena server jarak jauh untuk %1$s tidak dapat ditemukan"],"Unable to send an encrypted message due to an unexpected error.":["Tidak dapat mengirim pesan terenkripsi karena kesalahan yang tidak terduga."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Maaf, tidak ada perangkat yang dapat kami gunakan untuk mengirim pesan terenkripsi OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ini adalah pesan terenkripsi OMEMO yang tampaknya tidak didukung oleh klien Anda. Temukan informasi lebih lanjut tentang https://conversations.im/omemo"]," e.g. conversejs.org":[" contoh: conversejs.org"],"Fetch registration form":["Ambil formulir pendaftaran"],"Tip: A list of public XMPP providers is available":["Tip: Daftar penyedia XMPP publik tersedia"],"here":["disini"],"Sorry, we\'re unable to connect to your chosen provider.":["Maaf, kami tidak dapat terhubung ke penyedia yang Anda pilih."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Maaf, penyedia yang diberikan tidak mendukung dalam pendaftaran akun band. Silakan coba dengan penyedia lain."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Terjadi kesalahan saat membuat koneksi dengan “%1$s”. Apakah Anda yakin itu ada?"],"Now logging you in":["Sekarang Anda masuk"],"Registered successfully":["Berhasil terdaftar"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Penyedia menolak upaya pendaftaran Anda. Silakan periksa nilai yang Anda masukkan apakah sudah benar."],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":["Klik untuk mengaktifkan daftar obrolan grup terbuka"],"Open Groupchats":["Buka Obrolan Grup"],"Are you sure you want to leave the groupchat %1$s?":["Anda yakin ingin keluar dari obrolan grup %1$s?"],"Add":["Tambah"],"Add a Contact":["Tambah kontak"],"This contact is busy":["Kontak ini sedang sibuk"],"This contact is online":["Kontak ini sedang online"],"This contact is offline":["Kontak ini sedang offline"],"This contact is unavailable":["Kontak ini tidak tersedia"],"This contact is away for an extended period":["Kontak ini tidak ada dalam waktu lama"],"This contact is away":["Kontak ini sedang pergi"],"Contact name":["Nama kontak"],"Optional nickname":["Nama panggilan opsional"],"Sorry, could not find a contact with that name":["Maaf, tidak dapat menemukan kontak dengan nama itu"],"This contact has already been added":["Kontak ini sudah ditambahkan"],"Filter":["Saring"],"Filter by contact name":["Saring berdasarkan nama kontak"],"Filter by group name":["Saring berdasarkan nama grup"],"Filter by status":["Saring berdasarkan status"],"Any":["Apa saja"],"Unread":["Belum dibaca"],"Chatty":["Cerewet"],"Extended Away":["Diperpanjang"],"Click to remove %1$s as a contact":["Klik untuk menghapus %1$s sebagai kontak"],"Click to accept the contact request from %1$s":["Klik untuk menerima permintaan kontak dari %1$s"],"Click to decline the contact request from %1$s":["Klik untuk menolak permintaan kontak dari %1$s"],"Are you sure you want to decline this contact request?":["Anda yakin ingin menolak permintaan kontak ini?"],"Contacts":["Kontak"],"Add a contact":["Tambah kontak"],"Re-sync your contacts":["Sinkronkan kembali kontak Anda"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[157],{523:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"id"},"Create your account":["Buat akun anda"],"Please enter the XMPP provider to register with:":["Silakan masukkan penyedia XMPP untuk mendaftar:"],"Already have a chat account?":["Sudah punya akun obrolan?"],"Log in here":["Masuk disini"],"Account Registration:":["Pendaftaran Akun:"],"Register":["Daftar"],"Choose a different provider":["Pilih penyedia yang berbeda"],"Hold tight, we\'re fetching the registration form…":["Pegang erat-erat, kami mengambil formulir pendaftaran …"],"Cancel":["Batal"],"The connection has dropped, attempting to reconnect.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":["Smileys dan emotions"],"People":["Orang"],"Activities":["Aktifitas"],"Travel":["Perjalanan"],"Objects":["Obyek"],"Animals and nature":["Hewan dan alam"],"Food and drink":["Makanan dan minuman"],"Symbols":["Simbol"],"Flags":["Bendera"],"Stickers":["Stiker"],"This groupchat is not anonymous":["Obrolan grup ini tidak anonim"],"This groupchat now shows unavailable members":["Obrolan grup ini sekarang menampilkan anggota yang tidak tersedia"],"This groupchat does not show unavailable members":["Obrolan grup ini tidak menunjukkan anggota yang tidak tersedia"],"The groupchat configuration has changed":["Konfigurasi obrolan grup telah berubah"],"Groupchat logging is now enabled":["Log masuk Obrolan Group tidak diaktifkan"],"Groupchat logging is now disabled":["Log masuk Obrolan Group sekarang dinonaktifkan"],"This groupchat is now no longer anonymous":["Obrolan grup ini sekarang tidak lagi anonim"],"This groupchat is now semi-anonymous":["Obrolan grup ini sekarang semi-anonim"],"This groupchat is now fully-anonymous":["Obrolan grup ini sekarang sepenuhnya anonim"],"A new groupchat has been created":["Obrolan grup baru telah dibuat"],"Your nickname has been automatically set to %1$s":["Nama panggilan Anda telah ditetapkan secara otomatis ke %1$s"],"Your nickname has been changed to %1$s":["Nama panggilan Anda telah diubah menjadi %1$s"],"You have been banned from this groupchat":["Anda telah diblokir dari obrolan grup ini"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["Simpan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["Tutup"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Versi pesan"],"Retry":[""],"Uploading file:":["Mengunggah berkas:"],"This message has been edited":["Pesan ini telah diubah"],"Show more":[""],"No message history available.":["Riwayat pesan tidak tersedia."],"Search results":["Hasil pencarian"],"Search":["Cari"],"Insert emojis":[""],"Send the message":["Mengirim pesan ini"],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Gambar profil pengguna"],"Trusted":["Dipercaya"],"Untrusted":["Tidak dipercaya"],"OMEMO Fingerprints":["Sidik Jari OMEMO"],"Remove as contact":["Hapus dari kontak"],"XMPP Address":["Alamat XMPP"],"Email":[""],"Full Name":[""],"Nickname":["Nama panggilan"],"Refresh":["Segarkan"],"Role":["Peran"],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Untuk meningkatkan kinerja, kami menyimpan data Anda di browser ini. Hapus centang kotak ini jika ini adalah komputer umum atau jika Anda ingin data Anda dihapus saat Anda logout. Penting bagi Anda untuk keluar secara eksplisit, jika tidak, tidak semua data yang di-cache mungkin dihapus. Harap dicatat, saat menggunakan perangkat yang tidak dipercaya, enkripsi OMEMO TIDAK tersedia."],"This is a trusted device":["Ini adalah perangkat tepercaya"],"Create an account":["Buat akun"],"Don\'t have a chat account?":["Belum punya akun obrolan?"],"Log in":["Masuk"],"Disconnected":[""],"Click here to log in anonymously":["Klik disini untuk masuk secara anonim"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":["Kolom ini harus diisi"],"Join":["Gabung"],"Enter a new Groupchat":["Masukan Grup chat baru"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Invite":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["Tersembunyi"],"Requires an invitation":[""],"Moderated":["Dimoderasi"],"Non-anonymous":[""],"Open":["Buka"],"Permanent":[""],"Public":["Publik"],"Semi-anonymous":["Semi-anonim"],"Temporary":["Sementara"],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderator adalah pengguna istimewa yang dapat mengubah peran pengguna lain (kecuali yang memiliki admin atau afiliasi pemilik."],"The default role, implies that you can read and write messages.":["Peran default, menyiratkan bahwa Anda dapat membaca dan menulis pesan."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Pengunjung tidak diperbolehkan menulis pesan dalam obrolan multi-pengguna yang dimoderasi."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Pemilik adalah afiliasi tertinggi. Pemilik dapat mengubah peran dan afiliasi dari semua pengguna lain."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin adalah afiliasi tertinggi kedua. Admin dapat mengubah peran dan afiliasi semua pengguna lain kecuali pemilik."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Untuk mencekal pengguna, Anda memberi mereka afiliasi “terbuang”."],"Change role":["Rubah peran"],"New Role":["Peran baru"],"Reason":["Alasan"],"Change affiliation":["Rubah afiliasi"],"New affiliation":["Afiliasi baru"],"Affiliation":["Afiliasi"],"Moderator Tools":["Alat Moderator"],"No users with that affiliation found.":["Tidak ada pengguna dengan afiliasi itu ditemukan."],"No users with that role found.":["Tidak ada pengguna dengan peran itu ditemukan."],"Type here to filter the search results":[""],"Show users":["Tampilkan pengguna"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Peran diberikan kepada pengguna untuk memberikan atau menolak kemampuan tertentu mereka dalam obrolan multi-pengguna. Mereka ditugaskan baik secara eksplisit maupun implisit sebagai bagian dari afiliasi. Peran yang bukan karena afiliasi, hanya berlaku selama durasi sesi pengguna."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Afiliasi adalah hak yang berumur panjang yang biasanya menyiratkan peran tertentu dan yang memberikan hak istimewa dan tanggung jawab. Misalnya admin dan pemilik secara otomatis memiliki peran moderator."],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["Topik"],"Topic author":["Penulis topik"],"Groupchat address (JID)":["Alamat Obrolan Grup"],"Message archiving":["Pengarsipan pesan"],"Messages are archived on the server":["Pesan diarsipkan di server"],"Description":["Keterangan"],"Features":["Fitur"],"This groupchat is not publicly searchable":["Obrolan grup ini tidak dapat ditelusuri untuk umum"],"This groupchat is restricted to members only":["Obrolan grup ini terbatas hanya untuk anggota"],"Members only":["Hanya anggota"],"Participants entering this groupchat need to request permission to write":["Peserta yang memasuki groupchat ini perlu meminta izin untuk menulis"],"Name":["Nama"],"This groupchat does not require a password upon entry":["Obrolan grup ini tidak memerlukan kata sandi saat masuk"],"No password required":["Tidak diperlukan kata sandi"],"Not anonymous":["Bukan anonim"],"All other groupchat participants can see your XMPP address":["Semua peserta groupchat lainnya dapat melihat alamat XMPP Anda"],"Not moderated":["Tidak dimoderasi"],"Participants entering this groupchat can write right away":["Peserta yang memasuki obrolan grup ini dapat langsung menulis"],"Online users":["Pengguna Online"],"Anyone can join this groupchat":["Siapa pun dapat bergabung dengan obrolan grup ini"],"This groupchat requires a password before entry":["Obrilan grup ini membutuhkan kata sandi untuk masuk"],"Password protected":["Dilindungi kata sandi"],"Persistent":["Tetap ada"],"This groupchat persists even if it\'s unoccupied":["Obrolan grup ini tetap ada meskipun tidak dihuni"],"Only moderators can see your XMPP address":["Hanya moderator yang dapat melihat alamat XMPP Anda"],"This groupchat will disappear once the last person leaves":["Obrolan grup ini akan hilang begitu orang terakhir pergi"],"This groupchat is publicly searchable":["Obrolan grup ini dapat dicari secara publik"],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Anda tidak diperbolehkan mengirim pesan di room ini"],"The conversation has moved. Click below to enter.":["Pembicaraan sudah dipindah. Klik dibawah untuk masuk."],"This groupchat no longer exists":["Obrolan Grup ini sudah tidak ada"],"Enter groupchat":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Configure":[""],"Configure this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Tentang"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s klien obrolan XMPP dipersembahkan oleh %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Terjemahkan %2$s ke dalam bahasa Anda sendiri"],"Log out":["Keluar"],"Click to change your chat status":["Klik untuk mengubah status obrolan Anda"],"Show details about this chat client":["Tampilkan detail tentang klien obrolan ini"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":["Centang untuk memilih sidik jari berikut"],"Device without a fingerprint":["Perangkat tanpa sidik jari"],"Other OMEMO-enabled devices":["Perangkat yang support OMEMO lainnya"],"Checkbox to select fingerprints of all other OMEMO devices":["Centang untuk memilih sidik jari dari semua perangkat OMEMO lainnya"],"Remove checked devices and close":["Hapus perangkat yang dicentang dan tutup"],"Select all":["Pilih semua"],"This device\'s OMEMO fingerprint":["Sidik jari OMEMO perangkat ini"],"Generate new keys and fingerprint":["Hasilkan kunci dan sidik jari baru"],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":["Simpan dan tutup"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":["Saya %1$s"],"Are you sure you want to log out?":["Anda yakin ingin keluar?"],"online":["online"],"busy":["sibuk"],"away for long":["pergi lama"],"away":["pergi"],"offline":["offline"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s tampaknya tidak memiliki klien yang mendukung OMEMO. Obrolan terenkripsi tidak lagi dapat dilakukan di obrolan grup ini."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Tidak dapat menggunakan enkripsi ujung ke ujung karena %1$s menggunakan klien yang tidak mendukung OMEMO."],"Messages are being sent in plaintext":["Pesan sedang dikirim dalam plaintext"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Maaf, kami tidak dapat mengirim pesan terenkripsi karena %1$s mengharuskan Anda untuk berlangganan keberadaan mereka untuk melihat informasi OMEMO mereka"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Maaf, kami tidak dapat mengirim pesan terenkripsi karena server jarak jauh untuk %1$s tidak dapat ditemukan"],"Unable to send an encrypted message due to an unexpected error.":["Tidak dapat mengirim pesan terenkripsi karena kesalahan yang tidak terduga."],"Sorry, an error occurred while trying to remove the devices.":["Maaf, terjadi kesalahan saat mencoba menghapus perangkat."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Anda yakin ingin membuat kunci OMEMO baru? Ini akan menghapus kunci lama Anda dan semua pesan yang dienkripsi sebelumnya tidak lagi dapat didekripsi pada perangkat ini."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Maaf, tidak ada perangkat yang dapat kami gunakan untuk mengirim pesan terenkripsi OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Ini adalah pesan terenkripsi OMEMO yang tampaknya tidak didukung oleh klien Anda. Temukan informasi lebih lanjut tentang https://conversations.im/omemo"]," e.g. conversejs.org":[" contoh: conversejs.org"],"Fetch registration form":["Ambil formulir pendaftaran"],"Tip: A list of public XMPP providers is available":["Tip: Daftar penyedia XMPP publik tersedia"],"here":["disini"],"Sorry, we\'re unable to connect to your chosen provider.":["Maaf, kami tidak dapat terhubung ke penyedia yang Anda pilih."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Maaf, penyedia yang diberikan tidak mendukung dalam pendaftaran akun band. Silakan coba dengan penyedia lain."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Terjadi kesalahan saat membuat koneksi dengan “%1$s”. Apakah Anda yakin itu ada?"],"Now logging you in":["Sekarang Anda masuk"],"Registered successfully":["Berhasil terdaftar"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Penyedia menolak upaya pendaftaran Anda. Silakan periksa nilai yang Anda masukkan apakah sudah benar."],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":["Klik untuk mengaktifkan daftar obrolan grup terbuka"],"Open Groupchats":["Buka Obrolan Grup"],"Are you sure you want to leave the groupchat %1$s?":["Anda yakin ingin keluar dari obrolan grup %1$s?"],"Add":["Tambah"],"Add a Contact":["Tambah kontak"],"This contact is busy":["Kontak ini sedang sibuk"],"This contact is online":["Kontak ini sedang online"],"This contact is offline":["Kontak ini sedang offline"],"This contact is unavailable":["Kontak ini tidak tersedia"],"This contact is away for an extended period":["Kontak ini tidak ada dalam waktu lama"],"This contact is away":["Kontak ini sedang pergi"],"Contact name":["Nama kontak"],"Optional nickname":["Nama panggilan opsional"],"Sorry, could not find a contact with that name":["Maaf, tidak dapat menemukan kontak dengan nama itu"],"This contact has already been added":["Kontak ini sudah ditambahkan"],"Filter":["Saring"],"Filter by contact name":["Saring berdasarkan nama kontak"],"Filter by group name":["Saring berdasarkan nama grup"],"Filter by status":["Saring berdasarkan status"],"Any":["Apa saja"],"Unread":["Belum dibaca"],"Chatty":["Cerewet"],"Extended Away":["Diperpanjang"],"Click to remove %1$s as a contact":["Klik untuk menghapus %1$s sebagai kontak"],"Click to accept the contact request from %1$s":["Klik untuk menerima permintaan kontak dari %1$s"],"Click to decline the contact request from %1$s":["Klik untuk menolak permintaan kontak dari %1$s"],"Are you sure you want to decline this contact request?":["Anda yakin ingin menolak permintaan kontak ini?"],"Contacts":["Kontak"],"Add a contact":["Tambah kontak"],"Re-sync your contacts":["Sinkronkan kembali kontak Anda"]}}}')}}]);
 //# sourceMappingURL=id-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/it-LC_MESSAGES-converse-po.js b/src/conversejs/locales/it-LC_MESSAGES-converse-po.js
index af8b5fcd6cc17941781164c98dfdb5208ba9b9a5..c58890c812d0617522addf362d99de003b30e1a8 100644
--- a/src/conversejs/locales/it-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/it-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[158],{436:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"it"},"Create your account":["Crea il tuo account"],"Please enter the XMPP provider to register with:":["Per favore inserisci il fornitore del servizio XMPP con cui registrarti:"],"Already have a chat account?":["Hai già un account?"],"Log in here":["Accedi qui"],"Account Registration:":["Registrazione account:"],"Register":["Registrati"],"Choose a different provider":["Scegli un altro fornitore"],"Hold tight, we\'re fetching the registration form…":["Tieniti forte, stiamo recuperando il modulo di registrazione…"],"Cancel":["Annulla"],"The connection has dropped, attempting to reconnect.":["La connessione è caduta, attendi la riconnessione."],"An error occurred while connecting to the chat server.":["Si è verificato un errore durante la connessione al server."],"Your XMPP address and/or password is incorrect. Please try again.":["Il tuo indirizzo XMPP e/o la tua password sono sbagliati. Riprova."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Spiacente, impossibile connettersi all\'host XMPP con il dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Il server XMPP non ha offerto un meccanismo di autenticazione supportato"],"Sorry, could not determine upload URL.":["Spiacente, impossibile determinare l\'URL di caricamento."],"Sorry, could not determine file upload URL.":["Spiacente, impossibile determinare l\'URL di caricamento del file."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Spiacente, impossibile caricare il tuo file. Risposta del tuo server: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Spiacente, caricamento del file non riuscito."],"You\'re not allowed to retract your message.":["Non ti è permesso di ritrattare il tuo messaggio."],"Sorry, an error occurred while trying to retract your message.":["Spiacente, si è verificato un errore tentando di ritrattare il tuo messaggio."],"You\'re not allowed to send a message.":["Non ti è permesso inviare un messaggio."],"Sorry, an error occurred while trying to send your message.":["Spiacente, si è verificato un errore tentando di inviare il tuo messaggio."],"Sorry, looks like file upload is not supported by your server.":["Spiacente, sembra che il caricamento dei file non sia supportato dal tuo server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La dimensione del tuo file, %1$s, supera il massimo consentito dal tuo server, che è %2$s."],"Smileys and emotions":["Faccine ed emoji"],"People":["Persone"],"Activities":["Attività"],"Travel":["Viaggi"],"Objects":["Oggetti"],"Animals and nature":["Animali e natura"],"Food and drink":["Cibo e bevande"],"Symbols":["Simboli"],"Flags":["Bandiere"],"Stickers":["Adesivi"],"This groupchat is not anonymous":["Questa conversazione di gruppo non è anonima"],"This groupchat now shows unavailable members":["Questa conversazione di gruppo ora mostra membri non disponibili"],"This groupchat does not show unavailable members":["Questa conversazione di gruppo non mostra i membri non disponibili"],"The groupchat configuration has changed":["La configurazione della conversazione di gruppo è cambiata"],"Groupchat logging is now enabled":["La registrazione della conversazione di gruppo ora è abilitata"],"Groupchat logging is now disabled":["La registrazione della conversazione di gruppo ora è disabilitata"],"This groupchat is now no longer anonymous":["Questa conversazione di gruppo ora non è più anonima"],"This groupchat is now semi-anonymous":["Questa conversazione di gruppo ora è semi-anonima"],"This groupchat is now fully-anonymous":["Questa conversazione di gruppo ora è completamente anonima"],"A new groupchat has been created":["Una nuova conversazione di gruppo è stata creata"],"Your nickname has been automatically set to %1$s":["Il tuo soprannome è stato impostato automaticamente come %1$s"],"Your nickname has been changed to %1$s":["Il tuo nickname è stato cambiato come %1$s"],"You have been banned from this groupchat":["Sei stato bandito da questa conversazione di gruppo"],"You have exited this groupchat due to a technical problem":["Sei uscito da questa conversazione di gruppo per un problema tecnico"],"You have been kicked from this groupchat":["Sei stato espulso da questa conversazione di gruppo"],"You have been removed from this groupchat because of an affiliation change":["Sei stato rimosso da questa conversazione di gruppo a causa di un cambio di affiliazione"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sei stato rimosso da questa conversazione di gruppo poiché ora è stata ristretta ai soli membri e tu non ne fai parte"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sei stato rimosso da questa conversazione di gruppo perchè il servizio di host è in fase di spegnimento"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Ritrattazione non consegnata perchè non partecipi alla conversazione di gruppo."],"Your message was not delivered because you weren\'t allowed to send it.":["Il tuo messaggio non è stato spedito perchè non ti è permesso inviare messaggi."],"Your message was not delivered because you\'re not present in the groupchat.":["Il tuo messaggio non è stato spedito perchè non partecipi alla conversazione di gruppo."],"A timeout happened while while trying to retract your message.":["Tempo scaduto tentando di ritrattare il tuo messaggio."],"You\'re not allowed to register yourself in this groupchat.":["Non ti è permesso registrarti in questa conversazione di gruppo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Non ti è permesso registrarti in questa conversazione di gruppo perchè è per soli membri."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Non ti è permesso registrare il tuo soprannome in questa conversazione di gruppo, non supporta la registrazione."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Non ti è permesso registrare il tuo soprannome in questa conversazione di gruppo, è stato fornito un modulo di dati non valido."],"Topic set by %1$s":["Argomento impostato da %1$s"],"Topic cleared by %1$s":["Argomento rimosso da %1$s"],"%1$s has been banned by %2$s":["%1$s è stato bannato da %2$s"],"%1$s has been banned":["%1$s è stato bannato"],"%1$s\'s nickname has changed":["%1$s nickname è cambiato"],"%1$s has been kicked out by %2$s":["%1$s è stato espulso da %2$s"],"%1$s has been kicked out":["%1$s è stato espulso"],"%1$s has been removed because of an affiliation change":["%1$s è stato rimosso a causa di un cambio di affiliazione"],"%1$s has been removed for not being a member":["%1$s è stato rimosso in quanto non membro"],"%1$s is no longer an admin of this groupchat":["%1$s non è più un amministratore di questa conversazione di gruppo"],"%1$s is no longer an owner of this groupchat":["%1$s non è più un proprietario di questa conversazione di gruppo"],"%1$s is no longer banned from this groupchat":["%1$s non è più bandito da questa conversazione di gruppo"],"%1$s is no longer a member of this groupchat":["%1$s non è più un membro di questa conversazione di gruppo"],"%1$s is now a member of this groupchat":["%1$s ora è un membro di questa conversazione di gruppo"],"%1$s is now an %2$s of this groupchat":["%1$s ora è un %2$s di questa conversazione di gruppo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Il soprannome che hai scelto è riservato o attualmente in uso, per favore scegline uno diverso."],"Password incorrect":["Password non corretta"],"You are not on the member list of this groupchat.":["Non sei sulla lista dei membri di questa conversazione di gruppo."],"You have been banned from this groupchat.":["Sei stato bandito da questa conversazione di gruppo."],"You are not allowed to create new groupchats.":["Non ti è permesso creare nuove conversazioni di gruppo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Il tuo soprannome non è conforme alle regole di questa conversazione di gruppo."],"This groupchat does not (yet) exist.":["Questa conversazione di gruppo non esiste (per ora)."],"This groupchat has reached its maximum number of participants.":["Questa conversazione di gruppo ha raggiunto il limite massimo di partecipanti."],"Remote server not found":["Server remoto non trovato"],"The explanation given is: \\"%1$s\\".":["La spiegazione data è: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s ti ha invitato a partecipare ad una conversazione di gruppo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s ti ha invitato a partecipare ad una conversazione di gruppo: %2$s, ed ha lasciato la seguente motivazione: “%3$s”"],"Error":["Errore"],"Sorry, something went wrong while trying to save your bookmark.":["Scusa, qualcosa è andato storto durante il salvataggio del tuo segnalibro."],"Timeout Error":["Errore di Tempo Scaduto"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Il server non ha consegnato i tuoi segnalibri entro il tempo consentito. Puoi ricaricare la pagina e richiederli ancora."],"My contacts":["I miei contatti"],"Pending contacts":["Contatti in attesa"],"Contact requests":["Richieste di contatto"],"Ungrouped":["Senza Gruppo"],"New messages":["Nuovi messaggi"],"Sorry, there was an error while trying to add %1$s as a contact.":["Scusa, si è verificato un errore durante il tentativo di aggiungere %1$s come contatto."],"This client does not allow presence subscriptions":["Questo client non consente sottoscrizioni di presenza"],"Click to hide these contacts":["Clicca per nascondere questi contatti"],"Unbookmark this groupchat":["Rimuovi dai segnalibri questa conversazione di gruppo"],"Click to open this groupchat":["Clicca per aprire questa conversazione di gruppo"],"Click to toggle the bookmarks list":["Clicca per aprire/chiudere l\'elenco dei segnalibri"],"Bookmarks":["Segnalibri"],"Bookmark this groupchat":["Aggiungi ai segnalibri questa conversazione di gruppo"],"Would you like this groupchat to be automatically joined upon startup?":["Vuoi unirti automaticamente a questa conversazione di gruppo subito dopo aver effettuato l\'accesso?"],"The name for this bookmark:":["Nome per questo segnalibro:"],"What should your nickname for this groupchat be?":["Quale dovrebbe essere il soprannome per questa conversazione di gruppo?"],"Save":["Salva"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Sei sicuro di voler rimuovere il segnalibro \\"%1$s\\"?"],"Unbookmark":["Elimina il segnalibro"],"Bookmark":["Segnalibro"],"Close":["Chiudi"],"OK":["OK"],"Image: ":["Immagine: "],"Download audio file \\"%1$s\\"":["Scarica file audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Scarica file \\"%1$s\\""],"Cancel Editing":["Annulla modifica"],"Edit":["Modifica"],"Retract":["Ritratta"],"Message versions":["Versioni del messaggio"],"Retry":["Riprova"],"Uploading file:":["Caricamento file:"],"%1$s has removed this message":["%1$s ha rimosso questo messaggio"],"This message has been edited":["Questo messaggio è stato modificato"],"Show more":["Mostra di più"],"Show less":["Mostra meno"],"No message history available.":["Nessuna cronologia del messaggio disponibile."],"Search results":["Cerca risultati"],"Search":["Cerca"],"Insert emojis":["Inserisci emoji"],"Send the message":["Invia il messaggio"],"Start a call":["Inizia una chiamata"],"Message characters remaining":["Caratteri rimanenti per il messaggio"],"Hide participants":["Nascondi partecipanti"],"Show participants":["Mosta partecipanti"],"Choose a file to send":["Scegli un file da inviare"],"Click to write as a normal (non-spoiler) message":["Clicca per scrivere un messaggio normale (senza spoiler)"],"Click to write your message as a spoiler":["Clicca per scrivere un messaggio come spoiler"],"The User\'s Profile Image":["L\'immagine di profilo dell\'utente"],"Trusted":["Fidato"],"Untrusted":["Non fidato"],"OMEMO Fingerprints":["Impronte OMEMO"],"No OMEMO-enabled devices found":["Nessun dispositivo OMEMO abilitato trovato"],"Remove as contact":["Rimuovi dai contatti"],"XMPP Address":["Indirizzo XMPP"],"Email":["Email"],"Full Name":["Nome Completo"],"Nickname":["Soprannome"],"Refresh":["Aggiorna"],"Role":["Ruolo"],"URL":["URL"],"%1$s is typing":["%1$s sta scrivendo"],"%1$s has stopped typing":["%1$s ha smesso di scrivere"],"%1$s has gone away":["%1$s si è allontanato"],"Remove messages":["Rimuovi messaggi"],"Close this chat":["Chiudi questa conversazione"],"Write in the third person":["Scrivi in terza persona"],"Show this menu":["Mostra questo menu"],"Hidden message":["Messaggio Nascosto"],"Message":["Messaggio"],"Optional hint":["Suggerimento opzionale"],"You have unread messages":["Hai messaggi non letti"],"Details":["Dettagli"],"See more information about this person":["Mostra più informazioni su questa persona"],"Close and end this conversation":["Chiudi e termina questa conversazione"],"Sorry, the connection has been lost, and your message could not be sent":["Spiacente, la connessione è stata persa e il tuo messaggio non è stato inviato"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tieni conto che altri client (e server) XMPP/Jabber potrebbero non supportare ancora il ritiro e questo messaggio potrebbe non essere rimosso dappertutto."],"Are you sure you want to retract this message?":["Sei sicuro di voler ritirare questo messaggio?"],"Confirm":["Conferma"],"You have an unsent message which will be lost if you continue. Are you sure?":["Hai un messaggio non inviato che sarà perso se continui. Sei sicuro?"],"Are you sure you want to clear the messages from this conversation?":["Sei sicuro di volere pulire i messaggi da questa conversazione?"],"%1$s has gone offline":["%1$s si è disconnesso"],"%1$s is busy":["%1$s è occupato"],"%1$s is online":["%1$s è in linea"],"Sorry, something went wrong while trying to refresh":["Scusa, qualcosa è andato storto durante il tentativo di aggiornamento"],"Are you sure you want to remove this contact?":["Sei sicuro di voler rimuovere questo contatto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Scusa, si è verificato un errore durante il tentativo di rimozione di %1$s come contatto."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per migliorare le prestazioni, memorizziamo i tuoi dati nella cache in questo browser. Deseleziona questa casella se si tratta di un computer pubblico o se desideri che i tuoi dati vengano eliminati quando esci. È importante disconnettersi esplicitamente, altrimenti non tutti i dati memorizzati nella cache potrebbero essere eliminati. Nota bene, quando utilizzi un dispositivo non fidato, la crittografia OMEMO NON è disponibile."],"This is a trusted device":["Questo è un dispositivo fidato"],"Password":["Password"],"Create an account":["Crea un account"],"Don\'t have a chat account?":["Non hai un account?"],"Log in":["Accedi"],"Disconnected":["Disconnesso"],"Click here to log in anonymously":["Clicca per accedere in modo anonimo"],"Username":["Nome utente"],"user@domain":["utente@dominio"],"Please enter a valid XMPP address":["Inserisci un indirizzo XMPP valido"],"Chat Contacts":["Contatti"],"Toggle chat":["Attiva/disattiva conversazione"],"Click to restore this chat":["Clicca per ripristinare questa conversazione"],"Minimized":["Ridotto"],"Minimize":["Ridotto"],"Minimize this chat":["Riduci questa conversazione"],"Minimize this groupchat":["Riduci questa conversazione"],"This field is required":["Questo campo è richiesto"],"Join":["Unisciti"],"Enter a new Groupchat":["Entra in una nuova Conversazione di gruppo"],"name@conference.example.org":["nome@conferenza.esempio.org"],"Groupchat name":["Nome conversazione di gruppo"],"Groupchat address":["Indirizzo conversazione di gruppo"],"Groupchat id is invalid.":["L\'ID della conversazione di gruppo non è valido."],"Invite":["Invita"],"Invite someone to this groupchat":["Invita qualcuno in questa conversazione di gruppo"],"user@example.org":["utente@esempio.org"],"Optional reason for the invitation":["Motivazione facoltativa per l\'invito"],"Show groupchats":["Mostra conversazioni di gruppo"],"Server address":["Indirizzo del server"],"Show more information on this groupchat":["Mostra più informazioni su questa conversazione di gruppo"],"Query for Groupchats":["Interroga per Conversazioni di gruppo"],"Description:":["Descrizione:"],"Groupchat Address (JID):":["Indirizzo conversazione di gruppo (JID):"],"Participants:":["Partecipanti:"],"Features:":["Funzionalità:"],"Requires authentication":["Richiede autenticazione"],"Hidden":["Nascosta"],"Requires an invitation":["Richiede un invito"],"Moderated":["Moderata"],"Non-anonymous":["Non anonima"],"Open":["Aperta"],"Permanent":["Permanente"],"Public":["Pubblica"],"Semi-anonymous":["Semi-anonima"],"Temporary":["Temporanea"],"Unmoderated":["Non moderata"],"conference.example.org":["conferenza.esempio.org"],"Groupchats found":["Conversazioni di gruppo trovate"],"No groupchats found":["Nessuna conversazione di gruppo trovata"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["I moderatori sono utenti privilegiati che possono cambiare i ruoli di altri utenti (ad eccezione degli amministratori o dei possessori di affiliazioni)."],"The default role, implies that you can read and write messages.":["Il ruolo predefinito, implica che tu possa leggere e scrivere messaggi."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Ai visitatori non è consentito di scrivere messaggi in una conversazione multi utente moderata."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietario è la più alta affiliazione. I proprietari possono modificare ruoli e affiliazioni di tutti gli altri utenti."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Amministratore è la seconda più alta affiliazione. Gli amministratori possono modificare ruoli e affiliazioni di tutti gli altri utenti ad eccezione dei proprietari."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per bandire un utente, puoi assegnare l\'affiliazione di \\"escluso\\"."],"Change role":["Cambia ruolo"],"New Role":["Nuovo Ruolo"],"Reason":["Motivazione"],"Change affiliation":["Cambia l\'affiliazione"],"New affiliation":["Nuova affiliazione"],"Affiliation":["Affiliazione"],"Moderator Tools":["Strumenti di Moderazione"],"No users with that affiliation found.":["Nessun utente con quell\'affiliazione trovato."],"No users with that role found.":["Nessun utente con quel ruolo trovato."],"Type here to filter the search results":["Scrivi qui per filtrare i risultati della ricerca"],"Show users":["Mostra utenti"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["I ruoli sono assegnati agli utenti e permettono o negano certe funzionalità nelle conversazioni multi utente. Sono assegnati sia esplicitamente che implicitamente come parte di un\'affiliazione. Un ruolo che non è dato per affiliazione è valido solo per la sessione corrente dell\'utente."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Un\'affiliazione è un diritto permanente che tipicamente implica un certo ruolo che garantisce privilegi e responsabilità. Per esempio amministratori e proprietari automaticamente hanno il ruolo di moderatore."],"Timeout error while trying to set the affiliation":["Tempo scaduto tentando di impostare l\'affiliazione"],"Sorry, you\'re not allowed to make that change":["Spiacente, non ti è permesso effettuare quella modifica"],"Sorry, something went wrong while trying to set the affiliation":["Scusa, si è verificato un errore durante l\'impostazione dell\'affiliazione"],"Affiliation changed":["Affiliazione cambiata"],"Role changed":["Ruolo cambiato"],"You\'re not allowed to make that change":["Non ti è permesso effettuare questa modifica"],"Sorry, something went wrong while trying to set the role":["Scusa, si è verificato un errore durante l\'impostazione del ruolo"],"Topic":["Argomento"],"Topic author":["Autore argomento"],"Groupchat address (JID)":["Indirizzo conversazione di gruppo (JID)"],"Message archiving":["Archiviazione Messaggi"],"Messages are archived on the server":["Messaggi sono archiviati sul server"],"Description":["Descrizione"],"Features":["Funzionalità"],"This groupchat is not publicly searchable":["Questa conversazione di gruppo non è cercabile pubblicamente"],"This groupchat is restricted to members only":["Questa conversazione di gruppo è ristretta ai soli membri"],"Members only":["Solo membri"],"Participants entering this groupchat need to request permission to write":["I partecipanti che entrano in questa conversazione di gruppo devono richiedere il permesso di scrivere"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Questa conversazione di gruppo non richiede una password per accedere"],"No password required":["Nessuna password richiesta"],"Not anonymous":["Non anonima"],"All other groupchat participants can see your XMPP address":["Tutti gli altri partecipanti alla conversazione di gruppo possono vedere il tuo indirizzo XMPP"],"Not moderated":["Non moderata"],"Participants entering this groupchat can write right away":["I partecipanti che entrano in questa conversazione di gruppo possono scrivere immediatamente"],"Online users":["Utenti in linea"],"Anyone can join this groupchat":["Chiunque può unirsi a questa conversazione di gruppo"],"This groupchat requires a password before entry":["Questa conversazione di gruppo richiede una password per accedere"],"Password protected":["Protetto da Password"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Questa conversazione di gruppo persiste anche se diventa inoccupata"],"Only moderators can see your XMPP address":["Solo i moderatori possono vedere il tuo indirizzo XMPP"],"This groupchat will disappear once the last person leaves":["Questa conversazione di gruppo sparirà se diventa inoccupata"],"This groupchat is publicly searchable":["Questa conversazione di gruppo è ricercabile pubblicamente"],"Groupchat info for %1$s":["Informazioni della conversazione di gruppo per %1$s"],"You\'re not allowed to send messages in this room":["Non ti è permesso inviare messaggi in questa stanza"],"The conversation has moved. Click below to enter.":["La conversazione si è trasferita. Clicca qui sotto per entrare."],"This groupchat no longer exists":["Questa conversazione di gruppo non esiste più"],"Hide the groupchat topic":["Nascondi l\'argomento della conversazione"],"This groupchat is bookmarked":["Questa conversazione è nei segnalibri"],"Enter groupchat":["Entra nella conversazione di gruppo"],"Choose a nickname to enter":["Scegli un soprannome per entrare"],"Please choose your nickname":["Per favore scegli il tuo soprannome"],"This groupchat requires a password":["Questa conversazione di gruppo richiede una password"],"Password: ":["Password: "],"Submit":["Invia"],"This user is a moderator.":["Questo utente è un moderatore."],"This user can send messages in this groupchat.":["Questo utente può inviare messaggi in questa conversazione di gruppo."],"This user can NOT send messages in this groupchat.":["Questo utente NON può inviare messaggi in questa conversazione di gruppo."],"Owner":["Proprietario"],"Admin":["Amministratore"],"Member":["Membro"],"Moderator":["Moderatore"],"Visitor":["Visitatore"],"Click to mention %1$s in your message.":["Clicca per menzionare %1$s nel tuo messaggio."],"Participants":["Partecipanti"],"%1$s has entered the groupchat":["%1$s è entrato nella conversazione di gruppo"],"%1$s has left the groupchat":["%1$s ha lasciato la conversazione di gruppo"],"%1$s is now a moderator":["%1$s ora è un moderatore"],"%1$s is no longer a moderator":["%1$s non è più un moderatore"],"%1$s has been given a voice":["%1$s ora può scrivere nella conversazione"],"%1$s has been muted":["%1$s è stato silenziato"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s stanno scrivendo"],"%1$s have stopped typing":["%1$s hanno smesso di scrivere"],"%1$s have gone away":["%1$s si sono allontanati"],"%1$s have entered the groupchat":["%1$s sono entrati nella conversazione di gruppo"],"%1$s have left the groupchat":["%1$s hanno abbandonato la conversazione di gruppo"],"%1$s are now moderators":["%1$s ora sono moderatori"],"%1$s are no longer moderators":["%1$s non sono più moderatori"],"%1$s have been given voices":["%1$s ora possono scrivere nella conversazione"],"%1$s have been muted":["%1$s sono stati silenziati"],"Change user\'s affiliation to admin":["Cambia l\'affiliazione dell\'utente ad amministratore"],"Ban user by changing their affiliation to outcast":["Bandisci l\'utente cambiando l\'affiliazione ad escluso"],"Clear the chat area":["Pulisci l\'area della conversazione"],"Close this groupchat":["Chiudi questa conversazione di gruppo"],"Change user role to participant":["Cambia il ruolo dell\'utente in partecipante"],"Remove this groupchat":["Rimuovi questa conversazione di gruppo"],"Kick user from groupchat":["Espelli utente dalla conversazione di gruppo"],"Write in 3rd person":["Scrivi in terza persona"],"Grant membership to a user":["Concedi lo stato di membro ad un utente"],"Opens up the moderator tools GUI":["Apri l\'interfaccia degli strumenti di moderazione"],"Remove user\'s ability to post messages":["Rimuovi la possibilità di inviare messaggi dell\'utente"],"Change your nickname":["Cambia il tuo soprannome"],"Grant moderator role to user":["Concedi il ruolo di moderatore all\'utente"],"Grant ownership of this groupchat":["Concedi la proprietà di questa conversazione di gruppo"],"Register your nickname":["Registra il tuo soprannome"],"Revoke the user\'s current affiliation":["Revoca l\'attuale affiliazione dell\'utente"],"Set groupchat subject":["Imposta l\'oggetto della conversazione di gruppo"],"Set groupchat subject (alias for /subject)":["Imposta l\'oggetto della conversazione di gruppo (alias per /oggetto)"],"Allow muted user to post messages":["Consenti all\'utente silenziato di inviare messaggi"],"You are about to retract this message.":["Stai per ritirare questo messaggio."],"You may optionally include a message, explaining the reason for the retraction.":["Puoi facoltativamente includere un messaggio, spiegando il motivo del ritiro."],"Message Retraction":["Ritiro Messaggio"],"Optional reason":["Motivazione facoltativa"],"Sorry, you\'re not allowed to retract this message":["Scusa, non ti è consentito di ritirare questo messaggio"],"A timeout occurred while trying to retract the message":["Tempo scaduto durante il tentativo di ritirare il tuo messaggio"],"Sorry, you\'re not allowed to retract this message.":["Scusa, non ti è consentito di ritirare questo messaggio."],"Show more information about this groupchat":["Mostra più informazioni su questa conversazione di gruppo"],"Configure":["Configura"],"Configure this groupchat":["Configura questa conversazione di gruppo"],"Invite someone to join this groupchat":["Invita qualcuno ad unirsi a questa conversazione di gruppo"],"Show topic":["Mostra argomento"],"Hide topic":["Nascondi argomento"],"Show the topic message in the heading":["Mostra l\'argomento nell\'intestazione"],"Hide the topic in the heading":["Nascondi l\'argomento nell\'intestazione"],"Moderate":["Modera"],"Moderate this groupchat":["Modera questa conversazione di gruppo"],"Destroy":["Distruggi"],"Leave":["Esci"],"Leave and close this groupchat":["Esci e chiudi questa conversazione di gruppo"],"Are you sure you want to leave this groupchat?":["Vuoi veramente abbandonare questa conversazione di gruppo?"],"Hide the list of participants":["Nascondi la lista dei partecipanti"],"Forbidden: you do not have the necessary role in order to do that.":["Non consentito: non hai il ruolo necessario per fare questo."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Non consentito: non hai l\'affiliazione necessaria per fare questo."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Errore: il comando \\"%1$s\\" richiede due argomenti, il soprannome dell\'utente e opzionalmente una motivazione."],"Error: couldn\'t find a groupchat participant based on your arguments":["Errore: non è stato possibile trovare un partecipante alla conversazione di gruppo con gli argomenti forniti"],"Error: found multiple groupchat participant based on your arguments":["Errore: trovati più partecipanti alla conversazione di gruppo con gli argomenti forniti"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Nessun partecipante trovato con quel nick. Potrebbe aver abbandonato la conversazione."],"Sorry, an error happened while running the command.":["Scusa, si è verificato un errore durante l\'esecuzione del comando."],"Check your browser\'s developer console for details.":["Controlla la console per sviluppatori del tuo browser per dettagli."],"Are you sure you want to destroy this groupchat?":["Vuoi veramente distruggere questa conversazione di gruppo?"],"Please enter the XMPP address of this groupchat to confirm":["Per favore inserisci l\'indirizzo XMPP di questa conversazione per confermare"],"name@example.org":["nome@esempio.org"],"Optional reason for destroying this groupchat":["Motivo facoltativo per distruggere questa conversazione"],"Optional XMPP address for a new groupchat that replaces this one":["Indirizzo XMPP facoltativo per la nuova conversazione che sostituisce questa"],"replacement@example.org":["sostituto@esempio.org"],"Your nickname is \\"%1$s\\"":["Il tuo soprannome è:\\" %1$s\\""],"Error: invalid number of arguments":["Errore: numero non valido di argomenti"],"This action was done by %1$s.":["Questa azione è stata fatta da %1$s."],"The reason given is: \\"%1$s\\".":["La motivazione data è: \\"%1$s\\"."],"Groupchats":["Conversazioni di gruppo"],"Add a new groupchat":["Aggiungi una nuova conversazione di gruppo"],"Query for groupchats":["Interroga per conversazioni di gruppo"],"Sorry, an error occurred while trying to submit the config form.":["Scusa, si è verificato un errore durante il tentativo di inviare il modulo di configurazione."],"Close these announcements":["Chiudi questi annunci"],"Announcements":["Annunci"],"Click to open this server message":["Clicca per aprire questo messaggio del server"],"Notification from %1$s":["Notifica da %1$s"],"%1$s says":["%1$s dice"],"has gone offline":["si è disconnesso"],"has gone away":["si è allontanato"],"is busy":["è occupato"],"has come online":["ora è in linea"],"wants to be your contact":["vuole essere un tuo contatto"],"Hide":["Nascondi"],"Execute":["Esegui"],"On which entity do you want to run commands?":["Su quale entità vuoi eseguire i comandi?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Alcuni servizi XMPP ed entità permettono agli utenti privilegiati di eseguire comandi ad-hoc."],"Commands found":["Comandi trovati"],"List available commands":["Elenca comandi disponibili"],"No commands found":["Nessun comando trovato"],"Sorry, an error occurred while looking for commands on that entity.":["Spiacente, si è verificato un errore cercando comandi su quella entità."],"The specified entity doesn\'t support ad-hoc commands":["L\'entità specificata non supporta comandi ad-hoc"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Spiacente, si è verificato un errore tentando di eseguire il comando. Controlla la console del browser per i dettagli"],"About":["A proposito"],"Commands":["Comandi"],"Settings":["Impostazioni"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s Open Source %2$s sviluppato per voi da %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traducilo %2$s nella tua lingua"],"Log out":["Disconnettiti"],"Click to change your chat status":["Clicca per cambiare il tuo stato"],"Show details about this chat client":["Mostra più dettagli su questo client"],"Your avatar image":["La tua immagine di profilo"],"Checkbox for selecting the following fingerprint":["Casella di controllo per selezionare le impronte seguenti"],"Device without a fingerprint":["Dispositivo senza un\'impronta"],"Checkbox for selecting the following device":["Casella per selezionare il seguente dispositivo"],"Other OMEMO-enabled devices":["Altri dispositivi abilitati OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Casella di controllo per selezionare le impronte di tutti gli altri dispositivi OMEMO"],"Remove checked devices and close":["Rimuovi dispositivi selezionati e chiudi"],"Select all":["Seleziona tutto"],"This device\'s OMEMO fingerprint":["L\'impronta OMEMO di questo dispositivo"],"Generate new keys and fingerprint":["Genera nuove chiavi e impronte"],"Your Profile":["Il tuo Profilo"],"XMPP Address (JID)":["Indirizzo XMPP (JID)"],"Save and close":["Salva e chiudi"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilizza le virgole per separare più ruoli. I tuoi ruoli sono visualizzati accanto al tuo nome nei tuoi messaggi della conversazione."],"OMEMO":["OMEMO"],"Profile":["Profilo"],"Sorry, an error happened while trying to save your profile data.":["Scusa, si è verificato un errore durante il salvataggio dei dati del tuo profilo."],"You can check your browser\'s developer console for any error output.":["Puoi controllare la console per sviluppatori del tuo browser per qualsiasi output di errore."],"Away":["Assente"],"Busy":["Occupato"],"Custom status":["Stato personalizzato"],"Offline":["Non in linea"],"Online":["In linea"],"Away for long":["Assente da molto"],"Change chat status":["Clicca per cambiare il tuo stato"],"Personal status message":["Messaggio personale di stato"],"I am %1$s":["Io sono %1$s"],"Are you sure you want to log out?":["Sei sicuro di volerti disconnettere?"],"online":["in linea"],"busy":["occupato"],"away for long":["assente da molto"],"away":["assente"],"offline":["non in linea"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Spiacente, impossibile decifrare un messaggio OMEMO ricevuto a causa di un errore."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s non sembra abbia un client che supporta OMEMO. Non sembra sia possibile avere una conversazione criptata in questa conversazione di gruppo."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Impossibile usare la crittografia end-to-end in questa conversazione di gruppo, la conversazione è anonima o non tutti i partecipanti supportano OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Impossibile utilizzare la crittografia end-to-end perchè %1$s utilizza un client che non supporta OMEMO."],"Messages are being sent in plaintext":["I messaggi saranno inviati come testo normale"],"Messages are sent encrypted":["I messaggi vengono inviati cifrati"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Questa conversazione di gruppo deve essere per soli membri e non anonima per potere supportare i messaggi cifrati OMEMO"],"Sorry, an error occurred while trying to remove the devices.":["Scusa, si è verificato un errore durante la rimozione dei dispositivi."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sei sicuro di voler generare delle nuove chiavi OMEMO? Questo rimuoverà le tue vecchie chiavi, e tutti i messaggi criptati in precedenza non saranno più decrittabili su questo dispositivo."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Scusa, non siamo in grado di inviare un messaggio criptato perchè %1$s richiede che tu sottoscriva il suo stato di presenza in modo da visualizzare le sue informazioni OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Scusa, non siamo in grado di inviare un messaggio criptato perchè il server remoto per %1$s non può essere trovato"],"Unable to send an encrypted message due to an unexpected error.":["Non siamo in grado di inviare un messaggio criptato a causa di un errore inaspettato."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Scusa, nessun dispositivo trovato al quale possiamo inviare un messaggio criptato OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Questo è un messaggio criptato OMEMO che il tuo client non sembra supportare. Trova più informazioni su https://conversations.im/omemo"]," e.g. conversejs.org":[" es. conversejs.org"],"Fetch registration form":["Recupera modulo di registrazione"],"Tip: A list of public XMPP providers is available":["Suggerimento: È disponibile un elenco di fornitori XMPP pubblici"],"here":["qui"],"Sorry, we\'re unable to connect to your chosen provider.":["Scusa, non siamo in grado di connetterci al fornitore che hai scelto."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Scusa, il fornitore specificato non supporta la registrazione di account da remoto. Per favore prova con un altro fornitore."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Qualcosa è andato storto durante la connessione con “%1$s”. Sei sicuro che esista?"],"Now logging you in":["Ora ti stiamo facendo accedere"],"Registered successfully":["Registrazione riuscita"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Il provider ha respinto il tentativo di registrazione. Per favore controlla che i dati inseriti siano corretti."],"Leave this groupchat":["Lascia questa conversazione di gruppo"],"Click to toggle the list of open groupchats":["Clicca per aprire/chiudere l\'elenco delle conversazioni di gruppo"],"Open Groupchats":["Conversazioni di gruppo aperte"],"Are you sure you want to leave the groupchat %1$s?":["Sei sicuro di voler lasciare la conversazione di gruppo \\"%1$s\\"?"],"Add":["Aggiungi"],"Add a Contact":["Aggiungi un Contatto"],"This contact is busy":["Questo contatto è occupato"],"This contact is online":["Questo contatto è in linea"],"This contact is offline":["Questo contatto non è in linea"],"This contact is unavailable":["Questo contatto non è disponibile"],"This contact is away for an extended period":["Questo contatto è lontano dal dispositivo da un lungo periodo"],"This contact is away":["Questo contatto è lontano dal dispositivo"],"Contact name":["Nome del contatto"],"Optional nickname":["Soprannome opzionale"],"Sorry, could not find a contact with that name":["Scusa, non è stato possibile trovare un contatto con quel nome"],"This contact has already been added":["Questo contatto è già stato aggiunto"],"Filter":["Filtra"],"Filter by contact name":["Filtra per nome del contatto"],"Filter by group name":["Filtra per nome del gruppo"],"Filter by status":["Filtra per stato"],"Any":["Qualsiasi"],"Unread":["Non letto"],"Chatty":["Chiaccherone"],"Extended Away":["Lontano da molto tempo"],"Click to remove %1$s as a contact":["Clicca per rimuovere %1$s dai contatti"],"Click to accept the contact request from %1$s":["Clicca per accettare la richiesta di contatto da %1$s"],"Click to decline the contact request from %1$s":["Clicca per rifiutare la richiesta di contatto da %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Clicca per parlare con %1$s (indirizzo XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Sei sicuro di voler rifiutare questa richiesta di contatto?"],"Contacts":["Contatti"],"Add a contact":["Aggiungi un contatto"],"Re-sync your contacts":["Ri-sincronizza i tuoi contatti"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[158],{524:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"it"},"Create your account":["Crea il tuo account"],"Please enter the XMPP provider to register with:":["Per favore inserisci il fornitore del servizio XMPP con cui registrarti:"],"Already have a chat account?":["Hai già un account?"],"Log in here":["Accedi qui"],"Account Registration:":["Registrazione account:"],"Register":["Registrati"],"Choose a different provider":["Scegli un altro fornitore"],"Hold tight, we\'re fetching the registration form…":["Tieniti forte, stiamo recuperando il modulo di registrazione…"],"Cancel":["Annulla"],"The connection has dropped, attempting to reconnect.":["La connessione è caduta, attendi la riconnessione."],"An error occurred while connecting to the chat server.":["Si è verificato un errore durante la connessione al server."],"Your XMPP address and/or password is incorrect. Please try again.":["Il tuo indirizzo XMPP e/o la tua password sono sbagliati. Riprova."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Spiacente, impossibile connettersi all\'host XMPP con il dominio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Il server XMPP non ha offerto un meccanismo di autenticazione supportato"],"Undecryptable OMEMO message":["Messaggio OMEMO non decifrabile"],"Sorry, could not determine upload URL.":["Spiacente, impossibile determinare l\'URL di caricamento."],"Sorry, could not determine file upload URL.":["Spiacente, impossibile determinare l\'URL di caricamento del file."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Spiacente, impossibile caricare il tuo file. Risposta del tuo server: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Spiacente, caricamento del file non riuscito."],"You\'re not allowed to retract your message.":["Non ti è permesso di ritrattare il tuo messaggio."],"Sorry, an error occurred while trying to retract your message.":["Spiacente, si è verificato un errore tentando di ritrattare il tuo messaggio."],"You\'re not allowed to send a message.":["Non ti è permesso inviare un messaggio."],"Sorry, an error occurred while trying to send your message.":["Spiacente, si è verificato un errore tentando di inviare il tuo messaggio."],"Sorry, looks like file upload is not supported by your server.":["Spiacente, sembra che il caricamento dei file non sia supportato dal tuo server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La dimensione del tuo file, %1$s, supera il massimo consentito dal tuo server, che è %2$s."],"Smileys and emotions":["Faccine ed emoji"],"People":["Persone"],"Activities":["Attività"],"Travel":["Viaggi"],"Objects":["Oggetti"],"Animals and nature":["Animali e natura"],"Food and drink":["Cibo e bevande"],"Symbols":["Simboli"],"Flags":["Bandiere"],"Stickers":["Adesivi"],"This groupchat is not anonymous":["Questa conversazione di gruppo non è anonima"],"This groupchat now shows unavailable members":["Questa conversazione di gruppo ora mostra membri non disponibili"],"This groupchat does not show unavailable members":["Questa conversazione di gruppo non mostra i membri non disponibili"],"The groupchat configuration has changed":["La configurazione della conversazione di gruppo è cambiata"],"Groupchat logging is now enabled":["La registrazione della conversazione di gruppo ora è abilitata"],"Groupchat logging is now disabled":["La registrazione della conversazione di gruppo ora è disabilitata"],"This groupchat is now no longer anonymous":["Questa conversazione di gruppo ora non è più anonima"],"This groupchat is now semi-anonymous":["Questa conversazione di gruppo ora è semi-anonima"],"This groupchat is now fully-anonymous":["Questa conversazione di gruppo ora è completamente anonima"],"A new groupchat has been created":["Una nuova conversazione di gruppo è stata creata"],"Your nickname has been automatically set to %1$s":["Il tuo soprannome è stato impostato automaticamente come %1$s"],"Your nickname has been changed to %1$s":["Il tuo nickname è stato cambiato come %1$s"],"You have been banned from this groupchat":["Sei stato bandito da questa conversazione di gruppo"],"You have exited this groupchat due to a technical problem":["Sei uscito da questa conversazione di gruppo per un problema tecnico"],"You have been kicked from this groupchat":["Sei stato espulso da questa conversazione di gruppo"],"You have been removed from this groupchat because of an affiliation change":["Sei stato rimosso da questa conversazione di gruppo a causa di un cambio di affiliazione"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sei stato rimosso da questa conversazione di gruppo poiché ora è stata ristretta ai soli membri e tu non ne fai parte"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sei stato rimosso da questa conversazione di gruppo perchè il servizio di host è in fase di spegnimento"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Ritrattazione non consegnata perchè non partecipi alla conversazione di gruppo."],"Your message was not delivered because you weren\'t allowed to send it.":["Il tuo messaggio non è stato spedito perchè non ti è permesso inviare messaggi."],"Your message was not delivered because you\'re not present in the groupchat.":["Il tuo messaggio non è stato spedito perchè non partecipi alla conversazione di gruppo."],"A timeout happened while while trying to retract your message.":["Tempo scaduto tentando di ritrattare il tuo messaggio."],"You\'re not allowed to register yourself in this groupchat.":["Non ti è permesso registrarti in questa conversazione di gruppo."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Non ti è permesso registrarti in questa conversazione di gruppo perchè è per soli membri."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Non ti è permesso registrare il tuo soprannome in questa conversazione di gruppo, non supporta la registrazione."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Non ti è permesso registrare il tuo soprannome in questa conversazione di gruppo, è stato fornito un modulo di dati non valido."],"Topic set by %1$s":["Argomento impostato da %1$s"],"Topic cleared by %1$s":["Argomento rimosso da %1$s"],"%1$s has been banned by %2$s":["%1$s è stato bannato da %2$s"],"%1$s has been banned":["%1$s è stato bannato"],"%1$s\'s nickname has changed":["%1$s nickname è cambiato"],"%1$s has been kicked out by %2$s":["%1$s è stato espulso da %2$s"],"%1$s has been kicked out":["%1$s è stato espulso"],"%1$s has been removed because of an affiliation change":["%1$s è stato rimosso a causa di un cambio di affiliazione"],"%1$s has been removed for not being a member":["%1$s è stato rimosso in quanto non membro"],"%1$s is no longer an admin of this groupchat":["%1$s non è più un amministratore di questa conversazione di gruppo"],"%1$s is no longer an owner of this groupchat":["%1$s non è più un proprietario di questa conversazione di gruppo"],"%1$s is no longer banned from this groupchat":["%1$s non è più bandito da questa conversazione di gruppo"],"%1$s is no longer a member of this groupchat":["%1$s non è più un membro di questa conversazione di gruppo"],"%1$s is now a member of this groupchat":["%1$s ora è un membro di questa conversazione di gruppo"],"%1$s is now an %2$s of this groupchat":["%1$s ora è un %2$s di questa conversazione di gruppo"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Il soprannome che hai scelto è riservato o attualmente in uso, per favore scegline uno diverso."],"Password incorrect":["Password non corretta"],"You are not on the member list of this groupchat.":["Non sei sulla lista dei membri di questa conversazione di gruppo."],"You have been banned from this groupchat.":["Sei stato bandito da questa conversazione di gruppo."],"You are not allowed to create new groupchats.":["Non ti è permesso creare nuove conversazioni di gruppo."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Il tuo soprannome non è conforme alle regole di questa conversazione di gruppo."],"This groupchat does not (yet) exist.":["Questa conversazione di gruppo non esiste (per ora)."],"This groupchat has reached its maximum number of participants.":["Questa conversazione di gruppo ha raggiunto il limite massimo di partecipanti."],"Remote server not found":["Server remoto non trovato"],"The explanation given is: \\"%1$s\\".":["La spiegazione data è: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s ti ha invitato a partecipare ad una conversazione di gruppo: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s ti ha invitato a partecipare ad una conversazione di gruppo: %2$s, ed ha lasciato la seguente motivazione: “%3$s”"],"Error":["Errore"],"Sorry, something went wrong while trying to save your bookmark.":["Scusa, qualcosa è andato storto durante il salvataggio del tuo segnalibro."],"Timeout Error":["Errore di Tempo Scaduto"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Il server non ha consegnato i tuoi segnalibri entro il tempo consentito. Puoi ricaricare la pagina e richiederli ancora."],"My contacts":["I miei contatti"],"Pending contacts":["Contatti in attesa"],"Contact requests":["Richieste di contatto"],"Ungrouped":["Senza Gruppo"],"New messages":["Nuovi messaggi"],"Sorry, there was an error while trying to add %1$s as a contact.":["Scusa, si è verificato un errore durante il tentativo di aggiungere %1$s come contatto."],"This client does not allow presence subscriptions":["Questo client non consente sottoscrizioni di presenza"],"Click to hide these contacts":["Clicca per nascondere questi contatti"],"Unbookmark this groupchat":["Rimuovi dai segnalibri questa conversazione di gruppo"],"Click to open this groupchat":["Clicca per aprire questa conversazione di gruppo"],"Click to toggle the bookmarks list":["Clicca per aprire/chiudere l\'elenco dei segnalibri"],"Bookmarks":["Segnalibri"],"Bookmark this groupchat":["Aggiungi ai segnalibri questa conversazione di gruppo"],"Would you like this groupchat to be automatically joined upon startup?":["Vuoi unirti automaticamente a questa conversazione di gruppo subito dopo aver effettuato l\'accesso?"],"The name for this bookmark:":["Nome per questo segnalibro:"],"What should your nickname for this groupchat be?":["Quale dovrebbe essere il soprannome per questa conversazione di gruppo?"],"Save":["Salva"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Sei sicuro di voler rimuovere il segnalibro \\"%1$s\\"?"],"Unbookmark":["Elimina il segnalibro"],"Bookmark":["Segnalibro"],"Close":["Chiudi"],"OK":["OK"],"Image: ":["Immagine: "],"Download audio file \\"%1$s\\"":["Scarica file audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Scarica file \\"%1$s\\""],"Cancel Editing":["Annulla modifica"],"Edit":["Modifica"],"Retract":["Ritratta"],"Message versions":["Versioni del messaggio"],"Retry":["Riprova"],"Uploading file:":["Caricamento file:"],"%1$s has removed this message":["%1$s ha rimosso questo messaggio"],"This message has been edited":["Questo messaggio è stato modificato"],"Show more":["Mostra di più"],"Show less":["Mostra meno"],"No message history available.":["Nessuna cronologia del messaggio disponibile."],"Search results":["Cerca risultati"],"Search":["Cerca"],"Insert emojis":["Inserisci emoji"],"Send the message":["Invia il messaggio"],"Start a call":["Inizia una chiamata"],"Message characters remaining":["Caratteri rimanenti per il messaggio"],"Hide participants":["Nascondi partecipanti"],"Show participants":["Mosta partecipanti"],"Choose a file to send":["Scegli un file da inviare"],"Click to write as a normal (non-spoiler) message":["Clicca per scrivere un messaggio normale (senza spoiler)"],"Click to write your message as a spoiler":["Clicca per scrivere un messaggio come spoiler"],"The User\'s Profile Image":["L\'immagine di profilo dell\'utente"],"Trusted":["Fidato"],"Untrusted":["Non fidato"],"OMEMO Fingerprints":["Impronte OMEMO"],"No OMEMO-enabled devices found":["Nessun dispositivo OMEMO abilitato trovato"],"Remove as contact":["Rimuovi dai contatti"],"XMPP Address":["Indirizzo XMPP"],"Email":["Email"],"Full Name":["Nome Completo"],"Nickname":["Soprannome"],"Refresh":["Aggiorna"],"Role":["Ruolo"],"URL":["URL"],"%1$s is typing":["%1$s sta scrivendo"],"%1$s has stopped typing":["%1$s ha smesso di scrivere"],"%1$s has gone away":["%1$s si è allontanato"],"Remove messages":["Rimuovi messaggi"],"Close this chat":["Chiudi questa conversazione"],"Write in the third person":["Scrivi in terza persona"],"Show this menu":["Mostra questo menu"],"Hidden message":["Messaggio Nascosto"],"Message":["Messaggio"],"Optional hint":["Suggerimento opzionale"],"You have unread messages":["Hai messaggi non letti"],"Details":["Dettagli"],"See more information about this person":["Mostra più informazioni su questa persona"],"Close and end this conversation":["Chiudi e termina questa conversazione"],"Sorry, the connection has been lost, and your message could not be sent":["Spiacente, la connessione è stata persa e il tuo messaggio non è stato inviato"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Tieni conto che altri client (e server) XMPP/Jabber potrebbero non supportare ancora il ritiro e questo messaggio potrebbe non essere rimosso dappertutto."],"Are you sure you want to retract this message?":["Sei sicuro di voler ritirare questo messaggio?"],"Confirm":["Conferma"],"You have an unsent message which will be lost if you continue. Are you sure?":["Hai un messaggio non inviato che sarà perso se continui. Sei sicuro?"],"Are you sure you want to clear the messages from this conversation?":["Sei sicuro di volere pulire i messaggi da questa conversazione?"],"%1$s has gone offline":["%1$s si è disconnesso"],"%1$s is busy":["%1$s è occupato"],"%1$s is online":["%1$s è in linea"],"Sorry, something went wrong while trying to refresh":["Scusa, qualcosa è andato storto durante il tentativo di aggiornamento"],"Are you sure you want to remove this contact?":["Sei sicuro di voler rimuovere questo contatto?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Scusa, si è verificato un errore durante il tentativo di rimozione di %1$s come contatto."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per migliorare le prestazioni, memorizziamo i tuoi dati nella cache in questo browser. Deseleziona questa casella se si tratta di un computer pubblico o se desideri che i tuoi dati vengano eliminati quando esci. È importante disconnettersi esplicitamente, altrimenti non tutti i dati memorizzati nella cache potrebbero essere eliminati. Nota bene, quando utilizzi un dispositivo non fidato, la crittografia OMEMO NON è disponibile."],"This is a trusted device":["Questo è un dispositivo fidato"],"Password":["Password"],"Create an account":["Crea un account"],"Don\'t have a chat account?":["Non hai un account?"],"Log in":["Accedi"],"Disconnected":["Disconnesso"],"Click here to log in anonymously":["Clicca per accedere in modo anonimo"],"Username":["Nome utente"],"user@domain":["utente@dominio"],"Please enter a valid XMPP address":["Inserisci un indirizzo XMPP valido"],"Chat Contacts":["Contatti"],"Toggle chat":["Attiva/disattiva conversazione"],"Click to restore this chat":["Clicca per ripristinare questa conversazione"],"Minimized":["Ridotto"],"Minimize":["Ridotto"],"Minimize this chat":["Riduci questa conversazione"],"Minimize this groupchat":["Riduci questa conversazione"],"This user is a moderator.":["Questo utente è un moderatore."],"This user can send messages in this groupchat.":["Questo utente può inviare messaggi in questa conversazione di gruppo."],"This user can NOT send messages in this groupchat.":["Questo utente NON può inviare messaggi in questa conversazione di gruppo."],"Owner":["Proprietario"],"Admin":["Amministratore"],"Member":["Membro"],"Moderator":["Moderatore"],"Visitor":["Visitatore"],"Click to mention %1$s in your message.":["Clicca per menzionare %1$s nel tuo messaggio."],"Participants":["Partecipanti"],"This field is required":["Questo campo è richiesto"],"Join":["Unisciti"],"Enter a new Groupchat":["Entra in una nuova Conversazione di gruppo"],"name@conference.example.org":["nome@conferenza.esempio.org"],"Groupchat name":["Nome conversazione di gruppo"],"Groupchat address":["Indirizzo conversazione di gruppo"],"Groupchat id is invalid.":["L\'ID della conversazione di gruppo non è valido."],"Invite":["Invita"],"Invite someone to this groupchat":["Invita qualcuno in questa conversazione di gruppo"],"user@example.org":["utente@esempio.org"],"Optional reason for the invitation":["Motivazione facoltativa per l\'invito"],"Show groupchats":["Mostra conversazioni di gruppo"],"Server address":["Indirizzo del server"],"Show more information on this groupchat":["Mostra più informazioni su questa conversazione di gruppo"],"Query for Groupchats":["Interroga per Conversazioni di gruppo"],"Description:":["Descrizione:"],"Groupchat Address (JID):":["Indirizzo conversazione di gruppo (JID):"],"Participants:":["Partecipanti:"],"Features:":["Funzionalità:"],"Requires authentication":["Richiede autenticazione"],"Hidden":["Nascosta"],"Requires an invitation":["Richiede un invito"],"Moderated":["Moderata"],"Non-anonymous":["Non anonima"],"Open":["Aperta"],"Permanent":["Permanente"],"Public":["Pubblica"],"Semi-anonymous":["Semi-anonima"],"Temporary":["Temporanea"],"Unmoderated":["Non moderata"],"conference.example.org":["conferenza.esempio.org"],"Groupchats found":["Conversazioni di gruppo trovate"],"No groupchats found":["Nessuna conversazione di gruppo trovata"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["I moderatori sono utenti privilegiati che possono cambiare i ruoli di altri utenti (ad eccezione degli amministratori o dei possessori di affiliazioni)."],"The default role, implies that you can read and write messages.":["Il ruolo predefinito, implica che tu possa leggere e scrivere messaggi."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Ai visitatori non è consentito di scrivere messaggi in una conversazione multi utente moderata."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietario è la più alta affiliazione. I proprietari possono modificare ruoli e affiliazioni di tutti gli altri utenti."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Amministratore è la seconda più alta affiliazione. Gli amministratori possono modificare ruoli e affiliazioni di tutti gli altri utenti ad eccezione dei proprietari."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per bandire un utente, puoi assegnare l\'affiliazione di \\"escluso\\"."],"Change role":["Cambia ruolo"],"New Role":["Nuovo Ruolo"],"Reason":["Motivazione"],"Change affiliation":["Cambia l\'affiliazione"],"New affiliation":["Nuova affiliazione"],"Affiliation":["Affiliazione"],"Moderator Tools":["Strumenti di Moderazione"],"No users with that affiliation found.":["Nessun utente con quell\'affiliazione trovato."],"No users with that role found.":["Nessun utente con quel ruolo trovato."],"Type here to filter the search results":["Scrivi qui per filtrare i risultati della ricerca"],"Show users":["Mostra utenti"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["I ruoli sono assegnati agli utenti e permettono o negano certe funzionalità nelle conversazioni multi utente. Sono assegnati sia esplicitamente che implicitamente come parte di un\'affiliazione. Un ruolo che non è dato per affiliazione è valido solo per la sessione corrente dell\'utente."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Un\'affiliazione è un diritto permanente che tipicamente implica un certo ruolo che garantisce privilegi e responsabilità. Per esempio amministratori e proprietari automaticamente hanno il ruolo di moderatore."],"Timeout error while trying to set the affiliation":["Tempo scaduto tentando di impostare l\'affiliazione"],"Sorry, you\'re not allowed to make that change":["Spiacente, non ti è permesso effettuare quella modifica"],"Sorry, something went wrong while trying to set the affiliation":["Scusa, si è verificato un errore durante l\'impostazione dell\'affiliazione"],"Affiliation changed":["Affiliazione cambiata"],"Role changed":["Ruolo cambiato"],"You\'re not allowed to make that change":["Non ti è permesso effettuare questa modifica"],"Sorry, something went wrong while trying to set the role":["Scusa, si è verificato un errore durante l\'impostazione del ruolo"],"Topic":["Argomento"],"Topic author":["Autore argomento"],"Groupchat address (JID)":["Indirizzo conversazione di gruppo (JID)"],"Message archiving":["Archiviazione Messaggi"],"Messages are archived on the server":["Messaggi sono archiviati sul server"],"Description":["Descrizione"],"Features":["Funzionalità"],"This groupchat is not publicly searchable":["Questa conversazione di gruppo non è cercabile pubblicamente"],"This groupchat is restricted to members only":["Questa conversazione di gruppo è ristretta ai soli membri"],"Members only":["Solo membri"],"Participants entering this groupchat need to request permission to write":["I partecipanti che entrano in questa conversazione di gruppo devono richiedere il permesso di scrivere"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Questa conversazione di gruppo non richiede una password per accedere"],"No password required":["Nessuna password richiesta"],"Not anonymous":["Non anonima"],"All other groupchat participants can see your XMPP address":["Tutti gli altri partecipanti alla conversazione di gruppo possono vedere il tuo indirizzo XMPP"],"Not moderated":["Non moderata"],"Participants entering this groupchat can write right away":["I partecipanti che entrano in questa conversazione di gruppo possono scrivere immediatamente"],"Online users":["Utenti in linea"],"Anyone can join this groupchat":["Chiunque può unirsi a questa conversazione di gruppo"],"This groupchat requires a password before entry":["Questa conversazione di gruppo richiede una password per accedere"],"Password protected":["Protetto da Password"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Questa conversazione di gruppo persiste anche se diventa inoccupata"],"Only moderators can see your XMPP address":["Solo i moderatori possono vedere il tuo indirizzo XMPP"],"This groupchat will disappear once the last person leaves":["Questa conversazione di gruppo sparirà se diventa inoccupata"],"This groupchat is publicly searchable":["Questa conversazione di gruppo è ricercabile pubblicamente"],"Groupchat info for %1$s":["Informazioni della conversazione di gruppo per %1$s"],"You\'re not allowed to send messages in this room":["Non ti è permesso inviare messaggi in questa stanza"],"The conversation has moved. Click below to enter.":["La conversazione si è trasferita. Clicca qui sotto per entrare."],"This groupchat no longer exists":["Questa conversazione di gruppo non esiste più"],"Hide the groupchat topic":["Nascondi l\'argomento della conversazione"],"This groupchat is bookmarked":["Questa conversazione è nei segnalibri"],"Enter groupchat":["Entra nella conversazione di gruppo"],"Choose a nickname to enter":["Scegli un soprannome per entrare"],"Please choose your nickname":["Per favore scegli il tuo soprannome"],"This groupchat requires a password":["Questa conversazione di gruppo richiede una password"],"Password: ":["Password: "],"Submit":["Invia"],"%1$s has entered the groupchat":["%1$s è entrato nella conversazione di gruppo"],"%1$s has left the groupchat":["%1$s ha lasciato la conversazione di gruppo"],"%1$s is now a moderator":["%1$s ora è un moderatore"],"%1$s is no longer a moderator":["%1$s non è più un moderatore"],"%1$s has been given a voice":["%1$s ora può scrivere nella conversazione"],"%1$s has been muted":["%1$s è stato silenziato"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s stanno scrivendo"],"%1$s have stopped typing":["%1$s hanno smesso di scrivere"],"%1$s have gone away":["%1$s si sono allontanati"],"%1$s have entered the groupchat":["%1$s sono entrati nella conversazione di gruppo"],"%1$s have left the groupchat":["%1$s hanno abbandonato la conversazione di gruppo"],"%1$s are now moderators":["%1$s ora sono moderatori"],"%1$s are no longer moderators":["%1$s non sono più moderatori"],"%1$s have been given voices":["%1$s ora possono scrivere nella conversazione"],"%1$s have been muted":["%1$s sono stati silenziati"],"Change user\'s affiliation to admin":["Cambia l\'affiliazione dell\'utente ad amministratore"],"Ban user by changing their affiliation to outcast":["Bandisci l\'utente cambiando l\'affiliazione ad escluso"],"Clear the chat area":["Pulisci l\'area della conversazione"],"Close this groupchat":["Chiudi questa conversazione di gruppo"],"Change user role to participant":["Cambia il ruolo dell\'utente in partecipante"],"Remove this groupchat":["Rimuovi questa conversazione di gruppo"],"Kick user from groupchat":["Espelli utente dalla conversazione di gruppo"],"Write in 3rd person":["Scrivi in terza persona"],"Grant membership to a user":["Concedi lo stato di membro ad un utente"],"Opens up the moderator tools GUI":["Apri l\'interfaccia degli strumenti di moderazione"],"Remove user\'s ability to post messages":["Rimuovi la possibilità di inviare messaggi dell\'utente"],"Change your nickname":["Cambia il tuo soprannome"],"Grant moderator role to user":["Concedi il ruolo di moderatore all\'utente"],"Grant ownership of this groupchat":["Concedi la proprietà di questa conversazione di gruppo"],"Register your nickname":["Registra il tuo soprannome"],"Revoke the user\'s current affiliation":["Revoca l\'attuale affiliazione dell\'utente"],"Set groupchat subject":["Imposta l\'oggetto della conversazione di gruppo"],"Set groupchat subject (alias for /subject)":["Imposta l\'oggetto della conversazione di gruppo (alias per /oggetto)"],"Allow muted user to post messages":["Consenti all\'utente silenziato di inviare messaggi"],"You are about to retract this message.":["Stai per ritirare questo messaggio."],"You may optionally include a message, explaining the reason for the retraction.":["Puoi facoltativamente includere un messaggio, spiegando il motivo del ritiro."],"Message Retraction":["Ritiro Messaggio"],"Optional reason":["Motivazione facoltativa"],"Sorry, you\'re not allowed to retract this message":["Scusa, non ti è consentito di ritirare questo messaggio"],"A timeout occurred while trying to retract the message":["Tempo scaduto durante il tentativo di ritirare il tuo messaggio"],"Sorry, you\'re not allowed to retract this message.":["Scusa, non ti è consentito di ritirare questo messaggio."],"Show more information about this groupchat":["Mostra più informazioni su questa conversazione di gruppo"],"Configure":["Configura"],"Configure this groupchat":["Configura questa conversazione di gruppo"],"Invite someone to join this groupchat":["Invita qualcuno ad unirsi a questa conversazione di gruppo"],"Show topic":["Mostra argomento"],"Hide topic":["Nascondi argomento"],"Show the topic message in the heading":["Mostra l\'argomento nell\'intestazione"],"Hide the topic in the heading":["Nascondi l\'argomento nell\'intestazione"],"Moderate":["Modera"],"Moderate this groupchat":["Modera questa conversazione di gruppo"],"Destroy":["Distruggi"],"Leave":["Esci"],"Leave and close this groupchat":["Esci e chiudi questa conversazione di gruppo"],"Are you sure you want to leave this groupchat?":["Vuoi veramente abbandonare questa conversazione di gruppo?"],"Hide the list of participants":["Nascondi la lista dei partecipanti"],"Forbidden: you do not have the necessary role in order to do that.":["Non consentito: non hai il ruolo necessario per fare questo."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Non consentito: non hai l\'affiliazione necessaria per fare questo."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Errore: il comando \\"%1$s\\" richiede due argomenti, il soprannome dell\'utente e opzionalmente una motivazione."],"Error: couldn\'t find a groupchat participant based on your arguments":["Errore: non è stato possibile trovare un partecipante alla conversazione di gruppo con gli argomenti forniti"],"Error: found multiple groupchat participant based on your arguments":["Errore: trovati più partecipanti alla conversazione di gruppo con gli argomenti forniti"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Nessun partecipante trovato con quel nick. Potrebbe aver abbandonato la conversazione."],"Sorry, an error happened while running the command.":["Scusa, si è verificato un errore durante l\'esecuzione del comando."],"Check your browser\'s developer console for details.":["Controlla la console per sviluppatori del tuo browser per dettagli."],"Are you sure you want to destroy this groupchat?":["Vuoi veramente distruggere questa conversazione di gruppo?"],"Please enter the XMPP address of this groupchat to confirm":["Per favore inserisci l\'indirizzo XMPP di questa conversazione per confermare"],"name@example.org":["nome@esempio.org"],"Optional reason for destroying this groupchat":["Motivo facoltativo per distruggere questa conversazione"],"Optional XMPP address for a new groupchat that replaces this one":["Indirizzo XMPP facoltativo per la nuova conversazione che sostituisce questa"],"replacement@example.org":["sostituto@esempio.org"],"Your nickname is \\"%1$s\\"":["Il tuo soprannome è:\\" %1$s\\""],"Error: invalid number of arguments":["Errore: numero non valido di argomenti"],"This action was done by %1$s.":["Questa azione è stata fatta da %1$s."],"The reason given is: \\"%1$s\\".":["La motivazione data è: \\"%1$s\\"."],"Groupchats":["Conversazioni di gruppo"],"Add a new groupchat":["Aggiungi una nuova conversazione di gruppo"],"Query for groupchats":["Interroga per conversazioni di gruppo"],"Sorry, an error occurred while trying to submit the config form.":["Scusa, si è verificato un errore durante il tentativo di inviare il modulo di configurazione."],"Close these announcements":["Chiudi questi annunci"],"Announcements":["Annunci"],"Click to open this server message":["Clicca per aprire questo messaggio del server"],"Notification from %1$s":["Notifica da %1$s"],"%1$s says":["%1$s dice"],"Encrypted message received":["Messaggio cifrato ricevuto"],"has gone offline":["si è disconnesso"],"has gone away":["si è allontanato"],"is busy":["è occupato"],"has come online":["ora è in linea"],"wants to be your contact":["vuole essere un tuo contatto"],"Hide":["Nascondi"],"Execute":["Esegui"],"On which entity do you want to run commands?":["Su quale entità vuoi eseguire i comandi?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Alcuni servizi XMPP ed entità permettono agli utenti privilegiati di eseguire comandi ad-hoc."],"Commands found":["Comandi trovati"],"List available commands":["Elenca comandi disponibili"],"No commands found":["Nessun comando trovato"],"Sorry, an error occurred while looking for commands on that entity.":["Spiacente, si è verificato un errore cercando comandi su quella entità."],"The specified entity doesn\'t support ad-hoc commands":["L\'entità specificata non supporta comandi ad-hoc"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Spiacente, si è verificato un errore tentando di eseguire il comando. Controlla la console del browser per i dettagli"],"About":["A proposito"],"Commands":["Comandi"],"Settings":["Impostazioni"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s Open Source %2$s sviluppato per voi da %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traducilo %2$s nella tua lingua"],"Log out":["Disconnettiti"],"Click to change your chat status":["Clicca per cambiare il tuo stato"],"Show details about this chat client":["Mostra più dettagli su questo client"],"Your avatar image":["La tua immagine di profilo"],"Checkbox for selecting the following fingerprint":["Casella di controllo per selezionare le impronte seguenti"],"Device without a fingerprint":["Dispositivo senza un\'impronta"],"Checkbox for selecting the following device":["Casella per selezionare il seguente dispositivo"],"Other OMEMO-enabled devices":["Altri dispositivi abilitati OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Casella di controllo per selezionare le impronte di tutti gli altri dispositivi OMEMO"],"Remove checked devices and close":["Rimuovi dispositivi selezionati e chiudi"],"Select all":["Seleziona tutto"],"This device\'s OMEMO fingerprint":["L\'impronta OMEMO di questo dispositivo"],"Generate new keys and fingerprint":["Genera nuove chiavi e impronte"],"Your Profile":["Il tuo Profilo"],"XMPP Address (JID)":["Indirizzo XMPP (JID)"],"Save and close":["Salva e chiudi"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilizza le virgole per separare più ruoli. I tuoi ruoli sono visualizzati accanto al tuo nome nei tuoi messaggi della conversazione."],"OMEMO":["OMEMO"],"Profile":["Profilo"],"Sorry, an error happened while trying to save your profile data.":["Scusa, si è verificato un errore durante il salvataggio dei dati del tuo profilo."],"You can check your browser\'s developer console for any error output.":["Puoi controllare la console per sviluppatori del tuo browser per qualsiasi output di errore."],"Away":["Assente"],"Busy":["Occupato"],"Custom status":["Stato personalizzato"],"Offline":["Non in linea"],"Online":["In linea"],"Away for long":["Assente da molto"],"Change chat status":["Clicca per cambiare il tuo stato"],"Personal status message":["Messaggio personale di stato"],"I am %1$s":["Io sono %1$s"],"Are you sure you want to log out?":["Sei sicuro di volerti disconnettere?"],"online":["in linea"],"busy":["occupato"],"away for long":["assente da molto"],"away":["assente"],"offline":["non in linea"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Spiacente, impossibile decifrare un messaggio OMEMO ricevuto a causa di un errore."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Spiacenti, non è stato possibile decifrare un OMEMO ricevuto perché non abbiamo il JID per quell\'utente."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s non sembra abbia un client che supporta OMEMO. Non sembra sia possibile avere una conversazione criptata in questa conversazione di gruppo."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Impossibile usare la crittografia end-to-end in questa conversazione di gruppo, la conversazione è anonima o non tutti i partecipanti supportano OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Impossibile utilizzare la crittografia end-to-end perchè %1$s utilizza un client che non supporta OMEMO."],"Messages are being sent in plaintext":["I messaggi saranno inviati come testo normale"],"Messages are sent encrypted":["I messaggi vengono inviati cifrati"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Questa conversazione di gruppo deve essere per soli membri e non anonima per potere supportare i messaggi cifrati OMEMO"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Scusa, non siamo in grado di inviare un messaggio criptato perchè %1$s richiede che tu sottoscriva il suo stato di presenza in modo da visualizzare le sue informazioni OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Scusa, non siamo in grado di inviare un messaggio criptato perchè il server remoto per %1$s non può essere trovato"],"Unable to send an encrypted message due to an unexpected error.":["Non siamo in grado di inviare un messaggio criptato a causa di un errore inaspettato."],"Sorry, an error occurred while trying to remove the devices.":["Scusa, si è verificato un errore durante la rimozione dei dispositivi."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sei sicuro di voler generare delle nuove chiavi OMEMO? Questo rimuoverà le tue vecchie chiavi, e tutti i messaggi criptati in precedenza non saranno più decrittabili su questo dispositivo."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Scusa, nessun dispositivo trovato al quale possiamo inviare un messaggio criptato OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Questo è un messaggio criptato OMEMO che il tuo client non sembra supportare. Trova più informazioni su https://conversations.im/omemo"]," e.g. conversejs.org":[" es. conversejs.org"],"Fetch registration form":["Recupera modulo di registrazione"],"Tip: A list of public XMPP providers is available":["Suggerimento: È disponibile un elenco di fornitori XMPP pubblici"],"here":["qui"],"Sorry, we\'re unable to connect to your chosen provider.":["Scusa, non siamo in grado di connetterci al fornitore che hai scelto."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Scusa, il fornitore specificato non supporta la registrazione di account da remoto. Per favore prova con un altro fornitore."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Qualcosa è andato storto durante la connessione con “%1$s”. Sei sicuro che esista?"],"Now logging you in":["Ora ti stiamo facendo accedere"],"Registered successfully":["Registrazione riuscita"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Il provider ha respinto il tentativo di registrazione. Per favore controlla che i dati inseriti siano corretti."],"Leave this groupchat":["Lascia questa conversazione di gruppo"],"Click to toggle the list of open groupchats":["Clicca per aprire/chiudere l\'elenco delle conversazioni di gruppo"],"Open Groupchats":["Conversazioni di gruppo aperte"],"Are you sure you want to leave the groupchat %1$s?":["Sei sicuro di voler lasciare la conversazione di gruppo \\"%1$s\\"?"],"Add":["Aggiungi"],"Add a Contact":["Aggiungi un Contatto"],"This contact is busy":["Questo contatto è occupato"],"This contact is online":["Questo contatto è in linea"],"This contact is offline":["Questo contatto non è in linea"],"This contact is unavailable":["Questo contatto non è disponibile"],"This contact is away for an extended period":["Questo contatto è lontano dal dispositivo da un lungo periodo"],"This contact is away":["Questo contatto è lontano dal dispositivo"],"Contact name":["Nome del contatto"],"Optional nickname":["Soprannome opzionale"],"Sorry, could not find a contact with that name":["Scusa, non è stato possibile trovare un contatto con quel nome"],"This contact has already been added":["Questo contatto è già stato aggiunto"],"Filter":["Filtra"],"Filter by contact name":["Filtra per nome del contatto"],"Filter by group name":["Filtra per nome del gruppo"],"Filter by status":["Filtra per stato"],"Any":["Qualsiasi"],"Unread":["Non letto"],"Chatty":["Chiaccherone"],"Extended Away":["Lontano da molto tempo"],"Click to remove %1$s as a contact":["Clicca per rimuovere %1$s dai contatti"],"Click to accept the contact request from %1$s":["Clicca per accettare la richiesta di contatto da %1$s"],"Click to decline the contact request from %1$s":["Clicca per rifiutare la richiesta di contatto da %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Clicca per parlare con %1$s (indirizzo XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Sei sicuro di voler rifiutare questa richiesta di contatto?"],"Contacts":["Contatti"],"Add a contact":["Aggiungi un contatto"],"Re-sync your contacts":["Ri-sincronizza i tuoi contatti"]}}}')}}]);
 //# sourceMappingURL=it-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/ja-LC_MESSAGES-converse-po.js b/src/conversejs/locales/ja-LC_MESSAGES-converse-po.js
index c794a7f1295344edc2a54083969f5048f4ecfbcb..c4a6e1bb87b76e05113dd9e23d26ab0c33796263 100644
--- a/src/conversejs/locales/ja-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/ja-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[159],{437:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"ja"},"Create your account":["アカウントを作成します"],"Please enter the XMPP provider to register with:":["登録する XMPP プロバイダーを入力してください:"],"Already have a chat account?":["アカウントを既に持っていますか ?"],"Log in here":["ここでログインしてください"],"Account Registration:":["アカウントの登録:"],"Register":["登録"],"Choose a different provider":["別のプロバイダーを選択"],"Hold tight, we\'re fetching the registration form…":["ただいま入力欄を取り寄せています…"],"Cancel":["キャンセル"],"The connection has dropped, attempting to reconnect.":["接続が失われました。再接続を試みます。"],"An error occurred while connecting to the chat server.":["チャットサーバーに接続する際にエラーが発生しました。"],"Your XMPP address and/or password is incorrect. Please try again.":["XMPP アドレス とパスワードの両方または一方が正しくありません。もう一度やり直してください。"],"Sorry, we could not connect to the XMPP host with domain: %1$s":["次のドメインの XMPP ホストに接続できませんでした: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP サーバーは対応している認証形式を提示しませんでした"],"Sorry, could not determine upload URL.":["アップロードの URL を確定できませんでした。"],"Sorry, could not determine file upload URL.":["ファイルアップロードの URL を確定できませんでした。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["ファイルのアップロードに失敗しました。サーバーの応答: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["ファイルのアップロードに失敗しました。"],"Sorry, looks like file upload is not supported by your server.":["サーバーはファイルアップロードに対応していないようです。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["ファイルのサイズ %1$s は、サーバーの制限値 %2$s を超えています。"],"Smileys and emotions":["スマイリーと感情アイコン"],"People":["人々"],"Activities":["動向"],"Travel":["旅行"],"Objects":["物"],"Animals and nature":["動物と自然"],"Food and drink":["食べ物と飲み物"],"Symbols":["シンボル"],"Flags":["旗"],"Stickers":["ステッカー"],"This groupchat is not anonymous":["この談話室は非匿名です"],"This groupchat now shows unavailable members":["この談話室はメンバー以外にも見えます"],"This groupchat does not show unavailable members":["この談話室はメンバー以外には見えません"],"The groupchat configuration has changed":["談話室の設定が変更されました"],"Groupchat logging is now enabled":["談話室の記録を取ります"],"Groupchat logging is now disabled":["談話室の記録を止めます"],"This groupchat is now no longer anonymous":["この談話室は匿名ではなくなりました"],"This groupchat is now semi-anonymous":["この談話室は半匿名です"],"This groupchat is now fully-anonymous":["この談話室は匿名です"],"A new groupchat has been created":["新しい談話室が作成されました"],"Your nickname has been automatically set to %1$s":["ニックネームは自動的に %1$s に設定されました"],"Your nickname has been changed to %1$s":["ニックネームを %1$s に変更しました"],"You have been banned from this groupchat":["この談話室から締め出されました"],"You have been kicked from this groupchat":["この談話室から蹴り出されました"],"You have been removed from this groupchat because of an affiliation change":["分掌の変更のため、この談話室から削除されました"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["談話室がメンバー制に変更されました。メンバーではないため、この談話室から削除されました"],"You have been removed from this groupchat because the service hosting it is being shut down":["サーバーがシャットダウンするため、この談話室から削除されました"],"Your message was not delivered because you weren\'t allowed to send it.":["メッセージを送信する権限がないため、メッセージは配送されません。"],"Your message was not delivered because you\'re not present in the groupchat.":["この談話室にいないため、メッセージは配送されません。"],"You\'re not allowed to register yourself in this groupchat.":["この談話室に自分自身を登録することはできません。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["この談話室はメンバー制のため、登録する権限がありません。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["登録に対応していないため、この談話室にニックネームを登録することはできません。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["データの形が正しくないため、この談話室にニックネームを登録することができません。"],"Topic set by %1$s":["%1$s が題を設定しました"],"Topic cleared by %1$s":["%1$s が題を消去しました"],"%1$s has been banned by %2$s":["%1$s は %2$s によって締め出されました"],"%1$s has been banned":["%1$s を締め出しました"],"%1$s\'s nickname has changed":["%1$s のニックネームは変更されました"],"%1$s has been kicked out by %2$s":["%1$s は %2$s によって蹴り出されました"],"%1$s has been kicked out":["%1$s を蹴り出しました"],"%1$s has been removed because of an affiliation change":["分掌の変更のため、%1$s を削除しました"],"%1$s has been removed for not being a member":["メンバーでなくなったため、%1$s を削除しました"],"%1$s is no longer an admin of this groupchat":["%1$s はこの談話室の管理人ではなくなりました"],"%1$s is no longer an owner of this groupchat":["%1$s はこの談話室の主宰者ではなくなりました"],"%1$s is no longer banned from this groupchat":["%1$s はこの談話室から締め出されました"],"%1$s is no longer a member of this groupchat":["%1$s はこの談話室のメンバーではなくなりました"],"%1$s is now a member of this groupchat":["%1$s はこの談話室のメンバーになりました"],"%1$s is now an %2$s of this groupchat":["%1$s はこの談話室の %2$s になりました"],"The nickname you chose is reserved or currently in use, please choose a different one.":["そのニックネームは予約されているか既に使われています。別のものを選んでください。"],"Password incorrect":["パスワードが違います"],"You are not on the member list of this groupchat.":["この談話室のメンバー一覧にありません。"],"You have been banned from this groupchat.":["この談話室から締め出されました。"],"You are not allowed to create new groupchats.":["新しい談話室を作成する権限がありません。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["ニックネームがこの談話室のポリシーに従っていません。"],"This groupchat does not (yet) exist.":["この談話室は(まだ)存在しません。"],"This groupchat has reached its maximum number of participants.":["この談話室は入室者数の上限に達しています。"],"Remote server not found":["サーバーが見つかりません"],"The explanation given is: \\"%1$s\\".":["理由は次のとおり: \\"%1$s\\""],"%1$s has invited you to join a groupchat: %2$s":["%1$s があなたを談話室 %2$s へ招待しています"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s があなたを談話室%2$s へ招待しています。案内: \\"%3$s\\""],"Error":["エラー"],"Sorry, something went wrong while trying to save your bookmark.":["ブックマークの保存に失敗しました。"],"Timeout Error":["タイムアウトエラー"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["サーバーは時間内にブックマークに応答しませんでした。もう一度試すにはこのページをリロードしてください。"],"My contacts":["相手先一覧"],"Pending contacts":["保留中の相手先"],"Contact requests":["会話に呼び出し"],"Ungrouped":["未整理"],"New messages":["新しいメッセージ"],"Sorry, there was an error while trying to add %1$s as a contact.":["%1$s を相手先として追加しようとする際にエラーが起こりました。"],"This client does not allow presence subscriptions":["このクライアントは在籍状況の申込を許可していません"],"Click to hide these contacts":["クリックしてこれらの相手先を隠す"],"Unbookmark this groupchat":["この談話室をブックマークからはずす"],"Click to open this groupchat":["クリックしてこの談話室を開く"],"Click to toggle the bookmarks list":["クリックしてブックマーク一覧を開閉"],"Bookmarks":["ブックマーク"],"Bookmark this groupchat":["この談話室をブックマーク"],"Would you like this groupchat to be automatically joined upon startup?":["起動時にこの談話室に自動的に入りますか ?"],"The name for this bookmark:":["このブックマークの名前:"],"What should your nickname for this groupchat be?":["この談話室でのあなたのニックネームは何にしますか ?"],"Save":["保存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["ほんとうにこのブックマーク \\"%1$s\\" を削除してもいいですか ?"],"Unbookmark":["ブックマーク解除"],"Bookmark":["ブックマーク"],"Close":["閉じる"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["ダウンロード音声ファイル \\"%1$s\\""],"Download file \\"%1$s\\"":["ダウンロードファイル \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["メッセージのバージョン"],"Retry":[""],"Uploading file:":["アップロードファイル:"],"%1$s has removed this message":["%1$s はこのメッセージを削除しました"],"This message has been edited":["メッセージは編集されています"],"Show more":["もっと見る"],"No message history available.":["メッセージ履歴はありません。"],"Search results":["検索結果"],"Search":["検索"],"Insert emojis":["絵文字を挿入"],"Send the message":["メッセージを送信"],"Start a call":["呼び出す"],"Message characters remaining":["残り文字数"],"Choose a file to send":["送信するファイルを選択"],"Click to write as a normal (non-spoiler) message":["クリックして、普通(ネタバレなし)のメッセージとして書き込む"],"Click to write your message as a spoiler":["クリックして、ネタバレとしてメッセージを書き込む"],"The User\'s Profile Image":["ユーザーのプロフィール画像"],"Trusted":["信用できる"],"Untrusted":["信用できない"],"OMEMO Fingerprints":["OMEMO 指紋"],"No OMEMO-enabled devices found":["OMEMO 利用可能なデバイスが見つかりません"],"Remove as contact":["相手先を削除"],"XMPP Address":["XMPP アドレス"],"Email":["Eメール"],"Full Name":["名前(フルネーム)"],"Nickname":["ニックネーム"],"Refresh":["再読込"],"Role":["役"],"URL":["URL"],"%1$s is typing":["%1$s は入力中"],"%1$s has stopped typing":["%1$s は入力を中断しました"],"%1$s has gone away":["%1$s は離席中"],"Remove messages":["メッセージを削除"],"Close this chat":["このチャットを閉じる"],"Write in the third person":["三人称で書く"],"Show this menu":["このメニューを表示"],"Hidden message":["私信"],"Message":["メッセージ"],"Optional hint":["その他のヒント"],"You have unread messages":["未読のメッセージがあります"],"Details":["詳細"],"See more information about this person":["この人についての詳細を見る"],"Close and end this conversation":["閉じてこの会話を終了"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["別の XMPP/Jabber クライアント(およびサーバー)は撤回に対応しておらず、このメッセージはどこででも削除されるわけではないことに留意してください。"],"Are you sure you want to retract this message?":["ほんとうにこのメッセージを撤回しますか ?"],"Confirm":["確定"],"You have an unsent message which will be lost if you continue. Are you sure?":["このまま続けると失われる未送信のメッセージがあります。よろしいですか ?"],"Are you sure you want to clear the messages from this conversation?":["ほんとうにこのチャット欄のメッセージを消去しますか ?"],"%1$s has gone offline":["%1$s はオフラインです"],"%1$s is busy":["%1$s は取り込み中です"],"%1$s is online":["%1$s は在席しています"],"Sorry, something went wrong while trying to refresh":["復元に失敗したようです"],"Are you sure you want to remove this contact?":["ほんとうにこの相手先を削除しますか ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["%1$s を相手先から削除しようとする際にエラーが起こりました。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["性能改善のため、このブラウザーにデータをキャッシュします。共用コンピューターの場合や、ログアウト時にデータを消去したい場合は、この欄のチェックをはずしてください。確実にログアウトしないと、キャッシュデータが残る可能性があります。信頼のない機器での利用の場合には OMEMO が使えないことに注意してください。"],"This is a trusted device":["これは信頼できるデバイスです"],"Password":["パスワード"],"Create an account":["アカウントを作成"],"Don\'t have a chat account?":["アカウントを持っていませんか ?"],"Log in":["ログイン"],"Disconnected":["切断されました"],"Click here to log in anonymously":["クリックして匿名としてログイン"],"Username":["ユーザー名"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["正しい XMPP アドレスを入力してください"],"Chat Contacts":["相手先"],"Toggle chat":["チャットを開閉"],"Click to restore this chat":["クリックしてこのチャットを復元"],"Minimized":["面の最小化窓"],"Minimize":["最小化"],"Minimize this chat":["このチャットを最小化"],"Minimize this groupchat":["この談話室を最小化"],"This field is required":["この欄は必須です"],"Join":["入室する"],"Enter a new Groupchat":["新しい談話室に入る"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["談話室名"],"Groupchat address":["談話室のアドレス"],"Groupchat id is invalid.":["談話室 ID が正しくありません。"],"Invite":["招待"],"Invite someone to this groupchat":["この談話室に招待"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["招待の理由(任意)"],"Show groupchats":["談話室を表示"],"Server address":["サーバーアドレス"],"Show more information on this groupchat":["この談話室についての詳細を見る"],"Query for Groupchats":["談話室の検索"],"Description:":["説明:"],"Groupchat Address (JID):":["談話室のアドレス (JID):"],"Participants:":["入室者:"],"Features:":["特徴:"],"Requires authentication":["認証の要求"],"Hidden":["非公開談話室"],"Requires an invitation":["招待の要求"],"Moderated":["司会あり"],"Non-anonymous":["非匿名談話室"],"Open":["開放"],"Permanent":["常設"],"Public":["公開談話室"],"Semi-anonymous":["半匿名"],"Temporary":["臨時"],"Unmoderated":["発言制限なし談話室"],"conference.example.org":["conference.example.org"],"No groupchats found":["談話室が見つかりません"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["司会者は他のユーザー(分掌が管理人または主宰者のユーザーを除く)の役を変更する権限があります。"],"The default role, implies that you can read and write messages.":["デフォルトの役は、メッセージを読むことと書くことができます。"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["傍聴者は、発言制限のある談話室では書き込みが許されていません。"],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["主宰者は最も高い分掌です。主宰者は他のすべてのユーザーの役と分掌を変更できます。"],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["管理人は2番めに高い分掌です。管理人は、主宰者以外のすべてのユーザーの役と分掌を変更できます。"],"To ban a user, you give them the affiliation of \\"outcast\\".":["ユーザーを締め出すには、そのユーザーの分掌を「追放者」に変更します。"],"Change role":["役を変更"],"New Role":["新しい役"],"Reason":["理由"],"Change affiliation":["分掌を変更"],"New affiliation":["新しい分掌"],"Affiliation":["分掌"],"Moderator Tools":["司会者ツール"],"No users with that affiliation found.":["その分掌のユーザーは見つかりません。"],"No users with that role found.":["この役のユーザーは見つかりません。"],"Type here to filter the search results":["検索結果を絞り込むにはここに入力してください"],"Show users":["ユーザーを表示"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["役とは、ユーザーに談話室での機能を許可または禁止することを割り当てるものです。それは分掌の一部として明示的または暗黙的に割り当てられます。分掌によらない役はユーザーのセッションの期間のみ有効です。"],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["分掌は、特定の役に対応していて権限と責任を付与する、長期間有効な資格です。たとえば、管理人や主宰者という分掌は、自動的に司会者という役になります。"],"Sorry, something went wrong while trying to set the affiliation":["分掌を設定に失敗したようです"],"Affiliation changed":["分掌を変更しました"],"Role changed":["役を変更しました"],"You\'re not allowed to make that change":["これを変更する権限がありません"],"Sorry, something went wrong while trying to set the role":["役の設定に失敗したようです"],"Topic":["題"],"Topic author":["題の設定者"],"Groupchat address (JID)":["談話室のアドレス (JID)"],"Message archiving":["記録保管"],"Messages are archived on the server":["メッセージはサーバ上に保管されます"],"Description":["説明"],"Features":["摘要"],"This groupchat is not publicly searchable":["この談話室は公に検索されません"],"This groupchat is restricted to members only":["この談話室はメンバーのみ入室できます"],"Members only":["メンバー制"],"Participants entering this groupchat need to request permission to write":["この談話室の参加者は書込権を得る必要があります"],"Name":["名前"],"This groupchat does not require a password upon entry":["この談話室に入るにはパスワードは不要です"],"No password required":["パスワード不要"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["すべての入室者はあなたの XMPP アドレスを見ることができます"],"Not moderated":["司会なし"],"Participants entering this groupchat can write right away":["この談話室の参加者は直ちに書き込むことができます"],"Online users":["オンラインユーザー"],"Anyone can join this groupchat":["誰でもこの談話室に参加できます"],"This groupchat requires a password before entry":["この談話室に入るにはパスワードが必要です"],"Password protected":["パスワード制"],"Persistent":["常設"],"This groupchat persists even if it\'s unoccupied":["この談話室は誰もいなくなっても存続します"],"Only moderators can see your XMPP address":["司会者のみが XMPP アドレスを見ることができます"],"This groupchat will disappear once the last person leaves":["この談話室は最後の在室者が退出すると消滅します"],"This groupchat is publicly searchable":["この談話室は公に検索されます"],"Groupchat info for %1$s":["%1$s の談話室情報"],"You\'re not allowed to send messages in this room":["この談話室にメッセージを送信する権限がありません"],"The conversation has moved. Click below to enter.":["会話は場所を移しました。参加するには下をクリックしてください。"],"This groupchat no longer exists":["この談話室はもう存在していません"],"Hide the groupchat topic":["談話室の題を非表示"],"This groupchat is bookmarked":["この談話室はブックマークされています"],"Enter groupchat":["談話室に入る"],"Choose a nickname to enter":["ニックネームを選択"],"Please choose your nickname":["ニックネームを選んでください"],"This groupchat requires a password":["この談話室にはパスワードが必要です"],"Password: ":["パスワード: "],"Submit":["送信"],"This user is a moderator.":["このユーザーは司会者です。"],"This user can send messages in this groupchat.":["このユーザーはこの談話室で発言できます。"],"This user can NOT send messages in this groupchat.":["このユーザーはこの談話室で発言できません。"],"Owner":["主宰者"],"Admin":["管理者"],"Member":["メンバー"],"Moderator":["司会者"],"Visitor":["傍聴者"],"Click to mention %1$s in your message.":["クリックして、メッセージで %1$s に言及します。"],"Participants":["参加者"],"%1$s has entered the groupchat":["%1$s は入室しました"],"%1$s has left the groupchat":["%1$s はこの談話室を退出しました"],"%1$s is now a moderator":["%1$s は司会者になりました"],"%1$s is no longer a moderator":["%1$s は司会者ではなくなりました"],"%1$s has been given a voice":["%1$s は発言権を得ました"],"%1$s has been muted":["%1$s は発言権を失いました"],"%1$s and %2$s":["%1$s と %2$s"],"%1$s are typing":["%1$s は入力中"],"%1$s have stopped typing":["%1$s は入力を中断しました"],"%1$s have gone away":["%1$s は離席中"],"%1$s have entered the groupchat":["%1$s は入室しました"],"%1$s have left the groupchat":["%1$s はこの談話室を退出しました"],"Change user\'s affiliation to admin":["ユーザーの分掌を管理人に変更"],"Ban user by changing their affiliation to outcast":["ユーザーの分掌を「追放者」に変更し、締め出す"],"Clear the chat area":["チャット欄をクリア"],"Close this groupchat":["この談話室を閉じる"],"Change user role to participant":["ユーザーの役を参加者に変更"],"Remove this groupchat":["この談話室を削除"],"Kick user from groupchat":["ユーザーを談話室から蹴り出す"],"Write in 3rd person":["第三者に書く"],"Grant membership to a user":["ユーザーにメンバー権を与える"],"Opens up the moderator tools GUI":["司会者ツール GUI を開く"],"Remove user\'s ability to post messages":["ユーザーを、メッセージを書き込めないようにする"],"Change your nickname":["ニックネームを変更"],"Grant moderator role to user":["ユーザーに司会者の役を与える"],"Grant ownership of this groupchat":["この談話室の主宰者にする"],"Register your nickname":["ニックネームを登録"],"Revoke the user\'s current affiliation":["ユーザーの現在の分掌を破棄"],"Set groupchat subject":["談話室の題を設定"],"Set groupchat subject (alias for /subject)":["談話室の題を設定 (コマンド /subject )"],"Allow muted user to post messages":["発言権のないユーザーにメッセージの書き込みを許可する"],"You are about to retract this message.":["このメッセージを撤回しようとしています。"],"You may optionally include a message, explaining the reason for the retraction.":["撤回に、メッセージや理由説明を付けてもかまいません。"],"Message Retraction":["メッセージの撤回"],"Optional reason":["理由(任意)"],"Sorry, you\'re not allowed to retract this message":["メッセージを撤回する権限がありません"],"A timeout occurred while trying to retract the message":["メッセージを撤回する際にタイムアウトが発生しました"],"Sorry, you\'re not allowed to retract this message.":["メッセージを撤回する権限がありません。"],"Show more information about this groupchat":["この談話室についての詳細を見る"],"Configure":["設定"],"Configure this groupchat":["この談話室を調整する"],"Invite someone to join this groupchat":["誰かをこの談話室に招待します"],"Show topic":["題を表示"],"Hide topic":["題を非表示"],"Show the topic message in the heading":["題をヘッダーに表示します"],"Hide the topic in the heading":["題をヘッダーに表示しません"],"Moderate":["調節"],"Moderate this groupchat":["この談話室を調節します"],"Destroy":["閉鎖"],"Leave":["退出"],"Leave and close this groupchat":["談話室から退出して閉じる"],"Are you sure you want to leave this groupchat?":["ほんとうにこの談話室から退出しますか ?"],"Hide the list of participants":["入室者の一覧を隠す"],"Forbidden: you do not have the necessary role in order to do that.":["禁止: この操作に必要な役にありません。"],"Forbidden: you do not have the necessary affiliation in order to do that.":["禁止: この操作に必要な分掌にありません。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["エラー: コマンド \\"%1$s\\" は2つの引数をとります。ユーザーのニックネームと、理由(これは任意)です。"],"Error: couldn\'t find a groupchat participant based on your arguments":["エラー: 談話室の参加者は見つかりませんでした"],"Error: found multiple groupchat participant based on your arguments":["エラー: 談話室の参加者が複数見つかりました"],"Sorry, an error happened while running the command.":["コマンド実行中にエラーが起きました。"],"Check your browser\'s developer console for details.":["詳細はブラウザーの開発者コンソールを確認してください。"],"Are you sure you want to destroy this groupchat?":["ほんとうにこの談話室を閉鎖しますか ?"],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["ニックネームは \\"%1$s\\" です"],"Error: invalid number of arguments":["エラー: 引数の数が違います"],"This action was done by %1$s.":["これは %1$s によって実行されました。"],"The reason given is: \\"%1$s\\".":["理由は次のとおり: \\"%1$s\\""],"Groupchats":["談話室"],"Add a new groupchat":["新しい談話室を追加"],"Query for groupchats":["談話室の検索"],"Sorry, an error occurred while trying to submit the config form.":["設定欄を受け付ける際にエラーが発生しました。"],"Close these announcements":["これらのお知らせを閉じる"],"Announcements":["お知らせ"],"Click to open this server message":["クリックしてこのサーバーメッセージを開く"],"Notification from %1$s":["%1$s からの通知"],"%1$s says":["%1$s 曰く"],"has gone offline":["はオフラインです"],"has gone away":["は離席中"],"is busy":["は取り込み中です"],"has come online":["は在席になりました"],"wants to be your contact":["はあなたの相手先になりたがっています"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["概要"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s オープンソース %2$s XMPP チャットクライアント ( %3$s Opkode %2$s 提供)"],"%1$s Translate %2$s it into your own language":["あなたの言語へ %1$s 翻訳 %2$s"],"Log out":["ログアウト"],"Click to change your chat status":["クリックして在席状況を変更"],"Show details about this chat client":["このクライアントについての詳細を見る"],"Your avatar image":["アバター画像"],"Checkbox for selecting the following fingerprint":["次の指紋を選択するためのチェックボックス"],"Device without a fingerprint":["指紋のないデバイス"],"Other OMEMO-enabled devices":["OMEMO を利用可能な他のデバイス"],"Checkbox to select fingerprints of all other OMEMO devices":["他の OMEMO デバイスをすべて選択するためのチェックボックス"],"Remove checked devices and close":["選択したデバイスを削除して閉じる"],"Select all":["すべてを選択"],"This device\'s OMEMO fingerprint":["このデバイスの OMEMO 指紋"],"Generate new keys and fingerprint":["新しい鍵と指紋を生成"],"Your Profile":["プロフィール"],"XMPP Address (JID)":["XMPP アドレス (JID)"],"Save and close":["保存して閉じる"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["複数の役はコンマで区切ってください。役はメッセージの名前の次の行に表示されます。"],"OMEMO":["OMEMO"],"Profile":["プロフィール"],"Sorry, an error happened while trying to save your profile data.":["プロフィールの保存中にエラーが起きました。"],"You can check your browser\'s developer console for any error output.":["エラー出力はブラウザの開発者コンソールで確認できます。"],"Away":["離席中"],"Busy":["取り込み中"],"Custom status":["独自の在席状況"],"Offline":["オフライン"],"Online":["オンライン"],"Away for long":["不在"],"Change chat status":["在席状況を変更"],"Personal status message":["個別の在席状況メッセージ"],"I am %1$s":["私はいま %1$s"],"Are you sure you want to log out?":["ほんとうにログアウトしますか ?"],"online":["在席"],"busy":["取り込み中"],"away for long":["不在"],"away":["離席中"],"offline":["オフライン"],"Sorry, could not decrypt a received OMEMO message due to an error.":["エラーのため、受信した OMEMO メッセージを復号できませんでした。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s は OMEMO 対応のクライアントを持っていないようです。この談話室では暗号化された会話はできません。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["%1$s は OMEMO 非対応のクライアントを使用しているため、端末間暗号化を使用できません。"],"Messages are being sent in plaintext":["メッセージは平文のまま送られます"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["デバイスを切断する際にエラーが発生しました。"],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["本当に、新しい OMEMO 鍵を生成しますか ? 古い鍵は削除され、これまでに暗号化されたメッセージはこのデバイスでは復号できなくなります。"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["%1$s は、OMEMO 情報を取得するにはその在席状況通知を申し込むことを要求しているため、暗号化メッセージを送信できません"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["%1$s のリモートサーバーを見つけることができなかったため、暗号化メッセージを送信できません"],"Unable to send an encrypted message due to an unexpected error.":["予期しないエラーのため、暗号化メッセージを送信できません。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["OMEMO 暗号化メッセージを送るデバイスが見つかりません。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["これは OMEMO メッセージで、クライアントが対応していないようです。詳細は https://conversations.im/omemo を参照してください。"]," e.g. conversejs.org":[" 例: conversejs.org"],"Fetch registration form":["入力欄を取り寄せ"],"Tip: A list of public XMPP providers is available":["ヒント: 公開 XMPP プロバイダーの一覧は"],"here":["ここ"],"Sorry, we\'re unable to connect to your chosen provider.":["そのプロバイダーに接続できませんでした。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["このプロバイダーはバンド内アカウント登録に対応していません。別のプロバイダーで試してください。"],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["\\"%1$s\\" との接続確立の際にエラーが起こりました。ほんとうにそれは存在していますか ?"],"Now logging you in":["ログインしています"],"Registered successfully":["登録に成功しました"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["プロバイダーは登録を拒否しました。入力内容が正しいか確認してください。"],"Leave this groupchat":["談話室から退出"],"Click to toggle the list of open groupchats":["クリックして談話室一覧を開閉"],"Open Groupchats":["参加中の談話室"],"Are you sure you want to leave the groupchat %1$s?":["ほんとうにこの談話室 \\"%1$s\\" から退出しますか ?"],"Add":["追加"],"Add a Contact":["相手先を追加"],"This contact is busy":["この相手先は取り込み中です"],"This contact is online":["この相手先は在席しています"],"This contact is offline":["この相手先はオフラインです"],"This contact is unavailable":["この相手先は不通です"],"This contact is away for an extended period":["この相手先は不在です"],"This contact is away":["この相手先は離席中です"],"Contact name":["名前"],"Optional nickname":["ニックネーム(任意)"],"Sorry, could not find a contact with that name":["その名前の相手先は見つかりませんでした"],"This contact has already been added":["この相手先は既に追加済みです"],"Filter":["絞り込み"],"Filter by contact name":["相手先名で絞り込み"],"Filter by group name":["グループ名で絞り込み"],"Filter by status":["在席状況で絞り込み"],"Any":["すべて"],"Unread":["未読"],"Chatty":["チャット可"],"Extended Away":["長期不在"],"Click to remove %1$s as a contact":["クリックして %1$s を相手先から削除"],"Click to accept the contact request from %1$s":["クリックして %1$s からの申込を受諾"],"Click to decline the contact request from %1$s":["クリックして %1$s からの申込を拒否"],"Click to chat with %1$s (XMPP address: %2$s)":["クリックして %1$s (XMPP アドレス: %2$s) とチャット"],"Are you sure you want to decline this contact request?":["ほんとうにこの申込を拒否しますか ?"],"Contacts":["相手先"],"Add a contact":["相手先を追加"],"Re-sync your contacts":["相手先を再同期"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[159],{525:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"ja"},"Create your account":["アカウントを作成します"],"Please enter the XMPP provider to register with:":["登録する XMPP プロバイダーを入力してください:"],"Already have a chat account?":["アカウントを既に持っていますか ?"],"Log in here":["ここでログインしてください"],"Account Registration:":["アカウントの登録:"],"Register":["登録"],"Choose a different provider":["別のプロバイダーを選択"],"Hold tight, we\'re fetching the registration form…":["ただいま入力欄を取り寄せています…"],"Cancel":["キャンセル"],"The connection has dropped, attempting to reconnect.":["接続が失われました。再接続を試みます。"],"An error occurred while connecting to the chat server.":["チャットサーバーに接続する際にエラーが発生しました。"],"Your XMPP address and/or password is incorrect. Please try again.":["XMPP アドレス とパスワードの両方または一方が正しくありません。もう一度やり直してください。"],"Sorry, we could not connect to the XMPP host with domain: %1$s":["次のドメインの XMPP ホストに接続できませんでした: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP サーバーは対応している認証形式を提示しませんでした"],"Sorry, could not determine upload URL.":["アップロードの URL を確定できませんでした。"],"Sorry, could not determine file upload URL.":["ファイルアップロードの URL を確定できませんでした。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["ファイルのアップロードに失敗しました。サーバーの応答: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["ファイルのアップロードに失敗しました。"],"Sorry, looks like file upload is not supported by your server.":["サーバーはファイルアップロードに対応していないようです。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["ファイルのサイズ %1$s は、サーバーの制限値 %2$s を超えています。"],"Smileys and emotions":["スマイリーと感情アイコン"],"People":["人々"],"Activities":["動向"],"Travel":["旅行"],"Objects":["物"],"Animals and nature":["動物と自然"],"Food and drink":["食べ物と飲み物"],"Symbols":["シンボル"],"Flags":["旗"],"Stickers":["ステッカー"],"This groupchat is not anonymous":["この談話室は非匿名です"],"This groupchat now shows unavailable members":["この談話室はメンバー以外にも見えます"],"This groupchat does not show unavailable members":["この談話室はメンバー以外には見えません"],"The groupchat configuration has changed":["談話室の設定が変更されました"],"Groupchat logging is now enabled":["談話室の記録を取ります"],"Groupchat logging is now disabled":["談話室の記録を止めます"],"This groupchat is now no longer anonymous":["この談話室は匿名ではなくなりました"],"This groupchat is now semi-anonymous":["この談話室は半匿名です"],"This groupchat is now fully-anonymous":["この談話室は匿名です"],"A new groupchat has been created":["新しい談話室が作成されました"],"Your nickname has been automatically set to %1$s":["ニックネームは自動的に %1$s に設定されました"],"Your nickname has been changed to %1$s":["ニックネームを %1$s に変更しました"],"You have been banned from this groupchat":["この談話室から締め出されました"],"You have been kicked from this groupchat":["この談話室から蹴り出されました"],"You have been removed from this groupchat because of an affiliation change":["分掌の変更のため、この談話室から削除されました"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["談話室がメンバー制に変更されました。メンバーではないため、この談話室から削除されました"],"You have been removed from this groupchat because the service hosting it is being shut down":["サーバーがシャットダウンするため、この談話室から削除されました"],"Your message was not delivered because you weren\'t allowed to send it.":["メッセージを送信する権限がないため、メッセージは配送されません。"],"Your message was not delivered because you\'re not present in the groupchat.":["この談話室にいないため、メッセージは配送されません。"],"You\'re not allowed to register yourself in this groupchat.":["この談話室に自分自身を登録することはできません。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["この談話室はメンバー制のため、登録する権限がありません。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["登録に対応していないため、この談話室にニックネームを登録することはできません。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["データの形が正しくないため、この談話室にニックネームを登録することができません。"],"Topic set by %1$s":["%1$s が題を設定しました"],"Topic cleared by %1$s":["%1$s が題を消去しました"],"%1$s has been banned by %2$s":["%1$s は %2$s によって締め出されました"],"%1$s has been banned":["%1$s を締め出しました"],"%1$s\'s nickname has changed":["%1$s のニックネームは変更されました"],"%1$s has been kicked out by %2$s":["%1$s は %2$s によって蹴り出されました"],"%1$s has been kicked out":["%1$s を蹴り出しました"],"%1$s has been removed because of an affiliation change":["分掌の変更のため、%1$s を削除しました"],"%1$s has been removed for not being a member":["メンバーでなくなったため、%1$s を削除しました"],"%1$s is no longer an admin of this groupchat":["%1$s はこの談話室の管理人ではなくなりました"],"%1$s is no longer an owner of this groupchat":["%1$s はこの談話室の主宰者ではなくなりました"],"%1$s is no longer banned from this groupchat":["%1$s はこの談話室から締め出されました"],"%1$s is no longer a member of this groupchat":["%1$s はこの談話室のメンバーではなくなりました"],"%1$s is now a member of this groupchat":["%1$s はこの談話室のメンバーになりました"],"%1$s is now an %2$s of this groupchat":["%1$s はこの談話室の %2$s になりました"],"The nickname you chose is reserved or currently in use, please choose a different one.":["そのニックネームは予約されているか既に使われています。別のものを選んでください。"],"Password incorrect":["パスワードが違います"],"You are not on the member list of this groupchat.":["この談話室のメンバー一覧にありません。"],"You have been banned from this groupchat.":["この談話室から締め出されました。"],"You are not allowed to create new groupchats.":["新しい談話室を作成する権限がありません。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["ニックネームがこの談話室のポリシーに従っていません。"],"This groupchat does not (yet) exist.":["この談話室は(まだ)存在しません。"],"This groupchat has reached its maximum number of participants.":["この談話室は入室者数の上限に達しています。"],"Remote server not found":["サーバーが見つかりません"],"The explanation given is: \\"%1$s\\".":["理由は次のとおり: \\"%1$s\\""],"%1$s has invited you to join a groupchat: %2$s":["%1$s があなたを談話室 %2$s へ招待しています"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s があなたを談話室%2$s へ招待しています。案内: \\"%3$s\\""],"Error":["エラー"],"Sorry, something went wrong while trying to save your bookmark.":["ブックマークの保存に失敗しました。"],"Timeout Error":["タイムアウトエラー"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["サーバーは時間内にブックマークに応答しませんでした。もう一度試すにはこのページをリロードしてください。"],"My contacts":["相手先一覧"],"Pending contacts":["保留中の相手先"],"Contact requests":["会話に呼び出し"],"Ungrouped":["未整理"],"New messages":["新しいメッセージ"],"Sorry, there was an error while trying to add %1$s as a contact.":["%1$s を相手先として追加しようとする際にエラーが起こりました。"],"This client does not allow presence subscriptions":["このクライアントは在籍状況の申込を許可していません"],"Click to hide these contacts":["クリックしてこれらの相手先を隠す"],"Unbookmark this groupchat":["この談話室をブックマークからはずす"],"Click to open this groupchat":["クリックしてこの談話室を開く"],"Click to toggle the bookmarks list":["クリックしてブックマーク一覧を開閉"],"Bookmarks":["ブックマーク"],"Bookmark this groupchat":["この談話室をブックマーク"],"Would you like this groupchat to be automatically joined upon startup?":["起動時にこの談話室に自動的に入りますか ?"],"The name for this bookmark:":["このブックマークの名前:"],"What should your nickname for this groupchat be?":["この談話室でのあなたのニックネームは何にしますか ?"],"Save":["保存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["ほんとうにこのブックマーク \\"%1$s\\" を削除してもいいですか ?"],"Unbookmark":["ブックマーク解除"],"Bookmark":["ブックマーク"],"Close":["閉じる"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["ダウンロード音声ファイル \\"%1$s\\""],"Download file \\"%1$s\\"":["ダウンロードファイル \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["メッセージのバージョン"],"Retry":[""],"Uploading file:":["アップロードファイル:"],"%1$s has removed this message":["%1$s はこのメッセージを削除しました"],"This message has been edited":["メッセージは編集されています"],"Show more":["もっと見る"],"No message history available.":["メッセージ履歴はありません。"],"Search results":["検索結果"],"Search":["検索"],"Insert emojis":["絵文字を挿入"],"Send the message":["メッセージを送信"],"Start a call":["呼び出す"],"Message characters remaining":["残り文字数"],"Choose a file to send":["送信するファイルを選択"],"Click to write as a normal (non-spoiler) message":["クリックして、普通(ネタバレなし)のメッセージとして書き込む"],"Click to write your message as a spoiler":["クリックして、ネタバレとしてメッセージを書き込む"],"The User\'s Profile Image":["ユーザーのプロフィール画像"],"Trusted":["信用できる"],"Untrusted":["信用できない"],"OMEMO Fingerprints":["OMEMO 指紋"],"No OMEMO-enabled devices found":["OMEMO 利用可能なデバイスが見つかりません"],"Remove as contact":["相手先を削除"],"XMPP Address":["XMPP アドレス"],"Email":["Eメール"],"Full Name":["名前(フルネーム)"],"Nickname":["ニックネーム"],"Refresh":["再読込"],"Role":["役"],"URL":["URL"],"%1$s is typing":["%1$s は入力中"],"%1$s has stopped typing":["%1$s は入力を中断しました"],"%1$s has gone away":["%1$s は離席中"],"Remove messages":["メッセージを削除"],"Close this chat":["このチャットを閉じる"],"Write in the third person":["三人称で書く"],"Show this menu":["このメニューを表示"],"Hidden message":["私信"],"Message":["メッセージ"],"Optional hint":["その他のヒント"],"You have unread messages":["未読のメッセージがあります"],"Details":["詳細"],"See more information about this person":["この人についての詳細を見る"],"Close and end this conversation":["閉じてこの会話を終了"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["別の XMPP/Jabber クライアント(およびサーバー)は撤回に対応しておらず、このメッセージはどこででも削除されるわけではないことに留意してください。"],"Are you sure you want to retract this message?":["ほんとうにこのメッセージを撤回しますか ?"],"Confirm":["確定"],"You have an unsent message which will be lost if you continue. Are you sure?":["このまま続けると失われる未送信のメッセージがあります。よろしいですか ?"],"Are you sure you want to clear the messages from this conversation?":["ほんとうにこのチャット欄のメッセージを消去しますか ?"],"%1$s has gone offline":["%1$s はオフラインです"],"%1$s is busy":["%1$s は取り込み中です"],"%1$s is online":["%1$s は在席しています"],"Sorry, something went wrong while trying to refresh":["復元に失敗したようです"],"Are you sure you want to remove this contact?":["ほんとうにこの相手先を削除しますか ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["%1$s を相手先から削除しようとする際にエラーが起こりました。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["性能改善のため、このブラウザーにデータをキャッシュします。共用コンピューターの場合や、ログアウト時にデータを消去したい場合は、この欄のチェックをはずしてください。確実にログアウトしないと、キャッシュデータが残る可能性があります。信頼のない機器での利用の場合には OMEMO が使えないことに注意してください。"],"This is a trusted device":["これは信頼できるデバイスです"],"Password":["パスワード"],"Create an account":["アカウントを作成"],"Don\'t have a chat account?":["アカウントを持っていませんか ?"],"Log in":["ログイン"],"Disconnected":["切断されました"],"Click here to log in anonymously":["クリックして匿名としてログイン"],"Username":["ユーザー名"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["正しい XMPP アドレスを入力してください"],"Chat Contacts":["相手先"],"Toggle chat":["チャットを開閉"],"Click to restore this chat":["クリックしてこのチャットを復元"],"Minimized":["面の最小化窓"],"Minimize":["最小化"],"Minimize this chat":["このチャットを最小化"],"Minimize this groupchat":["この談話室を最小化"],"This user is a moderator.":["このユーザーは司会者です。"],"This user can send messages in this groupchat.":["このユーザーはこの談話室で発言できます。"],"This user can NOT send messages in this groupchat.":["このユーザーはこの談話室で発言できません。"],"Owner":["主宰者"],"Admin":["管理者"],"Member":["メンバー"],"Moderator":["司会者"],"Visitor":["傍聴者"],"Click to mention %1$s in your message.":["クリックして、メッセージで %1$s に言及します。"],"Participants":["参加者"],"This field is required":["この欄は必須です"],"Join":["入室する"],"Enter a new Groupchat":["新しい談話室に入る"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["談話室名"],"Groupchat address":["談話室のアドレス"],"Groupchat id is invalid.":["談話室 ID が正しくありません。"],"Invite":["招待"],"Invite someone to this groupchat":["この談話室に招待"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["招待の理由(任意)"],"Show groupchats":["談話室を表示"],"Server address":["サーバーアドレス"],"Show more information on this groupchat":["この談話室についての詳細を見る"],"Query for Groupchats":["談話室の検索"],"Description:":["説明:"],"Groupchat Address (JID):":["談話室のアドレス (JID):"],"Participants:":["入室者:"],"Features:":["特徴:"],"Requires authentication":["認証の要求"],"Hidden":["非公開談話室"],"Requires an invitation":["招待の要求"],"Moderated":["司会あり"],"Non-anonymous":["非匿名談話室"],"Open":["開放"],"Permanent":["常設"],"Public":["公開談話室"],"Semi-anonymous":["半匿名"],"Temporary":["臨時"],"Unmoderated":["発言制限なし談話室"],"conference.example.org":["conference.example.org"],"No groupchats found":["談話室が見つかりません"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["司会者は他のユーザー(分掌が管理人または主宰者のユーザーを除く)の役を変更する権限があります。"],"The default role, implies that you can read and write messages.":["デフォルトの役は、メッセージを読むことと書くことができます。"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["傍聴者は、発言制限のある談話室では書き込みが許されていません。"],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["主宰者は最も高い分掌です。主宰者は他のすべてのユーザーの役と分掌を変更できます。"],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["管理人は2番めに高い分掌です。管理人は、主宰者以外のすべてのユーザーの役と分掌を変更できます。"],"To ban a user, you give them the affiliation of \\"outcast\\".":["ユーザーを締め出すには、そのユーザーの分掌を「追放者」に変更します。"],"Change role":["役を変更"],"New Role":["新しい役"],"Reason":["理由"],"Change affiliation":["分掌を変更"],"New affiliation":["新しい分掌"],"Affiliation":["分掌"],"Moderator Tools":["司会者ツール"],"No users with that affiliation found.":["その分掌のユーザーは見つかりません。"],"No users with that role found.":["この役のユーザーは見つかりません。"],"Type here to filter the search results":["検索結果を絞り込むにはここに入力してください"],"Show users":["ユーザーを表示"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["役とは、ユーザーに談話室での機能を許可または禁止することを割り当てるものです。それは分掌の一部として明示的または暗黙的に割り当てられます。分掌によらない役はユーザーのセッションの期間のみ有効です。"],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["分掌は、特定の役に対応していて権限と責任を付与する、長期間有効な資格です。たとえば、管理人や主宰者という分掌は、自動的に司会者という役になります。"],"Sorry, something went wrong while trying to set the affiliation":["分掌を設定に失敗したようです"],"Affiliation changed":["分掌を変更しました"],"Role changed":["役を変更しました"],"You\'re not allowed to make that change":["これを変更する権限がありません"],"Sorry, something went wrong while trying to set the role":["役の設定に失敗したようです"],"Topic":["題"],"Topic author":["題の設定者"],"Groupchat address (JID)":["談話室のアドレス (JID)"],"Message archiving":["記録保管"],"Messages are archived on the server":["メッセージはサーバ上に保管されます"],"Description":["説明"],"Features":["摘要"],"This groupchat is not publicly searchable":["この談話室は公に検索されません"],"This groupchat is restricted to members only":["この談話室はメンバーのみ入室できます"],"Members only":["メンバー制"],"Participants entering this groupchat need to request permission to write":["この談話室の参加者は書込権を得る必要があります"],"Name":["名前"],"This groupchat does not require a password upon entry":["この談話室に入るにはパスワードは不要です"],"No password required":["パスワード不要"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["すべての入室者はあなたの XMPP アドレスを見ることができます"],"Not moderated":["司会なし"],"Participants entering this groupchat can write right away":["この談話室の参加者は直ちに書き込むことができます"],"Online users":["オンラインユーザー"],"Anyone can join this groupchat":["誰でもこの談話室に参加できます"],"This groupchat requires a password before entry":["この談話室に入るにはパスワードが必要です"],"Password protected":["パスワード制"],"Persistent":["常設"],"This groupchat persists even if it\'s unoccupied":["この談話室は誰もいなくなっても存続します"],"Only moderators can see your XMPP address":["司会者のみが XMPP アドレスを見ることができます"],"This groupchat will disappear once the last person leaves":["この談話室は最後の在室者が退出すると消滅します"],"This groupchat is publicly searchable":["この談話室は公に検索されます"],"Groupchat info for %1$s":["%1$s の談話室情報"],"You\'re not allowed to send messages in this room":["この談話室にメッセージを送信する権限がありません"],"The conversation has moved. Click below to enter.":["会話は場所を移しました。参加するには下をクリックしてください。"],"This groupchat no longer exists":["この談話室はもう存在していません"],"Hide the groupchat topic":["談話室の題を非表示"],"This groupchat is bookmarked":["この談話室はブックマークされています"],"Enter groupchat":["談話室に入る"],"Choose a nickname to enter":["ニックネームを選択"],"Please choose your nickname":["ニックネームを選んでください"],"This groupchat requires a password":["この談話室にはパスワードが必要です"],"Password: ":["パスワード: "],"Submit":["送信"],"%1$s has entered the groupchat":["%1$s は入室しました"],"%1$s has left the groupchat":["%1$s はこの談話室を退出しました"],"%1$s is now a moderator":["%1$s は司会者になりました"],"%1$s is no longer a moderator":["%1$s は司会者ではなくなりました"],"%1$s has been given a voice":["%1$s は発言権を得ました"],"%1$s has been muted":["%1$s は発言権を失いました"],"%1$s and %2$s":["%1$s と %2$s"],"%1$s are typing":["%1$s は入力中"],"%1$s have stopped typing":["%1$s は入力を中断しました"],"%1$s have gone away":["%1$s は離席中"],"%1$s have entered the groupchat":["%1$s は入室しました"],"%1$s have left the groupchat":["%1$s はこの談話室を退出しました"],"Change user\'s affiliation to admin":["ユーザーの分掌を管理人に変更"],"Ban user by changing their affiliation to outcast":["ユーザーの分掌を「追放者」に変更し、締め出す"],"Clear the chat area":["チャット欄をクリア"],"Close this groupchat":["この談話室を閉じる"],"Change user role to participant":["ユーザーの役を参加者に変更"],"Remove this groupchat":["この談話室を削除"],"Kick user from groupchat":["ユーザーを談話室から蹴り出す"],"Write in 3rd person":["第三者に書く"],"Grant membership to a user":["ユーザーにメンバー権を与える"],"Opens up the moderator tools GUI":["司会者ツール GUI を開く"],"Remove user\'s ability to post messages":["ユーザーを、メッセージを書き込めないようにする"],"Change your nickname":["ニックネームを変更"],"Grant moderator role to user":["ユーザーに司会者の役を与える"],"Grant ownership of this groupchat":["この談話室の主宰者にする"],"Register your nickname":["ニックネームを登録"],"Revoke the user\'s current affiliation":["ユーザーの現在の分掌を破棄"],"Set groupchat subject":["談話室の題を設定"],"Set groupchat subject (alias for /subject)":["談話室の題を設定 (コマンド /subject )"],"Allow muted user to post messages":["発言権のないユーザーにメッセージの書き込みを許可する"],"You are about to retract this message.":["このメッセージを撤回しようとしています。"],"You may optionally include a message, explaining the reason for the retraction.":["撤回に、メッセージや理由説明を付けてもかまいません。"],"Message Retraction":["メッセージの撤回"],"Optional reason":["理由(任意)"],"Sorry, you\'re not allowed to retract this message":["メッセージを撤回する権限がありません"],"A timeout occurred while trying to retract the message":["メッセージを撤回する際にタイムアウトが発生しました"],"Sorry, you\'re not allowed to retract this message.":["メッセージを撤回する権限がありません。"],"Show more information about this groupchat":["この談話室についての詳細を見る"],"Configure":["設定"],"Configure this groupchat":["この談話室を調整する"],"Invite someone to join this groupchat":["誰かをこの談話室に招待します"],"Show topic":["題を表示"],"Hide topic":["題を非表示"],"Show the topic message in the heading":["題をヘッダーに表示します"],"Hide the topic in the heading":["題をヘッダーに表示しません"],"Moderate":["調節"],"Moderate this groupchat":["この談話室を調節します"],"Destroy":["閉鎖"],"Leave":["退出"],"Leave and close this groupchat":["談話室から退出して閉じる"],"Are you sure you want to leave this groupchat?":["ほんとうにこの談話室から退出しますか ?"],"Hide the list of participants":["入室者の一覧を隠す"],"Forbidden: you do not have the necessary role in order to do that.":["禁止: この操作に必要な役にありません。"],"Forbidden: you do not have the necessary affiliation in order to do that.":["禁止: この操作に必要な分掌にありません。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["エラー: コマンド \\"%1$s\\" は2つの引数をとります。ユーザーのニックネームと、理由(これは任意)です。"],"Error: couldn\'t find a groupchat participant based on your arguments":["エラー: 談話室の参加者は見つかりませんでした"],"Error: found multiple groupchat participant based on your arguments":["エラー: 談話室の参加者が複数見つかりました"],"Sorry, an error happened while running the command.":["コマンド実行中にエラーが起きました。"],"Check your browser\'s developer console for details.":["詳細はブラウザーの開発者コンソールを確認してください。"],"Are you sure you want to destroy this groupchat?":["ほんとうにこの談話室を閉鎖しますか ?"],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["ニックネームは \\"%1$s\\" です"],"Error: invalid number of arguments":["エラー: 引数の数が違います"],"This action was done by %1$s.":["これは %1$s によって実行されました。"],"The reason given is: \\"%1$s\\".":["理由は次のとおり: \\"%1$s\\""],"Groupchats":["談話室"],"Add a new groupchat":["新しい談話室を追加"],"Query for groupchats":["談話室の検索"],"Sorry, an error occurred while trying to submit the config form.":["設定欄を受け付ける際にエラーが発生しました。"],"Close these announcements":["これらのお知らせを閉じる"],"Announcements":["お知らせ"],"Click to open this server message":["クリックしてこのサーバーメッセージを開く"],"Notification from %1$s":["%1$s からの通知"],"%1$s says":["%1$s 曰く"],"has gone offline":["はオフラインです"],"has gone away":["は離席中"],"is busy":["は取り込み中です"],"has come online":["は在席になりました"],"wants to be your contact":["はあなたの相手先になりたがっています"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["概要"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s オープンソース %2$s XMPP チャットクライアント ( %3$s Opkode %2$s 提供)"],"%1$s Translate %2$s it into your own language":["あなたの言語へ %1$s 翻訳 %2$s"],"Log out":["ログアウト"],"Click to change your chat status":["クリックして在席状況を変更"],"Show details about this chat client":["このクライアントについての詳細を見る"],"Your avatar image":["アバター画像"],"Checkbox for selecting the following fingerprint":["次の指紋を選択するためのチェックボックス"],"Device without a fingerprint":["指紋のないデバイス"],"Other OMEMO-enabled devices":["OMEMO を利用可能な他のデバイス"],"Checkbox to select fingerprints of all other OMEMO devices":["他の OMEMO デバイスをすべて選択するためのチェックボックス"],"Remove checked devices and close":["選択したデバイスを削除して閉じる"],"Select all":["すべてを選択"],"This device\'s OMEMO fingerprint":["このデバイスの OMEMO 指紋"],"Generate new keys and fingerprint":["新しい鍵と指紋を生成"],"Your Profile":["プロフィール"],"XMPP Address (JID)":["XMPP アドレス (JID)"],"Save and close":["保存して閉じる"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["複数の役はコンマで区切ってください。役はメッセージの名前の次の行に表示されます。"],"OMEMO":["OMEMO"],"Profile":["プロフィール"],"Sorry, an error happened while trying to save your profile data.":["プロフィールの保存中にエラーが起きました。"],"You can check your browser\'s developer console for any error output.":["エラー出力はブラウザの開発者コンソールで確認できます。"],"Away":["離席中"],"Busy":["取り込み中"],"Custom status":["独自の在席状況"],"Offline":["オフライン"],"Online":["オンライン"],"Away for long":["不在"],"Change chat status":["在席状況を変更"],"Personal status message":["個別の在席状況メッセージ"],"I am %1$s":["私はいま %1$s"],"Are you sure you want to log out?":["ほんとうにログアウトしますか ?"],"online":["在席"],"busy":["取り込み中"],"away for long":["不在"],"away":["離席中"],"offline":["オフライン"],"Sorry, could not decrypt a received OMEMO message due to an error.":["エラーのため、受信した OMEMO メッセージを復号できませんでした。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s は OMEMO 対応のクライアントを持っていないようです。この談話室では暗号化された会話はできません。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["%1$s は OMEMO 非対応のクライアントを使用しているため、端末間暗号化を使用できません。"],"Messages are being sent in plaintext":["メッセージは平文のまま送られます"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["%1$s は、OMEMO 情報を取得するにはその在席状況通知を申し込むことを要求しているため、暗号化メッセージを送信できません"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["%1$s のリモートサーバーを見つけることができなかったため、暗号化メッセージを送信できません"],"Unable to send an encrypted message due to an unexpected error.":["予期しないエラーのため、暗号化メッセージを送信できません。"],"Sorry, an error occurred while trying to remove the devices.":["デバイスを切断する際にエラーが発生しました。"],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["本当に、新しい OMEMO 鍵を生成しますか ? 古い鍵は削除され、これまでに暗号化されたメッセージはこのデバイスでは復号できなくなります。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["OMEMO 暗号化メッセージを送るデバイスが見つかりません。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["これは OMEMO メッセージで、クライアントが対応していないようです。詳細は https://conversations.im/omemo を参照してください。"]," e.g. conversejs.org":[" 例: conversejs.org"],"Fetch registration form":["入力欄を取り寄せ"],"Tip: A list of public XMPP providers is available":["ヒント: 公開 XMPP プロバイダーの一覧は"],"here":["ここ"],"Sorry, we\'re unable to connect to your chosen provider.":["そのプロバイダーに接続できませんでした。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["このプロバイダーはバンド内アカウント登録に対応していません。別のプロバイダーで試してください。"],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["\\"%1$s\\" との接続確立の際にエラーが起こりました。ほんとうにそれは存在していますか ?"],"Now logging you in":["ログインしています"],"Registered successfully":["登録に成功しました"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["プロバイダーは登録を拒否しました。入力内容が正しいか確認してください。"],"Leave this groupchat":["談話室から退出"],"Click to toggle the list of open groupchats":["クリックして談話室一覧を開閉"],"Open Groupchats":["参加中の談話室"],"Are you sure you want to leave the groupchat %1$s?":["ほんとうにこの談話室 \\"%1$s\\" から退出しますか ?"],"Add":["追加"],"Add a Contact":["相手先を追加"],"This contact is busy":["この相手先は取り込み中です"],"This contact is online":["この相手先は在席しています"],"This contact is offline":["この相手先はオフラインです"],"This contact is unavailable":["この相手先は不通です"],"This contact is away for an extended period":["この相手先は不在です"],"This contact is away":["この相手先は離席中です"],"Contact name":["名前"],"Optional nickname":["ニックネーム(任意)"],"Sorry, could not find a contact with that name":["その名前の相手先は見つかりませんでした"],"This contact has already been added":["この相手先は既に追加済みです"],"Filter":["絞り込み"],"Filter by contact name":["相手先名で絞り込み"],"Filter by group name":["グループ名で絞り込み"],"Filter by status":["在席状況で絞り込み"],"Any":["すべて"],"Unread":["未読"],"Chatty":["チャット可"],"Extended Away":["長期不在"],"Click to remove %1$s as a contact":["クリックして %1$s を相手先から削除"],"Click to accept the contact request from %1$s":["クリックして %1$s からの申込を受諾"],"Click to decline the contact request from %1$s":["クリックして %1$s からの申込を拒否"],"Click to chat with %1$s (XMPP address: %2$s)":["クリックして %1$s (XMPP アドレス: %2$s) とチャット"],"Are you sure you want to decline this contact request?":["ほんとうにこの申込を拒否しますか ?"],"Contacts":["相手先"],"Add a contact":["相手先を追加"],"Re-sync your contacts":["相手先を再同期"]}}}')}}]);
 //# sourceMappingURL=ja-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/lt-LC_MESSAGES-converse-po.js b/src/conversejs/locales/lt-LC_MESSAGES-converse-po.js
index 55c1d1ac03feed6f9e18ee6c096df26d6fc5e6fb..213b9cd4333ff9b1a3231412639318e51c5efee7 100644
--- a/src/conversejs/locales/lt-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/lt-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[160],{438:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);","lang":"lt"},"Create your account":["Sukurti jūsų paskyrą"],"Please enter the XMPP provider to register with:":["Prašome nurodyti XMPP teikėją registracijai:"],"Already have a chat account?":["Jau turite pokalbių paskyrą?"],"Log in here":["Prisijunkite čia"],"Account Registration:":["Paskyros registracija:"],"Register":["Registruotis"],"Choose a different provider":["Pasirinkite kitą teikėją"],"Hold tight, we\'re fetching the registration form…":["Palaukite, parsiunčiame registracijos formą..."],"Cancel":["Atšaukti"],"The connection has dropped, attempting to reconnect.":["Ryšys nutrūko, bandoma prisijungti iš naujo."],"An error occurred while connecting to the chat server.":["Bandant prisijungti prie pokalbių serverio įvyko klaida."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Atsiprašome, nepavyko prisijungti prie XMPP serverio su domenu: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP serveris nepateikė palaikomo autentifikavimo mechanizmo"],"Sorry, could not determine upload URL.":["Deja, nepavyko nustatyti URL įkėlimui."],"Sorry, could not determine file upload URL.":["Deja, nepavyko nustatyti URL failo įkėlimui."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Deja, nepavyko sėkmingai įkelti jūsų failo. Jūsų serverio atsakas: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Deja, nepavyko sėkmingai įkelti jūsų failo."],"Sorry, looks like file upload is not supported by your server.":["Deja, panašu, kad jūsų serveris nepalaiko failų įkėlimo."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Jūsų failo dYdis, %1$s, viršyja serverio maksimalų leistiną, kuris yra %2$s."],"Smileys and emotions":["Šypsenėlės ir emocijos"],"People":["Žmonės"],"Activities":["Veiklos"],"Travel":["Kelionė"],"Objects":["Objektai"],"Animals and nature":["Gyvūnai ir gamta"],"Food and drink":["Valgiai ir gėrimai"],"Symbols":["Simboliai"],"Flags":["Vėliavos"],"Stickers":["Lipdukai"],"Your nickname has been automatically set to %1$s":["Jūsų slapyvardis buvo automatiškai nustatytas kaip %1$s"],"Your nickname has been changed to %1$s":["Jūsų slapyvardis buvo pakeistas į %1$s"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Negalima užregistruoti jūsų slapyvardžio šiame kambaryje, jis nepalaiko registracijos."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Negalima užregistruoti jūsų slapyvardžio šiame kambaryje, pateikta neteisinga duomenų forma."],"Topic set by %1$s":["Temą nustatė %1$s"],"Topic cleared by %1$s":["Temą ištrynė %1$s"],"%1$s has been banned":["%1$s buvo užblokuotas"],"%1$s\'s nickname has changed":["%1$s slapyvardis buvo pakeistas"],"%1$s has been kicked out":["%1$s buvo pašalintas"],"%1$s has been removed because of an affiliation change":["%1$s buvo pašalintas dėl narystės pakeitimo"],"%1$s has been removed for not being a member":["%1$s buvo pašalintas nes nėra narys"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Jūsų pasirinktas slapyvardis rezervuotas arba jau naudojamas, prašome pasirinkti kitą"],"You are not on the member list of this groupchat.":["Jūs nesate šio kambario narių sąraše."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Jūsų slapyvardis neatitinka šio kambario politikos."],"This groupchat does not (yet) exist.":["Šis kambarys (dar) neegzistuoja."],"This groupchat has reached its maximum number of participants.":["Pasiektas šio kambario dalyvių maksimalus skaičius."],"Remote server not found":["Nutolęs serveris nerastas"],"The explanation given is: \\"%1$s\\".":["Pateiktas paaiškinimas: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s pakvietė jus prisijungti prie kambario: %2$s, ir pateikė tokią priežastį: \\"%3$s\\""],"Error":["Klaida"],"Sorry, something went wrong while trying to save your bookmark.":["Deja, įvyko klaida bandant išsaugoti jūsų žymę."],"Timeout Error":["Pasibaugusio laiko klaida"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Serveris nepateikė jūsų žymių per nustatytą laiką. Galite perkrauti puslapį norint užklausti vėl."],"My contacts":["Mano kontaktai"],"Pending contacts":["Nepatvirtinti kontaktai"],"Contact requests":["Prašymai pridėti prie kontaktų"],"Ungrouped":["Nesugrupuota"],"Sorry, there was an error while trying to add %1$s as a contact.":["Deja, įvyko klaida bandant pridėti %1$s kaip kontaktą."],"This client does not allow presence subscriptions":["Šis klientas neleidžia aktyvumo prenumeratos"],"Click to hide these contacts":["Spustelėkite norint paslėpti šiuos kontaktus"],"Unbookmark this groupchat":["Panaikinti šio kambario žymę"],"Click to toggle the bookmarks list":["Spustelėkite, kad įjungtumėte žymių sąrašą"],"Bookmarks":["Žymės"],"Bookmark this groupchat":["Sukurti šio kambario žymę"],"Would you like this groupchat to be automatically joined upon startup?":["Ar pageidaujate atidaryti šį kambarį automatiškai kai prisijungiate?"],"The name for this bookmark:":["Žymės vardas:"],"What should your nickname for this groupchat be?":["Koks bus jūsų slapyvardis šiame kambaryje?"],"Save":["Išsaugoti"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ar tikrai norite ištrinti žymę \\"%1$s\\"?"],"Close":["Uždaryti"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Parsiųsti audio failą \\"%1$s\\""],"Download file \\"%1$s\\"":["Parsiųsti failą \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Pranešimo versijos"],"Retry":[""],"Uploading file:":["Įkeliamas failas:"],"This message has been edited":["Šis pranešimas buvo redaguotas"],"No message history available.":["Žinučių istorija nepasiekiama."],"Search results":["Paieškos rezultatai"],"Search":["Paieška"],"Start a call":["Pradėti skambutį"],"Choose a file to send":["Pasirinkite failą siuntimui"],"Click to write as a normal (non-spoiler) message":["Spustelėkite, jei norite parašyti įprastą (neatskleidžiamą) pranešimą"],"Click to write your message as a spoiler":["Spustelėkite, jei norite parašyti pranešimą kaip atskleidėją"],"The User\'s Profile Image":["Vartotojo profilio nuotrauka"],"Trusted":["Patikimas"],"Untrusted":["Nepatikimas"],"OMEMO Fingerprints":["OMEMO atspaudai"],"XMPP Address":["XMPP adresas"],"Email":["El. paštas"],"Full Name":["Visas vardas"],"Nickname":["Slapyvardis"],"Refresh":["Perkrauti"],"Role":["Vaidmuo"],"URL":["URL"],"Remove messages":["Pašalinti pranešimus"],"Write in the third person":["Rašykite trečiuoju asmeniu"],"Show this menu":["Rodyti šį meniu"],"Hidden message":["Paslėptas pranešimas"],"Message":["Pranešimas"],"Optional hint":["Neprivaloma užuomina"],"You have unread messages":["Jūs turite neperskaitytų pranešimų"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Turite žinoti, kad kiti XMPP/Jabber klientai (ir serveriai) gali dar nepalaikyti žinutės atšaukimo ir ši žinutė galbūt nebus pašalinta visur."],"Confirm":["Patvirtinti"],"You have an unsent message which will be lost if you continue. Are you sure?":["Turite neišsiųstą žinutę, kuri dings jei tęsite. Ar esate tikri?"],"Are you sure you want to remove this contact?":["Ar tikrai norite pašalinti šį kontaktą?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Deja, įvyko klaida bandant pašalinti %1$s iš kontaktų."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Greitaveikos padidinimui mes saugome duomenų podėlį jūsų naršykleje. Nuimkite varnelę šiame laukelyje, jeigu tai yra viešas kompiuteris arba jei norite, kad jūsų duomenys būtų ištrinti, kai atsijungiate. Yra svarbu atlikti atsijungimo veiksmą, kitaip ne visi išaugoti duomenys bus ištrinti. Atkreipiame dėmesį, kad naudojant nepatikimą įrenginį OMEMO šifravimas NĖRA galimas."],"This is a trusted device":["Tai yra patikimas įrenginys"],"Create an account":["Sukurti paskyrą"],"Don\'t have a chat account?":["Neturite pokalbių paskyros?"],"Disconnected":[""],"Click here to log in anonymously":["Spustelėkite čia norėdami prisijungti anonimiškai"],"Username":["Vartotojo vardas"],"user@domain":["vartotojas@domenas"],"Please enter a valid XMPP address":["Įveskite teisingą XMPP adresą"],"Chat Contacts":["Pokalbio kontaktai"],"Toggle chat":["Perjungti pokalbius"],"Click to restore this chat":["Spustelėkite, kad atstatytumėte pokalbį"],"Minimized":["Minimizuotas"],"This field is required":["Šis laukelis yra privalomas"],"Join":["Prisijungti"],"Enter a new Groupchat":["Įvesti naują kambarį"],"name@conference.example.org":["vardas@conference.pavyzdys.lt"],"Groupchat address":["Kambario adresas"],"Invite":["Pakviesti"],"Server address":["Serverio adresas"],"Show more information on this groupchat":["Parodyti daugiau informacijos apie šį kambarį"],"Query for Groupchats":["Kambarių užklausa"],"Description:":["Aprašymas:"],"Participants:":["Dalyviai:"],"Features:":["Savybės:"],"Requires authentication":["Reikalinga autentikacija"],"Hidden":["Paslėptas"],"Requires an invitation":["Reikalingas pakvietimas"],"Moderated":["Moderuojamas"],"Non-anonymous":["Ne anonimiškas"],"Open":["Atidarytas"],"Permanent":["Pastovus"],"Public":["Viešas"],"Semi-anonymous":["Pusiau anonimiškas"],"Temporary":["Laikinas"],"Unmoderated":["Nemoderuojamas"],"conference.example.org":["conference.pavyzdys.lt"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatoriai yra privilegijuoti vartotojai, kurie gali keisti kitų vartotojų vaidmenis (išskyrus administratoriaus ir savininko narystes)."],"The default role, implies that you can read and write messages.":["Standartinis vaidmuo, leidžia skaityti ir rašyti žinutes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Lankytojams neleidžiama rašyti žinučių moderuojamame grupiniame pokalbyje."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Savininkas yra aukščiausias narystės tipas. Savininkai gali keisti visų kitų vartotojų vaidmenis ir narystes."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administratorius yra antras pagal svarbumą narystės tipas. Administratoriai gali keisti keisti visų kitų vartotojų vaidmenis ir narystes, išskyrus savininkus."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Norint uždrausti vartotojui prieigą jam suteikiama \\"ištremtas\\" narystė."],"Reason":["Priežastis"],"New affiliation":["Nauja narystė"],"Affiliation":["Narystė"],"No users with that affiliation found.":["Nerasta vartotojų su šia naryste."],"No users with that role found.":["Nerasta vartotojų su šiuo vaidmeniu."],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Vaidmenys priskiriami vartotojams siekiant suteikti ar atimti tam tikras galimybes grupiniame pokalbyje. Jie priskiriami tiesiogiai ar netesiogiai su naryste. Vaidmuo nesusijęs su naryste galioja tik vartotojo sesijos metu."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Narystė tai ilgalaikė teisė, kuri paprastai suteikia tam tikrą vaidmenį, kuris suteikia privilegijas ir atsakomybes. Pavyzdžiui administratoriai ir savininkai automatiškai gauna moderatoriaus vaidmenį."],"Affiliation changed":["Narystė pasikeitė"],"Topic":["Tema"],"Topic author":["Temos autorius"],"Message archiving":["Pranešimų archivavimas"],"Messages are archived on the server":["Pranešimai archivuojami serveryje"],"Description":["Aprašymas"],"Features":["Savybės"],"This groupchat is not publicly searchable":["Šis kambarys neprieinamas viešoje paieškoje"],"Members only":["Tik nariams"],"Participants entering this groupchat need to request permission to write":["Dalyviai turi paprašyti rašymo leidimo įeinant į kambarį"],"Name":["Vardas"],"This groupchat does not require a password upon entry":["Šis kambarys nereikalauja slaptažodžio įėjimui"],"No password required":["Slaptažodis nereikalingas"],"All other groupchat participants can see your XMPP address":["Visi kiti kambario dalyviai gali matyti jūsų XMPP adresą"],"Not moderated":["Ne moderuojamas"],"Participants entering this groupchat can write right away":["Dalyviams leidžiama rašyti iškart įeinant į šį kambarį"],"Anyone can join this groupchat":["Bet kas gali įeiti į šį kambarį"],"This groupchat requires a password before entry":["Šis kambarys reikalauja slaptažodžio įėjimui"],"Password protected":["Apsaugotas slaptažodžiu"],"Persistent":["Pastovus"],"This groupchat persists even if it\'s unoccupied":["Šis kambarys išlieka net kai neturi lankytojų"],"Only moderators can see your XMPP address":["Tik moderatoriai gali matyti jūsų XMPP adresą"],"This groupchat will disappear once the last person leaves":["Šis kambarys dings kai paskutinis žmogus išeis"],"This groupchat is publicly searchable":["Šis kambarys prieinamas viešoje paieškoje"],"Groupchat info for %1$s":["Kambario informacija apie %1$s"],"The conversation has moved. Click below to enter.":["Pokalbis buvo perkeltas. Spustelėkite žemiau įėjimui."],"Enter groupchat":["Įeiti į kambarį"],"Please choose your nickname":["Prašome pasirinkti slapyvardį"],"This groupchat requires a password":["Šis kambarys reikalauja slaptažodžio"],"Password: ":["Slaptažodis: "],"Submit":["Pateikti"],"This user is a moderator.":["Šis vartotojas yra moderatorius"],"This user can send messages in this groupchat.":["Šis vartotojas gali siųsti pranešimus šiame kambaryje."],"This user can NOT send messages in this groupchat.":["Šis vartotojas NEGALI siųsti pranešimų šiame kambaryje."],"Owner":["Savininkas"],"Admin":["Administratorius"],"Member":["Narys"],"Moderator":["Moderatorius"],"Visitor":["Lankytojas"],"Click to mention %1$s in your message.":["Spustelėkite norint paminėti %1$s savo pranešime."],"Participants":["Dalyviai"],"%1$s is now a moderator":["%1$s dabar yra moderatorius"],"%1$s is no longer a moderator":["%1$s daugiau nėra moderatorius"],"Change user\'s affiliation to admin":["Pakeisti vartotojo narystę į administratoriaus"],"Ban user by changing their affiliation to outcast":["Uždrauskite vartotojui prieigą pakeisdami jo narystę į ištremto"],"Change user role to participant":["Pakeisti vartotojo vaidmenį į dalyvio"],"Kick user from groupchat":["Pašalinti vartotoją iš kambario"],"Write in 3rd person":["Rašyti trečiuoju asmeniu"],"Grant membership to a user":["Suteikti vartotojui nario statusą"],"Opens up the moderator tools GUI":["Atidaro moderatoriaus įrankių grafinę sąsają"],"Remove user\'s ability to post messages":["Atimti iš vartotojo teisę rašyti žinutes"],"Change your nickname":["Pakeisti jūsų slapyvardį"],"Grant moderator role to user":["Suteikti vartotojui moderatoriaus vaidmenį"],"Grant ownership of this groupchat":["Suteikti šio kambario savininko teises"],"Revoke the user\'s current affiliation":["Atšaukti vartotojo esamą narystę"],"Set groupchat subject":["Nustatyti kambario temą"],"Set groupchat subject (alias for /subject)":["Nustatyti kambario temą (slapyvardis /subject)"],"Allow muted user to post messages":["Leisti vartotojui be balso teisės rašyti pranešimus"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Paslėpti dalyvių sąrašą"],"Forbidden: you do not have the necessary role in order to do that.":["Uždrausta: jūs neturite tinkamo vaidmens tam atlikti."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Uždrausta: jūsų narystė nėra tinkama tam atlikti."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Klaida: \\"%1$s\\" komandai reikalingi du argumentai, vartotojo vardas ir neprivalomai priežastis."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["vardas@pavyzdys.lt"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Klaida: netinkamas argumentų skaičius"],"This action was done by %1$s.":["Šį veiksmą atliko %1$s."],"The reason given is: \\"%1$s\\".":["Pateikta priežastis: \\"%1$s\\"."],"Announcements":[""],"Notification from %1$s":["Pranešimas iš %1$s"],"%1$s says":["%1$s sako"],"has gone offline":["atsijungė"],"has gone away":["pasišalinęs"],"is busy":["užsiėmęs"],"has come online":["prisijungė"],"wants to be your contact":["nori būti jūsų kontaktu"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Apie"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Atviro Kodo %2$s XMPP pokalbių klientas pateiktas jums %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Išverskite %2$s jį į jūsų kalbą"],"Log out":["Atsijungti"],"Click to change your chat status":["Spustelėkite norėdami pakeisti pokalbio būseną"],"Show details about this chat client":["Parodyti šio pokalbių kliento duomenis"],"Your avatar image":["Jūsų pseudoportretas"],"Checkbox for selecting the following fingerprint":["Pažymėti šio atspaudo pasirinkimui"],"Device without a fingerprint":["Įrenginys be atspaudo"],"Other OMEMO-enabled devices":["Kiti įrenginiai su įjungtu OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Pažymėti, kad pasirinkti visų kitų OMEMO įrenginių atspaudus"],"Remove checked devices and close":["Ištrinti pasirinktus įrenginius ir uždaryti"],"Select all":["Pasirinkti viską"],"This device\'s OMEMO fingerprint":["Šio įrenginio OMEMO atspaudas"],"Generate new keys and fingerprint":["Sugeneruoti naujus raktus ir atspaudą"],"Your Profile":["Jūsų profilis"],"Save and close":["Išsaugoti ir uždaryti"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Kelių vaidmenų atskirimui naudokite kablelius. Jūsų vaidmenys rodomi šalia jūsų vardo jūsų pranešimuose."],"OMEMO":[""],"You can check your browser\'s developer console for any error output.":["Galite patikrinti ar yra kokių nors klaidų jūsų naršyklės vystytojo konsolėje."],"Away":["Pasišalinęs"],"Busy":["Užsiėmęs"],"Custom status":["Pritaikyta būsena"],"Offline":["Neprisijungęs"],"Online":["Prisijungęs"],"Away for long":["Ilgai pasišalinęs"],"Change chat status":["Keisti pokalbio būseną"],"Personal status message":["Asmeninis būsenos pranešimas"],"I am %1$s":["Aš esu %1$s"],"Are you sure you want to log out?":["Ar tikrai norite atsijungti?"],"online":["prisijungęs"],"busy":["užsiėmęs"],"away for long":["ilgai pasišalinęs"],"away":["pasišalinęs"],"offline":["neprisijungęs"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Deja, dėl klaidos nepavyko iššifruoti gauto OMEMO pranešimo."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s tikriausiai neturi kliento palaikančio OMEMO. Daugiau nebus galima naudoti pokalbių šifravimą šiame kambaryje."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Negalima panaudoti taškas-į-tašką šifravimo, kadangi %1$s naudoja klietą nepalaikantį OMEMO."],"Messages are being sent in plaintext":["Pranešimai siunčiami atviru tekstu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Ar esate tikri, kad norite sugeneruoti naujus OMEMO raktus? Šis veiksmas pašalins senus raktus ir visi anksčiau šifruoti pranešimai daugiau negalės būti iššifruoti šiame įrenginyje."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Deja, negalime nusiųsti užšifruoto pranešimo, nes %1$s reikalauja, kad butumėte prenumeravę jo (jos) būseną, kad galėtumete matyti jo (jos) OMEMO informaciją"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Deja, negalime nusiųsti užšifruoto pranešimo, nes %1$s nutolęs serveris nerastas"],"Unable to send an encrypted message due to an unexpected error.":["Neįmanoma nusiųsti užšifruoto pranešimo dėl nenumatytos klaidos."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Deja, nerasta įrenginių kur galima būtų nusiųsti OMEMO šifruotą žinutę."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tai yra OMEMO užšifruotas pranešimas, kurio jūsų klientas tikriausiai nepalaiko. Daugiau informacijos rasite https://conversations.im/omemo"]," e.g. conversejs.org":[" pvz. converse.org"],"Fetch registration form":["Parsiųsti registracijos formą"],"Tip: A list of public XMPP providers is available":["Patarimas: Yra pasiekiamas sąrašas viešų XMPP teikėjų"],"here":["čia"],"Sorry, we\'re unable to connect to your chosen provider.":["Deja, mes negalimeprisijungti prie jūsų pasirinkto teikėjo."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Deja, nurodytas teikėjas nepalaiko tiesioginės paskyros registracijos. Prašome pabandyti kitą teikėją."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Įvyko klaida bandant užmegzti ryšį su \\"%1$s\\". Ar esate tikri, kad jis egzistuoja?"],"Now logging you in":["Dabar jus prijungiame"],"Registered successfully":["Sėkmingai užregistruotas"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Teikėjas atmetė jūsų registracijos bandymą. Prašome patikrinti ar jūsų pateiktos reikšmės teisingos."],"Leave this groupchat":["Išeiti iš šio kambario"],"Click to toggle the list of open groupchats":["Spustelėkite, kad parodyti sąrašą kambarių"],"Open Groupchats":["Atidaryti Kambarius"],"Add":["Pridėti"],"Add a Contact":["Pridėti kontaktą"],"This contact is busy":["Šis kontaktas yra užsiėmęs"],"This contact is online":["Šis kontaktas yra prisijungęs"],"This contact is offline":["Šis kontaktas yra atsijungęs"],"This contact is unavailable":["Šis kontaktas yra nepasiekiamas"],"This contact is away for an extended period":["Šis kontaktas yra ilgai pasišalinęs"],"This contact is away":["Šis kontaktas yra pasišalinęs"],"Contact name":["Kontakto vardas"],"Optional nickname":["Neprivalomas slapyvardis"],"Sorry, could not find a contact with that name":["Deja, nepavyko rasti kontakto su šiuo vardu"],"Filter":["Filtras"],"Filter by contact name":["Filtruoti pagal kontakto vardą"],"Filter by group name":["Filtruoti pagal grupės pavadinimą"],"Filter by status":["Filtruoti pagal būseną"],"Any":["Bet kuris"],"Unread":["Neskaityta"],"Chatty":["Kalbus"],"Extended Away":["Ilgai pasišalinęs"],"Click to remove %1$s as a contact":["Spustelėkite, jei norite pašalinti %1$s iš kontaktų"],"Click to accept the contact request from %1$s":["Spustelėkite, jei norite priimti prašymą pridėti į kontaktus iš %1$s"],"Click to decline the contact request from %1$s":["Spustelėkite, jei norite atmesti prašymą pridėti į kontaktus iš %1$s"],"Are you sure you want to decline this contact request?":["Ar tikrai norite atmesti šį prašymą pridėti į kontaktus?"],"Contacts":["Kontaktai"],"Add a contact":["Pridėti kontaktą"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[160],{526:function(a){a.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);","lang":"lt"},"Create your account":["Sukurti jūsų paskyrą"],"Please enter the XMPP provider to register with:":["Prašome nurodyti XMPP teikėją registracijai:"],"Already have a chat account?":["Jau turite pokalbių paskyrą?"],"Log in here":["Prisijunkite čia"],"Account Registration:":["Paskyros registracija:"],"Register":["Registruotis"],"Choose a different provider":["Pasirinkite kitą teikėją"],"Hold tight, we\'re fetching the registration form…":["Palaukite, parsiunčiame registracijos formą..."],"Cancel":["Atšaukti"],"The connection has dropped, attempting to reconnect.":["Ryšys nutrūko, bandoma prisijungti iš naujo."],"An error occurred while connecting to the chat server.":["Bandant prisijungti prie pokalbių serverio įvyko klaida."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Atsiprašome, nepavyko prisijungti prie XMPP serverio su domenu: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP serveris nepateikė palaikomo autentifikavimo mechanizmo"],"Sorry, could not determine upload URL.":["Deja, nepavyko nustatyti URL įkėlimui."],"Sorry, could not determine file upload URL.":["Deja, nepavyko nustatyti URL failo įkėlimui."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Deja, nepavyko sėkmingai įkelti jūsų failo. Jūsų serverio atsakas: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Deja, nepavyko sėkmingai įkelti jūsų failo."],"Sorry, looks like file upload is not supported by your server.":["Deja, panašu, kad jūsų serveris nepalaiko failų įkėlimo."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Jūsų failo dYdis, %1$s, viršyja serverio maksimalų leistiną, kuris yra %2$s."],"Smileys and emotions":["Šypsenėlės ir emocijos"],"People":["Žmonės"],"Activities":["Veiklos"],"Travel":["Kelionės"],"Objects":["Objektai"],"Animals and nature":["Gyvūnai ir gamta"],"Food and drink":["Valgiai ir gėrimai"],"Symbols":["Simboliai"],"Flags":["Vėliavos"],"Stickers":["Lipdukai"],"Your nickname has been automatically set to %1$s":["Jūsų slapyvardis buvo automatiškai nustatytas kaip %1$s"],"Your nickname has been changed to %1$s":["Jūsų slapyvardis buvo pakeistas į %1$s"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Negalima užregistruoti jūsų slapyvardžio šiame kambaryje, jis nepalaiko registracijos."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Negalima užregistruoti jūsų slapyvardžio šiame kambaryje, pateikta neteisinga duomenų forma."],"Topic set by %1$s":["Temą nustatė %1$s"],"Topic cleared by %1$s":["Temą ištrynė %1$s"],"%1$s has been banned":["%1$s buvo užblokuotas"],"%1$s\'s nickname has changed":["%1$s slapyvardis buvo pakeistas"],"%1$s has been kicked out":["%1$s buvo pašalintas"],"%1$s has been removed because of an affiliation change":["%1$s buvo pašalintas dėl narystės pakeitimo"],"%1$s has been removed for not being a member":["%1$s buvo pašalintas nes nėra narys"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Jūsų pasirinktas slapyvardis rezervuotas arba jau naudojamas, prašome pasirinkti kitą"],"You are not on the member list of this groupchat.":["Jūs nesate šio kambario narių sąraše."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Jūsų slapyvardis neatitinka šio kambario politikos."],"This groupchat does not (yet) exist.":["Šis kambarys (dar) neegzistuoja."],"This groupchat has reached its maximum number of participants.":["Pasiektas šio kambario dalyvių maksimalus skaičius."],"Remote server not found":["Nutolęs serveris nerastas"],"The explanation given is: \\"%1$s\\".":["Pateiktas paaiškinimas: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s pakvietė jus prisijungti prie kambario: %2$s, ir pateikė tokią priežastį: \\"%3$s\\""],"Error":["Klaida"],"Sorry, something went wrong while trying to save your bookmark.":["Deja, įvyko klaida bandant išsaugoti jūsų žymę."],"Timeout Error":["Pasibaugusio laiko klaida"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Serveris nepateikė jūsų žymių per nustatytą laiką. Galite perkrauti puslapį norint užklausti vėl."],"My contacts":["Mano kontaktai"],"Pending contacts":["Nepatvirtinti kontaktai"],"Contact requests":["Prašymai pridėti prie kontaktų"],"Ungrouped":["Nesugrupuota"],"Sorry, there was an error while trying to add %1$s as a contact.":["Deja, įvyko klaida bandant pridėti %1$s kaip kontaktą."],"This client does not allow presence subscriptions":["Šis klientas neleidžia aktyvumo prenumeratos"],"Click to hide these contacts":["Spustelėkite norint paslėpti šiuos kontaktus"],"Unbookmark this groupchat":["Panaikinti šio kambario žymę"],"Click to toggle the bookmarks list":["Spustelėkite, kad įjungtumėte žymių sąrašą"],"Bookmarks":["Žymės"],"Bookmark this groupchat":["Sukurti šio kambario žymę"],"Would you like this groupchat to be automatically joined upon startup?":["Ar pageidaujate atidaryti šį kambarį automatiškai kai prisijungiate?"],"The name for this bookmark:":["Žymės vardas:"],"What should your nickname for this groupchat be?":["Koks bus jūsų slapyvardis šiame kambaryje?"],"Save":["Išsaugoti"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ar tikrai norite ištrinti žymę \\"%1$s\\"?"],"Close":["Uždaryti"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Parsiųsti audio failą \\"%1$s\\""],"Download file \\"%1$s\\"":["Parsiųsti failą \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Pranešimo versijos"],"Retry":[""],"Uploading file:":["Įkeliamas failas:"],"This message has been edited":["Šis pranešimas buvo redaguotas"],"No message history available.":["Žinučių istorijos nėra."],"Search results":["Paieškos rezultatai"],"Search":["Paieška"],"Start a call":["Pradėti skambutį"],"Choose a file to send":["Pasirinkite failą siuntimui"],"Click to write as a normal (non-spoiler) message":["Spustelėkite, jei norite parašyti įprastą (neatskleidžiamą) pranešimą"],"Click to write your message as a spoiler":["Spustelėkite, jei norite parašyti pranešimą kaip atskleidėją"],"The User\'s Profile Image":["Vartotojo profilio nuotrauka"],"Trusted":["Patikimas"],"Untrusted":["Nepatikimas"],"OMEMO Fingerprints":["OMEMO atspaudai"],"XMPP Address":["XMPP adresas"],"Email":["El. paštas"],"Full Name":["Visas vardas"],"Nickname":["Slapyvardis"],"Refresh":["Perkrauti"],"Role":["Vaidmuo"],"URL":["URL"],"Remove messages":["Pašalinti pranešimus"],"Write in the third person":["Rašykite trečiuoju asmeniu"],"Show this menu":["Rodyti šį meniu"],"Hidden message":["Paslėptas pranešimas"],"Message":["Pranešimas"],"Optional hint":["Neprivaloma užuomina"],"You have unread messages":["Jūs turite neperskaitytų pranešimų"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Turite žinoti, kad kiti XMPP/Jabber klientai (ir serveriai) gali dar nepalaikyti žinutės atšaukimo ir ši žinutė galbūt nebus pašalinta visur."],"Confirm":["Patvirtinti"],"You have an unsent message which will be lost if you continue. Are you sure?":["Turite neišsiųstą žinutę, kuri dings jei tęsite. Ar esate tikri?"],"Are you sure you want to remove this contact?":["Ar tikrai norite pašalinti šį kontaktą?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Deja, įvyko klaida bandant pašalinti %1$s iš kontaktų."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Greitaveikos padidinimui mes saugome duomenų podėlį jūsų naršykleje. Nuimkite varnelę šiame laukelyje, jeigu tai yra viešas kompiuteris arba jei norite, kad jūsų duomenys būtų ištrinti, kai atsijungiate. Yra svarbu atlikti atsijungimo veiksmą, kitaip ne visi išaugoti duomenys bus ištrinti. Atkreipiame dėmesį, kad naudojant nepatikimą įrenginį OMEMO šifravimas NĖRA galimas."],"This is a trusted device":["Tai yra patikimas įrenginys"],"Create an account":["Sukurti paskyrą"],"Don\'t have a chat account?":["Neturite pokalbių paskyros?"],"Disconnected":[""],"Click here to log in anonymously":["Spustelėkite čia norėdami prisijungti anonimiškai"],"Username":["Vartotojo vardas"],"user@domain":["vartotojas@domenas"],"Please enter a valid XMPP address":["Įveskite teisingą XMPP adresą"],"Chat Contacts":["Pokalbio kontaktai"],"Toggle chat":["Perjungti pokalbius"],"Click to restore this chat":["Spustelėkite, kad atstatytumėte pokalbį"],"Minimized":["Minimizuotas"],"This user is a moderator.":["Šis vartotojas yra moderatorius"],"This user can send messages in this groupchat.":["Šis vartotojas gali siųsti pranešimus šiame kambaryje."],"This user can NOT send messages in this groupchat.":["Šis vartotojas NEGALI siųsti pranešimų šiame kambaryje."],"Owner":["Savininkas"],"Admin":["Administratorius"],"Member":["Narys"],"Moderator":["Moderatorius"],"Visitor":["Lankytojas"],"Click to mention %1$s in your message.":["Spustelėkite norint paminėti %1$s savo pranešime."],"Participants":["Dalyviai"],"This field is required":["Šis laukelis yra privalomas"],"Join":["Prisijungti"],"Enter a new Groupchat":["Įvesti naują kambarį"],"name@conference.example.org":["vardas@conference.pavyzdys.lt"],"Groupchat address":["Kambario adresas"],"Invite":["Pakviesti"],"Server address":["Serverio adresas"],"Show more information on this groupchat":["Parodyti daugiau informacijos apie šį kambarį"],"Query for Groupchats":["Kambarių užklausa"],"Description:":["Aprašymas:"],"Participants:":["Dalyviai:"],"Features:":["Savybės:"],"Requires authentication":["Reikalinga autentikacija"],"Hidden":["Paslėptas"],"Requires an invitation":["Reikalingas pakvietimas"],"Moderated":["Moderuojamas"],"Non-anonymous":["Ne anonimiškas"],"Open":["Atidarytas"],"Permanent":["Pastovus"],"Public":["Viešas"],"Semi-anonymous":["Pusiau anonimiškas"],"Temporary":["Laikinas"],"Unmoderated":["Nemoderuojamas"],"conference.example.org":["conference.pavyzdys.lt"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatoriai yra privilegijuoti vartotojai, kurie gali keisti kitų vartotojų vaidmenis (išskyrus administratoriaus ir savininko narystes)."],"The default role, implies that you can read and write messages.":["Standartinis vaidmuo, leidžia skaityti ir rašyti žinutes."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Lankytojams neleidžiama rašyti žinučių moderuojamame grupiniame pokalbyje."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Savininkas yra aukščiausias narystės tipas. Savininkai gali keisti visų kitų vartotojų vaidmenis ir narystes."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Administratorius yra antras pagal svarbumą narystės tipas. Administratoriai gali keisti keisti visų kitų vartotojų vaidmenis ir narystes, išskyrus savininkus."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Norint uždrausti vartotojui prieigą jam suteikiama \\"ištremtas\\" narystė."],"Reason":["Priežastis"],"New affiliation":["Nauja narystė"],"Affiliation":["Narystė"],"No users with that affiliation found.":["Nerasta vartotojų su šia naryste."],"No users with that role found.":["Nerasta vartotojų su šiuo vaidmeniu."],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Vaidmenys priskiriami vartotojams siekiant suteikti ar atimti tam tikras galimybes grupiniame pokalbyje. Jie priskiriami tiesiogiai ar netesiogiai su naryste. Vaidmuo nesusijęs su naryste galioja tik vartotojo sesijos metu."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Narystė tai ilgalaikė teisė, kuri paprastai suteikia tam tikrą vaidmenį, kuris suteikia privilegijas ir atsakomybes. Pavyzdžiui administratoriai ir savininkai automatiškai gauna moderatoriaus vaidmenį."],"Affiliation changed":["Narystė pasikeitė"],"Topic":["Tema"],"Topic author":["Temos autorius"],"Message archiving":["Pranešimų archivavimas"],"Messages are archived on the server":["Pranešimai archivuojami serveryje"],"Description":["Aprašymas"],"Features":["Savybės"],"This groupchat is not publicly searchable":["Šis kambarys neprieinamas viešoje paieškoje"],"Members only":["Tik nariams"],"Participants entering this groupchat need to request permission to write":["Dalyviai turi paprašyti rašymo leidimo įeinant į kambarį"],"Name":["Vardas"],"This groupchat does not require a password upon entry":["Šis kambarys nereikalauja slaptažodžio įėjimui"],"No password required":["Slaptažodis nereikalingas"],"All other groupchat participants can see your XMPP address":["Visi kiti kambario dalyviai gali matyti jūsų XMPP adresą"],"Not moderated":["Ne moderuojamas"],"Participants entering this groupchat can write right away":["Dalyviams leidžiama rašyti iškart įeinant į šį kambarį"],"Anyone can join this groupchat":["Bet kas gali įeiti į šį kambarį"],"This groupchat requires a password before entry":["Šis kambarys reikalauja slaptažodžio įėjimui"],"Password protected":["Apsaugotas slaptažodžiu"],"Persistent":["Pastovus"],"This groupchat persists even if it\'s unoccupied":["Šis kambarys išlieka net kai neturi lankytojų"],"Only moderators can see your XMPP address":["Tik moderatoriai gali matyti jūsų XMPP adresą"],"This groupchat will disappear once the last person leaves":["Šis kambarys dings kai paskutinis žmogus išeis"],"This groupchat is publicly searchable":["Šis kambarys prieinamas viešoje paieškoje"],"Groupchat info for %1$s":["Kambario informacija apie %1$s"],"The conversation has moved. Click below to enter.":["Pokalbis buvo perkeltas. Spustelėkite žemiau įėjimui."],"Enter groupchat":["Įeiti į kambarį"],"Please choose your nickname":["Prašome pasirinkti slapyvardį"],"This groupchat requires a password":["Šis kambarys reikalauja slaptažodžio"],"Password: ":["Slaptažodis: "],"Submit":["Pateikti"],"%1$s is now a moderator":["%1$s dabar yra moderatorius"],"%1$s is no longer a moderator":["%1$s daugiau nėra moderatorius"],"Change user\'s affiliation to admin":["Pakeisti vartotojo narystę į administratoriaus"],"Ban user by changing their affiliation to outcast":["Uždrauskite vartotojui prieigą pakeisdami jo narystę į ištremto"],"Change user role to participant":["Pakeisti vartotojo vaidmenį į dalyvio"],"Kick user from groupchat":["Pašalinti vartotoją iš kambario"],"Write in 3rd person":["Rašyti trečiuoju asmeniu"],"Grant membership to a user":["Suteikti vartotojui nario statusą"],"Opens up the moderator tools GUI":["Atidaro moderatoriaus įrankių grafinę sąsają"],"Remove user\'s ability to post messages":["Atimti iš vartotojo teisę rašyti žinutes"],"Change your nickname":["Pakeisti jūsų slapyvardį"],"Grant moderator role to user":["Suteikti vartotojui moderatoriaus vaidmenį"],"Grant ownership of this groupchat":["Suteikti šio kambario savininko teises"],"Revoke the user\'s current affiliation":["Atšaukti vartotojo esamą narystę"],"Set groupchat subject":["Nustatyti kambario temą"],"Set groupchat subject (alias for /subject)":["Nustatyti kambario temą (slapyvardis /subject)"],"Allow muted user to post messages":["Leisti vartotojui be balso teisės rašyti pranešimus"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Paslėpti dalyvių sąrašą"],"Forbidden: you do not have the necessary role in order to do that.":["Uždrausta: jūs neturite tinkamo vaidmens tam atlikti."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Uždrausta: jūsų narystė nėra tinkama tam atlikti."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Klaida: \\"%1$s\\" komandai reikalingi du argumentai, vartotojo vardas ir neprivalomai priežastis."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["vardas@pavyzdys.lt"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Klaida: netinkamas argumentų skaičius"],"This action was done by %1$s.":["Šį veiksmą atliko %1$s."],"The reason given is: \\"%1$s\\".":["Pateikta priežastis: \\"%1$s\\"."],"Announcements":[""],"Notification from %1$s":["Pranešimas iš %1$s"],"%1$s says":["%1$s sako"],"has gone offline":["atsijungė"],"has gone away":["pasišalinęs"],"is busy":["užsiėmęs"],"has come online":["prisijungė"],"wants to be your contact":["nori būti jūsų kontaktu"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Apie"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Atviro Kodo %2$s XMPP pokalbių klientas pateiktas jums %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Išverskite %2$s jį į jūsų kalbą"],"Log out":["Atsijungti"],"Click to change your chat status":["Spustelėkite norėdami pakeisti pokalbio būseną"],"Show details about this chat client":["Parodyti šio pokalbių kliento duomenis"],"Your avatar image":["Jūsų pseudoportretas"],"Checkbox for selecting the following fingerprint":["Pažymėti šio atspaudo pasirinkimui"],"Device without a fingerprint":["Įrenginys be atspaudo"],"Other OMEMO-enabled devices":["Kiti įrenginiai su įjungtu OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Pažymėti, kad pasirinkti visų kitų OMEMO įrenginių atspaudus"],"Remove checked devices and close":["Ištrinti pasirinktus įrenginius ir uždaryti"],"Select all":["Pasirinkti viską"],"This device\'s OMEMO fingerprint":["Šio įrenginio OMEMO atspaudas"],"Generate new keys and fingerprint":["Sugeneruoti naujus raktus ir atspaudą"],"Your Profile":["Jūsų profilis"],"Save and close":["Išsaugoti ir uždaryti"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Kelių vaidmenų atskirimui naudokite kablelius. Jūsų vaidmenys rodomi šalia jūsų vardo jūsų pranešimuose."],"OMEMO":[""],"You can check your browser\'s developer console for any error output.":["Galite patikrinti ar yra kokių nors klaidų jūsų naršyklės vystytojo konsolėje."],"Away":["Pasišalinęs"],"Busy":["Užsiėmęs"],"Custom status":["Pritaikyta būsena"],"Offline":["Neprisijungęs"],"Online":["Prisijungęs"],"Away for long":["Ilgai pasišalinęs"],"Change chat status":["Keisti pokalbio būseną"],"Personal status message":["Asmeninis būsenos pranešimas"],"I am %1$s":["Aš esu %1$s"],"Are you sure you want to log out?":["Ar tikrai norite atsijungti?"],"online":["prisijungęs"],"busy":["užsiėmęs"],"away for long":["ilgai pasišalinęs"],"away":["pasišalinęs"],"offline":["neprisijungęs"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Deja, dėl klaidos nepavyko iššifruoti gauto OMEMO pranešimo."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s tikriausiai neturi kliento palaikančio OMEMO. Daugiau nebus galima naudoti pokalbių šifravimą šiame kambaryje."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Negalima panaudoti taškas-į-tašką šifravimo, kadangi %1$s naudoja klietą nepalaikantį OMEMO."],"Messages are being sent in plaintext":["Pranešimai siunčiami atviru tekstu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Deja, negalime nusiųsti užšifruoto pranešimo, nes %1$s reikalauja, kad butumėte prenumeravę jo (jos) būseną, kad galėtumete matyti jo (jos) OMEMO informaciją"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Deja, negalime nusiųsti užšifruoto pranešimo, nes %1$s nutolęs serveris nerastas"],"Unable to send an encrypted message due to an unexpected error.":["Neįmanoma nusiųsti užšifruoto pranešimo dėl nenumatytos klaidos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Ar esate tikri, kad norite sugeneruoti naujus OMEMO raktus? Šis veiksmas pašalins senus raktus ir visi anksčiau šifruoti pranešimai daugiau negalės būti iššifruoti šiame įrenginyje."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Deja, nerasta įrenginių kur galima būtų nusiųsti OMEMO šifruotą žinutę."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Tai yra OMEMO užšifruotas pranešimas, kurio jūsų klientas tikriausiai nepalaiko. Daugiau informacijos rasite https://conversations.im/omemo"]," e.g. conversejs.org":[" pvz. converse.org"],"Fetch registration form":["Parsiųsti registracijos formą"],"Tip: A list of public XMPP providers is available":["Patarimas: Yra pasiekiamas sąrašas viešų XMPP teikėjų"],"here":["čia"],"Sorry, we\'re unable to connect to your chosen provider.":["Deja, mes negalimeprisijungti prie jūsų pasirinkto teikėjo."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Deja, nurodytas teikėjas nepalaiko tiesioginės paskyros registracijos. Prašome pabandyti kitą teikėją."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Įvyko klaida bandant užmegzti ryšį su \\"%1$s\\". Ar esate tikri, kad jis egzistuoja?"],"Now logging you in":["Dabar jus prijungiame"],"Registered successfully":["Sėkmingai užregistruotas"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Teikėjas atmetė jūsų registracijos bandymą. Prašome patikrinti ar jūsų pateiktos reikšmės teisingos."],"Leave this groupchat":["Išeiti iš šio kambario"],"Click to toggle the list of open groupchats":["Spustelėkite, kad parodyti sąrašą kambarių"],"Open Groupchats":["Atidaryti Kambarius"],"Add":["Pridėti"],"Add a Contact":["Pridėti kontaktą"],"This contact is busy":["Šis kontaktas yra užsiėmęs"],"This contact is online":["Šis kontaktas yra prisijungęs"],"This contact is offline":["Šis kontaktas yra atsijungęs"],"This contact is unavailable":["Šis kontaktas yra nepasiekiamas"],"This contact is away for an extended period":["Šis kontaktas yra ilgai pasišalinęs"],"This contact is away":["Šis kontaktas yra pasišalinęs"],"Contact name":["Kontakto vardas"],"Optional nickname":["Neprivalomas slapyvardis"],"Sorry, could not find a contact with that name":["Deja, nepavyko rasti kontakto su šiuo vardu"],"Filter":["Filtras"],"Filter by contact name":["Filtruoti pagal kontakto vardą"],"Filter by group name":["Filtruoti pagal grupės pavadinimą"],"Filter by status":["Filtruoti pagal būseną"],"Any":["Bet kuris"],"Unread":["Neskaityta"],"Chatty":["Kalbus"],"Extended Away":["Ilgai pasišalinęs"],"Click to remove %1$s as a contact":["Spustelėkite, jei norite pašalinti %1$s iš kontaktų"],"Click to accept the contact request from %1$s":["Spustelėkite, jei norite priimti prašymą pridėti į kontaktus iš %1$s"],"Click to decline the contact request from %1$s":["Spustelėkite, jei norite atmesti prašymą pridėti į kontaktus iš %1$s"],"Are you sure you want to decline this contact request?":["Ar tikrai norite atmesti šį prašymą pridėti į kontaktus?"],"Contacts":["Kontaktai"],"Add a contact":["Pridėti kontaktą"]}}}')}}]);
 //# sourceMappingURL=lt-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/mr-LC_MESSAGES-converse-po.js b/src/conversejs/locales/mr-LC_MESSAGES-converse-po.js
index 4ccb78e55294100aa3262fb6e5d36f00706dee9b..02ce636cf6a64154ea4826617f0696f75b81fb55 100644
--- a/src/conversejs/locales/mr-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/mr-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[161],{439:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"mr"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["रद्द करा"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"You\'re not allowed to retract your message.":[""],"Sorry, an error occurred while trying to retract your message.":[""],"You\'re not allowed to send a message.":[""],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":[""],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":[""],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":[""],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["बंद करा"],"OK":["ठीक आहे"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["संदेश आवृत्त्या"],"Retry":[""],"Uploading file:":["फाइल अपलोड करीत आहे:"],"This message has been edited":["हा संदेश संपादित केला गेला आहे"],"Show more":[""],"Show less":[""],"No message history available.":[""],"Search results":["शोध परिणाम"],"Search":["शोधा"],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["वापरकर्त्याची प्रोफाइल प्रतिमा"],"Trusted":["विश्वासु"],"Untrusted":["अविश्वासू"],"OMEMO Fingerprints":["OMEMO फिंगरप्रिंट्स"],"No OMEMO-enabled devices found":[""],"Remove as contact":["संपर्क म्हणून काढा"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["टोपणनाव"],"Refresh":["रीफ्रेश"],"Role":[""],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":["हे एक विश्वसनीय डिव्हाइस आहे"],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":["लॉग इन करा"],"Disconnected":[""],"Click here to log in anonymously":["अनामिकपणे लॉग इन करण्यासाठी येथे क्लिक करा"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This field is required":[""],"Join":["सामील व्हा"],"Enter a new Groupchat":["नवीन ग्रुपचॅट प्रविष्ट करा"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":[""],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":[""],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"Groupchats found":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, you\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["विषय"],"Topic author":["विषय लेखक"],"Groupchat address (JID)":["ग्रुपचॅट पत्ता (JID)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["वर्णन"],"Features":["वैशिष्ट्ये"],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":["नाव"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":["ऑनलाइन वापरकर्ते"],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":[""],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["हे ग्रुप चॅट यापुढे अस्तित्वात नाही"],"Hide the groupchat topic":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s have entered the groupchat":[""],"%1$s have left the groupchat":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"%1$s have been muted":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Optional reason":[""],"Sorry, you\'re not allowed to retract this message":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Show more information about this groupchat":[""],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional reason for destroying this groupchat":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[161],{527:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"mr"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["रद्द करा"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"You\'re not allowed to retract your message.":[""],"Sorry, an error occurred while trying to retract your message.":[""],"You\'re not allowed to send a message.":[""],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":[""],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":[""],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Timeout while trying to fetch archived messages.":[""],"An error occurred while querying for archived messages.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":[""],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["बंद करा"],"OK":["ठीक आहे"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["संदेश आवृत्त्या"],"Retry":[""],"Uploading file:":["फाइल अपलोड करीत आहे:"],"This message has been edited":["हा संदेश संपादित केला गेला आहे"],"Show more":[""],"Show less":[""],"No message history available.":[""],"Search results":["शोध परिणाम"],"Search":["शोधा"],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["वापरकर्त्याची प्रोफाइल प्रतिमा"],"Trusted":["विश्वासु"],"Untrusted":["अविश्वासू"],"OMEMO Fingerprints":["OMEMO फिंगरप्रिंट्स"],"No OMEMO-enabled devices found":[""],"Remove as contact":["संपर्क म्हणून काढा"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["टोपणनाव"],"Refresh":["रीफ्रेश"],"Role":[""],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":["हे एक विश्वसनीय डिव्हाइस आहे"],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":["लॉग इन करा"],"Disconnected":[""],"Click here to log in anonymously":["अनामिकपणे लॉग इन करण्यासाठी येथे क्लिक करा"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":["सामील व्हा"],"Enter a new Groupchat":["नवीन ग्रुपचॅट प्रविष्ट करा"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":[""],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":[""],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"Groupchats found":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, you\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["विषय"],"Topic author":["विषय लेखक"],"Groupchat address (JID)":["ग्रुपचॅट पत्ता (JID)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["वर्णन"],"Features":["वैशिष्ट्ये"],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":["नाव"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":["ऑनलाइन वापरकर्ते"],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":[""],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["हे ग्रुप चॅट यापुढे अस्तित्वात नाही"],"Hide the groupchat topic":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s have entered the groupchat":[""],"%1$s have left the groupchat":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"%1$s have been muted":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Optional reason":[""],"Sorry, you\'re not allowed to retract this message":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Show more information about this groupchat":[""],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional reason for destroying this groupchat":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=mr-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/nb-LC_MESSAGES-converse-po.js b/src/conversejs/locales/nb-LC_MESSAGES-converse-po.js
index 7f0369ab2c185e48e55b1c6332d8c735848bc849..041313d5c7b3b67679735c9ead485b8004551d87 100644
--- a/src/conversejs/locales/nb-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/nb-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[162],{440:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nb"},"Create your account":["Opprett kontoen din"],"Please enter the XMPP provider to register with:":["Skriv inn XMPP-tilbyderen å registrere med:"],"Already have a chat account?":["Har du allerede en sludrekonto?"],"Log in here":["Logg inn her"],"Account Registration:":["Kontoregistrering:"],"Register":["Registrér deg"],"Choose a different provider":["Velg en annen tilbyder"],"Hold tight, we\'re fetching the registration form…":["Hold an, henter registreringsskjemaet…"],"Cancel":["Avbryt"],"The connection has dropped, attempting to reconnect.":["Tilkoblingen har gått ned, prøver å koble til igjen."],"An error occurred while connecting to the chat server.":["En feil skjedde under tilkobling til sludretjeneren."],"Your XMPP address and/or password is incorrect. Please try again.":["Din XMPP adresse og/eller passord er feilaktig. Prøv igjen."],"The XMPP server did not offer a supported authentication mechanism":["XMPP-tjeneren tilbudte ikke en støttet identitetsbekreftelsesmekanisme"],"Sorry, could not determine upload URL.":["Beklager, kunne ikke fastsette opplastingsnettadresse."],"Sorry, could not determine file upload URL.":["Beklager, kunne ikke fastsette filopplastingsnettadresse."],"Sorry, could not succesfully upload your file.":["Kunne ikke laste opp filen din."],"Sorry, looks like file upload is not supported by your server.":["Beklager, det ser ikke ut til at filopplasting støttes av tjeneren din."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Størrelsen på filen din, %1$s, overstiger maks tillatt størrelse for tjeneren din, som er %2$s."],"People":["Folk"],"Activities":["Aktiviteter"],"Travel":["Reise"],"Objects":["Objekter"],"Animals and nature":["Dyr og natur"],"Food and drink":["Mat og drikke"],"Symbols":["Symboler"],"Flags":["Flagg"],"Stickers":["Klistremerker"],"This groupchat is not anonymous":["Denne gruppesludringen er ikke anonym"],"This groupchat now shows unavailable members":["Denne gruppesludringen viser nå utilgjengelige medlemmer"],"This groupchat does not show unavailable members":["Denne gruppesludringen viser ikke utilgjengelige medlemmer"],"The groupchat configuration has changed":["Dette gruppesludringsoppsettet har blitt endret"],"Groupchat logging is now enabled":["Gruppesludringslogging er nå påslått"],"Groupchat logging is now disabled":["Gruppesludringslogging er nå avskrudd"],"This groupchat is now no longer anonymous":["Denne gruppesludringen er ikke lenger anonym"],"This groupchat is now semi-anonymous":["Denne gruppesludringen er nå semi-anonym"],"This groupchat is now fully-anonymous":["Denne gruppesludringen er nå helt anonym"],"A new groupchat has been created":["En ny gruppesludring har blitt opprettet"],"Your nickname has been automatically set to %1$s":["Ditt kallenavn har blitt automatisk endret til %1$s"],"Your nickname has been changed to %1$s":["Ditt kallenavn har blitt endret til %1$s"],"You have been banned from this groupchat":["Du har blitt utestengt fra denne gruppesludringen"],"You have been kicked from this groupchat":["Du ble kastet ut av denne gruppesludringen"],"You have been removed from this groupchat because of an affiliation change":["Du har blitt fjernet fra denne gruppesludringen som følge av en tilknytningsendring"],"You have been removed from this groupchat because the service hosting it is being shut down":["Du har blitt fjernet fra denne gruppesludringen fordi tjeneren som huser den blir slått av"],"Your message was not delivered because you weren\'t allowed to send it.":["Meldingen din ble ikke levert fordi du ikke tillates å sende den."],"Your message was not delivered because you\'re not present in the groupchat.":["Meldingen din ble ikke levert fordi du ikke er i gruppesludringen."],"You\'re not allowed to register yourself in this groupchat.":["Du tillates ikke å registrere deg selv i denne gruppesludringen."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Du tillates ikke å registrere deg i dette rommet fordi det er forbeholdt medlemmer."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan ikke registrere kallenavnet ditt i denne gruppesludringen, siden den ikke støtter det."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan ikke registrere kallenavnet ditt i denne gruppesludringen, ugydlig dataskjema innsendt."],"%1$s has been banned by %2$s":["%1$s har blitt utestengt %2$s"],"%1$s has been banned":["%1$s  har blitt utestengt"],"%1$s\'s nickname has changed":["%1$s sitt kallenavn er endret"],"%1$s has been kicked out by %2$s":["%1$s ble kastet ut %2$s"],"%1$s has been kicked out":["%1$s  ble kastet ut"],"%1$s has been removed because of an affiliation change":["%1$s har blitt fjernet på grunn av en tilknytningsendring"],"%1$s has been removed for not being a member":["%1$s har blitt fjernet på grunn av at vedkommende ikke er medlem"],"%1$s is no longer an admin of this groupchat":["%1$s er ikke lenger en administrator for gruppesludringen"],"%1$s is no longer an owner of this groupchat":["%1$s eier ikke lenger dette rommet"],"%1$s is no longer banned from this groupchat":["%1$s er ikke lenger bannlyst fra denne gruppesludringen"],"%1$s is no longer a member of this groupchat":["%1$s er ikke lenger medlem av denne gruppesludringen"],"%1$s is now a member of this groupchat":["%1$s er nå medlem av denne gruppesludringen"],"%1$s is now an %2$s of this groupchat":["%1$s er nå %2$s i dette rommet"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Kallenavnet du valgte er reservert eller i bruk for tiden, velg noe annet."],"Password incorrect":["Feil passord"],"You are not on the member list of this groupchat.":["Du er ikke på medlemslisten til denne gruppesludringen."],"You have been banned from this groupchat.":["Du har blitt utestengt fra denne gruppesludringen."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Kallenavnet ditt overholder ikke rommets regler."],"This groupchat does not (yet) exist.":["Denne gruppesludringen finnes ikke enda."],"This groupchat has reached its maximum number of participants.":["Denne gruppesludringen har nådd maksimalt antall brukere."],"Remote server not found":["Tjeneren annensteds hen ble ikke funnet"],"%1$s has invited you to join a groupchat: %2$s":["%1$s har invitert deg til å ta del i en gruppesludring: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s har invitert deg til å ta del i rommet: %2$s, etterlot følgende forklaring: \\"%3$s\\""],"Error":["Feil"],"Sorry, something went wrong while trying to save your bookmark.":["Noe gikk galt under lagring av ditt bokmerke."],"Timeout Error":["Tidsavbruddsfeil"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Tjeneren kom ikke med bokmerkene innen tidsfristen. Du kan gjeninnlaste siden for å forespørre dem igjen."],"My contacts":["Mine Kontakter"],"Pending contacts":["Kontakter som venter på godkjenning"],"Contact requests":["Kontaktforespørsler"],"Ungrouped":["Ugrupperte"],"New messages":["Nye meldinger"],"Sorry, there was an error while trying to add %1$s as a contact.":["En feil inntraff under tillegg av %1$s som kontakt."],"This client does not allow presence subscriptions":["Denne klienten tillater ikke tilstedeværelsesabonnementer"],"Click to hide these contacts":["Klikk for å skjule disse kontaktene"],"Unbookmark this groupchat":["Fjern bokmerkning av denne gruppesludringen"],"Click to open this groupchat":["Klikk for å åpne denne gruppesludringen"],"Click to toggle the bookmarks list":["Klikk for å veksle visning av bokmerkelisten"],"Bookmarks":["Bokmerker"],"Bookmark this groupchat":["Bokmerk denne gruppesludringen"],"Would you like this groupchat to be automatically joined upon startup?":["Ønsker du å automatisk ta del i denne gruppesludringen ved oppstart?"],"The name for this bookmark:":["Bokmerkets navn:"],"What should your nickname for this groupchat be?":["Hva lags kallenavn ønsker du for denne gruppesludringen?"],"Save":["Lagre"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Er du sikker på at du ønsker å fjerne bokmerket \\"%1$s\\"?"],"Unbookmark":["Fjern bokmerke"],"Bookmark":["Legg til bokmerke"],"Close":["Lukk"],"OK":["OK"],"Image: ":[""],"Edit":[""],"Retract":[""],"Message versions":["Meldingsversjoner"],"Retry":[""],"Uploading file:":["Laster opp fil:"],"%1$s has removed this message":["%1$s har fjernet denne meldingen"],"This message has been edited":["Denne meldingen har blitt endret"],"Show more":["Vis mer"],"No message history available.":["Ingen meldingshistorikk tilgjengelig."],"Search":["Søk"],"Insert emojis":["Sett inn smilefjes"],"Send the message":["Send meldingen"],"Start a call":["Start en samtale"],"Choose a file to send":["Velg en fil å sende"],"The User\'s Profile Image":["Brukerens profilbilde"],"Trusted":["Betrodd"],"Untrusted":["Ubetrodd"],"OMEMO Fingerprints":["OMEMO-fingeravtrykk"],"XMPP Address":["XMPP-adresse"],"Email":["E-post"],"Full Name":["Fullt navn"],"Nickname":["Kallenavn"],"Refresh":["Gjenoppfrisk"],"Role":["Rolle"],"URL":["Nettadresse"],"%1$s is typing":["%1$s skriver"],"%1$s has gone away":["%1$s har blitt borte"],"Remove messages":["Fjern meldinger"],"Write in the third person":["Skriv i tredjeperson"],"Show this menu":["Viser denne menyen"],"Hidden message":["Skjult melding"],"Message":["Melding"],"Optional hint":["Valgfritt hint"],"You have unread messages":["Du har uleste meldinger"],"Details":["Detaljer"],"Close and end this conversation":["Lukk og avslutt denne samtalen"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Ha i minnet at andre XMPP/Jabber-klienter (og tjenere) kanskje ikke støtter tilbaketrekkinger enda, og at meldingen derfor ikke blir fjernet overalt."],"Confirm":["Bekreft"],"You have an unsent message which will be lost if you continue. Are you sure?":["Du har en usendt melding som vil gå tapt hvis du fortsetter. Er du sikker?"],"Are you sure you want to clear the messages from this conversation?":["Er du sikker på at du vil fjerne meldingene fra denne samtalen?"],"%1$s has gone offline":["%1$s har logget av"],"%1$s is busy":["%1$s er opptatt"],"%1$s is online":["%1$s er pålogget"],"Are you sure you want to remove this contact?":["Er du sikker på at du vil fjerne denne kontakten?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Feil under fjerning av %1$s som kontakt."],"This is a trusted device":["Dette er en betrodd enhet"],"Create an account":["Opprett en konto"],"Don\'t have a chat account?":["Har du ikke en sludrekonto?"],"Log in":["Logg inn"],"Disconnected":["Frakoblet"],"Click here to log in anonymously":["Klikk her for å logge inn anonymt"],"Username":["Brukernavn"],"user@domain":["bruker@domene"],"Please enter a valid XMPP address":["Skriv inn et gydlig XMPP-brukernavn"],"Chat Contacts":["Sludrekontakter"],"Toggle chat":["Endre chatten"],"Click to restore this chat":["Klikk for å gjenopprette denne samtalen"],"Minimized":["Minimert"],"This field is required":["Påkrevd felt"],"Join":["Ta del"],"name@conference.example.org":["navn@konferanse.eksempel.no"],"Groupchat name":["Gruppesludringsnavn"],"Groupchat address":["Gruppesludringsadresse"],"Invite":["Invitér"],"Server address":["Tjeneradresse"],"Show more information on this groupchat":["Vis mer info om denne gruppesludringen"],"Query for Groupchats":["Spør for rom"],"Description:":["Beskrivelse:"],"Groupchat Address (JID):":["Gruppesludringsadresse (JID):"],"Participants:":["Deltagere:"],"Features:":["Egenskaper:"],"Requires authentication":["Krever Godkjenning"],"Hidden":["Skjult"],"Requires an invitation":["Krever en invitasjon"],"Moderated":["Moderert"],"Non-anonymous":["Ikke-Anonym"],"Permanent":["Permanent"],"Public":["Alle"],"Semi-anonymous":["Semi-anonymt"],"Temporary":["Midlertidig"],"Unmoderated":["Umoderert"],"conference.example.org":["konferanse@eksempel.no"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatorer er priviligerte brukere, som kan endre andre brukeres roller (unntatt de med admin- eller eier-tilknytninger."],"The default role, implies that you can read and write messages.":["Forvalgt rolle impliserer at du kan lese og skrive meldinger."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besøkere tillates ikke å skrive meldinger i en moderert flerbrukersludring."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["«Eier» er høyeste tilknytning. Eiere kan andre brukeres roller og tilknytninger."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["«Admin» er nest høyeste tilknytning. Administratorer kan endre andre brukeres tilknytninger, unntatt eiere."],"Change role":["Endre rolle"],"New Role":["Ny rolle"],"Reason":["Begrunnelse"],"New affiliation":["Ny tilknytning"],"Affiliation":["Tilknytning"],"Moderator Tools":["Moderatorverktøy"],"No users with that affiliation found.":["Fant ingen brukere med den tilknytningen."],"Type here to filter the search results":["Skriv her for å filtrere søkeresultatene"],"Show users":["Vis brukere"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Roller tildeles brukere for å innvilge eller nekte bruk av gitte egenskaper i en flerbrukersludring. De tildeles enten eksplisitt, eller implisitt som del av tilknytningen. En rolle som ikke er en tilknytning varer kun ut brukerøkta."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["En tilknytning er en langtlevende påskjønning som typisk impliserer en gitt rolle, og innvilger privilegier og ansvar. For eksempel har administratorer og eiere automatisk moderatorrollen."],"Affiliation changed":["Tilknytning endret"],"Topic":["Emne"],"Topic author":["Emnestarter"],"Groupchat address (JID)":["Romadresse (JID)"],"Message archiving":["Meldingsarkivering"],"Messages are archived on the server":["Meldinger arkiveres på tjeneren"],"Description":["Beskrivelse"],"Features":["Funksjoner"],"Members only":["Kun for medlemmer"],"Participants entering this groupchat need to request permission to write":["Deltagere som tar del i denne gruppesludringen må forespørre skrivetilgang"],"No password required":["Inget passord kreves"],"Not anonymous":["Ikke-anonym"],"Participants entering this groupchat can write right away":["Deltagere som tar del i denne gruppesludringen kan skrive umiddelbart"],"Online users":["Påloggede brukere"],"Password protected":["Passordbeskyttet"],"Persistent":["Vedvarende"],"Groupchat info for %1$s":["Gruppeslduringsinfo for %1$s"],"You\'re not allowed to send messages in this room":["Du tillates ikke å sende meldinger i dette rommet."],"The conversation has moved. Click below to enter.":["Samtalen har flyttet. Ta del i den ved å klikke nedenfor."],"This groupchat no longer exists":["Denne gruppesludringen finnes ikke lenger."],"Enter groupchat":["Ta del i gruppesludringen"],"Please choose your nickname":["Endre kallenavnet ditt"],"Password: ":["Passord: "],"Submit":["Send"],"This user is a moderator.":["Denne brukeren er moderator."],"Owner":["Eier"],"Admin":["Administrator"],"Member":["Medlem"],"Moderator":["Moderator"],"Visitor":["Besøkende"],"Click to mention %1$s in your message.":["Klikk for å nevne %1$s i meldingen din."],"Participants":["Deltagere"],"%1$s is now a moderator":["%1$s er nå moderator"],"%1$s has been given a voice":["%1$s har blitt gitt stemme."],"%1$s has been muted":["%1$s har blitt forstummet"],"%1$s and %2$s":["%1$s og %2$s"],"%1$s have left the groupchat":["%1$s har forlatt gruppesludringen"],"Change user\'s affiliation to admin":["Endre brukerens tilknytning til administrator"],"Ban user by changing their affiliation to outcast":["Bannlys bruker ved å endre deres tilhørighet til fredløs"],"Write in 3rd person":["Skriv i tredjeperson"],"Grant membership to a user":["Skjenk medlemskap til en bruker"],"Opens up the moderator tools GUI":["Åpner grafisk grensesnitt for moderatorverktøy"],"Remove user\'s ability to post messages":["Fjern brukerens muligheter til å skrive meldinger"],"Change your nickname":["Endre ditt kallenavn"],"Grant moderator role to user":["Tildel moderatorrolle til bruker"],"Revoke the user\'s current affiliation":["Tilbakekall brukerens nåværende tilhørighet"],"Set groupchat subject":["Sett gruppesludringsemne"],"Allow muted user to post messages":["Tillat stumme brukere å skrive meldinger"],"Sorry, you\'re not allowed to retract this message":["Du tillates ikke å trekke tilbake denne meldingen"],"Sorry, you\'re not allowed to retract this message.":["Du tillates ikke å trekke tilbake denne meldingen."],"Invite someone to join this groupchat":["Inviter noen til å ta del i denne gruppesludringen"],"Show topic":["Vis emne"],"Hide topic":["Skjul emne"],"Destroy":["Ødelegg"],"Leave":["Forlat"],"Are you sure you want to leave this groupchat?":["Er du sikker på at ønsker å forlate denne gruppesludringen?"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Feil: \\"%1$s\\"-kommandoen tar to argumenter, brukerens kallenavn og alternativt en grunn."],"name@example.org":["navn@eksempel.no"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Feil: Ugyldig antall argumenter"],"This action was done by %1$s.":["Handlingen ble utført av %1$s."],"The reason given is: \\"%1$s\\".":["Oppgitt årsak er: \\"%1$s\\"."],"Groupchats":["Gruppeslduringer"],"Add a new groupchat":["Legg til ny gruppesludring"],"Query for groupchats":["Spørring for gruppesludringer"],"Sorry, an error occurred while trying to submit the config form.":["En feil skjedde ved forsøk på å sende inn oppsettsskjemaet."],"Close these announcements":["Lukk disse kunngjøringene"],"Announcements":["Kunngjøringer"],"Click to open this server message":["Klikk for å åpne denne tjenermeldingen"],"Notification from %1$s":["Merknad fra %1$s"],"%1$s says":["%1$s sier"],"has gone offline":["har logget av"],"has gone away":["har blitt borte"],"is busy":["er opptatt"],"has come online":["har logget på"],"wants to be your contact":["ønsker å bli kontaktfestet"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Om"],"Commands":[""],"%1$s Translate %2$s it into your own language":["%1$sOversett%2$s det til ditt eget språk"],"Log out":["Logg Av"],"Click to change your chat status":["Klikk for å endre din meldingsstatus"],"Show details about this chat client":["Vis flere detaljer om denne sludreklienten"],"Your avatar image":["Ditt avatarbilde"],"Checkbox for selecting the following fingerprint":["Avkryssningsboks for valg av følgende fingeravtrykk"],"Device without a fingerprint":["Enhet uten fingeravtrykk"],"Checkbox to select fingerprints of all other OMEMO devices":["Utkryssningsboks for å velge fingeravtrykkene for alle andre OMEMO-enheter"],"Remove checked devices and close":["Fjern avkryssede enheter og lukk"],"This device\'s OMEMO fingerprint":["Denne enhetens OMEMO-fingeravtrykk"],"Generate new keys and fingerprint":["Generer nye nøkler og fingeravtrykk"],"Your Profile":["Din profil"],"XMPP Address (JID)":["XMPP-adresse (JID)"],"Save and close":["Lagre og lukk"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Bruk komma for å inndele flere roller. Dine roller vieses ved siden av navnet ditt i sludremeldingene dine."],"OMEMO":["OMEMO"],"Profile":["Profil"],"You can check your browser\'s developer console for any error output.":["Du kan sjekke din nettlesers utviklerkonsoll for feil-utdata."],"Away":["Borte"],"Busy":["Opptatt"],"Custom status":["Personlig status"],"Offline":["Avlogget"],"Online":["Pålogget"],"Personal status message":["Personlig statusmelding"],"I am %1$s":["Jeg er %1$s"],"Are you sure you want to log out?":["Er du sikker på at du vil logge ut?"],"online":["pålogget"],"busy":["opptatt"],"away for long":["borte lenge"],"away":["borte"],"offline":["avlogget"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Kunne ikke dekryptere mottatt OMEMO-melding som følge av feil."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ser ikke ut til å være en klient som støtter OMEMO. Krypter sludring vil ikke lenger være mulig i denne gruppesludringen."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan ikke bruke ende-til-ende -kryptering, fordi %1$s bruker en klient som ikke støtter OMEMO."],"Messages are being sent in plaintext":["Meldinger blir sendt i klartekst"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["En feil skjedde ved forsøk på å fjerne enhetene."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Kunne ikke sende kryptert melding fordi %1$s krever at du må abonnere på deres tilstedeværelse for å kunne se deres OMEMO-info."],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Kunne ikke sende kryptert melding fordi fjerntjeneren for %1$s ikke ble funnet."],"Unable to send an encrypted message due to an unexpected error.":["Kunne ikke sende kryptert melding som følge av feil."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dette er en OMEMO-kryptert melding som din klient ikke ser ut til å støtte. Mer info er å finne på https://conversations.im/omemo"]," e.g. conversejs.org":[" f.eks. conversejs.org"],"Fetch registration form":["Hent registreringsskjema"],"Tip: A list of public XMPP providers is available":["Tips: En liste med offentlige XMPP-tilbydere er tilgjengelig"],"here":["her"],"Sorry, we\'re unable to connect to your chosen provider.":["Kunne ikke koble til din valgte tilbyder."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Beklager, den valgte tilbyderen støtter ikke kontoregistrering i utvekslingsnettet. Prøv igjen med en annen tilbyder."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Noe gikk galt under etablering av forbindelse til \\"%1$s\\". Er du sikker på at det eksisterer?"],"Now logging you in":["Logger deg inn"],"Registered successfully":["Registrering var vellykket"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Tilbyderen avviste ditt registreringsforsøk. Sjekk verdiene du skrev inn."],"Leave this groupchat":["Forlat denne gruppesludringen"],"Click to toggle the list of open groupchats":["Klikk for å veksle visning av åpne rom"],"Open Groupchats":["Åpne gruppesludringer"],"Add":["Legg Til"],"This contact is busy":["Denne kontakten er opptatt"],"This contact is online":["Kontakten er pålogget"],"This contact is offline":["Kontakten er avlogget"],"This contact is unavailable":["Kontakten er utilgjengelig"],"This contact is away for an extended period":["Kontakten er borte for en lengre periode"],"This contact is away":["Kontakten er borte"],"Contact name":["Kontaktnavn"],"Optional nickname":["Valgfritt kallenavn"],"Sorry, could not find a contact with that name":["Fant ingen slik kontakt"],"This contact has already been added":["Denne kontakten har allerede blitt lagt til"],"Filter":["Filter"],"Filter by group name":["Filtrer etter gruppenavn"],"Filter by status":["Filtrer etter status"],"Any":["Enhver"],"Unread":["Ulest"],"Chatty":["Pratsom"],"Extended Away":["Utvidet lediggang"],"Click to remove %1$s as a contact":["Klikk for å fjerne %1$s som kontakt"],"Click to accept the contact request from %1$s":["Klikk for å godta denne kontaktforespørselen fra %1$s"],"Click to decline the contact request from %1$s":["Klikk for å avslå denne kontaktforespørselen fra %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Klikk for å sludre med %1$s (XMPP adresse: %2$s)"],"Are you sure you want to decline this contact request?":["Er du sikker på at du vil avslå denne kontaktforespørselen?"],"Contacts":["Kontakter"],"Add a contact":["Legg til en Kontakt"],"Re-sync your contacts":["Synkroniser dine kontakter igjen"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[162],{528:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nb"},"Create your account":["Opprett kontoen din"],"Please enter the XMPP provider to register with:":["Skriv inn XMPP-tilbyderen å registrere med:"],"Already have a chat account?":["Har du allerede en sludrekonto?"],"Log in here":["Logg inn her"],"Account Registration:":["Kontoregistrering:"],"Register":["Registrér deg"],"Choose a different provider":["Velg en annen tilbyder"],"Hold tight, we\'re fetching the registration form…":["Hold an, henter registreringsskjemaet…"],"Cancel":["Avbryt"],"The connection has dropped, attempting to reconnect.":["Tilkoblingen har gått ned, prøver å koble til igjen."],"An error occurred while connecting to the chat server.":["En feil skjedde under tilkobling til sludretjeneren."],"Your XMPP address and/or password is incorrect. Please try again.":["Din XMPP adresse og/eller passord er feilaktig. Prøv igjen."],"The XMPP server did not offer a supported authentication mechanism":["XMPP-tjeneren tilbudte ikke en støttet identitetsbekreftelsesmekanisme"],"Sorry, could not determine upload URL.":["Beklager, kunne ikke fastsette opplastingsnettadresse."],"Sorry, could not determine file upload URL.":["Beklager, kunne ikke fastsette filopplastingsnettadresse."],"Sorry, could not succesfully upload your file.":["Kunne ikke laste opp filen din."],"Sorry, looks like file upload is not supported by your server.":["Beklager, det ser ikke ut til at filopplasting støttes av tjeneren din."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Størrelsen på filen din, %1$s, overstiger maks tillatt størrelse for tjeneren din, som er %2$s."],"People":["Folk"],"Activities":["Aktiviteter"],"Travel":["Reise"],"Objects":["Objekter"],"Animals and nature":["Dyr og natur"],"Food and drink":["Mat og drikke"],"Symbols":["Symboler"],"Flags":["Flagg"],"Stickers":["Klistremerker"],"This groupchat is not anonymous":["Denne gruppesludringen er ikke anonym"],"This groupchat now shows unavailable members":["Denne gruppesludringen viser nå utilgjengelige medlemmer"],"This groupchat does not show unavailable members":["Denne gruppesludringen viser ikke utilgjengelige medlemmer"],"The groupchat configuration has changed":["Dette gruppesludringsoppsettet har blitt endret"],"Groupchat logging is now enabled":["Gruppesludringslogging er nå påslått"],"Groupchat logging is now disabled":["Gruppesludringslogging er nå avskrudd"],"This groupchat is now no longer anonymous":["Denne gruppesludringen er ikke lenger anonym"],"This groupchat is now semi-anonymous":["Denne gruppesludringen er nå semi-anonym"],"This groupchat is now fully-anonymous":["Denne gruppesludringen er nå helt anonym"],"A new groupchat has been created":["En ny gruppesludring har blitt opprettet"],"Your nickname has been automatically set to %1$s":["Ditt kallenavn har blitt automatisk endret til %1$s"],"Your nickname has been changed to %1$s":["Ditt kallenavn har blitt endret til %1$s"],"You have been banned from this groupchat":["Du har blitt utestengt fra denne gruppesludringen"],"You have been kicked from this groupchat":["Du ble kastet ut av denne gruppesludringen"],"You have been removed from this groupchat because of an affiliation change":["Du har blitt fjernet fra denne gruppesludringen som følge av en tilknytningsendring"],"You have been removed from this groupchat because the service hosting it is being shut down":["Du har blitt fjernet fra denne gruppesludringen fordi tjeneren som huser den blir slått av"],"Your message was not delivered because you weren\'t allowed to send it.":["Meldingen din ble ikke levert fordi du ikke tillates å sende den."],"Your message was not delivered because you\'re not present in the groupchat.":["Meldingen din ble ikke levert fordi du ikke er i gruppesludringen."],"You\'re not allowed to register yourself in this groupchat.":["Du tillates ikke å registrere deg selv i denne gruppesludringen."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Du tillates ikke å registrere deg i dette rommet fordi det er forbeholdt medlemmer."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan ikke registrere kallenavnet ditt i denne gruppesludringen, siden den ikke støtter det."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan ikke registrere kallenavnet ditt i denne gruppesludringen, ugydlig dataskjema innsendt."],"%1$s has been banned by %2$s":["%1$s har blitt utestengt %2$s"],"%1$s has been banned":["%1$s  har blitt utestengt"],"%1$s\'s nickname has changed":["%1$s sitt kallenavn er endret"],"%1$s has been kicked out by %2$s":["%1$s ble kastet ut %2$s"],"%1$s has been kicked out":["%1$s  ble kastet ut"],"%1$s has been removed because of an affiliation change":["%1$s har blitt fjernet på grunn av en tilknytningsendring"],"%1$s has been removed for not being a member":["%1$s har blitt fjernet på grunn av at vedkommende ikke er medlem"],"%1$s is no longer an admin of this groupchat":["%1$s er ikke lenger en administrator for gruppesludringen"],"%1$s is no longer an owner of this groupchat":["%1$s eier ikke lenger dette rommet"],"%1$s is no longer banned from this groupchat":["%1$s er ikke lenger bannlyst fra denne gruppesludringen"],"%1$s is no longer a member of this groupchat":["%1$s er ikke lenger medlem av denne gruppesludringen"],"%1$s is now a member of this groupchat":["%1$s er nå medlem av denne gruppesludringen"],"%1$s is now an %2$s of this groupchat":["%1$s er nå %2$s i dette rommet"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Kallenavnet du valgte er reservert eller i bruk for tiden, velg noe annet."],"Password incorrect":["Feil passord"],"You are not on the member list of this groupchat.":["Du er ikke på medlemslisten til denne gruppesludringen."],"You have been banned from this groupchat.":["Du har blitt utestengt fra denne gruppesludringen."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Kallenavnet ditt overholder ikke rommets regler."],"This groupchat does not (yet) exist.":["Denne gruppesludringen finnes ikke enda."],"This groupchat has reached its maximum number of participants.":["Denne gruppesludringen har nådd maksimalt antall brukere."],"Remote server not found":["Tjeneren annensteds hen ble ikke funnet"],"%1$s has invited you to join a groupchat: %2$s":["%1$s har invitert deg til å ta del i en gruppesludring: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s har invitert deg til å ta del i rommet: %2$s, etterlot følgende forklaring: \\"%3$s\\""],"Error":["Feil"],"Sorry, something went wrong while trying to save your bookmark.":["Noe gikk galt under lagring av ditt bokmerke."],"Timeout Error":["Tidsavbruddsfeil"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Tjeneren kom ikke med bokmerkene innen tidsfristen. Du kan gjeninnlaste siden for å forespørre dem igjen."],"My contacts":["Mine Kontakter"],"Pending contacts":["Kontakter som venter på godkjenning"],"Contact requests":["Kontaktforespørsler"],"Ungrouped":["Ugrupperte"],"New messages":["Nye meldinger"],"Sorry, there was an error while trying to add %1$s as a contact.":["En feil inntraff under tillegg av %1$s som kontakt."],"This client does not allow presence subscriptions":["Denne klienten tillater ikke tilstedeværelsesabonnementer"],"Click to hide these contacts":["Klikk for å skjule disse kontaktene"],"Unbookmark this groupchat":["Fjern bokmerkning av denne gruppesludringen"],"Click to open this groupchat":["Klikk for å åpne denne gruppesludringen"],"Click to toggle the bookmarks list":["Klikk for å veksle visning av bokmerkelisten"],"Bookmarks":["Bokmerker"],"Bookmark this groupchat":["Bokmerk denne gruppesludringen"],"Would you like this groupchat to be automatically joined upon startup?":["Ønsker du å automatisk ta del i denne gruppesludringen ved oppstart?"],"The name for this bookmark:":["Bokmerkets navn:"],"What should your nickname for this groupchat be?":["Hva lags kallenavn ønsker du for denne gruppesludringen?"],"Save":["Lagre"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Er du sikker på at du ønsker å fjerne bokmerket \\"%1$s\\"?"],"Unbookmark":["Fjern bokmerke"],"Bookmark":["Legg til bokmerke"],"Close":["Lukk"],"OK":["OK"],"Image: ":["Bilde: "],"Edit":["Rediger"],"Retract":["Trekk tilbake"],"Message versions":["Meldingsversjoner"],"Retry":["Prøv igjen"],"Uploading file:":["Laster opp fil:"],"%1$s has removed this message":["%1$s har fjernet denne meldingen"],"This message has been edited":["Denne meldingen har blitt endret"],"Show more":["Vis mer"],"No message history available.":["Ingen meldingshistorikk tilgjengelig."],"Search":["Søk"],"Insert emojis":["Sett inn smilefjes"],"Send the message":["Send meldingen"],"Start a call":["Start en samtale"],"Choose a file to send":["Velg en fil å sende"],"The User\'s Profile Image":["Brukerens profilbilde"],"Trusted":["Betrodd"],"Untrusted":["Ubetrodd"],"OMEMO Fingerprints":["OMEMO-fingeravtrykk"],"XMPP Address":["XMPP-adresse"],"Email":["E-post"],"Full Name":["Fullt navn"],"Nickname":["Kallenavn"],"Refresh":["Gjenoppfrisk"],"Role":["Rolle"],"URL":["Nettadresse"],"%1$s is typing":["%1$s skriver"],"%1$s has gone away":["%1$s har blitt borte"],"Remove messages":["Fjern meldinger"],"Write in the third person":["Skriv i tredjeperson"],"Show this menu":["Viser denne menyen"],"Hidden message":["Skjult melding"],"Message":["Melding"],"Optional hint":["Valgfritt hint"],"You have unread messages":["Du har uleste meldinger"],"Details":["Detaljer"],"Close and end this conversation":["Lukk og avslutt denne samtalen"],"Sorry, the connection has been lost, and your message could not be sent":["Forbindelsen gikk tapt, og meldingen din kunne ikke sendes"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Ha i minnet at andre XMPP/Jabber-klienter (og tjenere) kanskje ikke støtter tilbaketrekkinger enda, og at meldingen derfor ikke blir fjernet overalt."],"Confirm":["Bekreft"],"You have an unsent message which will be lost if you continue. Are you sure?":["Du har en usendt melding som vil gå tapt hvis du fortsetter. Er du sikker?"],"Are you sure you want to clear the messages from this conversation?":["Er du sikker på at du vil fjerne meldingene fra denne samtalen?"],"%1$s has gone offline":["%1$s har logget av"],"%1$s is busy":["%1$s er opptatt"],"%1$s is online":["%1$s er pålogget"],"Are you sure you want to remove this contact?":["Er du sikker på at du vil fjerne denne kontakten?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Feil under fjerning av %1$s som kontakt."],"This is a trusted device":["Dette er en betrodd enhet"],"Create an account":["Opprett en konto"],"Don\'t have a chat account?":["Har du ikke en sludrekonto?"],"Log in":["Logg inn"],"Disconnected":["Frakoblet"],"Click here to log in anonymously":["Klikk her for å logge inn anonymt"],"Username":["Brukernavn"],"user@domain":["bruker@domene"],"Please enter a valid XMPP address":["Skriv inn et gydlig XMPP-brukernavn"],"Chat Contacts":["Sludrekontakter"],"Toggle chat":["Endre chatten"],"Click to restore this chat":["Klikk for å gjenopprette denne samtalen"],"Minimized":["Minimert"],"This user is a moderator.":["Denne brukeren er moderator."],"Owner":["Eier"],"Admin":["Administrator"],"Member":["Medlem"],"Moderator":["Moderator"],"Visitor":["Besøkende"],"Click to mention %1$s in your message.":["Klikk for å nevne %1$s i meldingen din."],"Participants":["Deltagere"],"This field is required":["Påkrevd felt"],"Join":["Ta del"],"name@conference.example.org":["navn@konferanse.eksempel.no"],"Groupchat name":["Gruppesludringsnavn"],"Groupchat address":["Gruppesludringsadresse"],"Invite":["Invitér"],"Server address":["Tjeneradresse"],"Show more information on this groupchat":["Vis mer info om denne gruppesludringen"],"Query for Groupchats":["Spør for rom"],"Description:":["Beskrivelse:"],"Groupchat Address (JID):":["Gruppesludringsadresse (JID):"],"Participants:":["Deltagere:"],"Features:":["Egenskaper:"],"Requires authentication":["Krever Godkjenning"],"Hidden":["Skjult"],"Requires an invitation":["Krever en invitasjon"],"Moderated":["Moderert"],"Non-anonymous":["Ikke-Anonym"],"Permanent":["Permanent"],"Public":["Alle"],"Semi-anonymous":["Semi-anonymt"],"Temporary":["Midlertidig"],"Unmoderated":["Umoderert"],"conference.example.org":["konferanse@eksempel.no"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatorer er priviligerte brukere, som kan endre andre brukeres roller (unntatt de med admin- eller eier-tilknytninger."],"The default role, implies that you can read and write messages.":["Forvalgt rolle impliserer at du kan lese og skrive meldinger."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Besøkere tillates ikke å skrive meldinger i en moderert flerbrukersludring."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["«Eier» er høyeste tilknytning. Eiere kan andre brukeres roller og tilknytninger."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["«Admin» er nest høyeste tilknytning. Administratorer kan endre andre brukeres tilknytninger, unntatt eiere."],"Change role":["Endre rolle"],"New Role":["Ny rolle"],"Reason":["Begrunnelse"],"New affiliation":["Ny tilknytning"],"Affiliation":["Tilknytning"],"Moderator Tools":["Moderatorverktøy"],"No users with that affiliation found.":["Fant ingen brukere med den tilknytningen."],"Type here to filter the search results":["Skriv her for å filtrere søkeresultatene"],"Show users":["Vis brukere"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Roller tildeles brukere for å innvilge eller nekte bruk av gitte egenskaper i en flerbrukersludring. De tildeles enten eksplisitt, eller implisitt som del av tilknytningen. En rolle som ikke er en tilknytning varer kun ut brukerøkta."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["En tilknytning er en langtlevende påskjønning som typisk impliserer en gitt rolle, og innvilger privilegier og ansvar. For eksempel har administratorer og eiere automatisk moderatorrollen."],"Affiliation changed":["Tilknytning endret"],"Topic":["Emne"],"Topic author":["Emnestarter"],"Groupchat address (JID)":["Romadresse (JID)"],"Message archiving":["Meldingsarkivering"],"Messages are archived on the server":["Meldinger arkiveres på tjeneren"],"Description":["Beskrivelse"],"Features":["Funksjoner"],"Members only":["Kun for medlemmer"],"Participants entering this groupchat need to request permission to write":["Deltagere som tar del i denne gruppesludringen må forespørre skrivetilgang"],"No password required":["Inget passord kreves"],"Not anonymous":["Ikke-anonym"],"Participants entering this groupchat can write right away":["Deltagere som tar del i denne gruppesludringen kan skrive umiddelbart"],"Online users":["Påloggede brukere"],"Password protected":["Passordbeskyttet"],"Persistent":["Vedvarende"],"Groupchat info for %1$s":["Gruppeslduringsinfo for %1$s"],"You\'re not allowed to send messages in this room":["Du tillates ikke å sende meldinger i dette rommet."],"The conversation has moved. Click below to enter.":["Samtalen har flyttet. Ta del i den ved å klikke nedenfor."],"This groupchat no longer exists":["Denne gruppesludringen finnes ikke lenger."],"Enter groupchat":["Ta del i gruppesludringen"],"Please choose your nickname":["Endre kallenavnet ditt"],"Password: ":["Passord: "],"Submit":["Send"],"%1$s is now a moderator":["%1$s er nå moderator"],"%1$s has been given a voice":["%1$s har blitt gitt stemme."],"%1$s has been muted":["%1$s har blitt forstummet"],"%1$s and %2$s":["%1$s og %2$s"],"%1$s have left the groupchat":["%1$s har forlatt gruppesludringen"],"Change user\'s affiliation to admin":["Endre brukerens tilknytning til administrator"],"Ban user by changing their affiliation to outcast":["Bannlys bruker ved å endre deres tilhørighet til fredløs"],"Write in 3rd person":["Skriv i tredjeperson"],"Grant membership to a user":["Skjenk medlemskap til en bruker"],"Opens up the moderator tools GUI":["Åpner grafisk grensesnitt for moderatorverktøy"],"Remove user\'s ability to post messages":["Fjern brukerens muligheter til å skrive meldinger"],"Change your nickname":["Endre ditt kallenavn"],"Grant moderator role to user":["Tildel moderatorrolle til bruker"],"Revoke the user\'s current affiliation":["Tilbakekall brukerens nåværende tilhørighet"],"Set groupchat subject":["Sett gruppesludringsemne"],"Allow muted user to post messages":["Tillat stumme brukere å skrive meldinger"],"Sorry, you\'re not allowed to retract this message":["Du tillates ikke å trekke tilbake denne meldingen"],"Sorry, you\'re not allowed to retract this message.":["Du tillates ikke å trekke tilbake denne meldingen."],"Invite someone to join this groupchat":["Inviter noen til å ta del i denne gruppesludringen"],"Show topic":["Vis emne"],"Hide topic":["Skjul emne"],"Destroy":["Ødelegg"],"Leave":["Forlat"],"Are you sure you want to leave this groupchat?":["Er du sikker på at ønsker å forlate denne gruppesludringen?"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Feil: \\"%1$s\\"-kommandoen tar to argumenter, brukerens kallenavn og alternativt en grunn."],"name@example.org":["navn@eksempel.no"],"Optional XMPP address for a new groupchat that replaces this one":["Valgfri XMPP-adresse for en ny gruppesludring som erstatter denne"],"Error: invalid number of arguments":["Feil: Ugyldig antall argumenter"],"This action was done by %1$s.":["Handlingen ble utført av %1$s."],"The reason given is: \\"%1$s\\".":["Oppgitt årsak er: \\"%1$s\\"."],"Groupchats":["Gruppeslduringer"],"Add a new groupchat":["Legg til ny gruppesludring"],"Query for groupchats":["Spørring for gruppesludringer"],"Sorry, an error occurred while trying to submit the config form.":["En feil skjedde ved forsøk på å sende inn oppsettsskjemaet."],"Close these announcements":["Lukk disse kunngjøringene"],"Announcements":["Kunngjøringer"],"Click to open this server message":["Klikk for å åpne denne tjenermeldingen"],"Notification from %1$s":["Merknad fra %1$s"],"%1$s says":["%1$s sier"],"has gone offline":["har logget av"],"has gone away":["har blitt borte"],"is busy":["er opptatt"],"has come online":["har logget på"],"wants to be your contact":["ønsker å bli kontaktfestet"],"Hide":["Skjul"],"Execute":["Kjør"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Noen XMPP-tjenester og instanser tillater priviligerte brukere å kjøre ad-hoc-kommandoer i dem."],"List available commands":["List opp tilgjengelige kommandoer"],"Sorry, an error occurred while looking for commands on that entity.":["Klarte ikke å se etter kommandoer på denne identiteten."],"About":["Om"],"Commands":["Kommandoer"],"%1$s Translate %2$s it into your own language":["%1$sOversett%2$s det til ditt eget språk"],"Log out":["Logg Av"],"Click to change your chat status":["Klikk for å endre din meldingsstatus"],"Show details about this chat client":["Vis flere detaljer om denne sludreklienten"],"Your avatar image":["Ditt avatarbilde"],"Checkbox for selecting the following fingerprint":["Avkryssningsboks for valg av følgende fingeravtrykk"],"Device without a fingerprint":["Enhet uten fingeravtrykk"],"Checkbox to select fingerprints of all other OMEMO devices":["Utkryssningsboks for å velge fingeravtrykkene for alle andre OMEMO-enheter"],"Remove checked devices and close":["Fjern avkryssede enheter og lukk"],"This device\'s OMEMO fingerprint":["Denne enhetens OMEMO-fingeravtrykk"],"Generate new keys and fingerprint":["Generer nye nøkler og fingeravtrykk"],"Your Profile":["Din profil"],"XMPP Address (JID)":["XMPP-adresse (JID)"],"Save and close":["Lagre og lukk"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Bruk komma for å inndele flere roller. Dine roller vieses ved siden av navnet ditt i sludremeldingene dine."],"OMEMO":["OMEMO"],"Profile":["Profil"],"You can check your browser\'s developer console for any error output.":["Du kan sjekke din nettlesers utviklerkonsoll for feil-utdata."],"Away":["Borte"],"Busy":["Opptatt"],"Custom status":["Personlig status"],"Offline":["Avlogget"],"Online":["Pålogget"],"Personal status message":["Personlig statusmelding"],"I am %1$s":["Jeg er %1$s"],"Are you sure you want to log out?":["Er du sikker på at du vil logge ut?"],"online":["pålogget"],"busy":["opptatt"],"away for long":["borte lenge"],"away":["borte"],"offline":["avlogget"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Kunne ikke dekryptere mottatt OMEMO-melding som følge av feil."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s ser ikke ut til å være en klient som støtter OMEMO. Krypter sludring vil ikke lenger være mulig i denne gruppesludringen."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan ikke bruke ende-til-ende -kryptering, fordi %1$s bruker en klient som ikke støtter OMEMO."],"Messages are being sent in plaintext":["Meldinger blir sendt i klartekst"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Denne gruppesludringen må være kun for medlemmer, og ikke anonym for å støtte OMEMO-krypterte meldinger"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Kunne ikke sende kryptert melding fordi %1$s krever at du må abonnere på deres tilstedeværelse for å kunne se deres OMEMO-info."],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Kunne ikke sende kryptert melding fordi fjerntjeneren for %1$s ikke ble funnet."],"Unable to send an encrypted message due to an unexpected error.":["Kunne ikke sende kryptert melding som følge av feil."],"Sorry, an error occurred while trying to remove the devices.":["En feil skjedde ved forsøk på å fjerne enhetene."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dette er en OMEMO-kryptert melding som din klient ikke ser ut til å støtte. Mer info er å finne på https://conversations.im/omemo"]," e.g. conversejs.org":[" f.eks. conversejs.org"],"Fetch registration form":["Hent registreringsskjema"],"Tip: A list of public XMPP providers is available":["Tips: En liste med offentlige XMPP-tilbydere er tilgjengelig"],"here":["her"],"Sorry, we\'re unable to connect to your chosen provider.":["Kunne ikke koble til din valgte tilbyder."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Beklager, den valgte tilbyderen støtter ikke kontoregistrering i utvekslingsnettet. Prøv igjen med en annen tilbyder."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Noe gikk galt under etablering av forbindelse til \\"%1$s\\". Er du sikker på at det eksisterer?"],"Now logging you in":["Logger deg inn"],"Registered successfully":["Registrering var vellykket"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Tilbyderen avviste ditt registreringsforsøk. Sjekk verdiene du skrev inn."],"Leave this groupchat":["Forlat denne gruppesludringen"],"Click to toggle the list of open groupchats":["Klikk for å veksle visning av åpne rom"],"Open Groupchats":["Åpne gruppesludringer"],"Add":["Legg Til"],"This contact is busy":["Denne kontakten er opptatt"],"This contact is online":["Kontakten er pålogget"],"This contact is offline":["Kontakten er avlogget"],"This contact is unavailable":["Kontakten er utilgjengelig"],"This contact is away for an extended period":["Kontakten er borte for en lengre periode"],"This contact is away":["Kontakten er borte"],"Contact name":["Kontaktnavn"],"Optional nickname":["Valgfritt kallenavn"],"Sorry, could not find a contact with that name":["Fant ingen slik kontakt"],"This contact has already been added":["Denne kontakten har allerede blitt lagt til"],"Filter":["Filter"],"Filter by group name":["Filtrer etter gruppenavn"],"Filter by status":["Filtrer etter status"],"Any":["Enhver"],"Unread":["Ulest"],"Chatty":["Pratsom"],"Extended Away":["Utvidet lediggang"],"Click to remove %1$s as a contact":["Klikk for å fjerne %1$s som kontakt"],"Click to accept the contact request from %1$s":["Klikk for å godta denne kontaktforespørselen fra %1$s"],"Click to decline the contact request from %1$s":["Klikk for å avslå denne kontaktforespørselen fra %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Klikk for å sludre med %1$s (XMPP adresse: %2$s)"],"Are you sure you want to decline this contact request?":["Er du sikker på at du vil avslå denne kontaktforespørselen?"],"Contacts":["Kontakter"],"Add a contact":["Legg til en Kontakt"],"Re-sync your contacts":["Synkroniser dine kontakter igjen"]}}}')}}]);
 //# sourceMappingURL=nb-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/nl-LC_MESSAGES-converse-po.js b/src/conversejs/locales/nl-LC_MESSAGES-converse-po.js
index e6d193799bc33c067584eaf50156d186ac85e5fb..94150b7e6c5903b778f9a1ad89039bd5dcfc8ada 100644
--- a/src/conversejs/locales/nl-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/nl-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[163],{441:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nl"},"Create your account":["Maak je account aan"],"Please enter the XMPP provider to register with:":["Voer de XMPP-host in waarje je bij wilt registreren:"],"Already have a chat account?":["Heb je al een account?"],"Log in here":["Log hier in"],"Account Registration:":["Accountregistratie:"],"Register":["Registreren"],"Choose a different provider":["Kies een andere provider"],"Hold tight, we\'re fetching the registration form…":["Even geduld, we halen het registratieformulier op…"],"Cancel":["Annuleren"],"The connection has dropped, attempting to reconnect.":["De verbinding is verbroken, poging tot opnieuw verbinden."],"An error occurred while connecting to the chat server.":["Er trad een fout op bij het verbinden met de gespreksserver."],"Your XMPP address and/or password is incorrect. Please try again.":["Je XMPP adres is onjuist. Probeer het opnieuw."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sorry, we konden geen verbinding maken met deze XMPP-host: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["De XMPP-server bood geen ondersteund authenticatiemechanisme aan"],"Undecryptable OMEMO message":["Onontsleutelbaar OMEMO-bericht"],"Sorry, could not determine upload URL.":["Sorry, kon de upload-URL niet bepalen."],"Sorry, could not determine file upload URL.":["Sorry, kon de bestandsupload-URL niet bepalen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sorry, kon het bestand niet uploaden. De server geeft het volgende aan: ‘%1$s’"],"Sorry, could not succesfully upload your file.":["Sorry, kon het bestand niet uploaden."],"You\'re not allowed to retract your message.":[""],"Sorry, looks like file upload is not supported by your server.":["Sorry, het uploaden van bestanden wordt niet ondersteund door je server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["De grootte van het bestand, %1$s, overschrijdt  %2$s, het maximum toegestaan door je server."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Dit groepsgesprek is niet anoniem"],"This groupchat now shows unavailable members":["Dit groepsgesprek toont nu niet-beschikbare leden"],"This groupchat does not show unavailable members":["Dit groepsgesprek toont geen niet-beschikbare leden"],"The groupchat configuration has changed":["De configuratie van het groepsgesprek is gewijzigd"],"This groupchat is now no longer anonymous":["Dit groepsgesprek is niet langer anoniem"],"This groupchat is now semi-anonymous":["Dit groepsgesprek is nu semi-anoniem"],"This groupchat is now fully-anonymous":["Dit groepsgesprek is nu volledig anoniem"],"A new groupchat has been created":["Een nieuw groepsgesprek is aangemaakt"],"Your nickname has been automatically set to %1$s":["Je bijnaam is automatisch ingesteld op %1$s"],"Your nickname has been changed to %1$s":["Je bijnaam is gewijzigd naar %1$s"],"You have been banned from this groupchat":["Je bent verbannen uit dit groepsgesprek"],"You have been kicked from this groupchat":["Je bent uit dit groepsgesprek geschopt"],"You have been removed from this groupchat because of an affiliation change":["Je bent uit dit groepsgesprek verwijderd wegens een wijziging in lidmaatschap"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Je bent verwijderd uit dit groepsgesprek omdat het nu enkel toegankelijk is voor leden, en je geen lid bent"],"You have been removed from this groupchat because the service hosting it is being shut down":["Je zit niet langer in het groepsgesprek omdat de server van het groepsgesprek uitgeschakeld wordt"],"Your message was not delivered because you\'re not present in the groupchat.":["Je bericht werd niet afgeleverd omdat je niet aanwezig bent in dit groepsgesprek."],"You\'re not allowed to register yourself in this groupchat.":["Je hebt geen toestemming om jezelf in dit groepsgesprek te registreren."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Je hebt geen toestemming om jezelf in dit groepsgesprek te registreren, omdat het enkel toegankelijk is voor leden."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan je bijnaam niet registreren voor dit groepsgesprek omdat dit niet ondersteund wordt."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan je bijnaam voor dit groepsgesprek niet registreren, ongeldige data ingevoerd."],"Topic set by %1$s":["Onderwerp ingesteld door %1$s"],"Topic cleared by %1$s":["Onderwerp gewist door %1$s"],"%1$s has been banned":["%1$s is verbannen"],"%1$s\'s nickname has changed":["De bijnaam van %1$s is gewijzigd"],"%1$s has been kicked out":["%1$s is weggeschopt"],"%1$s has been removed because of an affiliation change":["%1$s is verwijderd wegens een wijziging in lidmaatschap"],"%1$s has been removed for not being a member":["%1$s is verwijderd wegens geen lid te zijn"],"%1$s is no longer an admin of this groupchat":["%1$s is niet langer beheerder van dit groepsgesprek"],"%1$s is no longer an owner of this groupchat":["%1$s is niet langer eigenaar van dit groepsgesprek"],"%1$s is no longer banned from this groupchat":["%1$s is niet langer verbannen uit dit groepsgesprek"],"%1$s is no longer a member of this groupchat":["%1$s is niet langer lid van dit groepsgesprek"],"%1$s is now a member of this groupchat":["%1$s is nu lid van dit groepsgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nu %2$s van dit groepsgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["De bijnaam die je hebt gekozen is gereserveerd of momenteel in gebruik, kies er een andere."],"Password incorrect":["Onjuist wachtwoord"],"You are not on the member list of this groupchat.":["Je staat niet op de deelnemerslijst van dit groepsgesprek."],"You have been banned from this groupchat.":["Je bent verbannen uit dit groepsgesprek."],"You are not allowed to create new groupchats.":["Je hebt geen toestemming om nieuwe groepsgesprekken aan te maken."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Je bijnaam stemt niet overeen met het beleid van dit groepsgesprek."],"This groupchat does not (yet) exist.":["Dit groepsgesprek bestaat (nog) niet."],"This groupchat has reached its maximum number of participants.":["Dit groepsgesprek heeft het maximale aantal gebruikers bereikt."],"Remote server not found":["Server niet gevonden"],"The explanation given is: \\"%1$s\\".":["De opgegeven reden is: ‘%1$s’."],"%1$s has invited you to join a groupchat: %2$s":["%1$s heeft je uitgenodigd aan het groepsgesprek „%2$s” deel te nemen"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s heeft je uitgenodigd om deel te nemen aan het groepsgesprek ‘%2$s’ met de volgende reden: ‘%3$s’"],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Sorry, er ging iets mis bij het opslaan van je bladwijzer."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Mijn contacten"],"Pending contacts":["Contacten in afwachting"],"Contact requests":["Contactverzoeken"],"Ungrouped":["Ongegroepeerd"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sorry, er trad een fout op bij het toevoegen van %1$s als contact."],"This client does not allow presence subscriptions":["Deze cliënt biedt geen ondersteuning voor aanwezigheidsabonnementen"],"Click to hide these contacts":["Klik om deze contacten te verbergen"],"Unbookmark this groupchat":["Bladwijzer voor dit groepsgesprek verwijderen"],"Click to open this groupchat":["Klik om dit groepsgesprek te openen"],"Click to toggle the bookmarks list":["Klik om de lijst met bladwijzers te tonen/verbergen"],"Bookmarks":["Bladwijzers"],"Bookmark this groupchat":["Groepsgesprek toevoegen aan bladwijzers"],"Would you like this groupchat to be automatically joined upon startup?":["Wil je bij opstarten automatisch deelnemen aan dit groepsgesprek?"],"The name for this bookmark:":["De naam voor deze bladwijzer:"],"What should your nickname for this groupchat be?":["Welke bijnaam wil je voor dit groepsgesprek?"],"Save":["Opslaan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Weet je zeker dat je de bladwijzer ‘%1$s’ wil verwijderen?"],"Close":["Sluiten"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Audiobestand ‘%1$s’ downloaden"],"Download file \\"%1$s\\"":["Bestand ‘%1$s’ downloaden"],"Edit":[""],"Retract":[""],"Message versions":["Berichtversies"],"Retry":[""],"Uploading file:":["Bestand uploaden:"],"This message has been edited":["Dit bericht is bewerkt"],"Show more":["Meer tonen"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Voeg smiley’s in"],"Start a call":["Plaats een oproep"],"Message characters remaining":["Resterende berichttekens"],"Choose a file to send":["Kies een bestand om te verzenden"],"Click to write as a normal (non-spoiler) message":["Klik hier om een gewoon (niet-verborgen) bericht te schrijven"],"Click to write your message as a spoiler":["Klik hier om een verborgen bericht te schrijven"],"The User\'s Profile Image":["Profielafbeelding van gebruiker"],"Trusted":["Vertrouwd"],"Untrusted":["Onvertrouwd"],"OMEMO Fingerprints":["OMEMO-vingerafdrukken"],"Remove as contact":["Contact verwijderen"],"XMPP Address":["XMPP-adres"],"Email":["E-mail"],"Full Name":["Volledige naam"],"Nickname":["Bijnaam"],"Refresh":["Verversen"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s is aan het typen"],"%1$s has stopped typing":["%1$s is opgehouden met typen"],"%1$s has gone away":["%1$s is afwezig"],"Remove messages":["Berichten verwijderen"],"Write in the third person":["Schrijf in de derde persoon"],"Show this menu":["Toon dit menu"],"Hidden message":["Verborgen bericht"],"Message":["Bericht"],"Optional hint":["Facultatieve tip"],"You have unread messages":["Je hebt ongelezen berichten"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["Je hebt een onverzonden bericht dat verloren zal gaan als je verder gaat. Ben je zeker?"],"Are you sure you want to clear the messages from this conversation?":["Weet je zeker dat je de berichten in dit gesprek wil wissen?"],"%1$s has gone offline":["%1$s is offline"],"%1$s is busy":["%1$s is bezet"],"%1$s is online":["%1$s is online"],"Sorry, something went wrong while trying to refresh":["Sorry, er ging iets mis bij het verversen"],"Are you sure you want to remove this contact?":["Weet je zeker dat je dit contact wil verwijderen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sorry, er trad een fout op bij het verwijderen van %1$s als contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Om prestaties te verbeteren slaan we je data op in de cache van de browser. Vink dit niet aan indien je op een openbare computer bent of indien je wilt dat je data verwijderd wordt bij het uitloggen. Het is van belang dat je zelf expliciet uitlogt, anders kan het zijn dat er data in de cache achterblijft. Let op, als je een niet-vertrouwd apparaat gebruikt is OMEMO-versleuteling NIET mogelijk."],"This is a trusted device":["Dit is een vertrouwd apparaat"],"Create an account":["Account aanmaken"],"Don\'t have a chat account?":["Heb je geen account?"],"Log in":["Inloggen"],"Disconnected":[""],"Click here to log in anonymously":["Klik hier om anoniem in te loggen"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Voer een geldig XMPP-adres in"],"Chat Contacts":["Gesprekscontacten"],"Toggle chat":["Gesprek openen"],"Click to restore this chat":["Klik om dit gesprek te herstellen"],"Minimized":["Geminimaliseerd"],"This field is required":["Dit veld is verplicht"],"Join":["Deelnemen"],"Enter a new Groupchat":["Deelnemen aan nieuw groepsgesprek"],"name@conference.example.org":["naam@groepsgesprek.voorbeeld.be"],"Groupchat name":["Naam groepsgesprek"],"Groupchat address":["Gespreksadres"],"Invite":["Uitnodigen"],"Show groupchats":["Groepsgesprekken tonen"],"Server address":["Serveradres"],"Show more information on this groupchat":["Toon meer informatie over dit groepsgesprek"],"Query for Groupchats":["Zoeken naar gesprekken"],"Description:":["Beschrijving:"],"Groupchat Address (JID):":["XMPP/Jabber-ID voor dit groepsgesprek:"],"Participants:":["Deelnemers:"],"Features:":["Functies:"],"Requires authentication":["Authenticatie vereist"],"Hidden":["Verborgen"],"Requires an invitation":["Uitnodiging vereist"],"Moderated":["Gemodereerd"],"Non-anonymous":["Niet-anoniem"],"Open":["Open"],"Permanent":["Blijvend"],"Public":["Openbaar"],"Semi-anonymous":["Semi-anoniem"],"Temporary":["Tijdelijk"],"Unmoderated":["Niet gemodereerd"],"conference.example.org":["groepsgesprek.voorbeeld.be"],"No groupchats found":["Geen groepsgesprekken gevonden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Onderwerp"],"Topic author":["Auteur van het onderwerp"],"Groupchat address (JID)":["XMPP/Jabber-ID van groepsgesprek"],"Message archiving":["Berichtarchivering"],"Messages are archived on the server":["Berichten worden gearchiveerd op de server"],"Description":["Beschrijving"],"Features":["Eigenschappen"],"This groupchat is not publicly searchable":["Dit groepsgesprek is niet openbaar vindbaar"],"This groupchat is restricted to members only":["Dit groepsgesprek is enkel toegankelijk voor leden"],"Members only":["Alleen-leden"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan dit groepsgesprek hebben toestemming nodig voor ze berichten kunnen sturen"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Dit groepsgesprek vereist geen wachtwoord voor toegang"],"No password required":["Geen wachtwoord nodig"],"Not anonymous":["Niet-anoniem"],"All other groupchat participants can see your XMPP address":["Alle gebruikers in dit groepsgesprek kunnen je XMPP-adres zien"],"Not moderated":["Niet gemodereerd"],"Participants entering this groupchat can write right away":["Deelnemers aan dit groepsgesprek kunnen onmiddelijk berichten sturen"],"Online users":["Gebruikers online"],"Anyone can join this groupchat":["Iedereen kan deelnemen aan dit gesprek"],"This groupchat requires a password before entry":["Dit groepsgesprek vereist een wachtwoord voor toegang"],"Password protected":["Beveiligd met wachtwoord"],"Persistent":["Blijvend"],"This groupchat persists even if it\'s unoccupied":["Dit groepsgesprek blijft bestaan, zelfs als er niemand aanwezig is"],"Only moderators can see your XMPP address":["Enkel moderatoren kunnen je XMPP-adres zien"],"This groupchat will disappear once the last person leaves":["Dit groepsgesprek zal verdwijnen van zodra de laatste deelnemer het verlaat"],"This groupchat is publicly searchable":["Dit groepsgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Info over groepsgesprek %1$s"],"You\'re not allowed to send messages in this room":["Je hebt geen toestemming om berichten te verzenden in deze gespreksruimte"],"The conversation has moved. Click below to enter.":["Het gesprek is verplaatst. Klik hieronder om deel te nemen."],"This groupchat no longer exists":["Dit groepsgesprek bestaat niet meer"],"Enter groupchat":["Deelnemen aan groepsgesprek"],"Please choose your nickname":["Kies je bijnaam"],"This groupchat requires a password":["Dit groepsgesprek vereist een wachtwoord"],"Password: ":["Wachtwoord: "],"Submit":["Indienen"],"This user is a moderator.":["Deze gebruiker is een moderator."],"This user can send messages in this groupchat.":["Deze gebruiker kan berichten sturen in dit groepsgesprek."],"This user can NOT send messages in this groupchat.":["Deze gebruiker kan GEEN berichten sturen in dit groepsgesprek."],"Owner":["Eigenaar"],"Admin":["Beheerder"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Bezoeker"],"Click to mention %1$s in your message.":["Klik om %1$s in je bericht te vermelden."],"Participants":["Deelnemers"],"%1$s has entered the groupchat":["%1$s neemt deel aan het groepsgesprek"],"%1$s has left the groupchat":["%1$s heeft het groepsgesprek verlaten"],"%1$s is now a moderator":["%1$s is nu een moderator"],"%1$s is no longer a moderator":["%1$s is geen moderator meer"],"%1$s has been given a voice":["%1$s heeft een stem gekregen"],"%1$s has been muted":["%1$s is gedempt"],"Change user\'s affiliation to admin":["Lidmaatschap van gebruiker wijzigen naar beheerder"],"Ban user by changing their affiliation to outcast":["Gebruiker verbannen door diens affiliatie te veranderen naar verstoteling"],"Clear the chat area":["Gespreksruimte leegmaken"],"Change user role to participant":["Rol van gebruiker wijzigen naar deelnemer"],"Remove this groupchat":["Dit groepsgesprek verwijderen"],"Kick user from groupchat":["Gebruiker uit groepsgesprek schoppen"],"Write in 3rd person":["Schrijf in de derde persoon"],"Grant membership to a user":["Verleen lidmaatschap aan een gebruiker"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Mogelijkheid van gebruiker om berichten te schrijven verwijderen"],"Change your nickname":["Wijzig je bijnaam"],"Grant moderator role to user":["Rol van gebruiker wijzigen naar moderator"],"Grant ownership of this groupchat":["Eigendom van dit groepsgesprek verlenen"],"Register your nickname":["Je bijnaam registreren"],"Revoke the user\'s current affiliation":["Huidige affiliatie van de gebruiker intrekken"],"Set groupchat subject":["Gespreksonderwerp instellen"],"Set groupchat subject (alias for /subject)":["Gespreksonderwerp instellen (alias voor /subject)"],"Allow muted user to post messages":["Gedempte gebruikers berichten laten schrijven"],"Configure":[""],"Configure this groupchat":["Configureer dit groepsgesprek"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Verberg de deelnemerslijst"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toestemming: je hebt niet de benodigde rol om dit te doen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toestemming: je hebt niet de benodigde affiliatie om dat te doen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: de opdracht ‘%1$s’ aanvaardt twee parameters, de bijnaam van de gebruiker en optioneel een reden."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: geen groepsgespreksdeelnemer gevonden gebaseerd op je argumenten"],"Error: found multiple groupchat participant based on your arguments":["Fout: meerdere groepsgespreksdeelnemers gevonden gebaseerd op je argumenten"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["gebruiker@voorbeeld.be"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Je bijnaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldig aantal argumenten"],"This action was done by %1$s.":["Deze actie is uitgevoerd door %1$s."],"The reason given is: \\"%1$s\\".":["De opgegeven reden is: ‘%1$s’."],"Groupchats":["Groepgesprekken"],"Add a new groupchat":["Nieuw groepsgesprek toevoegen"],"Query for groupchats":["Zoeken naar gesprekken"],"Announcements":[""],"Notification from %1$s":["Melding van %1$s"],"%1$s says":["%1$s zegt"],"has gone offline":["is offline"],"has gone away":["is nu afwezig"],"is busy":["is bezet"],"has come online":["is online"],"wants to be your contact":["wil je contact zijn"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Info"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Vrije %2$s XMPP-chatcliënt gemaakt door %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaal %2$s het in je eigen taal"],"Log out":["Afmelden"],"Click to change your chat status":["Klik hier om je gespreksstatus te wijzigen"],"Show details about this chat client":["Toon meer informatie over deze chatcliënt"],"Your avatar image":["Jouw avatarafbeelding"],"Checkbox for selecting the following fingerprint":["Selectievakje voor het selecteren van de volgende vingerafdruk"],"Device without a fingerprint":["Apparaat zonder vingerafdruk"],"Other OMEMO-enabled devices":["Overige OMEMO-apparaten"],"Checkbox to select fingerprints of all other OMEMO devices":["Selectievakje om vingerafdrukken van alle andere OMEMO-apparaten te selecteren"],"Remove checked devices and close":["Geselecteerde apparaten verwijderen en sluiten"],"Select all":["Alles selecteren"],"This device\'s OMEMO fingerprint":["De OMEMO-vingerafdruk van dit apparaat"],"Generate new keys and fingerprint":["Nieuwe sleutels en vingerafdruk genereren"],"Your Profile":["Je profiel"],"XMPP Address (JID)":["XMPP-adres (JID)"],"Save and close":["Opslaan en sluiten"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruik komma’s om meerdere rollen op te geven. Je rollen worden naast je naam op je chatberichten getoond."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Sorry, er ging iets mis bij het opslaan van je profielgegevens."],"You can check your browser\'s developer console for any error output.":["Je kan de ontwikkelaarsconsole van je browser nakijken voor foutenuitvoer."],"Away":["Afwezig"],"Busy":["Bezet"],"Custom status":["Aangepaste status"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Langdurig afwezig"],"Change chat status":["Gespreksstatus wijzigen"],"Personal status message":["Persoonlijk statusbericht"],"I am %1$s":["Ik ben %1$s"],"Are you sure you want to log out?":["Weet je zeker dat je wil afmelden?"],"online":["online"],"busy":["bezet"],"away for long":["langdurig afwezig"],"away":["afwezig"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sorry, door een fout kon het ontvangen OMEMO-bericht niet worden ontsleuteld."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s lijkt geen gebruik te maken van een cliënt met ondersteuning voor OMEMO. Het zal niet meer mogelijk zijn versleutelde berichten te sturen in dit groepsgesprek."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan geen eind-tot-eind-versleuteling gebruiken omdat %1$s een cliënt gebruikt die geen ondersteuning biedt voor OMEMO."],"Messages are being sent in plaintext":["Berichten worden onversleuteld verzonden"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Er trad een fout op bij het verwijderen van de apparaten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Weet je zeker dat je nieuwe OMEMO-sleutels wil genereren? Dit zal je oude sleutels verwijderen, en alle voorheen versleutelde berichten zullen niet meer ontsleutelbaar zijn op dit apparaat."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Sorry, we kunnen geen versleutelde berichten sturen omdat %1$s vereist dat je geabonneerd bent op zijn/haar aanwezigheid om zijn/haar OMEMO-informatie te bekijken"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sorry, we kunnen geen versleutelde berichten sturen omdat de externe server voor %1$s niet gevonden kon worden"],"Unable to send an encrypted message due to an unexpected error.":["Kan geen versleutelde berichten sturen door een onverwachte fout."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Sorry, geen apparaten gevonden waarnaar we een OMEMO-versleuteld bericht kunnen verzenden."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dit is een OMEMO-versleuteld bericht, wat jouw software niet ondersteunt. Meer informatie op https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Registratieformulier ophalen"],"Tip: A list of public XMPP providers is available":["Tip: er is een lijst met openbare XMPP-leveranciers beschikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Sorry, we konden geen verbinding maken met je gekozen leverancier."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Sorry, de opgegeven leverancier biedt geen ondersteuning voor inbandaccountregistratie. Probeer een andere leverancier."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Er ging iets mis bij het verbinden met ‘%1$s’. Weet je zeker dat het bestaat?"],"Now logging you in":["Bezig met aanmelden"],"Registered successfully":["Geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["De leverancier weigerde je registratieverzoek. Controleer de waarden die je invoerde."],"Leave this groupchat":["Dit groepsgesprek verlaten"],"Click to toggle the list of open groupchats":["Klik om de lijst met open groepsgesprekken te tonen/verbergen"],"Open Groupchats":["Open groepsgesprekken"],"Are you sure you want to leave the groupchat %1$s?":["Weet je zeker dat je het gesprek ‘%1$s’ wil verlaten?"],"Add":["Toevoegen"],"Add a Contact":["Voeg een contact toe"],"This contact is busy":["Dit contact is bezet"],"This contact is online":["Dit contact is online"],"This contact is offline":["Dit contact is offline"],"This contact is unavailable":["Dit contact is niet beschikbaar"],"This contact is away for an extended period":["Dit contact is uitgebreid afwezig"],"This contact is away":["Dit contact is afwezig"],"Contact name":["Contactnaam"],"Optional nickname":["Facultatieve bijnaam"],"Sorry, could not find a contact with that name":["Sorry, kon geen contact vinden met die naam"],"This contact has already been added":["Dit contact werd al toegevoegd"],"Filter":["Filteren"],"Filter by contact name":["Filteren op contactnaam"],"Filter by group name":["Filteren op groepsnaam"],"Filter by status":["Filteren op status"],"Any":["Elke"],"Unread":["Ongelezen"],"Chatty":["Spraakzaam"],"Extended Away":["Uitgebreid afwezig"],"Click to remove %1$s as a contact":["Klik om %1$s als contact te verwijderen"],"Click to accept the contact request from %1$s":["Klik om het contactverzoek van %1$s te aanvaarden"],"Click to decline the contact request from %1$s":["Klik om het contactverzoek van %1$s te weigeren"],"Are you sure you want to decline this contact request?":["Weet je zeker dat je dit contactverzoek wil weigeren?"],"Contacts":["Contacten"],"Add a contact":["Voeg een contact toe"],"Re-sync your contacts":["Hersynchroniseer je contacten"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[163],{529:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nl"},"Create your account":["Maak je account aan"],"Please enter the XMPP provider to register with:":["Voer de XMPP-host in waarje je bij wilt registreren:"],"Already have a chat account?":["Heb je al een account?"],"Log in here":["Log hier in"],"Account Registration:":["Accountregistratie:"],"Register":["Registreren"],"Choose a different provider":["Kies een andere provider"],"Hold tight, we\'re fetching the registration form…":["Even geduld, we halen het registratieformulier op…"],"Cancel":["Annuleren"],"The connection has dropped, attempting to reconnect.":["De verbinding is verbroken, poging tot opnieuw verbinden."],"An error occurred while connecting to the chat server.":["Er trad een fout op bij het verbinden met de gespreksserver."],"Your XMPP address and/or password is incorrect. Please try again.":["Je XMPP adres is onjuist. Probeer het opnieuw."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sorry, we konden geen verbinding maken met deze XMPP-host: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["De XMPP-server bood geen ondersteund authenticatiemechanisme aan"],"Undecryptable OMEMO message":["Onontsleutelbaar OMEMO-bericht"],"Sorry, could not determine upload URL.":["Sorry, kon de upload-URL niet bepalen."],"Sorry, could not determine file upload URL.":["Sorry, kon de bestandsupload-URL niet bepalen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sorry, kon het bestand niet uploaden. De server geeft het volgende aan: ‘%1$s’"],"Sorry, could not succesfully upload your file.":["Sorry, kon het bestand niet uploaden."],"You\'re not allowed to retract your message.":[""],"Sorry, looks like file upload is not supported by your server.":["Sorry, het uploaden van bestanden wordt niet ondersteund door je server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["De grootte van het bestand, %1$s, overschrijdt  %2$s, het maximum toegestaan door je server."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Dit groepsgesprek is niet anoniem"],"This groupchat now shows unavailable members":["Dit groepsgesprek toont nu niet-beschikbare leden"],"This groupchat does not show unavailable members":["Dit groepsgesprek toont geen niet-beschikbare leden"],"The groupchat configuration has changed":["De configuratie van het groepsgesprek is gewijzigd"],"This groupchat is now no longer anonymous":["Dit groepsgesprek is niet langer anoniem"],"This groupchat is now semi-anonymous":["Dit groepsgesprek is nu semi-anoniem"],"This groupchat is now fully-anonymous":["Dit groepsgesprek is nu volledig anoniem"],"A new groupchat has been created":["Een nieuw groepsgesprek is aangemaakt"],"Your nickname has been automatically set to %1$s":["Je bijnaam is automatisch ingesteld op %1$s"],"Your nickname has been changed to %1$s":["Je bijnaam is gewijzigd naar %1$s"],"You have been banned from this groupchat":["Je bent verbannen uit dit groepsgesprek"],"You have been kicked from this groupchat":["Je bent uit dit groepsgesprek geschopt"],"You have been removed from this groupchat because of an affiliation change":["Je bent uit dit groepsgesprek verwijderd wegens een wijziging in lidmaatschap"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Je bent verwijderd uit dit groepsgesprek omdat het nu enkel toegankelijk is voor leden, en je geen lid bent"],"You have been removed from this groupchat because the service hosting it is being shut down":["Je zit niet langer in het groepsgesprek omdat de server van het groepsgesprek uitgeschakeld wordt"],"Your message was not delivered because you\'re not present in the groupchat.":["Je bericht werd niet afgeleverd omdat je niet aanwezig bent in dit groepsgesprek."],"You\'re not allowed to register yourself in this groupchat.":["Je hebt geen toestemming om jezelf in dit groepsgesprek te registreren."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Je hebt geen toestemming om jezelf in dit groepsgesprek te registreren, omdat het enkel toegankelijk is voor leden."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan je bijnaam niet registreren voor dit groepsgesprek omdat dit niet ondersteund wordt."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan je bijnaam voor dit groepsgesprek niet registreren, ongeldige data ingevoerd."],"Topic set by %1$s":["Onderwerp ingesteld door %1$s"],"Topic cleared by %1$s":["Onderwerp gewist door %1$s"],"%1$s has been banned":["%1$s is verbannen"],"%1$s\'s nickname has changed":["De bijnaam van %1$s is gewijzigd"],"%1$s has been kicked out":["%1$s is weggeschopt"],"%1$s has been removed because of an affiliation change":["%1$s is verwijderd wegens een wijziging in lidmaatschap"],"%1$s has been removed for not being a member":["%1$s is verwijderd wegens geen lid te zijn"],"%1$s is no longer an admin of this groupchat":["%1$s is niet langer beheerder van dit groepsgesprek"],"%1$s is no longer an owner of this groupchat":["%1$s is niet langer eigenaar van dit groepsgesprek"],"%1$s is no longer banned from this groupchat":["%1$s is niet langer verbannen uit dit groepsgesprek"],"%1$s is no longer a member of this groupchat":["%1$s is niet langer lid van dit groepsgesprek"],"%1$s is now a member of this groupchat":["%1$s is nu lid van dit groepsgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nu %2$s van dit groepsgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["De bijnaam die je hebt gekozen is gereserveerd of momenteel in gebruik, kies er een andere."],"Password incorrect":["Onjuist wachtwoord"],"You are not on the member list of this groupchat.":["Je staat niet op de deelnemerslijst van dit groepsgesprek."],"You have been banned from this groupchat.":["Je bent verbannen uit dit groepsgesprek."],"You are not allowed to create new groupchats.":["Je hebt geen toestemming om nieuwe groepsgesprekken aan te maken."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Je bijnaam stemt niet overeen met het beleid van dit groepsgesprek."],"This groupchat does not (yet) exist.":["Dit groepsgesprek bestaat (nog) niet."],"This groupchat has reached its maximum number of participants.":["Dit groepsgesprek heeft het maximale aantal gebruikers bereikt."],"Remote server not found":["Server niet gevonden"],"The explanation given is: \\"%1$s\\".":["De opgegeven reden is: ‘%1$s’."],"%1$s has invited you to join a groupchat: %2$s":["%1$s heeft je uitgenodigd aan het groepsgesprek „%2$s” deel te nemen"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s heeft je uitgenodigd om deel te nemen aan het groepsgesprek ‘%2$s’ met de volgende reden: ‘%3$s’"],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Sorry, er ging iets mis bij het opslaan van je bladwijzer."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Mijn contacten"],"Pending contacts":["Contacten in afwachting"],"Contact requests":["Contactverzoeken"],"Ungrouped":["Ongegroepeerd"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sorry, er trad een fout op bij het toevoegen van %1$s als contact."],"This client does not allow presence subscriptions":["Deze cliënt biedt geen ondersteuning voor aanwezigheidsabonnementen"],"Click to hide these contacts":["Klik om deze contacten te verbergen"],"Unbookmark this groupchat":["Bladwijzer voor dit groepsgesprek verwijderen"],"Click to open this groupchat":["Klik om dit groepsgesprek te openen"],"Click to toggle the bookmarks list":["Klik om de lijst met bladwijzers te tonen/verbergen"],"Bookmarks":["Bladwijzers"],"Bookmark this groupchat":["Groepsgesprek toevoegen aan bladwijzers"],"Would you like this groupchat to be automatically joined upon startup?":["Wil je bij opstarten automatisch deelnemen aan dit groepsgesprek?"],"The name for this bookmark:":["De naam voor deze bladwijzer:"],"What should your nickname for this groupchat be?":["Welke bijnaam wil je voor dit groepsgesprek?"],"Save":["Opslaan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Weet je zeker dat je de bladwijzer ‘%1$s’ wil verwijderen?"],"Close":["Sluiten"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Audiobestand ‘%1$s’ downloaden"],"Download file \\"%1$s\\"":["Bestand ‘%1$s’ downloaden"],"Edit":[""],"Retract":[""],"Message versions":["Berichtversies"],"Retry":[""],"Uploading file:":["Bestand uploaden:"],"This message has been edited":["Dit bericht is bewerkt"],"Show more":["Meer tonen"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Voeg smiley’s in"],"Start a call":["Plaats een oproep"],"Message characters remaining":["Resterende berichttekens"],"Choose a file to send":["Kies een bestand om te verzenden"],"Click to write as a normal (non-spoiler) message":["Klik hier om een gewoon (niet-verborgen) bericht te schrijven"],"Click to write your message as a spoiler":["Klik hier om een verborgen bericht te schrijven"],"The User\'s Profile Image":["Profielafbeelding van gebruiker"],"Trusted":["Vertrouwd"],"Untrusted":["Onvertrouwd"],"OMEMO Fingerprints":["OMEMO-vingerafdrukken"],"Remove as contact":["Contact verwijderen"],"XMPP Address":["XMPP-adres"],"Email":["E-mail"],"Full Name":["Volledige naam"],"Nickname":["Bijnaam"],"Refresh":["Verversen"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s is aan het typen"],"%1$s has stopped typing":["%1$s is opgehouden met typen"],"%1$s has gone away":["%1$s is afwezig"],"Remove messages":["Berichten verwijderen"],"Write in the third person":["Schrijf in de derde persoon"],"Show this menu":["Toon dit menu"],"Hidden message":["Verborgen bericht"],"Message":["Bericht"],"Optional hint":["Facultatieve tip"],"You have unread messages":["Je hebt ongelezen berichten"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["Je hebt een onverzonden bericht dat verloren zal gaan als je verder gaat. Ben je zeker?"],"Are you sure you want to clear the messages from this conversation?":["Weet je zeker dat je de berichten in dit gesprek wil wissen?"],"%1$s has gone offline":["%1$s is offline"],"%1$s is busy":["%1$s is bezet"],"%1$s is online":["%1$s is online"],"Sorry, something went wrong while trying to refresh":["Sorry, er ging iets mis bij het verversen"],"Are you sure you want to remove this contact?":["Weet je zeker dat je dit contact wil verwijderen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sorry, er trad een fout op bij het verwijderen van %1$s als contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Om prestaties te verbeteren slaan we je data op in de cache van de browser. Vink dit niet aan indien je op een openbare computer bent of indien je wilt dat je data verwijderd wordt bij het uitloggen. Het is van belang dat je zelf expliciet uitlogt, anders kan het zijn dat er data in de cache achterblijft. Let op, als je een niet-vertrouwd apparaat gebruikt is OMEMO-versleuteling NIET mogelijk."],"This is a trusted device":["Dit is een vertrouwd apparaat"],"Create an account":["Account aanmaken"],"Don\'t have a chat account?":["Heb je geen account?"],"Log in":["Inloggen"],"Disconnected":[""],"Click here to log in anonymously":["Klik hier om anoniem in te loggen"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Voer een geldig XMPP-adres in"],"Chat Contacts":["Gesprekscontacten"],"Toggle chat":["Gesprek openen"],"Click to restore this chat":["Klik om dit gesprek te herstellen"],"Minimized":["Geminimaliseerd"],"This user is a moderator.":["Deze gebruiker is een moderator."],"This user can send messages in this groupchat.":["Deze gebruiker kan berichten sturen in dit groepsgesprek."],"This user can NOT send messages in this groupchat.":["Deze gebruiker kan GEEN berichten sturen in dit groepsgesprek."],"Owner":["Eigenaar"],"Admin":["Beheerder"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Bezoeker"],"Click to mention %1$s in your message.":["Klik om %1$s in je bericht te vermelden."],"Participants":["Deelnemers"],"This field is required":["Dit veld is verplicht"],"Join":["Deelnemen"],"Enter a new Groupchat":["Deelnemen aan nieuw groepsgesprek"],"name@conference.example.org":["naam@groepsgesprek.voorbeeld.be"],"Groupchat name":["Naam groepsgesprek"],"Groupchat address":["Gespreksadres"],"Invite":["Uitnodigen"],"Show groupchats":["Groepsgesprekken tonen"],"Server address":["Serveradres"],"Show more information on this groupchat":["Toon meer informatie over dit groepsgesprek"],"Query for Groupchats":["Zoeken naar gesprekken"],"Description:":["Beschrijving:"],"Groupchat Address (JID):":["XMPP/Jabber-ID voor dit groepsgesprek:"],"Participants:":["Deelnemers:"],"Features:":["Functies:"],"Requires authentication":["Authenticatie vereist"],"Hidden":["Verborgen"],"Requires an invitation":["Uitnodiging vereist"],"Moderated":["Gemodereerd"],"Non-anonymous":["Niet-anoniem"],"Open":["Open"],"Permanent":["Blijvend"],"Public":["Openbaar"],"Semi-anonymous":["Semi-anoniem"],"Temporary":["Tijdelijk"],"Unmoderated":["Niet gemodereerd"],"conference.example.org":["groepsgesprek.voorbeeld.be"],"No groupchats found":["Geen groepsgesprekken gevonden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Onderwerp"],"Topic author":["Auteur van het onderwerp"],"Groupchat address (JID)":["XMPP/Jabber-ID van groepsgesprek"],"Message archiving":["Berichtarchivering"],"Messages are archived on the server":["Berichten worden gearchiveerd op de server"],"Description":["Beschrijving"],"Features":["Eigenschappen"],"This groupchat is not publicly searchable":["Dit groepsgesprek is niet openbaar vindbaar"],"This groupchat is restricted to members only":["Dit groepsgesprek is enkel toegankelijk voor leden"],"Members only":["Alleen-leden"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan dit groepsgesprek hebben toestemming nodig voor ze berichten kunnen sturen"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Dit groepsgesprek vereist geen wachtwoord voor toegang"],"No password required":["Geen wachtwoord nodig"],"Not anonymous":["Niet-anoniem"],"All other groupchat participants can see your XMPP address":["Alle gebruikers in dit groepsgesprek kunnen je XMPP-adres zien"],"Not moderated":["Niet gemodereerd"],"Participants entering this groupchat can write right away":["Deelnemers aan dit groepsgesprek kunnen onmiddelijk berichten sturen"],"Online users":["Gebruikers online"],"Anyone can join this groupchat":["Iedereen kan deelnemen aan dit gesprek"],"This groupchat requires a password before entry":["Dit groepsgesprek vereist een wachtwoord voor toegang"],"Password protected":["Beveiligd met wachtwoord"],"Persistent":["Blijvend"],"This groupchat persists even if it\'s unoccupied":["Dit groepsgesprek blijft bestaan, zelfs als er niemand aanwezig is"],"Only moderators can see your XMPP address":["Enkel moderatoren kunnen je XMPP-adres zien"],"This groupchat will disappear once the last person leaves":["Dit groepsgesprek zal verdwijnen van zodra de laatste deelnemer het verlaat"],"This groupchat is publicly searchable":["Dit groepsgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Info over groepsgesprek %1$s"],"You\'re not allowed to send messages in this room":["Je hebt geen toestemming om berichten te verzenden in deze gespreksruimte"],"The conversation has moved. Click below to enter.":["Het gesprek is verplaatst. Klik hieronder om deel te nemen."],"This groupchat no longer exists":["Dit groepsgesprek bestaat niet meer"],"Enter groupchat":["Deelnemen aan groepsgesprek"],"Please choose your nickname":["Kies je bijnaam"],"This groupchat requires a password":["Dit groepsgesprek vereist een wachtwoord"],"Password: ":["Wachtwoord: "],"Submit":["Indienen"],"%1$s has entered the groupchat":["%1$s neemt deel aan het groepsgesprek"],"%1$s has left the groupchat":["%1$s heeft het groepsgesprek verlaten"],"%1$s is now a moderator":["%1$s is nu een moderator"],"%1$s is no longer a moderator":["%1$s is geen moderator meer"],"%1$s has been given a voice":["%1$s heeft een stem gekregen"],"%1$s has been muted":["%1$s is gedempt"],"Change user\'s affiliation to admin":["Lidmaatschap van gebruiker wijzigen naar beheerder"],"Ban user by changing their affiliation to outcast":["Gebruiker verbannen door diens affiliatie te veranderen naar verstoteling"],"Clear the chat area":["Gespreksruimte leegmaken"],"Change user role to participant":["Rol van gebruiker wijzigen naar deelnemer"],"Remove this groupchat":["Dit groepsgesprek verwijderen"],"Kick user from groupchat":["Gebruiker uit groepsgesprek schoppen"],"Write in 3rd person":["Schrijf in de derde persoon"],"Grant membership to a user":["Verleen lidmaatschap aan een gebruiker"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Mogelijkheid van gebruiker om berichten te schrijven verwijderen"],"Change your nickname":["Wijzig je bijnaam"],"Grant moderator role to user":["Rol van gebruiker wijzigen naar moderator"],"Grant ownership of this groupchat":["Eigendom van dit groepsgesprek verlenen"],"Register your nickname":["Je bijnaam registreren"],"Revoke the user\'s current affiliation":["Huidige affiliatie van de gebruiker intrekken"],"Set groupchat subject":["Gespreksonderwerp instellen"],"Set groupchat subject (alias for /subject)":["Gespreksonderwerp instellen (alias voor /subject)"],"Allow muted user to post messages":["Gedempte gebruikers berichten laten schrijven"],"Configure":[""],"Configure this groupchat":["Configureer dit groepsgesprek"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Verberg de deelnemerslijst"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toestemming: je hebt niet de benodigde rol om dit te doen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toestemming: je hebt niet de benodigde affiliatie om dat te doen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: de opdracht ‘%1$s’ aanvaardt twee parameters, de bijnaam van de gebruiker en optioneel een reden."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: geen groepsgespreksdeelnemer gevonden gebaseerd op je argumenten"],"Error: found multiple groupchat participant based on your arguments":["Fout: meerdere groepsgespreksdeelnemers gevonden gebaseerd op je argumenten"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["gebruiker@voorbeeld.be"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Je bijnaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldig aantal argumenten"],"This action was done by %1$s.":["Deze actie is uitgevoerd door %1$s."],"The reason given is: \\"%1$s\\".":["De opgegeven reden is: ‘%1$s’."],"Groupchats":["Groepgesprekken"],"Add a new groupchat":["Nieuw groepsgesprek toevoegen"],"Query for groupchats":["Zoeken naar gesprekken"],"Announcements":[""],"Notification from %1$s":["Melding van %1$s"],"%1$s says":["%1$s zegt"],"has gone offline":["is offline"],"has gone away":["is nu afwezig"],"is busy":["is bezet"],"has come online":["is online"],"wants to be your contact":["wil je contact zijn"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Info"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Vrije %2$s XMPP-chatcliënt gemaakt door %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaal %2$s het in je eigen taal"],"Log out":["Afmelden"],"Click to change your chat status":["Klik hier om je gespreksstatus te wijzigen"],"Show details about this chat client":["Toon meer informatie over deze chatcliënt"],"Your avatar image":["Jouw avatarafbeelding"],"Checkbox for selecting the following fingerprint":["Selectievakje voor het selecteren van de volgende vingerafdruk"],"Device without a fingerprint":["Apparaat zonder vingerafdruk"],"Other OMEMO-enabled devices":["Overige OMEMO-apparaten"],"Checkbox to select fingerprints of all other OMEMO devices":["Selectievakje om vingerafdrukken van alle andere OMEMO-apparaten te selecteren"],"Remove checked devices and close":["Geselecteerde apparaten verwijderen en sluiten"],"Select all":["Alles selecteren"],"This device\'s OMEMO fingerprint":["De OMEMO-vingerafdruk van dit apparaat"],"Generate new keys and fingerprint":["Nieuwe sleutels en vingerafdruk genereren"],"Your Profile":["Je profiel"],"XMPP Address (JID)":["XMPP-adres (JID)"],"Save and close":["Opslaan en sluiten"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruik komma’s om meerdere rollen op te geven. Je rollen worden naast je naam op je chatberichten getoond."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Sorry, er ging iets mis bij het opslaan van je profielgegevens."],"You can check your browser\'s developer console for any error output.":["Je kan de ontwikkelaarsconsole van je browser nakijken voor foutenuitvoer."],"Away":["Afwezig"],"Busy":["Bezet"],"Custom status":["Aangepaste status"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Langdurig afwezig"],"Change chat status":["Gespreksstatus wijzigen"],"Personal status message":["Persoonlijk statusbericht"],"I am %1$s":["Ik ben %1$s"],"Are you sure you want to log out?":["Weet je zeker dat je wil afmelden?"],"online":["online"],"busy":["bezet"],"away for long":["langdurig afwezig"],"away":["afwezig"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sorry, door een fout kon het ontvangen OMEMO-bericht niet worden ontsleuteld."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s lijkt geen gebruik te maken van een cliënt met ondersteuning voor OMEMO. Het zal niet meer mogelijk zijn versleutelde berichten te sturen in dit groepsgesprek."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan geen eind-tot-eind-versleuteling gebruiken omdat %1$s een cliënt gebruikt die geen ondersteuning biedt voor OMEMO."],"Messages are being sent in plaintext":["Berichten worden onversleuteld verzonden"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Sorry, we kunnen geen versleutelde berichten sturen omdat %1$s vereist dat je geabonneerd bent op zijn/haar aanwezigheid om zijn/haar OMEMO-informatie te bekijken"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sorry, we kunnen geen versleutelde berichten sturen omdat de externe server voor %1$s niet gevonden kon worden"],"Unable to send an encrypted message due to an unexpected error.":["Kan geen versleutelde berichten sturen door een onverwachte fout."],"Sorry, an error occurred while trying to remove the devices.":["Er trad een fout op bij het verwijderen van de apparaten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Weet je zeker dat je nieuwe OMEMO-sleutels wil genereren? Dit zal je oude sleutels verwijderen, en alle voorheen versleutelde berichten zullen niet meer ontsleutelbaar zijn op dit apparaat."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Sorry, geen apparaten gevonden waarnaar we een OMEMO-versleuteld bericht kunnen verzenden."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dit is een OMEMO-versleuteld bericht, wat jouw software niet ondersteunt. Meer informatie op https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Registratieformulier ophalen"],"Tip: A list of public XMPP providers is available":["Tip: er is een lijst met openbare XMPP-leveranciers beschikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Sorry, we konden geen verbinding maken met je gekozen leverancier."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Sorry, de opgegeven leverancier biedt geen ondersteuning voor inbandaccountregistratie. Probeer een andere leverancier."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Er ging iets mis bij het verbinden met ‘%1$s’. Weet je zeker dat het bestaat?"],"Now logging you in":["Bezig met aanmelden"],"Registered successfully":["Geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["De leverancier weigerde je registratieverzoek. Controleer de waarden die je invoerde."],"Leave this groupchat":["Dit groepsgesprek verlaten"],"Click to toggle the list of open groupchats":["Klik om de lijst met open groepsgesprekken te tonen/verbergen"],"Open Groupchats":["Open groepsgesprekken"],"Are you sure you want to leave the groupchat %1$s?":["Weet je zeker dat je het gesprek ‘%1$s’ wil verlaten?"],"Add":["Toevoegen"],"Add a Contact":["Voeg een contact toe"],"This contact is busy":["Dit contact is bezet"],"This contact is online":["Dit contact is online"],"This contact is offline":["Dit contact is offline"],"This contact is unavailable":["Dit contact is niet beschikbaar"],"This contact is away for an extended period":["Dit contact is uitgebreid afwezig"],"This contact is away":["Dit contact is afwezig"],"Contact name":["Contactnaam"],"Optional nickname":["Facultatieve bijnaam"],"Sorry, could not find a contact with that name":["Sorry, kon geen contact vinden met die naam"],"This contact has already been added":["Dit contact werd al toegevoegd"],"Filter":["Filteren"],"Filter by contact name":["Filteren op contactnaam"],"Filter by group name":["Filteren op groepsnaam"],"Filter by status":["Filteren op status"],"Any":["Elke"],"Unread":["Ongelezen"],"Chatty":["Spraakzaam"],"Extended Away":["Uitgebreid afwezig"],"Click to remove %1$s as a contact":["Klik om %1$s als contact te verwijderen"],"Click to accept the contact request from %1$s":["Klik om het contactverzoek van %1$s te aanvaarden"],"Click to decline the contact request from %1$s":["Klik om het contactverzoek van %1$s te weigeren"],"Are you sure you want to decline this contact request?":["Weet je zeker dat je dit contactverzoek wil weigeren?"],"Contacts":["Contacten"],"Add a contact":["Voeg een contact toe"],"Re-sync your contacts":["Hersynchroniseer je contacten"]}}}')}}]);
 //# sourceMappingURL=nl-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/nl_BE-LC_MESSAGES-converse-po.js b/src/conversejs/locales/nl_BE-LC_MESSAGES-converse-po.js
index 83c5b9ae6f0a8336b84ef621fe6e1fc614a40330..faeda2c7c9fcc13cd024558d4a3669eff97e771b 100644
--- a/src/conversejs/locales/nl_BE-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/nl_BE-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[164],{442:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nl_BE"},"Create your account":["Maakt uwen account aan"],"Please enter the XMPP provider to register with:":["Voerd den XMPP-leverancier in waarbij da’ g’u wild registreren:"],"Already have a chat account?":["Hebd’ al nen account?"],"Log in here":["Meld u hier aan"],"Account Registration:":["Accountregistratie:"],"Register":["Registreren"],"Choose a different provider":["Kiesd nen andere leverancier"],"Hold tight, we\'re fetching the registration form…":["Efkens geduld, w’halen het registratieformulier op…"],"Cancel":["Annuleren"],"The connection has dropped, attempting to reconnect.":["De verbinding is verbroken, poging tot opnieuw verbinden."],"An error occurred while connecting to the chat server.":["Der trad een fout op bij het verbinden me’ de gespreksserver."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sorry, we konden geen verbinding maken me’ dezen XMPP-host: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Den XMPP-server bood geen ondersteund authenticatiemechanisme aan"],"Sorry, could not determine upload URL.":["Sorry, kon den upload-URL nie bepalen."],"Sorry, could not determine file upload URL.":["Sorry, kon den bestandsupload-URL nie bepalen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sorry, kon het bestand niet uploaden. De server geeft het volgende aan: ‘%1$s’"],"Sorry, could not succesfully upload your file.":["Sorry, kon het bestand nie uploaden."],"Sorry, looks like file upload is not supported by your server.":["Sorry, bestandsupload word nie ondersteund door uwe server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["De grootte van het bestand, %1$s, overschrijd het maximum toegelaten door uwe server, %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Dit groepsgesprek is nie anoniem"],"This groupchat now shows unavailable members":["Dit groepsgesprek toond nu nie-beschikbare leden"],"This groupchat does not show unavailable members":["Dit groepsgesprek toond geen nie-beschikbare leden"],"The groupchat configuration has changed":["De configuratie van het groepsgesprek is gewijzigd"],"This groupchat is now no longer anonymous":["Dit groepsgesprek is nie meer anoniem"],"This groupchat is now semi-anonymous":["Dit groepsgesprek is nu semi-anoniem"],"This groupchat is now fully-anonymous":["Dit groepsgesprek is nu volledig anoniem"],"A new groupchat has been created":["Een nieuw groepsgesprek is aangemaakt"],"Your nickname has been automatically set to %1$s":["Uwen bijnaam is automatisch ingesteld op %1$s"],"Your nickname has been changed to %1$s":["Uwen bijnaam is gewijzigd naar %1$s"],"You have been banned from this groupchat":["Ge zijt uit dit groepsgesprek verbannen"],"You have been kicked from this groupchat":["Ge zijt uit dit groepsgesprek geschopt"],"You have been removed from this groupchat because of an affiliation change":["Ge zijt uit dit groepsgesprek verwijderd omwille van een wijziging in lidmaatschap"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Ge zijt uit dit groepsgesprek verwijderd omdat het nu enkel toegankelijk is voor leden, en ge geen lid zijt"],"You have been removed from this groupchat because the service hosting it is being shut down":["Ge zijt uit dit groepsgesprek verwijderd omdat de server dervan wordt uitgeschakeld"],"Your message was not delivered because you\'re not present in the groupchat.":["Uw bericht werd niet afgeleverd omda\' ge ni\' aanwezig zijt in het groepsgesprek."],"You\'re not allowed to register yourself in this groupchat.":["Ge hebt geen toelating voor uw eigen in dit groepsgesprek te registreren."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Ge hebt geen toelating voor uw eigen in dit groepsgesprek te registreren, omdat het enkel toegankelijk is voor leden."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan uwen bijnaam niet registreren in dit groepsgesprek met dat het geen ondersteuning biedt voor registratie."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan uwen bijnaam niet registreren in dit groepsgesprek, ongeldige gegevens ingevoerd."],"Topic set by %1$s":["Onderwerp ingesteld door %1$s"],"Topic cleared by %1$s":["Onderwerp gewist door %1$s"],"%1$s has been banned":["%1$s is verbannen"],"%1$s\'s nickname has changed":["Den bijnaam van %1$s is gewijzigd"],"%1$s has been kicked out":["%1$s is weggeschopt"],"%1$s has been removed because of an affiliation change":["%1$s is verwijderd omwille van een wijziging in lidmaatschap"],"%1$s has been removed for not being a member":["%1$s is verwijderd omwille van geen lid te zijn"],"%1$s is no longer an admin of this groupchat":["%1$s is ge(n)en beheerder meer van dit groepsgesprek"],"%1$s is no longer an owner of this groupchat":["%1$s is ge(n)en eigenaar meer van dit groepsgesprek"],"%1$s is no longer banned from this groupchat":["%1$s is niet meer verbannen uit dit groepsgesprek"],"%1$s is no longer a member of this groupchat":["%1$s is geen lid meer van dit groepsgesprek"],"%1$s is now a member of this groupchat":["%1$s is nu lid van dit groepsgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nu %2$s van dit groepsgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Den bijnaam die ge gekozen hebd is gereserveerd of momenteel in gebruik, kiesd der nen anderen."],"Password incorrect":["Verkeerd wachtwoord"],"You are not on the member list of this groupchat.":["Ge staat niet op den deelnemerslijst van dit groepsgesprek."],"You have been banned from this groupchat.":["Ge zijt uit dit groepsgesprek verbannen."],"You are not allowed to create new groupchats.":["Ge hebt geen toelating voor nieuwe groepsgesprekken aan te maken."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Uwen bijnaam stemt niet overeen met het beleid van dit groepsgesprek."],"This groupchat does not (yet) exist.":["Dit groepsgesprek bestaat (nog) niet."],"This groupchat has reached its maximum number of participants.":["Dit groepsgesprek heeft het maximaal aantal gebruikers bereikt."],"Remote server not found":["Server niet gevonden"],"The explanation given is: \\"%1$s\\".":["D’opgegeven reden is: ‘%1$s’."],"%1$s has invited you to join a groupchat: %2$s":["%1$s heeft u uitgenodigd in het groepsgesprek ‘%2$s’"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s heeft u uitgenodigd in het groepsgesprek ‘%2$s’ en gaf volgende reden: “%3$s”"],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Sorry, der ging iets mis bij het opslaan van uwen bladwijzer."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Mijn contacten"],"Pending contacts":["Contacten in afwachting"],"Contact requests":["Contactverzoeken"],"Ungrouped":["Ongegroepeerd"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sorry, der trad een fout op bij het toevoegen van %1$s als contact."],"This client does not allow presence subscriptions":["Deze cliënt bied geen ondersteuning voor aanwezigheidsabonnementen"],"Click to hide these contacts":["Klikt voor deze contacten te verbergen"],"Unbookmark this groupchat":["Bladwijzer voor dit gesprek verwijderen"],"Click to open this groupchat":["Klikt voor dit groepsgesprek t’openen"],"Click to toggle the bookmarks list":["Klikt voor de lijst met bladwijzers te tonen/verbergen"],"Bookmarks":["Bladwijzers"],"Bookmark this groupchat":["Gesprek toevoegen aan bladwijzers"],"Would you like this groupchat to be automatically joined upon startup?":["Wild g’automatisch deelnemen aan dit groepsgesprek bij opstarten?"],"The name for this bookmark:":["De naam voor dezen bladwijzer:"],"What should your nickname for this groupchat be?":["Wa moet uwen bijnaam in dit groepsgesprek zijn?"],"Save":["Opslaan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Zij’ ge zeker da’ ge den bladwijzer ‘%1$s’ wild verwijderen?"],"Close":["Sluiten"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Audiobestand ‘%1$s’ downloaden"],"Download file \\"%1$s\\"":["Bestand ‘%1$s’ downloaden"],"Edit":[""],"Retract":[""],"Message versions":["Berichtversies"],"Retry":[""],"Uploading file:":["Bestand uploaden:"],"This message has been edited":["Dit bericht is bewerkt"],"Show more":["Meer tonen"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Voegd smiley’s in"],"Start a call":["Plaatst nen oproep"],"Message characters remaining":["Resterende berichttekens"],"Choose a file to send":["Kiesd een bestand voor te verzenden"],"Click to write as a normal (non-spoiler) message":["Klikt hier voor een gewoon (nie’-verborgen) bericht te schrijven"],"Click to write your message as a spoiler":["Klikt hier voor een verborgen bericht te schrijven"],"The User\'s Profile Image":["Profielafbeelding van gebruiker"],"Trusted":["Vertrouwd"],"Untrusted":["Onvertrouwd"],"OMEMO Fingerprints":["OMEMO-vingerafdrukken"],"Remove as contact":["Contact verwijderen"],"XMPP Address":["XMPP-adres"],"Email":["E-mail"],"Full Name":["Volledige naam"],"Nickname":["Bijnaam"],"Refresh":["Vernieuwen"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s is aan ’t typen"],"%1$s has stopped typing":["%1$s is gestopt met typen"],"%1$s has gone away":["%1$s is afwezig"],"Remove messages":["Berichten verwijderen"],"Write in the third person":["Schrijfd in den derde persoon"],"Show this menu":["Toond dit menu"],"Hidden message":["Verborgen bericht"],"Message":["Bericht"],"Optional hint":["Facultatieven tip"],"You have unread messages":["Ge hebd ongelezen berichten"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["Ge hebt een onverzonden bericht da\' verloren zal gaan als ge verder ga. Zijde zeker?"],"Are you sure you want to clear the messages from this conversation?":["Zij’ ge zeker da’ ge de berichten in dit gesprek wild wissen?"],"%1$s has gone offline":["%1$s is offline"],"%1$s is busy":["%1$s is bezet"],"%1$s is online":["%1$s is online"],"Sorry, something went wrong while trying to refresh":["Sorry, der ging iets mis bij het verversen"],"Are you sure you want to remove this contact?":["Zij’ ge zeker da’ ge dit contact wild verwijderen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sorry, der trad een fout op bij het verwijderen van %1$s als contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Voor prestaties te verbeteren slaan we uw gegevens op in het cachegeheugen van van dezen browser. Vinkt dit niet aan als dit een openbare computer is of als ge wilt dat uw gegevens worden verwijderd bij het uiloggen. Het is van belang dat ge zelf expliciet uitlogt, anders kan het zijn dat der gegevens in het cachegeheugen achterblijven. Let op, als ge een niet-vertrouwd apparaat gebruikt is OMEMO-versleuteling NIET mogelijk."],"This is a trusted device":["Dit is een vertrouwd apparaat"],"Create an account":["Account aanmaken"],"Don\'t have a chat account?":["Hebde genen account?"],"Log in":["Inloggen"],"Disconnected":[""],"Click here to log in anonymously":["Klikt hier voor anoniem aan te melden"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Voerd een geldig XMPP-adres in"],"Chat Contacts":["Gesprekscontacten"],"Toggle chat":["Gesprek openen"],"Click to restore this chat":["Klikt voor dit gesprek t’herstellen"],"Minimized":["Geminimaliseerd"],"This field is required":["Dees veld is verplicht"],"Join":["Deelnemen"],"Enter a new Groupchat":["Deelnemen aan nieuw groepsgesprek"],"name@conference.example.org":["naam@groepsgesprek.voorbeeld.be"],"Groupchat name":["Gespreksnaam"],"Groupchat address":["Gespreksadres"],"Invite":["Uitnodigen"],"Show groupchats":["Groepsgesprekken tonen"],"Server address":["Serveradres"],"Show more information on this groupchat":["Toond meer informatie over dit groepsgesprek"],"Query for Groupchats":["Zoeken naar gesprekken"],"Description:":["Beschrijving:"],"Groupchat Address (JID):":["Gespreksadres (JID):"],"Participants:":["Deelnemers:"],"Features:":["Functies:"],"Requires authentication":["Authenticatie vereist"],"Hidden":["Verborgen"],"Requires an invitation":["Uitnodiging vereist"],"Moderated":["Gemodereerd"],"Non-anonymous":["Nie-anoniem"],"Open":["Open"],"Permanent":["Blijvend"],"Public":["Openbaar"],"Semi-anonymous":["Semi-anoniem"],"Temporary":["Tijdelijk"],"Unmoderated":["Nie’ gemodereerd"],"conference.example.org":["groepsgesprek.voorbeeld.be"],"No groupchats found":["Geen groepsgesprekken gevonden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Onderwerp"],"Topic author":["Auteur van het onderwerp"],"Groupchat address (JID)":["Gespreksadres (JID)"],"Message archiving":["Berichtarchivering"],"Messages are archived on the server":["Berichten worden gearchiveerd op de server"],"Description":["Beschrijving"],"Features":["Functies"],"This groupchat is not publicly searchable":["Dit groepsgesprek is niet openbaar vindbaar"],"This groupchat is restricted to members only":["Dit groepsgesprek is enkel toegankelijk voor leden"],"Members only":["Alleen-leden"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan dit groepsgesprek hebben toestemming nodig voordat ze berichten kunnen sturen"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Dit groepsgesprek vereist geen paswoord voor toegang"],"No password required":["Geen paswoord nodig"],"Not anonymous":["Niet-anoniem"],"All other groupchat participants can see your XMPP address":["Alle gebruikers in dit groepsgesprek kunnen uwen XMPP-adres zien"],"Not moderated":["Niet gemodereerd"],"Participants entering this groupchat can write right away":["Deelnemers aan dit groepsgesprek kunnen onmiddellijk berichten sturen"],"Online users":["Gebruikers online"],"Anyone can join this groupchat":["Iedereen kan deelnemen aan dit gesprek"],"This groupchat requires a password before entry":["Dit groepsgesprek vereist een paswoord voor toegang"],"Password protected":["Beveiligd met paswoord"],"Persistent":["Blijvend"],"This groupchat persists even if it\'s unoccupied":["Dit groepsgesprek blijft bestaan, zelfs als der niemand aanwezig is"],"Only moderators can see your XMPP address":["Enkel moderatoren kunnen uwen XMPP-adres zien"],"This groupchat will disappear once the last person leaves":["Dit groepsgesprek zal verdwijnen van zodra dat de laatsten deelnemer het verlaat"],"This groupchat is publicly searchable":["Dit groepsgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Info over groepsgesprek %1$s"],"You\'re not allowed to send messages in this room":["Ge hebt geen toelating om berichten te verzenden in dees groepsgesprek"],"The conversation has moved. Click below to enter.":["Het gesprek is verplaatst. Klikt hieronder voor deel te nemen."],"This groupchat no longer exists":["Dit groepsgesprek bestaat niet meer"],"Enter groupchat":["Deelnemen aan groepsgesprek"],"Please choose your nickname":["Kiesd uwen bijnaam"],"This groupchat requires a password":["Dit groepsgesprek vereist een paswoord"],"Password: ":["Wachtwoord: "],"Submit":["Indienen"],"This user is a moderator.":["Deze gebruiker is ne moderator."],"This user can send messages in this groupchat.":["Deze gebruiker kan berichten sturen in dit groepsgesprek."],"This user can NOT send messages in this groupchat.":["Deze gebruiker kan GEEN berichten sturen in dit groepsgesprek."],"Owner":["Eigenaar"],"Admin":["Beheerder"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Bezoeker"],"Click to mention %1$s in your message.":["Klikt voor %1$s in uw bericht te vermelden."],"Participants":["Deelnemers"],"%1$s has entered the groupchat":["%1$s neemt deel aan het groepsgesprek"],"%1$s has left the groupchat":["%1$s heeft het groepsgesprek verlaten"],"%1$s is now a moderator":["%1$s is nu ne moderator"],"%1$s is no longer a moderator":["%1$s is gene moderator meer"],"%1$s has been given a voice":["%1$s heeft een stem gekregen"],"%1$s has been muted":["%1$s is gedempt"],"Change user\'s affiliation to admin":["Lidmaatschap van gebruiker wijzigen naar beheerder"],"Ban user by changing their affiliation to outcast":["Gebruiker verbannen door diens affiliatie te veranderen naar verschoppeling"],"Clear the chat area":["De gespreksruimte leegmaken"],"Change user role to participant":["Rol van gebruiker wijzigen naar deelnemer"],"Remove this groupchat":["Dit groepsgesprek verwijderen"],"Kick user from groupchat":["Gebruiker uit groepsgesprek schoppen"],"Write in 3rd person":["Schrijfd in den derde persoon"],"Grant membership to a user":["Verleend lidmaatschap aan ne gebruiker"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Mogelijkheid van gebruiker voor berichten te schrijven verwijderen"],"Change your nickname":["Wijzigd uwen bijnaam"],"Grant moderator role to user":["Rol van gebruiker wijzigen naar moderator"],"Grant ownership of this groupchat":["Eigendom van dit groepsgesprek verlenen"],"Register your nickname":["Uwen bijnaam registreren"],"Revoke the user\'s current affiliation":["De affiliatie van de gebruiker intrekken"],"Set groupchat subject":["Gespreksonderwerp instellen"],"Set groupchat subject (alias for /subject)":["Gespreksonderwerp instellen (alias voor /subject)"],"Allow muted user to post messages":["Gedempte gebruikers berichten laten schrijven"],"Configure":[""],"Configure this groupchat":["Configureerd dit groepsgesprek"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Verbergt den deelnemerslijst"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toelating: ge hebt niet de benodigde rol voor dit te doen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toelating: ge hebt niet de benodigde affiliatie voor dit te doen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: den opdracht ‘%1$s’ aanvaard twee parameters, den bijnaam van de gebruiker en optioneel een reden."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: kan geen gespreksdeelnemer niet vinden gebaseerd op uw argumenten"],"Error: found multiple groupchat participant based on your arguments":["Fout: meerdere groepsgespreksdeelnemers gevonden gebaseerd op uw argumenten"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["gebruiker@voorbeeld.be"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Uwen bijnaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldig aantal argumenten"],"This action was done by %1$s.":["Deze actie is uitgevoerd door %1$s."],"The reason given is: \\"%1$s\\".":["D’opgegeven reden is: ‘%1$s’."],"Groupchats":["Groepgesprekken"],"Add a new groupchat":["Nieuw groepsgesprek toevoegen"],"Query for groupchats":["Zoeken naar gesprekken"],"Announcements":[""],"Notification from %1$s":["Melding van %1$s"],"%1$s says":["%1$s zegd"],"has gone offline":["is offline"],"has gone away":["is afwezig"],"is busy":["is bezet"],"has come online":["is online"],"wants to be your contact":["wild uw contact zijn"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Info"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Vrije %2$s XMPP-chatcliënt gemaakt door %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaalt %2$s het in uw eigen taal"],"Log out":["Afmelden"],"Click to change your chat status":["Klikt hier voor uw gespreksstatus te wijzigen"],"Show details about this chat client":["Toont meer informatie over dezen chatcliënt"],"Your avatar image":["Uw avatarafbeelding"],"Checkbox for selecting the following fingerprint":["Selectievakske voor het selecteren van de volgende vingerafdruk"],"Device without a fingerprint":["Apparaat zonder vingerafdruk"],"Other OMEMO-enabled devices":["Overige OMEMO-apparaten"],"Checkbox to select fingerprints of all other OMEMO devices":["Selectievakske voor vingerafdrukken van alle andere OMEMO-apparaten te selecteren"],"Remove checked devices and close":["Geselecteerde apparaten verwijderen en sluiten"],"Select all":["Alles selecteren"],"This device\'s OMEMO fingerprint":["De OMEMO-vingerafdruk van dit apparaat"],"Generate new keys and fingerprint":["Nieuwe sleutels en vingerafdruk genereren"],"Your Profile":["Uw profiel"],"XMPP Address (JID)":["XMPP-adres (JID)"],"Save and close":["Opslaan en sluiten"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruikt komma’s voor meerdere rollen op te geven. Uw rollen worden naast uwe naam op uw berichten weergegeven."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Sorry, der is een fout opgetreden bij het opslaan van uw profielgegevens."],"You can check your browser\'s developer console for any error output.":["Ge kunt de ontwikkelaarsconsole van uwen browser nakijken voor foutenuitvoer."],"Away":["Afwezig"],"Busy":["Bezet"],"Custom status":["Aangepaste status"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Langdurig afwezig"],"Change chat status":["Gespreksstatus wijzigen"],"Personal status message":["Persoonlijk statusbericht"],"I am %1$s":["Ik ben %1$s"],"Are you sure you want to log out?":["Zij’ ge zeker da’ g’u wild afmelden?"],"online":["online"],"busy":["bezet"],"away for long":["langdurig afwezig"],"away":["afwezig"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sorry, door en fout kon het ontvangen OMEMO-bericht niet ontsleuteld worden."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s lijkt geen gebruik te maken van ne cliënt met ondersteuning voor OMEMO. Het gaat niet meer mogelijk zijn van versleutelde berichten te sturen in dit groepsgesprek."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan geen eind-tot-eind-versleuteling gebruiken omdat %1$s ne cliënt gebruikt die dat geen ondersteuning biedt voor OMEMO."],"Messages are being sent in plaintext":["Berichten worden onversleuteld verzonden"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Der is een fout opgetreden bij het verwijderen van de apparaten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Zijt ge zeker dat ge nieuwe OMEMO-sleutels wilt genereren? Dit gaat uw oude sleutels verwijderen, en alle voorheen versleutelde berichten gaan niet meer ontsleutelbaar zijn op dit apparaat."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Sorry, we kunnen geen versleutelde berichten sturen omdat %1$s vereist dat ge geabonneerd zijt op zijn/haar aanwezigheid voor zijn/haar OMEMO-informatie te bekijken"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sorry, we kunnen geen versleutelde berichten sturen omdat den externe server voor %1$s niet kon gevonden worden"],"Unable to send an encrypted message due to an unexpected error.":["Kan geen versleutelde berichten sturen door een onverwachte fout."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Sorry, geen apparaten gevonden naarwaar we een OMEMO-versleuteld bericht kunnen verzenden."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dit is een OMEMO-versleuteld bericht, wat dat uwe cliënt niet ondersteunt. Meer informatie op https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Registratieformulier ophalen"],"Tip: A list of public XMPP providers is available":["Tip: der is ne lijst met openbare XMPP-leveranciers beschikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Sorry, we konden geen verbinding maken met uwe gekozen leverancier."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Sorry, den opgegeven leverancier bied geen ondersteuning voor inbandaccountregistratie. Probeerd nen andere leverancier."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Der ging iets mis bij het verbinden met ‘%1$s’. Zij’ ge zeker dat het bestaat?"],"Now logging you in":["Bezig met aanmelden"],"Registered successfully":["Geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["De leverancier weigerde uw registratieverzoek. Controleerd de waarden die g’invoerde."],"Leave this groupchat":["Dit gesprek verlaten"],"Click to toggle the list of open groupchats":["Klikt voor de lijst me’ groepsgesprekken te tonen/verbergen"],"Open Groupchats":["Open groepsgesprekken"],"Are you sure you want to leave the groupchat %1$s?":["Zijt ge zeker dat ge het gesprek ‘%1$s’ wilt verlaten?"],"Add":["Toevoegen"],"Add a Contact":["Voeg een contact toe"],"This contact is busy":["Dit contact is bezet"],"This contact is online":["Dit contact is online"],"This contact is offline":["Dit contact is offline"],"This contact is unavailable":["Dit contact is nie beschikbaar"],"This contact is away for an extended period":["Dit contact is uitgebreid afwezig"],"This contact is away":["Dit contact is afwezig"],"Contact name":["Contactnaam"],"Optional nickname":["Facultatieven bijnaam"],"Sorry, could not find a contact with that name":["Sorry, kon geen contact vinden met die naam"],"This contact has already been added":["Dees contact werd al toegevoegd"],"Filter":["Filteren"],"Filter by contact name":["Filteren op contactnaam"],"Filter by group name":["Filteren op groepsnaam"],"Filter by status":["Filteren op status"],"Any":["Elke"],"Unread":["Ongelezen"],"Chatty":["Spraakzaam"],"Extended Away":["Uitgebreid afwezig"],"Click to remove %1$s as a contact":["Klikt voor %1$s als contact te verwijderen"],"Click to accept the contact request from %1$s":["Klikt voor het contactverzoek van %1$s t’aanvaarden"],"Click to decline the contact request from %1$s":["Klikt voor het contactverzoek van %1$s te weigeren"],"Are you sure you want to decline this contact request?":["Zij’ ge zeker da’ ge dit contactverzoek wild weigeren?"],"Contacts":["Contacten"],"Add a contact":["Voeg een contact toe"],"Re-sync your contacts":["Hersynchroniseert uw contacten"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[164],{530:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"nl_BE"},"Create your account":["Maakt uwen account aan"],"Please enter the XMPP provider to register with:":["Voerd den XMPP-leverancier in waarbij da’ g’u wild registreren:"],"Already have a chat account?":["Hebd’ al nen account?"],"Log in here":["Meld u hier aan"],"Account Registration:":["Accountregistratie:"],"Register":["Registreren"],"Choose a different provider":["Kiesd nen andere leverancier"],"Hold tight, we\'re fetching the registration form…":["Efkens geduld, w’halen het registratieformulier op…"],"Cancel":["Annuleren"],"The connection has dropped, attempting to reconnect.":["De verbinding is verbroken, poging tot opnieuw verbinden."],"An error occurred while connecting to the chat server.":["Der trad een fout op bij het verbinden me’ de gespreksserver."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Sorry, we konden geen verbinding maken me’ dezen XMPP-host: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Den XMPP-server bood geen ondersteund authenticatiemechanisme aan"],"Sorry, could not determine upload URL.":["Sorry, kon den upload-URL nie bepalen."],"Sorry, could not determine file upload URL.":["Sorry, kon den bestandsupload-URL nie bepalen."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Sorry, kon het bestand niet uploaden. De server geeft het volgende aan: ‘%1$s’"],"Sorry, could not succesfully upload your file.":["Sorry, kon het bestand nie uploaden."],"Sorry, looks like file upload is not supported by your server.":["Sorry, bestandsupload word nie ondersteund door uwe server."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["De grootte van het bestand, %1$s, overschrijd het maximum toegelaten door uwe server, %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Dit groepsgesprek is nie anoniem"],"This groupchat now shows unavailable members":["Dit groepsgesprek toond nu nie-beschikbare leden"],"This groupchat does not show unavailable members":["Dit groepsgesprek toond geen nie-beschikbare leden"],"The groupchat configuration has changed":["De configuratie van het groepsgesprek is gewijzigd"],"This groupchat is now no longer anonymous":["Dit groepsgesprek is nie meer anoniem"],"This groupchat is now semi-anonymous":["Dit groepsgesprek is nu semi-anoniem"],"This groupchat is now fully-anonymous":["Dit groepsgesprek is nu volledig anoniem"],"A new groupchat has been created":["Een nieuw groepsgesprek is aangemaakt"],"Your nickname has been automatically set to %1$s":["Uwen bijnaam is automatisch ingesteld op %1$s"],"Your nickname has been changed to %1$s":["Uwen bijnaam is gewijzigd naar %1$s"],"You have been banned from this groupchat":["Ge zijt uit dit groepsgesprek verbannen"],"You have been kicked from this groupchat":["Ge zijt uit dit groepsgesprek geschopt"],"You have been removed from this groupchat because of an affiliation change":["Ge zijt uit dit groepsgesprek verwijderd omwille van een wijziging in lidmaatschap"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Ge zijt uit dit groepsgesprek verwijderd omdat het nu enkel toegankelijk is voor leden, en ge geen lid zijt"],"You have been removed from this groupchat because the service hosting it is being shut down":["Ge zijt uit dit groepsgesprek verwijderd omdat de server dervan wordt uitgeschakeld"],"Your message was not delivered because you\'re not present in the groupchat.":["Uw bericht werd niet afgeleverd omda\' ge ni\' aanwezig zijt in het groepsgesprek."],"You\'re not allowed to register yourself in this groupchat.":["Ge hebt geen toelating voor uw eigen in dit groepsgesprek te registreren."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Ge hebt geen toelating voor uw eigen in dit groepsgesprek te registreren, omdat het enkel toegankelijk is voor leden."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Kan uwen bijnaam niet registreren in dit groepsgesprek met dat het geen ondersteuning biedt voor registratie."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Kan uwen bijnaam niet registreren in dit groepsgesprek, ongeldige gegevens ingevoerd."],"Topic set by %1$s":["Onderwerp ingesteld door %1$s"],"Topic cleared by %1$s":["Onderwerp gewist door %1$s"],"%1$s has been banned":["%1$s is verbannen"],"%1$s\'s nickname has changed":["Den bijnaam van %1$s is gewijzigd"],"%1$s has been kicked out":["%1$s is weggeschopt"],"%1$s has been removed because of an affiliation change":["%1$s is verwijderd omwille van een wijziging in lidmaatschap"],"%1$s has been removed for not being a member":["%1$s is verwijderd omwille van geen lid te zijn"],"%1$s is no longer an admin of this groupchat":["%1$s is ge(n)en beheerder meer van dit groepsgesprek"],"%1$s is no longer an owner of this groupchat":["%1$s is ge(n)en eigenaar meer van dit groepsgesprek"],"%1$s is no longer banned from this groupchat":["%1$s is niet meer verbannen uit dit groepsgesprek"],"%1$s is no longer a member of this groupchat":["%1$s is geen lid meer van dit groepsgesprek"],"%1$s is now a member of this groupchat":["%1$s is nu lid van dit groepsgesprek"],"%1$s is now an %2$s of this groupchat":["%1$s is nu %2$s van dit groepsgesprek"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Den bijnaam die ge gekozen hebd is gereserveerd of momenteel in gebruik, kiesd der nen anderen."],"Password incorrect":["Verkeerd wachtwoord"],"You are not on the member list of this groupchat.":["Ge staat niet op den deelnemerslijst van dit groepsgesprek."],"You have been banned from this groupchat.":["Ge zijt uit dit groepsgesprek verbannen."],"You are not allowed to create new groupchats.":["Ge hebt geen toelating voor nieuwe groepsgesprekken aan te maken."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Uwen bijnaam stemt niet overeen met het beleid van dit groepsgesprek."],"This groupchat does not (yet) exist.":["Dit groepsgesprek bestaat (nog) niet."],"This groupchat has reached its maximum number of participants.":["Dit groepsgesprek heeft het maximaal aantal gebruikers bereikt."],"Remote server not found":["Server niet gevonden"],"The explanation given is: \\"%1$s\\".":["D’opgegeven reden is: ‘%1$s’."],"%1$s has invited you to join a groupchat: %2$s":["%1$s heeft u uitgenodigd in het groepsgesprek ‘%2$s’"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s heeft u uitgenodigd in het groepsgesprek ‘%2$s’ en gaf volgende reden: “%3$s”"],"Error":["Fout"],"Sorry, something went wrong while trying to save your bookmark.":["Sorry, der ging iets mis bij het opslaan van uwen bladwijzer."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Mijn contacten"],"Pending contacts":["Contacten in afwachting"],"Contact requests":["Contactverzoeken"],"Ungrouped":["Ongegroepeerd"],"Sorry, there was an error while trying to add %1$s as a contact.":["Sorry, der trad een fout op bij het toevoegen van %1$s als contact."],"This client does not allow presence subscriptions":["Deze cliënt bied geen ondersteuning voor aanwezigheidsabonnementen"],"Click to hide these contacts":["Klikt voor deze contacten te verbergen"],"Unbookmark this groupchat":["Bladwijzer voor dit gesprek verwijderen"],"Click to open this groupchat":["Klikt voor dit groepsgesprek t’openen"],"Click to toggle the bookmarks list":["Klikt voor de lijst met bladwijzers te tonen/verbergen"],"Bookmarks":["Bladwijzers"],"Bookmark this groupchat":["Gesprek toevoegen aan bladwijzers"],"Would you like this groupchat to be automatically joined upon startup?":["Wild g’automatisch deelnemen aan dit groepsgesprek bij opstarten?"],"The name for this bookmark:":["De naam voor dezen bladwijzer:"],"What should your nickname for this groupchat be?":["Wa moet uwen bijnaam in dit groepsgesprek zijn?"],"Save":["Opslaan"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Zij’ ge zeker da’ ge den bladwijzer ‘%1$s’ wild verwijderen?"],"Close":["Sluiten"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["Audiobestand ‘%1$s’ downloaden"],"Download file \\"%1$s\\"":["Bestand ‘%1$s’ downloaden"],"Edit":[""],"Retract":[""],"Message versions":["Berichtversies"],"Retry":[""],"Uploading file:":["Bestand uploaden:"],"This message has been edited":["Dit bericht is bewerkt"],"Show more":["Meer tonen"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":["Voegd smiley’s in"],"Start a call":["Plaatst nen oproep"],"Message characters remaining":["Resterende berichttekens"],"Choose a file to send":["Kiesd een bestand voor te verzenden"],"Click to write as a normal (non-spoiler) message":["Klikt hier voor een gewoon (nie’-verborgen) bericht te schrijven"],"Click to write your message as a spoiler":["Klikt hier voor een verborgen bericht te schrijven"],"The User\'s Profile Image":["Profielafbeelding van gebruiker"],"Trusted":["Vertrouwd"],"Untrusted":["Onvertrouwd"],"OMEMO Fingerprints":["OMEMO-vingerafdrukken"],"Remove as contact":["Contact verwijderen"],"XMPP Address":["XMPP-adres"],"Email":["E-mail"],"Full Name":["Volledige naam"],"Nickname":["Bijnaam"],"Refresh":["Vernieuwen"],"Role":["Rol"],"URL":["URL"],"%1$s is typing":["%1$s is aan ’t typen"],"%1$s has stopped typing":["%1$s is gestopt met typen"],"%1$s has gone away":["%1$s is afwezig"],"Remove messages":["Berichten verwijderen"],"Write in the third person":["Schrijfd in den derde persoon"],"Show this menu":["Toond dit menu"],"Hidden message":["Verborgen bericht"],"Message":["Bericht"],"Optional hint":["Facultatieven tip"],"You have unread messages":["Ge hebd ongelezen berichten"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["Ge hebt een onverzonden bericht da\' verloren zal gaan als ge verder ga. Zijde zeker?"],"Are you sure you want to clear the messages from this conversation?":["Zij’ ge zeker da’ ge de berichten in dit gesprek wild wissen?"],"%1$s has gone offline":["%1$s is offline"],"%1$s is busy":["%1$s is bezet"],"%1$s is online":["%1$s is online"],"Sorry, something went wrong while trying to refresh":["Sorry, der ging iets mis bij het verversen"],"Are you sure you want to remove this contact?":["Zij’ ge zeker da’ ge dit contact wild verwijderen?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Sorry, der trad een fout op bij het verwijderen van %1$s als contact."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Voor prestaties te verbeteren slaan we uw gegevens op in het cachegeheugen van van dezen browser. Vinkt dit niet aan als dit een openbare computer is of als ge wilt dat uw gegevens worden verwijderd bij het uiloggen. Het is van belang dat ge zelf expliciet uitlogt, anders kan het zijn dat der gegevens in het cachegeheugen achterblijven. Let op, als ge een niet-vertrouwd apparaat gebruikt is OMEMO-versleuteling NIET mogelijk."],"This is a trusted device":["Dit is een vertrouwd apparaat"],"Create an account":["Account aanmaken"],"Don\'t have a chat account?":["Hebde genen account?"],"Log in":["Inloggen"],"Disconnected":[""],"Click here to log in anonymously":["Klikt hier voor anoniem aan te melden"],"Username":["Gebruikersnaam"],"user@domain":["gebruiker@domein"],"Please enter a valid XMPP address":["Voerd een geldig XMPP-adres in"],"Chat Contacts":["Gesprekscontacten"],"Toggle chat":["Gesprek openen"],"Click to restore this chat":["Klikt voor dit gesprek t’herstellen"],"Minimized":["Geminimaliseerd"],"This user is a moderator.":["Deze gebruiker is ne moderator."],"This user can send messages in this groupchat.":["Deze gebruiker kan berichten sturen in dit groepsgesprek."],"This user can NOT send messages in this groupchat.":["Deze gebruiker kan GEEN berichten sturen in dit groepsgesprek."],"Owner":["Eigenaar"],"Admin":["Beheerder"],"Member":["Lid"],"Moderator":["Moderator"],"Visitor":["Bezoeker"],"Click to mention %1$s in your message.":["Klikt voor %1$s in uw bericht te vermelden."],"Participants":["Deelnemers"],"This field is required":["Dees veld is verplicht"],"Join":["Deelnemen"],"Enter a new Groupchat":["Deelnemen aan nieuw groepsgesprek"],"name@conference.example.org":["naam@groepsgesprek.voorbeeld.be"],"Groupchat name":["Gespreksnaam"],"Groupchat address":["Gespreksadres"],"Invite":["Uitnodigen"],"Show groupchats":["Groepsgesprekken tonen"],"Server address":["Serveradres"],"Show more information on this groupchat":["Toond meer informatie over dit groepsgesprek"],"Query for Groupchats":["Zoeken naar gesprekken"],"Description:":["Beschrijving:"],"Groupchat Address (JID):":["Gespreksadres (JID):"],"Participants:":["Deelnemers:"],"Features:":["Functies:"],"Requires authentication":["Authenticatie vereist"],"Hidden":["Verborgen"],"Requires an invitation":["Uitnodiging vereist"],"Moderated":["Gemodereerd"],"Non-anonymous":["Nie-anoniem"],"Open":["Open"],"Permanent":["Blijvend"],"Public":["Openbaar"],"Semi-anonymous":["Semi-anoniem"],"Temporary":["Tijdelijk"],"Unmoderated":["Nie’ gemodereerd"],"conference.example.org":["groepsgesprek.voorbeeld.be"],"No groupchats found":["Geen groepsgesprekken gevonden"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Onderwerp"],"Topic author":["Auteur van het onderwerp"],"Groupchat address (JID)":["Gespreksadres (JID)"],"Message archiving":["Berichtarchivering"],"Messages are archived on the server":["Berichten worden gearchiveerd op de server"],"Description":["Beschrijving"],"Features":["Functies"],"This groupchat is not publicly searchable":["Dit groepsgesprek is niet openbaar vindbaar"],"This groupchat is restricted to members only":["Dit groepsgesprek is enkel toegankelijk voor leden"],"Members only":["Alleen-leden"],"Participants entering this groupchat need to request permission to write":["Deelnemers aan dit groepsgesprek hebben toestemming nodig voordat ze berichten kunnen sturen"],"Name":["Naam"],"This groupchat does not require a password upon entry":["Dit groepsgesprek vereist geen paswoord voor toegang"],"No password required":["Geen paswoord nodig"],"Not anonymous":["Niet-anoniem"],"All other groupchat participants can see your XMPP address":["Alle gebruikers in dit groepsgesprek kunnen uwen XMPP-adres zien"],"Not moderated":["Niet gemodereerd"],"Participants entering this groupchat can write right away":["Deelnemers aan dit groepsgesprek kunnen onmiddellijk berichten sturen"],"Online users":["Gebruikers online"],"Anyone can join this groupchat":["Iedereen kan deelnemen aan dit gesprek"],"This groupchat requires a password before entry":["Dit groepsgesprek vereist een paswoord voor toegang"],"Password protected":["Beveiligd met paswoord"],"Persistent":["Blijvend"],"This groupchat persists even if it\'s unoccupied":["Dit groepsgesprek blijft bestaan, zelfs als der niemand aanwezig is"],"Only moderators can see your XMPP address":["Enkel moderatoren kunnen uwen XMPP-adres zien"],"This groupchat will disappear once the last person leaves":["Dit groepsgesprek zal verdwijnen van zodra dat de laatsten deelnemer het verlaat"],"This groupchat is publicly searchable":["Dit groepsgesprek is openbaar vindbaar"],"Groupchat info for %1$s":["Info over groepsgesprek %1$s"],"You\'re not allowed to send messages in this room":["Ge hebt geen toelating om berichten te verzenden in dees groepsgesprek"],"The conversation has moved. Click below to enter.":["Het gesprek is verplaatst. Klikt hieronder voor deel te nemen."],"This groupchat no longer exists":["Dit groepsgesprek bestaat niet meer"],"Enter groupchat":["Deelnemen aan groepsgesprek"],"Please choose your nickname":["Kiesd uwen bijnaam"],"This groupchat requires a password":["Dit groepsgesprek vereist een paswoord"],"Password: ":["Wachtwoord: "],"Submit":["Indienen"],"%1$s has entered the groupchat":["%1$s neemt deel aan het groepsgesprek"],"%1$s has left the groupchat":["%1$s heeft het groepsgesprek verlaten"],"%1$s is now a moderator":["%1$s is nu ne moderator"],"%1$s is no longer a moderator":["%1$s is gene moderator meer"],"%1$s has been given a voice":["%1$s heeft een stem gekregen"],"%1$s has been muted":["%1$s is gedempt"],"Change user\'s affiliation to admin":["Lidmaatschap van gebruiker wijzigen naar beheerder"],"Ban user by changing their affiliation to outcast":["Gebruiker verbannen door diens affiliatie te veranderen naar verschoppeling"],"Clear the chat area":["De gespreksruimte leegmaken"],"Change user role to participant":["Rol van gebruiker wijzigen naar deelnemer"],"Remove this groupchat":["Dit groepsgesprek verwijderen"],"Kick user from groupchat":["Gebruiker uit groepsgesprek schoppen"],"Write in 3rd person":["Schrijfd in den derde persoon"],"Grant membership to a user":["Verleend lidmaatschap aan ne gebruiker"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Mogelijkheid van gebruiker voor berichten te schrijven verwijderen"],"Change your nickname":["Wijzigd uwen bijnaam"],"Grant moderator role to user":["Rol van gebruiker wijzigen naar moderator"],"Grant ownership of this groupchat":["Eigendom van dit groepsgesprek verlenen"],"Register your nickname":["Uwen bijnaam registreren"],"Revoke the user\'s current affiliation":["De affiliatie van de gebruiker intrekken"],"Set groupchat subject":["Gespreksonderwerp instellen"],"Set groupchat subject (alias for /subject)":["Gespreksonderwerp instellen (alias voor /subject)"],"Allow muted user to post messages":["Gedempte gebruikers berichten laten schrijven"],"Configure":[""],"Configure this groupchat":["Configureerd dit groepsgesprek"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Verbergt den deelnemerslijst"],"Forbidden: you do not have the necessary role in order to do that.":["Geen toelating: ge hebt niet de benodigde rol voor dit te doen."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Geen toelating: ge hebt niet de benodigde affiliatie voor dit te doen."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Fout: den opdracht ‘%1$s’ aanvaard twee parameters, den bijnaam van de gebruiker en optioneel een reden."],"Error: couldn\'t find a groupchat participant based on your arguments":["Fout: kan geen gespreksdeelnemer niet vinden gebaseerd op uw argumenten"],"Error: found multiple groupchat participant based on your arguments":["Fout: meerdere groepsgespreksdeelnemers gevonden gebaseerd op uw argumenten"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["gebruiker@voorbeeld.be"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Uwen bijnaam is \\"%1$s\\""],"Error: invalid number of arguments":["Fout: ongeldig aantal argumenten"],"This action was done by %1$s.":["Deze actie is uitgevoerd door %1$s."],"The reason given is: \\"%1$s\\".":["D’opgegeven reden is: ‘%1$s’."],"Groupchats":["Groepgesprekken"],"Add a new groupchat":["Nieuw groepsgesprek toevoegen"],"Query for groupchats":["Zoeken naar gesprekken"],"Announcements":[""],"Notification from %1$s":["Melding van %1$s"],"%1$s says":["%1$s zegd"],"has gone offline":["is offline"],"has gone away":["is afwezig"],"is busy":["is bezet"],"has come online":["is online"],"wants to be your contact":["wild uw contact zijn"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Info"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Vrije %2$s XMPP-chatcliënt gemaakt door %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Vertaalt %2$s het in uw eigen taal"],"Log out":["Afmelden"],"Click to change your chat status":["Klikt hier voor uw gespreksstatus te wijzigen"],"Show details about this chat client":["Toont meer informatie over dezen chatcliënt"],"Your avatar image":["Uw avatarafbeelding"],"Checkbox for selecting the following fingerprint":["Selectievakske voor het selecteren van de volgende vingerafdruk"],"Device without a fingerprint":["Apparaat zonder vingerafdruk"],"Other OMEMO-enabled devices":["Overige OMEMO-apparaten"],"Checkbox to select fingerprints of all other OMEMO devices":["Selectievakske voor vingerafdrukken van alle andere OMEMO-apparaten te selecteren"],"Remove checked devices and close":["Geselecteerde apparaten verwijderen en sluiten"],"Select all":["Alles selecteren"],"This device\'s OMEMO fingerprint":["De OMEMO-vingerafdruk van dit apparaat"],"Generate new keys and fingerprint":["Nieuwe sleutels en vingerafdruk genereren"],"Your Profile":["Uw profiel"],"XMPP Address (JID)":["XMPP-adres (JID)"],"Save and close":["Opslaan en sluiten"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Gebruikt komma’s voor meerdere rollen op te geven. Uw rollen worden naast uwe naam op uw berichten weergegeven."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Sorry, der is een fout opgetreden bij het opslaan van uw profielgegevens."],"You can check your browser\'s developer console for any error output.":["Ge kunt de ontwikkelaarsconsole van uwen browser nakijken voor foutenuitvoer."],"Away":["Afwezig"],"Busy":["Bezet"],"Custom status":["Aangepaste status"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Langdurig afwezig"],"Change chat status":["Gespreksstatus wijzigen"],"Personal status message":["Persoonlijk statusbericht"],"I am %1$s":["Ik ben %1$s"],"Are you sure you want to log out?":["Zij’ ge zeker da’ g’u wild afmelden?"],"online":["online"],"busy":["bezet"],"away for long":["langdurig afwezig"],"away":["afwezig"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Sorry, door en fout kon het ontvangen OMEMO-bericht niet ontsleuteld worden."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s lijkt geen gebruik te maken van ne cliënt met ondersteuning voor OMEMO. Het gaat niet meer mogelijk zijn van versleutelde berichten te sturen in dit groepsgesprek."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Kan geen eind-tot-eind-versleuteling gebruiken omdat %1$s ne cliënt gebruikt die dat geen ondersteuning biedt voor OMEMO."],"Messages are being sent in plaintext":["Berichten worden onversleuteld verzonden"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Sorry, we kunnen geen versleutelde berichten sturen omdat %1$s vereist dat ge geabonneerd zijt op zijn/haar aanwezigheid voor zijn/haar OMEMO-informatie te bekijken"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Sorry, we kunnen geen versleutelde berichten sturen omdat den externe server voor %1$s niet kon gevonden worden"],"Unable to send an encrypted message due to an unexpected error.":["Kan geen versleutelde berichten sturen door een onverwachte fout."],"Sorry, an error occurred while trying to remove the devices.":["Der is een fout opgetreden bij het verwijderen van de apparaten."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Zijt ge zeker dat ge nieuwe OMEMO-sleutels wilt genereren? Dit gaat uw oude sleutels verwijderen, en alle voorheen versleutelde berichten gaan niet meer ontsleutelbaar zijn op dit apparaat."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Sorry, geen apparaten gevonden naarwaar we een OMEMO-versleuteld bericht kunnen verzenden."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Dit is een OMEMO-versleuteld bericht, wat dat uwe cliënt niet ondersteunt. Meer informatie op https://conversations.im/omemo"]," e.g. conversejs.org":[" bv. conversejs.org"],"Fetch registration form":["Registratieformulier ophalen"],"Tip: A list of public XMPP providers is available":["Tip: der is ne lijst met openbare XMPP-leveranciers beschikbaar"],"here":["hier"],"Sorry, we\'re unable to connect to your chosen provider.":["Sorry, we konden geen verbinding maken met uwe gekozen leverancier."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Sorry, den opgegeven leverancier bied geen ondersteuning voor inbandaccountregistratie. Probeerd nen andere leverancier."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Der ging iets mis bij het verbinden met ‘%1$s’. Zij’ ge zeker dat het bestaat?"],"Now logging you in":["Bezig met aanmelden"],"Registered successfully":["Geregistreerd"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["De leverancier weigerde uw registratieverzoek. Controleerd de waarden die g’invoerde."],"Leave this groupchat":["Dit gesprek verlaten"],"Click to toggle the list of open groupchats":["Klikt voor de lijst me’ groepsgesprekken te tonen/verbergen"],"Open Groupchats":["Open groepsgesprekken"],"Are you sure you want to leave the groupchat %1$s?":["Zijt ge zeker dat ge het gesprek ‘%1$s’ wilt verlaten?"],"Add":["Toevoegen"],"Add a Contact":["Voeg een contact toe"],"This contact is busy":["Dit contact is bezet"],"This contact is online":["Dit contact is online"],"This contact is offline":["Dit contact is offline"],"This contact is unavailable":["Dit contact is nie beschikbaar"],"This contact is away for an extended period":["Dit contact is uitgebreid afwezig"],"This contact is away":["Dit contact is afwezig"],"Contact name":["Contactnaam"],"Optional nickname":["Facultatieven bijnaam"],"Sorry, could not find a contact with that name":["Sorry, kon geen contact vinden met die naam"],"This contact has already been added":["Dees contact werd al toegevoegd"],"Filter":["Filteren"],"Filter by contact name":["Filteren op contactnaam"],"Filter by group name":["Filteren op groepsnaam"],"Filter by status":["Filteren op status"],"Any":["Elke"],"Unread":["Ongelezen"],"Chatty":["Spraakzaam"],"Extended Away":["Uitgebreid afwezig"],"Click to remove %1$s as a contact":["Klikt voor %1$s als contact te verwijderen"],"Click to accept the contact request from %1$s":["Klikt voor het contactverzoek van %1$s t’aanvaarden"],"Click to decline the contact request from %1$s":["Klikt voor het contactverzoek van %1$s te weigeren"],"Are you sure you want to decline this contact request?":["Zij’ ge zeker da’ ge dit contactverzoek wild weigeren?"],"Contacts":["Contacten"],"Add a contact":["Voeg een contact toe"],"Re-sync your contacts":["Hersynchroniseert uw contacten"]}}}')}}]);
 //# sourceMappingURL=nl_BE-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/oc-LC_MESSAGES-converse-po.js b/src/conversejs/locales/oc-LC_MESSAGES-converse-po.js
index b85d7a7743617737b954cefed6a294b7a1ce726f..a2a11b21dfd417930d6357f0bcd4961e8164cfdb 100644
--- a/src/conversejs/locales/oc-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/oc-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[165],{443:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"oc"},"Create your account":["Creatz vòstre compte"],"Please enter the XMPP provider to register with:":["Volgatz picar lo provesidor XMPP ont se marcar :"],"Already have a chat account?":["Avètz ja un compte ?"],"Log in here":["Connectatz-vos aquí"],"Account Registration:":["Creacion del compte :"],"Register":["Se marcar"],"Choose a different provider":["Causir un autre provesidor"],"Hold tight, we\'re fetching the registration form…":["Demoratz aquí, sèm a quèrre lo formulari d’inscripcion…"],"Cancel":["Anullar"],"The connection has dropped, attempting to reconnect.":["La connexion es estada perduda, ensag de reconnexion."],"An error occurred while connecting to the chat server.":["O planhèm, una error s’es producha en se connectar al servidor de chat."],"Your XMPP address and/or password is incorrect. Please try again.":["Vòstra adreça XMPP e/o senhal es incorrèct. Tornatz ensajar."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["O planhèm, avèm pas pogut nos connectar a l’òste XMPP amb lo domeni : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Lo servidor XMPP a pas prepausat un mecanisme d’autentificacion pres en carga"],"Sorry, could not determine upload URL.":["Determinacion impossibla de l’URL de mandadís del fichièr."],"Sorry, could not determine file upload URL.":["Determinacion impossibla de l’URL per enviar lo fichièr."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["O planhèm, lo mandadís del fichièr a pas reüssit. Vòstre servidor a respondut : « %1$s »"],"Sorry, could not succesfully upload your file.":["O planhèm, lo mandadís del fichièr a pas reüssit."],"Sorry, looks like file upload is not supported by your server.":["O planhèm, lo servidor sembla pas gerir lo mandadís de fichièrs."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La talha del fichièr, %1$s, subrepassa lo maximum autorizat per vòstre servidor, que es %2$s."],"Smileys and emotions":["Smileys e emocions"],"People":["Gents"],"Activities":["Activitats"],"Travel":["Viatge"],"Objects":["Objèctes"],"Animals and nature":["Animals e natura"],"Food and drink":["Beure e manjar"],"Symbols":["Simbòls"],"Flags":["Drapèus"],"Stickers":["Pegasolets"],"This groupchat is not anonymous":["Aquesta sala es pas anonima"],"This groupchat now shows unavailable members":["Aquesta sala mòstra ara los membres indisponibles"],"This groupchat does not show unavailable members":["Aquesta sala mòstra pas los membres indisponibles"],"The groupchat configuration has changed":["Los paramètres d’aquesta sala son estats cambiats"],"Groupchat logging is now enabled":["L’enregistrament es ara activat per la sala"],"Groupchat logging is now disabled":["L’enregistrament es ara desactivat per la sala"],"This groupchat is now no longer anonymous":["Aquesta sala es pas mai anonima"],"This groupchat is now semi-anonymous":["Aquesta sala es ara semianonima"],"This groupchat is now fully-anonymous":["Aquesta es ara complètament anonima"],"A new groupchat has been created":["Una nòva sala es estada creada"],"Your nickname has been automatically set to %1$s":["Vòstre escais-nos es estat automaticament definit a : %1$s"],"Your nickname has been changed to %1$s":["Vòstre escais-nom es estat cambiat per « %1$s »"],"You have been banned from this groupchat":["Sètz forabandit d’aquesta sala"],"You have been kicked from this groupchat":["Sètz estat expulsat d’aquesta sala"],"You have been removed from this groupchat because of an affiliation change":["Sètz estat tirat de la sala a causa d’un cambiament d’afiliacion"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sètz estat levat d’aquesta sala perque aquesta sala es venguda reservada als membres e sètz pas membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sètz estat levat d’aquesta sala perque lo servici ont es albergat es a èsser arrestat"],"Your message was not delivered because you weren\'t allowed to send it.":["Lo messatge es pas estat liurat perque sètz pas autorizat a enviar de messatges."],"Your message was not delivered because you\'re not present in the groupchat.":["Vòstre messatge es pas estat liurat perque sètz pas present a la sala."],"You\'re not allowed to register yourself in this groupchat.":["Sètz pas autorizat a vos inscriure vos meteis a la sala."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Sètz pas autorizat a vos inscriure a aquesta sala perque es reservada als membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Inscripcion impossibla de vòstre escais-nom a la sala, gerís pas l’enregistrament."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Inscripcion impossibla de vòstre escais-nom a la sala, un formulari invalid es estat enviat."],"Topic set by %1$s":["Lo subjècte es estat definit per %1$s"],"Topic cleared by %1$s":["Subjècte tirat per %1$s"],"%1$s has been banned by %2$s":["%1$s es estat forabandit per %2$s"],"%1$s has been banned":["%1$s es estat forabandit"],"%1$s\'s nickname has changed":["L’escais-nom de %1$s a cambiat"],"%1$s has been kicked out by %2$s":["%1$s es estat expulsat per %2$s"],"%1$s has been kicked out":["%1$s es estat expulsat"],"%1$s has been removed because of an affiliation change":["%1$s es estat tirat a causa d’un cambiament d’afiliacion"],"%1$s has been removed for not being a member":["%1$s es estat levat per es pas membre"],"%1$s is no longer an admin of this groupchat":["%1$s es pas mai administrator de la sala"],"%1$s is no longer an owner of this groupchat":["%1$s es pas mai lo proprietari d’aquesta sala"],"%1$s is no longer banned from this groupchat":["%1$s es pas mai forabandit d’aquesta sala"],"%1$s is no longer a member of this groupchat":["%1$s es pas mai membre d’aquesta sala"],"%1$s is now a member of this groupchat":["%1$s es ara membre d’aquesta sala"],"%1$s is now an %2$s of this groupchat":["%1$s es ara %2$s d’aquesta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["L’escais-nom causit es reservat o actualament utilizat, volgatz ne causir un diferent."],"Password incorrect":["Senhal incorrècte"],"You are not on the member list of this groupchat.":["Sètz pas dins la lista dels membres d’aquesta sala."],"You have been banned from this groupchat.":["Sètz estat forabandit d’aquesta sala."],"You are not allowed to create new groupchats.":["Avètz pas lo drech de crear de salas."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Vòstre escais-nom respècta pas la politica d’aquesta sala."],"This groupchat does not (yet) exist.":["Aquesta sala existís pas (pel moment)."],"This groupchat has reached its maximum number of participants.":["Aquesta sala a atengut sa limita de participants."],"Remote server not found":["Servidor alonhat pas trobat"],"The explanation given is: \\"%1$s\\".":["L’explicacion donada es  : « %1$s »."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vos a convidat a rejónher la sala : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vos a convidat a rejónher la sala : %2$s, e a daissat lo messatge seguent : « %3$s »"],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["Quicòm s’es pas passat coma caliá pendent la salvagarda d’aqueste marcapagina."],"Timeout Error":["Error de relambi"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Lo servidor a pas tornat vòstres marcapaginas pendent lo temps autorizat. Podètz actualizar la pagina per los tornar demandar."],"My contacts":["Mos contactes"],"Pending contacts":["Contactes en espèra"],"Contact requests":["Demandas de contactes"],"Ungrouped":["Sens grop"],"New messages":["Messatges novèls"],"Sorry, there was an error while trying to add %1$s as a contact.":["O planhèm, una error s’es producha en ajustar %1$s als contacts."],"This client does not allow presence subscriptions":["Aqueste client permet pas las mesas a jorn de preséncia"],"Click to hide these contacts":["Clicatz per rescondre los contactes"],"Unbookmark this groupchat":["Levar aquesta sala dels marcapaginas"],"Click to open this groupchat":["Clicar per dobrir aquesta sala"],"Click to toggle the bookmarks list":["Clicar per dobrir la lista de las salas"],"Bookmarks":["Marcapaginas"],"Bookmark this groupchat":["Ajustar aquesta sala als marcapaginas"],"Would you like this groupchat to be automatically joined upon startup?":["Volètz rejónher aquesta sala automaticament a l’aviada ?"],"The name for this bookmark:":["Nom d’aqueste marcapagina :"],"What should your nickname for this groupchat be?":["Quin escais-nom volètz utilizar per aquesta sala ?"],"Save":["Salvagardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Volètz vertadièrament suprimir aqueste marcapagina « %1$s » ?"],"Close":["Tampar"],"OK":["D’acòrdi"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Telecargar lo fichièr àudio « %1$s »"],"Download file \\"%1$s\\"":["Telecargar lo fichièr « %1$s »"],"Edit":[""],"Retract":[""],"Message versions":["Versions del messatge"],"Retry":[""],"Uploading file:":["Mandadís de fichièr :"],"%1$s has removed this message":["%1$s a suprimit aqueste messatge"],"This message has been edited":["Aqueste messatge es estat modificat"],"Show more":["Ne veire mai"],"No message history available.":["Cap d’istoric de messatges pas disponible."],"Search results":["Resultats de recèrca"],"Search":["Cercar"],"Insert emojis":["Inserir un emoji"],"Send the message":["Enviar lo messatge"],"Start a call":["Aviar una sonada"],"Message characters remaining":["Caractèrs demorants pel messatge"],"Choose a file to send":["Causir un fichièr a enviar"],"Click to write as a normal (non-spoiler) message":["Clicatz per escriure un messatge normal (cap d’intriga)"],"Click to write your message as a spoiler":["Clicatz per escriure un messatge amb una intriga"],"The User\'s Profile Image":["Imatge de perfil de l’utilizaire"],"Trusted":["Fisable"],"Untrusted":["Pas fisable"],"OMEMO Fingerprints":["Detadas clau OMEMO"],"No OMEMO-enabled devices found":["Cap de periferic amb lo chiframent OMEMO pas trobat"],"Remove as contact":["Suprimir aqueste contacte"],"XMPP Address":["Adreça XMPP"],"Email":["Corrièl"],"Full Name":["Nom complèt"],"Nickname":["Escais-nom"],"Refresh":["Actualizar"],"Role":["Ròtle"],"URL":["URL"],"%1$s is typing":["%1$s es a escriure"],"%1$s has stopped typing":["%1$s a arrestat d’escriure"],"%1$s has gone away":["%1$s es passat absent"],"Remove messages":["Escafar los messatges"],"Close this chat":["Tampar aquesta fenèstra de discussion"],"Write in the third person":["Escriure a la tresena persona"],"Show this menu":["Mostrar aqueste menú"],"Hidden message":["Messatge rescondut"],"Message":["Messatge"],"Optional hint":["Indici opcional"],"You have unread messages":["Avètz de nòus messatges"],"Details":["Detalhs"],"See more information about this person":["Mostrar mai d’informacions tocant aqueste degun"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["Volètz vertadièrament suprimir aqueste messatge ?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Avètz un messatge pas enviat que serà perdut se contunhatz. O volètz vertadièrament ?"],"Are you sure you want to clear the messages from this conversation?":["Volètz vertadièrament escafar los messatges d’aquesta conversacion ?"],"%1$s has gone offline":["%1$s es passat fòra linha"],"%1$s is busy":["%1$s es ocupat"],"%1$s is online":["%1$s es en linha"],"Sorry, something went wrong while trying to refresh":["Quicòm s’es pas passat coma caliá pendent l’ensag d’actualizacion"],"Are you sure you want to remove this contact?":["Volètz vertadièrament levar aqueste contacte ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["I a agut una error en ensajar de levar %1$s dels contactes."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per melhorar las qualitats tecnicas, gardam vòstras donadas dins lo cache del navegador. Desmarcatz aquesta casa se sètz sus un ordenador public, o se volètz que vòstras donadas sián suprimidas quand vos desconnectatz. Es important que vos desconnectetz explicitament, autrament totas las donadas en cache seràn pas suprimidas. Remarcatz que quand l’ordenador utilizat es pas fisable, lo chiframent OMEMO es PAS disponible."],"This is a trusted device":["Aquò es un periferic fisable"],"Password":["Senhal"],"Create an account":["Crear un compte"],"Don\'t have a chat account?":["Avètz pas de compte ?"],"Log in":["Connexion"],"Disconnected":["Desconnectat"],"Click here to log in anonymously":["Clicatz aquí per vos connectar anonimament"],"Username":["Nom d’utilizaire"],"user@domain":["utilizaire@domeni"],"Please enter a valid XMPP address":["Volgatz picar una adreça XMPP valida"],"Chat Contacts":["Contactes de chat"],"Toggle chat":["Dobrir la discussion"],"Click to restore this chat":["Clicatz per mostrar aquesta discussion"],"Minimized":["Reduch"],"Minimize this groupchat":["Reduire aqueste grop de discussion"],"This field is required":["Aqueste camp es requesit"],"Join":["Rejónher"],"Enter a new Groupchat":["Dintrar dins una nòva sala"],"name@conference.example.org":["nom@chat.exemple.org"],"Groupchat name":["Nom de la sala"],"Groupchat address":["Adreça de la sala"],"Invite":["Convidar"],"Invite someone to this groupchat":["Convidar qualqu’un al grop de discussion"],"user@example.org":["nom@exemple.org"],"Optional reason for the invitation":["Rason facultativa pel convit"],"Show groupchats":["Mostrar las salas"],"Server address":["Adreça del servidor"],"Show more information on this groupchat":["Mostrar mai d’informacions tocant aquesta sala"],"Query for Groupchats":["Cercar una sala"],"Description:":["Descripcion :"],"Groupchat Address (JID):":["Adreça de la sala (JID) :"],"Participants:":["Participants :"],"Features:":["Caracteristicas :"],"Requires authentication":["Demanda una autentificacion"],"Hidden":["Rescondut"],"Requires an invitation":["Demanda una invitacion"],"Moderated":["Moderat"],"Non-anonymous":["Pas anonime"],"Open":["Dobèrt"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semianonima"],"Temporary":["Temporari"],"Unmoderated":["Pas moderat"],"conference.example.org":["chat.exemple.org"],"No groupchats found":["Cap de sala pas trobada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Los moderators son d’utilizaires privilegiats que pòdon cambiar los ròtles dels autres utilizaires fòra los que son administrators o proprietaris d’afiliacions."],"The default role, implies that you can read and write messages.":["Lo ròtle per defaut significa que podètz legir e escriure de messatges."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Los visitaires son pas autorizats a escriure de messatges dins una conversacion multi-utilizaires moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietari es l’afiliacion mai nauta. Los proprietaris pòdon modificar los ròtles e afiliacions de totes los autres utilizaires."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin es la segonda afiliacion mai nauta. Los administrators pòdon modificar los ròtles e afiliacions de totes los autres utilizaires fòra los proprietaris."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per forabandir un utilizaire, donatz-li l’aficialicion d’ « exclús »."],"Change role":["Cambiar lo ròtle"],"New Role":["Ròtle novèl"],"Reason":["Rason"],"Change affiliation":["Cambiar l’afiliacion"],"New affiliation":["Afiliacion novèla"],"Affiliation":["Afiliacion"],"Moderator Tools":["Aisinas de moderador"],"No users with that affiliation found.":["Cap d’utilizaire pas trobat amb aquesta afiliacion."],"No users with that role found.":["Cap d’utilizaire pas trobat amb aqueste ròtle."],"Type here to filter the search results":[""],"Show users":["Mostrar los utilizaires"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Los ròtles son atribuits als utilizaires per lor donar o tirar unas capacitats dins una sala multi-utilizaires. Son atribuidas explicitament o implicitament amb una afiliacion. Un ròtle que ven pas d’una afiliacion, es pas que valid lo temps de la session de l’utilizaire."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliacion es un drech duradís qu’implica generalament a tal ròtle e que dòna de privilègis e de responsabilitats. Per exemple los administrators e los proprietaris an automaticament lo ròtle de moderator."],"Sorry, something went wrong while trying to set the affiliation":["Quicòm s’es pas passat coma caliá pendent la definicion de l’afiliacion"],"Affiliation changed":["Afiliacion cambiada"],"Role changed":["Ròtle cambiat"],"You\'re not allowed to make that change":["Avètz pas lo drech de cambiar aquò"],"Sorry, something went wrong while trying to set the role":["Quicòm s’es pas passat coma caliá pendent la definicion del ròtle"],"Topic":["Subjècte"],"Topic author":["Autor del subjècte"],"Groupchat address (JID)":["Adreça de la sala (JID)"],"Message archiving":["Conservacion dels messatges"],"Messages are archived on the server":["Los messatges son conservats al servidor"],"Description":["Descripcion"],"Features":["Caracteristicas"],"This groupchat is not publicly searchable":["Aquesta sala es pas publica per la recèrca"],"This groupchat is restricted to members only":["Aquesta sala es solament pels membres"],"Members only":["Membres solament"],"Participants entering this groupchat need to request permission to write":["Los participants d’aquesta conversacion devon aver la permission per escriure"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Aquesta sala necessita pas cap de senhal per i dintrar"],"No password required":["Cap de senhal pas requesit"],"Not anonymous":["Pas anonima"],"All other groupchat participants can see your XMPP address":["Totes los autres ocupants d’aquesta sala pòdon veire vòstra adreça XMPP"],"Not moderated":["Pas moderat"],"Participants entering this groupchat can write right away":["Los participants d’aquesta conversacion pòdon escriure dirèctament"],"Online users":["Utilizaires en linha"],"Anyone can join this groupchat":["Tot lo monde pòt participar a la sala"],"This groupchat requires a password before entry":["Aquesta sala necessita un senhal per i dintrar"],"Password protected":["Protegida per senhal"],"Persistent":["Persistenta"],"This groupchat persists even if it\'s unoccupied":["Aquesta sala demòra encara que siá pas ocupada"],"Only moderators can see your XMPP address":["Sols los moderators pòdon veire vòstra adreça XMPP"],"This groupchat will disappear once the last person leaves":["Aquesta sala desapareis quand la darrièra persona s’en va"],"This groupchat is publicly searchable":["Aquesta sala se pòt trobar amb la recèrca"],"Groupchat info for %1$s":["Informacions tocant la sala %1$s"],"You\'re not allowed to send messages in this room":["Sètz pas autorizat a enviar de messatges a aquesta sala"],"The conversation has moved. Click below to enter.":["La conversacion a mudat. Clicatz çai-jos per dintrar."],"This groupchat no longer exists":["Aquesta sala existís pas mai"],"Enter groupchat":["Dintrar a la sala"],"Please choose your nickname":["Volgatz causir un escais-nom"],"This groupchat requires a password":["Aquesta sala requesís un senhal"],"Password: ":["Senhal : "],"Submit":["Sosmetre"],"This user is a moderator.":["Aqueste utilizaire es moderator."],"This user can send messages in this groupchat.":["Aqueste utilizaire pòt enviar de messatge dins aquesta sala."],"This user can NOT send messages in this groupchat.":["Aqueste utilizaire pòt PAS enviar de messatge dins aquesta sala."],"Owner":["Proprietari"],"Admin":["Admin"],"Member":["Membre"],"Moderator":["Moderador"],"Visitor":["Visitaire"],"Click to mention %1$s in your message.":["Clicar per mencionar %1$s dins vòstre messatge."],"Participants":["Participants"],"%1$s has entered the groupchat":["%1$s a rejonch la sala"],"%1$s has left the groupchat":["%1$s a quitat la sala"],"%1$s is now a moderator":["%1$s es ara moderator"],"%1$s is no longer a moderator":["%1$s es pas mai moderator"],"%1$s has been given a voice":["%1$s pòt parlar ara"],"%1$s has been muted":["%1$s pòt pas mai parlar"],"Change user\'s affiliation to admin":["Cambiar lo ròtle de l’utilizaire en administrator"],"Ban user by changing their affiliation to outcast":["Forabandir un utilizaire en cambiar son afiliacion"],"Clear the chat area":["Escafar la zòna de conversacion"],"Change user role to participant":["Cambiar lo ròtle de l’utilizaire en participant"],"Remove this groupchat":["Suprimir aquesta sala"],"Kick user from groupchat":["Expulsar l’utilizaire d’aquesta sala"],"Write in 3rd person":["Escriure a la tresena persona"],"Grant membership to a user":["Permetre a l’utilizaire d’èsser membre"],"Opens up the moderator tools GUI":["Dorbís las aisinas de moderacion"],"Remove user\'s ability to post messages":["Tirar lo drech d’enviar de messatges"],"Change your nickname":["Cambiar l’escais-nom"],"Grant moderator role to user":["Cambiar lo ròtle de l’utilizaire en moderator"],"Grant ownership of this groupchat":["Acordar la proprietat d’aquesta sala"],"Register your nickname":["Enregistrar l’escais-nom"],"Revoke the user\'s current affiliation":["Revocar l’afiliacion actuala de l’utilizaire"],"Set groupchat subject":["Definir lo subjècte de la sala"],"Set groupchat subject (alias for /subject)":["Definir lo subjècte de la sala (alias per /subject)"],"Allow muted user to post messages":["Permetre als utilizaires muts de publicar de messatges"],"Configure this groupchat":["Configurar d’aquesta sala"],"Hide topic":["Amagar subjècte"],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":["Quitar"],"Hide the list of participants":["Rescondre la lista dels participants"],"Forbidden: you do not have the necessary role in order to do that.":["Defendut : avètz pas lo ròtle necessari per far aquò."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Defendut : avètz pas l’afliacion que cal per aquò far."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error : la comanda « %1$s » pren dos paramètres, l’escais-nom de l’utilizaire e la rason d’un biais opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error : impossible de trobar un participant dins la sala segon vòstres arguments"],"Error: found multiple groupchat participant based on your arguments":["Error : impossible de trobar mantun participants en utilizar vòstres paramètres"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["nom@exemple.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Vòstre escais-nom es « %1$s »"],"Error: invalid number of arguments":["Error : nombre d’arguments invalid"],"This action was done by %1$s.":["Aquesta accion es estada realizada per %1$s."],"The reason given is: \\"%1$s\\".":["La rason indicada es  : « %1$s »."],"Groupchats":["Salas"],"Add a new groupchat":["Ajustar una sala novèla"],"Query for groupchats":["Cercar una sala"],"Announcements":["Anóncias"],"Notification from %1$s":["Notificacion de %1$s"],"%1$s says":["%1$s ditz"],"has gone offline":["s’es desconnectat"],"has gone away":["es absent"],"is busy":["es ocupat"],"has come online":["s’es connectat"],"wants to be your contact":["vòl èsser vòstre contacte"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["A prepaus"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s liure %2$s que vos es fornit per %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Tradusètz %2$s dins vòstra lenga"],"Log out":["Desconnexion"],"Click to change your chat status":["Clicatz per cambiar vòstre estat"],"Show details about this chat client":["Mostrar mai d’informacion tocant aqueste client"],"Your avatar image":["Vòstre imatge d’avatar"],"Checkbox for selecting the following fingerprint":["Casa de marcar per seleccionar la detada OMEMO seguenta"],"Device without a fingerprint":["Periferic sens detada OMEMO"],"Other OMEMO-enabled devices":["Autres clients amb lo chiframent OMEMO activat"],"Checkbox to select fingerprints of all other OMEMO devices":["Casa de marcar per dire de seleccionar las detada OMEMA de totes los periferics"],"Remove checked devices and close":["Suprimir los clients OMEMO seleccionats e tampar"],"Select all":["O seleccionar tot"],"This device\'s OMEMO fingerprint":["Detada OMEMO d’aqueste client"],"Generate new keys and fingerprint":["Generar de nòvas claus e detadas"],"Your Profile":["Vòstre perfil"],"XMPP Address (JID)":["Adreça XMPP (JID)"],"Save and close":["Enregistrar e tampar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilizatz una virgula per dire de separar los ròtles. Vòstres ròtles son mostrats a costat de vòstre nom dins los messatges."],"OMEMO":["OMEMO"],"Sorry, an error happened while trying to save your profile data.":["O planhèm, quicòm a trucat pendent la salvagarda del perfil."],"You can check your browser\'s developer console for any error output.":["Podètz verificar totas las errors dins la consòla de desvolopament del navegador."],"Away":["Absent"],"Busy":["Ocupat"],"Custom status":["Estat personal"],"Offline":["Desconnectat"],"Online":["En linha"],"Away for long":["Absent de longa"],"Change chat status":["cambiar vòstre estat de chat"],"Personal status message":["Messatge d’estat personal"],"I am %1$s":["Soi %1$s"],"Are you sure you want to log out?":["Volètz vertadièrament vos desconnectar ?"],"online":["en linha"],"busy":["ocupat"],"away for long":["absent de longa"],"away":["absent"],"offline":["desconnectat"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s sembla pas aver un client que siá compatible amb OMEMO. Lo chiframent serà pas mai possible dins aqueste grop de discussion."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Utilizacion impossibla del chiframent del cap a la fin perque %1$s utiliza un client qu’es pas compatible amb OMEMO."],"Messages are being sent in plaintext":["Los messatges son enviats en clar"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["O planhèm, una error s’es producha en ensajar de suprimir los clients OMEMO."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Volètz vertadièrament generar de nòvas claus OMEMO ? Aquò tirarà las ancianas claus e totes los messatges ja deschifrats poiràn pas mai èsser deschifrats sus aqueste periferic."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["O planhèm, impossible d’enviar un messatge chifrat a %1$s perque requerís que siatz abonat a sas mesas a jorn de preséncia per dire de veire las informacions OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["O planhèm, impossible d’enviar un messatge chifrat perque lo servidor alonhat de %1$s es pas disponible"],"Unable to send an encrypted message due to an unexpected error.":["Mandadís impossible d’un messatge chifrat a causa d’una error imprevista."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["O planhèm, impossible de trobat un periferic al qual enviar un messatge chifrat amb OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Aquò es un messatge chifrat amb OMEMO, que vòstre client sembla pas prendre en carga. Per mai d’informacions, anatz veire https://conversations.im/omemo"]," e.g. conversejs.org":[" per exemple conversejs.org"],"Fetch registration form":["Recuperacion del formulari d’enregistrament"],"Tip: A list of public XMPP providers is available":["Astúcia : una lista publica de provesidors XMPP es disponibla"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Avèm pas pogut vos connectar a vòstre provesidor."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["O planhèm, lo provesidor es pas compatibla amb l’enregistrament  de compte en linha. Mercés d’ensajar amb un autre provesidor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Quicòm a trucat pendent l’establiment de la connexion amb « %1$s ». Es segur qu’existís ?"],"Now logging you in":["Connexion"],"Registered successfully":["Corrèctament enregistrat"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Lo provesidor a regetat vòstra demanda d’inscripcion. Mercés de verificar que las donadas qu’avètz picadas sián corrèctas."],"Leave this groupchat":["Quitar aquesta sala"],"Click to toggle the list of open groupchats":["Clicar per dobrir la lista de las salas dobèrtas"],"Open Groupchats":["Salas dobèrtas"],"Are you sure you want to leave the groupchat %1$s?":["Volètz vertadièrament quitar la sala « %1$s » ?"],"Add":["Ajustar"],"Add a Contact":["Ajustar un contacte"],"This contact is busy":["Aqueste contacte es ocupat"],"This contact is online":["Aqueste contacte es connectat"],"This contact is offline":["Aqueste contacte es desconnectat"],"This contact is unavailable":["Aqueste contacte es pas disponible"],"This contact is away for an extended period":["Aqueste contacte es absent de longa"],"This contact is away":["Aqueste contacte es absent"],"Contact name":["Nom del contacte"],"Optional nickname":["Escais-nom opcional"],"Sorry, could not find a contact with that name":["Impossible de trobar un contacte amb aqueste nom"],"This contact has already been added":["Aqueste contacte es ja ajustat"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar per nom de contacte"],"Filter by group name":["Filtrar per nom de grop"],"Filter by status":["Filtrar per estat"],"Any":["Cap"],"Unread":["Pas legit"],"Chatty":["Charraire"],"Extended Away":["Absent de longa"],"Click to remove %1$s as a contact":["Clicar per levar %1$s dels contactes"],"Click to accept the contact request from %1$s":["Clicatz per acceptar la demanda d’apondon de %1$s"],"Click to decline the contact request from %1$s":["Clicatz per regetar la demanda d’apondon de %1$s"],"Are you sure you want to decline this contact request?":["Volètz vertadièrament regetar aquesta demanda d’apondon als contactes ?"],"Contacts":["Contactes"],"Add a contact":["Ajustar un contacte"],"Re-sync your contacts":["Tornar sincronizar vòstres contactes"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[165],{531:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"oc"},"Create your account":["Creatz vòstre compte"],"Please enter the XMPP provider to register with:":["Volgatz picar lo provesidor XMPP ont se marcar :"],"Already have a chat account?":["Avètz ja un compte ?"],"Log in here":["Connectatz-vos aquí"],"Account Registration:":["Creacion del compte :"],"Register":["Se marcar"],"Choose a different provider":["Causir un autre provesidor"],"Hold tight, we\'re fetching the registration form…":["Demoratz aquí, sèm a quèrre lo formulari d’inscripcion…"],"Cancel":["Anullar"],"The connection has dropped, attempting to reconnect.":["La connexion es estada perduda, ensag de reconnexion."],"An error occurred while connecting to the chat server.":["O planhèm, una error s’es producha en se connectar al servidor de chat."],"Your XMPP address and/or password is incorrect. Please try again.":["Vòstra adreça XMPP e/o senhal es incorrèct. Tornatz ensajar."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["O planhèm, avèm pas pogut nos connectar a l’òste XMPP amb lo domeni : %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Lo servidor XMPP a pas prepausat un mecanisme d’autentificacion pres en carga"],"Undecryptable OMEMO message":["Messatge OMEMO pas deschifrable"],"Sorry, could not determine upload URL.":["Determinacion impossibla de l’URL de mandadís del fichièr."],"Sorry, could not determine file upload URL.":["Determinacion impossibla de l’URL per enviar lo fichièr."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["O planhèm, lo mandadís del fichièr a pas reüssit. Vòstre servidor a respondut : « %1$s »"],"Sorry, could not succesfully upload your file.":["O planhèm, lo mandadís del fichièr a pas reüssit."],"You\'re not allowed to retract your message.":["Avètz pas lo drech de tirar vòstre messatge."],"Sorry, looks like file upload is not supported by your server.":["O planhèm, lo servidor sembla pas gerir lo mandadís de fichièrs."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["La talha del fichièr, %1$s, subrepassa lo maximum autorizat per vòstre servidor, que es %2$s."],"Smileys and emotions":["Smileys e emocions"],"People":["Gents"],"Activities":["Activitats"],"Travel":["Viatge"],"Objects":["Objèctes"],"Animals and nature":["Animals e natura"],"Food and drink":["Beure e manjar"],"Symbols":["Simbòls"],"Flags":["Drapèus"],"Stickers":["Pegasolets"],"This groupchat is not anonymous":["Aquesta sala es pas anonima"],"This groupchat now shows unavailable members":["Aquesta sala mòstra ara los membres indisponibles"],"This groupchat does not show unavailable members":["Aquesta sala mòstra pas los membres indisponibles"],"The groupchat configuration has changed":["Los paramètres d’aquesta sala son estats cambiats"],"Groupchat logging is now enabled":["L’enregistrament es ara activat per la sala"],"Groupchat logging is now disabled":["L’enregistrament es ara desactivat per la sala"],"This groupchat is now no longer anonymous":["Aquesta sala es pas mai anonima"],"This groupchat is now semi-anonymous":["Aquesta sala es ara semianonima"],"This groupchat is now fully-anonymous":["Aquesta es ara complètament anonima"],"A new groupchat has been created":["Una nòva sala es estada creada"],"Your nickname has been automatically set to %1$s":["Vòstre escais-nos es estat automaticament definit a : %1$s"],"Your nickname has been changed to %1$s":["Vòstre escais-nom es estat cambiat per « %1$s »"],"You have been banned from this groupchat":["Sètz forabandit d’aquesta sala"],"You have been kicked from this groupchat":["Sètz estat expulsat d’aquesta sala"],"You have been removed from this groupchat because of an affiliation change":["Sètz estat tirat de la sala a causa d’un cambiament d’afiliacion"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Sètz estat levat d’aquesta sala perque aquesta sala es venguda reservada als membres e sètz pas membre"],"You have been removed from this groupchat because the service hosting it is being shut down":["Sètz estat levat d’aquesta sala perque lo servici ont es albergat es a èsser arrestat"],"Your message was not delivered because you weren\'t allowed to send it.":["Lo messatge es pas estat liurat perque sètz pas autorizat a enviar de messatges."],"Your message was not delivered because you\'re not present in the groupchat.":["Vòstre messatge es pas estat liurat perque sètz pas present a la sala."],"You\'re not allowed to register yourself in this groupchat.":["Sètz pas autorizat a vos inscriure vos meteis a la sala."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Sètz pas autorizat a vos inscriure a aquesta sala perque es reservada als membres."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Inscripcion impossibla de vòstre escais-nom a la sala, gerís pas l’enregistrament."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Inscripcion impossibla de vòstre escais-nom a la sala, un formulari invalid es estat enviat."],"Topic set by %1$s":["Lo subjècte es estat definit per %1$s"],"Topic cleared by %1$s":["Subjècte tirat per %1$s"],"%1$s has been banned by %2$s":["%1$s es estat forabandit per %2$s"],"%1$s has been banned":["%1$s es estat forabandit"],"%1$s\'s nickname has changed":["L’escais-nom de %1$s a cambiat"],"%1$s has been kicked out by %2$s":["%1$s es estat expulsat per %2$s"],"%1$s has been kicked out":["%1$s es estat expulsat"],"%1$s has been removed because of an affiliation change":["%1$s es estat tirat a causa d’un cambiament d’afiliacion"],"%1$s has been removed for not being a member":["%1$s es estat levat per es pas membre"],"%1$s is no longer an admin of this groupchat":["%1$s es pas mai administrator de la sala"],"%1$s is no longer an owner of this groupchat":["%1$s es pas mai lo proprietari d’aquesta sala"],"%1$s is no longer banned from this groupchat":["%1$s es pas mai forabandit d’aquesta sala"],"%1$s is no longer a member of this groupchat":["%1$s es pas mai membre d’aquesta sala"],"%1$s is now a member of this groupchat":["%1$s es ara membre d’aquesta sala"],"%1$s is now an %2$s of this groupchat":["%1$s es ara %2$s d’aquesta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["L’escais-nom causit es reservat o actualament utilizat, volgatz ne causir un diferent."],"Password incorrect":["Senhal incorrècte"],"You are not on the member list of this groupchat.":["Sètz pas dins la lista dels membres d’aquesta sala."],"You have been banned from this groupchat.":["Sètz estat forabandit d’aquesta sala."],"You are not allowed to create new groupchats.":["Avètz pas lo drech de crear de salas."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Vòstre escais-nom respècta pas la politica d’aquesta sala."],"This groupchat does not (yet) exist.":["Aquesta sala existís pas (pel moment)."],"This groupchat has reached its maximum number of participants.":["Aquesta sala a atengut sa limita de participants."],"Remote server not found":["Servidor alonhat pas trobat"],"The explanation given is: \\"%1$s\\".":["L’explicacion donada es  : « %1$s »."],"%1$s has invited you to join a groupchat: %2$s":["%1$s vos a convidat a rejónher la sala : %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s vos a convidat a rejónher la sala : %2$s, e a daissat lo messatge seguent : « %3$s »"],"Error":["Error"],"Sorry, something went wrong while trying to save your bookmark.":["Quicòm s’es pas passat coma caliá pendent la salvagarda d’aqueste marcapagina."],"Timeout Error":["Error de relambi"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Lo servidor a pas tornat vòstres marcapaginas pendent lo temps autorizat. Podètz actualizar la pagina per los tornar demandar."],"My contacts":["Mos contactes"],"Pending contacts":["Contactes en espèra"],"Contact requests":["Demandas de contactes"],"Ungrouped":["Sens grop"],"New messages":["Messatges novèls"],"Sorry, there was an error while trying to add %1$s as a contact.":["O planhèm, una error s’es producha en ajustar %1$s als contacts."],"This client does not allow presence subscriptions":["Aqueste client permet pas las mesas a jorn de preséncia"],"Click to hide these contacts":["Clicatz per rescondre los contactes"],"Unbookmark this groupchat":["Levar aquesta sala dels marcapaginas"],"Click to open this groupchat":["Clicar per dobrir aquesta sala"],"Click to toggle the bookmarks list":["Clicar per dobrir la lista de las salas"],"Bookmarks":["Marcapaginas"],"Bookmark this groupchat":["Ajustar aquesta sala als marcapaginas"],"Would you like this groupchat to be automatically joined upon startup?":["Volètz rejónher aquesta sala automaticament a l’aviada ?"],"The name for this bookmark:":["Nom d’aqueste marcapagina :"],"What should your nickname for this groupchat be?":["Quin escais-nom volètz utilizar per aquesta sala ?"],"Save":["Salvagardar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Volètz vertadièrament suprimir aqueste marcapagina « %1$s » ?"],"Close":["Tampar"],"OK":["D’acòrdi"],"Image: ":["Imatge : "],"Download audio file \\"%1$s\\"":["Telecargar lo fichièr àudio « %1$s »"],"Download file \\"%1$s\\"":["Telecargar lo fichièr « %1$s »"],"Edit":["Editar"],"Retract":["Tirar"],"Message versions":["Versions del messatge"],"Retry":["Tornar ensajar"],"Uploading file:":["Mandadís de fichièr :"],"%1$s has removed this message":["%1$s a suprimit aqueste messatge"],"This message has been edited":["Aqueste messatge es estat modificat"],"Show more":["Ne veire mai"],"No message history available.":["Cap d’istoric de messatges pas disponible."],"Search results":["Resultats de recèrca"],"Search":["Cercar"],"Insert emojis":["Inserir un emoji"],"Send the message":["Enviar lo messatge"],"Start a call":["Aviar una sonada"],"Message characters remaining":["Caractèrs demorants pel messatge"],"Choose a file to send":["Causir un fichièr a enviar"],"Click to write as a normal (non-spoiler) message":["Clicatz per escriure un messatge normal (cap d’intriga)"],"Click to write your message as a spoiler":["Clicatz per escriure un messatge amb una intriga"],"The User\'s Profile Image":["Imatge de perfil de l’utilizaire"],"Trusted":["Fisable"],"Untrusted":["Pas fisable"],"OMEMO Fingerprints":["Detadas clau OMEMO"],"No OMEMO-enabled devices found":["Cap de periferic amb lo chiframent OMEMO pas trobat"],"Remove as contact":["Suprimir aqueste contacte"],"XMPP Address":["Adreça XMPP"],"Email":["Corrièl"],"Full Name":["Nom complèt"],"Nickname":["Escais-nom"],"Refresh":["Actualizar"],"Role":["Ròtle"],"URL":["URL"],"%1$s is typing":["%1$s es a escriure"],"%1$s has stopped typing":["%1$s a arrestat d’escriure"],"%1$s has gone away":["%1$s es passat absent"],"Remove messages":["Escafar los messatges"],"Close this chat":["Tampar aquesta fenèstra de discussion"],"Write in the third person":["Escriure a la tresena persona"],"Show this menu":["Mostrar aqueste menú"],"Hidden message":["Messatge rescondut"],"Message":["Messatge"],"Optional hint":["Indici opcional"],"You have unread messages":["Avètz de nòus messatges"],"Details":["Detalhs"],"See more information about this person":["Mostrar mai d’informacions tocant aqueste degun"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["Volètz vertadièrament suprimir aqueste messatge ?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Avètz un messatge pas enviat que serà perdut se contunhatz. O volètz vertadièrament ?"],"Are you sure you want to clear the messages from this conversation?":["Volètz vertadièrament escafar los messatges d’aquesta conversacion ?"],"%1$s has gone offline":["%1$s es passat fòra linha"],"%1$s is busy":["%1$s es ocupat"],"%1$s is online":["%1$s es en linha"],"Sorry, something went wrong while trying to refresh":["Quicòm s’es pas passat coma caliá pendent l’ensag d’actualizacion"],"Are you sure you want to remove this contact?":["Volètz vertadièrament levar aqueste contacte ?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["I a agut una error en ensajar de levar %1$s dels contactes."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Per melhorar las qualitats tecnicas, gardam vòstras donadas dins lo cache del navegador. Desmarcatz aquesta casa se sètz sus un ordenador public, o se volètz que vòstras donadas sián suprimidas quand vos desconnectatz. Es important que vos desconnectetz explicitament, autrament totas las donadas en cache seràn pas suprimidas. Remarcatz que quand l’ordenador utilizat es pas fisable, lo chiframent OMEMO es PAS disponible."],"This is a trusted device":["Aquò es un periferic fisable"],"Password":["Senhal"],"Create an account":["Crear un compte"],"Don\'t have a chat account?":["Avètz pas de compte ?"],"Log in":["Connexion"],"Disconnected":["Desconnectat"],"Click here to log in anonymously":["Clicatz aquí per vos connectar anonimament"],"Username":["Nom d’utilizaire"],"user@domain":["utilizaire@domeni"],"Please enter a valid XMPP address":["Volgatz picar una adreça XMPP valida"],"Chat Contacts":["Contactes de chat"],"Toggle chat":["Dobrir la discussion"],"Click to restore this chat":["Clicatz per mostrar aquesta discussion"],"Minimized":["Reduch"],"Minimize this groupchat":["Reduire aqueste grop de discussion"],"This user is a moderator.":["Aqueste utilizaire es moderator."],"This user can send messages in this groupchat.":["Aqueste utilizaire pòt enviar de messatge dins aquesta sala."],"This user can NOT send messages in this groupchat.":["Aqueste utilizaire pòt PAS enviar de messatge dins aquesta sala."],"Owner":["Proprietari"],"Admin":["Admin"],"Member":["Membre"],"Moderator":["Moderador"],"Visitor":["Visitaire"],"Click to mention %1$s in your message.":["Clicar per mencionar %1$s dins vòstre messatge."],"Participants":["Participants"],"This field is required":["Aqueste camp es requesit"],"Join":["Rejónher"],"Enter a new Groupchat":["Dintrar dins una nòva sala"],"name@conference.example.org":["nom@chat.exemple.org"],"Groupchat name":["Nom de la sala"],"Groupchat address":["Adreça de la sala"],"Invite":["Convidar"],"Invite someone to this groupchat":["Convidar qualqu’un al grop de discussion"],"user@example.org":["nom@exemple.org"],"Optional reason for the invitation":["Rason facultativa pel convit"],"Show groupchats":["Mostrar las salas"],"Server address":["Adreça del servidor"],"Show more information on this groupchat":["Mostrar mai d’informacions tocant aquesta sala"],"Query for Groupchats":["Cercar una sala"],"Description:":["Descripcion :"],"Groupchat Address (JID):":["Adreça de la sala (JID) :"],"Participants:":["Participants :"],"Features:":["Caracteristicas :"],"Requires authentication":["Demanda una autentificacion"],"Hidden":["Rescondut"],"Requires an invitation":["Demanda una invitacion"],"Moderated":["Moderat"],"Non-anonymous":["Pas anonime"],"Open":["Dobèrt"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semianonima"],"Temporary":["Temporari"],"Unmoderated":["Pas moderat"],"conference.example.org":["chat.exemple.org"],"No groupchats found":["Cap de sala pas trobada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Los moderators son d’utilizaires privilegiats que pòdon cambiar los ròtles dels autres utilizaires fòra los que son administrators o proprietaris d’afiliacions."],"The default role, implies that you can read and write messages.":["Lo ròtle per defaut significa que podètz legir e escriure de messatges."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Los visitaires son pas autorizats a escriure de messatges dins una conversacion multi-utilizaires moderada."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietari es l’afiliacion mai nauta. Los proprietaris pòdon modificar los ròtles e afiliacions de totes los autres utilizaires."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin es la segonda afiliacion mai nauta. Los administrators pòdon modificar los ròtles e afiliacions de totes los autres utilizaires fòra los proprietaris."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Per forabandir un utilizaire, donatz-li l’aficialicion d’ « exclús »."],"Change role":["Cambiar lo ròtle"],"New Role":["Ròtle novèl"],"Reason":["Rason"],"Change affiliation":["Cambiar l’afiliacion"],"New affiliation":["Afiliacion novèla"],"Affiliation":["Afiliacion"],"Moderator Tools":["Aisinas de moderador"],"No users with that affiliation found.":["Cap d’utilizaire pas trobat amb aquesta afiliacion."],"No users with that role found.":["Cap d’utilizaire pas trobat amb aqueste ròtle."],"Type here to filter the search results":[""],"Show users":["Mostrar los utilizaires"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Los ròtles son atribuits als utilizaires per lor donar o tirar unas capacitats dins una sala multi-utilizaires. Son atribuidas explicitament o implicitament amb una afiliacion. Un ròtle que ven pas d’una afiliacion, es pas que valid lo temps de la session de l’utilizaire."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Una afiliacion es un drech duradís qu’implica generalament a tal ròtle e que dòna de privilègis e de responsabilitats. Per exemple los administrators e los proprietaris an automaticament lo ròtle de moderator."],"Sorry, something went wrong while trying to set the affiliation":["Quicòm s’es pas passat coma caliá pendent la definicion de l’afiliacion"],"Affiliation changed":["Afiliacion cambiada"],"Role changed":["Ròtle cambiat"],"You\'re not allowed to make that change":["Avètz pas lo drech de cambiar aquò"],"Sorry, something went wrong while trying to set the role":["Quicòm s’es pas passat coma caliá pendent la definicion del ròtle"],"Topic":["Subjècte"],"Topic author":["Autor del subjècte"],"Groupchat address (JID)":["Adreça de la sala (JID)"],"Message archiving":["Conservacion dels messatges"],"Messages are archived on the server":["Los messatges son conservats al servidor"],"Description":["Descripcion"],"Features":["Caracteristicas"],"This groupchat is not publicly searchable":["Aquesta sala es pas publica per la recèrca"],"This groupchat is restricted to members only":["Aquesta sala es solament pels membres"],"Members only":["Membres solament"],"Participants entering this groupchat need to request permission to write":["Los participants d’aquesta conversacion devon aver la permission per escriure"],"Name":["Nom"],"This groupchat does not require a password upon entry":["Aquesta sala necessita pas cap de senhal per i dintrar"],"No password required":["Cap de senhal pas requesit"],"Not anonymous":["Pas anonima"],"All other groupchat participants can see your XMPP address":["Totes los autres ocupants d’aquesta sala pòdon veire vòstra adreça XMPP"],"Not moderated":["Pas moderat"],"Participants entering this groupchat can write right away":["Los participants d’aquesta conversacion pòdon escriure dirèctament"],"Online users":["Utilizaires en linha"],"Anyone can join this groupchat":["Tot lo monde pòt participar a la sala"],"This groupchat requires a password before entry":["Aquesta sala necessita un senhal per i dintrar"],"Password protected":["Protegida per senhal"],"Persistent":["Persistenta"],"This groupchat persists even if it\'s unoccupied":["Aquesta sala demòra encara que siá pas ocupada"],"Only moderators can see your XMPP address":["Sols los moderators pòdon veire vòstra adreça XMPP"],"This groupchat will disappear once the last person leaves":["Aquesta sala desapareis quand la darrièra persona s’en va"],"This groupchat is publicly searchable":["Aquesta sala se pòt trobar amb la recèrca"],"Groupchat info for %1$s":["Informacions tocant la sala %1$s"],"You\'re not allowed to send messages in this room":["Sètz pas autorizat a enviar de messatges a aquesta sala"],"The conversation has moved. Click below to enter.":["La conversacion a mudat. Clicatz çai-jos per dintrar."],"This groupchat no longer exists":["Aquesta sala existís pas mai"],"Enter groupchat":["Dintrar a la sala"],"Please choose your nickname":["Volgatz causir un escais-nom"],"This groupchat requires a password":["Aquesta sala requesís un senhal"],"Password: ":["Senhal : "],"Submit":["Sosmetre"],"%1$s has entered the groupchat":["%1$s a rejonch la sala"],"%1$s has left the groupchat":["%1$s a quitat la sala"],"%1$s is now a moderator":["%1$s es ara moderator"],"%1$s is no longer a moderator":["%1$s es pas mai moderator"],"%1$s has been given a voice":["%1$s pòt parlar ara"],"%1$s has been muted":["%1$s pòt pas mai parlar"],"Change user\'s affiliation to admin":["Cambiar lo ròtle de l’utilizaire en administrator"],"Ban user by changing their affiliation to outcast":["Forabandir un utilizaire en cambiar son afiliacion"],"Clear the chat area":["Escafar la zòna de conversacion"],"Change user role to participant":["Cambiar lo ròtle de l’utilizaire en participant"],"Remove this groupchat":["Suprimir aquesta sala"],"Kick user from groupchat":["Expulsar l’utilizaire d’aquesta sala"],"Write in 3rd person":["Escriure a la tresena persona"],"Grant membership to a user":["Permetre a l’utilizaire d’èsser membre"],"Opens up the moderator tools GUI":["Dorbís las aisinas de moderacion"],"Remove user\'s ability to post messages":["Tirar lo drech d’enviar de messatges"],"Change your nickname":["Cambiar l’escais-nom"],"Grant moderator role to user":["Cambiar lo ròtle de l’utilizaire en moderator"],"Grant ownership of this groupchat":["Acordar la proprietat d’aquesta sala"],"Register your nickname":["Enregistrar l’escais-nom"],"Revoke the user\'s current affiliation":["Revocar l’afiliacion actuala de l’utilizaire"],"Set groupchat subject":["Definir lo subjècte de la sala"],"Set groupchat subject (alias for /subject)":["Definir lo subjècte de la sala (alias per /subject)"],"Allow muted user to post messages":["Permetre als utilizaires muts de publicar de messatges"],"Configure this groupchat":["Configurar d’aquesta sala"],"Hide topic":["Amagar subjècte"],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":["Quitar"],"Hide the list of participants":["Rescondre la lista dels participants"],"Forbidden: you do not have the necessary role in order to do that.":["Defendut : avètz pas lo ròtle necessari per far aquò."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Defendut : avètz pas l’afliacion que cal per aquò far."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Error : la comanda « %1$s » pren dos paramètres, l’escais-nom de l’utilizaire e la rason d’un biais opcional."],"Error: couldn\'t find a groupchat participant based on your arguments":["Error : impossible de trobar un participant dins la sala segon vòstres arguments"],"Error: found multiple groupchat participant based on your arguments":["Error : impossible de trobar mantun participants en utilizar vòstres paramètres"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["nom@exemple.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Vòstre escais-nom es « %1$s »"],"Error: invalid number of arguments":["Error : nombre d’arguments invalid"],"This action was done by %1$s.":["Aquesta accion es estada realizada per %1$s."],"The reason given is: \\"%1$s\\".":["La rason indicada es  : « %1$s »."],"Groupchats":["Salas"],"Add a new groupchat":["Ajustar una sala novèla"],"Query for groupchats":["Cercar una sala"],"Announcements":["Anóncias"],"Notification from %1$s":["Notificacion de %1$s"],"%1$s says":["%1$s ditz"],"has gone offline":["s’es desconnectat"],"has gone away":["es absent"],"is busy":["es ocupat"],"has come online":["s’es connectat"],"wants to be your contact":["vòl èsser vòstre contacte"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["A prepaus"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["Client XMPP %1$s liure %2$s que vos es fornit per %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Tradusètz %2$s dins vòstra lenga"],"Log out":["Desconnexion"],"Click to change your chat status":["Clicatz per cambiar vòstre estat"],"Show details about this chat client":["Mostrar mai d’informacion tocant aqueste client"],"Your avatar image":["Vòstre imatge d’avatar"],"Checkbox for selecting the following fingerprint":["Casa de marcar per seleccionar la detada OMEMO seguenta"],"Device without a fingerprint":["Periferic sens detada OMEMO"],"Other OMEMO-enabled devices":["Autres clients amb lo chiframent OMEMO activat"],"Checkbox to select fingerprints of all other OMEMO devices":["Casa de marcar per dire de seleccionar las detada OMEMA de totes los periferics"],"Remove checked devices and close":["Suprimir los clients OMEMO seleccionats e tampar"],"Select all":["O seleccionar tot"],"This device\'s OMEMO fingerprint":["Detada OMEMO d’aqueste client"],"Generate new keys and fingerprint":["Generar de nòvas claus e detadas"],"Your Profile":["Vòstre perfil"],"XMPP Address (JID)":["Adreça XMPP (JID)"],"Save and close":["Enregistrar e tampar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Utilizatz una virgula per dire de separar los ròtles. Vòstres ròtles son mostrats a costat de vòstre nom dins los messatges."],"OMEMO":["OMEMO"],"Sorry, an error happened while trying to save your profile data.":["O planhèm, quicòm a trucat pendent la salvagarda del perfil."],"You can check your browser\'s developer console for any error output.":["Podètz verificar totas las errors dins la consòla de desvolopament del navegador."],"Away":["Absent"],"Busy":["Ocupat"],"Custom status":["Estat personal"],"Offline":["Desconnectat"],"Online":["En linha"],"Away for long":["Absent de longa"],"Change chat status":["cambiar vòstre estat de chat"],"Personal status message":["Messatge d’estat personal"],"I am %1$s":["Soi %1$s"],"Are you sure you want to log out?":["Volètz vertadièrament vos desconnectar ?"],"online":["en linha"],"busy":["ocupat"],"away for long":["absent de longa"],"away":["absent"],"offline":["desconnectat"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s sembla pas aver un client que siá compatible amb OMEMO. Lo chiframent serà pas mai possible dins aqueste grop de discussion."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Utilizacion impossibla del chiframent del cap a la fin perque %1$s utiliza un client qu’es pas compatible amb OMEMO."],"Messages are being sent in plaintext":["Los messatges son enviats en clar"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["O planhèm, impossible d’enviar un messatge chifrat a %1$s perque requerís que siatz abonat a sas mesas a jorn de preséncia per dire de veire las informacions OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["O planhèm, impossible d’enviar un messatge chifrat perque lo servidor alonhat de %1$s es pas disponible"],"Unable to send an encrypted message due to an unexpected error.":["Mandadís impossible d’un messatge chifrat a causa d’una error imprevista."],"Sorry, an error occurred while trying to remove the devices.":["O planhèm, una error s’es producha en ensajar de suprimir los clients OMEMO."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Volètz vertadièrament generar de nòvas claus OMEMO ? Aquò tirarà las ancianas claus e totes los messatges ja deschifrats poiràn pas mai èsser deschifrats sus aqueste periferic."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["O planhèm, impossible de trobat un periferic al qual enviar un messatge chifrat amb OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Aquò es un messatge chifrat amb OMEMO, que vòstre client sembla pas prendre en carga. Per mai d’informacions, anatz veire https://conversations.im/omemo"]," e.g. conversejs.org":[" per exemple conversejs.org"],"Fetch registration form":["Recuperacion del formulari d’enregistrament"],"Tip: A list of public XMPP providers is available":["Astúcia : una lista publica de provesidors XMPP es disponibla"],"here":["aquí"],"Sorry, we\'re unable to connect to your chosen provider.":["Avèm pas pogut vos connectar a vòstre provesidor."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["O planhèm, lo provesidor es pas compatibla amb l’enregistrament  de compte en linha. Mercés d’ensajar amb un autre provesidor."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Quicòm a trucat pendent l’establiment de la connexion amb « %1$s ». Es segur qu’existís ?"],"Now logging you in":["Connexion"],"Registered successfully":["Corrèctament enregistrat"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Lo provesidor a regetat vòstra demanda d’inscripcion. Mercés de verificar que las donadas qu’avètz picadas sián corrèctas."],"Leave this groupchat":["Quitar aquesta sala"],"Click to toggle the list of open groupchats":["Clicar per dobrir la lista de las salas dobèrtas"],"Open Groupchats":["Salas dobèrtas"],"Are you sure you want to leave the groupchat %1$s?":["Volètz vertadièrament quitar la sala « %1$s » ?"],"Add":["Ajustar"],"Add a Contact":["Ajustar un contacte"],"This contact is busy":["Aqueste contacte es ocupat"],"This contact is online":["Aqueste contacte es connectat"],"This contact is offline":["Aqueste contacte es desconnectat"],"This contact is unavailable":["Aqueste contacte es pas disponible"],"This contact is away for an extended period":["Aqueste contacte es absent de longa"],"This contact is away":["Aqueste contacte es absent"],"Contact name":["Nom del contacte"],"Optional nickname":["Escais-nom opcional"],"Sorry, could not find a contact with that name":["Impossible de trobar un contacte amb aqueste nom"],"This contact has already been added":["Aqueste contacte es ja ajustat"],"Filter":["Filtrar"],"Filter by contact name":["Filtrar per nom de contacte"],"Filter by group name":["Filtrar per nom de grop"],"Filter by status":["Filtrar per estat"],"Any":["Cap"],"Unread":["Pas legit"],"Chatty":["Charraire"],"Extended Away":["Absent de longa"],"Click to remove %1$s as a contact":["Clicar per levar %1$s dels contactes"],"Click to accept the contact request from %1$s":["Clicatz per acceptar la demanda d’apondon de %1$s"],"Click to decline the contact request from %1$s":["Clicatz per regetar la demanda d’apondon de %1$s"],"Are you sure you want to decline this contact request?":["Volètz vertadièrament regetar aquesta demanda d’apondon als contactes ?"],"Contacts":["Contactes"],"Add a contact":["Ajustar un contacte"],"Re-sync your contacts":["Tornar sincronizar vòstres contactes"]}}}')}}]);
 //# sourceMappingURL=oc-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/pl-LC_MESSAGES-converse-po.js b/src/conversejs/locales/pl-LC_MESSAGES-converse-po.js
index 2f2127b1bc95e527b9f546e550e311e8a2b7685d..3423626bcbe7b02ed2078874f84ad77926bc352f 100644
--- a/src/conversejs/locales/pl-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/pl-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[166],{444:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"pl"},"Create your account":["Utwórz własne konto"],"Please enter the XMPP provider to register with:":["Proszę wprowadzić dostawcę XMPP, aby zarejestrować się:"],"Already have a chat account?":["Masz już konto na czacie?"],"Log in here":["Zaloguj się tutaj"],"Account Registration:":["Rejestracja Konta:"],"Register":["Zarejestruj się"],"Choose a different provider":["Wybierz innego dostawcę"],"Hold tight, we\'re fetching the registration form…":["Czekaj, pobieram formularz rejestracyjny…"],"Cancel":["Anuluj"],"The connection has dropped, attempting to reconnect.":["Połączenie zostało utracone, próbuję się połączyć ponownie."],"An error occurred while connecting to the chat server.":["Wystąpił błąd w czasie łączenia się z serwerem."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Problem z połączeniem do serwera XMPP w domenie: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Serwer XMPP nie oferuje wspieranego mechanizmu uwierzytelniania"],"Sorry, could not determine upload URL.":["Przepraszamy, nie można ustalić adresu URL przesyłania."],"Sorry, could not determine file upload URL.":["Przepraszam, nie udało się ustalić adresu URL wysyłania plików."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Niestety nie udało się przesłać pliku. Odpowiedź Twojego serwera: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Niestety nie udało się przesłać pliku."],"Sorry, looks like file upload is not supported by your server.":["Przepraszamy, wygląda na to, że przesyłanie plików nie jest obsługiwane przez serwer."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Rozmiar Twojego pliku, %1$s, przekracza maksymalny dozwolony przez Twój serwer, który wynosi %2$s."],"Smileys and emotions":["Emotikony i emocje"],"People":["Ludzie"],"Activities":["Działania"],"Travel":["Podróż"],"Objects":["Obiekty"],"Animals and nature":["Zwierzęta i przyroda"],"Food and drink":["Żywność i napoje"],"Symbols":["Symbole"],"Flags":["Flagi"],"Stickers":["Naklejki"],"This groupchat is not anonymous":["Ten czat grupowy nie jest anonimowy"],"This groupchat now shows unavailable members":["Ten czat grupowy pokazuje teraz niedostępnych członków"],"This groupchat does not show unavailable members":["Ten czat grupowy nie wyświetla niedostępnych członków"],"The groupchat configuration has changed":["Konfiguracja czatu grupowego uległa zmianie"],"Groupchat logging is now enabled":["Logowanie na czacie grupowym jest teraz włączone"],"Groupchat logging is now disabled":["Rejestrowanie czatu grupowego jest teraz wyłączone"],"This groupchat is now no longer anonymous":["Ten czat grupowy nie jest już anonimowy"],"This groupchat is now semi-anonymous":["Ten czat grupowy jest teraz częściowo anonimowy"],"This groupchat is now fully-anonymous":["Ten czat grupowy jest teraz w pełni anonimowy"],"A new groupchat has been created":["Utworzono nowy czat grupowy"],"Your nickname has been automatically set to %1$s":["Twój pseudonim został automatycznie ustawiony na %1$s"],"Your nickname has been changed to %1$s":["Twój pseudonim został zmieniony na %1$s"],"You have been banned from this groupchat":["Zostałeś zablokowany na tym czacie grupowym"],"You have been kicked from this groupchat":["Zostałeś wyrzucony z tego czatu grupowego"],"You have been removed from this groupchat because of an affiliation change":["Zostałeś usunięty z tego czatu grupowego z powodu zmiany przynależności"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Zostałeś usunięty z tego czatu grupowego, ponieważ zmienił się on na czat tylko dla członków i nie jesteś członkiem"],"You have been removed from this groupchat because the service hosting it is being shut down":["Zostałeś usunięty z tego czatu grupowego, ponieważ usługa hostingowa jest zamykana"],"Your message was not delivered because you weren\'t allowed to send it.":["Twoja wiadomość nie została dostarczona, ponieważ nie możesz jej wysłać."],"Your message was not delivered because you\'re not present in the groupchat.":["Twoja wiadomość nie została dostarczona, ponieważ nie jesteś obecny na czacie grupowym."],"You\'re not allowed to register yourself in this groupchat.":["Nie możesz się zarejestrować w tym czacie grupowym."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nie możesz się zarejestrować w tym czacie grupowym, ponieważ jest on tylko dla członków."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nie można zarejestrować Twojego pseudonimu w tym czacie grupowym, nie obsługuje rejestracji."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nie można zarejestrować Twojego pseudonimu w tym czacie grupowym, dostarczono nieprawidłowy formularz danych."],"Topic set by %1$s":["Temat ustawiony przez %1$s"],"Topic cleared by %1$s":["Temat wyczyszczony przez %1$s"],"%1$s has been banned":["%1$s został zbanowany"],"%1$s\'s nickname has changed":["%1$s zmienił pseudonim"],"%1$s has been kicked out":["%1$s został wyrzucony"],"%1$s has been removed because of an affiliation change":["%1$s został usunięty z powodu zmiany przynależności"],"%1$s has been removed for not being a member":["%1$s został usunięty z powodu braku członkostwa"],"%1$s is no longer an admin of this groupchat":["%1$s nie jest już administratorem tego pokoju"],"%1$s is no longer an owner of this groupchat":["%1$s nie jest już właścicielem tego pokoju"],"%1$s is no longer banned from this groupchat":["%1$s nie jest już zablokowany w tym pokoju"],"%1$s is no longer a member of this groupchat":["%1$s nie jest już członkiem tej rozmowy grupowej"],"%1$s is now a member of this groupchat":["%1$s jest teraz członkiem tej rozmowy grupowej"],"%1$s is now an %2$s of this groupchat":["%1$s został %2$s tego pokoju"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Pseudonim, który wybrałeś jest zastrzeżony lub obecnie używany, wybierz inny."],"Password incorrect":["Nieprawidłowe hasło"],"You are not on the member list of this groupchat.":["Nie jesteś na liście członków tej rozmowy grupowej."],"You have been banned from this groupchat.":["Zostałeś zablokowany na tym czacie grupowym"],"You are not allowed to create new groupchats.":["Nie wolno ci tworzyć nowych rozmów grupowych."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Twój pseudonim nie jest zgodny z zasadami tej rozmowy grupowej."],"This groupchat does not (yet) exist.":["Ta rozmowa grupowa nie istnieje (jeszcze)."],"This groupchat has reached its maximum number of participants.":["Ta rozmowa grupowa osiągnęła swoją maksymalną liczbę uczestników."],"Remote server not found":["Nie znaleziono zdalnego serwera"],"The explanation given is: \\"%1$s\\".":["Podane wyjaśnienie to: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s zaprosił cię do udziału w rozmowie grupowej: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s zaprosił cię do udziału w rozmowie grupowej: %2$s, i zostawił następujący powód: \\"%3$s\\""],"Error":["Błąd"],"Sorry, something went wrong while trying to save your bookmark.":["Przepraszamy, wystąpił błąd podczas próby zapisania zakładki."],"Timeout Error":["Błąd limitu czasu"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Serwer nie zwrócił zakładek w wyznaczonym czasie. Możesz przeładować stronę, aby poprosić o nie ponownie."],"My contacts":["Moje kontakty"],"Pending contacts":["Oczekujące kontakty"],"Contact requests":["Prośby o kontakt"],"Ungrouped":["Nie zgrupowane"],"New messages":["Nowe wiadomości"],"Sorry, there was an error while trying to add %1$s as a contact.":["Przepraszam, wystąpił błąd podczas próby dodania %1$s jako kontaktu."],"This client does not allow presence subscriptions":["Ten klient nie zezwala na subskrypcje obecności"],"Click to hide these contacts":["Kliknij, aby ukryć te kontakty"],"Unbookmark this groupchat":["Usuń zakładkę do tego pokoju"],"Click to open this groupchat":["Kliknij, aby otworzyć ten czat grupowy"],"Click to toggle the bookmarks list":["Kliknij, aby przełączyć listę zakładek"],"Bookmarks":["Zakładki"],"Bookmark this groupchat":["Dodaj zakładkę tego pokoju"],"Would you like this groupchat to be automatically joined upon startup?":["Czy chcesz automatycznie dołączać do tej grupy podczas startu ?"],"The name for this bookmark:":["Nazwa dla tej zakładki:"],"What should your nickname for this groupchat be?":["Jaki powinien być twój pseudonim dla tej rozmowy grupowej?"],"Save":["Zapisz"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Czy na pewno chcesz usunąć zakładkę \\"%1$s\\"?"],"Close":["Zamknij"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Pobierz plik audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Pobierz plik \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Wersja wiadomości"],"Retry":[""],"Uploading file:":["Przesyłany plik:"],"%1$s has removed this message":["%1$s usunął tę wiadomość"],"This message has been edited":["Ta wiadomość została zmodyfikowana"],"Show more":["Pokaż więcej"],"No message history available.":["Historia wiadomości niedostępna."],"Search results":["Wyniki wyszukiwania"],"Search":["Szukaj"],"Insert emojis":["Wstaw emotkę"],"Send the message":["Wyślij wiadomość"],"Start a call":["Rozpocznij rozmowę"],"Message characters remaining":["Pozostałe znaki wiadomości"],"Choose a file to send":["Wybierz plik do wysłania"],"Click to write as a normal (non-spoiler) message":["Kliknij, aby napisać jako zwykłą wiadomość (bez spoilera)"],"Click to write your message as a spoiler":["Kliknij, aby napisać wiadomość jako spoiler"],"The User\'s Profile Image":["Zdjęcie profilowe użytkownika"],"Trusted":["Zaufany"],"Untrusted":["Niezaufany"],"OMEMO Fingerprints":["Odciski palców OMEMO"],"Remove as contact":["Usuń jako kontakt"],"XMPP Address":["Adres XMPP"],"Email":["Email"],"Full Name":["Pełna nazwa"],"Nickname":["Nick"],"Refresh":["Odśwież"],"Role":["Rola"],"URL":["Adres URL"],"%1$s is typing":["%1$s pisze"],"%1$s has stopped typing":["%1$s przestał pisać"],"%1$s has gone away":["%1$s odszedł od klawiatury"],"Remove messages":["Usuń wiadomości"],"Close this chat":["Zamknij ten czat"],"Write in the third person":["Napisz w trzeciej osobie"],"Show this menu":["Pokaż to menu"],"Hidden message":["Ukryta wiadomość"],"Message":["Wiadomość"],"Optional hint":["Opcjonalna wskazówka"],"You have unread messages":["Masz nieprzeczytane wiadomości"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Bądź świadomy, że inni klienci (i serwery) XMPP/Jabber mogą jeszcze nie obsługiwać zwijania i że ta wiadomość może nie być wszędzie usuwana."],"Are you sure you want to retract this message?":["Jesteś pewien, że chcesz wycofać tę wiadomość?"],"Confirm":["Potwierdź"],"You have an unsent message which will be lost if you continue. Are you sure?":["Masz niewysłaną wiadomość, która zostanie utracona, jeśli będziesz kontynuować. Jesteś pewien?"],"Are you sure you want to clear the messages from this conversation?":["Jesteś pewien, że chcesz wyczyścić wiadomości z tej rozmowy?"],"%1$s has gone offline":["%1$s rozłączył się"],"%1$s is busy":["%1$s jest zajęty"],"%1$s is online":["%1$s jest dostępny"],"Sorry, something went wrong while trying to refresh":["Przepraszam, coś poszło nie tak podczas próby odświeżenia"],"Are you sure you want to remove this contact?":["Jesteś pewien, że chcesz usunąć ten kontakt?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Przepraszam, wystąpił błąd podczas próby usunięcia %1$s jako kontaktu."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Aby poprawić wydajność, przechowujemy dane użytkownika w pamięci podręcznej tej przeglądarki. Usuń zaznaczenie tego pola, jeśli jest to komputer publiczny lub jeśli chcesz, aby Twoje dane zostały usunięte po wylogowaniu się. Ważne jest, aby wyraźnie się wylogować, w przeciwnym razie nie wszystkie dane zbuforowane mogą zostać usunięte. Należy pamiętać, że w przypadku korzystania z niezaufanego urządzenia, szyfrowanie OMEMO NIE jest dostępne."],"This is a trusted device":["To jest zaufane urządzenie"],"Create an account":["Utwórz konto"],"Don\'t have a chat account?":["Nie masz konta na czacie?"],"Log in":["Zaloguj się"],"Disconnected":["Rozłączono"],"Click here to log in anonymously":["Kliknij tutaj aby zalogować się anonimowo"],"Username":["Nazwa użytkownika"],"user@domain":["użytkownik@domena"],"Please enter a valid XMPP address":["Proszę wpisać prawidłowy adres XMPP"],"Chat Contacts":["Kontakty czatu"],"Toggle chat":["Przełącz czat"],"Click to restore this chat":["Kliknij, aby przywrócić ten czat"],"Minimized":["Zminimalizowane"],"This field is required":["To pole jest wymagane"],"Join":["Dołącz"],"Enter a new Groupchat":["Wejdź do pokoju"],"name@conference.example.org":["nazwa@konferencja.domena.pl"],"Groupchat name":["Nazwa czatu grupowego"],"Groupchat address":["Adres  pokoju"],"Invite":["Zaproś"],"Show groupchats":["Pokaż pokoje"],"Server address":["Adres serwera"],"Show more information on this groupchat":["Pokaż więcej informacji na temat tego czatu grupowego"],"Query for Groupchats":["Wyszukaj pokoje"],"Description:":["Opis:"],"Groupchat Address (JID):":["Nazwa pokoju (JID):"],"Participants:":["Uczestnicy:"],"Features:":["Właściwości:"],"Requires authentication":["Wymaga uwierzytelnienia"],"Hidden":["Ukryty"],"Requires an invitation":["Wymaga zaproszenia"],"Moderated":["Moderowany"],"Non-anonymous":["Nieanonimowy"],"Open":["Otwarte"],"Permanent":["Stały"],"Public":["Publiczny"],"Semi-anonymous":["Częściowo anonimowy"],"Temporary":["Tymczasowe"],"Unmoderated":["Niemoderowane"],"conference.example.org":["conference.domena.pl"],"No groupchats found":["Nie znaleziono pokojów"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatorzy są uprzywilejowanymi użytkownikami, którzy mogą zmieniać role innych użytkowników (z wyjątkiem tych z uprawnieniami administratora lub właściciela)."],"The default role, implies that you can read and write messages.":["Domyślna rola, oznacza, że możesz czytać i pisać wiadomości."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Odwiedzający nie mogą pisać wiadomości w moderowanym czacie dla wielu użytkowników."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Właściciel to najwyższa przynależność. Właściciele mogą modyfikować role i Afiliacje wszystkich innych użytkowników."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin jest drugą co do wielkości afiliacją. Administratorzy mogą modyfikować role i przynależność wszystkich innych użytkowników oprócz właścicieli."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Aby zablokować użytkownika, dajesz mu przynależność \\"outcast\\"."],"Change role":["Zmiana roli"],"New Role":["Nowa rola"],"Reason":["Powód"],"Change affiliation":["Zmień przynależność"],"New affiliation":["Nowa przynależność"],"Affiliation":["Przynależność"],"Moderator Tools":["Narzędzia moderatora"],"No users with that affiliation found.":["Nie znaleziono użytkowników z tą przynależnością."],"No users with that role found.":["Nie znaleziono użytkowników z tą rolą."],"Type here to filter the search results":[""],"Show users":["Pokaż użytkowników"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Role są przypisane do użytkowników, aby przyznać lub odmówić im pewnych umiejętności w czacie dla wielu użytkowników. Są one przypisane w sposób wyraźny lub domyślny jako część przynależności. Rola, która nie jest związana z przynależnością, jest ważna tylko na czas trwania sesji użytkownika."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Przynależność jest długotrwałym uprawnieniem, które zazwyczaj wiąże się z pewną rolą i które przyznaje przywileje i obowiązki. Na przykład administratorzy i właściciele mają automatycznie rolę moderatora."],"Sorry, something went wrong while trying to set the affiliation":["Przepraszam, coś poszło nie tak podczas próby ustalenia przynależności"],"Affiliation changed":["Zmiana przynależności"],"Role changed":["Zmieniono rolę"],"You\'re not allowed to make that change":["Nie możesz dokonać tej zmiany"],"Sorry, something went wrong while trying to set the role":["Przepraszam, coś poszło nie tak podczas próby ustawienia roli"],"Topic":["Temat"],"Topic author":["Autor tematu"],"Groupchat address (JID)":["Nazwa czatu grupowego (JID)"],"Message archiving":["Archiwizowanie wiadomości"],"Messages are archived on the server":["Wiadomości są archiwizowane na serwerze"],"Description":["Opis"],"Features":["Możliwości"],"This groupchat is not publicly searchable":["Ten czat grupowy nie jest publicznie dostępny"],"This groupchat is restricted to members only":["Ta rozmowa grupowa jest ograniczona tylko do członków"],"Members only":["Tylko dla członków"],"Participants entering this groupchat need to request permission to write":["Uczestnicy wchodzący w ten czat grupowy muszą poprosić o pozwolenie na pisanie"],"Name":["Nazwa"],"This groupchat does not require a password upon entry":["Ten czat grupowy nie wymaga hasła przy wejściu"],"No password required":["Hasło nie jest wymagane"],"Not anonymous":["Nie anonimowy"],"All other groupchat participants can see your XMPP address":["Wszyscy uczestnicy grupowego czatu widzą Twoją nazwę użytkownika XMPP"],"Not moderated":["Nie moderowany"],"Participants entering this groupchat can write right away":["Uczestnicy wchodzący w ten czat grupowy mogą pisać od razu"],"Online users":["Dostępni użytkownicy"],"Anyone can join this groupchat":["Każdy może dołączyć do tego czatu grupowego"],"This groupchat requires a password before entry":["Pokój rozmów wymaga podania hasła"],"Password protected":["Chronione hasłem"],"Persistent":["Trwały"],"This groupchat persists even if it\'s unoccupied":["Ten pokój przetrwa nawet bez użytkowników"],"Only moderators can see your XMPP address":["Tylko moderatorzy mogą zobaczyć Twój adres XMPP"],"This groupchat will disappear once the last person leaves":["Ten pokój zniknie po opuszczeniu go przez ostatniego użytkownika"],"This groupchat is publicly searchable":["Ten czat grupowy jest publicznie dostępny"],"Groupchat info for %1$s":["Informacje o czacie grupowym dla %1$s"],"You\'re not allowed to send messages in this room":["Nie możesz wysyłać wiadomości w tym pokoju"],"The conversation has moved. Click below to enter.":["Rozmowa została przeniesiona. Kliknij poniżej aby wejść."],"This groupchat no longer exists":["Ten czat grupowy już nie istnieje"],"Enter groupchat":["Wejdź do pokoju"],"Choose a nickname to enter":["Wybierz pseudonim, który chcesz wprowadzić"],"Please choose your nickname":["Proszę wybrać swój pseudonim"],"This groupchat requires a password":["Wstęp do pokoju wymaga podania hasła"],"Password: ":["Hasło: "],"Submit":["Wyślij"],"This user is a moderator.":["Ten użytkownik jest moderatorem."],"This user can send messages in this groupchat.":["Ten użytkownik może wysyłać wiadomości w tym pokoju."],"This user can NOT send messages in this groupchat.":["Ten człowiek NIE może rozmawiać w tym pokoju."],"Owner":["Właściciel"],"Admin":["Administrator"],"Member":["Członek"],"Moderator":["Moderator"],"Visitor":["Gość"],"Click to mention %1$s in your message.":["Kliknij aby wspomnieć o %1$s we wiadomości."],"Participants":["Uczestnicy"],"%1$s has entered the groupchat":["%1$s wszedł do pokoju"],"%1$s has left the groupchat":["%1$s opuścił pokój"],"%1$s is now a moderator":["%1$s został moderatorem"],"%1$s is no longer a moderator":["%1$s nie jest już moderatorem"],"%1$s has been given a voice":["%1$s dostał głos"],"%1$s has been muted":["%1$s został wyciszony"],"Change user\'s affiliation to admin":["Zmiana przynależności użytkownika do administratora"],"Ban user by changing their affiliation to outcast":["Zablokuj użytkownika, zmieniając ich przynależność do Outcast"],"Clear the chat area":["Wyczyść obszar czatu"],"Close this groupchat":["Zamknij ten pokój"],"Change user role to participant":["Zmiana roli użytkownika na uczestnika"],"Remove this groupchat":["Usuń ten czat grupowy"],"Kick user from groupchat":["Wyrzuć użytkownika z czatu grupowego"],"Write in 3rd person":["Pisz w trzeciej osobie"],"Grant membership to a user":["Przyznanie członkostwa użytkownikowi"],"Opens up the moderator tools GUI":["Otwiera narzędzia moderatora GUI"],"Remove user\'s ability to post messages":["Usunięcie możliwości wysyłania wiadomości przez użytkownika"],"Change your nickname":["Zmień swój pseudonim"],"Grant moderator role to user":["Przyznaj rolę moderatora użytkownikowi"],"Grant ownership of this groupchat":["Uczyń właścicielem pokoju"],"Register your nickname":["Zarejestruj swój nick"],"Revoke the user\'s current affiliation":["Wycofanie aktualnej przynależności użytkownika"],"Set groupchat subject":["Ustaw temat rozmowy grupowej"],"Set groupchat subject (alias for /subject)":["Ustaw temat rozmowy (alias dla /subject)"],"Allow muted user to post messages":["Pozwól uciszonemu człowiekowi na rozmowę"],"You are about to retract this message.":["Masz zamiar wycofać tę wiadomość."],"You may optionally include a message, explaining the reason for the retraction.":["Opcjonalnie możesz dołączyć wiadomość wyjaśniającą powód zwinięcia."],"Message Retraction":["Wycofanie komunikatu"],"Optional reason":["Opcjonalny powód"],"A timeout occurred while trying to retract the message":["Podczas próby cofnięcia komunikatu pojawił się limit czasu"],"Sorry, you\'re not allowed to retract this message.":["Przepraszam, nie wolno ci wycofać tej wiadomości."],"Configure this groupchat":["Skonfiguruj ten pokój"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Ukrycie listy uczestników"],"Forbidden: you do not have the necessary role in order to do that.":["Zakazane: nie masz do tego niezbędnej roli."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Zabronione: nie masz dostępu ze względu na brak przynależności.."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Błąd: polecenie \\"%1$s\\" przyjmuje dwa argumenty: pseudonim i opcjonalnie powód."],"Error: couldn\'t find a groupchat participant based on your arguments":["Błąd: nie udało się znaleźć uczestnika czatu grupowego na podstawie twoich argumentów"],"Error: found multiple groupchat participant based on your arguments":["Błąd: znaleziono wielu uczestników czatu grupowego na podstawie twoich argumentów"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["np. użytkownik@przykładowa-domena.pl"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Twój pseudonim to \\"%1$s\\""],"Error: invalid number of arguments":["Błąd: nieprawidłowa liczba argumentów"],"This action was done by %1$s.":["Ta akcja została wykonana przez %1$s."],"The reason given is: \\"%1$s\\".":["Podany powód to: \\"%1$s\\"."],"Groupchats":["Rozmowy grupowe"],"Add a new groupchat":["Dodaj nową grupę"],"Query for groupchats":["Wyszukaj pokoje"],"Announcements":["Ogłoszenia"],"Notification from %1$s":["Powiadomienie od %1$s"],"%1$s says":["%1$s powiedział"],"has gone offline":["wyłączył się"],"has gone away":["uciekł"],"is busy":["zajęty"],"has come online":["połączył się"],"wants to be your contact":["chce być twoim kontaktem"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Informacje"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s klient czatu XMPP dostarczony do Ciebie przez %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Przetłumaczyć %2$s na swój własny język"],"Log out":["Wyloguj się"],"Click to change your chat status":["Kliknij aby zmienić status rozmowy"],"Show details about this chat client":["Pokaż szczegóły na temat tego klienta czatu"],"Your avatar image":["Twój awatar"],"Checkbox for selecting the following fingerprint":["Pole wyboru dla wybrania następującego odcisku palca"],"Device without a fingerprint":["Urządzenie bez odcisku palca"],"Other OMEMO-enabled devices":["Pozostałe urządzenia z funkcją OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Zaznacz pole wyboru, aby wybrać odciski palców wszystkich innych urządzeń OMEMO"],"Remove checked devices and close":["Usuń sprawdzone urządzenia i zamknij"],"Select all":["Wybierz wszystkie"],"This device\'s OMEMO fingerprint":["Odcisk palca OMEMO tego urządzenia"],"Generate new keys and fingerprint":["Wygeneruj nowe klucze i odcisk palca"],"Your Profile":["Twój profil"],"XMPP Address (JID)":["Adres XMPP (JID)"],"Save and close":["Zapisz i Zamknij"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Użyj przecinków, aby rozdzielić wiele ról. Twoje role są wyświetlane obok Twojego imienia i nazwiska w wiadomościach czatu."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Wystąpił błąd w trakcie próby zapisania Twoich danych profilowych."],"You can check your browser\'s developer console for any error output.":["Możesz sprawdzić konsolę dewelopera przeglądarki pod kątem błędów."],"Away":["Nieobecny"],"Busy":["Zajęty"],"Custom status":["Własny status"],"Offline":["Rozłączony"],"Online":["Dostępny"],"Away for long":["Dłużej nieobecny"],"Change chat status":["Zmień status czatu"],"Personal status message":["Osobisty komunikat o statusie"],"I am %1$s":["Jestem %1$s"],"Are you sure you want to log out?":["Jesteś pewien, że chcesz się wylogować?"],"online":["dostępny"],"busy":["zajęty"],"away for long":["dłużej nieobecny"],"away":["nieobecny"],"offline":["rozłączony"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Ups, problem z odszyfrowaniem odebranego komunikatu OMEMO z powodu błędu."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s wydaje się mieć klienta, który nie obsługuje OMEMO. Szyfrowany czat nie będzie już możliwy w tym pokoju."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Nie można używać szyfrowania typu end-to-end, ponieważ %1$s używa klienta, który nie obsługuje OMEMO."],"Messages are being sent in plaintext":["Wiadomości są wysyłane w postaci zwykłego tekstu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Wystąpił błąd w czasie próby usunięcia urządzenia."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Czy na pewno chcesz wygenerować nowe klucze OMEMO? Spowoduje to usunięcie starych kluczy, a wszystkie wcześniej zaszyfrowane wiadomości nie będą już mogły być odszyfrowywane na tym urządzeniu."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Przepraszamy, nie jesteśmy w stanie wysłać zaszyfrowanej wiadomości, ponieważ %1$s wymaga subskrypcji ich statusu, aby zobaczyć ich informacje OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Przepraszamy, nie jesteśmy w stanie wysłać zaszyfrowanej wiadomości, ponieważ nie można było znaleźć zdalnego serwera dla %1$s"],"Unable to send an encrypted message due to an unexpected error.":["Przepraszamy, z powodu błędu nie udało się wysłać wiadomości."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Przepraszamy, nie znaleziono urządzeń, do których możemy wysyłać zaszyfrowane wiadomości OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["To jest zaszyfrowana wiadomość OMEMO, której twój klient nie obsługuje. Więcej informacji na stronie https://conversations.im/omemo"]," e.g. conversejs.org":[" np. conversejs.org"],"Fetch registration form":["Pobierz formularz rejestracyjny"],"Tip: A list of public XMPP providers is available":["Porada: lista publicznych dostawców XMPP jest dostępna"],"here":["tutaj"],"Sorry, we\'re unable to connect to your chosen provider.":["Wystąpił problem z nawiązaniem połączenia się z wybranym dostawcą."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Przepraszamy, ale podany dostawca nie obsługuje rejestracji. Spróbuj wskazać innego dostawcę."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Coś poszło nie tak podczas nawiązywania połączenia z \\"%1$s\\". Jesteś pewien, że on istnieje?"],"Now logging you in":["Teraz loguję się"],"Registered successfully":["Zarejestrowany pomyślnie"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Dostawca odrzucił twoją próbę rejestracji. Sprawdź proszę poprawność danych które zostały wprowadzone."],"Leave this groupchat":["Opuść ten pokój"],"Click to toggle the list of open groupchats":["Kliknij, aby przełączyć listę otwartych czatów grupowych"],"Open Groupchats":["Otwarte rozmowy grupowe"],"Are you sure you want to leave the groupchat %1$s?":["Jesteś pewny, że chcesz wyjść z grupowego czatu %1$s?"],"Add":["Dodaj"],"Add a Contact":["Dodaj kontakt"],"This contact is busy":["Kontakt jest zajęty"],"This contact is online":["Kontakt jest połączony"],"This contact is offline":["Kontakt jest niepołączony"],"This contact is unavailable":["Kontakt jest niedostępny"],"This contact is away for an extended period":["Kontakt jest nieobecny przez dłuższą chwilę"],"This contact is away":["Kontakt jest nieobecny"],"Contact name":["Nazwa kontaktu"],"Optional nickname":["Opcjonalny nick"],"Sorry, could not find a contact with that name":["Przepraszamy, nie można odnaleźć kontaktu z tą nazwą"],"This contact has already been added":["Ten kontakt został już dodany"],"Filter":["Filtr"],"Filter by contact name":["Filtruj według nazwy kontaktu"],"Filter by group name":["Filtruj według nazwy grupy"],"Filter by status":["Filtruj według stanu"],"Any":["Dowolny"],"Unread":["Nieprzeczytane"],"Chatty":["Gotowy do rozmowy"],"Extended Away":["Dłuższa nieobecność"],"Click to remove %1$s as a contact":["Kliknij, aby usunąć %1$s jako kontakt"],"Click to accept the contact request from %1$s":["Kliknij, aby zaakceptować prośbę o kontakt od %1$s"],"Click to decline the contact request from %1$s":["Kliknij, aby odrzucić wniosek o kontakt z %1$s"],"Are you sure you want to decline this contact request?":["Czy potwierdzasz odrzucenie chęci nawiązania kontaktu?"],"Contacts":["Kontakty"],"Add a contact":["Dodaj kontakt"],"Re-sync your contacts":["Ponownie zsynchronizuj swoje kontakty"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[166],{532:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"pl"},"Create your account":["Utwórz własne konto"],"Please enter the XMPP provider to register with:":["Proszę wprowadzić dostawcę XMPP, aby zarejestrować się:"],"Already have a chat account?":["Masz już konto na czacie?"],"Log in here":["Zaloguj się tutaj"],"Account Registration:":["Rejestracja Konta:"],"Register":["Zarejestruj się"],"Choose a different provider":["Wybierz innego dostawcę"],"Hold tight, we\'re fetching the registration form…":["Czekaj, pobieram formularz rejestracyjny…"],"Cancel":["Anuluj"],"The connection has dropped, attempting to reconnect.":["Połączenie zostało utracone, próbuję się połączyć ponownie."],"An error occurred while connecting to the chat server.":["Wystąpił błąd w czasie łączenia się z serwerem."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Problem z połączeniem do serwera XMPP w domenie: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Serwer XMPP nie oferuje wspieranego mechanizmu uwierzytelniania"],"Sorry, could not determine upload URL.":["Przepraszamy, nie można ustalić adresu URL przesyłania."],"Sorry, could not determine file upload URL.":["Przepraszam, nie udało się ustalić adresu URL wysyłania plików."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Niestety nie udało się przesłać pliku. Odpowiedź Twojego serwera: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Niestety nie udało się przesłać pliku."],"Sorry, looks like file upload is not supported by your server.":["Przepraszamy, wygląda na to, że przesyłanie plików nie jest obsługiwane przez serwer."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Rozmiar Twojego pliku, %1$s, przekracza maksymalny dozwolony przez Twój serwer, który wynosi %2$s."],"Smileys and emotions":["Emotikony i emocje"],"People":["Ludzie"],"Activities":["Działania"],"Travel":["Podróż"],"Objects":["Obiekty"],"Animals and nature":["Zwierzęta i przyroda"],"Food and drink":["Żywność i napoje"],"Symbols":["Symbole"],"Flags":["Flagi"],"Stickers":["Naklejki"],"This groupchat is not anonymous":["Ten czat grupowy nie jest anonimowy"],"This groupchat now shows unavailable members":["Ten czat grupowy pokazuje teraz niedostępnych członków"],"This groupchat does not show unavailable members":["Ten czat grupowy nie wyświetla niedostępnych członków"],"The groupchat configuration has changed":["Konfiguracja czatu grupowego uległa zmianie"],"Groupchat logging is now enabled":["Logowanie na czacie grupowym jest teraz włączone"],"Groupchat logging is now disabled":["Rejestrowanie czatu grupowego jest teraz wyłączone"],"This groupchat is now no longer anonymous":["Ten czat grupowy nie jest już anonimowy"],"This groupchat is now semi-anonymous":["Ten czat grupowy jest teraz częściowo anonimowy"],"This groupchat is now fully-anonymous":["Ten czat grupowy jest teraz w pełni anonimowy"],"A new groupchat has been created":["Utworzono nowy czat grupowy"],"Your nickname has been automatically set to %1$s":["Twój pseudonim został automatycznie ustawiony na %1$s"],"Your nickname has been changed to %1$s":["Twój pseudonim został zmieniony na %1$s"],"You have been banned from this groupchat":["Zostałeś zablokowany na tym czacie grupowym"],"You have been kicked from this groupchat":["Zostałeś wyrzucony z tego czatu grupowego"],"You have been removed from this groupchat because of an affiliation change":["Zostałeś usunięty z tego czatu grupowego z powodu zmiany przynależności"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Zostałeś usunięty z tego czatu grupowego, ponieważ zmienił się on na czat tylko dla członków i nie jesteś członkiem"],"You have been removed from this groupchat because the service hosting it is being shut down":["Zostałeś usunięty z tego czatu grupowego, ponieważ usługa hostingowa jest zamykana"],"Your message was not delivered because you weren\'t allowed to send it.":["Twoja wiadomość nie została dostarczona, ponieważ nie możesz jej wysłać."],"Your message was not delivered because you\'re not present in the groupchat.":["Twoja wiadomość nie została dostarczona, ponieważ nie jesteś obecny na czacie grupowym."],"You\'re not allowed to register yourself in this groupchat.":["Nie możesz się zarejestrować w tym czacie grupowym."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Nie możesz się zarejestrować w tym czacie grupowym, ponieważ jest on tylko dla członków."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Nie można zarejestrować Twojego pseudonimu w tym czacie grupowym, nie obsługuje rejestracji."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Nie można zarejestrować Twojego pseudonimu w tym czacie grupowym, dostarczono nieprawidłowy formularz danych."],"Topic set by %1$s":["Temat ustawiony przez %1$s"],"Topic cleared by %1$s":["Temat wyczyszczony przez %1$s"],"%1$s has been banned":["%1$s został zbanowany"],"%1$s\'s nickname has changed":["%1$s zmienił pseudonim"],"%1$s has been kicked out":["%1$s został wyrzucony"],"%1$s has been removed because of an affiliation change":["%1$s został usunięty z powodu zmiany przynależności"],"%1$s has been removed for not being a member":["%1$s został usunięty z powodu braku członkostwa"],"%1$s is no longer an admin of this groupchat":["%1$s nie jest już administratorem tego pokoju"],"%1$s is no longer an owner of this groupchat":["%1$s nie jest już właścicielem tego pokoju"],"%1$s is no longer banned from this groupchat":["%1$s nie jest już zablokowany w tym pokoju"],"%1$s is no longer a member of this groupchat":["%1$s nie jest już członkiem tej rozmowy grupowej"],"%1$s is now a member of this groupchat":["%1$s jest teraz członkiem tej rozmowy grupowej"],"%1$s is now an %2$s of this groupchat":["%1$s został %2$s tego pokoju"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Pseudonim, który wybrałeś jest zastrzeżony lub obecnie używany, wybierz inny."],"Password incorrect":["Nieprawidłowe hasło"],"You are not on the member list of this groupchat.":["Nie jesteś na liście członków tej rozmowy grupowej."],"You have been banned from this groupchat.":["Zostałeś zablokowany na tym czacie grupowym"],"You are not allowed to create new groupchats.":["Nie wolno ci tworzyć nowych rozmów grupowych."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Twój pseudonim nie jest zgodny z zasadami tej rozmowy grupowej."],"This groupchat does not (yet) exist.":["Ta rozmowa grupowa nie istnieje (jeszcze)."],"This groupchat has reached its maximum number of participants.":["Ta rozmowa grupowa osiągnęła swoją maksymalną liczbę uczestników."],"Remote server not found":["Nie znaleziono zdalnego serwera"],"The explanation given is: \\"%1$s\\".":["Podane wyjaśnienie to: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s zaprosił cię do udziału w rozmowie grupowej: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s zaprosił cię do udziału w rozmowie grupowej: %2$s, i zostawił następujący powód: \\"%3$s\\""],"Error":["Błąd"],"Sorry, something went wrong while trying to save your bookmark.":["Przepraszamy, wystąpił błąd podczas próby zapisania zakładki."],"Timeout Error":["Błąd limitu czasu"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Serwer nie zwrócił zakładek w wyznaczonym czasie. Możesz przeładować stronę, aby poprosić o nie ponownie."],"My contacts":["Moje kontakty"],"Pending contacts":["Oczekujące kontakty"],"Contact requests":["Prośby o kontakt"],"Ungrouped":["Nie zgrupowane"],"New messages":["Nowe wiadomości"],"Sorry, there was an error while trying to add %1$s as a contact.":["Przepraszam, wystąpił błąd podczas próby dodania %1$s jako kontaktu."],"This client does not allow presence subscriptions":["Ten klient nie zezwala na subskrypcje obecności"],"Click to hide these contacts":["Kliknij, aby ukryć te kontakty"],"Unbookmark this groupchat":["Usuń zakładkę do tego pokoju"],"Click to open this groupchat":["Kliknij, aby otworzyć ten czat grupowy"],"Click to toggle the bookmarks list":["Kliknij, aby przełączyć listę zakładek"],"Bookmarks":["Zakładki"],"Bookmark this groupchat":["Dodaj zakładkę tego pokoju"],"Would you like this groupchat to be automatically joined upon startup?":["Czy chcesz automatycznie dołączać do tej grupy podczas startu ?"],"The name for this bookmark:":["Nazwa dla tej zakładki:"],"What should your nickname for this groupchat be?":["Jaki powinien być twój pseudonim dla tej rozmowy grupowej?"],"Save":["Zapisz"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Czy na pewno chcesz usunąć zakładkę \\"%1$s\\"?"],"Close":["Zamknij"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Pobierz plik audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Pobierz plik \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Wersja wiadomości"],"Retry":[""],"Uploading file:":["Przesyłany plik:"],"%1$s has removed this message":["%1$s usunął tę wiadomość"],"This message has been edited":["Ta wiadomość została zmodyfikowana"],"Show more":["Pokaż więcej"],"No message history available.":["Historia wiadomości niedostępna."],"Search results":["Wyniki wyszukiwania"],"Search":["Szukaj"],"Insert emojis":["Wstaw emotkę"],"Send the message":["Wyślij wiadomość"],"Start a call":["Rozpocznij rozmowę"],"Message characters remaining":["Pozostałe znaki wiadomości"],"Choose a file to send":["Wybierz plik do wysłania"],"Click to write as a normal (non-spoiler) message":["Kliknij, aby napisać jako zwykłą wiadomość (bez spoilera)"],"Click to write your message as a spoiler":["Kliknij, aby napisać wiadomość jako spoiler"],"The User\'s Profile Image":["Zdjęcie profilowe użytkownika"],"Trusted":["Zaufany"],"Untrusted":["Niezaufany"],"OMEMO Fingerprints":["Odciski palców OMEMO"],"Remove as contact":["Usuń jako kontakt"],"XMPP Address":["Adres XMPP"],"Email":["E-mail"],"Full Name":["Pełna nazwa"],"Nickname":["Nick"],"Refresh":["Odśwież"],"Role":["Rola"],"URL":["Adres URL"],"%1$s is typing":["%1$s pisze"],"%1$s has stopped typing":["%1$s przestał pisać"],"%1$s has gone away":["%1$s odszedł od klawiatury"],"Remove messages":["Usuń wiadomości"],"Close this chat":["Zamknij ten czat"],"Write in the third person":["Napisz w trzeciej osobie"],"Show this menu":["Pokaż to menu"],"Hidden message":["Ukryta wiadomość"],"Message":["Wiadomość"],"Optional hint":["Opcjonalna wskazówka"],"You have unread messages":["Masz nieprzeczytane wiadomości"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Bądź świadomy, że inni klienci (i serwery) XMPP/Jabber mogą jeszcze nie obsługiwać zwijania i że ta wiadomość może nie być wszędzie usuwana."],"Are you sure you want to retract this message?":["Jesteś pewien, że chcesz wycofać tę wiadomość?"],"Confirm":["Potwierdź"],"You have an unsent message which will be lost if you continue. Are you sure?":["Masz niewysłaną wiadomość, która zostanie utracona, jeśli będziesz kontynuować. Jesteś pewien?"],"Are you sure you want to clear the messages from this conversation?":["Jesteś pewien, że chcesz wyczyścić wiadomości z tej rozmowy?"],"%1$s has gone offline":["%1$s rozłączył się"],"%1$s is busy":["%1$s jest zajęty"],"%1$s is online":["%1$s jest dostępny"],"Sorry, something went wrong while trying to refresh":["Przepraszam, coś poszło nie tak podczas próby odświeżenia"],"Are you sure you want to remove this contact?":["Jesteś pewien, że chcesz usunąć ten kontakt?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Przepraszam, wystąpił błąd podczas próby usunięcia %1$s jako kontaktu."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Aby poprawić wydajność, przechowujemy dane użytkownika w pamięci podręcznej tej przeglądarki. Usuń zaznaczenie tego pola, jeśli jest to komputer publiczny lub jeśli chcesz, aby Twoje dane zostały usunięte po wylogowaniu się. Ważne jest, aby wyraźnie się wylogować, w przeciwnym razie nie wszystkie dane zbuforowane mogą zostać usunięte. Należy pamiętać, że w przypadku korzystania z niezaufanego urządzenia, szyfrowanie OMEMO NIE jest dostępne."],"This is a trusted device":["To jest zaufane urządzenie"],"Create an account":["Utwórz konto"],"Don\'t have a chat account?":["Nie masz konta na czacie?"],"Log in":["Zaloguj się"],"Disconnected":["Rozłączono"],"Click here to log in anonymously":["Kliknij tutaj aby zalogować się anonimowo"],"Username":["Nazwa użytkownika"],"user@domain":["użytkownik@domena"],"Please enter a valid XMPP address":["Proszę wpisać prawidłowy adres XMPP"],"Chat Contacts":["Kontakty czatu"],"Toggle chat":["Przełącz czat"],"Click to restore this chat":["Kliknij, aby przywrócić ten czat"],"Minimized":["Zminimalizowane"],"This user is a moderator.":["Ten użytkownik jest moderatorem."],"This user can send messages in this groupchat.":["Ten użytkownik może wysyłać wiadomości w tym pokoju."],"This user can NOT send messages in this groupchat.":["Ten człowiek NIE może rozmawiać w tym pokoju."],"Owner":["Właściciel"],"Admin":["Administrator"],"Member":["Członek"],"Moderator":["Moderator"],"Visitor":["Gość"],"Click to mention %1$s in your message.":["Kliknij aby wspomnieć o %1$s we wiadomości."],"Participants":["Uczestnicy"],"This field is required":["To pole jest wymagane"],"Join":["Dołącz"],"Enter a new Groupchat":["Wejdź do pokoju"],"name@conference.example.org":["nazwa@konferencja.domena.pl"],"Groupchat name":["Nazwa czatu grupowego"],"Groupchat address":["Adres  pokoju"],"Invite":["Zaproś"],"Show groupchats":["Pokaż pokoje"],"Server address":["Adres serwera"],"Show more information on this groupchat":["Pokaż więcej informacji na temat tego czatu grupowego"],"Query for Groupchats":["Wyszukaj pokoje"],"Description:":["Opis:"],"Groupchat Address (JID):":["Nazwa pokoju (JID):"],"Participants:":["Uczestnicy:"],"Features:":["Właściwości:"],"Requires authentication":["Wymaga uwierzytelnienia"],"Hidden":["Ukryty"],"Requires an invitation":["Wymaga zaproszenia"],"Moderated":["Moderowany"],"Non-anonymous":["Nieanonimowy"],"Open":["Otwarte"],"Permanent":["Stały"],"Public":["Publiczny"],"Semi-anonymous":["Częściowo anonimowy"],"Temporary":["Tymczasowe"],"Unmoderated":["Niemoderowane"],"conference.example.org":["conference.domena.pl"],"No groupchats found":["Nie znaleziono pokojów"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatorzy są uprzywilejowanymi użytkownikami, którzy mogą zmieniać role innych użytkowników (z wyjątkiem tych z uprawnieniami administratora lub właściciela)."],"The default role, implies that you can read and write messages.":["Domyślna rola, oznacza, że możesz czytać i pisać wiadomości."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Odwiedzający nie mogą pisać wiadomości w moderowanym czacie dla wielu użytkowników."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Właściciel to najwyższa przynależność. Właściciele mogą modyfikować role i Afiliacje wszystkich innych użytkowników."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin jest drugą co do wielkości afiliacją. Administratorzy mogą modyfikować role i przynależność wszystkich innych użytkowników oprócz właścicieli."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Aby zablokować użytkownika, dajesz mu przynależność \\"outcast\\"."],"Change role":["Zmiana roli"],"New Role":["Nowa rola"],"Reason":["Powód"],"Change affiliation":["Zmień przynależność"],"New affiliation":["Nowa przynależność"],"Affiliation":["Przynależność"],"Moderator Tools":["Narzędzia moderatora"],"No users with that affiliation found.":["Nie znaleziono użytkowników z tą przynależnością."],"No users with that role found.":["Nie znaleziono użytkowników z tą rolą."],"Type here to filter the search results":[""],"Show users":["Pokaż użytkowników"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Role są przypisane do użytkowników, aby przyznać lub odmówić im pewnych umiejętności w czacie dla wielu użytkowników. Są one przypisane w sposób wyraźny lub domyślny jako część przynależności. Rola, która nie jest związana z przynależnością, jest ważna tylko na czas trwania sesji użytkownika."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Przynależność jest długotrwałym uprawnieniem, które zazwyczaj wiąże się z pewną rolą i które przyznaje przywileje i obowiązki. Na przykład administratorzy i właściciele mają automatycznie rolę moderatora."],"Sorry, something went wrong while trying to set the affiliation":["Przepraszam, coś poszło nie tak podczas próby ustalenia przynależności"],"Affiliation changed":["Zmiana przynależności"],"Role changed":["Zmieniono rolę"],"You\'re not allowed to make that change":["Nie możesz dokonać tej zmiany"],"Sorry, something went wrong while trying to set the role":["Przepraszam, coś poszło nie tak podczas próby ustawienia roli"],"Topic":["Temat"],"Topic author":["Autor tematu"],"Groupchat address (JID)":["Nazwa czatu grupowego (JID)"],"Message archiving":["Archiwizowanie wiadomości"],"Messages are archived on the server":["Wiadomości są archiwizowane na serwerze"],"Description":["Opis"],"Features":["Możliwości"],"This groupchat is not publicly searchable":["Ten czat grupowy nie jest publicznie dostępny"],"This groupchat is restricted to members only":["Ta rozmowa grupowa jest ograniczona tylko do członków"],"Members only":["Tylko dla członków"],"Participants entering this groupchat need to request permission to write":["Uczestnicy wchodzący w ten czat grupowy muszą poprosić o pozwolenie na pisanie"],"Name":["Nazwa"],"This groupchat does not require a password upon entry":["Ten czat grupowy nie wymaga hasła przy wejściu"],"No password required":["Hasło nie jest wymagane"],"Not anonymous":["Nie anonimowy"],"All other groupchat participants can see your XMPP address":["Wszyscy uczestnicy grupowego czatu widzą Twoją nazwę użytkownika XMPP"],"Not moderated":["Nie moderowany"],"Participants entering this groupchat can write right away":["Uczestnicy wchodzący w ten czat grupowy mogą pisać od razu"],"Online users":["Dostępni użytkownicy"],"Anyone can join this groupchat":["Każdy może dołączyć do tego czatu grupowego"],"This groupchat requires a password before entry":["Pokój rozmów wymaga podania hasła"],"Password protected":["Chronione hasłem"],"Persistent":["Trwały"],"This groupchat persists even if it\'s unoccupied":["Ten pokój przetrwa nawet bez użytkowników"],"Only moderators can see your XMPP address":["Tylko moderatorzy mogą zobaczyć Twój adres XMPP"],"This groupchat will disappear once the last person leaves":["Ten pokój zniknie po opuszczeniu go przez ostatniego użytkownika"],"This groupchat is publicly searchable":["Ten czat grupowy jest publicznie dostępny"],"Groupchat info for %1$s":["Informacje o czacie grupowym dla %1$s"],"You\'re not allowed to send messages in this room":["Nie możesz wysyłać wiadomości w tym pokoju"],"The conversation has moved. Click below to enter.":["Rozmowa została przeniesiona. Kliknij poniżej aby wejść."],"This groupchat no longer exists":["Ten czat grupowy już nie istnieje"],"Enter groupchat":["Wejdź do pokoju"],"Choose a nickname to enter":["Wybierz pseudonim, który chcesz wprowadzić"],"Please choose your nickname":["Proszę wybrać swój pseudonim"],"This groupchat requires a password":["Wstęp do pokoju wymaga podania hasła"],"Password: ":["Hasło: "],"Submit":["Wyślij"],"%1$s has entered the groupchat":["%1$s wszedł do pokoju"],"%1$s has left the groupchat":["%1$s opuścił pokój"],"%1$s is now a moderator":["%1$s został moderatorem"],"%1$s is no longer a moderator":["%1$s nie jest już moderatorem"],"%1$s has been given a voice":["%1$s dostał głos"],"%1$s has been muted":["%1$s został wyciszony"],"Change user\'s affiliation to admin":["Zmiana przynależności użytkownika do administratora"],"Ban user by changing their affiliation to outcast":["Zablokuj użytkownika, zmieniając ich przynależność do Outcast"],"Clear the chat area":["Wyczyść obszar czatu"],"Close this groupchat":["Zamknij ten pokój"],"Change user role to participant":["Zmiana roli użytkownika na uczestnika"],"Remove this groupchat":["Usuń ten czat grupowy"],"Kick user from groupchat":["Wyrzuć użytkownika z czatu grupowego"],"Write in 3rd person":["Pisz w trzeciej osobie"],"Grant membership to a user":["Przyznanie członkostwa użytkownikowi"],"Opens up the moderator tools GUI":["Otwiera narzędzia moderatora GUI"],"Remove user\'s ability to post messages":["Usunięcie możliwości wysyłania wiadomości przez użytkownika"],"Change your nickname":["Zmień swój pseudonim"],"Grant moderator role to user":["Przyznaj rolę moderatora użytkownikowi"],"Grant ownership of this groupchat":["Uczyń właścicielem pokoju"],"Register your nickname":["Zarejestruj swój nick"],"Revoke the user\'s current affiliation":["Wycofanie aktualnej przynależności użytkownika"],"Set groupchat subject":["Ustaw temat rozmowy grupowej"],"Set groupchat subject (alias for /subject)":["Ustaw temat rozmowy (alias dla /subject)"],"Allow muted user to post messages":["Pozwól uciszonemu człowiekowi na rozmowę"],"You are about to retract this message.":["Masz zamiar wycofać tę wiadomość."],"You may optionally include a message, explaining the reason for the retraction.":["Opcjonalnie możesz dołączyć wiadomość wyjaśniającą powód zwinięcia."],"Message Retraction":["Wycofanie komunikatu"],"Optional reason":["Opcjonalny powód"],"A timeout occurred while trying to retract the message":["Podczas próby cofnięcia komunikatu pojawił się limit czasu"],"Sorry, you\'re not allowed to retract this message.":["Przepraszam, nie wolno ci wycofać tej wiadomości."],"Configure this groupchat":["Skonfiguruj ten pokój"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Ukrycie listy uczestników"],"Forbidden: you do not have the necessary role in order to do that.":["Zakazane: nie masz do tego niezbędnej roli."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Zabronione: nie masz dostępu ze względu na brak przynależności.."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Błąd: polecenie \\"%1$s\\" przyjmuje dwa argumenty: pseudonim i opcjonalnie powód."],"Error: couldn\'t find a groupchat participant based on your arguments":["Błąd: nie udało się znaleźć uczestnika czatu grupowego na podstawie twoich argumentów"],"Error: found multiple groupchat participant based on your arguments":["Błąd: znaleziono wielu uczestników czatu grupowego na podstawie twoich argumentów"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["np. użytkownik@przykładowa-domena.pl"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Twój pseudonim to \\"%1$s\\""],"Error: invalid number of arguments":["Błąd: nieprawidłowa liczba argumentów"],"This action was done by %1$s.":["Ta akcja została wykonana przez %1$s."],"The reason given is: \\"%1$s\\".":["Podany powód to: \\"%1$s\\"."],"Groupchats":["Rozmowy grupowe"],"Add a new groupchat":["Dodaj nową grupę"],"Query for groupchats":["Wyszukaj pokoje"],"Announcements":["Ogłoszenia"],"Notification from %1$s":["Powiadomienie od %1$s"],"%1$s says":["%1$s powiedział"],"has gone offline":["wyłączył się"],"has gone away":["uciekł"],"is busy":["zajęty"],"has come online":["połączył się"],"wants to be your contact":["chce być twoim kontaktem"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Informacje"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s klient czatu XMPP dostarczony do Ciebie przez %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Przetłumaczyć %2$s na swój własny język"],"Log out":["Wyloguj się"],"Click to change your chat status":["Kliknij aby zmienić status rozmowy"],"Show details about this chat client":["Pokaż szczegóły na temat tego klienta czatu"],"Your avatar image":["Twój awatar"],"Checkbox for selecting the following fingerprint":["Pole wyboru dla wybrania następującego odcisku palca"],"Device without a fingerprint":["Urządzenie bez odcisku palca"],"Other OMEMO-enabled devices":["Pozostałe urządzenia z funkcją OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Zaznacz pole wyboru, aby wybrać odciski palców wszystkich innych urządzeń OMEMO"],"Remove checked devices and close":["Usuń sprawdzone urządzenia i zamknij"],"Select all":["Wybierz wszystkie"],"This device\'s OMEMO fingerprint":["Odcisk palca OMEMO tego urządzenia"],"Generate new keys and fingerprint":["Wygeneruj nowe klucze i odcisk palca"],"Your Profile":["Twój profil"],"XMPP Address (JID)":["Adres XMPP (JID)"],"Save and close":["Zapisz i Zamknij"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Użyj przecinków, aby rozdzielić wiele ról. Twoje role są wyświetlane obok Twojego imienia i nazwiska w wiadomościach czatu."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Wystąpił błąd w trakcie próby zapisania Twoich danych profilowych."],"You can check your browser\'s developer console for any error output.":["Możesz sprawdzić konsolę dewelopera przeglądarki pod kątem błędów."],"Away":["Nieobecny"],"Busy":["Zajęty"],"Custom status":["Własny status"],"Offline":["Rozłączony"],"Online":["Dostępny"],"Away for long":["Dłużej nieobecny"],"Change chat status":["Zmień status czatu"],"Personal status message":["Osobisty komunikat o statusie"],"I am %1$s":["Jestem %1$s"],"Are you sure you want to log out?":["Jesteś pewien, że chcesz się wylogować?"],"online":["dostępny"],"busy":["zajęty"],"away for long":["dłużej nieobecny"],"away":["nieobecny"],"offline":["rozłączony"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Ups, problem z odszyfrowaniem odebranego komunikatu OMEMO z powodu błędu."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s wydaje się mieć klienta, który nie obsługuje OMEMO. Szyfrowany czat nie będzie już możliwy w tym pokoju."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Nie można używać szyfrowania typu end-to-end, ponieważ %1$s używa klienta, który nie obsługuje OMEMO."],"Messages are being sent in plaintext":["Wiadomości są wysyłane w postaci zwykłego tekstu"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Przepraszamy, nie jesteśmy w stanie wysłać zaszyfrowanej wiadomości, ponieważ %1$s wymaga subskrypcji ich statusu, aby zobaczyć ich informacje OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Przepraszamy, nie jesteśmy w stanie wysłać zaszyfrowanej wiadomości, ponieważ nie można było znaleźć zdalnego serwera dla %1$s"],"Unable to send an encrypted message due to an unexpected error.":["Przepraszamy, z powodu błędu nie udało się wysłać wiadomości."],"Sorry, an error occurred while trying to remove the devices.":["Wystąpił błąd w czasie próby usunięcia urządzenia."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Czy na pewno chcesz wygenerować nowe klucze OMEMO? Spowoduje to usunięcie starych kluczy, a wszystkie wcześniej zaszyfrowane wiadomości nie będą już mogły być odszyfrowywane na tym urządzeniu."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Przepraszamy, nie znaleziono urządzeń, do których możemy wysyłać zaszyfrowane wiadomości OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["To jest zaszyfrowana wiadomość OMEMO, której twój klient nie obsługuje. Więcej informacji na stronie https://conversations.im/omemo"]," e.g. conversejs.org":[" np. conversejs.org"],"Fetch registration form":["Pobierz formularz rejestracyjny"],"Tip: A list of public XMPP providers is available":["Porada: lista publicznych dostawców XMPP jest dostępna"],"here":["tutaj"],"Sorry, we\'re unable to connect to your chosen provider.":["Wystąpił problem z nawiązaniem połączenia się z wybranym dostawcą."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Przepraszamy, ale podany dostawca nie obsługuje rejestracji. Spróbuj wskazać innego dostawcę."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Coś poszło nie tak podczas nawiązywania połączenia z \\"%1$s\\". Jesteś pewien, że on istnieje?"],"Now logging you in":["Teraz loguję się"],"Registered successfully":["Zarejestrowany pomyślnie"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Dostawca odrzucił twoją próbę rejestracji. Sprawdź proszę poprawność danych które zostały wprowadzone."],"Leave this groupchat":["Opuść ten pokój"],"Click to toggle the list of open groupchats":["Kliknij, aby przełączyć listę otwartych czatów grupowych"],"Open Groupchats":["Otwarte rozmowy grupowe"],"Are you sure you want to leave the groupchat %1$s?":["Jesteś pewny, że chcesz wyjść z grupowego czatu %1$s?"],"Add":["Dodaj"],"Add a Contact":["Dodaj kontakt"],"This contact is busy":["Kontakt jest zajęty"],"This contact is online":["Kontakt jest połączony"],"This contact is offline":["Kontakt jest niepołączony"],"This contact is unavailable":["Kontakt jest niedostępny"],"This contact is away for an extended period":["Kontakt jest nieobecny przez dłuższą chwilę"],"This contact is away":["Kontakt jest nieobecny"],"Contact name":["Nazwa kontaktu"],"Optional nickname":["Opcjonalny nick"],"Sorry, could not find a contact with that name":["Przepraszamy, nie można odnaleźć kontaktu z tą nazwą"],"This contact has already been added":["Ten kontakt został już dodany"],"Filter":["Filtr"],"Filter by contact name":["Filtruj według nazwy kontaktu"],"Filter by group name":["Filtruj według nazwy grupy"],"Filter by status":["Filtruj według stanu"],"Any":["Dowolny"],"Unread":["Nieprzeczytane"],"Chatty":["Gotowy do rozmowy"],"Extended Away":["Dłuższa nieobecność"],"Click to remove %1$s as a contact":["Kliknij, aby usunąć %1$s jako kontakt"],"Click to accept the contact request from %1$s":["Kliknij, aby zaakceptować prośbę o kontakt od %1$s"],"Click to decline the contact request from %1$s":["Kliknij, aby odrzucić wniosek o kontakt z %1$s"],"Are you sure you want to decline this contact request?":["Czy potwierdzasz odrzucenie chęci nawiązania kontaktu?"],"Contacts":["Kontakty"],"Add a contact":["Dodaj kontakt"],"Re-sync your contacts":["Ponownie zsynchronizuj swoje kontakty"]}}}')}}]);
 //# sourceMappingURL=pl-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/pt-LC_MESSAGES-converse-po.js b/src/conversejs/locales/pt-LC_MESSAGES-converse-po.js
index 62c6e2440806bd64939212d4d5a9ea08d4916e19..f02bafede7ac81612a0402ee25c08a1c782bc6d6 100644
--- a/src/conversejs/locales/pt-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/pt-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[167],{445:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"pt"},"Create your account":["Criar a sua conta"],"Please enter the XMPP provider to register with:":["Por favor, insira o provedor XMPP para registar com:"],"Already have a chat account?":["Já tem uma conta de conversação?"],"Log in here":["Inicie a sessão aqui"],"Account Registration:":["Registo de conta:"],"Register":["Registar"],"Choose a different provider":["Escolha um provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Aguarde, nós estamos a obter o formulário de registo…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["A ligação foi interrompida, a tentar religar."],"An error occurred while connecting to the chat server.":["Ocorreu um erro enquanto ligava ao servidor de conversação."],"Your XMPP address and/or password is incorrect. Please try again.":["O seu endereço de XMPP e/ou a palavra-passe estão incorretos. Por favor, tente novamente."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Desculpe, nós nos foi possível ligar ao hospedeiro de XMPP com o domínio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor de XMPP não ofereceu um motor de autenticação suportado"],"Sorry, could not determine upload URL.":["Desculpe, não foi possível determinar o URL de envio."],"Sorry, could not determine file upload URL.":["Desculpe, não foi possível determinar o URL de envoi do ficheiro."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Desculpe, não foi possível enviar o seu ficheiro com sucesso. Resposta do seu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Desculpe, não foi possível enviar o seu ficheiro com sucesso."],"Sorry, looks like file upload is not supported by your server.":["Desculpe, parece que o envio de ficheiro não é suportado pelo seu servidor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamanho do seu ficheiro, %1$s, excede o máximo permitido pelo seu servidor, que é %2$s."],"Smileys and emotions":["\\"Smileys\\" e emoções"],"People":["Pessoas"],"Activities":["Atividades"],"Travel":["Viagens"],"Objects":["Objetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":[""],"Stickers":["Autocolantes"],"This groupchat is not anonymous":["Esta sala de conversação não é anónima"],"This groupchat now shows unavailable members":["Esta sala de conversação mostra membros indisponíveis"],"This groupchat does not show unavailable members":["Esta sala de conversação não mostra membros indisponíveis"],"The groupchat configuration has changed":["A configuração da sala de conversação foi alterada"],"Groupchat logging is now enabled":["O início de sessão da sala de conversação está agora ativado"],"Groupchat logging is now disabled":["O início de sessão da sala de conversação está agora desativado"],"This groupchat is now no longer anonymous":["Esta sala de conversação já não é anónima"],"This groupchat is now semi-anonymous":["Esta sala de conversação agora é semi anónima"],"This groupchat is now fully-anonymous":["Esta sala de conversação agora é totalmente anónima"],"A new groupchat has been created":["Foi criada uma nova sala de conversação"],"Your nickname has been automatically set to %1$s":["O seu apelido foi definido automaticamente para %1$s"],"Your nickname has been changed to %1$s":["O seu apelido foi alterado para %1$s"],"You have been banned from this groupchat":["Foi banido desta sala de conversação"],"You have been kicked from this groupchat":["Foi expulso desta sala de conversação"],"You have been removed from this groupchat because of an affiliation change":["Foi removido da sala de conversação devido a uma alteração de afiliação"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Foi removido da sala de conversação porque esta foi alterada para somente membros e você não é um membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Foi removido da sala de conversação porque o serviço de hospedagem foi encerrado"],"Your message was not delivered because you weren\'t allowed to send it.":["A sua mensagem não foi entregue porque não está autorizado para a enviar."],"Your message was not delivered because you\'re not present in the groupchat.":["A sua mensagem não foi entregue porque não está presente na sala de conversação."],"You\'re not allowed to register yourself in this groupchat.":["Não está autorizado para se registar nesta sala de conversação."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Não está autorizado para se registar nesta sala de conversação porque é só para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Não é possível registar o seu apelido nesta sala de conversação, esta não suporta o registo."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Não é possível registar o seu apelido, nesta sala de conversação, o formulário de dados fornecido é inválido."],"Topic set by %1$s":["Topico definido por %1$s"],"Topic cleared by %1$s":["Topico limpo por %1$s"],"%1$s has been banned":["%1$s foi banido"],"%1$s\'s nickname has changed":["O apelido de %1$s foi alterado"],"%1$s has been kicked out":["%1$s foi expulso"],"%1$s has been removed because of an affiliation change":["%1$s foi removido devido a uma alteração de afiliação"],"%1$s has been removed for not being a member":["%1$s foi removido por não ser mais um membro"],"%1$s is no longer an admin of this groupchat":["%1$s não é mais um administrador desta sala"],"%1$s is no longer an owner of this groupchat":["%1$s não é mais um proprietário desta sala"],"%1$s is no longer banned from this groupchat":["%1$s não está mais banido desta sala"],"%1$s is now an %2$s of this groupchat":["%1$s se tornou %2$s desta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O apelido escolhido está reservado ou atualmente em uso, por favor, escolha outro."],"Password incorrect":["Palavra-passe incorreta"],"You are not on the member list of this groupchat.":["Não faz parte da lista de membros desta sala de conversação."],"You have been banned from this groupchat.":["Foi banido desta sala de conversação."],"You are not allowed to create new groupchats.":["Não está autorizado a criar novas salas de conversação."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["O seu apelido não está de acordo com as políticas desta sala de conversação."],"This groupchat does not (yet) exist.":["Esta sala de conversação (ainda) não existe."],"This groupchat has reached its maximum number of participants.":["A sala de conversação atingiu o número máximo de participantes."],"Remote server not found":["Servidor remoto não encontrado"],"The explanation given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidou-o para se juntar numa sala de conversação: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidou-o para se juntar numa sala de conversação: %2$s, e deixou o seguinte motivo: \\"%3$s\\""],"Error":["Erro"],"Sorry, something went wrong while trying to save your bookmark.":["Desculpe, ocorreu algo de errado enquanto tentava guardar o seu favorito."],"Timeout Error":["Erro de Expiração"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Meus contactos"],"Pending contacts":["Contactos pendentes"],"Contact requests":["Pedidos de contacto"],"Ungrouped":["Desagrupado"],"New messages":["Novas mensagens"],"Sorry, there was an error while trying to add %1$s as a contact.":["Desculpe, ocorreu um erro enquanto tentava adicionar %1$s como um contacto."],"This client does not allow presence subscriptions":["Este cliente não permite subscrições de presença"],"Click to hide these contacts":["Clique para ocultar estes contactos"],"Unbookmark this groupchat":["Remover esta sala de conversação dos favoritos"],"Click to open this groupchat":["Clique para abrir esta sala de conversação"],"Click to toggle the bookmarks list":["Clique para alternar a lista de favoritos"],"Bookmarks":["Favoritos"],"Bookmark this groupchat":["Marcar esta sala de conversação"],"Would you like this groupchat to be automatically joined upon startup?":["Deseja que esta sala de conversação seja associada automaticamente na inicialização?"],"The name for this bookmark:":["Nome para o favorito:"],"What should your nickname for this groupchat be?":["Qual deve ser o seu apelido para esta sala?"],"Save":["Salvar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Tem certeza de que deseja remover o favorito \\"%1$s\\"?"],"Close":["Fechar"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Transferir o ficheiro de áudio \\"%1$s\\""],"Download file \\"%1$s\\"":["Transferir ficheiro \\"%1$s"],"Edit":[""],"Retract":[""],"Message versions":["Versões da mensagem"],"Retry":[""],"Uploading file:":["A enviar ficheiro:"],"%1$s has removed this message":["%1$s removeu esta mensagem"],"This message has been edited":["Esta mensagem foi editada"],"Show more":["Mostrar mais"],"No message history available.":["Sem histórico de mensagens disponível."],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":["Enviar a mensagem"],"Start a call":[""],"Message characters remaining":["Carateres restantes da mensagem"],"Choose a file to send":["Escolha um ficheiro para enviar"],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Imagem de Perfil do Utilizador"],"Trusted":["Confiado"],"Untrusted":["Desconfiado"],"OMEMO Fingerprints":["Impressões digitais OMEMO"],"No OMEMO-enabled devices found":["Não foram encontrados dispositivos preparados para OMEMO"],"Remove as contact":["Remover como contacto"],"XMPP Address":["Endereço de XMPP"],"Email":["E-mail"],"Full Name":["Nome completo"],"Nickname":["Apelido"],"Refresh":["Atualizar"],"Role":["Função"],"URL":["URL"],"%1$s is typing":["%1$s está a digitar"],"%1$s has stopped typing":["%1$s parou de digitar"],"%1$s has gone away":["%1$s está ausente"],"Remove messages":["Remover mensagens"],"Close this chat":["Feche esta conversação de grupo"],"Write in the third person":["Escrever em terceira pessoa"],"Show this menu":["Mostrar o menu"],"Hidden message":["Mensagem oculta"],"Message":["Mensagem"],"Optional hint":["Dica Opcional"],"You have unread messages":["Você tem mensagens não lidas"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["Tem a certeza de que deseja retrair esta mensagem?"],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Tem certeza que deseja limpar as mensagens dessa conversa?"],"%1$s has gone offline":["%1$s está offline"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está online"],"Sorry, something went wrong while trying to refresh":["Desculpe, algo deu errado ao tentar atualizar"],"Are you sure you want to remove this contact?":["Tem certeza de que deseja remover esse contato?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Desculpe, houve um erro ao tentar remover o contato %1$s ."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para melhorar o desempenho, armazenamos os seus dados em cache neste navegador. Desmarque esta caixa se este for um computador público ou se pretender que os seus dados sejam eliminados quando terminar a sessão. É importante que você se desconecte explicitamente, caso contrário não todos os dados armazenados em cache podem ser excluídos. Observe que, ao usar um aparelho não confiável, a criptografia OMEMO NÃO está disponível."],"This is a trusted device":["Este é um aparelho confiável"],"Password":["Palavra-passe"],"Create an account":["Criando uma conta"],"Don\'t have a chat account?":["Não possui uma conta de bate papo?"],"Log in":["Iniciar sessão"],"Disconnected":[""],"Click here to log in anonymously":["Clique aqui para efetuar o login anonimamente"],"Username":["Utilizador"],"user@domain":["utilizador@domínio"],"Please enter a valid XMPP address":["Por favor entre com um endereço XMPP válido"],"Chat Contacts":["Contatos"],"Toggle chat":["Alternar bate-papo"],"Click to restore this chat":["Clique para restaurar este bate-papo"],"Minimized":["Minimizado"],"Minimize this groupchat":["Minimizar esta conversação de grupo"],"This field is required":["Este campo é obrigatório"],"Join":["Entrar"],"Enter a new Groupchat":["Entrar em uma nova sala"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Endereço da groupchat"],"Groupchat address":["Endereço da sala"],"Groupchat id is invalid.":["A id. da conversação de grupo é inválida."],"Invite":["convite"],"Invite someone to this groupchat":["Convidar qualquer pessoa para esta conversação de grupo"],"user@example.org":["por exemplo, utilizador@exemplo.org"],"Optional reason for the invitation":["Motivo opcional para o convite"],"Show groupchats":["Mostrar Salas"],"Server address":["Endereço do Servidor"],"Show more information on this groupchat":["Mostrar mais informações dessa sala"],"Query for Groupchats":["Consulta para Groupchats"],"Description:":["Descrição:"],"Groupchat Address (JID):":["Endereço da sala (JID):"],"Participants:":["Participantes:"],"Features:":["Recursos:"],"Requires authentication":["Requer autenticação"],"Hidden":["Escondido"],"Requires an invitation":["Requer um convite"],"Moderated":["Moderado"],"Non-anonymous":["Não anônimo"],"Open":["Sala aberta"],"Permanent":["Sala permanente"],"Public":["Público"],"Semi-anonymous":["Semi anônimo"],"Temporary":["Temporário"],"Unmoderated":["Sem moderação"],"conference.example.org":["conferencia.exemplo.org"],"No groupchats found":["Nenhuma sala encontrada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["Alterar função"],"New Role":["Nova Função"],"Reason":[""],"Change affiliation":["Alterar afiliação"],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":["Ferramentas de Moderador"],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":["Mostrar utilizadores"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Sorry, something went wrong while trying to set the affiliation":["Desculpe, ocorreu algo de errado enquanto tentava definir a afiliação"],"Affiliation changed":[""],"Role changed":["Função alterada"],"You\'re not allowed to make that change":["Não está autorizado a efetuar essa alteração"],"Sorry, something went wrong while trying to set the role":["Desculpe, ocorreu algo de errado enquanto tentava definir a função"],"Topic":["Tópico"],"Topic author":["Autor do tópico"],"Groupchat address (JID)":["Endereço da sala de conversação (JID)"],"Message archiving":["Arquivando mensagem"],"Messages are archived on the server":["As mensagens são arquivadas no servidor"],"Description":["Descrição"],"Features":["Recursos"],"This groupchat is not publicly searchable":["Esta conversação de grupo não aparece nas pesquisas públicas"],"This groupchat is restricted to members only":["Este groupchat é restrito apenas aos membros"],"Members only":["Apenas membros"],"Participants entering this groupchat need to request permission to write":["Os participantes que entram neste groupchat precisam solicitar permissão para escrever"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Essa sala não precisa de palavra-passe para entrar"],"No password required":["Nenhuma palavra-passe necessária"],"Not anonymous":["Não anónimo"],"All other groupchat participants can see your XMPP address":["Todos os outros participantes da conversação de grupo podem ver o seu endereço de XMPP"],"Not moderated":["Não moderada"],"Participants entering this groupchat can write right away":["Os participantes que entram neste groupchat podem escrever imediatamente"],"Online users":["Utilizadores On-line"],"Anyone can join this groupchat":["Qualquer um pode juntar-se a esta conversação de grupo"],"This groupchat requires a password before entry":["Essa sala precisa de palavra-passe antes de entrar"],"Password protected":["Protegido por palavra-passe"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Esta conversação de grupo existe mesmo se vazia"],"Only moderators can see your XMPP address":["Apenas os moderadores podem ver o seu endereço de XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversação de grupo deixará de existir quando todas as pessoas saírem"],"This groupchat is publicly searchable":["Esta conversação de grupo pode ser pesquisada publicamente"],"Groupchat info for %1$s":["Informações da sala em grupo para %1$s"],"You\'re not allowed to send messages in this room":["Não está autorizado para enviar mensagens nesta sala"],"The conversation has moved. Click below to enter.":["A conversação foi movida. Clique em baixo para entrar."],"This groupchat no longer exists":["Esta sala de conversação já não existe"],"Enter groupchat":["Entrar no groupchat"],"Please choose your nickname":["Por favor escolha seu apelido"],"This groupchat requires a password":["Essa sala de bate papo precisa de palavra-passe"],"Password: ":["Palavra-passe: "],"Submit":["Enviar"],"This user is a moderator.":["Esse utilizador é o moderador."],"This user can send messages in this groupchat.":["Este utilizador pode enviar mensagens nessa sala."],"This user can NOT send messages in this groupchat.":["Este utilizador NÃO pode enviar mensagens nessa sala."],"Owner":["Proprietário"],"Admin":["Administrador"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Clique para mencionar %1$s em sua mensagem."],"Participants":["Participantes"],"%1$s has entered the groupchat":["%1$s entrou no groupchat"],"%1$s has left the groupchat":["%1$s saiu do groupchat"],"%1$s is now a moderator":["%1$s é agora um moderador"],"%1$s is no longer a moderator":["%1$s não é mais um moderador"],"%1$s has been muted":["%1$s está mudo"],"Change user\'s affiliation to admin":["Mudar o utilizador para administrador"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Alterar a função do utilizador para o participante"],"Remove this groupchat":["Remover este groupchat"],"Kick user from groupchat":["Expulsar utilizador da sala"],"Write in 3rd person":["Escrever em terceira pessoa"],"Grant membership to a user":["Subscrever como utilizador membro"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Remover a habilidade do utilizador de postar mensagens"],"Change your nickname":["Escolha seu apelido"],"Grant moderator role to user":["Transformar utilizador em moderador"],"Grant ownership of this groupchat":["Conceder a propriedade desse batepapo"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Definir tópico do bate-papo"],"Set groupchat subject (alias for /subject)":["Definir o assunto do bate-papo (nome para/ assunto)"],"Allow muted user to post messages":["Permitir que o utilizador mudo publique mensagens"],"You are about to retract this message.":["Está prestes a retrair esta mensagem."],"You may optionally include a message, explaining the reason for the retraction.":["Pode opcionalmente incluir uma mensagem, a explicar o motivo da retração."],"Message Retraction":["Retração de Mensagem"],"Optional reason":["Motivo opcional"],"A timeout occurred while trying to retract the message":["Ocorreu uma expiração enquanto tentava retrair a mensagem"],"Sorry, you\'re not allowed to retract this message.":["Desculpe, não está autorizado a retrair esta mensagem."],"Configure":[""],"Configure this groupchat":["Configurar essa sala"],"Invite someone to join this groupchat":["Convide qualquer pessoa para se juntar a esta conversação de grupo"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Esconder a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Proibido: você não tem nas permissões necessárias para fazer isso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Proibido: você não tem a afiliação necessária para fazer isso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erro: O comando \\"%1$s\\" precisa de dois argumentos, o apelido e opcionalmente a razão."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["por exemplo, utilizador@exemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Erro: número de argumentos inválido"],"This action was done by %1$s.":["Esta ação foi realizada por %1$s ."],"The reason given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"Groupchats":["Salas"],"Add a new groupchat":["Adicionar uma nova sala"],"Query for groupchats":["Consulta para Groupchats"],"Announcements":[""],"Notification from %1$s":["Mensagem de %1$s"],"%1$s says":["%1$s diz"],"has gone offline":["ficou offline"],"has gone away":["Este contato saiu"],"is busy":["ocupado"],"has come online":["Ficou on-line"],"wants to be your contact":["Quer ser seu contato"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Sobre"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":["%1$s Traduzir %2$s para seu próprio idioma"],"Log out":["Sair"],"Click to change your chat status":["Clique para mudar seu status no chat"],"Show details about this chat client":["Mostrar detalhes sobre este cliente de conversação"],"Your avatar image":["A imagem do seu avatar"],"Checkbox for selecting the following fingerprint":["Caixa de verificação para seleccionar a impressão digital seguinte"],"Device without a fingerprint":["Aparelho sem uma assinatura digital"],"Other OMEMO-enabled devices":["Outros aparelhos habilitados para OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Caixa de seleção para selecionar impressões digitais de todos os outros aparelhos OMEMO"],"Remove checked devices and close":["Remover os aparelhos verificados e fechar"],"Select all":["Selecionar todos"],"This device\'s OMEMO fingerprint":["A impressão digital OMEMO deste aparelho"],"Generate new keys and fingerprint":["Gerar novas chaves e impressão digital"],"Your Profile":["Seu Perfil"],"XMPP Address (JID)":["Endereço XMPP (JID)"],"Save and close":["Salvar e fechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Use vírgulas para separar várias funções. Suas funções são mostradas ao lado do seu nome em suas mensagens de bate-papo."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Desculpe, ocorreu um erro ao tentar salvar seus dados de perfil."],"You can check your browser\'s developer console for any error output.":["Você pode verificar o console do desenvolvedor do seu navegador para qualquer saída de erro."],"Away":["Fora"],"Busy":["Ocupado"],"Custom status":["Status customizado"],"Offline":["Off-line"],"Online":["On-line"],"Away for long":["Fora por muito tempo"],"Change chat status":["Alterar o estado do chat"],"Personal status message":["Mensagem de estado pessoal"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Tem a certeza que deseja terminar a sessão?"],"online":["on-line"],"busy":["ocupado"],"away for long":["fora por muito tempo"],"away":["fora"],"offline":["off-line"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Desculpe, não foi possível descriptografar uma mensagem OMEMO recebida devido a um erro."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s não parece ter um cliente que suporte OMEMO. Bate-papo criptografado não será mais possível neste grouchat."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Não é possível usar criptografia de ponta a ponta porque %1$s usa um cliente que não suporta a OMEMO."],"Messages are being sent in plaintext":["As mensagens estão a ser enviadas em texto simples"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Desculpe, ocorreu um erro ao tentar remover os aparelhos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Tem certeza de que deseja gerar novas chaves OMEMO? Isso removerá as chaves antigas e todas as mensagens criptografadas anteriormente não serão mais descriptografadas neste aparelho."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Desculpe, não podemos enviar uma mensagem criptografada porque %1$s requer que você se inscreva para ver suas informações OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Desculpe, não podemos enviar uma mensagem criptografada porque o servidor remoto para %1$s não pôde ser encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Não é possível enviar uma mensagem criptografada, devido a um erro inesperado."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta é uma mensagem encriptada OMEMO que o seu cliente não parece suportar. Encontre mais informações em https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Inserir formulário de inscrição"],"Tip: A list of public XMPP providers is available":["Dica: uma lista de provedores XMPP públicos está disponível"],"here":["aqui"],"Sorry, we\'re unable to connect to your chosen provider.":["Desculpe, não podemos  conectar ao provedor escolhido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Desculpe, o provedor fornecido não oferece suporte de banda para registro da conta. Experimente com um provedor diferente."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo deu errado ao estabelecer uma conexão com \\"%1$s\\". Você tem certeza que ele existe?"],"Now logging you in":["Agora você logou"],"Registered successfully":["Registrado com sucesso"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rejeitou sua tentativa de registro. Verifique os valores que você digitou para verificar a exatidão."],"Leave this groupchat":["Deixar a sala"],"Click to toggle the list of open groupchats":["Clique para alternar a lista de salas de conversação abertas"],"Open Groupchats":["Abrir Groupchats"],"Are you sure you want to leave the groupchat %1$s?":["Tem a certeza que deseja sair da sala de conversação \\"%1$s\\"?"],"Add":["Adicionar"],"Add a Contact":["Adicionar um contato"],"This contact is busy":["Este contato está ocupado"],"This contact is online":["Este contato está online"],"This contact is offline":["Este contato está offline"],"This contact is unavailable":["Este contato está indisponível"],"This contact is away for an extended period":["Este contato está ausente por um longo período"],"This contact is away":["Este contato está ausente"],"Contact name":["Nome do contato"],"Optional nickname":["Apelido Opcional"],"Sorry, could not find a contact with that name":["Desculpe, não foi possível encontrar um contato com esse nome"],"This contact has already been added":["Este contacto já foi adicionado"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contacto"],"Filter by group name":["Filtrar por nome do grupo"],"Filter by status":["Filtrar por estado"],"Any":["Qualquer"],"Unread":["Não lido"],"Chatty":["Conversar"],"Extended Away":["Ausência Longa"],"Click to remove %1$s as a contact":["Clique para remover %1$s como contato"],"Click to accept the contact request from %1$s":["Clique para aceitar a solicitação de contato de %1$s"],"Click to decline the contact request from %1$s":["Clique para recusar a solicitação de contato de %1$s"],"Are you sure you want to decline this contact request?":["Tem certeza de que deseja recusar essa solicitação de contato?"],"Contacts":["Contatos"],"Add a contact":["Adicionar um contato"],"Re-sync your contacts":["Voltar a sincronizar os meus contactos"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[167],{533:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"pt"},"Create your account":["Criar a sua conta"],"Please enter the XMPP provider to register with:":["Por favor, insira o provedor XMPP para registar com:"],"Already have a chat account?":["Já tem uma conta de conversação?"],"Log in here":["Inicie a sessão aqui"],"Account Registration:":["Registo de conta:"],"Register":["Registar"],"Choose a different provider":["Escolha um provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Aguarde, nós estamos a obter o formulário de registo…"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["A ligação foi interrompida, a tentar religar."],"An error occurred while connecting to the chat server.":["Ocorreu um erro enquanto ligava ao servidor de conversação."],"Your XMPP address and/or password is incorrect. Please try again.":["O seu endereço de XMPP e/ou a palavra-passe estão incorretos. Por favor, tente novamente."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Desculpe, nós nos foi possível ligar ao hospedeiro de XMPP com o domínio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor de XMPP não ofereceu um motor de autenticação suportado"],"Sorry, could not determine upload URL.":["Desculpe, não foi possível determinar o URL de envio."],"Sorry, could not determine file upload URL.":["Desculpe, não foi possível determinar o URL de envoi do ficheiro."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Desculpe, não foi possível enviar o seu ficheiro com sucesso. Resposta do seu servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Desculpe, não foi possível enviar o seu ficheiro com sucesso."],"Sorry, looks like file upload is not supported by your server.":["Desculpe, parece que o envio de ficheiro não é suportado pelo seu servidor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamanho do seu ficheiro, %1$s, excede o máximo permitido pelo seu servidor, que é %2$s."],"Smileys and emotions":["\\"Smileys\\" e emoções"],"People":["Pessoas"],"Activities":["Atividades"],"Travel":["Viagens"],"Objects":["Objetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":[""],"Stickers":["Autocolantes"],"This groupchat is not anonymous":["Esta sala de conversação não é anónima"],"This groupchat now shows unavailable members":["Esta sala de conversação mostra membros indisponíveis"],"This groupchat does not show unavailable members":["Esta sala de conversação não mostra membros indisponíveis"],"The groupchat configuration has changed":["A configuração da sala de conversação foi alterada"],"Groupchat logging is now enabled":["O início de sessão da sala de conversação está agora ativado"],"Groupchat logging is now disabled":["O início de sessão da sala de conversação está agora desativado"],"This groupchat is now no longer anonymous":["Esta sala de conversação já não é anónima"],"This groupchat is now semi-anonymous":["Esta sala de conversação agora é semi anónima"],"This groupchat is now fully-anonymous":["Esta sala de conversação agora é totalmente anónima"],"A new groupchat has been created":["Foi criada uma nova sala de conversação"],"Your nickname has been automatically set to %1$s":["O seu apelido foi definido automaticamente para %1$s"],"Your nickname has been changed to %1$s":["O seu apelido foi alterado para %1$s"],"You have been banned from this groupchat":["Foi banido desta sala de conversação"],"You have been kicked from this groupchat":["Foi expulso desta sala de conversação"],"You have been removed from this groupchat because of an affiliation change":["Foi removido da sala de conversação devido a uma alteração de afiliação"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Foi removido da sala de conversação porque esta foi alterada para somente membros e você não é um membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Foi removido da sala de conversação porque o serviço de hospedagem foi encerrado"],"Your message was not delivered because you weren\'t allowed to send it.":["A sua mensagem não foi entregue porque não está autorizado para a enviar."],"Your message was not delivered because you\'re not present in the groupchat.":["A sua mensagem não foi entregue porque não está presente na sala de conversação."],"You\'re not allowed to register yourself in this groupchat.":["Não está autorizado para se registar nesta sala de conversação."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Não está autorizado para se registar nesta sala de conversação porque é só para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Não é possível registar o seu apelido nesta sala de conversação, esta não suporta o registo."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Não é possível registar o seu apelido, nesta sala de conversação, o formulário de dados fornecido é inválido."],"Topic set by %1$s":["Topico definido por %1$s"],"Topic cleared by %1$s":["Topico limpo por %1$s"],"%1$s has been banned":["%1$s foi banido"],"%1$s\'s nickname has changed":["O apelido de %1$s foi alterado"],"%1$s has been kicked out":["%1$s foi expulso"],"%1$s has been removed because of an affiliation change":["%1$s foi removido devido a uma alteração de afiliação"],"%1$s has been removed for not being a member":["%1$s foi removido por não ser mais um membro"],"%1$s is no longer an admin of this groupchat":["%1$s não é mais um administrador desta sala"],"%1$s is no longer an owner of this groupchat":["%1$s não é mais um proprietário desta sala"],"%1$s is no longer banned from this groupchat":["%1$s não está mais banido desta sala"],"%1$s is now an %2$s of this groupchat":["%1$s se tornou %2$s desta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O apelido escolhido está reservado ou atualmente em uso, por favor, escolha outro."],"Password incorrect":["Palavra-passe incorreta"],"You are not on the member list of this groupchat.":["Não faz parte da lista de membros desta sala de conversação."],"You have been banned from this groupchat.":["Foi banido desta sala de conversação."],"You are not allowed to create new groupchats.":["Não está autorizado a criar novas salas de conversação."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["O seu apelido não está de acordo com as políticas desta sala de conversação."],"This groupchat does not (yet) exist.":["Esta sala de conversação (ainda) não existe."],"This groupchat has reached its maximum number of participants.":["A sala de conversação atingiu o número máximo de participantes."],"Remote server not found":["Servidor remoto não encontrado"],"The explanation given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidou-o para se juntar numa sala de conversação: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidou-o para se juntar numa sala de conversação: %2$s, e deixou o seguinte motivo: \\"%3$s\\""],"Error":["Erro"],"Sorry, something went wrong while trying to save your bookmark.":["Desculpe, ocorreu algo de errado enquanto tentava guardar o seu favorito."],"Timeout Error":["Erro de Expiração"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Meus contactos"],"Pending contacts":["Contactos pendentes"],"Contact requests":["Pedidos de contacto"],"Ungrouped":["Desagrupado"],"New messages":["Novas mensagens"],"Sorry, there was an error while trying to add %1$s as a contact.":["Desculpe, ocorreu um erro enquanto tentava adicionar %1$s como um contacto."],"This client does not allow presence subscriptions":["Este cliente não permite subscrições de presença"],"Click to hide these contacts":["Clique para ocultar estes contactos"],"Unbookmark this groupchat":["Remover esta sala de conversação dos favoritos"],"Click to open this groupchat":["Clique para abrir esta sala de conversação"],"Click to toggle the bookmarks list":["Clique para alternar a lista de favoritos"],"Bookmarks":["Favoritos"],"Bookmark this groupchat":["Marcar esta sala de conversação"],"Would you like this groupchat to be automatically joined upon startup?":["Deseja que esta sala de conversação seja associada automaticamente na inicialização?"],"The name for this bookmark:":["Nome para o favorito:"],"What should your nickname for this groupchat be?":["Qual deve ser o seu apelido para esta sala?"],"Save":["Salvar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Tem certeza de que deseja remover o favorito \\"%1$s\\"?"],"Close":["Fechar"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Transferir o ficheiro de áudio \\"%1$s\\""],"Download file \\"%1$s\\"":["Transferir ficheiro \\"%1$s"],"Edit":[""],"Retract":[""],"Message versions":["Versões da mensagem"],"Retry":[""],"Uploading file:":["A enviar ficheiro:"],"%1$s has removed this message":["%1$s removeu esta mensagem"],"This message has been edited":["Esta mensagem foi editada"],"Show more":["Mostrar mais"],"No message history available.":["Sem histórico de mensagens disponível."],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":["Enviar a mensagem"],"Start a call":[""],"Message characters remaining":["Carateres restantes da mensagem"],"Choose a file to send":["Escolha um ficheiro para enviar"],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Imagem de Perfil do Utilizador"],"Trusted":["Confiado"],"Untrusted":["Desconfiado"],"OMEMO Fingerprints":["Impressões digitais OMEMO"],"No OMEMO-enabled devices found":["Não foram encontrados dispositivos preparados para OMEMO"],"Remove as contact":["Remover como contacto"],"XMPP Address":["Endereço de XMPP"],"Email":["E-mail"],"Full Name":["Nome completo"],"Nickname":["Apelido"],"Refresh":["Atualizar"],"Role":["Função"],"URL":["URL"],"%1$s is typing":["%1$s está a digitar"],"%1$s has stopped typing":["%1$s parou de digitar"],"%1$s has gone away":["%1$s está ausente"],"Remove messages":["Remover mensagens"],"Close this chat":["Feche esta conversação de grupo"],"Write in the third person":["Escrever em terceira pessoa"],"Show this menu":["Mostrar o menu"],"Hidden message":["Mensagem oculta"],"Message":["Mensagem"],"Optional hint":["Dica Opcional"],"You have unread messages":["Você tem mensagens não lidas"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":["Tem a certeza de que deseja retrair esta mensagem?"],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Tem certeza que deseja limpar as mensagens dessa conversa?"],"%1$s has gone offline":["%1$s está offline"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está online"],"Sorry, something went wrong while trying to refresh":["Desculpe, algo deu errado ao tentar atualizar"],"Are you sure you want to remove this contact?":["Tem certeza de que deseja remover esse contato?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Desculpe, houve um erro ao tentar remover o contato %1$s ."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para melhorar o desempenho, armazenamos os seus dados em cache neste navegador. Desmarque esta caixa se este for um computador público ou se pretender que os seus dados sejam apagados quando terminar a sessão. É importante que você se desconecte explicitamente, caso contrário não todos os dados armazenados em cache podem ser apagados. Observe que, ao usar um aparelho não confiável, a criptografia OMEMO NÃO está disponível."],"This is a trusted device":["Este é um aparelho confiável"],"Password":["Palavra-passe"],"Create an account":["Criando uma conta"],"Don\'t have a chat account?":["Não possui uma conta de bate papo?"],"Log in":["Iniciar sessão"],"Disconnected":[""],"Click here to log in anonymously":["Clique aqui para efetuar o login anonimamente"],"Username":["Utilizador"],"user@domain":["utilizador@domínio"],"Please enter a valid XMPP address":["Por favor entre com um endereço XMPP válido"],"Chat Contacts":["Contatos"],"Toggle chat":["Alternar bate-papo"],"Click to restore this chat":["Clique para restaurar este bate-papo"],"Minimized":["Minimizado"],"Minimize this groupchat":["Minimizar esta conversação de grupo"],"This user is a moderator.":["Esse utilizador é o moderador."],"This user can send messages in this groupchat.":["Este utilizador pode enviar mensagens nessa sala."],"This user can NOT send messages in this groupchat.":["Este utilizador NÃO pode enviar mensagens nessa sala."],"Owner":["Proprietário"],"Admin":["Administrador"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Clique para mencionar %1$s em sua mensagem."],"Participants":["Participantes"],"This field is required":["Este campo é obrigatório"],"Join":["Entrar"],"Enter a new Groupchat":["Entrar em uma nova sala"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Endereço da groupchat"],"Groupchat address":["Endereço da sala"],"Groupchat id is invalid.":["A id. da conversação de grupo é inválida."],"Invite":["convite"],"Invite someone to this groupchat":["Convidar qualquer pessoa para esta conversação de grupo"],"user@example.org":["por exemplo, utilizador@exemplo.org"],"Optional reason for the invitation":["Motivo opcional para o convite"],"Show groupchats":["Mostrar Salas"],"Server address":["Endereço do Servidor"],"Show more information on this groupchat":["Mostrar mais informações dessa sala"],"Query for Groupchats":["Consulta para Groupchats"],"Description:":["Descrição:"],"Groupchat Address (JID):":["Endereço da sala (JID):"],"Participants:":["Participantes:"],"Features:":["Recursos:"],"Requires authentication":["Requer autenticação"],"Hidden":["Escondido"],"Requires an invitation":["Requer um convite"],"Moderated":["Moderado"],"Non-anonymous":["Não anônimo"],"Open":["Sala aberta"],"Permanent":["Sala permanente"],"Public":["Público"],"Semi-anonymous":["Semi anônimo"],"Temporary":["Temporário"],"Unmoderated":["Sem moderação"],"conference.example.org":["conferencia.exemplo.org"],"No groupchats found":["Nenhuma sala encontrada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["Alterar função"],"New Role":["Nova Função"],"Reason":[""],"Change affiliation":["Alterar afiliação"],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":["Ferramentas de Moderador"],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":["Mostrar utilizadores"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Sorry, something went wrong while trying to set the affiliation":["Desculpe, ocorreu algo de errado enquanto tentava definir a afiliação"],"Affiliation changed":[""],"Role changed":["Função alterada"],"You\'re not allowed to make that change":["Não está autorizado a efetuar essa alteração"],"Sorry, something went wrong while trying to set the role":["Desculpe, ocorreu algo de errado enquanto tentava definir a função"],"Topic":["Tópico"],"Topic author":["Autor do tópico"],"Groupchat address (JID)":["Endereço da sala de conversação (JID)"],"Message archiving":["Arquivando mensagem"],"Messages are archived on the server":["As mensagens são arquivadas no servidor"],"Description":["Descrição"],"Features":["Recursos"],"This groupchat is not publicly searchable":["Esta conversação de grupo não aparece nas pesquisas públicas"],"This groupchat is restricted to members only":["Este groupchat é restrito apenas aos membros"],"Members only":["Apenas membros"],"Participants entering this groupchat need to request permission to write":["Os participantes que entram neste groupchat precisam solicitar permissão para escrever"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Essa sala não precisa de palavra-passe para entrar"],"No password required":["Nenhuma palavra-passe necessária"],"Not anonymous":["Não anónimo"],"All other groupchat participants can see your XMPP address":["Todos os outros participantes da conversação de grupo podem ver o seu endereço de XMPP"],"Not moderated":["Não moderada"],"Participants entering this groupchat can write right away":["Os participantes que entram neste groupchat podem escrever imediatamente"],"Online users":["Utilizadores On-line"],"Anyone can join this groupchat":["Qualquer um pode juntar-se a esta conversação de grupo"],"This groupchat requires a password before entry":["Essa sala precisa de palavra-passe antes de entrar"],"Password protected":["Protegido por palavra-passe"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Esta conversação de grupo existe mesmo se vazia"],"Only moderators can see your XMPP address":["Apenas os moderadores podem ver o seu endereço de XMPP"],"This groupchat will disappear once the last person leaves":["Esta conversação de grupo deixará de existir quando todas as pessoas saírem"],"This groupchat is publicly searchable":["Esta conversação de grupo pode ser pesquisada publicamente"],"Groupchat info for %1$s":["Informações da sala em grupo para %1$s"],"You\'re not allowed to send messages in this room":["Não está autorizado para enviar mensagens nesta sala"],"The conversation has moved. Click below to enter.":["A conversação foi movida. Clique em baixo para entrar."],"This groupchat no longer exists":["Esta sala de conversação já não existe"],"Enter groupchat":["Entrar no groupchat"],"Please choose your nickname":["Por favor escolha seu apelido"],"This groupchat requires a password":["Essa sala de bate papo precisa de palavra-passe"],"Password: ":["Palavra-passe: "],"Submit":["Enviar"],"%1$s has entered the groupchat":["%1$s entrou no groupchat"],"%1$s has left the groupchat":["%1$s saiu do groupchat"],"%1$s is now a moderator":["%1$s é agora um moderador"],"%1$s is no longer a moderator":["%1$s não é mais um moderador"],"%1$s has been muted":["%1$s está mudo"],"Change user\'s affiliation to admin":["Mudar o utilizador para administrador"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Alterar a função do utilizador para o participante"],"Remove this groupchat":["Remover este groupchat"],"Kick user from groupchat":["Expulsar utilizador da sala"],"Write in 3rd person":["Escrever em terceira pessoa"],"Grant membership to a user":["Subscrever como utilizador membro"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Remover a habilidade do utilizador de postar mensagens"],"Change your nickname":["Escolha seu apelido"],"Grant moderator role to user":["Transformar utilizador em moderador"],"Grant ownership of this groupchat":["Conceder a propriedade desse batepapo"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Definir tópico do bate-papo"],"Set groupchat subject (alias for /subject)":["Definir o assunto do bate-papo (nome para/ assunto)"],"Allow muted user to post messages":["Permitir que o utilizador mudo publique mensagens"],"You are about to retract this message.":["Está prestes a retrair esta mensagem."],"You may optionally include a message, explaining the reason for the retraction.":["Pode opcionalmente incluir uma mensagem, a explicar o motivo da retração."],"Message Retraction":["Retração de Mensagem"],"Optional reason":["Motivo opcional"],"A timeout occurred while trying to retract the message":["Ocorreu uma expiração enquanto tentava retrair a mensagem"],"Sorry, you\'re not allowed to retract this message.":["Desculpe, não está autorizado a retrair esta mensagem."],"Configure":[""],"Configure this groupchat":["Configurar essa sala"],"Invite someone to join this groupchat":["Convide qualquer pessoa para se juntar a esta conversação de grupo"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Esconder a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Proibido: você não tem nas permissões necessárias para fazer isso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Proibido: você não tem a afiliação necessária para fazer isso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erro: O comando \\"%1$s\\" precisa de dois argumentos, o apelido e opcionalmente a razão."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["por exemplo, utilizador@exemplo.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Erro: número de argumentos inválido"],"This action was done by %1$s.":["Esta ação foi realizada por %1$s ."],"The reason given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"Groupchats":["Salas"],"Add a new groupchat":["Adicionar uma nova sala"],"Query for groupchats":["Consulta para Groupchats"],"Announcements":[""],"Notification from %1$s":["Mensagem de %1$s"],"%1$s says":["%1$s diz"],"has gone offline":["ficou offline"],"has gone away":["Este contato saiu"],"is busy":["ocupado"],"has come online":["Ficou on-line"],"wants to be your contact":["Quer ser seu contato"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Sobre"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":["%1$s Traduzir %2$s para seu próprio idioma"],"Log out":["Sair"],"Click to change your chat status":["Clique para mudar o seu estado no chat"],"Show details about this chat client":["Mostrar detalhes sobre este cliente de conversação"],"Your avatar image":["A imagem do seu avatar"],"Checkbox for selecting the following fingerprint":["Caixa de verificação para seleccionar a impressão digital seguinte"],"Device without a fingerprint":["Aparelho sem uma assinatura digital"],"Other OMEMO-enabled devices":["Outros aparelhos ativado para OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Caixa de seleção para selecionar impressões digitais de todos os outros aparelhos OMEMO"],"Remove checked devices and close":["Remover os aparelhos verificados e fechar"],"Select all":["Selecionar todos"],"This device\'s OMEMO fingerprint":["A impressão digital OMEMO deste aparelho"],"Generate new keys and fingerprint":["Gerar novas chaves e impressão digital"],"Your Profile":["Seu Perfil"],"XMPP Address (JID)":["Endereço XMPP (JID)"],"Save and close":["Salvar e fechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Use vírgulas para separar várias funções. Suas funções são mostradas ao lado do seu nome em suas mensagens de bate-papo."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Desculpe, ocorreu um erro ao tentar salvar seus dados de perfil."],"You can check your browser\'s developer console for any error output.":["Você pode verificar o console do desenvolvedor do seu navegador para qualquer saída de erro."],"Away":["Fora"],"Busy":["Ocupado"],"Custom status":["Estado customizado"],"Offline":["Off-line"],"Online":["On-line"],"Away for long":["Fora por muito tempo"],"Change chat status":["Alterar o estado do chat"],"Personal status message":["Mensagem de estado pessoal"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Tem a certeza que deseja terminar a sessão?"],"online":["on-line"],"busy":["ocupado"],"away for long":["fora por muito tempo"],"away":["fora"],"offline":["off-line"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Desculpe, não foi possível descriptografar uma mensagem OMEMO recebida devido a um erro."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s não parece ter um cliente que suporte OMEMO. Bate-papo criptografado não será mais possível neste grouchat."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Não é possível usar criptografia de ponta a ponta porque %1$s usa um cliente que não suporta a OMEMO."],"Messages are being sent in plaintext":["As mensagens estão a ser enviadas em texto simples"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Desculpe, não podemos enviar uma mensagem criptografada porque %1$s requer que você se inscreva para ver suas informações OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Desculpe, não podemos enviar uma mensagem criptografada porque o servidor remoto para %1$s não pôde ser encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Não é possível enviar uma mensagem criptografada, devido a um erro inesperado."],"Sorry, an error occurred while trying to remove the devices.":["Desculpe, ocorreu um erro ao tentar remover os aparelhos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Tem certeza de que deseja gerar novas chaves OMEMO? Isso removerá as chaves antigas e todas as mensagens criptografadas anteriormente não serão mais descriptografadas neste aparelho."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta é uma mensagem encriptada OMEMO que o seu cliente não parece suportar. Encontre mais informações em https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Inserir formulário de inscrição"],"Tip: A list of public XMPP providers is available":["Dica: uma lista de provedores XMPP públicos está disponível"],"here":["aqui"],"Sorry, we\'re unable to connect to your chosen provider.":["Desculpe, não podemos  conectar ao provedor escolhido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Desculpe, o provedor fornecido não oferece suporte de banda para registro da conta. Experimente com um provedor diferente."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo deu errado ao estabelecer uma conexão com \\"%1$s\\". Você tem certeza que ele existe?"],"Now logging you in":["Agora você logou"],"Registered successfully":["Registrado com sucesso"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rejeitou sua tentativa de registro. Verifique os valores que você digitou para verificar a exatidão."],"Leave this groupchat":["Deixar a sala"],"Click to toggle the list of open groupchats":["Clique para alternar a lista de salas de conversação abertas"],"Open Groupchats":["Abrir Groupchats"],"Are you sure you want to leave the groupchat %1$s?":["Tem a certeza que deseja sair da sala de conversação \\"%1$s\\"?"],"Add":["Adicionar"],"Add a Contact":["Adicionar um contato"],"This contact is busy":["Este contato está ocupado"],"This contact is online":["Este contato está online"],"This contact is offline":["Este contato está offline"],"This contact is unavailable":["Este contato está indisponível"],"This contact is away for an extended period":["Este contato está ausente por um longo período"],"This contact is away":["Este contato está ausente"],"Contact name":["Nome do contato"],"Optional nickname":["Apelido Opcional"],"Sorry, could not find a contact with that name":["Desculpe, não foi possível encontrar um contato com esse nome"],"This contact has already been added":["Este contacto já foi adicionado"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contacto"],"Filter by group name":["Filtrar por nome do grupo"],"Filter by status":["Filtrar por estado"],"Any":["Qualquer"],"Unread":["Não lido"],"Chatty":["Conversar"],"Extended Away":["Ausência Longa"],"Click to remove %1$s as a contact":["Clique para remover %1$s como contato"],"Click to accept the contact request from %1$s":["Clique para aceitar a solicitação de contato de %1$s"],"Click to decline the contact request from %1$s":["Clique para recusar a solicitação de contato de %1$s"],"Are you sure you want to decline this contact request?":["Tem certeza de que deseja recusar essa solicitação de contato?"],"Contacts":["Contatos"],"Add a contact":["Adicionar um contato"],"Re-sync your contacts":["Voltar a sincronizar os meus contactos"]}}}')}}]);
 //# sourceMappingURL=pt-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/pt_BR-LC_MESSAGES-converse-po.js b/src/conversejs/locales/pt_BR-LC_MESSAGES-converse-po.js
index a1346cdf6db5bfb923687549e657654aa3a84f37..40a262edf98c52de9c437dd5c5b2f048fc724f98 100644
--- a/src/conversejs/locales/pt_BR-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/pt_BR-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[168],{446:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"pt_BR"},"Create your account":["Criar sua conta"],"Please enter the XMPP provider to register with:":["Por favor entre com o provedor XMPP para registro:"],"Already have a chat account?":["Já possui uma conta de bate-papo?"],"Log in here":["Login aqui"],"Account Registration:":["Registro de Conta:"],"Register":["Registro"],"Choose a different provider":["Escolha um provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Espere, estamos carregando o formulário de inscrição …"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["A conexão caiu, tentando se reconectar."],"An error occurred while connecting to the chat server.":["Ocorreu um erro ao se conectar ao servidor de bate-papo."],"Your XMPP address and/or password is incorrect. Please try again.":["Seu endereço ID XMPP e/ou sua senha estão incorretas. Por favor, tente novamente."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Desculpe, não conseguimos nos conectar ao host XMPP com domínio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor XMPP não ofereceu um mecanismo de autenticação suportado"],"Sorry, could not determine upload URL.":["Desculpe, não foi possível determinar a URL para upload."],"Sorry, could not determine file upload URL.":["Desculpe, não foi possível determinar o endereço para upload de arquivos."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Desculpe, não foi possível realizar o upload de seu arquivo. Resposta do servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Desculpe, não foi possível realizar o upload de seu arquivo."],"You\'re not allowed to retract your message.":["Você não está autorizado a retrair sua mensagem."],"Sorry, an error occurred while trying to retract your message.":["Desculpe, ocorreu um erro ao tentar retrair sua mensagem."],"You\'re not allowed to send a message.":["Você não está autorizado a enviar uma mensagem."],"Sorry, an error occurred while trying to send your message.":["Desculpe, ocorreu um erro ao tentar enviar sua mensagem."],"Sorry, looks like file upload is not supported by your server.":["Desculpe, parece que o upload de arquivos não é suportado por seu servidor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamanho do arquivo, %1$s, excede o tamanho máximo permitido por seu servidor, que é %2$s."],"Smileys and emotions":["Smileys e emoticons"],"People":["Pessoas"],"Activities":["Atividades"],"Travel":["Viagem"],"Objects":["Objetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":["Bandeiras"],"Stickers":["Adesivos"],"This groupchat is not anonymous":["Essa sala não é anônima"],"This groupchat now shows unavailable members":["Agora esta sala mostra membros indisponíveis"],"This groupchat does not show unavailable members":["Essa sala não mostra membros indisponíveis"],"The groupchat configuration has changed":["A configuração da sala mudou"],"Groupchat logging is now enabled":["O log da sala está ativado"],"Groupchat logging is now disabled":["O log da sala está desativado"],"This groupchat is now no longer anonymous":["Essa sala não é mais anônima"],"This groupchat is now semi-anonymous":["Essa sala agora é semi anônima"],"This groupchat is now fully-anonymous":["Essa sala agora é totalmente anônima"],"A new groupchat has been created":["Uma nova sala foi criada"],"Your nickname has been automatically set to %1$s":["Seu apelido foi mudado automaticamente para %1$s"],"Your nickname has been changed to %1$s":["Seu apelido foi mudado para %1$s"],"You have been banned from this groupchat":["Você foi banido dessa sala"],"You have exited this groupchat due to a technical problem":["Você saiu deste grupo devido a um problema técnico"],"You have been kicked from this groupchat":["Você foi expulso dessa sala"],"You have been removed from this groupchat because of an affiliation change":["Você foi removido da sala devido a uma mudança de associação"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Você foi removido da sala porque ela foi mudada para somente membros e você não é um membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Você foi removido da sala porque o serviço está sendo desligado"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Sua retração não foi entregue porque você não está presente no grupo."],"Your message was not delivered because you weren\'t allowed to send it.":["Sua mensagem não foi entregue porque você não tem permissão para enviá-la."],"Your message was not delivered because you\'re not present in the groupchat.":["Sua mensagem não foi entregue porque você não está presente na sala."],"A timeout happened while while trying to retract your message.":["O tempo esgotou enquanto tentava retrair sua mensagem."],"You\'re not allowed to register yourself in this groupchat.":["Você não tem permissão de se registrar nessa sala."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Você não tem permissão de entrar nessa sala porque ela é apenas para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Não é possível registrar apelidos nesta sala, pois não suporta registro."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Não é possível registrar seu apelido nesta sala, formulário de dados inválido."],"Topic set by %1$s":["Tópico definido por %1$s"],"Topic cleared by %1$s":["Tópico liberado por %1$s"],"%1$s has been banned by %2$s":["%1$s foi banido por %2$s"],"%1$s has been banned":["%1$s foi banido"],"%1$s\'s nickname has changed":["O apelido de %1$s foi alterado"],"%1$s has been kicked out by %2$s":["%1$s foi expulso por %2$s"],"%1$s has been kicked out":["%1$s foi expulso"],"%1$s has been removed because of an affiliation change":["%1$s foi removido por causa de troca de associação"],"%1$s has been removed for not being a member":["%1$s foi removido por não ser mais um membro"],"%1$s is no longer an admin of this groupchat":["%1$s não é mais um administrador desta sala"],"%1$s is no longer an owner of this groupchat":["%1$s não é mais um proprietário desta sala"],"%1$s is no longer banned from this groupchat":["%1$s não está mais banido desta sala"],"%1$s is no longer a member of this groupchat":["%1$s não é mais um membro deste grupo"],"%1$s is now a member of this groupchat":["%1$s se tornou um membro desta sala"],"%1$s is now an %2$s of this groupchat":["%1$s se tornou %2$s desta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O apelido escolhido está atualmente em uso, por favor escolha outro."],"Password incorrect":["Senha incorreta"],"You are not on the member list of this groupchat.":["Você não é membro dessa sala."],"You have been banned from this groupchat.":["Você foi banido deste bate-papo em grupo."],"You are not allowed to create new groupchats.":["Você não tem permissão de criar novas salas."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Seu apelido não está de acordo com as regras da sala."],"This groupchat does not (yet) exist.":["Esta sala não existe (ainda)."],"This groupchat has reached its maximum number of participants.":["Esta sala atingiu o número máximo de ocupantes."],"Remote server not found":["Servidor remoto não encontrado"],"The explanation given is: \\"%1$s\\".":["A explicação dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidou você para entrar na sala: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidou você a participar de uma sala de bate-papo: %2$s, por seguinte motivo: \\"%3$s\\""],"Error":["Erro"],"Sorry, something went wrong while trying to save your bookmark.":["Desculpe, algo deu errado ao tentar salvar seu favorito."],"Timeout Error":["Erro de tempo limite"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["O servidor não retornou seus favoritos dentro do tempo permitido. Você pode recarregar a página para solicitá-los novamente."],"My contacts":["Meus contatos"],"Pending contacts":["Contados pendentes"],"Contact requests":["Solicitação de contatos"],"Ungrouped":["Desagrupado"],"New messages":["Novas mensagens"],"Sorry, there was an error while trying to add %1$s as a contact.":["Desculpe, houve um erro ao tentar adicionar %1$s como um contato."],"This client does not allow presence subscriptions":["Este cliente não permite assinaturas de presença"],"Click to hide these contacts":["Clique para esconder esses contatos"],"Unbookmark this groupchat":["Desmarcar a sala"],"Click to open this groupchat":["Clique para abrir essa sala"],"Click to toggle the bookmarks list":["Clique para alternar a lista de favoritos"],"Bookmarks":["Favoritos"],"Bookmark this groupchat":["Marcar essa sala nos favoritos"],"Would you like this groupchat to be automatically joined upon startup?":["Gostaria de entrar nessa sala automaticamente quando iniciar?"],"The name for this bookmark:":["Nome para o favorito:"],"What should your nickname for this groupchat be?":["Qual deve ser o seu apelido para esta sala?"],"Save":["Salvar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Tem certeza de que deseja remover o favorito \\"%1$s\\"?"],"Unbookmark":["Excluir de favoritos"],"Bookmark":["Favoritos"],"Close":["Fechar"],"OK":["OK"],"Image: ":["Imagem: "],"Download audio file \\"%1$s\\"":["Baixar arquivo de audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Baixar arquivo \\"%1$s\\""],"Cancel Editing":["Anular edição"],"Edit":["Editar"],"Retract":["Retirar"],"Message versions":["Versões de mensagem"],"Retry":["Tentar de novo"],"Uploading file:":["Fazendo upload de arquivo:"],"%1$s has removed this message":["%1$s excluiu esta mensagem"],"This message has been edited":["Esta mensagem foi editada"],"Show more":["Mostrar mais"],"Show less":["Mostrar menos"],"No message history available.":["Nenhum histórico de mensagens disponível."],"Search results":["Procurar resultados"],"Search":["Procurar"],"Insert emojis":["Inserir emojis"],"Send the message":["Envie esta mensagem"],"Start a call":["Iniciar chamada"],"Message characters remaining":["Caracteres de mensagem restantes"],"Hide participants":["Ocultar participantes"],"Show participants":["Mostrar participantes"],"Choose a file to send":["Escolha um arquivo para enviar"],"Click to write as a normal (non-spoiler) message":["Clique para escrever como uma mensagem normal (sem estragar surpresa)"],"Click to write your message as a spoiler":["Clique para escrever sua mensagem como um Spoiler"],"The User\'s Profile Image":["A imagem de perfil do usuário"],"Trusted":["Confiável"],"Untrusted":["Não confiável"],"OMEMO Fingerprints":["OMEMO Impressões digitais"],"No OMEMO-enabled devices found":["Dispositivos com OMEMO ativado não encontrados"],"Remove as contact":["Remover contato"],"XMPP Address":["Endereço XMPP"],"Email":["Email"],"Full Name":["Nome Completo"],"Nickname":["Apelido"],"Refresh":["Atualizar"],"Role":["Função"],"URL":["URL"],"%1$s is typing":["%1$s está digitando"],"%1$s has stopped typing":["%1$s parou de digitar"],"%1$s has gone away":["%1$s está ausente"],"Remove messages":["Remover mensagens"],"Close this chat":["Feche este bate-papo"],"Write in the third person":["Escrever em terceira pessoa"],"Show this menu":["Mostrar o menu"],"Hidden message":["Mensagem oculta"],"Message":["Mensagem"],"Optional hint":["Dica Opcional"],"You have unread messages":["Você tem mensagens não lidas"],"Details":["Detalhes"],"See more information about this person":["Mostrar mais informações sobre esta pessoa"],"Close and end this conversation":["Encerrar e finalizar esta conversa"],"Sorry, the connection has been lost, and your message could not be sent":["Desculpe, a conexão caiu, por isto sua mensagem não podia ser enviada"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Esteja ciente de que outros clientes de XMPP/Jabber (e servidores) podem ainda não suportar retrações e que esta mensagem pode não ser excluída em todos os lugares."],"Are you sure you want to retract this message?":["Tem certeza que deseja retrair esta mensagem?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Você tem uma mensagem não enviada que será perdida se você continuar. Você tem certeza?"],"Are you sure you want to clear the messages from this conversation?":["Tem certeza que deseja limpar as mensagens dessa conversa?"],"%1$s has gone offline":["%1$s está offline"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está online"],"Sorry, something went wrong while trying to refresh":["Desculpe, algo deu errado ao tentar atualizar"],"Are you sure you want to remove this contact?":["Tem certeza de que deseja remover esse contato?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Desculpe, houve um erro ao tentar remover o contato %1$s ."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para melhorar a performance, armazenamos dados em seu navegador. Desmarque esta caixa se estiver em um computador público ou se quiser que seus dados sejam apagados quando sair. É importante que explicitamente saia da aplicação, cado contrário nem todos os dados armazenados serão apagados. Por favor, note que quando usando um dispositivo não confiável, a criptografia OMEMO não estará disponível."],"This is a trusted device":["Este é um dispositivo confiável"],"Password":["Senha"],"Create an account":["Criando uma conta"],"Don\'t have a chat account?":["Não possui uma conta de bate papo?"],"Log in":["Entrar"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Clique aqui para efetuar o login anonimamente"],"Username":["Usuário"],"user@domain":["usuário@domínio"],"Please enter a valid XMPP address":["Por favor entre com um endereço XMPP válido"],"Chat Contacts":["Contatos"],"Toggle chat":["Alternar bate-papo"],"Click to restore this chat":["Clique para restaurar este bate-papo"],"Minimized":["Minimizado"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar este bate papo"],"Minimize this groupchat":["Minimizar este grupo"],"This field is required":["Este campo é obrigatório"],"Join":["Entrar"],"Enter a new Groupchat":["Entrar em uma nova sala"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Nome da sala"],"Groupchat address":["Endereço da sala"],"Groupchat id is invalid.":["ID do Grupo é inválido."],"Invite":["convite"],"Invite someone to this groupchat":["Convide alguém para este grupo"],"user@example.org":["usuário@exemplo.org"],"Optional reason for the invitation":["Motivo opcional para o convite"],"Show groupchats":["Mostrar Salas"],"Server address":["Endereço do Servidor"],"Show more information on this groupchat":["Mostrar mais informações dessa sala"],"Query for Groupchats":["Consulta do bate papo"],"Description:":["Descrição:"],"Groupchat Address (JID):":["Endereço da sala (JID):"],"Participants:":["Participantes:"],"Features:":["Recursos:"],"Requires authentication":["Requer autenticação"],"Hidden":["Escondido"],"Requires an invitation":["Requer um convite"],"Moderated":["Moderado"],"Non-anonymous":["Não anônimo"],"Open":["Sala aberta"],"Permanent":["Sala permanente"],"Public":["Público"],"Semi-anonymous":["Semi anônimo"],"Temporary":["Temporário"],"Unmoderated":["Sem moderação"],"conference.example.org":["conferencia.exemplo.org"],"Groupchats found":["Salas encontradas"],"No groupchats found":["Nenhuma sala encontrada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderadores são usuários privilegiados que podem alterar as funções de outros usuários (exceto aqueles com funções de administrador ou proprietário)."],"The default role, implies that you can read and write messages.":["A função padrão implica que você pode ler e gravar mensagens."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Visitantes não têm permissão para escrever mensagens em um bate-papo moderado para vários usuários."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietário é a afiliação mais alta. Os proprietários podem modificar funções e afiliações de todos os outros usuários."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin é a segunda maior afiliação. Os administradores podem modificar funções e afiliações de todos os outros usuários, exceto proprietários."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para banir um usuário, você atribui a ele a afiliação de \\"banido\\"."],"Change role":["Alterar função"],"New Role":["Nova função"],"Reason":["Razão"],"Change affiliation":["Alterar afiliação"],"New affiliation":["Nova afiliação"],"Affiliation":["Afiliação"],"Moderator Tools":["Ferramentas de Moderação"],"No users with that affiliation found.":["Nenhum usuário com essa afiliação encontrado."],"No users with that role found.":["Nenhum usuário com essa função encontrado."],"Type here to filter the search results":["Digite aqui para filtrar os resultados da busca"],"Show users":["Mostrar usuários"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["As funções são atribuídas aos usuários para conceder ou negar certas habilidades em um bate-papo com vários usuários. Eles são atribuídos explícita ou implicitamente como parte de uma afiliação. Uma função que não é devida a uma afiliação, é válida apenas pela duração da sessão do usuário."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Uma afiliação é um direito de longa duração que normalmente implica uma certa função e que concede privilégios e responsabilidades. Por exemplo, administradores e proprietários têm automaticamente a função de moderador."],"Timeout error while trying to set the affiliation":["O tempo esgotou ao tentar definir a afiliação"],"Sorry, you\'re not allowed to make that change":["Desculpe, você não está autorizado a fazer essa alteração"],"Sorry, something went wrong while trying to set the affiliation":["Desculpe, algo deu errado enquanto tentava definir a afiliação"],"Affiliation changed":["Afiliação alterada"],"Role changed":["Função alterada"],"You\'re not allowed to make that change":["Você não está autorizado a fazer essa alteração"],"Sorry, something went wrong while trying to set the role":["Desculpe, algo deu errado enquanto tentava definir a função"],"Topic":["Tópico"],"Topic author":["Autor do tópico"],"Groupchat address (JID)":["Endereço da sala (JID)"],"Message archiving":["Arquivando mensagem"],"Messages are archived on the server":["As mensagens são arquivadas no servidor"],"Description":["Descrição"],"Features":["Recursos"],"This groupchat is not publicly searchable":["Essa sala não aparece em pesquisas públicas"],"This groupchat is restricted to members only":["Essa sala é restrita apenas para membros"],"Members only":["Apenas membros"],"Participants entering this groupchat need to request permission to write":["Os participantes entrando nesta sala devem solicitar permissão para escrever"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Essa sala não precisa de senha para entrar"],"No password required":["Nenhuma senha necessária"],"Not anonymous":["Não anônimo"],"All other groupchat participants can see your XMPP address":["Todos os outros ocupantes da sala podem ver seu endereço XMPP"],"Not moderated":["Não moderada"],"Participants entering this groupchat can write right away":["Participantes entrando nesta sala podem escrever diretamente"],"Online users":["Usuários Online"],"Anyone can join this groupchat":["Qualquer um pode se juntar a essa sala"],"This groupchat requires a password before entry":["Essa sala precisa de senha antes de entrar"],"Password protected":["Protegido por senha"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Essa sala persistirá mesmo se estiver desocupada"],"Only moderators can see your XMPP address":["Apenas moderadores podem ver seu endereço XMPP"],"This groupchat will disappear once the last person leaves":["Esta sala desaparecerá assim que a última pessoa sair"],"This groupchat is publicly searchable":["Essa sala pode ser pesquisada publicamente"],"Groupchat info for %1$s":["Informações da sala em grupo para %1$s"],"You\'re not allowed to send messages in this room":["Você não tem permissão para enviar mensagens nesta sala"],"The conversation has moved. Click below to enter.":["Esta conversa foi movida. Clique abaixo para entrar de novo."],"This groupchat no longer exists":["Este grupo de conversa não existe mais"],"Hide the groupchat topic":["Ocultar o tópico do grupo"],"This groupchat is bookmarked":["Este grupo está nos favoritos"],"Enter groupchat":["Entrar na sala"],"Choose a nickname to enter":["Escolha um apelido para entrar"],"Please choose your nickname":["Por favor escolha seu apelido"],"This groupchat requires a password":["Essa sala de bate papo precisa da senha"],"Password: ":["Senha: "],"Submit":["Enviar"],"This user is a moderator.":["Esse usuário é o moderador."],"This user can send messages in this groupchat.":["Esse usuário pode enviar mensagens nessa sala."],"This user can NOT send messages in this groupchat.":["Esse usuário NÃO pode enviar mensagens nessa sala."],"Owner":["Dono"],"Admin":["Admin"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Clique para mencionar %1$s em sua mensagem."],"Participants":["Participantes"],"%1$s has entered the groupchat":["%1$s entrou na sala"],"%1$s has left the groupchat":["%1$s saiu da sala"],"%1$s is now a moderator":["%1$s é agora um moderador"],"%1$s is no longer a moderator":["%1$s não é mais um moderador"],"%1$s has been given a voice":["%1$s recebeu a palavra novamente"],"%1$s has been muted":["%1$s está mudo"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s está digitando"],"%1$s have stopped typing":["%1$s parou de digitar"],"%1$s have gone away":["%1$s está ausente"],"%1$s have entered the groupchat":["%1$s entrou na sala"],"%1$s have left the groupchat":["%1$s saiu da sala"],"%1$s are now moderators":["%1$s são agora moderadores"],"%1$s are no longer moderators":["%1$s não são mais moderadores"],"%1$s have been given voices":["%1$s foram dadas a palavra"],"%1$s have been muted":["%1$s foram silenciados"],"Change user\'s affiliation to admin":["Mudar o usuário para administrador"],"Ban user by changing their affiliation to outcast":["Banir o usuário alterando sua afiliação para banido"],"Clear the chat area":["Limpar a área de bate-papo"],"Close this groupchat":["Feche este grupo"],"Change user role to participant":["Alterar a função do usuário para o participante"],"Remove this groupchat":["Excluir esta sala"],"Kick user from groupchat":["Expulsar usuário da sala"],"Write in 3rd person":["Escrever em terceira pessoa"],"Grant membership to a user":["Subscrever como usuário membro"],"Opens up the moderator tools GUI":["Abre a interface gráfica das ferramentas do moderador"],"Remove user\'s ability to post messages":["Remover a habilidade do usuário de postar mensagens"],"Change your nickname":["Escolha seu apelido"],"Grant moderator role to user":["Transformar usuário em moderador"],"Grant ownership of this groupchat":["Conceder a propriedade desse batepapo"],"Register your nickname":["Escolha seu apelido"],"Revoke the user\'s current affiliation":["Revogar a afiliação atual do usuário"],"Set groupchat subject":["Definir tópico do bate-papo"],"Set groupchat subject (alias for /subject)":["Definir o assunto do bate-papo (nome para/ assunto)"],"Allow muted user to post messages":["Permitir que o usuário mudo publique mensagens"],"You are about to retract this message.":["Você está a ponto de retirar esta mensagem."],"You may optionally include a message, explaining the reason for the retraction.":["Opcionalmente, você pode incluir uma mensagem, explicando o motivo da retração."],"Message Retraction":["Retração de mensagens"],"Optional reason":["Motivo opcional"],"Sorry, you\'re not allowed to retract this message":["Desculpe, você não está autorizado a retrair esta mensagem"],"A timeout occurred while trying to retract the message":["O tempo esgotou enquanto tentava retrair a mensagem"],"Sorry, you\'re not allowed to retract this message.":["Desculpe, você não está autorizado a retrair esta mensagem."],"Show more information about this groupchat":["Mostrar mais informações sobre este grupo"],"Configure":["Configurar"],"Configure this groupchat":["Configurar essa sala"],"Invite someone to join this groupchat":["Convide alguém para se unir a este grupo"],"Show topic":["Mostrar tópico"],"Hide topic":["Ocultar assunto"],"Show the topic message in the heading":["Exiba a mensagem do tópico no rótulo"],"Hide the topic in the heading":["Oculte o tópico no rótulo"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar este grupo"],"Destroy":["Destruir"],"Leave":["Sair"],"Leave and close this groupchat":["Deixe e feche este grupo"],"Are you sure you want to leave this groupchat?":["Tem certeza que deseja sair do grupo?"],"Hide the list of participants":["Esconder a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Proibido: você não tem nas permissões necessárias para fazer isso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Proibido: você não tem a afiliação necessária para fazer isso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erro: O comando \\"%1$s\\" precisa de dois argumentos, o apelido e opcionalmente a razão."],"Error: couldn\'t find a groupchat participant based on your arguments":["Erro: não foi possível encontrar um participante desta sala"],"Error: found multiple groupchat participant based on your arguments":["Erro: encontrou múltiplos participantes deste grupo na base da sua pesquisa"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Não foi possível encontrar um participante com esse nome. Poderia ter deixado o grupo."],"Sorry, an error happened while running the command.":["Desculpe, aconteceu um erro durante a execução do comando."],"Check your browser\'s developer console for details.":["Verifique o console do desenvolvedor do seu navegador para obter mais detalhes."],"Are you sure you want to destroy this groupchat?":["Você tem certeza de que quer destruir este grupo?"],"Please enter the XMPP address of this groupchat to confirm":["Favor digitar o servidor XMPP deste grupo para confirmar"],"name@example.org":["nome@exemplo.org"],"Optional reason for destroying this groupchat":["Motivo opcional para destruir este grupo"],"Optional XMPP address for a new groupchat that replaces this one":["Servidor do XMPP opcional para um novo grupo que substitui este"],"replacement@example.org":["usuário@exemplo.org"],"Your nickname is \\"%1$s\\"":["Seu apelido é \\"%1$s\\""],"Error: invalid number of arguments":["Erro: número de argumentos inválido"],"This action was done by %1$s.":["Essa ação foi realizada para %1$s ."],"The reason given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"Groupchats":["Grupos"],"Add a new groupchat":["Adicionar um novo grupo"],"Query for groupchats":["Consulta por grupos"],"Sorry, an error occurred while trying to submit the config form.":["Desculpe, ocorreu um erro ao tentar enviar o formulário de configuração."],"Close these announcements":["Feche estes comunicados"],"Announcements":["Comunicados"],"Click to open this server message":["Clique para abrir esta mensagem no servidor"],"Notification from %1$s":["Mensagem de %1$s"],"%1$s says":["%1$s diz"],"has gone offline":["ficou offline"],"has gone away":["Este contato saiu"],"is busy":["ocupado"],"has come online":["Ficou on-line"],"wants to be your contact":["Quer ser seu contato"],"Hide":["Ocultar"],"Execute":["Executar"],"On which entity do you want to run commands?":["Em qual entidade você quer executar comandos?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Alguns serviços e entidades do XMPP permitem que usuários privilegiados executem comandos específicos neles."],"Commands found":["Comandos encontrados"],"List available commands":["Lista de comandos disponíveis"],"No commands found":["Nenhum comando encontrado"],"Sorry, an error occurred while looking for commands on that entity.":["Desculpe, um erro ocorreu enquanto procurava comandos sobre essa entidade."],"The specified entity doesn\'t support ad-hoc commands":["Esta entidade não suporta comandos específicos"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Desculpe, ocorreu um erro ao tentar executar o comando. Veja o console do desenvolvedor para obter mais detalhes"],"About":["Sobre"],"Commands":["Comandos"],"Settings":["Configurações"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s XMPP cliente de bate papo oferecido a você por %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduza %2$s para sua própria lingua"],"Log out":["Sair"],"Click to change your chat status":["Clique para mudar seu status no chat"],"Show details about this chat client":["Mostrar detalhes sobre este cliente do bate-papo"],"Your avatar image":["Sua imagem de perfil"],"Checkbox for selecting the following fingerprint":["Caixa de seleção da seguinte assinatura"],"Device without a fingerprint":["Dispositivo sem impressão digital"],"Checkbox for selecting the following device":["Markar caixa para selecionar o seguinte dispositivo"],"Other OMEMO-enabled devices":["Outros dispositivos com OMEMO habilitado"],"Checkbox to select fingerprints of all other OMEMO devices":["Caixa para selecionar assinaturas de todos os dispositivos OMEMO"],"Remove checked devices and close":["Remover dispositivos selecionados e fechar"],"Select all":["Selecionar tudo"],"This device\'s OMEMO fingerprint":["Assinatura OMEMO deste dispositivo"],"Generate new keys and fingerprint":["Gerar novas chaves e assinaturas"],"Your Profile":["Seu Perfil"],"XMPP Address (JID)":["Servidor do XMPP (JID)"],"Save and close":["Salvar e fechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Use vírgulas para separar múltiplos papéis. Seus papéis são exibidos ao lado de seu nome em suas mensagens."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Desculpe, aconteceu um erro ao tentar salvar seus dados de perfil."],"You can check your browser\'s developer console for any error output.":["Verifique o console de desenvolvedor de seu navegador em busca de mensagens de erro."],"Away":["Ausente"],"Busy":["Ocupado"],"Custom status":["Status customizado"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Ausente por bastante tempo"],"Change chat status":["Alterar o status do bate-papo"],"Personal status message":["Mensagem pessoal do status"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Tem certeza que quer sair?"],"online":["online"],"busy":["ocupado"],"away for long":["ausente a bastante tempo"],"away":["ausente"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Desculpe, não foi possível decriptar uma mensagem OMEMO recebida devido a um erro."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s não parece ter um cliente com suporte a OMEMO. Mensagens encriptadas não mais serão possíveis nesta sala."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Não é possível usar criptografia de ponta a ponta neste grupo, ou o grupo tem algum anonimato ou nem todos os participantes suportam a OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Não é possível usar criptografia ponto a ponto porque %1$s usa um cliente que não suporta OMEMO."],"Messages are being sent in plaintext":["Mensagens serão enviadas em texto puro"],"Messages are sent encrypted":["As mensagens são enviadas criptografadas"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Este groupo precisa ter apenas membros não anônimos para suportar as mensagens criptografadas OMEMO"],"Sorry, an error occurred while trying to remove the devices.":["Desculpe, ocorreu um erro enquanto tentava remover os dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Tem certeza de que deseja gerar novas chaves OMEMO? Isso removerá suas chaves antigas e todas as mensagens criptografadas anteriormente não poderão mais ser descriptografadas neste dispositivo."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Desculpe, não fomos capazes de enviar uma mensagem encriptada porque %1$s requer que você esteja em sua lista de contatos para ver suas informações OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Desculpe, não fomos capazes de enviar uma mensagem encriptada porque o servidor remoto de %1$s não pode ser encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Incapaz de mandar mensagem encriptada devido a erro inesperado."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Desculpe, nenhum dispositivo encontrado para o qual possamos enviar uma mensagem criptografada OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta é uma mensagem criptografada com OMEMO que seu cliente não parece ter suporte. Para maiores informações acesse https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Inserir formulário de inscrição"],"Tip: A list of public XMPP providers is available":["Dica: uma lista de provedores XMPP públicos está disponível"],"here":["aqui"],"Sorry, we\'re unable to connect to your chosen provider.":["Desculpe, não podemos conectar ao provedor escolhido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Desculpe, o provedor fornecido não oferece suporte de banda para registro da conta. Experimente com um provedor diferente."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo deu errado ao estabelecer uma conexão com \\"%1$s\\". Você tem certeza que ele existe?"],"Now logging you in":["Agora você logou"],"Registered successfully":["Registrado com sucesso"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rejeitou sua tentativa de registro. Verifique os valores que você digitou para verificar a exatidão."],"Leave this groupchat":["Deixar a sala"],"Click to toggle the list of open groupchats":["Clique para alternar a lista de salas"],"Open Groupchats":["Abrir sala"],"Are you sure you want to leave the groupchat %1$s?":["Tem certeza que deseja sair do qrupo \\"%1$s\\"?"],"Add":["Adicionar"],"Add a Contact":["Adicionar contato"],"This contact is busy":["Este contato está ocupado"],"This contact is online":["Este contato está online"],"This contact is offline":["Este contato está offline"],"This contact is unavailable":["Este contato está indisponível"],"This contact is away for an extended period":["Este contato está ausente por um longo período"],"This contact is away":["Este contato está ausente"],"Contact name":["Nome do contato"],"Optional nickname":["Apelido Opcional"],"Sorry, could not find a contact with that name":["Desculpe, não foi possível encontrar um contato com este nome"],"This contact has already been added":["Este contato já foi adicionado"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contato"],"Filter by group name":["Filtrar por nome do grupo"],"Filter by status":["Filtrar por status"],"Any":["Qualquer"],"Unread":["Não lido"],"Chatty":["Conversar"],"Extended Away":["Ausência Longa"],"Click to remove %1$s as a contact":["Clique para remover %1$s como contato"],"Click to accept the contact request from %1$s":["Clique para aceitar a solicitação de contato de %1$s"],"Click to decline the contact request from %1$s":["Clique para recusar a solicitação de contato de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Clique para conversar com %1$s (servidor do XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Tem certeza de que deseja recusar essa solicitação de contato?"],"Contacts":["Contatos"],"Add a contact":["Adicionar contato"],"Re-sync your contacts":["Sincronize meus contatos de novo"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[168],{534:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n > 1;","lang":"pt_BR"},"Create your account":["Criar sua conta"],"Please enter the XMPP provider to register with:":["Por favor entre com o provedor XMPP para registro:"],"Already have a chat account?":["Já possui uma conta de bate-papo?"],"Log in here":["Login aqui"],"Account Registration:":["Registro de Conta:"],"Register":["Registro"],"Choose a different provider":["Escolha um provedor diferente"],"Hold tight, we\'re fetching the registration form…":["Espere, estamos carregando o formulário de inscrição …"],"Cancel":["Cancelar"],"The connection has dropped, attempting to reconnect.":["A conexão caiu, tentando se reconectar."],"An error occurred while connecting to the chat server.":["Ocorreu um erro ao se conectar ao servidor de bate-papo."],"Your XMPP address and/or password is incorrect. Please try again.":["Seu endereço ID XMPP e/ou sua senha estão incorretas. Por favor, tente novamente."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Desculpe, não conseguimos nos conectar ao host XMPP com domínio: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["O servidor XMPP não ofereceu um mecanismo de autenticação suportado"],"Undecryptable OMEMO message":["Mensagem OMEMO indecifrável"],"Sorry, could not determine upload URL.":["Desculpe, não foi possível determinar a URL para upload."],"Sorry, could not determine file upload URL.":["Desculpe, não foi possível determinar o endereço para upload de arquivos."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Desculpe, não foi possível realizar o upload de seu arquivo. Resposta do servidor: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Desculpe, não foi possível realizar o upload de seu arquivo."],"You\'re not allowed to retract your message.":["Você não está autorizado a retrair sua mensagem."],"Sorry, an error occurred while trying to retract your message.":["Desculpe, ocorreu um erro ao tentar retrair sua mensagem."],"You\'re not allowed to send a message.":["Você não está autorizado a enviar uma mensagem."],"Sorry, an error occurred while trying to send your message.":["Desculpe, ocorreu um erro ao tentar enviar sua mensagem."],"Sorry, looks like file upload is not supported by your server.":["Desculpe, parece que o upload de arquivos não é suportado por seu servidor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["O tamanho do arquivo, %1$s, excede o tamanho máximo permitido por seu servidor, que é %2$s."],"Smileys and emotions":["Smileys e emoticons"],"People":["Pessoas"],"Activities":["Atividades"],"Travel":["Viagem"],"Objects":["Objetos"],"Animals and nature":["Animais e natureza"],"Food and drink":["Comida e bebida"],"Symbols":["Símbolos"],"Flags":["Bandeiras"],"Stickers":["Adesivos"],"This groupchat is not anonymous":["Essa sala não é anônima"],"This groupchat now shows unavailable members":["Agora esta sala mostra membros indisponíveis"],"This groupchat does not show unavailable members":["Essa sala não mostra membros indisponíveis"],"The groupchat configuration has changed":["A configuração da sala mudou"],"Groupchat logging is now enabled":["O log da sala está ativado"],"Groupchat logging is now disabled":["O log da sala está desativado"],"This groupchat is now no longer anonymous":["Essa sala não é mais anônima"],"This groupchat is now semi-anonymous":["Essa sala agora é semi anônima"],"This groupchat is now fully-anonymous":["Essa sala agora é totalmente anônima"],"A new groupchat has been created":["Uma nova sala foi criada"],"Your nickname has been automatically set to %1$s":["Seu apelido foi mudado automaticamente para %1$s"],"Your nickname has been changed to %1$s":["Seu apelido foi mudado para %1$s"],"You have been banned from this groupchat":["Você foi banido dessa sala"],"You have exited this groupchat due to a technical problem":["Você saiu deste grupo devido a um problema técnico"],"You have been kicked from this groupchat":["Você foi expulso dessa sala"],"You have been removed from this groupchat because of an affiliation change":["Você foi removido da sala devido a uma mudança de associação"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Você foi removido da sala porque ela foi mudada para somente membros e você não é um membro"],"You have been removed from this groupchat because the service hosting it is being shut down":["Você foi removido da sala porque o serviço está sendo desligado"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Sua retração não foi entregue porque você não está presente no grupo."],"Your message was not delivered because you weren\'t allowed to send it.":["Sua mensagem não foi entregue porque você não tem permissão para enviá-la."],"Your message was not delivered because you\'re not present in the groupchat.":["Sua mensagem não foi entregue porque você não está presente na sala."],"A timeout happened while while trying to retract your message.":["O tempo esgotou enquanto tentava retrair sua mensagem."],"You\'re not allowed to register yourself in this groupchat.":["Você não tem permissão de se registrar nessa sala."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Você não tem permissão de entrar nessa sala porque ela é apenas para membros."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Não é possível registrar apelidos nesta sala, pois não suporta registro."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Não é possível registrar seu apelido nesta sala, formulário de dados inválido."],"Topic set by %1$s":["Tópico definido por %1$s"],"Topic cleared by %1$s":["Tópico liberado por %1$s"],"%1$s has been banned by %2$s":["%1$s foi banido por %2$s"],"%1$s has been banned":["%1$s foi banido"],"%1$s\'s nickname has changed":["O apelido de %1$s foi alterado"],"%1$s has been kicked out by %2$s":["%1$s foi expulso por %2$s"],"%1$s has been kicked out":["%1$s foi expulso"],"%1$s has been removed because of an affiliation change":["%1$s foi removido por causa de troca de associação"],"%1$s has been removed for not being a member":["%1$s foi removido por não ser mais um membro"],"%1$s is no longer an admin of this groupchat":["%1$s não é mais um administrador desta sala"],"%1$s is no longer an owner of this groupchat":["%1$s não é mais um proprietário desta sala"],"%1$s is no longer banned from this groupchat":["%1$s não está mais banido desta sala"],"%1$s is no longer a member of this groupchat":["%1$s não é mais um membro deste grupo"],"%1$s is now a member of this groupchat":["%1$s se tornou um membro desta sala"],"%1$s is now an %2$s of this groupchat":["%1$s se tornou %2$s desta sala"],"The nickname you chose is reserved or currently in use, please choose a different one.":["O apelido escolhido está atualmente em uso, por favor escolha outro."],"Password incorrect":["Senha incorreta"],"You are not on the member list of this groupchat.":["Você não é membro dessa sala."],"You have been banned from this groupchat.":["Você foi banido deste bate-papo em grupo."],"You are not allowed to create new groupchats.":["Você não tem permissão de criar novas salas."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Seu apelido não está de acordo com as regras da sala."],"This groupchat does not (yet) exist.":["Esta sala não existe (ainda)."],"This groupchat has reached its maximum number of participants.":["Esta sala atingiu o número máximo de ocupantes."],"Remote server not found":["Servidor remoto não encontrado"],"The explanation given is: \\"%1$s\\".":["A explicação dada é: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s convidou você para entrar na sala: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s convidou você a participar de uma sala de bate-papo: %2$s, por seguinte motivo: \\"%3$s\\""],"Error":["Erro"],"Sorry, something went wrong while trying to save your bookmark.":["Desculpe, algo deu errado ao tentar salvar seu favorito."],"Timeout Error":["Erro de tempo limite"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["O servidor não retornou seus favoritos dentro do tempo permitido. Você pode recarregar a página para solicitá-los novamente."],"My contacts":["Meus contatos"],"Pending contacts":["Contados pendentes"],"Contact requests":["Solicitação de contatos"],"Ungrouped":["Desagrupado"],"New messages":["Novas mensagens"],"Sorry, there was an error while trying to add %1$s as a contact.":["Desculpe, houve um erro ao tentar adicionar %1$s como um contato."],"This client does not allow presence subscriptions":["Este cliente não permite assinaturas de presença"],"Click to hide these contacts":["Clique para esconder esses contatos"],"Unbookmark this groupchat":["Desmarcar a sala"],"Click to open this groupchat":["Clique para abrir essa sala"],"Click to toggle the bookmarks list":["Clique para alternar a lista de favoritos"],"Bookmarks":["Favoritos"],"Bookmark this groupchat":["Marcar essa sala nos favoritos"],"Would you like this groupchat to be automatically joined upon startup?":["Gostaria de entrar nessa sala automaticamente quando iniciar?"],"The name for this bookmark:":["Nome para o favorito:"],"What should your nickname for this groupchat be?":["Qual deve ser o seu apelido para esta sala?"],"Save":["Salvar"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Tem certeza de que deseja remover o favorito \\"%1$s\\"?"],"Unbookmark":["Excluir de favoritos"],"Bookmark":["Favoritos"],"Close":["Fechar"],"OK":["OK"],"Image: ":["Imagem: "],"Download audio file \\"%1$s\\"":["Baixar arquivo de audio \\"%1$s\\""],"Download file \\"%1$s\\"":["Baixar arquivo \\"%1$s\\""],"Cancel Editing":["Anular edição"],"Edit":["Editar"],"Retract":["Retirar"],"Message versions":["Versões de mensagem"],"Retry":["Tentar de novo"],"Uploading file:":["Fazendo upload de arquivo:"],"%1$s has removed this message":["%1$s excluiu esta mensagem"],"This message has been edited":["Esta mensagem foi editada"],"Show more":["Mostrar mais"],"Show less":["Mostrar menos"],"No message history available.":["Nenhum histórico de mensagens disponível."],"Search results":["Procurar resultados"],"Search":["Procurar"],"Insert emojis":["Inserir emojis"],"Send the message":["Envie esta mensagem"],"Start a call":["Iniciar chamada"],"Message characters remaining":["Caracteres de mensagem restantes"],"Hide participants":["Ocultar participantes"],"Show participants":["Mostrar participantes"],"Choose a file to send":["Escolha um arquivo para enviar"],"Click to write as a normal (non-spoiler) message":["Clique para escrever como uma mensagem normal (sem estragar surpresa)"],"Click to write your message as a spoiler":["Clique para escrever sua mensagem como um Spoiler"],"The User\'s Profile Image":["A imagem de perfil do usuário"],"Trusted":["Confiável"],"Untrusted":["Não confiável"],"OMEMO Fingerprints":["OMEMO Impressões digitais"],"No OMEMO-enabled devices found":["Dispositivos com OMEMO ativado não encontrados"],"Remove as contact":["Remover contato"],"XMPP Address":["Endereço XMPP"],"Email":["E-mail"],"Full Name":["Nome Completo"],"Nickname":["Apelido"],"Refresh":["Atualizar"],"Role":["Função"],"URL":["URL"],"%1$s is typing":["%1$s está digitando"],"%1$s has stopped typing":["%1$s parou de digitar"],"%1$s has gone away":["%1$s está ausente"],"Remove messages":["Remover mensagens"],"Close this chat":["Feche este bate-papo"],"Write in the third person":["Escrever em terceira pessoa"],"Show this menu":["Mostrar o menu"],"Hidden message":["Mensagem oculta"],"Message":["Mensagem"],"Optional hint":["Dica Opcional"],"You have unread messages":["Você tem mensagens não lidas"],"Details":["Detalhes"],"See more information about this person":["Mostrar mais informações sobre esta pessoa"],"Close and end this conversation":["Encerrar e finalizar esta conversa"],"Sorry, the connection has been lost, and your message could not be sent":["Desculpe, a conexão caiu, por isto sua mensagem não podia ser enviada"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Esteja ciente de que outros clientes de XMPP/Jabber (e servidores) podem ainda não suportar retrações e que esta mensagem pode não ser excluída em todos os lugares."],"Are you sure you want to retract this message?":["Tem certeza que deseja retrair esta mensagem?"],"Confirm":["Confirmar"],"You have an unsent message which will be lost if you continue. Are you sure?":["Você tem uma mensagem não enviada que será perdida se você continuar. Você tem certeza?"],"Are you sure you want to clear the messages from this conversation?":["Tem certeza que deseja limpar as mensagens dessa conversa?"],"%1$s has gone offline":["%1$s está offline"],"%1$s is busy":["%1$s está ocupado"],"%1$s is online":["%1$s está online"],"Sorry, something went wrong while trying to refresh":["Desculpe, algo deu errado ao tentar atualizar"],"Are you sure you want to remove this contact?":["Tem certeza de que deseja remover esse contato?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Desculpe, houve um erro ao tentar remover o contato %1$s ."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Para melhorar a performance, armazenamos dados em seu navegador. Desmarque esta caixa se estiver em um computador público ou se quiser que seus dados sejam apagados quando sair. É importante que explicitamente saia da aplicação, cado contrário nem todos os dados armazenados serão apagados. Por favor, note que quando usando um dispositivo não confiável, a criptografia OMEMO não estará disponível."],"This is a trusted device":["Este é um dispositivo confiável"],"Password":["Senha"],"Create an account":["Criando uma conta"],"Don\'t have a chat account?":["Não possui uma conta de bate papo?"],"Log in":["Entrar"],"Disconnected":["Desconectado"],"Click here to log in anonymously":["Clique aqui para efetuar o login anonimamente"],"Username":["Usuário"],"user@domain":["usuário@domínio"],"Please enter a valid XMPP address":["Por favor entre com um endereço XMPP válido"],"Chat Contacts":["Contatos"],"Toggle chat":["Alternar bate-papo"],"Click to restore this chat":["Clique para restaurar este bate-papo"],"Minimized":["Minimizado"],"Minimize":["Minimizar"],"Minimize this chat":["Minimizar este bate papo"],"Minimize this groupchat":["Minimizar este grupo"],"This user is a moderator.":["Esse usuário é o moderador."],"This user can send messages in this groupchat.":["Esse usuário pode enviar mensagens nessa sala."],"This user can NOT send messages in this groupchat.":["Esse usuário NÃO pode enviar mensagens nessa sala."],"Owner":["Dono"],"Admin":["Admin"],"Member":["Membro"],"Moderator":["Moderador"],"Visitor":["Visitante"],"Click to mention %1$s in your message.":["Clique para mencionar %1$s em sua mensagem."],"Participants":["Participantes"],"This field is required":["Este campo é obrigatório"],"Join":["Entrar"],"Enter a new Groupchat":["Entrar em uma nova sala"],"name@conference.example.org":["nome@conferencia.exemplo.org"],"Groupchat name":["Nome da sala"],"Groupchat address":["Endereço da sala"],"Groupchat id is invalid.":["ID do Grupo é inválido."],"Invite":["convite"],"Invite someone to this groupchat":["Convide alguém para este grupo"],"user@example.org":["usuário@exemplo.org"],"Optional reason for the invitation":["Motivo opcional para o convite"],"Show groupchats":["Mostrar Salas"],"Server address":["Endereço do Servidor"],"Show more information on this groupchat":["Mostrar mais informações dessa sala"],"Query for Groupchats":["Consulta do bate papo"],"Description:":["Descrição:"],"Groupchat Address (JID):":["Endereço da sala (JID):"],"Participants:":["Participantes:"],"Features:":["Recursos:"],"Requires authentication":["Requer autenticação"],"Hidden":["Escondido"],"Requires an invitation":["Requer um convite"],"Moderated":["Moderado"],"Non-anonymous":["Não anônimo"],"Open":["Sala aberta"],"Permanent":["Sala permanente"],"Public":["Público"],"Semi-anonymous":["Semi anônimo"],"Temporary":["Temporário"],"Unmoderated":["Sem moderação"],"conference.example.org":["conferencia.exemplo.org"],"Groupchats found":["Salas encontradas"],"No groupchats found":["Nenhuma sala encontrada"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderadores são usuários privilegiados que podem alterar as funções de outros usuários (exceto aqueles com funções de administrador ou proprietário)."],"The default role, implies that you can read and write messages.":["A função padrão implica que você pode ler e gravar mensagens."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Visitantes não têm permissão para escrever mensagens em um bate-papo moderado para vários usuários."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Proprietário é a afiliação mais alta. Os proprietários podem modificar funções e afiliações de todos os outros usuários."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Admin é a segunda maior afiliação. Os administradores podem modificar funções e afiliações de todos os outros usuários, exceto proprietários."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Para banir um usuário, você atribui a ele a afiliação de \\"banido\\"."],"Change role":["Alterar função"],"New Role":["Nova função"],"Reason":["Razão"],"Change affiliation":["Alterar afiliação"],"New affiliation":["Nova afiliação"],"Affiliation":["Afiliação"],"Moderator Tools":["Ferramentas de Moderação"],"No users with that affiliation found.":["Nenhum usuário com essa afiliação encontrado."],"No users with that role found.":["Nenhum usuário com essa função encontrado."],"Type here to filter the search results":["Digite aqui para filtrar os resultados da busca"],"Show users":["Mostrar usuários"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["As funções são atribuídas aos usuários para conceder ou negar certas habilidades em um bate-papo com vários usuários. Eles são atribuídos explícita ou implicitamente como parte de uma afiliação. Uma função que não é devida a uma afiliação, é válida apenas pela duração da sessão do usuário."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Uma afiliação é um direito de longa duração que normalmente implica uma certa função e que concede privilégios e responsabilidades. Por exemplo, administradores e proprietários têm automaticamente a função de moderador."],"Timeout error while trying to set the affiliation":["O tempo esgotou ao tentar definir a afiliação"],"Sorry, you\'re not allowed to make that change":["Desculpe, você não está autorizado a fazer essa alteração"],"Sorry, something went wrong while trying to set the affiliation":["Desculpe, algo deu errado enquanto tentava definir a afiliação"],"Affiliation changed":["Afiliação alterada"],"Role changed":["Função alterada"],"You\'re not allowed to make that change":["Você não está autorizado a fazer essa alteração"],"Sorry, something went wrong while trying to set the role":["Desculpe, algo deu errado enquanto tentava definir a função"],"Topic":["Tópico"],"Topic author":["Autor do tópico"],"Groupchat address (JID)":["Endereço da sala (JID)"],"Message archiving":["Arquivando mensagem"],"Messages are archived on the server":["As mensagens são arquivadas no servidor"],"Description":["Descrição"],"Features":["Recursos"],"This groupchat is not publicly searchable":["Essa sala não aparece em pesquisas públicas"],"This groupchat is restricted to members only":["Essa sala é restrita apenas para membros"],"Members only":["Apenas membros"],"Participants entering this groupchat need to request permission to write":["Os participantes entrando nesta sala devem solicitar permissão para escrever"],"Name":["Nome"],"This groupchat does not require a password upon entry":["Essa sala não precisa de senha para entrar"],"No password required":["Nenhuma senha necessária"],"Not anonymous":["Não anônimo"],"All other groupchat participants can see your XMPP address":["Todos os outros ocupantes da sala podem ver seu endereço XMPP"],"Not moderated":["Não moderada"],"Participants entering this groupchat can write right away":["Participantes entrando nesta sala podem escrever diretamente"],"Online users":["Usuários Online"],"Anyone can join this groupchat":["Qualquer um pode se juntar a essa sala"],"This groupchat requires a password before entry":["Essa sala precisa de senha antes de entrar"],"Password protected":["Protegido por senha"],"Persistent":["Persistente"],"This groupchat persists even if it\'s unoccupied":["Essa sala persistirá mesmo se estiver desocupada"],"Only moderators can see your XMPP address":["Apenas moderadores podem ver seu endereço XMPP"],"This groupchat will disappear once the last person leaves":["Esta sala desaparecerá assim que a última pessoa sair"],"This groupchat is publicly searchable":["Essa sala pode ser pesquisada publicamente"],"Groupchat info for %1$s":["Informações da sala em grupo para %1$s"],"You\'re not allowed to send messages in this room":["Você não tem permissão para enviar mensagens nesta sala"],"The conversation has moved. Click below to enter.":["Esta conversa foi movida. Clique abaixo para entrar de novo."],"This groupchat no longer exists":["Este grupo de conversa não existe mais"],"Hide the groupchat topic":["Ocultar o tópico do grupo"],"This groupchat is bookmarked":["Este grupo está nos favoritos"],"Enter groupchat":["Entrar na sala"],"Choose a nickname to enter":["Escolha um apelido para entrar"],"Please choose your nickname":["Por favor escolha seu apelido"],"This groupchat requires a password":["Essa sala de bate papo precisa da senha"],"Password: ":["Senha: "],"Submit":["Enviar"],"%1$s has entered the groupchat":["%1$s entrou na sala"],"%1$s has left the groupchat":["%1$s saiu da sala"],"%1$s is now a moderator":["%1$s é agora um moderador"],"%1$s is no longer a moderator":["%1$s não é mais um moderador"],"%1$s has been given a voice":["%1$s recebeu a palavra novamente"],"%1$s has been muted":["%1$s está mudo"],"%1$s and %2$s":["%1$s e %2$s"],"%1$s are typing":["%1$s está digitando"],"%1$s have stopped typing":["%1$s parou de digitar"],"%1$s have gone away":["%1$s está ausente"],"%1$s have entered the groupchat":["%1$s entrou na sala"],"%1$s have left the groupchat":["%1$s saiu da sala"],"%1$s are now moderators":["%1$s são agora moderadores"],"%1$s are no longer moderators":["%1$s não são mais moderadores"],"%1$s have been given voices":["%1$s foram dadas a palavra"],"%1$s have been muted":["%1$s foram silenciados"],"Change user\'s affiliation to admin":["Mudar o usuário para administrador"],"Ban user by changing their affiliation to outcast":["Banir o usuário alterando sua afiliação para banido"],"Clear the chat area":["Limpar a área de bate-papo"],"Close this groupchat":["Feche este grupo"],"Change user role to participant":["Alterar a função do usuário para o participante"],"Remove this groupchat":["Excluir esta sala"],"Kick user from groupchat":["Expulsar usuário da sala"],"Write in 3rd person":["Escrever em terceira pessoa"],"Grant membership to a user":["Subscrever como usuário membro"],"Opens up the moderator tools GUI":["Abre a interface gráfica das ferramentas do moderador"],"Remove user\'s ability to post messages":["Remover a habilidade do usuário de postar mensagens"],"Change your nickname":["Escolha seu apelido"],"Grant moderator role to user":["Transformar usuário em moderador"],"Grant ownership of this groupchat":["Conceder a propriedade desse batepapo"],"Register your nickname":["Escolha seu apelido"],"Revoke the user\'s current affiliation":["Revogar a afiliação atual do usuário"],"Set groupchat subject":["Definir tópico do bate-papo"],"Set groupchat subject (alias for /subject)":["Definir o assunto do bate-papo (nome para/ assunto)"],"Allow muted user to post messages":["Permitir que o usuário mudo publique mensagens"],"You are about to retract this message.":["Você está a ponto de retirar esta mensagem."],"You may optionally include a message, explaining the reason for the retraction.":["Opcionalmente, você pode incluir uma mensagem, explicando o motivo da retração."],"Message Retraction":["Retração de mensagens"],"Optional reason":["Motivo opcional"],"Sorry, you\'re not allowed to retract this message":["Desculpe, você não está autorizado a retrair esta mensagem"],"A timeout occurred while trying to retract the message":["O tempo esgotou enquanto tentava retrair a mensagem"],"Sorry, you\'re not allowed to retract this message.":["Desculpe, você não está autorizado a retrair esta mensagem."],"Show more information about this groupchat":["Mostrar mais informações sobre este grupo"],"Configure":["Configurar"],"Configure this groupchat":["Configurar essa sala"],"Invite someone to join this groupchat":["Convide alguém para se unir a este grupo"],"Show topic":["Mostrar tópico"],"Hide topic":["Ocultar assunto"],"Show the topic message in the heading":["Exiba a mensagem do tópico no rótulo"],"Hide the topic in the heading":["Oculte o tópico no rótulo"],"Moderate":["Moderar"],"Moderate this groupchat":["Moderar este grupo"],"Destroy":["Destruir"],"Leave":["Sair"],"Leave and close this groupchat":["Deixe e feche este grupo"],"Are you sure you want to leave this groupchat?":["Tem certeza que deseja sair do grupo?"],"Hide the list of participants":["Esconder a lista de participantes"],"Forbidden: you do not have the necessary role in order to do that.":["Proibido: você não tem nas permissões necessárias para fazer isso."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Proibido: você não tem a afiliação necessária para fazer isso."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Erro: O comando \\"%1$s\\" precisa de dois argumentos, o apelido e opcionalmente a razão."],"Error: couldn\'t find a groupchat participant based on your arguments":["Erro: não foi possível encontrar um participante desta sala"],"Error: found multiple groupchat participant based on your arguments":["Erro: encontrou múltiplos participantes deste grupo na base da sua pesquisa"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Não foi possível encontrar um participante com esse nome. Poderia ter deixado o grupo."],"Sorry, an error happened while running the command.":["Desculpe, aconteceu um erro durante a execução do comando."],"Check your browser\'s developer console for details.":["Verifique o console do desenvolvedor do seu navegador para obter mais detalhes."],"Are you sure you want to destroy this groupchat?":["Você tem certeza de que quer destruir este grupo?"],"Please enter the XMPP address of this groupchat to confirm":["Favor digitar o servidor XMPP deste grupo para confirmar"],"name@example.org":["nome@exemplo.org"],"Optional reason for destroying this groupchat":["Motivo opcional para destruir este grupo"],"Optional XMPP address for a new groupchat that replaces this one":["Servidor do XMPP opcional para um novo grupo que substitui este"],"replacement@example.org":["usuário@exemplo.org"],"Your nickname is \\"%1$s\\"":["Seu apelido é \\"%1$s\\""],"Error: invalid number of arguments":["Erro: número de argumentos inválido"],"This action was done by %1$s.":["Essa ação foi realizada para %1$s ."],"The reason given is: \\"%1$s\\".":["A razão dada é: \\"%1$s\\"."],"Groupchats":["Grupos"],"Add a new groupchat":["Adicionar um novo grupo"],"Query for groupchats":["Consulta por grupos"],"Sorry, an error occurred while trying to submit the config form.":["Desculpe, ocorreu um erro ao tentar enviar o formulário de configuração."],"Close these announcements":["Feche estes comunicados"],"Announcements":["Comunicados"],"Click to open this server message":["Clique para abrir esta mensagem no servidor"],"Notification from %1$s":["Mensagem de %1$s"],"%1$s says":["%1$s diz"],"Encrypted message received":["Mensagem criptografada recebida"],"has gone offline":["ficou offline"],"has gone away":["Este contato saiu"],"is busy":["ocupado"],"has come online":["Ficou on-line"],"wants to be your contact":["Quer ser seu contato"],"Hide":["Ocultar"],"Execute":["Executar"],"On which entity do you want to run commands?":["Em qual entidade você quer executar comandos?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Alguns serviços e entidades do XMPP permitem que usuários privilegiados executem comandos específicos neles."],"Commands found":["Comandos encontrados"],"List available commands":["Lista de comandos disponíveis"],"No commands found":["Nenhum comando encontrado"],"Sorry, an error occurred while looking for commands on that entity.":["Desculpe, um erro ocorreu enquanto procurava comandos sobre essa entidade."],"The specified entity doesn\'t support ad-hoc commands":["Esta entidade não suporta comandos específicos"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Desculpe, ocorreu um erro ao tentar executar o comando. Veja o console do desenvolvedor para obter mais detalhes"],"About":["Sobre"],"Commands":["Comandos"],"Settings":["Configurações"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Open Source %2$s XMPP cliente de bate papo oferecido a você por %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s Traduza %2$s para sua própria lingua"],"Log out":["Sair"],"Click to change your chat status":["Clique para mudar seu status no chat"],"Show details about this chat client":["Mostrar detalhes sobre este cliente do bate-papo"],"Your avatar image":["Sua imagem de perfil"],"Checkbox for selecting the following fingerprint":["Caixa de seleção da seguinte assinatura"],"Device without a fingerprint":["Dispositivo sem impressão digital"],"Checkbox for selecting the following device":["Markar caixa para selecionar o seguinte dispositivo"],"Other OMEMO-enabled devices":["Outros dispositivos com OMEMO habilitado"],"Checkbox to select fingerprints of all other OMEMO devices":["Caixa para selecionar assinaturas de todos os dispositivos OMEMO"],"Remove checked devices and close":["Remover dispositivos selecionados e fechar"],"Select all":["Selecionar tudo"],"This device\'s OMEMO fingerprint":["Assinatura OMEMO deste dispositivo"],"Generate new keys and fingerprint":["Gerar novas chaves e assinaturas"],"Your Profile":["Seu Perfil"],"XMPP Address (JID)":["Servidor do XMPP (JID)"],"Save and close":["Salvar e fechar"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Use vírgulas para separar múltiplos papéis. Seus papéis são exibidos ao lado de seu nome em suas mensagens."],"OMEMO":["OMEMO"],"Profile":["Perfil"],"Sorry, an error happened while trying to save your profile data.":["Desculpe, aconteceu um erro ao tentar salvar seus dados de perfil."],"You can check your browser\'s developer console for any error output.":["Verifique o console de desenvolvedor de seu navegador em busca de mensagens de erro."],"Away":["Ausente"],"Busy":["Ocupado"],"Custom status":["Status customizado"],"Offline":["Offline"],"Online":["Online"],"Away for long":["Ausente por bastante tempo"],"Change chat status":["Alterar o status do bate-papo"],"Personal status message":["Mensagem pessoal do status"],"I am %1$s":["Estou %1$s"],"Are you sure you want to log out?":["Tem certeza que quer sair?"],"online":["online"],"busy":["ocupado"],"away for long":["ausente a bastante tempo"],"away":["ausente"],"offline":["offline"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Desculpe, não foi possível decriptar uma mensagem OMEMO recebida devido a um erro."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s não parece ter um cliente com suporte a OMEMO. Mensagens encriptadas não mais serão possíveis nesta sala."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Não é possível usar criptografia de ponta a ponta neste grupo, ou o grupo tem algum anonimato ou nem todos os participantes suportam a OMEMO."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Não é possível usar criptografia ponto a ponto porque %1$s usa um cliente que não suporta OMEMO."],"Messages are being sent in plaintext":["Mensagens serão enviadas em texto puro"],"Messages are sent encrypted":["As mensagens são enviadas criptografadas"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["Este groupo precisa ter apenas membros não anônimos para suportar as mensagens criptografadas OMEMO"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Desculpe, não fomos capazes de enviar uma mensagem encriptada porque %1$s requer que você esteja em sua lista de contatos para ver suas informações OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Desculpe, não fomos capazes de enviar uma mensagem encriptada porque o servidor remoto de %1$s não pode ser encontrado"],"Unable to send an encrypted message due to an unexpected error.":["Incapaz de mandar mensagem encriptada devido a erro inesperado."],"Sorry, an error occurred while trying to remove the devices.":["Desculpe, ocorreu um erro enquanto tentava remover os dispositivos."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Tem certeza de que deseja gerar novas chaves OMEMO? Isso removerá suas chaves antigas e todas as mensagens criptografadas anteriormente não poderão mais ser descriptografadas neste dispositivo."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Desculpe, nenhum dispositivo encontrado para o qual possamos enviar uma mensagem criptografada OMEMO."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Esta é uma mensagem criptografada com OMEMO que seu cliente não parece ter suporte. Para maiores informações acesse https://conversations.im/omemo"]," e.g. conversejs.org":[" ex. conversejs.org"],"Fetch registration form":["Inserir formulário de inscrição"],"Tip: A list of public XMPP providers is available":["Dica: uma lista de provedores XMPP públicos está disponível"],"here":["aqui"],"Sorry, we\'re unable to connect to your chosen provider.":["Desculpe, não podemos conectar ao provedor escolhido."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Desculpe, o provedor fornecido não oferece suporte de banda para registro da conta. Experimente com um provedor diferente."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Algo deu errado ao estabelecer uma conexão com \\"%1$s\\". Você tem certeza que ele existe?"],"Now logging you in":["Agora você logou"],"Registered successfully":["Registrado com sucesso"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["O provedor rejeitou sua tentativa de registro. Verifique os valores que você digitou para verificar a exatidão."],"Leave this groupchat":["Deixar a sala"],"Click to toggle the list of open groupchats":["Clique para alternar a lista de salas"],"Open Groupchats":["Abrir sala"],"Are you sure you want to leave the groupchat %1$s?":["Tem certeza que deseja sair do qrupo \\"%1$s\\"?"],"Add":["Adicionar"],"Add a Contact":["Adicionar contato"],"This contact is busy":["Este contato está ocupado"],"This contact is online":["Este contato está online"],"This contact is offline":["Este contato está offline"],"This contact is unavailable":["Este contato está indisponível"],"This contact is away for an extended period":["Este contato está ausente por um longo período"],"This contact is away":["Este contato está ausente"],"Contact name":["Nome do contato"],"Optional nickname":["Apelido Opcional"],"Sorry, could not find a contact with that name":["Desculpe, não foi possível encontrar um contato com este nome"],"This contact has already been added":["Este contato já foi adicionado"],"Filter":["Filtro"],"Filter by contact name":["Filtrar por nome de contato"],"Filter by group name":["Filtrar por nome do grupo"],"Filter by status":["Filtrar por status"],"Any":["Qualquer"],"Unread":["Não lido"],"Chatty":["Conversar"],"Extended Away":["Ausência Longa"],"Click to remove %1$s as a contact":["Clique para remover %1$s como contato"],"Click to accept the contact request from %1$s":["Clique para aceitar a solicitação de contato de %1$s"],"Click to decline the contact request from %1$s":["Clique para recusar a solicitação de contato de %1$s"],"Click to chat with %1$s (XMPP address: %2$s)":["Clique para conversar com %1$s (servidor do XMPP: %2$s)"],"Are you sure you want to decline this contact request?":["Tem certeza de que deseja recusar essa solicitação de contato?"],"Contacts":["Contatos"],"Add a contact":["Adicionar contato"],"Re-sync your contacts":["Sincronize meus contatos de novo"]}}}')}}]);
 //# sourceMappingURL=pt_BR-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/ro-LC_MESSAGES-converse-po.js b/src/conversejs/locales/ro-LC_MESSAGES-converse-po.js
index 0a01bb0e8f4756fc4ba4bfa985a4a01a9d3cd1e7..594d5e9328669942f5e9c8405ce1533a673b4d84 100644
--- a/src/conversejs/locales/ro-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/ro-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{447:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;","lang":"ro"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["Anulează"],"The connection has dropped, attempting to reconnect.":["Conexiunea s-a întrerupt, se încearcă reconectarea."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Ne pare rău, nu sa putut face conectarea la gazdă XMPP cu domeniu: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Serverul XMPP nu oferă un mecanism de autentificare acceptat"],"Sorry, could not determine upload URL.":["Ne pare rău, nu am putut determina adresa pentru descărcarea fișierului."],"Sorry, could not determine file upload URL.":["Ne pare rău, nu am putut determina adresa pentru încărcarea fișierului."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Ne pare rău, nu am putut încărca fișierul dumneavoastră. Răspunsul serverului: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Ne pare rău, nu am putut încărca fișierul dumneavoastră."],"Sorry, looks like file upload is not supported by your server.":["Ne pare rău, se pare că serverul dumneavoastră nu suportă încărcarea de fișiere."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Dimensiunea fișierului dumneavoastră, %1$s, depășește valoarea maximă permisă de server, care este %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Acest grup de discuții nu este anonim"],"This groupchat now shows unavailable members":["Acest grup de discuții arată acum membrii indisponibili"],"This groupchat does not show unavailable members":["Acest grup de discuții nu arată membrii indisponibili"],"The groupchat configuration has changed":["Configurația acestui grup de discuții s-a schimbat"],"This groupchat is now no longer anonymous":["De acum încolo acest grup de discuții nu mai este anonim"],"This groupchat is now semi-anonymous":["Această discuție de grup de acum este semi-anonimă"],"This groupchat is now fully-anonymous":["Această discuție de grup de acum este complet anonimă"],"A new groupchat has been created":["O nouă discuție de grup a fost creată"],"Your nickname has been automatically set to %1$s":["Pseudonimul dvs. a fost creat în mod automat ca fiind: %1$s"],"Your nickname has been changed to %1$s":["Pseudonimul dvs. a fost schimbat în %1$s"],"You have been banned from this groupchat":["Ați fost excluși(se) din această discuție de grup"],"You have been kicked from this groupchat":["Ați fost dați(te) afară din această discuție de grup"],"You have been removed from this groupchat because of an affiliation change":["Ați fost eliminați(te) din această discuție de grup din cauza unei schimbări de afiliere"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Ați fost eliminați(te) din această discuție de grup deoarece aceasta s-a modificat și acceptă doar membrii, iar dumneavoastră nu sunteți unul(a)"],"You have been removed from this groupchat because the service hosting it is being shut down":["Ați fost înlăturați(te) din această discuție de grup pentru ca serviciul gazdă se oprește"],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":["Subiectul este definit de %1$s"],"Topic cleared by %1$s":["Subiectul a fost șters de %1$s"],"%1$s has been banned":["%1$s a fost banat"],"%1$s\'s nickname has changed":["Pseudonimul lui %1$s s-a schimbat"],"%1$s has been kicked out":["%1$s a fost dat afară"],"%1$s has been removed because of an affiliation change":["%1$s a fost înlăturat din pricina unei schimbări de afiliere"],"%1$s has been removed for not being a member":["%1$s a fost înlăturat pentru că este membru aici"],"%1$s is no longer an admin of this groupchat":["%1$s nu mai are rol de administrator în această discuție de grup"],"%1$s is no longer an owner of this groupchat":["%1$s nu mai are rol de proprietar în această discuție de grup"],"%1$s is no longer banned from this groupchat":["%1$s nu mai este exclus(ă) din această discuție de grup"],"%1$s is now an %2$s of this groupchat":["%1$s este acum %2$s al acestui grup de discuții"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Pseudonimul pe care l-ați ales este deja rezervat sau aflat în folosință, vă rugăm să alegeți un altul."],"You are not on the member list of this groupchat.":["Nu vă aflați pe lista cu membrii a acestui grup de discuții."],"You have been banned from this groupchat.":["ați fost banat din acest grup de discuții."],"You are not allowed to create new groupchats.":["Nu aveți permisiunea de a crea noi grupuri de discuții."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Pseudonimul dvs. nu se conformează regulilor acestui grup de discuții."],"This groupchat does not (yet) exist.":["Acest grup de discuții nu există (încă)."],"This groupchat has reached its maximum number of participants.":["Acest grup de discuții ți-a atins numărul maxim de participanți."],"Remote server not found":["Serverul la distanță nu a fost găsit"],"The explanation given is: \\"%1$s\\".":["Explicația dată este: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Eroare"],"Sorry, something went wrong while trying to save your bookmark.":["Ne pare rău, ceva a mers prost în timp ce se încerca salvarea semnului de carte."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Faceți clic pentru a ascunde aceste contacte"],"Unbookmark this groupchat":["Elimină semnul de carte pentru acest grup de discuții"],"Click to open this groupchat":["Clicați pentru a deschide acest grup de discuții"],"Click to toggle the bookmarks list":["Clicați pentru a activa lista de semne de carte"],"Bookmarks":["Semne de carte"],"Bookmark this groupchat":["Pune un semn de carte pentru acest grup de discuții"],"Would you like this groupchat to be automatically joined upon startup?":["Doriți ca la pornire să vă alăturați în mod automat acestui grup de discuții?"],"The name for this bookmark:":["Numele acestui semn de carte:"],"What should your nickname for this groupchat be?":["Ce nume doriți să aveți în acest grup de discuții?"],"Save":["Salvare"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Sunteți sigur că doriți să eliminați semnul de carte \\"%1$s\\"?"],"Close":["Închide"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":["Acest mesaj a fost editat"],"Show more":["Arată mai mult"],"No message history available.":[""],"Search results":["Rezultatele căutării"],"Search":["Caută"],"Insert emojis":["Inserare emoticon"],"Start a call":["Începe un apel"],"Message characters remaining":[""],"Choose a file to send":["Selectați un fișier pentru a fi trimis"],"Click to write as a normal (non-spoiler) message":["Faceți click pentru a scrie ca un mesaj normal (nu dezvăluie)"],"Click to write your message as a spoiler":["Faceți click pentru a scrie mesajul ca o dezvăluire"],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Pseudonim"],"Refresh":["Reînprospătează"],"Role":[""],"URL":[""],"%1$s is typing":["%1$s tastează"],"%1$s has stopped typing":["%1$s s-a oprit din scris"],"%1$s has gone away":["%1$s a plecat"],"Remove messages":["Eliminați mesajele"],"Write in the third person":["Scrieți la persoana a treia"],"Show this menu":["Arată acest meniu"],"Hidden message":["Mesaj ascuns"],"Message":["Mesaj"],"Optional hint":["Indiciu opțional"],"You have unread messages":["Aveți mesaje necitite"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Sunteți siguri că doriți să ștergeți mesajele din această conversație?"],"%1$s has gone offline":["%1$s este deconectat(ă)"],"%1$s is busy":["%1$s este ocupat(ă)"],"%1$s is online":["%1$s este conectat(ă)"],"Sorry, something went wrong while trying to refresh":["Ne pare rău, ceva a mers prost în timp ce se încerca actualizarea"],"Are you sure you want to remove this contact?":["Sunteți sigur că doriți să eliminați acest contact?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Ne pare rău, a apărut o eroare în timp ce se încerca ștergerea lui  %1$s din lista de contacte."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":["Faceți click aici pentru a vă autentifica anonim"],"Username":["Nume de utilizator"],"user@domain":["utilizator@domeniu"],"Please enter a valid XMPP address":["Vă rugăm să introduceți o adresă XMPP validă"],"Chat Contacts":["Contacte"],"Toggle chat":["Comutare discuție"],"Click to restore this chat":["Faceți clic pentru a restabili acestă discuție"],"Minimized":["Micșorată"],"This field is required":["Acest câmp este obligatoriu"],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":["nume@chat.exemplu.org"],"Groupchat name":["Numele grupului de discuții"],"Groupchat address":["Adresa grupului de discuții"],"Invite":["Invitare"],"Show groupchats":["Arată grupurile de discuții"],"Server address":["Adresa serverului"],"Show more information on this groupchat":["Arată mai multe informații despre acest grup de discuții"],"Query for Groupchats":["Căutați un grup de discuții"],"Description:":["Descriere:"],"Groupchat Address (JID):":["Adresa grupului de discuții (JID):"],"Participants:":["Participanți:"],"Features:":["Caracteristici:"],"Requires authentication":["Este nevoie de autentificare"],"Hidden":["Ascuns"],"Requires an invitation":["Este nevoie de o invitație"],"Moderated":["Moderat"],"Non-anonymous":["Fără anonimitate"],"Open":["Deschis"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semi-anonim"],"Temporary":["Temporar"],"Unmoderated":["Nemoderat"],"conference.example.org":["chat.exemplu.org"],"No groupchats found":["Nu s-au găsit grupuri de discuții"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Descriere"],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Doar pentru membrii"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Nume"],"This groupchat does not require a password upon entry":[""],"No password required":["Nu este necesară o parolă"],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":["Utilizatori conectați"],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":["Persistent"],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":["Informații despre grupul de discuții %1$s"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["Acest grup de discuții nu mai există"],"Enter groupchat":["Intrați în grupul de discuții"],"Please choose your nickname":["Vă rugăm, alegeți-vă pseudonimul"],"This groupchat requires a password":["Intrarea în acest grup de discuții este pe bază de parolă"],"Password: ":["Parolă "],"Submit":["Trimite"],"This user is a moderator.":["Acest utilizator este moderator."],"This user can send messages in this groupchat.":["Acest utilizator poate trimite mesaje către acest grup de discuții."],"This user can NOT send messages in this groupchat.":["Acest utilizator NU poate trimite mesaje către acest grup de discuții."],"Owner":["Proprietar"],"Admin":["Administrator"],"Member":["Membru"],"Moderator":["Moderator"],"Visitor":["Vizitator"],"Click to mention %1$s in your message.":["Faceți click pentru a menționa %1$s în mesajul dumneavoastră."],"Participants":["Participanți"],"%1$s has entered the groupchat":["%1$s a intrat în grupul de discuții"],"%1$s has left the groupchat":["%1$s a plecat din grupul de discuții"],"%1$s is now a moderator":["%1$s este acum moderator"],"%1$s is no longer a moderator":["%1$s nu mai este moderator"],"%1$s has been muted":["%1$s nu mai poate vorbi"],"Change user\'s affiliation to admin":["Schimbă rolul utilizatorului în cel de admin"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Schimbă rolul utilizatorului în participant"],"Remove this groupchat":["Părăsiți acest grup de discuții"],"Kick user from groupchat":["Înlătură utilizatorul din acest grup"],"Write in 3rd person":["Scrie la persoana a treia"],"Grant membership to a user":["Oferă statutul de membru unui utilizator"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Înlătură dreptul utilizatorului de a trimite mesaje"],"Change your nickname":["Schimbați-vă pseudonimul"],"Grant moderator role to user":["Oferă unui utilizator rolul de moderator"],"Grant ownership of this groupchat":["Oferă unui utilizator statutul de proprietar al acestui grup de discuții"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Alege tema acestui grup de discuție"],"Set groupchat subject (alias for /subject)":["Definește subiectul acestui grup de discuții (alias pentru /subiect)"],"Allow muted user to post messages":["Îngăduie-i utilizatorului \\"mut\\" să publice mesaje"],"Message Retraction":[""],"Configure":[""],"Configure this groupchat":["Configurați acest grup de discuții"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Ascunde lista participanților"],"Forbidden: you do not have the necessary role in order to do that.":["Interzis: nu aveți autorizația necesară pentru a face acest lucru."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Interzis: nu dețineți rolul potrivit pentru a face acest lucru."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Eroare: comanda %1$s preia doi parametri, pseudonimul utilizatorului și un element opțional."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Eroare: număr nevalid de argumente"],"This action was done by %1$s.":["Această acțiune a fost realizată de către %1$s."],"The reason given is: \\"%1$s\\".":["Motivul indicat este: \\"%1$s\\"."],"Groupchats":["Grupuri de discuții"],"Add a new groupchat":["Adăugați un nou grup de discuții"],"Query for groupchats":["Căutați un grup de discuții"],"Announcements":[""],"Notification from %1$s":["Notificare de la %1$s"],"%1$s says":["%1$s spune"],"has gone offline":["s-a deconectat"],"has gone away":["a plecat"],"is busy":["e ocupat"],"has come online":["s-a conectat"],"wants to be your contact":["vrea să fie contactul dumneavoastră"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":["Faceți click pentru a vă schimba mesajul de stare"],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":["Din păcate, din cauza unei erori nu s-a putut decripta un mesaj OMEMO."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sunteți sigur că vreți să generați noi chei OMEMO? Acest lucru va șterge vechile dvs. chei iar toate mesajele criptate anterior nu vor mai putea fi decriptate pe acest dispozitiv."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Din păcate nu putem trimite un mesaj criptat pentru că %1$s cere ca dvs. să fiți abonaț la prezența lor pentru a putea vedea informațiile lor OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Ne pare rău, nu putem trimite un mesaj criptat pentru că serverul la distanță al lui %1$s nu poate fi găsit"],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["Părăsiți acest grup de discuții"],"Click to toggle the list of open groupchats":["Faceți clic pentru a comuta lista de discuții de grup deschise"],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":["Faceți click pentru a elimina %1$s din lista de persoane de contact"],"Click to accept the contact request from %1$s":["Faceți clic pentru a accepta solicitarea de contact de la %1$s"],"Click to decline the contact request from %1$s":["Faceți click pentru a refuza solicitarea de contact de la %1$s"],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{535:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;","lang":"ro"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["Anulează"],"The connection has dropped, attempting to reconnect.":["Conexiunea s-a întrerupt, se încearcă reconectarea."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["Ne pare rău, nu sa putut face conectarea la gazdă XMPP cu domeniu: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Serverul XMPP nu oferă un mecanism de autentificare acceptat"],"Sorry, could not determine upload URL.":["Ne pare rău, nu am putut determina adresa pentru descărcarea fișierului."],"Sorry, could not determine file upload URL.":["Ne pare rău, nu am putut determina adresa pentru încărcarea fișierului."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Ne pare rău, nu am putut încărca fișierul dumneavoastră. Răspunsul serverului: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Ne pare rău, nu am putut încărca fișierul dumneavoastră."],"Sorry, looks like file upload is not supported by your server.":["Ne pare rău, se pare că serverul dumneavoastră nu suportă încărcarea de fișiere."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Dimensiunea fișierului dumneavoastră, %1$s, depășește valoarea maximă permisă de server, care este %2$s."],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":["Acest grup de discuții nu este anonim"],"This groupchat now shows unavailable members":["Acest grup de discuții arată acum membrii indisponibili"],"This groupchat does not show unavailable members":["Acest grup de discuții nu arată membrii indisponibili"],"The groupchat configuration has changed":["Configurația acestui grup de discuții s-a schimbat"],"This groupchat is now no longer anonymous":["De acum încolo acest grup de discuții nu mai este anonim"],"This groupchat is now semi-anonymous":["Această discuție de grup de acum este semi-anonimă"],"This groupchat is now fully-anonymous":["Această discuție de grup de acum este complet anonimă"],"A new groupchat has been created":["O nouă discuție de grup a fost creată"],"Your nickname has been automatically set to %1$s":["Pseudonimul dvs. a fost creat în mod automat ca fiind: %1$s"],"Your nickname has been changed to %1$s":["Pseudonimul dvs. a fost schimbat în %1$s"],"You have been banned from this groupchat":["Ați fost excluși(se) din această discuție de grup"],"You have been kicked from this groupchat":["Ați fost dați(te) afară din această discuție de grup"],"You have been removed from this groupchat because of an affiliation change":["Ați fost eliminați(te) din această discuție de grup din cauza unei schimbări de afiliere"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Ați fost eliminați(te) din această discuție de grup deoarece aceasta s-a modificat și acceptă doar membrii, iar dumneavoastră nu sunteți unul(a)"],"You have been removed from this groupchat because the service hosting it is being shut down":["Ați fost înlăturați(te) din această discuție de grup pentru ca serviciul gazdă se oprește"],"Your message was not delivered because you\'re not present in the groupchat.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":["Subiectul este definit de %1$s"],"Topic cleared by %1$s":["Subiectul a fost șters de %1$s"],"%1$s has been banned":["%1$s a fost banat"],"%1$s\'s nickname has changed":["Pseudonimul lui %1$s s-a schimbat"],"%1$s has been kicked out":["%1$s a fost dat afară"],"%1$s has been removed because of an affiliation change":["%1$s a fost înlăturat din pricina unei schimbări de afiliere"],"%1$s has been removed for not being a member":["%1$s a fost înlăturat pentru că este membru aici"],"%1$s is no longer an admin of this groupchat":["%1$s nu mai are rol de administrator în această discuție de grup"],"%1$s is no longer an owner of this groupchat":["%1$s nu mai are rol de proprietar în această discuție de grup"],"%1$s is no longer banned from this groupchat":["%1$s nu mai este exclus(ă) din această discuție de grup"],"%1$s is now an %2$s of this groupchat":["%1$s este acum %2$s al acestui grup de discuții"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Pseudonimul pe care l-ați ales este deja rezervat sau aflat în folosință, vă rugăm să alegeți un altul."],"You are not on the member list of this groupchat.":["Nu vă aflați pe lista cu membrii a acestui grup de discuții."],"You have been banned from this groupchat.":["ați fost banat din acest grup de discuții."],"You are not allowed to create new groupchats.":["Nu aveți permisiunea de a crea noi grupuri de discuții."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Pseudonimul dvs. nu se conformează regulilor acestui grup de discuții."],"This groupchat does not (yet) exist.":["Acest grup de discuții nu există (încă)."],"This groupchat has reached its maximum number of participants.":["Acest grup de discuții ți-a atins numărul maxim de participanți."],"Remote server not found":["Serverul la distanță nu a fost găsit"],"The explanation given is: \\"%1$s\\".":["Explicația dată este: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Eroare"],"Sorry, something went wrong while trying to save your bookmark.":["Ne pare rău, ceva a mers prost în timp ce se încerca salvarea semnului de carte."],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Faceți clic pentru a ascunde aceste contacte"],"Unbookmark this groupchat":["Elimină semnul de carte pentru acest grup de discuții"],"Click to open this groupchat":["Clicați pentru a deschide acest grup de discuții"],"Click to toggle the bookmarks list":["Clicați pentru a activa lista de semne de carte"],"Bookmarks":["Semne de carte"],"Bookmark this groupchat":["Pune un semn de carte pentru acest grup de discuții"],"Would you like this groupchat to be automatically joined upon startup?":["Doriți ca la pornire să vă alăturați în mod automat acestui grup de discuții?"],"The name for this bookmark:":["Numele acestui semn de carte:"],"What should your nickname for this groupchat be?":["Ce nume doriți să aveți în acest grup de discuții?"],"Save":["Salvare"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Sunteți sigur că doriți să eliminați semnul de carte \\"%1$s\\"?"],"Close":["Închide"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"This message has been edited":["Acest mesaj a fost editat"],"Show more":["Arată mai mult"],"No message history available.":[""],"Search results":["Rezultatele căutării"],"Search":["Caută"],"Insert emojis":["Inserare emoticon"],"Start a call":["Începe un apel"],"Message characters remaining":[""],"Choose a file to send":["Selectați un fișier pentru a fi trimis"],"Click to write as a normal (non-spoiler) message":["Faceți click pentru a scrie ca un mesaj normal (nu dezvăluie)"],"Click to write your message as a spoiler":["Faceți click pentru a scrie mesajul ca o dezvăluire"],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Pseudonim"],"Refresh":["Reînprospătează"],"Role":[""],"URL":[""],"%1$s is typing":["%1$s tastează"],"%1$s has stopped typing":["%1$s s-a oprit din scris"],"%1$s has gone away":["%1$s a plecat"],"Remove messages":["Eliminați mesajele"],"Write in the third person":["Scrieți la persoana a treia"],"Show this menu":["Arată acest meniu"],"Hidden message":["Mesaj ascuns"],"Message":["Mesaj"],"Optional hint":["Indiciu opțional"],"You have unread messages":["Aveți mesaje necitite"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Sunteți siguri că doriți să ștergeți mesajele din această conversație?"],"%1$s has gone offline":["%1$s este deconectat(ă)"],"%1$s is busy":["%1$s este ocupat(ă)"],"%1$s is online":["%1$s este conectat(ă)"],"Sorry, something went wrong while trying to refresh":["Ne pare rău, ceva a mers prost în timp ce se încerca actualizarea"],"Are you sure you want to remove this contact?":["Sunteți sigur că doriți să eliminați acest contact?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Ne pare rău, a apărut o eroare în timp ce se încerca ștergerea lui  %1$s din lista de contacte."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":["Faceți click aici pentru a vă autentifica anonim"],"Username":["Nume de utilizator"],"user@domain":["utilizator@domeniu"],"Please enter a valid XMPP address":["Vă rugăm să introduceți o adresă XMPP validă"],"Chat Contacts":["Contacte"],"Toggle chat":["Comutare discuție"],"Click to restore this chat":["Faceți clic pentru a restabili acestă discuție"],"Minimized":["Micșorată"],"This user is a moderator.":["Acest utilizator este moderator."],"This user can send messages in this groupchat.":["Acest utilizator poate trimite mesaje către acest grup de discuții."],"This user can NOT send messages in this groupchat.":["Acest utilizator NU poate trimite mesaje către acest grup de discuții."],"Owner":["Proprietar"],"Admin":["Administrator"],"Member":["Membru"],"Moderator":["Moderator"],"Visitor":["Vizitator"],"Click to mention %1$s in your message.":["Faceți click pentru a menționa %1$s în mesajul dumneavoastră."],"Participants":["Participanți"],"This field is required":["Acest câmp este obligatoriu"],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":["nume@chat.exemplu.org"],"Groupchat name":["Numele grupului de discuții"],"Groupchat address":["Adresa grupului de discuții"],"Invite":["Invitare"],"Show groupchats":["Arată grupurile de discuții"],"Server address":["Adresa serverului"],"Show more information on this groupchat":["Arată mai multe informații despre acest grup de discuții"],"Query for Groupchats":["Căutați un grup de discuții"],"Description:":["Descriere:"],"Groupchat Address (JID):":["Adresa grupului de discuții (JID):"],"Participants:":["Participanți:"],"Features:":["Caracteristici:"],"Requires authentication":["Este nevoie de autentificare"],"Hidden":["Ascuns"],"Requires an invitation":["Este nevoie de o invitație"],"Moderated":["Moderat"],"Non-anonymous":["Fără anonimitate"],"Open":["Deschis"],"Permanent":["Permanent"],"Public":["Public"],"Semi-anonymous":["Semi-anonim"],"Temporary":["Temporar"],"Unmoderated":["Nemoderat"],"conference.example.org":["chat.exemplu.org"],"No groupchats found":["Nu s-au găsit grupuri de discuții"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Descriere"],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Doar pentru membrii"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Nume"],"This groupchat does not require a password upon entry":[""],"No password required":["Nu este necesară o parolă"],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":["Utilizatori conectați"],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":["Persistent"],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":["Informații despre grupul de discuții %1$s"],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":["Acest grup de discuții nu mai există"],"Enter groupchat":["Intrați în grupul de discuții"],"Please choose your nickname":["Vă rugăm, alegeți-vă pseudonimul"],"This groupchat requires a password":["Intrarea în acest grup de discuții este pe bază de parolă"],"Password: ":["Parolă "],"Submit":["Trimite"],"%1$s has entered the groupchat":["%1$s a intrat în grupul de discuții"],"%1$s has left the groupchat":["%1$s a plecat din grupul de discuții"],"%1$s is now a moderator":["%1$s este acum moderator"],"%1$s is no longer a moderator":["%1$s nu mai este moderator"],"%1$s has been muted":["%1$s nu mai poate vorbi"],"Change user\'s affiliation to admin":["Schimbă rolul utilizatorului în cel de admin"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Schimbă rolul utilizatorului în participant"],"Remove this groupchat":["Părăsiți acest grup de discuții"],"Kick user from groupchat":["Înlătură utilizatorul din acest grup"],"Write in 3rd person":["Scrie la persoana a treia"],"Grant membership to a user":["Oferă statutul de membru unui utilizator"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Înlătură dreptul utilizatorului de a trimite mesaje"],"Change your nickname":["Schimbați-vă pseudonimul"],"Grant moderator role to user":["Oferă unui utilizator rolul de moderator"],"Grant ownership of this groupchat":["Oferă unui utilizator statutul de proprietar al acestui grup de discuții"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Alege tema acestui grup de discuție"],"Set groupchat subject (alias for /subject)":["Definește subiectul acestui grup de discuții (alias pentru /subiect)"],"Allow muted user to post messages":["Îngăduie-i utilizatorului \\"mut\\" să publice mesaje"],"Message Retraction":[""],"Configure":[""],"Configure this groupchat":["Configurați acest grup de discuții"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Ascunde lista participanților"],"Forbidden: you do not have the necessary role in order to do that.":["Interzis: nu aveți autorizația necesară pentru a face acest lucru."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Interzis: nu dețineți rolul potrivit pentru a face acest lucru."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Eroare: comanda %1$s preia doi parametri, pseudonimul utilizatorului și un element opțional."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Eroare: număr nevalid de argumente"],"This action was done by %1$s.":["Această acțiune a fost realizată de către %1$s."],"The reason given is: \\"%1$s\\".":["Motivul indicat este: \\"%1$s\\"."],"Groupchats":["Grupuri de discuții"],"Add a new groupchat":["Adăugați un nou grup de discuții"],"Query for groupchats":["Căutați un grup de discuții"],"Announcements":[""],"Notification from %1$s":["Notificare de la %1$s"],"%1$s says":["%1$s spune"],"has gone offline":["s-a deconectat"],"has gone away":["a plecat"],"is busy":["e ocupat"],"has come online":["s-a conectat"],"wants to be your contact":["vrea să fie contactul dumneavoastră"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":["Faceți click pentru a vă schimba mesajul de stare"],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":["Din păcate, din cauza unei erori nu s-a putut decripta un mesaj OMEMO."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Din păcate nu putem trimite un mesaj criptat pentru că %1$s cere ca dvs. să fiți abonaț la prezența lor pentru a putea vedea informațiile lor OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Ne pare rău, nu putem trimite un mesaj criptat pentru că serverul la distanță al lui %1$s nu poate fi găsit"],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Sunteți sigur că vreți să generați noi chei OMEMO? Acest lucru va șterge vechile dvs. chei iar toate mesajele criptate anterior nu vor mai putea fi decriptate pe acest dispozitiv."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":["Părăsiți acest grup de discuții"],"Click to toggle the list of open groupchats":["Faceți clic pentru a comuta lista de discuții de grup deschise"],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":["Faceți click pentru a elimina %1$s din lista de persoane de contact"],"Click to accept the contact request from %1$s":["Faceți clic pentru a accepta solicitarea de contact de la %1$s"],"Click to decline the contact request from %1$s":["Faceți click pentru a refuza solicitarea de contact de la %1$s"],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=ro-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/ru-LC_MESSAGES-converse-po.js b/src/conversejs/locales/ru-LC_MESSAGES-converse-po.js
index cdf2b90d3a67c0d1ceead8cc83d727b79eb60a08..16ae4b0c8d6d11647f5b0efd546af663cdeb8f42 100644
--- a/src/conversejs/locales/ru-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/ru-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[170],{448:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"ru"},"Create your account":["Создать вашу учётную запись"],"Please enter the XMPP provider to register with:":["Пожалуйста, введите XMPP провайдера для регистрации:"],"Already have a chat account?":["Уже имеете учётную запись чата?"],"Log in here":["Вход в систему"],"Account Registration:":["Регистрация учётной записи:"],"Register":["Регистрация"],"Choose a different provider":["Выберите другого провайдера"],"Hold tight, we\'re fetching the registration form…":["Подождите немного, мы получаем регистрационную форму…"],"Cancel":["Отменить"],"The connection has dropped, attempting to reconnect.":["Соединение потеряно, попытка переподключения."],"An error occurred while connecting to the chat server.":["При подключении к чат-серверу произошла ошибка."],"Your XMPP address and/or password is incorrect. Please try again.":["Ваш адрес XMPP и/или пароль некорректные. Пожалуйста, попробуйте снова."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["К сожалению, мы не смогли подключиться к XMPP узлу с доменом: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Сервер XMPP не предлагал поддерживаемый механизм аутентификации"],"Sorry, could not determine upload URL.":["К сожалению, невозможно распознать URL загрузки."],"Sorry, could not determine file upload URL.":["Извините, невозможно распознать URL для загрузки файла."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Извините, не удалось загрузить ваш файл. Ответ сервера: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["К сожалению, произошла ошибка при загрузке файла."],"Sorry, looks like file upload is not supported by your server.":["Похоже, Ваш сервер не поддерживает загрузку файлов."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Размер Вашего файла(%1$s) превышает максимально допустимый размер файла на сервере(%2$s)."],"Smileys and emotions":["Смайлы и эмоции"],"People":["Люди"],"Activities":["Занятия"],"Travel":["Путешествие"],"Objects":["Объекты"],"Animals and nature":["Животные и природа"],"Food and drink":["Еда и напитки"],"Symbols":["Символы"],"Flags":["Флаги"],"Stickers":["Наклейки"],"This groupchat is not anonymous":["Этот групповой чат не анонимный"],"This groupchat now shows unavailable members":["В данный момент этот групповой чат показывает недоступных участников"],"This groupchat does not show unavailable members":["В этом групповом чате отсутствуют недоступные участники"],"The groupchat configuration has changed":["Изменена конфигурация группового чата"],"Groupchat logging is now enabled":["Журналирование группового чата теперь включено"],"Groupchat logging is now disabled":["Журналирование группового чата теперь отключено"],"This groupchat is now no longer anonymous":["Этот групповой чат больше не анонимен"],"This groupchat is now semi-anonymous":["Этот групповой чат частично анонимный"],"This groupchat is now fully-anonymous":["Этот групповой чат стал полностью анонимный"],"A new groupchat has been created":["Появился новый групповой чат"],"Your nickname has been automatically set to %1$s":["Ваш псевдоним был автоматически изменён на: %1$s"],"Your nickname has been changed to %1$s":["Ваш псевдоним был изменён на: %1$s"],"You have been banned from this groupchat":["Вам запрещено подключаться к этому групповому чату"],"You have been kicked from this groupchat":["Вас исключили из группового чата"],"You have been removed from this groupchat because of an affiliation change":["Вас удалили из-за изменения прав"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Вы были удалены из этого группового чата т.к. его режим был сменён на \\"по приглашению\\" и вы не были приглашены"],"You have been removed from this groupchat because the service hosting it is being shut down":["Вы были удалены из этой комнаты по причине отключения хоста"],"Your message was not delivered because you weren\'t allowed to send it.":["Ваше сообщение не было доставлено, потому что вам не разрешили его отправить."],"Your message was not delivered because you\'re not present in the groupchat.":["Ваше сообщение не было отправлено потому что Вы не состоите в групповом чате."],"You\'re not allowed to register yourself in this groupchat.":["Вам не разрешено регистрировать себя в этом групповом чате."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Вам не разрешено регистрироваться в этом групповом чате, потому что он только для участников."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Невозможно зарегистрировать ваш псевдоним в этом групповом чате, так как он не поддерживает регистрацию."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Невозможно зарегистрировать ваш псевдоним в этом групповом чате, так как предоставлена неверная форма данных."],"Topic set by %1$s":["Тему установил(а) %1$s"],"Topic cleared by %1$s":["Тема очищена %1$s"],"%1$s has been banned by %2$s":["%1$s был забанен %2$s"],"%1$s has been banned":["%1$s был забанен"],"%1$s\'s nickname has changed":["%1$s сменил псевдоним"],"%1$s has been kicked out by %2$s":["%1$s был выгнан %2$s"],"%1$s has been kicked out":["%1$s был выкинут"],"%1$s has been removed because of an affiliation change":["%1$s был удален из-за изменения членства"],"%1$s has been removed for not being a member":["%1$s был удален из-за того, что не являлся членом"],"%1$s is no longer an admin of this groupchat":["%1$s больше не является администратором этой комнаты"],"%1$s is no longer an owner of this groupchat":["%1$s перестал быть владельцем этой конференции"],"%1$s is no longer banned from this groupchat":["%1$s был разбанен в этой конференции"],"%1$s is now an %2$s of this groupchat":["%1$s теперь %2$s этой комнаты"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Выбранный вами псевдоним зарезервирован или используется в настоящее время, выберите другой."],"Password incorrect":["Неверный пароль"],"You are not on the member list of this groupchat.":["Вы не находитесь в списке членов этой комнаты."],"You have been banned from this groupchat.":["Вы были забанены в этой комнате."],"You are not allowed to create new groupchats.":["Вам не разрешено создавать новые комнаты."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Ваш псевдоним не соответствует правилам этой комнаты."],"This groupchat does not (yet) exist.":["Эта комната не существует (пока)."],"This groupchat has reached its maximum number of participants.":["Эта комната достигла максимального количества участников."],"Remote server not found":["Удалённый сервер не найден"],"The explanation given is: \\"%1$s\\".":["Причиной является: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s пригласил вас в чат: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s пригласил вас в комнату \\"%2$s\\" по следующей причине: \\"%3$s\\""],"Error":["Ошибка"],"Sorry, something went wrong while trying to save your bookmark.":["Извините, что-то пошло не так при попытке сохранить вашу закладку."],"Timeout Error":["Ошибка времени ожидания"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Сервер не вернул ваши закладки в течение отмеренного ему времени. Вы можете перезагрузить страницу, чтобы запросить их снова."],"My contacts":["Контакты"],"Pending contacts":["Собеседники, ожидающие авторизации"],"Contact requests":["Запросы на авторизацию"],"Ungrouped":["Несгруппированные"],"New messages":["Новые сообщения"],"Sorry, there was an error while trying to add %1$s as a contact.":["Извините, произошла ошибка при добавлении %1$s в качестве контакта."],"This client does not allow presence subscriptions":["Данный чат-клиент не поддерживает уведомления о статусе"],"Click to hide these contacts":["Кликните, чтобы спрятать эти контакты"],"Unbookmark this groupchat":["Удалить эту комнату из закладок"],"Click to open this groupchat":["Зайти в чат"],"Click to toggle the bookmarks list":["Нажмите, чтобы переключить список закладок"],"Bookmarks":["Закладки"],"Bookmark this groupchat":["Добавить эту комнату в закладки"],"Would you like this groupchat to be automatically joined upon startup?":["Включить автоматический вход в эту комнату при запуске?"],"The name for this bookmark:":["Имя для этой закладки:"],"What should your nickname for this groupchat be?":["Какой должен быть псевдоним для этой комнаты?"],"Save":["Сохранить"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Вы уверены, что хотите удалить закладку \\"%1$s\\"?"],"Close":["Закрыть"],"OK":["Подтвердить"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Скачать аудиофайл \\"%1$s\\""],"Download file \\"%1$s\\"":["Скачать файл \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Версии сообщения"],"Retry":[""],"Uploading file:":["Загружаеммый файл:"],"%1$s has removed this message":["%1$s удалил это сообщение"],"This message has been edited":["Это сообщение было отредактированно"],"Show more":["Показать больше"],"No message history available.":["Нет доступной истории сообщений."],"Search results":["Поиск результатов"],"Search":["Поиск"],"Send the message":["Отправить сообщение"],"Start a call":["Инициировать звонок"],"Message characters remaining":["Осталось символов сообщения"],"Choose a file to send":["Выберите файл для отправки"],"Click to write as a normal (non-spoiler) message":["Нажмите, чтобы написать как обычное (не-спойлер) сообщение"],"Click to write your message as a spoiler":["Нажмите, чтобы написать сообщение как спойлер"],"The User\'s Profile Image":["Фото пользователя"],"Trusted":["Доверенный"],"Untrusted":["Недоверенный"],"OMEMO Fingerprints":["Отпечатки OMEMO"],"No OMEMO-enabled devices found":["Не найдено устройств с включённым OMEMO"],"Remove as contact":["Удалить из контактов"],"XMPP Address":["XMPP адрес"],"Email":["Электронная почта"],"Full Name":["Имя"],"Nickname":["Псевдоним"],"Refresh":["Обновить"],"Role":["Роль"],"URL":["Ссылка"],"%1$s is typing":["%1$s набирает текст"],"%1$s has stopped typing":["%1$s прекратил печатать"],"%1$s has gone away":["%1$s отошёл"],"Remove messages":["Удалить сообщения"],"Close this chat":["Закрыть этот чат"],"Write in the third person":["Писать от третьего лица"],"Show this menu":["Показать это меню"],"Hidden message":["Скрытое сообщение"],"Message":["Сообщение"],"Optional hint":["Опционная подсказка"],"You have unread messages":["У тебя есть непрочитанные сообщения"],"Details":[""],"See more information about this person":["Просмотреть больше информации об этом человеке"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Вы уверены, что хотите очистить сообщения данного разговора?"],"%1$s has gone offline":["%1$s вышел из сети"],"%1$s is busy":["%1$s занят"],"%1$s is online":["%1$s зашел в сеть"],"Sorry, something went wrong while trying to refresh":["Извините, что-то пошло не так при попытке обновления"],"Are you sure you want to remove this contact?":["Вы уверены, что хотите удалить этот контакт?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Прости, произошла ошибка при попытке удаления %1$s как контакта."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Чтобы улучшить производительность, мы кэшируем данные в вашем браузере. Снимите флажок, если вы используете общий компьютер, или если вы хотите, чтобы вся информация была удалена после вашего выхода. Важно, чтобы вы явно вышли из системы, иначе не все кэшированные данные могут быть удалены. Обратите внимание, что при использовании ненадежного устройства шифрование OMEMO НЕ доступно."],"This is a trusted device":["Это доверенное устройство"],"Password":["Пароль"],"Create an account":["Создать учётную запись"],"Don\'t have a chat account?":["Не имеете учётную запись для чата?"],"Log in":["Войти"],"Disconnected":["Отключено"],"Click here to log in anonymously":["Нажмите здесь, чтобы войти анонимно"],"Username":["Имя пользователя"],"user@domain":["пользователь@домен"],"Please enter a valid XMPP address":["Пожалуйста, введите действительный XMPP адрес"],"Chat Contacts":["Контакты в чате"],"Toggle chat":["Включить чат"],"Click to restore this chat":["Кликните, чтобы развернуть чат"],"Minimized":["Свёрнуто"],"This field is required":["Это поле обязательно к заполнению"],"Join":["Присоединиться"],"Enter a new Groupchat":["Войти в новую комнату"],"name@conference.example.org":["например, name@conference.example.org"],"Groupchat name":["Имя комнаты"],"Groupchat address":["Адрес комнаты (идентификатор)"],"Groupchat id is invalid.":["ID группового чата недействителен."],"Invite":["Пригласить"],"Show groupchats":["Показать список групп"],"Server address":["Адрес сервера"],"Show more information on this groupchat":["Показать больше информации об этом чате"],"Query for Groupchats":["Запросить список комнат"],"Description:":["Описание:"],"Groupchat Address (JID):":["Адрес комнаты (идентификатор):"],"Participants:":["Участники:"],"Features:":["Свойства:"],"Requires authentication":["Требуется авторизация"],"Hidden":["Скрыто"],"Requires an invitation":["Требуется приглашение"],"Moderated":["Модерируемая"],"Non-anonymous":["Не анонимная"],"Open":["Открыть"],"Permanent":["Постоянный"],"Public":["Публичный"],"Semi-anonymous":["Частично анонимный"],"Temporary":["Временный"],"Unmoderated":["Немодерируемый"],"conference.example.org":["например, conference.example.org"],"No groupchats found":["Комнаты не найдены"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Модераторы - это привилегированные пользователи, которые могут менять роли других пользователей (за исключением тех, которые связаны с администратором или владельцем."],"The default role, implies that you can read and write messages.":["Стандартная роль подразумевает что Вы можете читать и писать сообщения."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Посетителям не разрешается писать сообщения в модерируемом многопользовательском чате."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Владелец обладает самыми обширными правами. Владельцы могут изменять роли и права всех других пользователей."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Администратор - вторая по преимуществу принадлежность. Администраторы могут изменять роли и принадлежности других пользователей, за исключением владельцев."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Чтобы забанить пользователя, Вы присваиваете ему принадлежность \\"изгнанный\\"."],"Change role":["Изменить роль"],"New Role":["Новая роль"],"Reason":["Причина"],"Change affiliation":["Изменить принадлежность"],"New affiliation":["Новая принадлежность"],"Affiliation":["Принадлежность"],"Moderator Tools":["Инстурменты модератора"],"No users with that affiliation found.":["Пользователи с этой принадлежностью не найдены."],"No users with that role found.":["Пользователи с этой ролью не найдены."],"Type here to filter the search results":[""],"Show users":["Показать пользователей"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Роли присваиваются пользователям, чтобы предоставить или запретить им определенные способности в многопользовательском чате. Они назначаются либо явно, либо неявно как часть членства. Роль, которая не обусловлена принадлежностью, действительна только в течение сессии пользователя."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Принадлежность - это долгосрочное право, которое обычно подразумевает определенную роль и предоставляет привилегии и обязанности. Например, администраторы и владельцы автоматически получают роль модератора."],"Affiliation changed":[""],"You\'re not allowed to make that change":["Вам не разрешено вносить это изменение"],"Topic":["Тема"],"Topic author":["Автор темы"],"Groupchat address (JID)":["Адрес комнаты (JID)"],"Message archiving":["Архивация сообщений"],"Messages are archived on the server":["Сообщения архивируются на сервере"],"Description":["Описание"],"Features":["Особенности"],"This groupchat is not publicly searchable":["Эта комната недоступна для публичного поиска"],"This groupchat is restricted to members only":["Эта комната предназначена только для участников"],"Members only":["Только для членов"],"Participants entering this groupchat need to request permission to write":["Участникам, входящим в этот групповой чат, необходимо получить разрешение для написания сообщений"],"Name":["Имя"],"This groupchat does not require a password upon entry":["Эта комната не требует пароля для входа"],"No password required":["Пароль не требуется"],"Not anonymous":["Не анонимная"],"All other groupchat participants can see your XMPP address":["Все участники группового чата могут видеть ваш XMPP адрес"],"Not moderated":["Немодерируемый"],"Participants entering this groupchat can write right away":["Участники, входящие в этот групповой чат, могут писать сразуже"],"Online users":["В сети"],"Anyone can join this groupchat":["Каждый может присоединиться к этой комнате"],"This groupchat requires a password before entry":["Эта комната требует ввести пароль перед входом"],"Password protected":["Пароль защищён"],"Persistent":["Стойкий"],"This groupchat persists even if it\'s unoccupied":["Эта комната сохраняется, даже если в ней нет участников"],"Only moderators can see your XMPP address":["Только модераторы могут видеть ваш псевдоним XMPP"],"This groupchat will disappear once the last person leaves":["Эта комната исчезнет после выхода последнего человека"],"This groupchat is publicly searchable":["Эта комната доступна для публичного поиска"],"Groupchat info for %1$s":["Информация конференции от %1$s"],"You\'re not allowed to send messages in this room":["Вам не разрешено писать сообщения в этой комнате"],"The conversation has moved. Click below to enter.":["Беседа перемещена. Нажмите ниже чтобы войти."],"This groupchat no longer exists":["Эта комната больше не существует"],"Enter groupchat":["Войти в комнату"],"Please choose your nickname":["Пожалуйста, выберите свой псевдоним"],"This groupchat requires a password":["Для доступа в чат необходим пароль"],"Password: ":["Пароль: "],"Submit":["Отправить"],"This user is a moderator.":["Этот пользователь является модератором."],"This user can send messages in this groupchat.":["Этот пользователь может отправлять сообщения в этой комнате."],"This user can NOT send messages in this groupchat.":["Этот пользователь НЕ может отправлять сообщения в этой комнате."],"Owner":["Владелец"],"Admin":["Админ"],"Member":["Участник"],"Moderator":["Модератор"],"Visitor":["Посетитель"],"Click to mention %1$s in your message.":["Нажмите, чтобы упомянуть %1$s в вашем сообщении."],"Participants":["Участники"],"%1$s has entered the groupchat":["%1$s вошёл в комнату"],"%1$s has left the groupchat":["%1$s покинул комнату"],"%1$s is now a moderator":["%1$s теперь модератор"],"%1$s is no longer a moderator":["%1$s больше не модератор"],"%1$s has been muted":["%1$s был приглушён"],"%1$s and %2$s":["%1$s и %2$s"],"Change user\'s affiliation to admin":["Дать права администратора"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Изменить роль пользователя на \\"участник\\""],"Remove this groupchat":["Покинуть эту комнату"],"Kick user from groupchat":["Удалить пользователя из комнаты"],"Write in 3rd person":["Писать в третьем лице"],"Grant membership to a user":["Сделать пользователя участником"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Запретить отправку сообщений"],"Change your nickname":["Изменить свой псевдоним"],"Grant moderator role to user":["Предоставить права модератора пользователю"],"Grant ownership of this groupchat":["Предоставить права владельца на этот чат"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Установить тему комнаты"],"Set groupchat subject (alias for /subject)":["Установить тему комнаты (псевдоним для /subject)"],"Allow muted user to post messages":["Разрешить заглушенным пользователям отправлять сообщения"],"You are about to retract this message.":["Вы собираетесь отозвать это сообщение."],"Sorry, you\'re not allowed to retract this message":["Извините, вы не можете отозвать это сообщение"],"A timeout occurred while trying to retract the message":["При попытке отозвать сообщение произошел таймаут"],"Configure":[""],"Configure this groupchat":["Настроить комнату"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Спрятать список участников"],"Forbidden: you do not have the necessary role in order to do that.":["Запрещено: у вас нет необходимой роли для выполнения данного действия."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Запрещено: у вас нет необходимых связей для выполнения данного действия."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Ошибка: команда \\"%1$s\\" принимает два аргумента, пользовательский псевдоним и (опционально) причину."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["например, name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Ошибка: неверное количество аргументов"],"This action was done by %1$s.":["Это действие было выполнено %1$s."],"The reason given is: \\"%1$s\\".":["Причиной является: \\"%1$s\\"."],"Groupchats":["Комнаты"],"Add a new groupchat":["Добавить новую комнату"],"Query for groupchats":["Запросить список комнат"],"Announcements":[""],"Notification from %1$s":["Уведомление от %1$s"],"%1$s says":["%1$s говорит"],"has gone offline":["вышел из сети"],"has gone away":["отошёл"],"is busy":["занят"],"has come online":["появился в сети"],"wants to be your contact":["хочет быть в вашем списке контактов"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Подробнее"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s на основе открытого исходного кода %2$s XMPP чат-клиент предоставлен вам %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s переведите %2$s это на свой родной язык"],"Log out":["Выйти"],"Click to change your chat status":["Изменить ваш статус"],"Show details about this chat client":["Показать больше информации об этом чате"],"Your avatar image":["Ваш аватар"],"Checkbox for selecting the following fingerprint":["Флаг для выбора следующих отпечатков"],"Device without a fingerprint":["Устройство без отпечатка"],"Other OMEMO-enabled devices":["Другие устройства с включенным OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Флаг для выбора отпечатков всех других OMEMO устройств"],"Remove checked devices and close":["Удалить выбранные устройства и закрыть"],"Select all":["Выбрать всё"],"This device\'s OMEMO fingerprint":["OMEMO-Отпечаток этого устройства"],"Generate new keys and fingerprint":["Сгенерировать новые ключи и отпечаток"],"Your Profile":["Ваш профиль"],"XMPP Address (JID)":["XMPP адрес (JID)"],"Save and close":["Сохранить и закрыть"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Используйте запятые для перечисления нескольких ролей. Ваши роли отображаются рядом с вашим именем в чате."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Извините, произошла ошибка при попытке сохранить данные вашего профиля."],"You can check your browser\'s developer console for any error output.":["Проверьте консоль вашего браузера для деталей об ошибках."],"Away":["Отошёл"],"Busy":["Занят"],"Custom status":["Произвольный статус"],"Offline":["Не в сети"],"Online":["В сети"],"Away for long":["Давно отсутствует"],"Change chat status":["Изменить статус чата"],"Personal status message":["Личное сообщение"],"I am %1$s":["Я %1$s"],"Are you sure you want to log out?":["Вы уверены, что хотите выйти?"],"online":["на связи"],"busy":["занят"],"away for long":["отошёл надолго"],"away":["отошёл"],"offline":["Не в сети"],"Sorry, could not decrypt a received OMEMO message due to an error.":["К сожалению, не удалось расшифровать OMEMO сообщение."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["У %1$s нет клиента с поддержкой шифрования OMEMO. Шифрование чата более не поддерживается в данной комнате."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Невозможно использовать сквозное шифрование т.к. %1$s использует клиент без поддержки OMEMO."],"Messages are being sent in plaintext":["Сообщения отправляются в виде открытого текста"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Извините, произошла ошибка при попытке удаления устройств."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Вы уверены, что хотите сгенерировать новые OMEMO ключи? Это действие удалит все стырые ключи, и ранее зашифрованные сообщению не смогут быть расшифрованы на этом девайсе."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Извините, невозможно отправить зашифрованное сообщение, поскольку %1$s требуют, чтобы вы были на них подписаны, чтобы увидеть их информацию об OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Извините, мы не можем отправить зашифрованное сообщение, так как не удаётся найти удалённый сервер для \\"%1$s\\""],"Unable to send an encrypted message due to an unexpected error.":["Не удаётся отправить зашифрованное сообщение из-за непредвиденной ошибки."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Сообщение не подерживается, т.к. оно зашифровано с помощью OMEMO. Более подробную информацию ищите по адресу: https://conversations.im/omemo"]," e.g. conversejs.org":[" например, conversejs.org"],"Fetch registration form":["Получить форму регистрации"],"Tip: A list of public XMPP providers is available":["Совет. Список публичных XMPP провайдеров доступен"],"here":["здесь"],"Sorry, we\'re unable to connect to your chosen provider.":["К сожалению, мы не можем подключиться к выбранному вами провайдеру."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["К сожалению, провайдер не поддерживает регистрацию аккаунта через клиентское приложение. Пожалуйста попробуйте выбрать другого провайдера."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Что-то пошло не так при установке связи с \\"%1$s\\". Вы уверены, что такой адрес существует?"],"Now logging you in":["Осуществляется вход"],"Registered successfully":["Зарегистрирован успешно"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Провайдер отклонил вашу попытку зарегистрироваться. Пожалуйста, проверьте, правильно ли введены значения."],"Leave this groupchat":["Покинуть эту комнату"],"Click to toggle the list of open groupchats":["Нажмите, чтобы переключить список комнат"],"Open Groupchats":["Открытые групповые чаты"],"Are you sure you want to leave the groupchat %1$s?":["Вы уверены, что хотите покинуть комнату \\"%1$s\\"?"],"Add":["Добавить"],"Add a Contact":["Добавить контакт"],"This contact is busy":["Занят"],"This contact is online":["В сети"],"This contact is offline":["Не в сети"],"This contact is unavailable":["Недоступен"],"This contact is away for an extended period":["Надолго отошёл"],"This contact is away":["Отошёл"],"Contact name":["Имя контакта"],"Optional nickname":["Имя пользователя по умолчанию"],"Sorry, could not find a contact with that name":["Извините, контакт с данным именем не найден"],"This contact has already been added":["Этот контак уже добавлен"],"Filter":["Фильтр"],"Filter by contact name":["Фильтр по имени"],"Filter by group name":["Фильтр по названию группы"],"Filter by status":["Фильтр по статусу"],"Any":["Любой"],"Unread":["Непрочитанно"],"Chatty":["Болтливый"],"Extended Away":["Нет на месте долгое время"],"Click to remove %1$s as a contact":["Нажми что-бы удалить %1$s как контакт"],"Click to accept the contact request from %1$s":["Кликни, что-бы принять запрос на добавление от %1$s"],"Click to decline the contact request from %1$s":["Кликни, что-бы отклонить запрос на добавление от %1$s"],"Are you sure you want to decline this contact request?":["Вы уверены, что хотите отклонить запрос от этого контакта?"],"Contacts":["Контакты"],"Add a contact":["Добавть контакт"],"Re-sync your contacts":["Синхронизируйте ваши контакты"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[170],{536:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"ru"},"Create your account":["Создать учетную запись"],"Please enter the XMPP provider to register with:":["Пожалуйста, введите XMPP провайдера для регистрации:"],"Already have a chat account?":["Уже имеете учётную запись чата?"],"Log in here":["Вход в систему"],"Account Registration:":["Регистрация учётной записи:"],"Register":["Регистрация"],"Choose a different provider":["Выберите другого провайдера"],"Hold tight, we\'re fetching the registration form…":["Подождите немного, мы получаем регистрационную форму…"],"Cancel":["Отменить"],"The connection has dropped, attempting to reconnect.":["Соединение потеряно, попытка переподключения."],"An error occurred while connecting to the chat server.":["При подключении к чат-серверу произошла ошибка."],"Your XMPP address and/or password is incorrect. Please try again.":["Ваш адрес XMPP и/или пароль некорректные. Пожалуйста, попробуйте снова."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["К сожалению, мы не смогли подключиться к XMPP узлу с доменом: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Сервер XMPP не предлагал поддерживаемый механизм аутентификации"],"Undecryptable OMEMO message":["Нерасшифруемое OMEMO-сообщение"],"Sorry, could not determine upload URL.":["К сожалению, невозможно распознать URL загрузки."],"Sorry, could not determine file upload URL.":["Извините, невозможно распознать URL для загрузки файла."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Извините, не удалось загрузить ваш файл. Ответ сервера: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["К сожалению, произошла ошибка при загрузке файла."],"You\'re not allowed to retract your message.":["Вам не разрешено отозвать свое сообщение."],"Sorry, an error occurred while trying to retract your message.":["К сожалению, при попытке отозвать ваше сообщение произошла ошибка."],"You\'re not allowed to send a message.":["Вам не разрешено отправлять сообщения."],"Sorry, an error occurred while trying to send your message.":["Извините, при отправке вашего сообщения произошла ошибка."],"Sorry, looks like file upload is not supported by your server.":["Похоже, Ваш сервер не поддерживает загрузку файлов."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Размер Вашего файла(%1$s) превышает максимально допустимый размер файла на сервере(%2$s)."],"Smileys and emotions":["Смайлы и эмоции"],"People":["Люди"],"Activities":["Занятия"],"Travel":["Путешествие"],"Objects":["Объекты"],"Animals and nature":["Животные и природа"],"Food and drink":["Еда и напитки"],"Symbols":["Символы"],"Flags":["Флаги"],"Stickers":["Наклейки"],"This groupchat is not anonymous":["Этот групповой чат не анонимный"],"This groupchat now shows unavailable members":["В данный момент этот групповой чат показывает недоступных участников"],"This groupchat does not show unavailable members":["В этом групповом чате отсутствуют недоступные участники"],"The groupchat configuration has changed":["Изменена конфигурация группового чата"],"Groupchat logging is now enabled":["Журналирование группового чата теперь включено"],"Groupchat logging is now disabled":["Журналирование группового чата теперь отключено"],"This groupchat is now no longer anonymous":["Этот групповой чат больше не анонимен"],"This groupchat is now semi-anonymous":["Этот групповой чат частично анонимный"],"This groupchat is now fully-anonymous":["Этот групповой чат стал полностью анонимный"],"A new groupchat has been created":["Появился новый групповой чат"],"Your nickname has been automatically set to %1$s":["Ваш псевдоним был автоматически изменён на: %1$s"],"Your nickname has been changed to %1$s":["Ваш псевдоним был изменён на: %1$s"],"You have been banned from this groupchat":["Вам запрещено подключаться к этому групповому чату"],"You have exited this groupchat due to a technical problem":["Вы вышли из группового чата из-за технической проблемы"],"You have been kicked from this groupchat":["Вас исключили из группового чата"],"You have been removed from this groupchat because of an affiliation change":["Вас удалили из-за изменения прав"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Вы были удалены из этого группового чата т.к. его режим был сменён на \\"по приглашению\\" и вы не были приглашены"],"You have been removed from this groupchat because the service hosting it is being shut down":["Вы были удалены из этой комнаты по причине отключения хоста"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Ваш отзыв не был доставлен, потому что вы не присутствовали в групповом чате."],"Your message was not delivered because you weren\'t allowed to send it.":["Ваше сообщение не было доставлено, потому что вам не разрешили его отправить."],"Your message was not delivered because you\'re not present in the groupchat.":["Ваше сообщение не было отправлено потому что Вы не состоите в групповом чате."],"A timeout happened while while trying to retract your message.":["Истекло время ожидания при попытке отозвать ваше сообщение."],"You\'re not allowed to register yourself in this groupchat.":["Вам не разрешено регистрировать себя в этом групповом чате."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Вам не разрешено регистрироваться в этом групповом чате, потому что он только для участников."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Невозможно зарегистрировать ваш псевдоним в этом групповом чате, так как он не поддерживает регистрацию."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Невозможно зарегистрировать ваш псевдоним в этом групповом чате, так как предоставлена неверная форма данных."],"Topic set by %1$s":["Тему установил(а) %1$s"],"Topic cleared by %1$s":["Тема очищена %1$s"],"%1$s has been banned by %2$s":["%1$s был забанен %2$s"],"%1$s has been banned":["%1$s был забанен"],"%1$s\'s nickname has changed":["%1$s сменил псевдоним"],"%1$s has been kicked out by %2$s":["%1$s был выгнан %2$s"],"%1$s has been kicked out":["%1$s был выкинут"],"%1$s has been removed because of an affiliation change":["%1$s был удален из-за изменения членства"],"%1$s has been removed for not being a member":["%1$s был удален из-за того, что не являлся членом"],"%1$s is no longer an admin of this groupchat":["%1$s больше не является администратором этой комнаты"],"%1$s is no longer an owner of this groupchat":["%1$s перестал быть владельцем этой конференции"],"%1$s is no longer banned from this groupchat":["%1$s был разбанен в этой конференции"],"%1$s is no longer a member of this groupchat":["%1$s больше не является участником этого группового чата"],"%1$s is now a member of this groupchat":["%1$s теперь является участником этого группового чата"],"%1$s is now an %2$s of this groupchat":["%1$s теперь %2$s этой комнаты"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Выбранный вами псевдоним зарезервирован или используется в настоящее время, выберите другой."],"Password incorrect":["Неверный пароль"],"You are not on the member list of this groupchat.":["Вы не находитесь в списке членов этой комнаты."],"You have been banned from this groupchat.":["Вы были забанены в этой комнате."],"You are not allowed to create new groupchats.":["Вам не разрешено создавать новые комнаты."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Ваш псевдоним не соответствует правилам этой комнаты."],"This groupchat does not (yet) exist.":["Эта комната не существует (пока)."],"This groupchat has reached its maximum number of participants.":["Эта комната достигла максимального количества участников."],"Remote server not found":["Удалённый сервер не найден"],"The explanation given is: \\"%1$s\\".":["Причиной является: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s пригласил вас в чат: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s пригласил вас в комнату \\"%2$s\\" по следующей причине: \\"%3$s\\""],"Error":["Ошибка"],"Sorry, something went wrong while trying to save your bookmark.":["Извините, что-то пошло не так при попытке сохранить вашу закладку."],"Timeout Error":["Ошибка времени ожидания"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Сервер не вернул ваши закладки в течение отмеренного ему времени. Вы можете перезагрузить страницу, чтобы запросить их снова."],"My contacts":["Контакты"],"Pending contacts":["Собеседники, ожидающие авторизации"],"Contact requests":["Запросы на авторизацию"],"Ungrouped":["Несгруппированные"],"New messages":["Новые сообщения"],"Sorry, there was an error while trying to add %1$s as a contact.":["Извините, произошла ошибка при добавлении %1$s в качестве контакта."],"This client does not allow presence subscriptions":["Данный чат-клиент не поддерживает уведомления о статусе"],"Click to hide these contacts":["Кликните, чтобы спрятать эти контакты"],"Unbookmark this groupchat":["Удалить эту комнату из закладок"],"Click to open this groupchat":["Зайти в чат"],"Click to toggle the bookmarks list":["Нажмите, чтобы переключить список закладок"],"Bookmarks":["Закладки"],"Bookmark this groupchat":["Добавить эту комнату в закладки"],"Would you like this groupchat to be automatically joined upon startup?":["Включить автоматический вход в эту комнату при запуске?"],"The name for this bookmark:":["Имя для этой закладки:"],"What should your nickname for this groupchat be?":["Какой должен быть псевдоним для этой комнаты?"],"Save":["Сохранить"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Вы уверены, что хотите удалить закладку \\"%1$s\\"?"],"Unbookmark":["Удалить из закладок"],"Bookmark":["Добавить в закладки"],"Close":["Закрыть"],"OK":["Подтвердить"],"Image: ":["Изображение: "],"Download audio file \\"%1$s\\"":["Скачать аудиофайл \\"%1$s\\""],"Download file \\"%1$s\\"":["Скачать файл \\"%1$s\\""],"Cancel Editing":["Отменить редактирование"],"Edit":["Редактировать"],"Retract":["Отозвать"],"Message versions":["Версии сообщения"],"Retry":["Повторить"],"Uploading file:":["Загружаеммый файл:"],"%1$s has removed this message":["%1$s удалил это сообщение"],"This message has been edited":["Это сообщение было отредактированно"],"Show more":["Показать больше"],"Show less":["Показать меньше"],"No message history available.":["Нет доступной истории сообщений."],"Search results":["Поиск результатов"],"Search":["Поиск"],"Insert emojis":["Вставить смайлы"],"Send the message":["Отправить сообщение"],"Start a call":["Инициировать звонок"],"Message characters remaining":["Осталось символов сообщения"],"Hide participants":["Скрыть участников"],"Show participants":["Показать участников"],"Choose a file to send":["Выберите файл для отправки"],"Click to write as a normal (non-spoiler) message":["Нажмите, чтобы написать как обычное (не-спойлер) сообщение"],"Click to write your message as a spoiler":["Нажмите, чтобы написать сообщение как спойлер"],"The User\'s Profile Image":["Фото пользователя"],"Trusted":["Доверенный"],"Untrusted":["Недоверенный"],"OMEMO Fingerprints":["Отпечатки OMEMO"],"No OMEMO-enabled devices found":["Не найдено устройств с включённым OMEMO"],"Remove as contact":["Удалить из контактов"],"XMPP Address":["XMPP адрес"],"Email":["Электронная почта"],"Full Name":["Имя"],"Nickname":["Псевдоним"],"Refresh":["Обновить"],"Role":["Роль"],"URL":["Ссылка"],"%1$s is typing":["%1$s набирает текст"],"%1$s has stopped typing":["%1$s прекратил печатать"],"%1$s has gone away":["%1$s отошёл"],"Remove messages":["Удалить сообщения"],"Close this chat":["Закрыть этот чат"],"Write in the third person":["Писать от третьего лица"],"Show this menu":["Показать это меню"],"Hidden message":["Скрытое сообщение"],"Message":["Сообщение"],"Optional hint":["Опционная подсказка"],"You have unread messages":["У тебя есть непрочитанные сообщения"],"Details":["Детали"],"See more information about this person":["Просмотреть больше информации об этом человеке"],"Close and end this conversation":["Закрыть и закончить эту беседу"],"Sorry, the connection has been lost, and your message could not be sent":["К сожалению, связь была потеряна, и ваше сообщение не удалось отправить"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":["Вы уверены, что хотите очистить сообщения данного разговора?"],"%1$s has gone offline":["%1$s вышел из сети"],"%1$s is busy":["%1$s занят"],"%1$s is online":["%1$s зашел в сеть"],"Sorry, something went wrong while trying to refresh":["Извините, что-то пошло не так при попытке обновления"],"Are you sure you want to remove this contact?":["Вы уверены, что хотите удалить этот контакт?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Прости, произошла ошибка при попытке удаления %1$s как контакта."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Чтобы улучшить производительность, мы кэшируем данные в вашем браузере. Снимите флажок, если вы используете общий компьютер, или если вы хотите, чтобы вся информация была удалена после вашего выхода. Важно, чтобы вы явно вышли из системы, иначе не все кэшированные данные могут быть удалены. Обратите внимание, что при использовании ненадежного устройства шифрование OMEMO НЕ доступно."],"This is a trusted device":["Это доверенное устройство"],"Password":["Пароль"],"Create an account":["Создать учётную запись"],"Don\'t have a chat account?":["Не имеете учётную запись для чата?"],"Log in":["Войти"],"Disconnected":["Отключено"],"Click here to log in anonymously":["Нажмите здесь, чтобы войти анонимно"],"Username":["Имя пользователя"],"user@domain":["пользователь@домен"],"Please enter a valid XMPP address":["Пожалуйста, введите действительный XMPP адрес"],"Chat Contacts":["Контакты в чате"],"Toggle chat":["Включить чат"],"Click to restore this chat":["Кликните, чтобы развернуть чат"],"Minimized":["Свёрнуто"],"This user is a moderator.":["Этот пользователь является модератором."],"This user can send messages in this groupchat.":["Этот пользователь может отправлять сообщения в этой комнате."],"This user can NOT send messages in this groupchat.":["Этот пользователь НЕ может отправлять сообщения в этой комнате."],"Owner":["Владелец"],"Admin":["Админ"],"Member":["Участник"],"Moderator":["Модератор"],"Visitor":["Посетитель"],"Click to mention %1$s in your message.":["Нажмите, чтобы упомянуть %1$s в вашем сообщении."],"Participants":["Участники"],"This field is required":["Это поле обязательно к заполнению"],"Join":["Присоединиться"],"Enter a new Groupchat":["Войти в новую комнату"],"name@conference.example.org":["например, name@conference.example.org"],"Groupchat name":["Имя комнаты"],"Groupchat address":["Адрес комнаты (идентификатор)"],"Groupchat id is invalid.":["ID группового чата недействителен."],"Invite":["Пригласить"],"Show groupchats":["Показать список групп"],"Server address":["Адрес сервера"],"Show more information on this groupchat":["Показать больше информации об этом чате"],"Query for Groupchats":["Запросить список комнат"],"Description:":["Описание:"],"Groupchat Address (JID):":["Адрес комнаты (идентификатор):"],"Participants:":["Участники:"],"Features:":["Свойства:"],"Requires authentication":["Требуется авторизация"],"Hidden":["Скрыто"],"Requires an invitation":["Требуется приглашение"],"Moderated":["Модерируемая"],"Non-anonymous":["Не анонимная"],"Open":["Открыть"],"Permanent":["Постоянный"],"Public":["Публичный"],"Semi-anonymous":["Частично анонимный"],"Temporary":["Временный"],"Unmoderated":["Немодерируемый"],"conference.example.org":["например, conference.example.org"],"Groupchats found":["Найдены групповые чаты"],"No groupchats found":["Комнаты не найдены"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Модераторы - это привилегированные пользователи, которые могут менять роли других пользователей (за исключением тех, которые связаны с администратором или владельцем."],"The default role, implies that you can read and write messages.":["Стандартная роль подразумевает что Вы можете читать и писать сообщения."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Посетителям не разрешается писать сообщения в модерируемом многопользовательском чате."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Владелец обладает самыми обширными правами. Владельцы могут изменять роли и права всех других пользователей."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Администратор - вторая по преимуществу принадлежность. Администраторы могут изменять роли и принадлежности других пользователей, за исключением владельцев."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Чтобы забанить пользователя, Вы присваиваете ему принадлежность \\"изгнанный\\"."],"Change role":["Изменить роль"],"New Role":["Новая роль"],"Reason":["Причина"],"Change affiliation":["Изменить принадлежность"],"New affiliation":["Новая принадлежность"],"Affiliation":["Принадлежность"],"Moderator Tools":["Инстурменты модератора"],"No users with that affiliation found.":["Пользователи с этой принадлежностью не найдены."],"No users with that role found.":["Пользователи с этой ролью не найдены."],"Type here to filter the search results":[""],"Show users":["Показать пользователей"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Роли присваиваются пользователям, чтобы предоставить или запретить им определенные способности в многопользовательском чате. Они назначаются либо явно, либо неявно как часть членства. Роль, которая не обусловлена принадлежностью, действительна только в течение сессии пользователя."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Принадлежность - это долгосрочное право, которое обычно подразумевает определенную роль и предоставляет привилегии и обязанности. Например, администраторы и владельцы автоматически получают роль модератора."],"Affiliation changed":[""],"You\'re not allowed to make that change":["Вам не разрешено вносить это изменение"],"Topic":["Тема"],"Topic author":["Автор темы"],"Groupchat address (JID)":["Адрес комнаты (JID)"],"Message archiving":["Архивация сообщений"],"Messages are archived on the server":["Сообщения архивируются на сервере"],"Description":["Описание"],"Features":["Особенности"],"This groupchat is not publicly searchable":["Эта комната недоступна для публичного поиска"],"This groupchat is restricted to members only":["Эта комната предназначена только для участников"],"Members only":["Только для членов"],"Participants entering this groupchat need to request permission to write":["Участникам, входящим в этот групповой чат, необходимо получить разрешение для написания сообщений"],"Name":["Имя"],"This groupchat does not require a password upon entry":["Эта комната не требует пароля для входа"],"No password required":["Пароль не требуется"],"Not anonymous":["Не анонимная"],"All other groupchat participants can see your XMPP address":["Все участники группового чата могут видеть ваш XMPP адрес"],"Not moderated":["Немодерируемый"],"Participants entering this groupchat can write right away":["Участники, входящие в этот групповой чат, могут писать сразуже"],"Online users":["В сети"],"Anyone can join this groupchat":["Каждый может присоединиться к этой комнате"],"This groupchat requires a password before entry":["Эта комната требует ввести пароль перед входом"],"Password protected":["Пароль защищён"],"Persistent":["Стойкий"],"This groupchat persists even if it\'s unoccupied":["Эта комната сохраняется, даже если в ней нет участников"],"Only moderators can see your XMPP address":["Только модераторы могут видеть ваш псевдоним XMPP"],"This groupchat will disappear once the last person leaves":["Эта комната исчезнет после выхода последнего человека"],"This groupchat is publicly searchable":["Эта комната доступна для публичного поиска"],"Groupchat info for %1$s":["Информация конференции от %1$s"],"You\'re not allowed to send messages in this room":["Вам не разрешено писать сообщения в этой комнате"],"The conversation has moved. Click below to enter.":["Беседа перемещена. Нажмите ниже чтобы войти."],"This groupchat no longer exists":["Эта комната больше не существует"],"Enter groupchat":["Войти в комнату"],"Please choose your nickname":["Пожалуйста, выберите свой псевдоним"],"This groupchat requires a password":["Для доступа в чат необходим пароль"],"Password: ":["Пароль: "],"Submit":["Отправить"],"%1$s has entered the groupchat":["%1$s вошёл в комнату"],"%1$s has left the groupchat":["%1$s покинул комнату"],"%1$s is now a moderator":["%1$s теперь модератор"],"%1$s is no longer a moderator":["%1$s больше не модератор"],"%1$s has been muted":["%1$s был приглушён"],"%1$s and %2$s":["%1$s и %2$s"],"Change user\'s affiliation to admin":["Дать права администратора"],"Ban user by changing their affiliation to outcast":[""],"Change user role to participant":["Изменить роль пользователя на \\"участник\\""],"Remove this groupchat":["Покинуть эту комнату"],"Kick user from groupchat":["Удалить пользователя из комнаты"],"Write in 3rd person":["Писать в третьем лице"],"Grant membership to a user":["Сделать пользователя участником"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Запретить отправку сообщений"],"Change your nickname":["Изменить свой псевдоним"],"Grant moderator role to user":["Предоставить права модератора пользователю"],"Grant ownership of this groupchat":["Предоставить права владельца на этот чат"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":["Установить тему комнаты"],"Set groupchat subject (alias for /subject)":["Установить тему комнаты (псевдоним для /subject)"],"Allow muted user to post messages":["Разрешить заглушенным пользователям отправлять сообщения"],"You are about to retract this message.":["Вы собираетесь отозвать это сообщение."],"Sorry, you\'re not allowed to retract this message":["Извините, вы не можете отозвать это сообщение"],"A timeout occurred while trying to retract the message":["При попытке отозвать сообщение произошел таймаут"],"Configure":[""],"Configure this groupchat":["Настроить комнату"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Hide the list of participants":["Спрятать список участников"],"Forbidden: you do not have the necessary role in order to do that.":["Запрещено: у вас нет необходимой роли для выполнения данного действия."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Запрещено: у вас нет необходимых связей для выполнения данного действия."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Ошибка: команда \\"%1$s\\" принимает два аргумента, пользовательский псевдоним и (опционально) причину."],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Please enter the XMPP address of this groupchat to confirm":["Пожалуйста, введите XMPP-адрес этого группового чата для подтверждения"],"name@example.org":["например, name@example.org"],"Optional reason for destroying this groupchat":["Необязательная причина для удаления этого группового чата"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["Ошибка: неверное количество аргументов"],"This action was done by %1$s.":["Это действие было выполнено %1$s."],"The reason given is: \\"%1$s\\".":["Причиной является: \\"%1$s\\"."],"Groupchats":["Комнаты"],"Add a new groupchat":["Добавить новую комнату"],"Query for groupchats":["Запросить список комнат"],"Announcements":[""],"Notification from %1$s":["Уведомление от %1$s"],"%1$s says":["%1$s говорит"],"has gone offline":["вышел из сети"],"has gone away":["отошёл"],"is busy":["занят"],"has come online":["появился в сети"],"wants to be your contact":["хочет быть в вашем списке контактов"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":["Найдены команды"],"List available commands":[""],"No commands found":["Комманд не найдено"],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["К сожалению, при попытке выполнить команду произошла ошибка. Подробнее см. В консоли разработчика"],"About":["Подробнее"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s на основе открытого исходного кода %2$s XMPP чат-клиент предоставлен вам %3$s Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s переведите %2$s это на свой родной язык"],"Log out":["Выйти"],"Click to change your chat status":["Изменить ваш статус"],"Show details about this chat client":["Показать больше информации об этом чате"],"Your avatar image":["Ваш аватар"],"Checkbox for selecting the following fingerprint":["Флаг для выбора следующих отпечатков"],"Device without a fingerprint":["Устройство без отпечатка"],"Other OMEMO-enabled devices":["Другие устройства с включенным OMEMO"],"Checkbox to select fingerprints of all other OMEMO devices":["Флаг для выбора отпечатков всех других OMEMO устройств"],"Remove checked devices and close":["Удалить выбранные устройства и закрыть"],"Select all":["Выбрать всё"],"This device\'s OMEMO fingerprint":["OMEMO-Отпечаток этого устройства"],"Generate new keys and fingerprint":["Сгенерировать новые ключи и отпечаток"],"Your Profile":["Ваш профиль"],"XMPP Address (JID)":["XMPP адрес (JID)"],"Save and close":["Сохранить и закрыть"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Используйте запятые для перечисления нескольких ролей. Ваши роли отображаются рядом с вашим именем в чате."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Извините, произошла ошибка при попытке сохранить данные вашего профиля."],"You can check your browser\'s developer console for any error output.":["Проверьте консоль вашего браузера для деталей об ошибках."],"Away":["Отошёл"],"Busy":["Занят"],"Custom status":["Произвольный статус"],"Offline":["Не в сети"],"Online":["В сети"],"Away for long":["Давно отсутствует"],"Change chat status":["Изменить статус чата"],"Personal status message":["Личное сообщение"],"I am %1$s":["Я %1$s"],"Are you sure you want to log out?":["Вы уверены, что хотите выйти?"],"online":["на связи"],"busy":["занят"],"away for long":["отошёл надолго"],"away":["отошёл"],"offline":["Не в сети"],"Sorry, could not decrypt a received OMEMO message due to an error.":["К сожалению, не удалось расшифровать OMEMO сообщение."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["У %1$s нет клиента с поддержкой шифрования OMEMO. Шифрование чата более не поддерживается в данной комнате."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Невозможно использовать сквозное шифрование т.к. %1$s использует клиент без поддержки OMEMO."],"Messages are being sent in plaintext":["Сообщения отправляются в виде открытого текста"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Извините, невозможно отправить зашифрованное сообщение, поскольку %1$s требуют, чтобы вы были на них подписаны, чтобы увидеть их информацию об OMEMO"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Извините, мы не можем отправить зашифрованное сообщение, так как не удаётся найти удалённый сервер для \\"%1$s\\""],"Unable to send an encrypted message due to an unexpected error.":["Не удаётся отправить зашифрованное сообщение из-за непредвиденной ошибки."],"Sorry, an error occurred while trying to remove the devices.":["Извините, произошла ошибка при попытке удаления устройств."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Вы уверены, что хотите сгенерировать новые OMEMO ключи? Это действие удалит все стырые ключи, и ранее зашифрованные сообщению не смогут быть расшифрованы на этом девайсе."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Сообщение не подерживается, т.к. оно зашифровано с помощью OMEMO. Более подробную информацию ищите по адресу: https://conversations.im/omemo"]," e.g. conversejs.org":[" например, conversejs.org"],"Fetch registration form":["Получить форму регистрации"],"Tip: A list of public XMPP providers is available":["Совет. Список публичных XMPP провайдеров доступен"],"here":["здесь"],"Sorry, we\'re unable to connect to your chosen provider.":["К сожалению, мы не можем подключиться к выбранному вами провайдеру."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["К сожалению, провайдер не поддерживает регистрацию аккаунта через клиентское приложение. Пожалуйста попробуйте выбрать другого провайдера."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["Что-то пошло не так при установке связи с \\"%1$s\\". Вы уверены, что такой адрес существует?"],"Now logging you in":["Осуществляется вход"],"Registered successfully":["Зарегистрирован успешно"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Провайдер отклонил вашу попытку зарегистрироваться. Пожалуйста, проверьте, правильно ли введены значения."],"Leave this groupchat":["Покинуть эту комнату"],"Click to toggle the list of open groupchats":["Нажмите, чтобы переключить список комнат"],"Open Groupchats":["Открытые групповые чаты"],"Are you sure you want to leave the groupchat %1$s?":["Вы уверены, что хотите покинуть комнату \\"%1$s\\"?"],"Add":["Добавить"],"Add a Contact":["Добавить контакт"],"This contact is busy":["Занят"],"This contact is online":["В сети"],"This contact is offline":["Не в сети"],"This contact is unavailable":["Недоступен"],"This contact is away for an extended period":["Надолго отошёл"],"This contact is away":["Отошёл"],"Contact name":["Имя контакта"],"Optional nickname":["Имя пользователя по умолчанию"],"Sorry, could not find a contact with that name":["Извините, контакт с данным именем не найден"],"This contact has already been added":["Этот контак уже добавлен"],"Filter":["Фильтр"],"Filter by contact name":["Фильтр по имени"],"Filter by group name":["Фильтр по названию группы"],"Filter by status":["Фильтр по статусу"],"Any":["Любой"],"Unread":["Непрочитанно"],"Chatty":["Болтливый"],"Extended Away":["Нет на месте долгое время"],"Click to remove %1$s as a contact":["Нажми что-бы удалить %1$s как контакт"],"Click to accept the contact request from %1$s":["Кликни, что-бы принять запрос на добавление от %1$s"],"Click to decline the contact request from %1$s":["Кликни, что-бы отклонить запрос на добавление от %1$s"],"Are you sure you want to decline this contact request?":["Вы уверены, что хотите отклонить запрос от этого контакта?"],"Contacts":["Контакты"],"Add a contact":["Добавть контакт"],"Re-sync your contacts":["Синхронизируйте ваши контакты"]}}}')}}]);
 //# sourceMappingURL=ru-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js b/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8d4b28b865d925a1e25df859763ce4fe6b116c4
--- /dev/null
+++ b/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js
@@ -0,0 +1,2 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[171],{537:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","lang":"sv"},"Create your account":[""],"Please enter the XMPP provider to register with:":[""],"Already have a chat account?":[""],"Log in here":[""],"Account Registration:":[""],"Register":[""],"Choose a different provider":[""],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":[""],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Undecryptable OMEMO message":[""],"Sorry, could not determine upload URL.":[""],"Sorry, could not determine file upload URL.":[""],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":[""],"Sorry, could not succesfully upload your file.":[""],"You\'re not allowed to retract your message.":[""],"Sorry, an error occurred while trying to retract your message.":[""],"You\'re not allowed to send a message.":[""],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":[""],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":[""],"Smileys and emotions":[""],"People":[""],"Activities":[""],"Travel":[""],"Objects":[""],"Animals and nature":[""],"Food and drink":[""],"Symbols":[""],"Flags":[""],"Stickers":[""],"This groupchat is not anonymous":[""],"This groupchat now shows unavailable members":[""],"This groupchat does not show unavailable members":[""],"The groupchat configuration has changed":[""],"Groupchat logging is now enabled":[""],"Groupchat logging is now disabled":[""],"This groupchat is now no longer anonymous":[""],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":[""],"Your nickname has been automatically set to %1$s":[""],"Your nickname has been changed to %1$s":[""],"You have been banned from this groupchat":[""],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":[""],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":[""],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your retraction was not delivered because you\'re not present in the groupchat.":[""],"Your message was not delivered because you weren\'t allowed to send it.":[""],"Your message was not delivered because you\'re not present in the groupchat.":[""],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":[""],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":[""],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":[""],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":[""],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Timeout while trying to fetch archived messages.":[""],"An error occurred while querying for archived messages.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":[""],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":[""],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Cancel Editing":[""],"Edit":[""],"Retract":[""],"Message versions":[""],"Retry":[""],"Uploading file:":[""],"%1$s has removed this message":[""],"This message has been edited":[""],"Show more":[""],"Show less":[""],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":[""],"Trusted":[""],"Untrusted":[""],"OMEMO Fingerprints":[""],"No OMEMO-enabled devices found":[""],"Remove as contact":[""],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":[""],"Refresh":[""],"Role":[""],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":[""],"This is a trusted device":[""],"Password":[""],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":[""],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":[""],"Requires an invitation":[""],"Moderated":[""],"Non-anonymous":[""],"Open":[""],"Permanent":[""],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":[""],"Groupchats found":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, you\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":[""],"Features":[""],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":[""],"Participants entering this groupchat need to request permission to write":[""],"Name":[""],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":[""],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":[""],"The conversation has moved. Click below to enter.":[""],"This groupchat no longer exists":[""],"Hide the groupchat topic":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s have entered the groupchat":[""],"%1$s have left the groupchat":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"%1$s have been given voices":[""],"%1$s have been muted":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"Sorry, you\'re not allowed to retract this message":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Show more information about this groupchat":[""],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Please enter the XMPP address of this groupchat to confirm":[""],"name@example.org":[""],"Optional reason for destroying this groupchat":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Click to open this server message":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":[""],"Messages are sent encrypted":[""],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+//# sourceMappingURL=sv-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js.map b/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b6c87d06e6cee936e084dc34790806f2792f2fab
--- /dev/null
+++ b/src/conversejs/locales/sv-LC_MESSAGES-converse-po.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":[],"names":[],"mappings":"","file":"locales/sv-LC_MESSAGES-converse-po.js","sourceRoot":""}
\ No newline at end of file
diff --git a/src/conversejs/locales/th-LC_MESSAGES-converse-po.js b/src/conversejs/locales/th-LC_MESSAGES-converse-po.js
index 0400aa2d80030e9eb89eb4b54e4e7179127d206b..7c1ca290817d8d8d12215c74ef86569070b26df9 100644
--- a/src/conversejs/locales/th-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/th-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[171],{449:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"th"},"Create your account":["สร้างบัญชีผู้ใช้ของคุณ"],"Please enter the XMPP provider to register with:":["โปรดระบุเซิร์ฟเวอร์ XMPP เพื่อลงทะเบียน :"],"Already have a chat account?":["มีบัญชีผู้ใช้แชทแล้ว ?"],"Log in here":["เข้าสู่ระบบที่นี่"],"Account Registration:":["ลงทะเบียนบัญชีผู้ใช้ :"],"Register":["สมัครสมาชิก"],"Choose a different provider":["เลือกผู้ให้บริการรายอื่น"],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["ยกเลิก"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Sorry, could not determine upload URL.":["ขออภัยไม่สามารถระบุ URL การอัปโหลด"],"Sorry, could not determine file upload URL.":["ขออภัยไม่สามารถระบุ URL การอัปโหลดไฟล์"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["ขออภัยอัปโหลดไฟล์ไม่สำเร็จ เซิร์ฟเวอร์ตอบกลับ: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["ขออภัยไม่สามารถอัปโหลดไฟล์ได้"],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":["ขออภัยดูเหมือนว่าเซิร์ฟเวอร์ไม่รองรับการอัพโหลดไฟล์"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["ขนาดไฟล์ของคุณ %1$s เกินขนาดสูงสุด %2$s ที่เซิร์ฟเวอร์อนุญาต"],"Smileys and emotions":["รอยยิ้มและอารมณ์"],"People":["ผู้คน"],"Activities":["กิจกรรม"],"Travel":["ท่องเที่ยว"],"Objects":["วัตถุ"],"Animals and nature":["สัตว์และธรรมชาติ"],"Food and drink":["อาหารและเครื่องดื่ม"],"Symbols":["สัญลักษณ์"],"Flags":["ธง"],"Stickers":["สติกเกอร์"],"This groupchat is not anonymous":["Groupchat นี้ไม่ระบุตัวตน"],"This groupchat now shows unavailable members":["Groupchat นี้แสดงสมาชิกที่ไม่พร้อมใช้งาน"],"This groupchat does not show unavailable members":["Groupchat นี้ไม่แสดงสมาชิกที่ไม่สามารถใช้งานได้"],"The groupchat configuration has changed":["Groupchat มีการเปลี่ยนแปลงการกำหนดค่า"],"Groupchat logging is now enabled":["เปิดใช้งานการบันทึก Groupchat แล้ว"],"Groupchat logging is now disabled":["ปิดใช้งานการบันทึก Groupchat แล้ว"],"This groupchat is now no longer anonymous":["Groupchat นี้ไม่ระบุตัวตนอีกต่อไป"],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":["Groupchat นี้ไม่ระบุชื่อเต็ม"],"A new groupchat has been created":["มีการสร้าง Groupchat ใหม่"],"Your nickname has been automatically set to %1$s":["ชื่อเล่นของคุณถูกตั้งค่าเป็น %1$s โดยอัตโนมัติ"],"Your nickname has been changed to %1$s":["ชื่อเล่นของคุณถูกเปลี่ยนเป็น %1$s"],"You have been banned from this groupchat":["คุณถูกแบนจาก Groupchat นี้"],"You have been kicked from this groupchat":["คุณถูกเตะจาก Groupchat นี้"],"You have been removed from this groupchat because of an affiliation change":["คุณถูกลบออกจาก Groupchat นี้เนื่องจากมีการเปลี่ยนแปลงความร่วมมือ"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["คุณถูกลบออกจาก Groupchat นี้เนื่องจาก Groupchat เปลี่ยนเป็นแบบสมาชิกเท่านั้นและคุณไม่ได้เป็นสมาชิก"],"You have been removed from this groupchat because the service hosting it is being shut down":["คุณถูกลบออกจาก Groupchat นี้เพราะบริการโฮสติ้งกำลังปิดตัวลง"],"Your message was not delivered because you\'re not present in the groupchat.":["ข้อความของคุณไม่ถูกส่งเนื่องจากคุณไม่ได้อยู่ในกลุ่มแชท"],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":["คุณไม่ได้รับอนุญาตให้ลงทะเบียนตัวเองใน Ggroupchat นี้"],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s ถูกแบน"],"%1$s\'s nickname has changed":["เปลี่ยนชื่อเล่นของ %1$s แล้ว"],"%1$s has been kicked out":["%1$s ถูกเตะออกไปแล้ว"],"%1$s has been removed because of an affiliation change":["%1$s ถูกนำออกเนื่องจากมีการเปลี่ยนแปลงการเข้าร่วม"],"%1$s has been removed for not being a member":["%1$s ถูกลบเนื่องจากไม่ได้เป็นสมาชิก"],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["บันทึก"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["ปิด"],"OK":["ตกลง"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["รุ่นของข้อความ"],"Retry":[""],"Uploading file:":["กำลังอัพโหลดไฟล์ :"],"%1$s has removed this message":[""],"This message has been edited":["ข้อความนี้ได้รับการแก้ไข"],"Show more":[""],"No message history available.":["ไม่มีประวัติข้อความ"],"Search results":["ผลการค้นหา"],"Search":["ค้นหา"],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["รูปภาพโปรไฟล์ของผู้ใช้"],"Trusted":["เชื่อถือได้"],"Untrusted":["ไม่น่าเชื่อถือ"],"OMEMO Fingerprints":["ลายนิ้วมือ OMEMO"],"Remove as contact":["ลบจากผู้ติดต่อ"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["ชื่อเล่น"],"Refresh":["รีเฟรช"],"Role":["หน้าที่"],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["เพื่อปรับปรุงประสิทธิภาพ แคชข้อมูลของคุณในเบราว์เซอร์นี้\\nยกเลิกการเลือกช่องนี้หากเป็นคอมพิวเตอร์สาธารณะหรือหากคุณต้องการลบข้อมูลเมื่อคุณออกจากระบบ\\nสิ่งสำคัญคือคุณต้องออกจากระบบอย่างชัดเจน ไม่เช่นนั้นข้อมูลแคชทั้งหมดอาจถูกลบ โปรดทราบว่าเมื่อใช้อุปกรณ์ที่ไม่น่าเชื่อถือการเข้ารหัส OMEMO จะไม่สามารถใช้ได้"],"This is a trusted device":["นี่คืออุปกรณ์ที่เชื่อถือได้"],"Create an account":["สร้างบัญชีผู้ใช้"],"Don\'t have a chat account?":["ยังไม่มีบัญชีผู้ใช้แชท ?"],"Log in":["เข้าสู่ระบบ"],"Disconnected":[""],"Click here to log in anonymously":["คลิกที่นี่เพื่อเข้าสู่ระบบโดยไม่ระบุตัวตน"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This field is required":["ต้องระบุข้อมูลในฟิลด์นี้"],"Join":["เข้าร่วม"],"Enter a new Groupchat":["ป้อนกลุ่ม Groupchat ใหม่"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":["Groupchat ID ไม่ถูกต้อง"],"Invite":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["ซ่อน"],"Requires an invitation":[""],"Moderated":["ดูแล"],"Non-anonymous":[""],"Open":["เปิด"],"Permanent":[""],"Public":["สาธารณะ"],"Semi-anonymous":[""],"Temporary":["ชั่วคราว"],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["ผู้ดูแลเป็นผู้ใช้ที่ได้รับสิทธิพิเศษที่สามารถเปลี่ยนสถานะของผู้ใช้รายอื่น (ยกเว้นผู้ดูแลระบบหรือผู้ที่มีหน้าที่เช่นเดียวกัน)"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["เปลี่ยนหน้าที่"],"New Role":["หน้าที่ใหม่"],"Reason":["เหตุผล"],"Change affiliation":[""],"New affiliation":["เข้าร่วมใหม่"],"Affiliation":["การเข้าร่วม"],"Moderator Tools":["เครื่องมือผู้ดูแล"],"No users with that affiliation found.":[""],"No users with that role found.":["ไม่พบผู้ใช้ที่มีหน้าที่นั้น"],"Type here to filter the search results":[""],"Show users":["แสดงผู้ใช้งาน"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["หัวข้อเรื่อง"],"Topic author":["ผู้เขียนหัวข้อ"],"Groupchat address (JID)":["ที่อยู่ Groupchat (JID)"],"Message archiving":["เก็บข้อความถาวร"],"Messages are archived on the server":["ข้อความถูกเก็บถาวรบนเซิร์ฟเวอร์"],"Description":["คำอธิบาย"],"Features":["คุณสมบัติ"],"This groupchat is not publicly searchable":["Groupchat นี้ไม่สามารถค้นหาได้แบบสาธารณะ"],"This groupchat is restricted to members only":["Groupchat นี้จำกัดเฉพาะสมาชิกเท่านั้น"],"Members only":["เฉพาะสมาชิกเท่านั้น"],"Participants entering this groupchat need to request permission to write":["ผู้เข้าร่วม Groupchat นี้จำเป็นต้องขออนุญาตก่อนสนทนา"],"Name":["ชื่อ"],"This groupchat does not require a password upon entry":["Groupchat นี้ไม่ต้องใช้รหัสผ่านเมื่อเข้า"],"No password required":["ไม่ต้องใช้รหัสผ่าน"],"Not anonymous":["ไม่ระบุตัวตน"],"All other groupchat participants can see your XMPP address":["ผู้เข้าร่วม Groupchat คนอื่น ๆ สามารถดูที่อยู่ XMPP ของคุณ"],"Not moderated":["ไม่ได้รับการดูแล"],"Participants entering this groupchat can write right away":["ผู้เข้าร่วมที่เข้าสู่ Groupchat นี้สามารถสนทนาได้ทันที"],"Online users":["ผู้ใช้งานที่ออนไลน์"],"Anyone can join this groupchat":["ทุกคนสามารถเข้าร่วม Groupchat นี้"],"This groupchat requires a password before entry":["Groupchat นี้ต้องใช้รหัสผ่านก่อนเข้า"],"Password protected":["การป้องกันด้วยพาสเวิร์ด"],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":["Groupchat นี้ยังคงอยู่แม้ว่าจะว่างเปล่า"],"Only moderators can see your XMPP address":["ผู้ดูแลเท่านั้นที่สามารถดูที่อยู่ XMPP ของคุณ"],"This groupchat will disappear once the last person leaves":["Groupchat นี้จะหายไปเมื่อผู้สนทนาคนสุดท้ายออก"],"This groupchat is publicly searchable":["Groupchat นี้สามารถค้นหาได้แบบสาธารณะ"],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["คุณไม่ได้รับอนุญาตให้ส่งข้อความในห้องนี้"],"The conversation has moved. Click below to enter.":["บทสนทนาถูกย้าย คลิกด้านล่างเพื่อเข้าสู่การสนทนา"],"This groupchat no longer exists":["ไม่มี Groupchat นี้อีกต่อไป"],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Configure":[""],"Configure this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":["ช่องทำเครื่องหมายสำหรับการเลือกลายนิ้วมือต่อไปนี้"],"Device without a fingerprint":["อุปกรณ์ที่ไม่มีลายนิ้วมือ"],"Other OMEMO-enabled devices":["อุปกรณ์ที่เปิดใช้งาน OMEMO อื่น ๆ"],"Checkbox to select fingerprints of all other OMEMO devices":["ช่องทำเครื่องหมายเพื่อเลือกลายนิ้วมือของอุปกรณ์ OMEMO อื่น ๆ ทั้งหมด"],"Remove checked devices and close":["ลบอุปกรณ์ที่เลือกและปิด"],"Select all":["เลือกทั้งหมด"],"This device\'s OMEMO fingerprint":["ลายนิ้วมือ OMEMO ของอุปกรณ์นี้"],"Generate new keys and fingerprint":["สร้างคีย์และลายนิ้วมือใหม่"],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":["บันทึกและปิด"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["ข้อความถูกส่งแบบธรรมดา"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[172],{538:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"th"},"Create your account":["สร้างบัญชีผู้ใช้ของคุณ"],"Please enter the XMPP provider to register with:":["โปรดระบุเซิร์ฟเวอร์ XMPP เพื่อลงทะเบียน :"],"Already have a chat account?":["มีบัญชีผู้ใช้แชทแล้ว ?"],"Log in here":["เข้าสู่ระบบที่นี่"],"Account Registration:":["ลงทะเบียนบัญชีผู้ใช้ :"],"Register":["สมัครสมาชิก"],"Choose a different provider":["เลือกผู้ให้บริการรายอื่น"],"Hold tight, we\'re fetching the registration form…":[""],"Cancel":["ยกเลิก"],"The connection has dropped, attempting to reconnect.":[""],"An error occurred while connecting to the chat server.":[""],"Your XMPP address and/or password is incorrect. Please try again.":[""],"Sorry, we could not connect to the XMPP host with domain: %1$s":[""],"The XMPP server did not offer a supported authentication mechanism":[""],"Sorry, could not determine upload URL.":["ขออภัยไม่สามารถระบุ URL การอัปโหลด"],"Sorry, could not determine file upload URL.":["ขออภัยไม่สามารถระบุ URL การอัปโหลดไฟล์"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["ขออภัยอัปโหลดไฟล์ไม่สำเร็จ เซิร์ฟเวอร์ตอบกลับ: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["ขออภัยไม่สามารถอัปโหลดไฟล์ได้"],"Sorry, an error occurred while trying to send your message.":[""],"Sorry, looks like file upload is not supported by your server.":["ขออภัยดูเหมือนว่าเซิร์ฟเวอร์ไม่รองรับการอัพโหลดไฟล์"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["ขนาดไฟล์ของคุณ %1$s เกินขนาดสูงสุด %2$s ที่เซิร์ฟเวอร์อนุญาต"],"Smileys and emotions":["รอยยิ้มและอารมณ์"],"People":["ผู้คน"],"Activities":["กิจกรรม"],"Travel":["ท่องเที่ยว"],"Objects":["วัตถุ"],"Animals and nature":["สัตว์และธรรมชาติ"],"Food and drink":["อาหารและเครื่องดื่ม"],"Symbols":["สัญลักษณ์"],"Flags":["ธง"],"Stickers":["สติกเกอร์"],"This groupchat is not anonymous":["Groupchat นี้ไม่ระบุตัวตน"],"This groupchat now shows unavailable members":["Groupchat นี้แสดงสมาชิกที่ไม่พร้อมใช้งาน"],"This groupchat does not show unavailable members":["Groupchat นี้ไม่แสดงสมาชิกที่ไม่สามารถใช้งานได้"],"The groupchat configuration has changed":["Groupchat มีการเปลี่ยนแปลงการกำหนดค่า"],"Groupchat logging is now enabled":["เปิดใช้งานการบันทึก Groupchat แล้ว"],"Groupchat logging is now disabled":["ปิดใช้งานการบันทึก Groupchat แล้ว"],"This groupchat is now no longer anonymous":["Groupchat นี้ไม่ระบุตัวตนอีกต่อไป"],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":["Groupchat นี้ไม่ระบุชื่อเต็ม"],"A new groupchat has been created":["มีการสร้าง Groupchat ใหม่"],"Your nickname has been automatically set to %1$s":["ชื่อเล่นของคุณถูกตั้งค่าเป็น %1$s โดยอัตโนมัติ"],"Your nickname has been changed to %1$s":["ชื่อเล่นของคุณถูกเปลี่ยนเป็น %1$s"],"You have been banned from this groupchat":["คุณถูกแบนจาก Groupchat นี้"],"You have been kicked from this groupchat":["คุณถูกเตะจาก Groupchat นี้"],"You have been removed from this groupchat because of an affiliation change":["คุณถูกลบออกจาก Groupchat นี้เนื่องจากมีการเปลี่ยนแปลงความร่วมมือ"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["คุณถูกลบออกจาก Groupchat นี้เนื่องจาก Groupchat เปลี่ยนเป็นแบบสมาชิกเท่านั้นและคุณไม่ได้เป็นสมาชิก"],"You have been removed from this groupchat because the service hosting it is being shut down":["คุณถูกลบออกจาก Groupchat นี้เพราะบริการโฮสติ้งกำลังปิดตัวลง"],"Your message was not delivered because you\'re not present in the groupchat.":["ข้อความของคุณไม่ถูกส่งเนื่องจากคุณไม่ได้อยู่ในกลุ่มแชท"],"A timeout happened while while trying to retract your message.":[""],"You\'re not allowed to register yourself in this groupchat.":["คุณไม่ได้รับอนุญาตให้ลงทะเบียนตัวเองใน Ggroupchat นี้"],"You\'re not allowed to register in this groupchat because it\'s members-only.":[""],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"Topic set by %1$s":[""],"Topic cleared by %1$s":[""],"%1$s has been banned":["%1$s ถูกแบน"],"%1$s\'s nickname has changed":["เปลี่ยนชื่อเล่นของ %1$s แล้ว"],"%1$s has been kicked out":["%1$s ถูกเตะออกไปแล้ว"],"%1$s has been removed because of an affiliation change":["%1$s ถูกนำออกเนื่องจากมีการเปลี่ยนแปลงการเข้าร่วม"],"%1$s has been removed for not being a member":["%1$s ถูกลบเนื่องจากไม่ได้เป็นสมาชิก"],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":[""],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":[""],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":[""],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":[""],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":[""],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":[""],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":[""],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":[""],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":[""],"Pending contacts":[""],"Contact requests":[""],"Ungrouped":[""],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":[""],"Unbookmark this groupchat":[""],"Click to open this groupchat":[""],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":[""],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["บันทึก"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":[""],"Unbookmark":[""],"Bookmark":[""],"Close":["ปิด"],"OK":["ตกลง"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["รุ่นของข้อความ"],"Retry":[""],"Uploading file:":["กำลังอัพโหลดไฟล์ :"],"%1$s has removed this message":[""],"This message has been edited":["ข้อความนี้ได้รับการแก้ไข"],"Show more":[""],"No message history available.":["ไม่มีประวัติข้อความ"],"Search results":["ผลการค้นหา"],"Search":["ค้นหา"],"Insert emojis":[""],"Start a call":[""],"Message characters remaining":[""],"Hide participants":[""],"Show participants":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["รูปภาพโปรไฟล์ของผู้ใช้"],"Trusted":["เชื่อถือได้"],"Untrusted":["ไม่น่าเชื่อถือ"],"OMEMO Fingerprints":["ลายนิ้วมือ OMEMO"],"Remove as contact":["ลบจากผู้ติดต่อ"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["ชื่อเล่น"],"Refresh":["รีเฟรช"],"Role":["หน้าที่"],"URL":[""],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["เพื่อปรับปรุงประสิทธิภาพ แคชข้อมูลของคุณในเบราว์เซอร์นี้\\nยกเลิกการเลือกช่องนี้หากเป็นคอมพิวเตอร์สาธารณะหรือหากคุณต้องการลบข้อมูลเมื่อคุณออกจากระบบ\\nสิ่งสำคัญคือคุณต้องออกจากระบบอย่างชัดเจน ไม่เช่นนั้นข้อมูลแคชทั้งหมดอาจถูกลบ โปรดทราบว่าเมื่อใช้อุปกรณ์ที่ไม่น่าเชื่อถือการเข้ารหัส OMEMO จะไม่สามารถใช้ได้"],"This is a trusted device":["นี่คืออุปกรณ์ที่เชื่อถือได้"],"Create an account":["สร้างบัญชีผู้ใช้"],"Don\'t have a chat account?":["ยังไม่มีบัญชีผู้ใช้แชท ?"],"Log in":["เข้าสู่ระบบ"],"Disconnected":[""],"Click here to log in anonymously":["คลิกที่นี่เพื่อเข้าสู่ระบบโดยไม่ระบุตัวตน"],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":["ต้องระบุข้อมูลในฟิลด์นี้"],"Join":["เข้าร่วม"],"Enter a new Groupchat":["ป้อนกลุ่ม Groupchat ใหม่"],"name@conference.example.org":[""],"Groupchat name":[""],"Groupchat address":[""],"Groupchat id is invalid.":["Groupchat ID ไม่ถูกต้อง"],"Invite":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":[""],"Query for Groupchats":[""],"Description:":[""],"Groupchat Address (JID):":[""],"Participants:":[""],"Features:":[""],"Requires authentication":[""],"Hidden":["ซ่อน"],"Requires an invitation":[""],"Moderated":["ดูแล"],"Non-anonymous":[""],"Open":["เปิด"],"Permanent":[""],"Public":["สาธารณะ"],"Semi-anonymous":[""],"Temporary":["ชั่วคราว"],"Unmoderated":[""],"conference.example.org":[""],"No groupchats found":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["ผู้ดูแลเป็นผู้ใช้ที่ได้รับสิทธิพิเศษที่สามารถเปลี่ยนสถานะของผู้ใช้รายอื่น (ยกเว้นผู้ดูแลระบบหรือผู้ที่มีหน้าที่เช่นเดียวกัน)"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":["เปลี่ยนหน้าที่"],"New Role":["หน้าที่ใหม่"],"Reason":["เหตุผล"],"Change affiliation":[""],"New affiliation":["เข้าร่วมใหม่"],"Affiliation":["การเข้าร่วม"],"Moderator Tools":["เครื่องมือผู้ดูแล"],"No users with that affiliation found.":[""],"No users with that role found.":["ไม่พบผู้ใช้ที่มีหน้าที่นั้น"],"Type here to filter the search results":[""],"Show users":["แสดงผู้ใช้งาน"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"Timeout error while trying to set the affiliation":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":[""],"You\'re not allowed to make that change":[""],"Sorry, something went wrong while trying to set the role":[""],"Topic":["หัวข้อเรื่อง"],"Topic author":["ผู้เขียนหัวข้อ"],"Groupchat address (JID)":["ที่อยู่ Groupchat (JID)"],"Message archiving":["เก็บข้อความถาวร"],"Messages are archived on the server":["ข้อความถูกเก็บถาวรบนเซิร์ฟเวอร์"],"Description":["คำอธิบาย"],"Features":["คุณสมบัติ"],"This groupchat is not publicly searchable":["Groupchat นี้ไม่สามารถค้นหาได้แบบสาธารณะ"],"This groupchat is restricted to members only":["Groupchat นี้จำกัดเฉพาะสมาชิกเท่านั้น"],"Members only":["เฉพาะสมาชิกเท่านั้น"],"Participants entering this groupchat need to request permission to write":["ผู้เข้าร่วม Groupchat นี้จำเป็นต้องขออนุญาตก่อนสนทนา"],"Name":["ชื่อ"],"This groupchat does not require a password upon entry":["Groupchat นี้ไม่ต้องใช้รหัสผ่านเมื่อเข้า"],"No password required":["ไม่ต้องใช้รหัสผ่าน"],"Not anonymous":["ไม่ระบุตัวตน"],"All other groupchat participants can see your XMPP address":["ผู้เข้าร่วม Groupchat คนอื่น ๆ สามารถดูที่อยู่ XMPP ของคุณ"],"Not moderated":["ไม่ได้รับการดูแล"],"Participants entering this groupchat can write right away":["ผู้เข้าร่วมที่เข้าสู่ Groupchat นี้สามารถสนทนาได้ทันที"],"Online users":["ผู้ใช้งานที่ออนไลน์"],"Anyone can join this groupchat":["ทุกคนสามารถเข้าร่วม Groupchat นี้"],"This groupchat requires a password before entry":["Groupchat นี้ต้องใช้รหัสผ่านก่อนเข้า"],"Password protected":["การป้องกันด้วยพาสเวิร์ด"],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":["Groupchat นี้ยังคงอยู่แม้ว่าจะว่างเปล่า"],"Only moderators can see your XMPP address":["ผู้ดูแลเท่านั้นที่สามารถดูที่อยู่ XMPP ของคุณ"],"This groupchat will disappear once the last person leaves":["Groupchat นี้จะหายไปเมื่อผู้สนทนาคนสุดท้ายออก"],"This groupchat is publicly searchable":["Groupchat นี้สามารถค้นหาได้แบบสาธารณะ"],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["คุณไม่ได้รับอนุญาตให้ส่งข้อความในห้องนี้"],"The conversation has moved. Click below to enter.":["บทสนทนาถูกย้าย คลิกด้านล่างเพื่อเข้าสู่การสนทนา"],"This groupchat no longer exists":["ไม่มี Groupchat นี้อีกต่อไป"],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":[""],"%1$s has left the groupchat":[""],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":[""],"%1$s and %2$s":[""],"%1$s are typing":[""],"%1$s have stopped typing":[""],"%1$s have gone away":[""],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":[""],"You may optionally include a message, explaining the reason for the retraction.":[""],"Message Retraction":[""],"Optional reason":[""],"A timeout occurred while trying to retract the message":[""],"Sorry, you\'re not allowed to retract this message.":[""],"Configure":[""],"Configure this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"No commands found":[""],"Sorry, an error occurred while looking for commands on that entity.":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":["ช่องทำเครื่องหมายสำหรับการเลือกลายนิ้วมือต่อไปนี้"],"Device without a fingerprint":["อุปกรณ์ที่ไม่มีลายนิ้วมือ"],"Other OMEMO-enabled devices":["อุปกรณ์ที่เปิดใช้งาน OMEMO อื่น ๆ"],"Checkbox to select fingerprints of all other OMEMO devices":["ช่องทำเครื่องหมายเพื่อเลือกลายนิ้วมือของอุปกรณ์ OMEMO อื่น ๆ ทั้งหมด"],"Remove checked devices and close":["ลบอุปกรณ์ที่เลือกและปิด"],"Select all":["เลือกทั้งหมด"],"This device\'s OMEMO fingerprint":["ลายนิ้วมือ OMEMO ของอุปกรณ์นี้"],"Generate new keys and fingerprint":["สร้างคีย์และลายนิ้วมือใหม่"],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":["บันทึกและปิด"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["ข้อความถูกส่งแบบธรรมดา"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":[""],"here":[""],"Sorry, we\'re unable to connect to your chosen provider.":[""],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":[""],"Registered successfully":[""],"The provider rejected your registration attempt. Please check the values you entered for correctness.":[""],"Leave this groupchat":[""],"Click to toggle the list of open groupchats":[""],"Open Groupchats":[""],"Are you sure you want to leave the groupchat %1$s?":[""],"Add":[""],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":[""],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=th-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/tr-LC_MESSAGES-converse-po.js b/src/conversejs/locales/tr-LC_MESSAGES-converse-po.js
index a5cd8d19611ac595a24707321564f7387b0765e5..e299df555c8e4ba50ba5f61d9e799ca4b17e8294 100644
--- a/src/conversejs/locales/tr-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/tr-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[172],{450:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"tr"},"Create your account":["Hesabını oluştur"],"Please enter the XMPP provider to register with:":["Lütfen kayıt yaptırmak için XMPP sağlayıcısını girin:"],"Already have a chat account?":["Zaten bir sohbet hesabınız var mı?"],"Log in here":["Giriş yapın"],"Account Registration:":["Hesap kaydı:"],"Register":["Kayıt ol"],"Choose a different provider":["Farklı bir sağlayıcı seçin"],"Hold tight, we\'re fetching the registration form…":["Sıkı tutun, kayıt formunu alıyoruz…"],"Cancel":["İptal"],"The connection has dropped, attempting to reconnect.":["Bağlantı koptu, yeniden bağlanılmaya çalışılıyor."],"An error occurred while connecting to the chat server.":["Sohbet sunucusuna bağlanılırken bir hata oluştu."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["ÜZgünüz, bu XMPP hostuna bu domainle bağlanamadık :%1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP sunucusu desteklenen bir kimlik doğrulama mekanizması sunmadı"],"Sorry, could not determine upload URL.":["Maalesef, yükleme URL’si belirlenemedi."],"Sorry, could not determine file upload URL.":["Maalesef, dosya yükleme URL’si belirlenemedi."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Maalesef, dosyanızı başarıyla yükleyemedi. Sunucunuzun yanıtı: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Maalesef, dosyanızı başarıyla yükleyemedi."],"Sorry, looks like file upload is not supported by your server.":["Maalesef, dosya yükleme sunucunuz tarafından desteklenmiyor gibi görünüyor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Dosyanızın boyutu, %1$s, sunucunuz tarafından izin verilen ve %2$s olan maksimum değeri aşıyor."],"Smileys and emotions":["Suratlar ve duygular"],"People":["İnsanlar"],"Activities":["Faaliyetler"],"Travel":["Seyahat"],"Objects":["Nesneler"],"Animals and nature":["Hayvanlar ve doğa"],"Food and drink":["Yiyecek ve içecek"],"Symbols":["Semboller"],"Flags":["Bayraklar"],"Stickers":["Çıkartma"],"This groupchat is not anonymous":["Bu grup konuşması anonim değil"],"This groupchat now shows unavailable members":["Bu grup konuşması uygun olmayan üyeleri gösteriyor"],"This groupchat does not show unavailable members":["Bu grup konuşması uygun olmayan üyeleri gösteriyor"],"The groupchat configuration has changed":["Grup sohbeti yapılandırması değiştirildi"],"Groupchat logging is now enabled":["Grup sohbeti günlüğü artık etkin"],"Groupchat logging is now disabled":["Grup Sohbeti günlüğü artık devre dışı"],"This groupchat is now no longer anonymous":["Bu grup sohbeti artık anonim değil"],"This groupchat is now semi-anonymous":["Bu grup sohbeti şimdi yarı anonim"],"This groupchat is now fully-anonymous":["Bu grup sohbeti artık tamamen anonim"],"A new groupchat has been created":["Yeni bir grup sohbeti oluşturuldu"],"Your nickname has been automatically set to %1$s":["Takma adınız otomatik %1$s olarak ayarlandı."],"Your nickname has been changed to %1$s":["Takma adınız %1$s olarak değiştirildi"],"You have been banned from this groupchat":["Bu grup sohbetinden banlandınız"],"You have been kicked from this groupchat":["Bu grup sohbetinden atıldınız"],"You have been removed from this groupchat because of an affiliation change":["Üyelik değişikliği nedeniyle bu grup sohbetinden kaldırıldınız"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Grup sohbeti yalnızca üyelere değiştirildiğinden ve üye olmadığınız için bu grup sohbetinden çıkardınız"],"You have been removed from this groupchat because the service hosting it is being shut down":["Bu grup sohbeti kaldırıldı, çünkü barındırma hizmeti kapatıldı"],"Your message was not delivered because you\'re not present in the groupchat.":["Mesajınız iletilmedi çünkü grup sohbetinde bulunmadınız."],"You\'re not allowed to register yourself in this groupchat.":["Kendinizi bu grup sohbetine kaydettiremezsiniz."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Bu grup sohbetine kaydolmanıza izin verilmiyor çünkü sadece üyeler kayıt olabilirler."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Takma adınız bu grup sohbetine kaydedilemiyor, kaydı desteklemiyor."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Takma adınız bu grup sohbetine kaydedilemiyor, verilen geçersiz veri formu."],"Topic set by %1$s":["Konu %1$s tarafından ayarlandı"],"Topic cleared by %1$s":["Konu %1$s tarafından temizlendi"],"%1$s has been banned":["%1$s banlandı"],"%1$s\'s nickname has changed":["%1$s kullancı adını değiştirdi"],"%1$s has been kicked out":["%1$s atıldı"],"%1$s has been removed because of an affiliation change":["%1$s bir kuruluş değişikliği nedeniyle kaldırıldı"],"%1$s has been removed for not being a member":["%1$s üye olmadığı için kaldırıldı"],"%1$s is no longer an admin of this groupchat":["%1$s artık bu toplu konuşmanın yöneticisi değil"],"%1$s is no longer an owner of this groupchat":["%1$s artık bu toplu konuşmanın sahibi değil"],"%1$s is no longer banned from this groupchat":["%1$s artık bu toplu konuşmada yasaklı değil"],"%1$s is no longer a member of this groupchat":["%1$s artık bu toplu konuşmanın üyesi değil"],"%1$s is now a member of this groupchat":["%1$s şimdi bu grup sohbetine üye"],"%1$s is now an %2$s of this groupchat":["%1$s artık bu toplu konuşmanın %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Seçtiğiniz takma isim saklıdır veya kullanımda. Lütfen farklı bir tane seçin."],"Password incorrect":["Yanlış parola"],"You are not on the member list of this groupchat.":["Bu grup sohbetinin üye listesinde değilsin."],"You have been banned from this groupchat.":["Bu grup sohbetinde yasaklandınız."],"You are not allowed to create new groupchats.":["Yeni grup sohbetleri oluşturmanıza izin verilmiyor."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Takma adınız bu grup sohbetinin politikalarına uymuyor."],"This groupchat does not (yet) exist.":["Bu grup sohbeti (henüz) yok."],"This groupchat has reached its maximum number of participants.":["Bu grup sohbeti maksimum katılımcı sayısına ulaştı."],"Remote server not found":["Uzak sunucu bulunamadı"],"The explanation given is: \\"%1$s\\".":["Verilen açıklama: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s sizi bir grup sohbetine davet etti: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s sizi bir grup sohbetine davet etti: %2$s ve aşağıdaki nedeni bıraktı: \\"%3$s\\""],"Error":["Hata"],"Sorry, something went wrong while trying to save your bookmark.":["Üzgünüm, kaydetmeye çalışırken bir problem çıktı."],"Timeout Error":["Zaman Aşımı Hatası"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Sunucu yer imlerinizi izin verilen süre içinde döndürmedi. Sayfayı tekrar istemek için yeniden yükleyebilirsiniz."],"My contacts":["Kişilerim"],"Pending contacts":["Bekleyen kişiler"],"Contact requests":["İletişim istekleri"],"Ungrouped":["Gruplanmamış"],"Sorry, there was an error while trying to add %1$s as a contact.":["Maalesef, %1$s kişiyi kişi olarak eklemeye çalışırken bir hata oluştu."],"This client does not allow presence subscriptions":["Bu müşteri varlık aboneliklerine izin vermiyor"],"Click to hide these contacts":["Bu kişileri gizlemek için tıklayın"],"Unbookmark this groupchat":["Bu grup sohbetini favorilerden çıkar"],"Click to open this groupchat":["Bu grup sohbetini açmak için tıkla"],"Click to toggle the bookmarks list":["Yer imlerini değiştirmek için tıkla"],"Bookmarks":["Yer imleri"],"Bookmark this groupchat":["Sık kullanılanlara ekle"],"Would you like this groupchat to be automatically joined upon startup?":["Bu grubun açılışta otomatik olarak açılmasını istiyor musun?"],"The name for this bookmark:":["Bir isim gir:"],"What should your nickname for this groupchat be?":["Bu grup için takma adın ne olmalı?"],"Save":["Kaydet"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["%1$s, bunu sık kullanılanlardan kaldırmak istediğine emin misin?"],"Close":["Kapat"],"OK":[""],"Image: ":[""],"Download audio file \\"%1$s\\"":["\\"%1$s\\" ses dosyasını indirin"],"Download file \\"%1$s\\"":["\\"%1$s\\" dosyasını indir"],"Edit":[""],"Retract":[""],"Message versions":["Mesaj versiyonları"],"Retry":[""],"Uploading file:":["Dosya yükleniyor:"],"This message has been edited":["Bu mesaj düzenlendi"],"Show more":["Fazlasını göster"],"No message history available.":[""],"Search results":["Arama Sonuçları"],"Search":["Ara"],"Insert emojis":["Emoji ekle"],"Start a call":["Bir arama başlat"],"Message characters remaining":["Kullanılabilir mesaj karakterleri"],"Choose a file to send":["Gönderilecek dosyayı seç"],"Click to write as a normal (non-spoiler) message":["Normal (spoiler olmayan) mesaj olarak göndermek için tıkla"],"Click to write your message as a spoiler":["Mesajını spoiler olarak yazmak için tıkla"],"The User\'s Profile Image":["Bu Kullanıcının Profil Resmi"],"Trusted":["Güvenilir"],"Untrusted":["Güvenilmez"],"OMEMO Fingerprints":["OMEMO Parmak İzleri"],"Remove as contact":["Kişilerden kaldır"],"XMPP Address":["XMPP Adresi"],"Email":["E-Posta"],"Full Name":["Ad Soyad"],"Nickname":["Rumuz"],"Refresh":["Tazele"],"Role":["rol"],"URL":["Bağlantı Adresi"],"%1$s is typing":["%1$s yazıyor"],"%1$s has stopped typing":["%1$s yazmayı durdurdu"],"%1$s has gone away":["%1$s uzakta"],"Remove messages":["Mesajları sil"],"Write in the third person":["Üçüncü kişi olarak yaz"],"Show this menu":["Menüyü göster"],"Hidden message":["Gizli mesaj"],"Message":["Mesaj"],"Optional hint":["Opsiyonel ipucu"],"You have unread messages":["Okunmamış mesajlarınız var"],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":["Henüz gönderilmemiş bir mesajınız var, devam ederseniz silinecek. Emin misiniz?"],"Are you sure you want to clear the messages from this conversation?":["Bu konuşmadaki mesajları temizlemek istediğinize emin misiniz?"],"%1$s has gone offline":["%1$s çevrimdışı oldu"],"%1$s is busy":["%1$s meşgul"],"%1$s is online":["%1$s çevrimiçi"],"Sorry, something went wrong while trying to refresh":["Üzgünüm, yenilemeye çalışırken bir şeyler ters gitti"],"Are you sure you want to remove this contact?":["Bu kişiyi kaldırmak istediğinize emin misiniz?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Üzgünüz, %1$s kişisini kaldırmaya çalışırken bir hata oluştu."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Performansı arttırmak amacı ile tarayıcınızda veri depoluyoruz. İnternet kafe gibi bilgisayarın genel kullanıldiği bir ortamda iseniz ve çıkış yaptığınıza bilgilerinizin silinmesini istiyorsanız bu kutuyu işaretlemeyin. Düzgün bir şekilde çıkış yapmanız tüm verinin silinmesi için önemlidir. Unutmayın ki, güvenilmeyen bir cihaz kullanırken OMEMO şifrelemesi çalışmayacaktır."],"This is a trusted device":["Bu cihaz güvenilir"],"Create an account":["Hesap oluştur"],"Don\'t have a chat account?":["Sohbet hesabınız yok mu?"],"Log in":["Oturum Aç"],"Disconnected":[""],"Click here to log in anonymously":["Anonim olarak giriş yapmak için tıklayın"],"Username":["Kullancıadı"],"user@domain":["kullanıcı@alanadı"],"Please enter a valid XMPP address":["Lütfen geçerli bir XMPP adresi girin"],"Chat Contacts":["Kişilerinle Sohbet Et"],"Toggle chat":["Sohbeti değiştir"],"Click to restore this chat":["Bu sohbeti geri yükle"],"Minimized":["Küçültüldü"],"This field is required":["Bu alan zorunludur"],"Join":["Katıl"],"Enter a new Groupchat":["Yeni bir gruba katıl"],"name@conference.example.org":["isim@konferans.ornek.org"],"Groupchat name":["Grup Sohbeti adı"],"Groupchat address":["Grup sohbeti adresi"],"Invite":["Davet et"],"Show groupchats":["Toplu konuşmaları göster"],"Server address":["Sunucu adresi"],"Show more information on this groupchat":["Grup hakkında daha fazla bilgi göster"],"Query for Groupchats":["Toplu konuşma sorgusu"],"Description:":["Açıklama:"],"Groupchat Address (JID):":["Toplu konuşma Adresi (JID):"],"Participants:":["Katılımcılar:"],"Features:":["Özellikler:"],"Requires authentication":["Kimlik doğrulama gerektirir"],"Hidden":["Gizli"],"Requires an invitation":["Davet gerekli"],"Moderated":["Modere ediliyor"],"Non-anonymous":["Anonim-olmayan"],"Open":["Açık"],"Permanent":["Kalıcı"],"Public":["Herkese açık"],"Semi-anonymous":["Yarı-anonim"],"Temporary":["Geçici"],"Unmoderated":["Modere edilmiyor"],"conference.example.org":["konferans.ornek.org"],"No groupchats found":["Toplu konuşma bulunamadı"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatörler, diğer kullanıcıların rollerini değiştirebilen ayrıcalıklı kullanıcılardır (yönetici veya sahiplik ilişkileri olanlar hariç)."],"The default role, implies that you can read and write messages.":["Varsayılan rol, mesajları okuyabileceğiniz ve yazabileceğiniz anlamına gelir."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Ziyaretçilerin yönetilen çok kullanıcılı bir sohbette mesaj yazmasına izin verilmez."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Sahip en yüksek üyedir. Sahipler diğer tüm kullanıcıların rollerini ve bağlantılarını değiştirebilir."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Yönetici, en yüksek 2. üyedir. Yöneticiler, sahipler dışındaki diğer tüm kullanıcıların rollerini ve bağlantılarını değiştirebilir."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Bir kullanıcıyı yasaklamak için onlara \\"dışa vurma\\" üyeliği verirsiniz."],"Change role":["Role değiştir"],"New Role":["Yeni rol"],"Reason":["Sebep"],"Change affiliation":["Üyeliği değiştir"],"New affiliation":["Yeni üyelik"],"Affiliation":["Üyelik"],"Moderator Tools":["Moderatör Araçları"],"No users with that affiliation found.":["Bu üyeliğe sahip hiçbir kullanıcı bulunamadı."],"No users with that role found.":["Bu role sahip hiçbir kullanıcı bulunamadı."],"Type here to filter the search results":[""],"Show users":["Kullanıcıları göster"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Roller, çok kullanıcılı bir sohbette belirli beceriler kazandırmak veya reddetmek için kullanıcılara atanır. Bir üyeliğin bir parçası olarak açıkça veya dolaylı olarak atanırlar. Bir üyelikten kaynaklanmayan bir rol, yalnızca kullanıcının oturumu boyunca geçerlidir."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Bir ortaklık, genellikle belirli bir rol ifade eden ve ayrıcalıklar ve sorumluluklar veren uzun ömürlü bir haktır. Örneğin yöneticiler ve mal sahipleri otomatik olarak moderatör rolüne sahip."],"Sorry, something went wrong while trying to set the affiliation":["Maalesef üyeliği ayarlamaya çalışırken bir sorun oluştu"],"Affiliation changed":["Üyelik değişti"],"Role changed":["Rolünüz değişti"],"You\'re not allowed to make that change":["Bu değişikliği yapmanıza izin verilmiyor"],"Sorry, something went wrong while trying to set the role":["Maalesef, rolü belirlemeye çalışırken bir şeyler ters gitti"],"Topic":["Konu"],"Topic author":["Konu sahibi"],"Groupchat address (JID)":["Grup adresi (JID)"],"Message archiving":["Mesaj arşivleme"],"Messages are archived on the server":["Mesajlar sunucuda arşivlenir"],"Description":["Açıklama"],"Features":["Özellikler"],"This groupchat is not publicly searchable":["Bu grup sohbeti herkes tarafından aranamaz"],"This groupchat is restricted to members only":["Bu grup sohbeti yalnızca üyelerle sınırlıdır"],"Members only":["Sadece üyeler"],"Participants entering this groupchat need to request permission to write":["Bu grup sohbetine giren katılımcıların yazmak için izin istemeleri gerekir"],"Name":["Ad"],"This groupchat does not require a password upon entry":["Bu grup sohbeti girişte şifre gerektirmez"],"No password required":["Şifre gerekmiyor"],"Not anonymous":["İsimsiz değil"],"All other groupchat participants can see your XMPP address":["Diğer tüm grup sohbet katılımcıları XMPP adresinizi görebilir"],"Not moderated":["Yönetilmiyor"],"Participants entering this groupchat can write right away":["Bu grup sohbetine katılan katılımcılar hemen yazabilir"],"Online users":["Online Kullanıcılar"],"Anyone can join this groupchat":["Herkes bu grup sohbetine katılabilir"],"This groupchat requires a password before entry":["Bu grup sohbeti giriş yapmadan önce şifre gerektiriyor"],"Password protected":["Şifre korumalı"],"Persistent":["Kalıcı"],"This groupchat persists even if it\'s unoccupied":["Bu grup sohbeti boş olsa bile devam ediyor"],"Only moderators can see your XMPP address":["XMPP adresinizi yalnızca moderatörler görebilir"],"This groupchat will disappear once the last person leaves":["Bu grup sohbeti son kişi ayrıldıktan sonra kaybolacak"],"This groupchat is publicly searchable":["Bu grup sohbeti herkese açık olarak aranabilir"],"Groupchat info for %1$s":["%1$s için toplu konuşma bilgisi"],"You\'re not allowed to send messages in this room":["Bu odada mesaj göndermek için izniniz yok"],"The conversation has moved. Click below to enter.":["Konuşma taşındı. Girmek için aşağıya tıklayın."],"This groupchat no longer exists":["Bu grup sohbeti artık mevcut değil"],"Enter groupchat":["Grup sohbeti girin"],"Please choose your nickname":["Lütfen takma adınızı seçin"],"This groupchat requires a password":["Bu grup sohbeti bir şifre gerektiriyor"],"Password: ":["Parola: "],"Submit":["Gönder"],"This user is a moderator.":["Bu kullanıcı bir moderatör."],"This user can send messages in this groupchat.":["Bu kullanıcı bu grup sohbetinde mesaj gönderebilir."],"This user can NOT send messages in this groupchat.":["Bu kullanıcı bu grup sohbetinde mesaj gönderemez."],"Owner":["Sahip"],"Admin":["Yönetici"],"Member":["Üye"],"Moderator":["Moderatör"],"Visitor":["Ziyaretçi"],"Click to mention %1$s in your message.":["Mesajınızda %1$s’i belirtmek için tıklayın."],"Participants":["Katılımcılar"],"%1$s has entered the groupchat":["%1$s grup sohbetine girdi"],"%1$s has left the groupchat":["%1$s grup sohbetinden ayrıldı"],"%1$s is now a moderator":["%1$s artık bir moderatör"],"%1$s is no longer a moderator":["%1$s artık bir moderatör değil"],"%1$s has been given a voice":["%1$s üyeye ses verildi"],"%1$s has been muted":["%1$s susturuldu"],"Change user\'s affiliation to admin":["Kullanıcının admin üyeliğini değiştir"],"Ban user by changing their affiliation to outcast":["Kullanıcının üyeliğini kovulmuş olarak değiştirerek kullanıcıyı yasakla"],"Clear the chat area":["Sohbeti temizle"],"Change user role to participant":["Katılımcı olarak kullanıcı rolünü değiştirme"],"Remove this groupchat":["Bu grup sohbetini kaldır"],"Kick user from groupchat":["Grup sohbetinden kullanıcıyı at"],"Write in 3rd person":["3. kişiye yaz"],"Grant membership to a user":["Bir kullanıcıya yetki ver"],"Opens up the moderator tools GUI":["Yönetici araçları arayüzünü açar"],"Remove user\'s ability to post messages":["Kullanıcının mesaj gönderme özelliğini kaldır"],"Change your nickname":["Takma adınızı değiştirin"],"Grant moderator role to user":["Kullanıcıya moderatör rolü verme"],"Grant ownership of this groupchat":["Bu grup sohbetinin sahipliğini ver"],"Register your nickname":["Takma adınızı kaydedin"],"Revoke the user\'s current affiliation":["Kullanıcının mevcut üyeliğini iptal et"],"Set groupchat subject":["Grup sohbeti konusunu ayarla"],"Set groupchat subject (alias for /subject)":["Grup sohbeti konusunu ayarla (takma adı /konu )"],"Allow muted user to post messages":["Sessiz kullanıcının mesaj göndermesine izin ver"],"Configure":[""],"Configure this groupchat":["Bu toplu konuşmayı ayarlayın"],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Destroy":[""],"Leave":[""],"Hide the list of participants":["Katılımcı listesini gizle"],"Forbidden: you do not have the necessary role in order to do that.":["Yasak: Bunu yapabilmek için gerekli rolün yok."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Yasak: Bunu yapmak için gerekli üyeliğiniz yok."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Hata: \\"%1$s\\" komutu, kullanıcının takma adı ve isteğe bağlı olarak iki argüman alıyor."],"Error: couldn\'t find a groupchat participant based on your arguments":["Hata: Argümanlarına dayanarak grup sohbeti katılımcısı bulunamadı"],"Error: found multiple groupchat participant based on your arguments":["Hata: Argümanlarınızı temel alarak birden fazla grup sohbeti katılımcısı bulundu"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":["Takma adınız \\"%1$s\\""],"Error: invalid number of arguments":["Hata: geçersiz sayıda argüman"],"This action was done by %1$s.":["Bu işlem %1$s tarafından yapıldı."],"The reason given is: \\"%1$s\\".":["Verilen sebep: \\"%1$s\\"."],"Groupchats":["Grup Sohbetleri"],"Add a new groupchat":["Yeni grup sohbeti ekle"],"Query for groupchats":["Grup sohbetleri için sorgu"],"Announcements":[""],"Notification from %1$s":["%1$s\'dan bildirim"],"%1$s says":["%1$s diyor"],"has gone offline":["çevrimdışı oldu"],"has gone away":["uzağa gitti"],"is busy":["meşgul"],"has come online":["çevrimiçi oldu"],"wants to be your contact":["Kişilerine eklenmek istiyor"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["Hakkında"],"Commands":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Açık Kaynak %2$s XMPP sohbet istemcisi size %3$s getirdi Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s %2$s kendi dilinize çevirin"],"Log out":["Çıkış Yap"],"Click to change your chat status":["Sohbet durumunuzu değiştirmek için tıklayın"],"Show details about this chat client":["Bu sohbet istemcisi hakkındaki ayrıntıları göster"],"Your avatar image":["Avatar resmin"],"Checkbox for selecting the following fingerprint":["Aşağıdaki parmak izini seçmek için onay kutusu"],"Device without a fingerprint":["Parmak izi olmayan cihaz"],"Other OMEMO-enabled devices":["Diğer OMEMO özellikli cihazlar"],"Checkbox to select fingerprints of all other OMEMO devices":["Diğer tüm OMEMO cihazlarının parmak izlerini seçmek için onay kutusu"],"Remove checked devices and close":["Kontrol edilen cihazları çıkarın ve kapatın"],"Select all":["Tümünü seç"],"This device\'s OMEMO fingerprint":["Bu cihazın OMEMO parmak izi"],"Generate new keys and fingerprint":["Yeni anahtarlar ve parmak izi üret"],"Your Profile":["Profilin"],"XMPP Address (JID)":["XMPP Adresi (JID)"],"Save and close":["Kaydet ve kapat"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Birden fazla rolü ayırmak için virgül kullanın. Rolleriniz, sohbet mesajlarınızda adınızın yanında gösterilir."],"OMEMO":[""],"Sorry, an error happened while trying to save your profile data.":["Maalesef, profil verilerinizi kaydetmeye çalışırken bir hata oluştu."],"You can check your browser\'s developer console for any error output.":["Herhangi bir hata çıktısı için tarayıcınızın geliştirici konsolunu kontrol edebilirsiniz."],"Away":["Uzakta"],"Busy":["Meşgul"],"Custom status":["Özel durum"],"Offline":["Çevrimdışı"],"Online":["Çevrim içi"],"Away for long":["Uzun süre"],"Change chat status":["Sohbet durumunu değiştir"],"Personal status message":["Kişisel durum mesajı"],"I am %1$s":["Ben %1$s"],"Are you sure you want to log out?":["Çıkış yapmak istediğinize emin misiniz?"],"online":["Çevrimiçi"],"busy":["Meşgul"],"away for long":["çok uzak"],"away":["uzakta"],"offline":["Çevrimdışı"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s, OMEMO\'yu destekleyen bir müşteriye sahip görünmüyor. Şifreli sohbet artık bu grup sohbetinde mümkün olmayacak."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Uçtan uca şifreleme kullanılamaz çünkü %1$s OMEMO\'yu desteklemeyen bir istemci kullanıyor."],"Messages are being sent in plaintext":["Mesajlar düz metin olarak gönderiliyor"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":["Maalesef, cihazları kaldırmaya çalışırken bir hata oluştu."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Yeni OMEMO anahtarları oluşturmak istediğinize emin misiniz? Bu, eski anahtarlarınızı kaldırır ve önceden şifrelenen tüm mesajlar bu cihazda artık şifresi çözülemez."],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Üzgünüz, şifreli bir mesaj gönderemiyoruz, çünkü %1$s OMEMO bilgilerini görmek için varlıklarına abone olmanızı istiyor"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Maalesef, %1$s için uzak sunucu bulunamadığı için şifreli bir mesaj gönderemiyoruz"],"Unable to send an encrypted message due to an unexpected error.":["Beklenmeyen bir hata nedeniyle şifreli bir mesaj gönderilemiyor."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Üzgünüz, OMEMO şifreli mesaj gönderebileceğimiz cihaz bulunamadı."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Bu, müşterinizin desteklemediği bir OMEMO şifreli mesajdır. https://conversations.im/omemo adresinde daha fazla bilgi bulabilirsiniz"]," e.g. conversejs.org":[" Örnek, conversejs.org"],"Fetch registration form":["Kayıt formunu al"],"Tip: A list of public XMPP providers is available":["İpucu: Genel XMPP sağlayıcılarının bir listesi var"],"here":["burada"],"Sorry, we\'re unable to connect to your chosen provider.":["Üzgünüz, seçtiğiniz sağlayıcıya bağlanamıyoruz."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Maalesef, verilen sağlayıcı bant kaydı hesabı desteklemiyor. Lütfen farklı bir sağlayıcı ile deneyin."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["\\"%1$s\\" ile bağlantı kurulurken bir şeyler ters gitti. Onun var olduğuna emin misin?"],"Now logging you in":["Şimdi oturum açıyorsun"],"Registered successfully":["Başarıyla kayıt olundu"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Sağlayıcı, kayıt girişimini reddetti. Lütfen doğruluk için girdiğiniz değerleri kontrol edin."],"Leave this groupchat":["Gruptan ayrıl"],"Click to toggle the list of open groupchats":["Açık grup sohbeti listesine geçmek için tıklayın"],"Open Groupchats":["Grup Sohbetlerini Aç"],"Are you sure you want to leave the groupchat %1$s?":["%1$s grup sohbetinden ayrılmak istediğinize emin misiniz?"],"Add":["Ekle"],"Add a Contact":["Kişi ekle"],"This contact is busy":["Bu kişi meşgul"],"This contact is online":["Bu kişi çevrimiçi"],"This contact is offline":["Bu kişi çevrimdışı"],"This contact is unavailable":["Bu kişi mevcut değil"],"This contact is away for an extended period":["Bu kişi uzun bir süre uzakta"],"This contact is away":["Bu kişi uzakta"],"Contact name":["Kişi adı"],"Optional nickname":["İsteğe bağlı takma ad"],"Sorry, could not find a contact with that name":["Maalesef, bu isimde bir kişi bulunamadı"],"This contact has already been added":["Bu kişi zaten ekli"],"Filter":["Süzgeç"],"Filter by contact name":["Kişi adına göre süz"],"Filter by group name":["Grup adına göre süz"],"Filter by status":["Duruma göre süz"],"Any":["Herhangi"],"Unread":["Okunmamış"],"Chatty":["Konuşkan"],"Extended Away":["Uzatılmış"],"Click to remove %1$s as a contact":["%1$s kişiyi bir kişi olarak kaldırmak için tıklayın"],"Click to accept the contact request from %1$s":["%1$s adresinden kişi isteğini kabul etmek için tıklayın"],"Click to decline the contact request from %1$s":["%1$s içinden kişi isteğini reddetmek için tıklayın"],"Are you sure you want to decline this contact request?":["Bu kişi isteğini reddetmek istediğinden emin misin?"],"Contacts":["İletişim"],"Add a contact":["Bir kişi ekle"],"Re-sync your contacts":["Kişilerinizi yeniden senkronize edin"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[173],{539:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=2; plural=n != 1;","lang":"tr"},"Create your account":["Hesabını oluştur"],"Please enter the XMPP provider to register with:":["Lütfen kayıt yaptırmak için XMPP sağlayıcısını girin:"],"Already have a chat account?":["Zaten bir sohbet hesabınız var mı?"],"Log in here":["Giriş yapın"],"Account Registration:":["Hesap kaydı:"],"Register":["Kayıt ol"],"Choose a different provider":["Farklı bir sağlayıcı seçin"],"Hold tight, we\'re fetching the registration form…":["Sıkı tutun, kayıt formunu alıyoruz…"],"Cancel":["İptal"],"The connection has dropped, attempting to reconnect.":["Bağlantı koptu, yeniden bağlanılmaya çalışılıyor."],"An error occurred while connecting to the chat server.":["Sohbet sunucusuna bağlanılırken bir hata oluştu."],"Your XMPP address and/or password is incorrect. Please try again.":["XMPP adresiniz ve/veya parolanız yanlış. Lütfen tekrar deneyin."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["ÜZgünüz, bu XMPP hostuna bu domainle bağlanamadık :%1$s"],"The XMPP server did not offer a supported authentication mechanism":["XMPP sunucusu desteklenen bir kimlik doğrulama mekanizması sunmadı"],"Undecryptable OMEMO message":["Şifresi çözülemeyen OMEMO mesajı"],"Sorry, could not determine upload URL.":["Maalesef, yükleme URL’si belirlenemedi."],"Sorry, could not determine file upload URL.":["Maalesef, dosya yükleme URL’si belirlenemedi."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Maalesef, dosyanızı başarıyla yükleyemedi. Sunucunuzun yanıtı: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Maalesef, dosyanızı başarıyla yükleyemedi."],"You\'re not allowed to retract your message.":["Mesajınızı geri çekmenize izin verilmiyor."],"Sorry, an error occurred while trying to retract your message.":["Üzgünüm, mesajınızı geri çekmeye çalışırken bir hata oluştu."],"You\'re not allowed to send a message.":["Mesaj göndermenize izin verilmiyor."],"Sorry, an error occurred while trying to send your message.":["Üzgünüm, mesajınızı göndermeye çalışırken bir hata oluştu."],"Sorry, looks like file upload is not supported by your server.":["Maalesef, dosya yükleme sunucunuz tarafından desteklenmiyor gibi görünüyor."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Dosyanızın boyutu, %1$s, sunucunuz tarafından izin verilen ve %2$s olan maksimum değeri aşıyor."],"Smileys and emotions":["Suratlar ve duygular"],"People":["İnsanlar"],"Activities":["Faaliyetler"],"Travel":["Seyahat"],"Objects":["Nesneler"],"Animals and nature":["Hayvanlar ve doğa"],"Food and drink":["Yiyecek ve içecek"],"Symbols":["Semboller"],"Flags":["Bayraklar"],"Stickers":["Çıkartma"],"This groupchat is not anonymous":["Bu grup konuşması anonim değil"],"This groupchat now shows unavailable members":["Bu grup konuşması uygun olmayan üyeleri gösteriyor"],"This groupchat does not show unavailable members":["Bu grup konuşması uygun olmayan üyeleri gösteriyor"],"The groupchat configuration has changed":["Grup sohbeti yapılandırması değiştirildi"],"Groupchat logging is now enabled":["Grup sohbeti günlüğü artık etkin"],"Groupchat logging is now disabled":["Grup Sohbeti günlüğü artık devre dışı"],"This groupchat is now no longer anonymous":["Bu grup sohbeti artık anonim değil"],"This groupchat is now semi-anonymous":["Bu grup sohbeti şimdi yarı anonim"],"This groupchat is now fully-anonymous":["Bu grup sohbeti artık tamamen anonim"],"A new groupchat has been created":["Yeni bir grup sohbeti oluşturuldu"],"Your nickname has been automatically set to %1$s":["Takma adınız otomatik %1$s olarak ayarlandı"],"Your nickname has been changed to %1$s":["Takma adınız %1$s olarak değiştirildi"],"You have been banned from this groupchat":["Bu grup sohbetinden banlandınız"],"You have exited this groupchat due to a technical problem":["Teknik bir sorun nedeniyle bu grup sohbetinden çıktınız"],"You have been kicked from this groupchat":["Bu grup sohbetinden atıldınız"],"You have been removed from this groupchat because of an affiliation change":["Üyelik değişikliği nedeniyle bu grup sohbetinden kaldırıldınız"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Grup sohbeti yalnızca üyelere değiştirildiğinden ve üye olmadığınız için bu grup sohbetinden çıkardınız"],"You have been removed from this groupchat because the service hosting it is being shut down":["Bu grup sohbeti kaldırıldı, çünkü barındırma hizmeti kapatıldı"],"Your retraction was not delivered because you\'re not present in the groupchat.":["Grup sohbetinde bulunmadığınız için geri çekme talebiniz iletilmedi."],"Your message was not delivered because you weren\'t allowed to send it.":["Gönderme izniniz olmadığı için mesajınız iletilmedi."],"Your message was not delivered because you\'re not present in the groupchat.":["Mesajınız iletilmedi çünkü grup sohbetinde bulunmadınız."],"A timeout happened while while trying to retract your message.":["Mesajınızı geri çekmeye çalışırken bir zaman aşımı meydana geldi."],"You\'re not allowed to register yourself in this groupchat.":["Kendinizi bu grup sohbetine kaydettiremezsiniz."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Bu grup sohbetine kaydolmanıza izin verilmiyor çünkü sadece üyeler kayıt olabilirler."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["Takma adınız bu grup sohbetine kaydedilemiyor, kaydı desteklemiyor."],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["Takma adınız bu grup sohbetine kaydedilemiyor, verilen geçersiz veri formu."],"Topic set by %1$s":["Konu %1$s tarafından ayarlandı"],"Topic cleared by %1$s":["Konu %1$s tarafından temizlendi"],"%1$s has been banned by %2$s":["%1$s, %2$s tarafından banlandı"],"%1$s has been banned":["%1$s banlandı"],"%1$s\'s nickname has changed":["%1$s kullancı adını değiştirdi"],"%1$s has been kicked out by %2$s":["%1$s, %2$s tarafından atıldı"],"%1$s has been kicked out":["%1$s atıldı"],"%1$s has been removed because of an affiliation change":["%1$s bir kuruluş değişikliği nedeniyle kaldırıldı"],"%1$s has been removed for not being a member":["%1$s üye olmadığı için kaldırıldı"],"%1$s is no longer an admin of this groupchat":["%1$s artık bu grup konuşmasının yöneticisi değil"],"%1$s is no longer an owner of this groupchat":["%1$s artık bu toplu konuşmanın sahibi değil"],"%1$s is no longer banned from this groupchat":["%1$s artık bu toplu konuşmada yasaklı değil"],"%1$s is no longer a member of this groupchat":["%1$s artık bu toplu konuşmanın üyesi değil"],"%1$s is now a member of this groupchat":["%1$s şimdi bu grup sohbetine üye"],"%1$s is now an %2$s of this groupchat":["%1$s artık bu toplu konuşmanın %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["Seçtiğiniz takma isim saklıdır veya kullanımda. Lütfen farklı bir tane seçin."],"Password incorrect":["Yanlış parola"],"You are not on the member list of this groupchat.":["Bu grup sohbetinin üye listesinde değilsin."],"You have been banned from this groupchat.":["Bu grup sohbetinde yasaklandınız."],"You are not allowed to create new groupchats.":["Yeni grup sohbetleri oluşturmanıza izin verilmiyor."],"Your nickname doesn\'t conform to this groupchat\'s policies.":["Takma adınız bu grup sohbetinin politikalarına uymuyor."],"This groupchat does not (yet) exist.":["Bu grup sohbeti (henüz) yok."],"This groupchat has reached its maximum number of participants.":["Bu grup sohbeti maksimum katılımcı sayısına ulaştı."],"Remote server not found":["Uzak sunucu bulunamadı"],"The explanation given is: \\"%1$s\\".":["Verilen açıklama: \\"%1$s\\"."],"%1$s has invited you to join a groupchat: %2$s":["%1$s sizi bir grup sohbetine davet etti: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s sizi bir grup sohbetine davet etti: %2$s ve aşağıdaki nedeni bıraktı: \\"%3$s\\""],"Error":["Hata"],"Sorry, something went wrong while trying to save your bookmark.":["Üzgünüm, kaydetmeye çalışırken bir problem çıktı."],"Timeout Error":["Zaman Aşımı Hatası"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["Sunucu yer imlerinizi izin verilen süre içinde döndürmedi. Sayfayı tekrar istemek için yeniden yükleyebilirsiniz."],"Timeout while trying to fetch archived messages.":["Arşivlenmiş mesajları almaya çalışırken zaman aşımı."],"An error occurred while querying for archived messages.":["Arşivlenen mesajlar sorgulanırken bir hata oluştu."],"My contacts":["Kişilerim"],"Pending contacts":["Bekleyen kişiler"],"Contact requests":["İletişim istekleri"],"Ungrouped":["Gruplanmamış"],"New messages":["Yeni mesajlar"],"Sorry, there was an error while trying to add %1$s as a contact.":["Maalesef, %1$s kişiyi kişi olarak eklemeye çalışırken bir hata oluştu."],"This client does not allow presence subscriptions":["Bu müşteri varlık aboneliklerine izin vermiyor"],"Click to hide these contacts":["Bu kişileri gizlemek için tıklayın"],"Unbookmark this groupchat":["Bu grup sohbetini favorilerden çıkar"],"Click to open this groupchat":["Bu grup sohbetini açmak için tıkla"],"Click to toggle the bookmarks list":["Yer imlerini değiştirmek için tıkla"],"Bookmarks":["Yer imleri"],"Bookmark this groupchat":["Sık kullanılanlara ekle"],"Would you like this groupchat to be automatically joined upon startup?":["Bu grubun açılışta otomatik olarak açılmasını istiyor musun?"],"The name for this bookmark:":["Bir isim gir:"],"What should your nickname for this groupchat be?":["Bu grup için takma adın ne olmalı?"],"Save":["Kaydet"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["%1$s, bunu sık kullanılanlardan kaldırmak istediğine emin misin?"],"Unbookmark":["Yer imini kaldır"],"Bookmark":["Yer imi"],"Close":["Kapat"],"OK":["Tamam"],"Image: ":["Resim: "],"Download audio file \\"%1$s\\"":["\\"%1$s\\" ses dosyasını indirin"],"Download image file \\"%1$s\\"":["\\"%1$s\\" resim dosyasını indir"],"Download file \\"%1$s\\"":["\\"%1$s\\" dosyasını indir"],"Cancel Editing":["Düzenlemeyi İptal Et"],"Edit":["Düzenle"],"Retract":["Geri çek"],"Message versions":["Mesaj versiyonları"],"Retry":["Yeniden dene"],"Uploading file:":["Dosya yükleniyor:"],"%1$s has removed this message":["%1$s bu mesajı kaldırdı"],"This message has been edited":["Bu mesaj düzenlendi"],"Show more":["Fazlasını göster"],"Show less":["Daha az göster"],"No message history available.":["Mesaj geçmişi yok."],"Search results":["Arama Sonuçları"],"Search":["Ara"],"Insert emojis":["Emoji ekle"],"Send the message":["Mesajı gönder"],"Start a call":["Bir arama başlat"],"Message characters remaining":["Kullanılabilir mesaj karakterleri"],"Hide participants":["Katılımcıları gizle"],"Show participants":["Katılımcıları göster"],"Choose a file to send":["Gönderilecek dosyayı seç"],"Click to write as a normal (non-spoiler) message":["Normal (spoiler olmayan) mesaj olarak göndermek için tıkla"],"Click to write your message as a spoiler":["Mesajını spoiler olarak yazmak için tıkla"],"The User\'s Profile Image":["Bu Kullanıcının Profil Resmi"],"Trusted":["Güvenilir"],"Untrusted":["Güvenilmez"],"OMEMO Fingerprints":["OMEMO Parmak İzleri"],"No OMEMO-enabled devices found":["OMEMO etkinleştirilmiş cihaz bulunamadı"],"Remove as contact":["Kişilerden kaldır"],"XMPP Address":["XMPP Adresi"],"Email":["E-Posta"],"Full Name":["Ad Soyad"],"Nickname":["Rumuz"],"Refresh":["Tazele"],"Role":["rol"],"URL":["Bağlantı Adresi"],"%1$s is typing":["%1$s yazıyor"],"%1$s has stopped typing":["%1$s yazmayı durdurdu"],"%1$s has gone away":["%1$s uzakta"],"Remove messages":["Mesajları sil"],"Close this chat":["Bu sohbeti kapat"],"Write in the third person":["Üçüncü kişi olarak yaz"],"Show this menu":["Menüyü göster"],"Hidden message":["Gizli mesaj"],"Message":["Mesaj"],"Optional hint":["Opsiyonel ipucu"],"You have unread messages":["Okunmamış mesajlarınız var"],"Details":["Ayrıntılar"],"See more information about this person":["Bu kişi hakkında daha fazla bilgi göster"],"Close and end this conversation":["Bu sohbeti kapat ve sonlandır"],"Sorry, the connection has been lost, and your message could not be sent":["Üzgünüm, bağlantı koptu ve mesajınız gönderilemedi"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["Diğer XMPP/Jabber istemcilerinin (ve sunucularının) henüz geri çekmeleri desteklemeyebileceğini ve bu mesajın her yerden kaldırılamayabileceğini unutmayın."],"Are you sure you want to retract this message?":["Bu mesajı geri çekmek istediğinizden emin misiniz?"],"Confirm":["Onayla"],"You have an unsent message which will be lost if you continue. Are you sure?":["Henüz gönderilmemiş bir mesajınız var, devam ederseniz silinecek. Emin misiniz?"],"Are you sure you want to clear the messages from this conversation?":["Bu konuşmadaki mesajları temizlemek istediğinize emin misiniz?"],"%1$s has gone offline":["%1$s çevrimdışı oldu"],"%1$s is busy":["%1$s meşgul"],"%1$s is online":["%1$s çevrimiçi"],"Sorry, something went wrong while trying to refresh":["Üzgünüm, yenilemeye çalışırken bir şeyler ters gitti"],"Are you sure you want to remove this contact?":["Bu kişiyi kaldırmak istediğinize emin misiniz?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["Üzgünüz, %1$s kişisini kaldırmaya çalışırken bir hata oluştu."],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Performansı arttırmak amacı ile tarayıcınızda veri depoluyoruz. İnternet kafe gibi bilgisayarın genel kullanıldiği bir ortamda iseniz ve çıkış yaptığınıza bilgilerinizin silinmesini istiyorsanız bu kutuyu işaretlemeyin. Düzgün bir şekilde çıkış yapmanız tüm verinin silinmesi için önemlidir. Unutmayın ki, güvenilmeyen bir cihaz kullanırken OMEMO şifrelemesi çalışmayacaktır."],"This is a trusted device":["Bu cihaz güvenilir"],"Password":["Parola"],"Create an account":["Hesap oluştur"],"Don\'t have a chat account?":["Sohbet hesabınız yok mu?"],"Log in":["Oturum Aç"],"Disconnected":["Bağlantı kesildi"],"Click here to log in anonymously":["Anonim olarak giriş yapmak için tıklayın"],"Username":["Kullancıadı"],"user@domain":["kullanıcı@alanadı"],"Please enter a valid XMPP address":["Lütfen geçerli bir XMPP adresi girin"],"Chat Contacts":["Kişilerinle Sohbet Et"],"Toggle chat":["Sohbeti değiştir"],"Click to restore this chat":["Bu sohbeti geri yükle"],"Minimized":["Küçültüldü"],"Minimize":["Küçült"],"Minimize this chat":["Bu sohbeti küçült"],"Minimize this groupchat":["Bu grup sohbetini küçült"],"This user is a moderator.":["Bu kullanıcı bir moderatör."],"This user can send messages in this groupchat.":["Bu kullanıcı bu grup sohbetinde mesaj gönderebilir."],"This user can NOT send messages in this groupchat.":["Bu kullanıcı bu grup sohbetinde mesaj gönderemez."],"Owner":["Sahip"],"Admin":["Yönetici"],"Member":["Üye"],"Moderator":["Moderatör"],"Visitor":["Ziyaretçi"],"Click to mention %1$s in your message.":["Mesajınızda %1$s’i belirtmek için tıklayın."],"Participants":["Katılımcılar"],"This field is required":["Bu alan zorunludur"],"Join":["Katıl"],"Enter a new Groupchat":["Yeni bir gruba katıl"],"name@conference.example.org":["isim@konferans.ornek.org"],"Groupchat name":["Grup Sohbeti adı"],"Groupchat address":["Grup sohbeti adresi"],"Groupchat id is invalid.":["Grup sohbeti kimliği geçersiz."],"Invite":["Davet et"],"Invite someone to this groupchat":["Birisini bu grup sohbetine davet et"],"user@example.org":["kullanici@example.org"],"Optional reason for the invitation":["Davet için isteğe bağlı neden"],"Show groupchats":["Toplu konuşmaları göster"],"Server address":["Sunucu adresi"],"Show more information on this groupchat":["Grup hakkında daha fazla bilgi göster"],"Query for Groupchats":["Toplu konuşma sorgusu"],"Description:":["Açıklama:"],"Groupchat Address (JID):":["Toplu konuşma Adresi (JID):"],"Participants:":["Katılımcılar:"],"Features:":["Özellikler:"],"Requires authentication":["Kimlik doğrulama gerektirir"],"Hidden":["Gizli"],"Requires an invitation":["Davet gerekli"],"Moderated":["Modere ediliyor"],"Non-anonymous":["Anonim-olmayan"],"Open":["Açık"],"Permanent":["Kalıcı"],"Public":["Herkese açık"],"Semi-anonymous":["Yarı-anonim"],"Temporary":["Geçici"],"Unmoderated":["Modere edilmiyor"],"conference.example.org":["konferans.ornek.org"],"Groupchats found":["Grup sohbetleri bulundu"],"No groupchats found":["Toplu konuşma bulunamadı"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["Moderatörler, diğer kullanıcıların rollerini değiştirebilen ayrıcalıklı kullanıcılardır (yönetici veya sahiplik ilişkileri olanlar hariç)."],"The default role, implies that you can read and write messages.":["Varsayılan rol, mesajları okuyabileceğiniz ve yazabileceğiniz anlamına gelir."],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["Ziyaretçilerin yönetilen çok kullanıcılı bir sohbette mesaj yazmasına izin verilmez."],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["Sahip en yüksek üyedir. Sahipler diğer tüm kullanıcıların rollerini ve bağlantılarını değiştirebilir."],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["Yönetici, en yüksek 2. üyedir. Yöneticiler, sahipler dışındaki diğer tüm kullanıcıların rollerini ve bağlantılarını değiştirebilir."],"To ban a user, you give them the affiliation of \\"outcast\\".":["Bir kullanıcıyı yasaklamak için onlara \\"dışa vurma\\" üyeliği verirsiniz."],"Change role":["Role değiştir"],"New Role":["Yeni rol"],"Reason":["Sebep"],"Change affiliation":["Üyeliği değiştir"],"New affiliation":["Yeni üyelik"],"Affiliation":["Üyelik"],"Moderator Tools":["Moderatör Araçları"],"No users with that affiliation found.":["Bu üyeliğe sahip hiçbir kullanıcı bulunamadı."],"No users with that role found.":["Bu role sahip hiçbir kullanıcı bulunamadı."],"Type here to filter the search results":["Arama sonuçlarını filtrelemek için buraya yazın"],"Show users":["Kullanıcıları göster"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["Roller, çok kullanıcılı bir sohbette belirli beceriler kazandırmak veya reddetmek için kullanıcılara atanır. Bir üyeliğin bir parçası olarak açıkça veya dolaylı olarak atanırlar. Bir üyelikten kaynaklanmayan bir rol, yalnızca kullanıcının oturumu boyunca geçerlidir."],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["Bir ortaklık, genellikle belirli bir rol ifade eden ve ayrıcalıklar ve sorumluluklar veren uzun ömürlü bir haktır. Örneğin yöneticiler ve mal sahipleri otomatik olarak moderatör rolüne sahip."],"Timeout error while trying to set the affiliation":["Üyeliği ayarlamaya çalışırken zaman aşımı hatası"],"Sorry, you\'re not allowed to make that change":["Üzgünüm, bu değişikliği yapmanıza izin verilmiyor"],"Sorry, something went wrong while trying to set the affiliation":["Maalesef üyeliği ayarlamaya çalışırken bir sorun oluştu"],"Affiliation changed":["Üyelik değişti"],"Role changed":["Rolünüz değişti"],"You\'re not allowed to make that change":["Bu değişikliği yapmanıza izin verilmiyor"],"Sorry, something went wrong while trying to set the role":["Maalesef, rolü belirlemeye çalışırken bir şeyler ters gitti"],"Topic":["Konu"],"Topic author":["Konu sahibi"],"Groupchat address (JID)":["Grup adresi (JID)"],"Message archiving":["Mesaj arşivleme"],"Messages are archived on the server":["Mesajlar sunucuda arşivlenir"],"Description":["Açıklama"],"Features":["Özellikler"],"This groupchat is not publicly searchable":["Bu grup sohbeti herkes tarafından aranamaz"],"This groupchat is restricted to members only":["Bu grup sohbeti yalnızca üyelerle sınırlıdır"],"Members only":["Sadece üyeler"],"Participants entering this groupchat need to request permission to write":["Bu grup sohbetine giren katılımcıların yazmak için izin istemeleri gerekir"],"Name":["Ad"],"This groupchat does not require a password upon entry":["Bu grup sohbeti girişte şifre gerektirmez"],"No password required":["Şifre gerekmiyor"],"Not anonymous":["İsimsiz değil"],"All other groupchat participants can see your XMPP address":["Diğer tüm grup sohbet katılımcıları XMPP adresinizi görebilir"],"Not moderated":["Yönetilmiyor"],"Participants entering this groupchat can write right away":["Bu grup sohbetine katılan katılımcılar hemen yazabilir"],"Online users":["Online Kullanıcılar"],"Anyone can join this groupchat":["Herkes bu grup sohbetine katılabilir"],"This groupchat requires a password before entry":["Bu grup sohbeti giriş yapmadan önce şifre gerektiriyor"],"Password protected":["Şifre korumalı"],"Persistent":["Kalıcı"],"This groupchat persists even if it\'s unoccupied":["Bu grup sohbeti boş olsa bile devam ediyor"],"Only moderators can see your XMPP address":["XMPP adresinizi yalnızca moderatörler görebilir"],"This groupchat will disappear once the last person leaves":["Bu grup sohbeti son kişi ayrıldıktan sonra kaybolacak"],"This groupchat is publicly searchable":["Bu grup sohbeti herkese açık olarak aranabilir"],"Groupchat info for %1$s":["%1$s için toplu konuşma bilgisi"],"You\'re not allowed to send messages in this room":["Bu odada mesaj göndermek için izniniz yok"],"The conversation has moved. Click below to enter.":["Konuşma taşındı. Girmek için aşağıya tıklayın."],"This groupchat no longer exists":["Bu grup sohbeti artık mevcut değil"],"Hide the groupchat topic":["Grup sohbeti konusunu gizle"],"This groupchat is bookmarked":["Bu grup sohbeti yer imlerine eklendi"],"Enter groupchat":["Grup sohbeti girin"],"Choose a nickname to enter":["Girmek için bir takma ad seç"],"Please choose your nickname":["Lütfen takma adınızı seçin"],"This groupchat requires a password":["Bu grup sohbeti bir şifre gerektiriyor"],"Password: ":["Parola: "],"Submit":["Gönder"],"%1$s has entered the groupchat":["%1$s grup sohbetine girdi"],"%1$s has left the groupchat":["%1$s grup sohbetinden ayrıldı"],"%1$s is now a moderator":["%1$s artık bir moderatör"],"%1$s is no longer a moderator":["%1$s artık bir moderatör değil"],"%1$s has been given a voice":["%1$s üyeye ses verildi"],"%1$s has been muted":["%1$s susturuldu"],"%1$s and %2$s":["%1$s ve %2$s"],"%1$s are typing":["%1$s yazıyor"],"%1$s have stopped typing":["%1$s yazmayı durdurdu"],"%1$s have gone away":["%1$s uzakta"],"%1$s have entered the groupchat":["%1$s grup sohbetine girdi"],"%1$s have left the groupchat":["%1$s grup sohbetinden ayrıldı"],"%1$s are now moderators":["%1$s artık moderatör"],"%1$s are no longer moderators":["%1$s artık moderatör değil"],"%1$s have been given voices":["%1$s ses verildi"],"%1$s have been muted":["%1$s susturuldu"],"Change user\'s affiliation to admin":["Kullanıcının admin üyeliğini değiştir"],"Ban user by changing their affiliation to outcast":["Kullanıcının üyeliğini kovulmuş olarak değiştirerek kullanıcıyı yasakla"],"Clear the chat area":["Sohbeti temizle"],"Close this groupchat":["Bu grup sohbetini kapat"],"Change user role to participant":["Katılımcı olarak kullanıcı rolünü değiştirme"],"Remove this groupchat":["Bu grup sohbetini kaldır"],"Kick user from groupchat":["Grup sohbetinden kullanıcıyı at"],"Write in 3rd person":["3. kişiye yaz"],"Grant membership to a user":["Bir kullanıcıya yetki ver"],"Opens up the moderator tools GUI":["Yönetici araçları arayüzünü açar"],"Remove user\'s ability to post messages":["Kullanıcının mesaj gönderme özelliğini kaldır"],"Change your nickname":["Takma adınızı değiştirin"],"Grant moderator role to user":["Kullanıcıya moderatör rolü verme"],"Grant ownership of this groupchat":["Bu grup sohbetinin sahipliğini ver"],"Register your nickname":["Takma adınızı kaydedin"],"Revoke the user\'s current affiliation":["Kullanıcının mevcut üyeliğini iptal et"],"Set groupchat subject":["Grup sohbeti konusunu ayarla"],"Set groupchat subject (alias for /subject)":["Grup sohbeti konusunu ayarla (takma adı /konu )"],"Allow muted user to post messages":["Sessiz kullanıcının mesaj göndermesine izin ver"],"You are about to retract this message.":["Bu mesajı geri çekmek üzeresiniz."],"You may optionally include a message, explaining the reason for the retraction.":["İsteğe bağlı olarak, geri çekme nedenini açıklayan bir mesaj ekleyebilirsiniz."],"Message Retraction":["Mesaj Geri Çekme"],"Optional reason":["İsteğe bağlı neden"],"Sorry, you\'re not allowed to retract this message":["Üzgünüm, bu mesajı geri çekmenize izin verilmiyor"],"A timeout occurred while trying to retract the message":["Mesajı geri çekmeye çalışırken bir zaman aşımı meydana geldi"],"Sorry, you\'re not allowed to retract this message.":["Üzgünüm, bu mesajı geri çekmenize izin verilmiyor."],"Show more information about this groupchat":["Bu grup sohbeti hakkında daha fazla bilgi göster"],"Configure":["Yapılandır"],"Configure this groupchat":["Bu toplu konuşmayı ayarlayın"],"Invite someone to join this groupchat":["Birisini bu grup sohbetine katılmaya davet et"],"Show topic":["Konuyu göster"],"Hide topic":["Konuyu gizle"],"Show the topic message in the heading":["Başlıkta konu mesajını göster"],"Hide the topic in the heading":["Başlıkta konuyu gizle"],"Moderate":["Yönet"],"Moderate this groupchat":["Bu grup sohbetini yönet"],"Destroy":["Yok et"],"Leave":["Ayrıl"],"Leave and close this groupchat":["Ayrıl ve bu grup sohbetini kapat"],"Are you sure you want to leave this groupchat?":["Bu grup sohbetinden ayrılmak istediğinize emin misiniz?"],"Hide the list of participants":["Katılımcı listesini gizle"],"Forbidden: you do not have the necessary role in order to do that.":["Yasak: Bunu yapabilmek için gerekli rolün yok."],"Forbidden: you do not have the necessary affiliation in order to do that.":["Yasak: Bunu yapmak için gerekli üyeliğiniz yok."],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["Hata: \\"%1$s\\" komutu, kullanıcının takma adı ve isteğe bağlı olarak iki argüman alıyor."],"Error: couldn\'t find a groupchat participant based on your arguments":["Hata: Argümanlarına dayanarak grup sohbeti katılımcısı bulunamadı"],"Error: found multiple groupchat participant based on your arguments":["Hata: Argümanlarınızı temel alarak birden fazla grup sohbeti katılımcısı bulundu"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["Bu takma ada sahip bir katılımcı bulunamadı. Grup sohbetinden ayrılmış olabilirler."],"Sorry, an error happened while running the command.":["Üzgünüm, komut yürütülürken bir hata oluştu."],"Check your browser\'s developer console for details.":["Ayrıntılar için tarayıcınızın geliştirici konsoluna bakın."],"Are you sure you want to destroy this groupchat?":["Bu grup sohbetini yok etmek istediğinizden emin misiniz?"],"Please enter the XMPP address of this groupchat to confirm":["Lütfen onaylamak için bu grup sohbetinin XMPP adresini girin"],"name@example.org":["name@example.org"],"Optional reason for destroying this groupchat":["Bu grup sohbetini yok etmek için isteğe bağlı neden"],"Optional XMPP address for a new groupchat that replaces this one":["Bunun yerini alan yeni bir grup sohbeti için isteğe bağlı XMPP adresi"],"replacement@example.org":["degistirme@example.org"],"Your nickname is \\"%1$s\\"":["Takma adınız \\"%1$s\\""],"Error: invalid number of arguments":["Hata: geçersiz sayıda argüman"],"This action was done by %1$s.":["Bu işlem %1$s tarafından yapıldı."],"The reason given is: \\"%1$s\\".":["Verilen sebep: \\"%1$s\\"."],"Groupchats":["Grup Sohbetleri"],"Add a new groupchat":["Yeni grup sohbeti ekle"],"Query for groupchats":["Grup sohbetleri için sorgu"],"Sorry, an error occurred while trying to submit the config form.":["Üzgünüm, yapılandırma formunu göndermeye çalışırken bir hata oluştu."],"Close these announcements":["Bu duyuruları kapat"],"Announcements":["Duyurular"],"Click to open this server message":["Bu sunucu mesajını açmak için tıkla"],"Notification from %1$s":["%1$s\'dan bildirim"],"%1$s says":["%1$s diyor"],"Encrypted message received":["Şifreli mesaj alındı"],"has gone offline":["çevrimdışı oldu"],"has gone away":["uzağa gitti"],"is busy":["meşgul"],"has come online":["çevrimiçi oldu"],"wants to be your contact":["Kişilerine eklenmek istiyor"],"Hide":["Gizle"],"Execute":["Yürüt"],"On which entity do you want to run commands?":["Komutları hangi varlık üzerinde yürütmek istiyorsunuz?"],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":["Belirli XMPP hizmetleri ve varlıkları, ayrıcalıklı kullanıcıların üzerlerinde ad-hoc komutlar yürütmesine izin verir."],"Commands found":["Komutlar bulundu"],"List available commands":["Kullanılabilir komutları listele"],"No commands found":["Komut bulunamadı"],"Sorry, an error occurred while looking for commands on that entity.":["Üzgünüm, o varlık üzerinde komut aranırken bir hata oluştu."],"The specified entity doesn\'t support ad-hoc commands":["Belirtilen varlık ad-hoc komutları desteklemiyor"],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["Üzgünüm, komutu yürütmeye çalışırken bir hata oluştu. Ayrıntılar için geliştirici konsoluna bakın"],"About":["Hakkında"],"Commands":["Komutlar"],"Settings":["Ayarlar"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["%1$s Açık Kaynak %2$s XMPP sohbet istemcisi size %3$s getirdi Opkode %2$s"],"%1$s Translate %2$s it into your own language":["%1$s %2$s kendi dilinize çevirin"],"Log out":["Çıkış Yap"],"Click to change your chat status":["Sohbet durumunuzu değiştirmek için tıklayın"],"Show details about this chat client":["Bu sohbet istemcisi hakkındaki ayrıntıları göster"],"Your avatar image":["Avatar resmin"],"Checkbox for selecting the following fingerprint":["Aşağıdaki parmak izini seçmek için onay kutusu"],"Device without a fingerprint":["Parmak izi olmayan cihaz"],"Checkbox for selecting the following device":["Sonraki cihazı seçmek için onay kutusu"],"Other OMEMO-enabled devices":["Diğer OMEMO özellikli cihazlar"],"Checkbox to select fingerprints of all other OMEMO devices":["Diğer tüm OMEMO cihazlarının parmak izlerini seçmek için onay kutusu"],"Remove checked devices and close":["Kontrol edilen cihazları çıkarın ve kapatın"],"Select all":["Tümünü seç"],"This device\'s OMEMO fingerprint":["Bu cihazın OMEMO parmak izi"],"Generate new keys and fingerprint":["Yeni anahtarlar ve parmak izi üret"],"Your Profile":["Profilin"],"XMPP Address (JID)":["XMPP Adresi (JID)"],"Save and close":["Kaydet ve kapat"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["Birden fazla rolü ayırmak için virgül kullanın. Rolleriniz, sohbet mesajlarınızda adınızın yanında gösterilir."],"OMEMO":["OMEMO"],"Profile":["Profil"],"Sorry, an error happened while trying to save your profile data.":["Maalesef, profil verilerinizi kaydetmeye çalışırken bir hata oluştu."],"You can check your browser\'s developer console for any error output.":["Herhangi bir hata çıktısı için tarayıcınızın geliştirici konsolunu kontrol edebilirsiniz."],"Away":["Uzakta"],"Busy":["Meşgul"],"Custom status":["Özel durum"],"Offline":["Çevrimdışı"],"Online":["Çevrim içi"],"Away for long":["Uzun süre"],"Change chat status":["Sohbet durumunu değiştir"],"Personal status message":["Kişisel durum mesajı"],"I am %1$s":["Ben %1$s"],"Are you sure you want to log out?":["Çıkış yapmak istediğinize emin misiniz?"],"online":["Çevrimiçi"],"busy":["Meşgul"],"away for long":["çok uzak"],"away":["uzakta"],"offline":["Çevrimdışı"],"Sorry, could not decrypt a received OMEMO message due to an error.":["Üzgünüm, bir hata nedeniyle alınan OMEMO mesajının şifresi çözülemedi."],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["Üzgünüm, o kullanıcı için JID\'ye sahip olmadığımız için alınan OMEMO\'nun şifresi çözülemedi."],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s, OMEMO\'yu destekleyen bir müşteriye sahip görünmüyor. Şifreli sohbet artık bu grup sohbetinde mümkün olmayacak."],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["Bu grup sohbetinde uçtan uca şifreleme kullanılamaz, grup sohbetinde bir miktar anonimlik var veya katılımcıların tümü OMEMO\'yu desteklemiyor."],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["Uçtan uca şifreleme kullanılamaz çünkü %1$s OMEMO\'yu desteklemeyen bir istemci kullanıyor."],"Messages are being sent in plaintext":["Mesajlar düz metin olarak gönderiliyor"],"Messages are sent encrypted":["Mesajlar şifreli olarak gönderiliyor"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["OMEMO şifreli mesajları desteklemek için bu grup sohbetinin üyelere özel olması ve anonim olmaması gerekmektedir"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["Üzgünüz, şifreli bir mesaj gönderemiyoruz, çünkü %1$s OMEMO bilgilerini görmek için varlıklarına abone olmanızı istiyor"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["Maalesef, %1$s için uzak sunucu bulunamadığı için şifreli bir mesaj gönderemiyoruz"],"Unable to send an encrypted message due to an unexpected error.":["Beklenmeyen bir hata nedeniyle şifreli bir mesaj gönderilemiyor."],"Sorry, an error occurred while trying to remove the devices.":["Maalesef, cihazları kaldırmaya çalışırken bir hata oluştu."],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["Yeni OMEMO anahtarları oluşturmak istediğinize emin misiniz? Bu, eski anahtarlarınızı kaldırır ve önceden şifrelenen tüm mesajlar bu cihazda artık şifresi çözülemez."],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["Üzgünüz, OMEMO şifreli mesaj gönderebileceğimiz cihaz bulunamadı."],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["Bu, müşterinizin desteklemediği bir OMEMO şifreli mesajdır. https://conversations.im/omemo adresinde daha fazla bilgi bulabilirsiniz"]," e.g. conversejs.org":[" Örnek, conversejs.org"],"Fetch registration form":["Kayıt formunu al"],"Tip: A list of public XMPP providers is available":["İpucu: Genel XMPP sağlayıcılarının bir listesi var"],"here":["burada"],"Sorry, we\'re unable to connect to your chosen provider.":["Üzgünüz, seçtiğiniz sağlayıcıya bağlanamıyoruz."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Maalesef, verilen sağlayıcı bant kaydı hesabı desteklemiyor. Lütfen farklı bir sağlayıcı ile deneyin."],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["\\"%1$s\\" ile bağlantı kurulurken bir şeyler ters gitti. Onun var olduğuna emin misin?"],"Now logging you in":["Şimdi oturum açıyorsun"],"Registered successfully":["Başarıyla kayıt olundu"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Sağlayıcı, kayıt girişimini reddetti. Lütfen doğruluk için girdiğiniz değerleri kontrol edin."],"Leave this groupchat":["Gruptan ayrıl"],"Click to toggle the list of open groupchats":["Açık grup sohbeti listesine geçmek için tıklayın"],"Open Groupchats":["Grup Sohbetlerini Aç"],"Are you sure you want to leave the groupchat %1$s?":["%1$s grup sohbetinden ayrılmak istediğinize emin misiniz?"],"Add":["Ekle"],"Add a Contact":["Kişi ekle"],"This contact is busy":["Bu kişi meşgul"],"This contact is online":["Bu kişi çevrimiçi"],"This contact is offline":["Bu kişi çevrimdışı"],"This contact is unavailable":["Bu kişi mevcut değil"],"This contact is away for an extended period":["Bu kişi uzun bir süre uzakta"],"This contact is away":["Bu kişi uzakta"],"Contact name":["Kişi adı"],"Optional nickname":["İsteğe bağlı takma ad"],"Sorry, could not find a contact with that name":["Maalesef, bu isimde bir kişi bulunamadı"],"This contact has already been added":["Bu kişi zaten ekli"],"Filter":["Süzgeç"],"Filter by contact name":["Kişi adına göre süz"],"Filter by group name":["Grup adına göre süz"],"Filter by status":["Duruma göre süz"],"Any":["Herhangi"],"Unread":["Okunmamış"],"Chatty":["Konuşkan"],"Extended Away":["Uzatılmış"],"Click to remove %1$s as a contact":["%1$s kişiyi bir kişi olarak kaldırmak için tıklayın"],"Click to accept the contact request from %1$s":["%1$s adresinden kişi isteğini kabul etmek için tıklayın"],"Click to decline the contact request from %1$s":["%1$s içinden kişi isteğini reddetmek için tıklayın"],"Click to chat with %1$s (XMPP address: %2$s)":["%1$s ile sohbet etmek için tıklayın (XMPP adresi: %2$s)"],"Are you sure you want to decline this contact request?":["Bu kişi isteğini reddetmek istediğinden emin misin?"],"Contacts":["İletişim"],"Add a contact":["Bir kişi ekle"],"Re-sync your contacts":["Kişilerinizi yeniden senkronize edin"]}}}')}}]);
 //# sourceMappingURL=tr-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/uk-LC_MESSAGES-converse-po.js b/src/conversejs/locales/uk-LC_MESSAGES-converse-po.js
index 4ac4c52ce2656a8693432e5c241a45df040920a4..abe81de68a6e684d1fcf51606a5c4729869fd0fa 100644
--- a/src/conversejs/locales/uk-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/uk-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[173],{451:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"uk"},"Create your account":["Створити свій обліковий запис"],"Please enter the XMPP provider to register with:":["Введіть постачальника XMPP, щоб зареєструватися:"],"Already have a chat account?":["У вас вже є обліківка бесіди?"],"Log in here":["Увійти тут"],"Account Registration:":["Реєстрація облікового запису:"],"Register":["Реєстрація"],"Choose a different provider":["Виберіть іншого провайдера"],"Hold tight, we\'re fetching the registration form…":["Хвильку, ми отримуємо реєстраційну форму…"],"Cancel":["Відміна"],"The connection has dropped, attempting to reconnect.":["З\'єднання втрачено, спроба відновити зв\'язок."],"An error occurred while connecting to the chat server.":["Під час підключення до сервера чату сталася помилка."],"Your XMPP address and/or password is incorrect. Please try again.":["Ваша XMPP-адреса та/або пароль неправильні. Будь ласка спробуйте ще раз."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["На жаль, не вдалося підключитися до хоста XMPP з доменом: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Сервер XMPP не пропонує підтримуваний механізм автентифікації"],"Sorry, could not determine upload URL.":["На жаль, не вдалося визначити URL-адресу для завантаження."],"Sorry, could not determine file upload URL.":["На жаль, не вдалося визначити URL-адресу для завантаження файлу."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["На жаль, не вдалося завантажити файл. Відповідь вашого сервера: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["На жаль, не вдалося завантажити файл."],"Sorry, looks like file upload is not supported by your server.":["На жаль, схоже, що завантаження файлів не підтримується вашим сервером."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Розмір вашого файлу, %1$s, перевищує щонайбільш дозволений вашим сервером, який становить %2$s."],"Smileys and emotions":["Усмішки та почуття"],"People":["Люди"],"Activities":["Діяльності"],"Travel":["Подорожі"],"Objects":["Речі"],"Animals and nature":["Тварини та природа"],"Food and drink":["Їжа та напої"],"Symbols":["Знаки"],"Flags":["Прапори"],"Stickers":["Наліпки"],"This groupchat is not anonymous":["Ця бесіда не таємна"],"This groupchat now shows unavailable members":["Тепер бесіда показує недоступних членів"],"This groupchat does not show unavailable members":["Ця кімната не показує недоступних членів"],"The groupchat configuration has changed":["Змінено конфігурацію кімнати"],"Groupchat logging is now enabled":["Часопис кімнати тепер увімкнено"],"Groupchat logging is now disabled":["Часопис кімнати тепер вимкнено"],"This groupchat is now no longer anonymous":["Ця кімната тепер не таємна"],"This groupchat is now semi-anonymous":["Ця кімната тепер напівтаємна"],"This groupchat is now fully-anonymous":["Ця кімната тепер повністю таємна"],"A new groupchat has been created":["Створено нову кімнату"],"Your nickname has been automatically set to %1$s":["Ваше прізвисько було самочинно змінене на: %1$s"],"Your nickname has been changed to %1$s":["Ваше прізвисько було змінене на: %1$s"],"You have been banned from this groupchat":["Вам заблокували доступ до цієї кімнати"],"You have been kicked from this groupchat":["Вас викинули з цієї кімнати"],"You have been removed from this groupchat because of an affiliation change":["Вас видалено з кімнати у зв\'язку зі змінами власності кімнати"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Вас видалено з цієї кімнати, оскільки вона тепер вимагає членства, а Ви ним не є її членом"],"Your message was not delivered because you weren\'t allowed to send it.":["Ваше повідомлення не було доставлено, оскільки вам не дозволили його надіслати."],"Your message was not delivered because you\'re not present in the groupchat.":["Ваше повідомлення не було доставлено, оскільки ви не присутні в гуртовій бесіді."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Remote server not found":[""],"Error":["Помилка"],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Мої контакти"],"Pending contacts":["Контакти в очікуванні"],"Contact requests":["Запити контакту"],"Ungrouped":["Негруповані"],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Клацніть, щоб приховати ці контакти"],"Click to toggle the bookmarks list":["Натисніть, щоб переключити список закладок"],"Bookmarks":["Закладки"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["Зберегти"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ви впевнені, що хочете видалити закладку \\"%1$s\\"?"],"Close":["Закрити"],"OK":["ОК"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Видозміни повідомлення"],"Retry":[""],"Uploading file:":["Завантажуваний файл:"],"This message has been edited":["Це повідомлення було відредаговано"],"No message history available.":["Немає дієпису повідомлень."],"Search results":["Підсумки пошуку"],"Search":["Пошук"],"Insert emojis":[""],"Send the message":["Надіслати повідомлення"],"Start a call":["Почати виклик"],"Message characters remaining":[""],"Choose a file to send":[""],"The User\'s Profile Image":["Зображення користувача"],"Trusted":["Надійний"],"Untrusted":["Ненадійний"],"OMEMO Fingerprints":["Відбитки OMEMO"],"No OMEMO-enabled devices found":[""],"Remove as contact":["Видалити з контактів"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Прізвисько"],"Refresh":["Оновити"],"Role":[""],"URL":[""],"Remove messages":["Видалити повідомлення"],"Write in the third person":["Писати від третьої особи"],"Show this menu":["Показати це меню"],"Message":["Повідомлення"],"Optional hint":[""],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to remove this contact?":["Ви впевнені, що хочете видалити цей контакт?"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Для підвищення плідності ми кешуємо Ваші дані в цьому переглядачі. Зніміть цей прапорець, якщо це загальнодоступний комп\'ютер або якщо Ви хочете, щоб Ваші дані були видалені під час виходу. Важливо, щоб ви явно вийшли з системи, інакше не всі кешовані дані можуть бути видалені. Зверніть увагу, що при використанні ненадійного пристрою шифрування OMEMO НЕ доступне."],"This is a trusted device":["Це надійний пристрій"],"Create an account":["Створити обліковий запис"],"Don\'t have a chat account?":[""],"Log in":["Увійти"],"Disconnected":[""],"Click here to log in anonymously":["Натисніть тут, щоб увійти таємно"],"user@domain":[""],"Please enter a valid XMPP address":[""],"Toggle chat":["Включити чат"],"Click to restore this chat":["Клацніть, щоб відновити цей чат"],"Minimized":["Мінімізовано"],"This field is required":["Це поле обов\'язкове"],"Join":["Приєднатися"],"Enter a new Groupchat":["Увійти в нову кімнату"],"name@conference.example.org":[""],"Invite":["Запросіть"],"user@example.org":[""],"Optional reason for the invitation":[""],"Description:":["Опис:"],"Features:":["Особливості:"],"Requires authentication":["Вимагає автентикації"],"Hidden":["Прихована"],"Requires an invitation":["Вимагає запрошення"],"Moderated":["Модерована"],"Non-anonymous":["Не-анонімні"],"Public":["Публічна"],"Semi-anonymous":["Напів-анонімна"],"Unmoderated":["Немодерована"],"conference.example.org":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Тема"],"Topic author":["Творець теми"],"Groupchat address (JID)":["Адреса кімнати (JID)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Опис"],"Features":["Особливості"],"This groupchat is not publicly searchable":["Ця кімната не для прилюдного пошуку"],"This groupchat is restricted to members only":["Ця кімната тільки для учасників"],"Members only":["Тільки для учасників"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Ім\'я"],"This groupchat does not require a password upon entry":["Ця кімната не вимагає пароль при вході"],"No password required":["Пароль не потрібен"],"All other groupchat participants can see your XMPP address":[""],"Participants entering this groupchat can write right away":[""],"Online users":["Присутні"],"Anyone can join this groupchat":["Будь-хто може приєднатися до цієї кімнати"],"This groupchat requires a password before entry":["Ця кімната потребує пароль перед входом"],"Password protected":["Пароль захищено"],"Persistent":["Стійкий"],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":["Ця кімната доступна для прилюдного пошуку"],"You\'re not allowed to send messages in this room":["Вам не дозволяється надсилати повідомлення в цій кімнаті"],"The conversation has moved. Click below to enter.":["Бесіду переміщено. Натисніть нижче, щоб увійти."],"This groupchat no longer exists":["Ця кімната більше не існує"],"Password: ":["Пароль:"],"Submit":["Надіслати"],"Owner":[""],"Admin":[""],"Member":[""],"Visitor":[""],"Participants":[""],"%1$s and %2$s":[""],"Change user\'s affiliation to admin":["Призначити користувача адміністратором"],"Ban user by changing their affiliation to outcast":[""],"Write in 3rd person":["Писати в 3-й особі"],"Grant membership to a user":["Надати членство користувачу"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Забрати можливість слати повідомлення"],"Change your nickname":["Змінити Ваше прізвисько"],"Grant moderator role to user":["Надати права модератора"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":["Дозволити безголосому користувачу слати повідомлення"],"Optional reason":[""],"Configure":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Error: invalid number of arguments":[""],"Announcements":[""],"Notification from %1$s":["Сповіщення від %1$s"],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":["тепер поза мережею"],"has gone away":["пішов геть"],"is busy":["зайнятий"],"has come online":["зʼявився в мережі"],"wants to be your contact":["хоче бути у вашому списку контактів"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Вийти"],"Click to change your chat status":["Клацніть, щоб змінити статус в чаті"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["Далеко"],"Busy":["Зайнятий"],"Custom status":["Власний статус"],"Offline":["Поза мережею"],"Online":["На зв\'язку"],"I am %1$s":["Я %1$s"],"online":["на зв\'язку"],"busy":["зайнятий"],"away for long":["давно відсутній"],"away":["відсутній"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Повідомлення надсилаються в простому тексті"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" напр. conversejs.org"],"Fetch registration form":["Отримати форму реєстрації"],"Tip: A list of public XMPP providers is available":["Порада: доступний перелік публічних XMPP-провайдерів"],"here":["тут"],"Sorry, we\'re unable to connect to your chosen provider.":["На жаль, ми не можемо підключитися до обраного вами провайдера."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Вибачте, вказаний провайдер не підтримує реєстрації онлайн. Спробуйте іншого провайдера."],"Now logging you in":["Входимо"],"Registered successfully":["Успішно зареєстровано"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Провайдер відхилив вашу спробу реєстрації. Будь ласка, перевірте введені значення на коректність."],"Open Groupchats":[""],"Add":["Додати"],"This contact is busy":["Цей контакт зайнятий"],"This contact is online":["Цей контакт на зв\'язку"],"This contact is offline":["Цей контакт поза мережею"],"This contact is unavailable":["Цей контакт недоступний"],"This contact is away for an extended period":["Цей контакт відсутній тривалий час"],"This contact is away":["Цей контакт відсутній"],"Contact name":["Назва контакту"],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"Filter":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Are you sure you want to decline this contact request?":["Ви впевнені, що хочете відхилити цей запит контакту?"],"Contacts":["Контакти"],"Add a contact":["Додати контакт"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[174],{540:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;","lang":"uk"},"Create your account":["Створити свій обліковий запис"],"Please enter the XMPP provider to register with:":["Введіть постачальника XMPP, щоб зареєструватися:"],"Already have a chat account?":["У вас вже є обліківка бесіди?"],"Log in here":["Увійти тут"],"Account Registration:":["Реєстрація облікового запису:"],"Register":["Реєстрація"],"Choose a different provider":["Виберіть іншого провайдера"],"Hold tight, we\'re fetching the registration form…":["Хвильку, ми отримуємо реєстраційну форму…"],"Cancel":["Відміна"],"The connection has dropped, attempting to reconnect.":["З\'єднання втрачено, спроба відновити зв\'язок."],"An error occurred while connecting to the chat server.":["Під час підключення до сервера чату сталася помилка."],"Your XMPP address and/or password is incorrect. Please try again.":["Ваша XMPP-адреса та/або пароль неправильні. Будь ласка спробуйте ще раз."],"Sorry, we could not connect to the XMPP host with domain: %1$s":["На жаль, не вдалося підключитися до хоста XMPP з доменом: %1$s"],"The XMPP server did not offer a supported authentication mechanism":["Сервер XMPP не пропонує підтримуваний механізм автентифікації"],"Undecryptable OMEMO message":["Нешифроване повідомлення OMEMO"],"Sorry, could not determine upload URL.":["На жаль, не вдалося визначити URL-адресу для завантаження."],"Sorry, could not determine file upload URL.":["На жаль, не вдалося визначити URL-адресу для завантаження файлу."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["На жаль, не вдалося завантажити файл. Відповідь вашого сервера: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["На жаль, не вдалося завантажити файл."],"You\'re not allowed to retract your message.":["Вам не дозволено відкликати своє повідомлення."],"Sorry, an error occurred while trying to retract your message.":["На жаль, сталася помилка під час спроби відкликати ваше повідомлення."],"Sorry, looks like file upload is not supported by your server.":["На жаль, схоже, що завантаження файлів не підтримується вашим сервером."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Розмір вашого файлу, %1$s, перевищує щонайбільш дозволений вашим сервером, який становить %2$s."],"Smileys and emotions":["Усмішки та почуття"],"People":["Люди"],"Activities":["Діяльності"],"Travel":["Подорожі"],"Objects":["Речі"],"Animals and nature":["Тварини та природа"],"Food and drink":["Їжа та напої"],"Symbols":["Знаки"],"Flags":["Прапори"],"Stickers":["Наліпки"],"This groupchat is not anonymous":["Ця бесіда не таємна"],"This groupchat now shows unavailable members":["Тепер бесіда показує недоступних членів"],"This groupchat does not show unavailable members":["Ця кімната не показує недоступних членів"],"The groupchat configuration has changed":["Змінено конфігурацію кімнати"],"Groupchat logging is now enabled":["Часопис кімнати тепер увімкнено"],"Groupchat logging is now disabled":["Часопис кімнати тепер вимкнено"],"This groupchat is now no longer anonymous":["Ця кімната тепер не таємна"],"This groupchat is now semi-anonymous":["Ця кімната тепер напівтаємна"],"This groupchat is now fully-anonymous":["Ця кімната тепер повністю таємна"],"A new groupchat has been created":["Створено нову кімнату"],"Your nickname has been automatically set to %1$s":["Ваше прізвисько було самочинно змінене на: %1$s"],"Your nickname has been changed to %1$s":["Ваше прізвисько було змінене на: %1$s"],"You have been banned from this groupchat":["Вам заблокували доступ до цієї кімнати"],"You have been kicked from this groupchat":["Вас викинули з цієї кімнати"],"You have been removed from this groupchat because of an affiliation change":["Вас видалено з кімнати у зв\'язку зі змінами власності кімнати"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Вас видалено з цієї кімнати, оскільки вона тепер вимагає членства, а Ви ним не є її членом"],"Your message was not delivered because you weren\'t allowed to send it.":["Ваше повідомлення не було доставлено, оскільки вам не дозволили його надіслати."],"Your message was not delivered because you\'re not present in the groupchat.":["Ваше повідомлення не було доставлено, оскільки ви не присутні в гуртовій бесіді."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Can\'t register your nickname in this groupchat, invalid data form supplied.":[""],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Remote server not found":[""],"Error":["Помилка"],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":[""],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"My contacts":["Мої контакти"],"Pending contacts":["Контакти в очікуванні"],"Contact requests":["Запити контакту"],"Ungrouped":["Негруповані"],"Sorry, there was an error while trying to add %1$s as a contact.":[""],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Клацніть, щоб приховати ці контакти"],"Click to toggle the bookmarks list":["Натисніть, щоб переключити список закладок"],"Bookmarks":["Закладки"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":[""],"What should your nickname for this groupchat be?":[""],"Save":["Зберегти"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Ви впевнені, що хочете видалити закладку \\"%1$s\\"?"],"Close":["Закрити"],"OK":["ОК"],"Image: ":[""],"Download audio file \\"%1$s\\"":[""],"Download image file \\"%1$s\\"":[""],"Download file \\"%1$s\\"":[""],"Edit":[""],"Retract":[""],"Message versions":["Видозміни повідомлення"],"Retry":[""],"Uploading file:":["Завантажуваний файл:"],"This message has been edited":["Це повідомлення було відредаговано"],"No message history available.":["Немає дієпису повідомлень."],"Search results":["Підсумки пошуку"],"Search":["Пошук"],"Insert emojis":[""],"Send the message":["Надіслати повідомлення"],"Start a call":["Почати виклик"],"Message characters remaining":[""],"Choose a file to send":[""],"The User\'s Profile Image":["Зображення користувача"],"Trusted":["Надійний"],"Untrusted":["Ненадійний"],"OMEMO Fingerprints":["Відбитки OMEMO"],"No OMEMO-enabled devices found":[""],"Remove as contact":["Видалити з контактів"],"XMPP Address":[""],"Email":[""],"Full Name":[""],"Nickname":["Прізвисько"],"Refresh":["Оновити"],"Role":[""],"URL":[""],"Remove messages":["Видалити повідомлення"],"Write in the third person":["Писати від третьої особи"],"Show this menu":["Показати це меню"],"Message":["Повідомлення"],"Optional hint":[""],"Details":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to remove this contact?":["Ви впевнені, що хочете видалити цей контакт?"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Для підвищення плідності ми кешуємо Ваші дані в цьому переглядачі. Зніміть цей прапорець, якщо це загальнодоступний комп\'ютер або якщо Ви хочете, щоб Ваші дані були видалені під час виходу. Важливо, щоб ви явно вийшли з системи, інакше не всі кешовані дані можуть бути видалені. Зверніть увагу, що при використанні ненадійного пристрою шифрування OMEMO НЕ доступне."],"This is a trusted device":["Це надійний пристрій"],"Create an account":["Створити обліковий запис"],"Don\'t have a chat account?":[""],"Log in":["Увійти"],"Disconnected":[""],"Click here to log in anonymously":["Натисніть тут, щоб увійти таємно"],"user@domain":[""],"Please enter a valid XMPP address":[""],"Toggle chat":["Включити чат"],"Click to restore this chat":["Клацніть, щоб відновити цей чат"],"Minimized":["Мінімізовано"],"Owner":[""],"Admin":[""],"Member":[""],"Visitor":[""],"Participants":[""],"This field is required":["Це поле обов\'язкове"],"Join":["Приєднатися"],"Enter a new Groupchat":["Увійти в нову кімнату"],"name@conference.example.org":[""],"Invite":["Запросіть"],"user@example.org":[""],"Optional reason for the invitation":[""],"Description:":["Опис:"],"Features:":["Особливості:"],"Requires authentication":["Вимагає автентикації"],"Hidden":["Прихована"],"Requires an invitation":["Вимагає запрошення"],"Moderated":["Модерована"],"Non-anonymous":["Не-анонімні"],"Public":["Публічна"],"Semi-anonymous":["Напів-анонімна"],"Unmoderated":["Немодерована"],"conference.example.org":[""],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"New affiliation":[""],"Affiliation":[""],"No users with that affiliation found.":[""],"Type here to filter the search results":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Affiliation changed":[""],"Topic":["Тема"],"Topic author":["Творець теми"],"Groupchat address (JID)":["Адреса кімнати (JID)"],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Опис"],"Features":["Особливості"],"This groupchat is not publicly searchable":["Ця кімната не для прилюдного пошуку"],"This groupchat is restricted to members only":["Ця кімната тільки для учасників"],"Members only":["Тільки для учасників"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Ім\'я"],"This groupchat does not require a password upon entry":["Ця кімната не вимагає пароль при вході"],"No password required":["Пароль не потрібен"],"All other groupchat participants can see your XMPP address":[""],"Participants entering this groupchat can write right away":[""],"Online users":["Присутні"],"Anyone can join this groupchat":["Будь-хто може приєднатися до цієї кімнати"],"This groupchat requires a password before entry":["Ця кімната потребує пароль перед входом"],"Password protected":["Пароль захищено"],"Persistent":["Стійкий"],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":["Ця кімната доступна для прилюдного пошуку"],"You\'re not allowed to send messages in this room":["Вам не дозволяється надсилати повідомлення в цій кімнаті"],"The conversation has moved. Click below to enter.":["Бесіду переміщено. Натисніть нижче, щоб увійти."],"This groupchat no longer exists":["Ця кімната більше не існує"],"Password: ":["Пароль:"],"Submit":["Надіслати"],"%1$s and %2$s":[""],"Change user\'s affiliation to admin":["Призначити користувача адміністратором"],"Ban user by changing their affiliation to outcast":[""],"Write in 3rd person":["Писати в 3-й особі"],"Grant membership to a user":["Надати членство користувачу"],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":["Забрати можливість слати повідомлення"],"Change your nickname":["Змінити Ваше прізвисько"],"Grant moderator role to user":["Надати права модератора"],"Revoke the user\'s current affiliation":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":["Дозволити безголосому користувачу слати повідомлення"],"Optional reason":[""],"Configure":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Leave":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Check your browser\'s developer console for details.":[""],"name@example.org":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"replacement@example.org":[""],"Error: invalid number of arguments":[""],"Announcements":[""],"Notification from %1$s":["Сповіщення від %1$s"],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":["тепер поза мережею"],"has gone away":["пішов геть"],"is busy":["зайнятий"],"has come online":["зʼявився в мережі"],"wants to be your contact":["хоче бути у вашому списку контактів"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["Вийти"],"Click to change your chat status":["Клацніть, щоб змінити статус в чаті"],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":["Далеко"],"Busy":["Зайнятий"],"Custom status":["Власний статус"],"Offline":["Поза мережею"],"Online":["На зв\'язку"],"I am %1$s":["Я %1$s"],"online":["на зв\'язку"],"busy":["зайнятий"],"away for long":["давно відсутній"],"away":["відсутній"],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Повідомлення надсилаються в простому тексті"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[" напр. conversejs.org"],"Fetch registration form":["Отримати форму реєстрації"],"Tip: A list of public XMPP providers is available":["Порада: доступний перелік публічних XMPP-провайдерів"],"here":["тут"],"Sorry, we\'re unable to connect to your chosen provider.":["На жаль, ми не можемо підключитися до обраного вами провайдера."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["Вибачте, вказаний провайдер не підтримує реєстрації онлайн. Спробуйте іншого провайдера."],"Now logging you in":["Входимо"],"Registered successfully":["Успішно зареєстровано"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Провайдер відхилив вашу спробу реєстрації. Будь ласка, перевірте введені значення на коректність."],"Open Groupchats":[""],"Add":["Додати"],"This contact is busy":["Цей контакт зайнятий"],"This contact is online":["Цей контакт на зв\'язку"],"This contact is offline":["Цей контакт поза мережею"],"This contact is unavailable":["Цей контакт недоступний"],"This contact is away for an extended period":["Цей контакт відсутній тривалий час"],"This contact is away":["Цей контакт відсутній"],"Contact name":["Назва контакту"],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"Filter":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Are you sure you want to decline this contact request?":["Ви впевнені, що хочете відхилити цей запит контакту?"],"Contacts":["Контакти"],"Add a contact":["Додати контакт"]}}}')}}]);
 //# sourceMappingURL=uk-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/vi-LC_MESSAGES-converse-po.js b/src/conversejs/locales/vi-LC_MESSAGES-converse-po.js
index 1135a20da71376d43cd69057757ac313153c98b1..581dbc7ab0ed96718f96cb574f2f12e5159cbc35 100644
--- a/src/conversejs/locales/vi-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/vi-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[174],{452:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"vi"},"Create your account":["Tạo tài khoản của bạn"],"Already have a chat account?":["Bạn đã có tài khoản trò chuyện?"],"Log in here":["Đăng nhập ở đây"],"Account Registration:":["Đăng kí Tài khoản:"],"Register":["Đăng kí"],"Choose a different provider":["Chọn nhà cung cấp khác"],"Cancel":["Huỷ"],"An error occurred while connecting to the chat server.":["Đã xảy ra lỗi khi kết nối đến máy chủ trò chuyện."],"Your XMPP address and/or password is incorrect. Please try again.":["Địa chỉ XMPP và/hoặc mật khẩu không đúng. Xin thử lại."],"The XMPP server did not offer a supported authentication mechanism":["Máy chủ XMPP không cung cấp phương thức xác thực được hỗ trợ"],"Sorry, could not determine upload URL.":["Thật tiếc, không thể xác định URL tải lên."],"Sorry, could not determine file upload URL.":["Thật tiếc, không thể xác định URL tải lên tập tin."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Thật tiếc, không thể tải lên thành công tập tin của bạn. Phản hồi từ máy chủ của bạn: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Thật tiếc, không thể tải lên thành công tập tin của bạn."],"Sorry, looks like file upload is not supported by your server.":["Thật tiếc, hình như máy chủ của bạn không hỗ trợ tải lên tập tin."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Kích cỡ tập tin của bạn, %1$s, vượt quá giới hạn cho phép của máy chủ của bạn, %2$s."],"Smileys and emotions":["Mặt cười và biểu tượng cảm xúc"],"People":["Con người"],"Activities":["Hoạt động"],"Travel":["Du lịch"],"Animals and nature":["Động vật và thiên nhiên"],"Food and drink":["Đồ ăn và thức uống"],"Symbols":["Biểu tượng"],"Flags":["Cờ"],"Stickers":["Nhãn dán"],"This groupchat is not anonymous":["Nhóm trò chuyện này không ẩn danh"],"This groupchat now shows unavailable members":["Nhóm trò chuyện này từ giờ sẽ hiện thành viên không có mặt"],"This groupchat does not show unavailable members":["Nhóm trò chuyện này không hiện thành viên không sẵn có"],"The groupchat configuration has changed":["Cài đặt của nhóm trò chuyện đã thay đổi"],"This groupchat is now no longer anonymous":["Nhóm trò chuyện này không còn ẩn danh nữa"],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":["Đã tạo nhóm trò chuyện mới"],"Your nickname has been changed to %1$s":["Tên người dùng của bạn đã được đổi thành %1$s"],"You have been banned from this groupchat":["Bạn đã bị chặn khỏi nhóm trò chuyện này"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":["Bạn đã bị đá khỏi nhóm trò chuyện này"],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Bạn đã bị xoá khỏi nhóm trò chuyện này vì nhóm đã đổi sang chế độ chỉ dành cho thành viên và bạn không phải thành viên"],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your message was not delivered because you weren\'t allowed to send it.":["Không thể gửi tin nhắn vì bạn không được phép gửi."],"You\'re not allowed to register yourself in this groupchat.":["Bạn không được phép tự đăng kí vào nhóm trò chuyện này."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Bạn không được phép tham gia nhóm trò chuyện này vì nhóm chỉ dành cho thành viên."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Topic set by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":["%1$s đã bị cấm"],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":["%1$s đã bị đá khỏi nhóm bởi %2$s"],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":["%1$s đã bị xoá vì không phải là thành viên"],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":["%1$s không còn là chủ nhóm trò chuyện này nữa"],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":["%1$s không còn là thành viên nhóm trò chuyện này nữa"],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":["%1$s từ giờ là %2$s của nhóm trò chuyện này"],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":["Sai mật khẩu"],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":["Bạn không được phép tạo nhóm trò chuyện mới."],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":["Nhóm trò chuyện này không (hoặc chưa) tồn tại."],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":["Không tìm thấy máy chủ từ xa"],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":["%1$s đã mời bạn tham gia nhóm trò chuyện: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Lỗi"],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":["Lỗi Hết thời gian chờ"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Pending contacts":[""],"Ungrouped":["Chưa phân nhóm"],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":["Thật tiếc, đã xảy ra lỗi khi thêm %1$s làm liên lạc."],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Nhấn để ẩn các liên lạc này"],"Unbookmark this groupchat":["Bỏ đánh dấu nhóm trò chuyện này"],"Click to open this groupchat":["Nhấn để mở nhóm trò chuyện này"],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":["Đánh dấu nhóm trò chuyện này"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["Tên đánh dấu:"],"What should your nickname for this groupchat be?":[""],"Save":["Lưu"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Bạn có chắc muốn xoá đánh dấu \\"%1$s\\"?"],"Unbookmark":["Bỏ đánh dấu"],"Bookmark":["Đánh dấu"],"Close":["Đóng"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Tải tập tin âm thanh \\"%1$s\\""],"Download file \\"%1$s\\"":["Tải tập tin \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Phiên bản tin nhắn"],"Retry":[""],"Uploading file:":["Đang tải lên tập tin:"],"%1$s has removed this message":["%1$s đã xoá tin nhắn này"],"This message has been edited":["Tin nhắn đã được chỉnh sửa"],"Show more":["Xem thêm"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":["Gửi tin nhắn"],"Start a call":[""],"Message characters remaining":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Hình Đại Diện Người Dùng"],"Trusted":["Tin cậy"],"Untrusted":["Không tin cậy"],"OMEMO Fingerprints":["Dấu OMEMO"],"No OMEMO-enabled devices found":[""],"Remove as contact":["Xoá liên hệ"],"XMPP Address":["Địa chỉ XMPP"],"Email":["Thư điện tử"],"Full Name":["Họ và Tên"],"Nickname":["Tên người dùng"],"Refresh":["Làm mới"],"Role":["Vai trò"],"URL":["URL"],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Để tăng hiệu năng, bản cache dữ liệu sẽ lưu trên trình duyệt."],"This is a trusted device":["Thiết bị tin cậy"],"Password":["Mật khẩu"],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This field is required":[""],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["Tên nhóm trò chuyện"],"Groupchat address":["Địa chỉ nhóm trò chuyện"],"Groupchat id is invalid.":["ID nhóm trò chuyện không hợp lệ."],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":["Hiện thêm thông tin về nhóm trò chuyện"],"Query for Groupchats":[""],"Description:":["Mô tả:"],"Groupchat Address (JID):":["Địa chỉ Nhóm trò chuyện (JID):"],"Participants:":["Người tham gia:"],"Features:":[""],"Requires authentication":["Cần xác thực"],"Hidden":["Đã ẩn"],"Requires an invitation":["Cần được mời"],"Moderated":[""],"Non-anonymous":["Không ẩn danh"],"Open":[""],"Permanent":["Vĩnh viễn"],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":["conference.example.org"],"No groupchats found":["Không tìm thấy nhóm trò chuyện"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":["Đã đổi vai trò"],"You\'re not allowed to make that change":["Bạn không được phép thực hiện thay đổi này"],"Sorry, something went wrong while trying to set the role":["Thật tiếc, đã xảy ra lỗi khi đặt vai trò"],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Mô tả"],"Features":["Tính năng"],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Chỉ dành cho thành viên"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Tên"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":["Không ẩn danh"],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Bạn không được phép gửi tin nhắn trong phòng này"],"This groupchat no longer exists":["Nhóm trò chuyện này không còn tồn tại"],"Hide the groupchat topic":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"%1$s has entered the groupchat":["%1$s đã tham gia nhóm trò chuyện"],"%1$s has left the groupchat":["%1$s đã rời nhóm trò chuyện"],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":["%1$s đã bị tắt tiếng"],"%1$s and %2$s":["%1$s và %2$s"],"%1$s are typing":["%1$s đang soạn"],"%1$s have stopped typing":["%1$s đã ngừng soạn"],"%1$s have gone away":["%1$s đã đi vắng"],"%1$s have entered the groupchat":["%1$s đã tham gia nhóm trò chuyện"],"%1$s have left the groupchat":["%1$s đã rời nhóm trò chuyện"],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":["Bạn sắp thu hồi tin nhắn này."],"You may optionally include a message, explaining the reason for the retraction.":["Bạn có thể kèm theo tin nhắn tuỳ chọn để giải thích lí do thu hồi."],"Message Retraction":["Thu hồi Tin nhắn"],"Optional reason":["Lí do (tuỳ chọn)"],"Sorry, you\'re not allowed to retract this message":["Thật tiếc, bạn không được phép thu hồi tin nhắn này"],"A timeout occurred while trying to retract the message":["Đã hết thời gian chờ khi đang thu hồi tin nhắn"],"Sorry, you\'re not allowed to retract this message.":["Thật tiếc, bạn không được phép thu hồi tin nhắn này."],"Show more information about this groupchat":["Hiện thêm thông tin về nhóm trò chuyện"],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Tin nhắn đang được gửi dưới dạng văn bản thô"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":["Gợi ý: Một danh sách các nhà cung cấp XMPP công cộng có sẵn"],"here":["tại đây"],"Sorry, we\'re unable to connect to your chosen provider.":["Thật tiếc, chúng tôi không thể kết nối đến nhà cung cấp đã chọn."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":["Đang đăng nhập đây"],"Registered successfully":["Đăng kí thành công"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Nhà cung cấp đã từ chối lần đăng kí của bạn. Hãy kiểm tra lại xem các giá trị bạn nhập đã đúng chưa."],"Leave this groupchat":["Rời nhóm trò chuyện"],"Click to toggle the list of open groupchats":["Nhấn để mở rộng danh sách nhóm trò chuyện mở"],"Open Groupchats":["Nhóm trò chuyện Mở"],"Are you sure you want to leave the groupchat %1$s?":["Bạn có chắc muốn rời nhóm trò chuyện %1$s?"],"Add":["Thêm"],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":["Danh bạ"],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[175],{541:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"vi"},"Create your account":["Tạo tài khoản của bạn"],"Already have a chat account?":["Bạn đã có tài khoản trò chuyện?"],"Log in here":["Đăng nhập ở đây"],"Account Registration:":["Đăng kí Tài khoản:"],"Register":["Đăng kí"],"Choose a different provider":["Chọn nhà cung cấp khác"],"Cancel":["Huỷ"],"An error occurred while connecting to the chat server.":["Đã xảy ra lỗi khi kết nối đến máy chủ trò chuyện."],"Your XMPP address and/or password is incorrect. Please try again.":["Địa chỉ XMPP và/hoặc mật khẩu không đúng. Xin thử lại."],"The XMPP server did not offer a supported authentication mechanism":["Máy chủ XMPP không cung cấp phương thức xác thực được hỗ trợ"],"Sorry, could not determine upload URL.":["Thật tiếc, không thể xác định URL tải lên."],"Sorry, could not determine file upload URL.":["Thật tiếc, không thể xác định URL tải lên tập tin."],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["Thật tiếc, không thể tải lên thành công tập tin của bạn. Phản hồi từ máy chủ của bạn: \\"%1$s\\""],"Sorry, could not succesfully upload your file.":["Thật tiếc, không thể tải lên thành công tập tin của bạn."],"Sorry, looks like file upload is not supported by your server.":["Thật tiếc, hình như máy chủ của bạn không hỗ trợ tải lên tập tin."],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["Kích cỡ tập tin của bạn, %1$s, vượt quá giới hạn cho phép của máy chủ của bạn, %2$s."],"Smileys and emotions":["Mặt cười và biểu tượng cảm xúc"],"People":["Con người"],"Activities":["Hoạt động"],"Travel":["Du lịch"],"Animals and nature":["Động vật và thiên nhiên"],"Food and drink":["Đồ ăn và thức uống"],"Symbols":["Biểu tượng"],"Flags":["Cờ"],"Stickers":["Nhãn dán"],"This groupchat is not anonymous":["Nhóm trò chuyện này không ẩn danh"],"This groupchat now shows unavailable members":["Nhóm trò chuyện này từ giờ sẽ hiện thành viên không có mặt"],"This groupchat does not show unavailable members":["Nhóm trò chuyện này không hiện thành viên không sẵn có"],"The groupchat configuration has changed":["Cài đặt của nhóm trò chuyện đã thay đổi"],"This groupchat is now no longer anonymous":["Nhóm trò chuyện này không còn ẩn danh nữa"],"This groupchat is now semi-anonymous":[""],"This groupchat is now fully-anonymous":[""],"A new groupchat has been created":["Đã tạo nhóm trò chuyện mới"],"Your nickname has been changed to %1$s":["Tên người dùng của bạn đã được đổi thành %1$s"],"You have been banned from this groupchat":["Bạn đã bị chặn khỏi nhóm trò chuyện này"],"You have exited this groupchat due to a technical problem":[""],"You have been kicked from this groupchat":["Bạn đã bị đá khỏi nhóm trò chuyện này"],"You have been removed from this groupchat because of an affiliation change":[""],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["Bạn đã bị xoá khỏi nhóm trò chuyện này vì nhóm đã đổi sang chế độ chỉ dành cho thành viên và bạn không phải thành viên"],"You have been removed from this groupchat because the service hosting it is being shut down":[""],"Your message was not delivered because you weren\'t allowed to send it.":["Không thể gửi tin nhắn vì bạn không được phép gửi."],"You\'re not allowed to register yourself in this groupchat.":["Bạn không được phép tự đăng kí vào nhóm trò chuyện này."],"You\'re not allowed to register in this groupchat because it\'s members-only.":["Bạn không được phép tham gia nhóm trò chuyện này vì nhóm chỉ dành cho thành viên."],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":[""],"Topic set by %1$s":[""],"%1$s has been banned by %2$s":[""],"%1$s has been banned":["%1$s đã bị cấm"],"%1$s\'s nickname has changed":[""],"%1$s has been kicked out by %2$s":["%1$s đã bị đá khỏi nhóm bởi %2$s"],"%1$s has been kicked out":[""],"%1$s has been removed because of an affiliation change":[""],"%1$s has been removed for not being a member":["%1$s đã bị xoá vì không phải là thành viên"],"%1$s is no longer an admin of this groupchat":[""],"%1$s is no longer an owner of this groupchat":["%1$s không còn là chủ nhóm trò chuyện này nữa"],"%1$s is no longer banned from this groupchat":[""],"%1$s is no longer a member of this groupchat":["%1$s không còn là thành viên nhóm trò chuyện này nữa"],"%1$s is now a member of this groupchat":[""],"%1$s is now an %2$s of this groupchat":["%1$s từ giờ là %2$s của nhóm trò chuyện này"],"The nickname you chose is reserved or currently in use, please choose a different one.":[""],"Password incorrect":["Sai mật khẩu"],"You are not on the member list of this groupchat.":[""],"You have been banned from this groupchat.":[""],"You are not allowed to create new groupchats.":["Bạn không được phép tạo nhóm trò chuyện mới."],"Your nickname doesn\'t conform to this groupchat\'s policies.":[""],"This groupchat does not (yet) exist.":["Nhóm trò chuyện này không (hoặc chưa) tồn tại."],"This groupchat has reached its maximum number of participants.":[""],"Remote server not found":["Không tìm thấy máy chủ từ xa"],"The explanation given is: \\"%1$s\\".":[""],"%1$s has invited you to join a groupchat: %2$s":["%1$s đã mời bạn tham gia nhóm trò chuyện: %2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":[""],"Error":["Lỗi"],"Sorry, something went wrong while trying to save your bookmark.":[""],"Timeout Error":["Lỗi Hết thời gian chờ"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":[""],"Pending contacts":[""],"Ungrouped":["Chưa phân nhóm"],"New messages":[""],"Sorry, there was an error while trying to add %1$s as a contact.":["Thật tiếc, đã xảy ra lỗi khi thêm %1$s làm liên lạc."],"This client does not allow presence subscriptions":[""],"Click to hide these contacts":["Nhấn để ẩn các liên lạc này"],"Unbookmark this groupchat":["Bỏ đánh dấu nhóm trò chuyện này"],"Click to open this groupchat":["Nhấn để mở nhóm trò chuyện này"],"Click to toggle the bookmarks list":[""],"Bookmarks":[""],"Bookmark this groupchat":["Đánh dấu nhóm trò chuyện này"],"Would you like this groupchat to be automatically joined upon startup?":[""],"The name for this bookmark:":["Tên đánh dấu:"],"What should your nickname for this groupchat be?":[""],"Save":["Lưu"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["Bạn có chắc muốn xoá đánh dấu \\"%1$s\\"?"],"Unbookmark":["Bỏ đánh dấu"],"Bookmark":["Đánh dấu"],"Close":["Đóng"],"OK":["OK"],"Image: ":[""],"Download audio file \\"%1$s\\"":["Tải tập tin âm thanh \\"%1$s\\""],"Download file \\"%1$s\\"":["Tải tập tin \\"%1$s\\""],"Edit":[""],"Retract":[""],"Message versions":["Phiên bản tin nhắn"],"Retry":[""],"Uploading file:":["Đang tải lên tập tin:"],"%1$s has removed this message":["%1$s đã xoá tin nhắn này"],"This message has been edited":["Tin nhắn đã được chỉnh sửa"],"Show more":["Xem thêm"],"No message history available.":[""],"Search results":[""],"Search":[""],"Insert emojis":[""],"Send the message":["Gửi tin nhắn"],"Start a call":[""],"Message characters remaining":[""],"Choose a file to send":[""],"Click to write as a normal (non-spoiler) message":[""],"Click to write your message as a spoiler":[""],"The User\'s Profile Image":["Hình Đại Diện Người Dùng"],"Trusted":["Tin cậy"],"Untrusted":["Không tin cậy"],"OMEMO Fingerprints":["Dấu OMEMO"],"No OMEMO-enabled devices found":[""],"Remove as contact":["Xoá liên hệ"],"XMPP Address":["Địa chỉ XMPP"],"Email":["Thư điện tử"],"Full Name":["Họ và Tên"],"Nickname":["Tên người dùng"],"Refresh":["Làm mới"],"Role":["Vai trò"],"URL":["URL"],"%1$s is typing":[""],"%1$s has stopped typing":[""],"%1$s has gone away":[""],"Remove messages":[""],"Close this chat":[""],"Write in the third person":[""],"Show this menu":[""],"Hidden message":[""],"Message":[""],"Optional hint":[""],"You have unread messages":[""],"Details":[""],"See more information about this person":[""],"Close and end this conversation":[""],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":[""],"Are you sure you want to retract this message?":[""],"Confirm":[""],"You have an unsent message which will be lost if you continue. Are you sure?":[""],"Are you sure you want to clear the messages from this conversation?":[""],"%1$s has gone offline":[""],"%1$s is busy":[""],"%1$s is online":[""],"Sorry, something went wrong while trying to refresh":[""],"Are you sure you want to remove this contact?":[""],"Sorry, there was an error while trying to remove %1$s as a contact.":[""],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["Để tăng hiệu năng, bản cache dữ liệu sẽ lưu trên trình duyệt."],"This is a trusted device":["Thiết bị tin cậy"],"Password":["Mật khẩu"],"Create an account":[""],"Don\'t have a chat account?":[""],"Log in":[""],"Disconnected":[""],"Click here to log in anonymously":[""],"Username":[""],"user@domain":[""],"Please enter a valid XMPP address":[""],"Chat Contacts":[""],"Toggle chat":[""],"Click to restore this chat":[""],"Minimized":[""],"Minimize":[""],"Minimize this chat":[""],"Minimize this groupchat":[""],"This user is a moderator.":[""],"This user can send messages in this groupchat.":[""],"This user can NOT send messages in this groupchat.":[""],"Owner":[""],"Admin":[""],"Member":[""],"Moderator":[""],"Visitor":[""],"Click to mention %1$s in your message.":[""],"Participants":[""],"This field is required":[""],"Join":[""],"Enter a new Groupchat":[""],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["Tên nhóm trò chuyện"],"Groupchat address":["Địa chỉ nhóm trò chuyện"],"Groupchat id is invalid.":["ID nhóm trò chuyện không hợp lệ."],"Invite":[""],"Invite someone to this groupchat":[""],"user@example.org":[""],"Optional reason for the invitation":[""],"Show groupchats":[""],"Server address":[""],"Show more information on this groupchat":["Hiện thêm thông tin về nhóm trò chuyện"],"Query for Groupchats":[""],"Description:":["Mô tả:"],"Groupchat Address (JID):":["Địa chỉ Nhóm trò chuyện (JID):"],"Participants:":["Người tham gia:"],"Features:":[""],"Requires authentication":["Cần xác thực"],"Hidden":["Đã ẩn"],"Requires an invitation":["Cần được mời"],"Moderated":[""],"Non-anonymous":["Không ẩn danh"],"Open":[""],"Permanent":["Vĩnh viễn"],"Public":[""],"Semi-anonymous":[""],"Temporary":[""],"Unmoderated":[""],"conference.example.org":["conference.example.org"],"No groupchats found":["Không tìm thấy nhóm trò chuyện"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":[""],"The default role, implies that you can read and write messages.":[""],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":[""],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":[""],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":[""],"To ban a user, you give them the affiliation of \\"outcast\\".":[""],"Change role":[""],"New Role":[""],"Reason":[""],"Change affiliation":[""],"New affiliation":[""],"Affiliation":[""],"Moderator Tools":[""],"No users with that affiliation found.":[""],"No users with that role found.":[""],"Type here to filter the search results":[""],"Show users":[""],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":[""],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":[""],"Sorry, something went wrong while trying to set the affiliation":[""],"Affiliation changed":[""],"Role changed":["Đã đổi vai trò"],"You\'re not allowed to make that change":["Bạn không được phép thực hiện thay đổi này"],"Sorry, something went wrong while trying to set the role":["Thật tiếc, đã xảy ra lỗi khi đặt vai trò"],"Topic":[""],"Topic author":[""],"Groupchat address (JID)":[""],"Message archiving":[""],"Messages are archived on the server":[""],"Description":["Mô tả"],"Features":["Tính năng"],"This groupchat is not publicly searchable":[""],"This groupchat is restricted to members only":[""],"Members only":["Chỉ dành cho thành viên"],"Participants entering this groupchat need to request permission to write":[""],"Name":["Tên"],"This groupchat does not require a password upon entry":[""],"No password required":[""],"Not anonymous":["Không ẩn danh"],"All other groupchat participants can see your XMPP address":[""],"Not moderated":[""],"Participants entering this groupchat can write right away":[""],"Online users":[""],"Anyone can join this groupchat":[""],"This groupchat requires a password before entry":[""],"Password protected":[""],"Persistent":[""],"This groupchat persists even if it\'s unoccupied":[""],"Only moderators can see your XMPP address":[""],"This groupchat will disappear once the last person leaves":[""],"This groupchat is publicly searchable":[""],"Groupchat info for %1$s":[""],"You\'re not allowed to send messages in this room":["Bạn không được phép gửi tin nhắn trong phòng này"],"This groupchat no longer exists":["Nhóm trò chuyện này không còn tồn tại"],"Hide the groupchat topic":[""],"This groupchat is bookmarked":[""],"Enter groupchat":[""],"Choose a nickname to enter":[""],"Please choose your nickname":[""],"This groupchat requires a password":[""],"Password: ":[""],"Submit":[""],"%1$s has entered the groupchat":["%1$s đã tham gia nhóm trò chuyện"],"%1$s has left the groupchat":["%1$s đã rời nhóm trò chuyện"],"%1$s is now a moderator":[""],"%1$s is no longer a moderator":[""],"%1$s has been given a voice":[""],"%1$s has been muted":["%1$s đã bị tắt tiếng"],"%1$s and %2$s":["%1$s và %2$s"],"%1$s are typing":["%1$s đang soạn"],"%1$s have stopped typing":["%1$s đã ngừng soạn"],"%1$s have gone away":["%1$s đã đi vắng"],"%1$s have entered the groupchat":["%1$s đã tham gia nhóm trò chuyện"],"%1$s have left the groupchat":["%1$s đã rời nhóm trò chuyện"],"%1$s are now moderators":[""],"%1$s are no longer moderators":[""],"Change user\'s affiliation to admin":[""],"Ban user by changing their affiliation to outcast":[""],"Clear the chat area":[""],"Close this groupchat":[""],"Change user role to participant":[""],"Remove this groupchat":[""],"Kick user from groupchat":[""],"Write in 3rd person":[""],"Grant membership to a user":[""],"Opens up the moderator tools GUI":[""],"Remove user\'s ability to post messages":[""],"Change your nickname":[""],"Grant moderator role to user":[""],"Grant ownership of this groupchat":[""],"Register your nickname":[""],"Revoke the user\'s current affiliation":[""],"Set groupchat subject":[""],"Set groupchat subject (alias for /subject)":[""],"Allow muted user to post messages":[""],"You are about to retract this message.":["Bạn sắp thu hồi tin nhắn này."],"You may optionally include a message, explaining the reason for the retraction.":["Bạn có thể kèm theo tin nhắn tuỳ chọn để giải thích lí do thu hồi."],"Message Retraction":["Thu hồi Tin nhắn"],"Optional reason":["Lí do (tuỳ chọn)"],"Sorry, you\'re not allowed to retract this message":["Thật tiếc, bạn không được phép thu hồi tin nhắn này"],"A timeout occurred while trying to retract the message":["Đã hết thời gian chờ khi đang thu hồi tin nhắn"],"Sorry, you\'re not allowed to retract this message.":["Thật tiếc, bạn không được phép thu hồi tin nhắn này."],"Show more information about this groupchat":["Hiện thêm thông tin về nhóm trò chuyện"],"Configure":[""],"Configure this groupchat":[""],"Invite someone to join this groupchat":[""],"Show topic":[""],"Hide topic":[""],"Show the topic message in the heading":[""],"Hide the topic in the heading":[""],"Moderate":[""],"Moderate this groupchat":[""],"Destroy":[""],"Leave":[""],"Leave and close this groupchat":[""],"Are you sure you want to leave this groupchat?":[""],"Hide the list of participants":[""],"Forbidden: you do not have the necessary role in order to do that.":[""],"Forbidden: you do not have the necessary affiliation in order to do that.":[""],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":[""],"Error: couldn\'t find a groupchat participant based on your arguments":[""],"Error: found multiple groupchat participant based on your arguments":[""],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":[""],"Sorry, an error happened while running the command.":[""],"Check your browser\'s developer console for details.":[""],"Are you sure you want to destroy this groupchat?":[""],"Optional XMPP address for a new groupchat that replaces this one":[""],"Your nickname is \\"%1$s\\"":[""],"Error: invalid number of arguments":[""],"This action was done by %1$s.":[""],"The reason given is: \\"%1$s\\".":[""],"Groupchats":[""],"Add a new groupchat":[""],"Query for groupchats":[""],"Sorry, an error occurred while trying to submit the config form.":[""],"Close these announcements":[""],"Announcements":[""],"Notification from %1$s":[""],"%1$s says":[""],"Encrypted message received":[""],"has gone offline":[""],"has gone away":[""],"is busy":[""],"has come online":[""],"wants to be your contact":[""],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":[""],"About":[""],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":[""],"Click to change your chat status":[""],"Show details about this chat client":[""],"Your avatar image":[""],"Checkbox for selecting the following fingerprint":[""],"Device without a fingerprint":[""],"Checkbox for selecting the following device":[""],"Other OMEMO-enabled devices":[""],"Checkbox to select fingerprints of all other OMEMO devices":[""],"Remove checked devices and close":[""],"Select all":[""],"This device\'s OMEMO fingerprint":[""],"Generate new keys and fingerprint":[""],"Your Profile":[""],"XMPP Address (JID)":[""],"Save and close":[""],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":[""],"OMEMO":[""],"Profile":[""],"Sorry, an error happened while trying to save your profile data.":[""],"You can check your browser\'s developer console for any error output.":[""],"Away":[""],"Busy":[""],"Custom status":[""],"Offline":[""],"Online":[""],"Away for long":[""],"Change chat status":[""],"Personal status message":[""],"I am %1$s":[""],"Are you sure you want to log out?":[""],"online":[""],"busy":[""],"away for long":[""],"away":[""],"offline":[""],"Sorry, could not decrypt a received OMEMO message due to an error.":[""],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":[""],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":[""],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":[""],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":[""],"Messages are being sent in plaintext":["Tin nhắn đang được gửi dưới dạng văn bản thô"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":[""],"Unable to send an encrypted message due to an unexpected error.":[""],"Sorry, an error occurred while trying to remove the devices.":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":[""],"Sorry, no devices found to which we can send an OMEMO encrypted message.":[""],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":[""]," e.g. conversejs.org":[""],"Fetch registration form":[""],"Tip: A list of public XMPP providers is available":["Gợi ý: Một danh sách các nhà cung cấp XMPP công cộng có sẵn"],"here":["tại đây"],"Sorry, we\'re unable to connect to your chosen provider.":["Thật tiếc, chúng tôi không thể kết nối đến nhà cung cấp đã chọn."],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":[""],"Now logging you in":["Đang đăng nhập đây"],"Registered successfully":["Đăng kí thành công"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["Nhà cung cấp đã từ chối lần đăng kí của bạn. Hãy kiểm tra lại xem các giá trị bạn nhập đã đúng chưa."],"Leave this groupchat":["Rời nhóm trò chuyện"],"Click to toggle the list of open groupchats":["Nhấn để mở rộng danh sách nhóm trò chuyện mở"],"Open Groupchats":["Nhóm trò chuyện Mở"],"Are you sure you want to leave the groupchat %1$s?":["Bạn có chắc muốn rời nhóm trò chuyện %1$s?"],"Add":["Thêm"],"Add a Contact":[""],"This contact is busy":[""],"This contact is online":[""],"This contact is offline":[""],"This contact is unavailable":[""],"This contact is away for an extended period":[""],"This contact is away":[""],"Contact name":[""],"Optional nickname":[""],"Sorry, could not find a contact with that name":[""],"This contact has already been added":[""],"Filter":[""],"Filter by contact name":[""],"Filter by group name":[""],"Filter by status":[""],"Any":[""],"Unread":[""],"Chatty":[""],"Extended Away":[""],"Click to remove %1$s as a contact":[""],"Click to accept the contact request from %1$s":[""],"Click to decline the contact request from %1$s":[""],"Click to chat with %1$s (XMPP address: %2$s)":[""],"Are you sure you want to decline this contact request?":[""],"Contacts":["Danh bạ"],"Add a contact":[""],"Re-sync your contacts":[""]}}}')}}]);
 //# sourceMappingURL=vi-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/zh_CN-LC_MESSAGES-converse-po.js b/src/conversejs/locales/zh_CN-LC_MESSAGES-converse-po.js
index 4f9ad2b2eede5c923fbcc86fa6436907b7436186..f9b3b62cf42161b3614079078b27bee927eabd9c 100644
--- a/src/conversejs/locales/zh_CN-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/zh_CN-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[175],{453:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"zh_CN"},"Create your account":["创建你的账户"],"Please enter the XMPP provider to register with:":["请输入XMPP提供程序进行注册:"],"Already have a chat account?":["已经有一个聊天帐户?"],"Log in here":["在这里登录"],"Account Registration:":["注册新账户:"],"Register":["注册"],"Choose a different provider":["选择其他提供商"],"Hold tight, we\'re fetching the registration form…":["请稍等,我们正在获取注册表单…"],"Cancel":["取消"],"The connection has dropped, attempting to reconnect.":["连接已经掉线,正在尝试重新连接。"],"An error occurred while connecting to the chat server.":["连接至聊天服务器时出现问题。"],"The XMPP server did not offer a supported authentication mechanism":["XMPP服务器没有提供我们支持的验证方法"],"Sorry, could not determine upload URL.":["对不起,无法确定文件上传URL。"],"Sorry, could not determine file upload URL.":["抱歉,无法确定文件上传URL。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["对不起,无法成功上传您的文件。服务器的响应: \\"%1$s1\\""],"Sorry, could not succesfully upload your file.":["对不起,无法成功上传您的文件。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["文件的大小为%1$s,超过了服务器允许的最大值%2$s。"],"Smileys and emotions":["笑脸和情绪"],"People":["人"],"Activities":["活动"],"Travel":["旅行"],"Objects":["对象"],"Animals and nature":["动物和自然"],"Food and drink":["食物和饮料"],"Symbols":["符号"],"Flags":["旗帜"],"Stickers":["贴纸"],"This groupchat is now no longer anonymous":["此群聊现在不再是匿名的"],"Your nickname has been automatically set to %1$s":["您的昵称已自动设置为%1$s"],"Your nickname has been changed to %1$s":["您的昵称已更改为%1$s"],"You have been banned from this groupchat":["您已被禁止参加此群聊"],"You have been kicked from this groupchat":["您已被此群聊踢出"],"You have been removed from this groupchat because of an affiliation change":["由于从属关系变动,您已被移出此聊天室"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["您已从此群聊中移除,因为群聊已更改为仅限成员,并且您不是成员"],"You have been removed from this groupchat because the service hosting it is being shut down":["您已从此群聊中移除,因为服务正在关闭"],"Your message was not delivered because you weren\'t allowed to send it.":["由于您未获得允许,您的消息未被发送。"],"Your message was not delivered because you\'re not present in the groupchat.":["由于您不在群组聊天中,您的消息未被发送。"],"You\'re not allowed to register yourself in this groupchat.":["您未被允许在此群组聊天中注册。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["您不可以在此群组聊天中注册,因为它仅限会员。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["无法在此群组聊天中注册您的昵称,它不支持注册。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["无法在此群组聊天中注册您的昵称,提供的数据表单无效。"],"Topic set by %1$s":["由%1$s设置的主题"],"Topic cleared by %1$s":["主题已由%1$s清除"],"%1$s has been banned by %2$s":["%1$s已被%2$s禁止"],"%1$s has been banned":["%1$s已被禁止"],"%1$s\'s nickname has changed":["%1$s的昵称已更改"],"%1$s has been kicked out by %2$s":["%1$s已被%2$s踢出"],"%1$s has been kicked out":["%1$s已被踢出"],"%1$s has been removed because of an affiliation change":["由于从属关系变动,%1$s已被删除"],"%1$s has been removed for not being a member":["%1$s因不是成员而被移除"],"%1$s is no longer an admin of this groupchat":["%1$s不再是此群聊的管理员"],"%1$s is no longer an owner of this groupchat":["%1$s不再是此群聊的所有者"],"%1$s is no longer banned from this groupchat":["%1$s不再被禁止参加此群聊"],"The nickname you chose is reserved or currently in use, please choose a different one.":["您所选择的昵称已被保留或正在使用,请选择一个不同的。"],"Password incorrect":["密码错误"],"You are not on the member list of this groupchat.":["你不在此群组聊天的成员列表中。"],"You have been banned from this groupchat.":["您已被禁止参加此群组聊天。"],"You are not allowed to create new groupchats.":["您无权创建新的小组讨论。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["您的昵称不符合此群组聊天的政策。"],"This groupchat does not (yet) exist.":["此群组聊天尚不存在。"],"This groupchat has reached its maximum number of participants.":["此群组聊天已达到最大参加人数。"],"Remote server not found":["找不到远程服务器"],"The explanation given is: \\"%1$s\\".":["给出的解释是: \\"%1$s\\"。"],"%1$s has invited you to join a groupchat: %2$s":["%1$s 邀请您加入群组聊天:%2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s 邀请您加入群组聊天:%2$s,并且留下了以下原因: \\"%3$s\\""],"Error":["错误"],"Sorry, something went wrong while trying to save your bookmark.":["抱歉,在尝试保存书签时出错。"],"Timeout Error":["超时错误"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["服务器未在允许的时间内返回您的书签。您可以重新加载页面以再次请求它们。"],"My contacts":["我的联系人"],"Pending contacts":["待处理的联系人"],"Contact requests":["联系人请求"],"Ungrouped":["未分组的"],"Sorry, there was an error while trying to add %1$s as a contact.":["抱歉,添加%1$s为联系人时出现了问题。"],"This client does not allow presence subscriptions":["该客户端不允许在线状态订阅"],"Click to hide these contacts":["按此隐藏联系人"],"Unbookmark this groupchat":["取消此群聊的书签"],"Click to open this groupchat":["点击打开此群聊"],"Click to toggle the bookmarks list":["单击以切换书签列表"],"Bookmarks":["书签"],"Bookmark this groupchat":["将此群聊添加书签"],"Would you like this groupchat to be automatically joined upon startup?":["您是否想在程序启动时自动加入这个群聊?"],"The name for this bookmark:":["此书签的名称:"],"What should your nickname for this groupchat be?":["您的群昵称是什么?"],"Save":["保存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["确实要删除书签 \\"%1$s\\" 吗?"],"Close":["关闭"],"OK":["确定"],"Image: ":[""],"Edit":[""],"Retract":[""],"Message versions":["消息版本"],"Retry":[""],"Uploading file:":["正在上传文件:"],"This message has been edited":["这条消息已被编辑"],"Show more":["显示更多"],"No message history available.":["无消息记录。"],"Search results":["搜索结果"],"Search":["搜索"],"Send the message":["发送此消息"],"Start a call":["开始语音通话"],"Message characters remaining":["剩余消息字符"],"Choose a file to send":["选择要发送的文件"],"The User\'s Profile Image":["用户头像"],"Trusted":["已信任"],"Untrusted":["未信任"],"OMEMO Fingerprints":["OMEMO 指纹"],"No OMEMO-enabled devices found":["找不到启用了OMEMO的设备"],"Remove as contact":["删除联系人"],"XMPP Address":["XMPP 地址"],"Email":["电子邮件"],"Nickname":["昵称"],"Refresh":["刷新"],"Role":["角色"],"URL":["URL"],"%1$s is typing":["%1$s正在输入"],"%1$s has stopped typing":["%1$s已停止输入"],"%1$s has gone away":["%1$s已经离开"],"Remove messages":["删除信息"],"Write in the third person":["以第三人称输入"],"Show this menu":["显示此菜单"],"Hidden message":["隐藏的信息"],"Message":["消息"],"Optional hint":["可选提示"],"You have unread messages":["你有未读信息"],"Details":["详细"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["请注意,其他XMPP/Jabber客户端(和服务器)可能尚不支持撤消,并且此消息可能不会在所有地方删除。"],"Confirm":["确认"],"You have an unsent message which will be lost if you continue. Are you sure?":["您有一条未发送的消息,如果继续,它将丢失。你确定吗?"],"Sorry, something went wrong while trying to refresh":["抱歉,尝试刷新时出错"],"Are you sure you want to remove this contact?":["你确定要删除此联系人吗?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["抱歉,删除%1$s为联系人时出现了问题。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["为提高性能,我们在浏览器里缓存你的数据。如果这是个公共电脑,或者你想退出登录时自动删除你的数据,请取消勾选此复选框。很重要的一点是如果你不明确点击退出登录,一些数据还会留在缓存里。当使用一个不受信任的设备时,OMEMO 加密将不可用。"],"This is a trusted device":["这是一个受信任的设备"],"Create an account":["创建一个帐户"],"Don\'t have a chat account?":["没有聊天帐号?"],"Log in":["登录"],"Disconnected":["断开连接"],"Click here to log in anonymously":["按此以匿名登录"],"Username":["用户名"],"user@domain":["用户@域名"],"Please enter a valid XMPP address":["请输入有效的XMPP地址"],"Toggle chat":["切换聊天"],"Click to restore this chat":["点击恢复此聊天"],"Minimized":["最小化"],"This field is required":["这个字段是必填的"],"Join":["加入"],"Enter a new Groupchat":["输入新的群聊"],"name@conference.example.org":["name@conference.example.org"],"Groupchat address":["群聊地址"],"Invite":["邀请"],"Server address":["服务器地址"],"Show more information on this groupchat":["更多群信息"],"Description:":["描述:"],"Groupchat Address (JID):":["群聊地址(jid):"],"Participants:":["参与者:"],"Requires authentication":["需要身份验证"],"Hidden":["隐藏"],"Requires an invitation":["需要邀请"],"Moderated":["受监管"],"Open":["公开"],"Public":["公开"],"Semi-anonymous":["半匿名"],"Temporary":["临时"],"conference.example.org":["conference.example.org"],"Change role":["更改角色"],"Reason":["原因"],"New affiliation":["新的隶属关系"],"Moderator Tools":["管理工具"],"Type here to filter the search results":["在此处键入以过滤搜索结果"],"Affiliation changed":["从属关系已更改"],"Topic":["话题"],"Topic author":["话题作者"],"Groupchat address (JID)":["群聊地址(JID)"],"Message archiving":["消息存档"],"Messages are archived on the server":["消息在服务器上存档"],"Description":["描述"],"Features":["功能"],"This groupchat is not publicly searchable":["此群聊已无法被公开搜索到"],"This groupchat is restricted to members only":["此群聊仅限特定成员"],"Members only":["仅限成员"],"Participants entering this groupchat need to request permission to write":["加入此群聊的成员在发言前需要先获得发言权限"],"Name":["名称"],"This groupchat does not require a password upon entry":["加入此群聊无需密码"],"No password required":["不需要密码"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["所有此群聊成员均可看到你的 XMPP 地址"],"Not moderated":["无监管"],"Participants entering this groupchat can write right away":["加入此群聊的成员可自由自在地发言"],"Online users":["在线用户"],"Anyone can join this groupchat":["任何人可加入此群聊"],"This groupchat requires a password before entry":["加入此群聊需要输入一个密码"],"Password protected":["密码保护"],"Persistent":["永久保存"],"This groupchat persists even if it\'s unoccupied":["即使没人加入,此群聊依旧一直存在"],"Only moderators can see your XMPP address":["仅群聊的管理员可看到你的 XMPP 地址"],"This groupchat will disappear once the last person leaves":["当所有人都退出时,此群聊将被删除"],"This groupchat is publicly searchable":["此群聊可被公开搜索到"],"Groupchat info for %1$s":["%1$s的群聊信息"],"You\'re not allowed to send messages in this room":["你被禁止在此聊天室发言"],"The conversation has moved. Click below to enter.":["聊天已转移,点击前往。"],"This groupchat no longer exists":["这个聊天室已被删除"],"Enter groupchat":["输入聊天室"],"Please choose your nickname":["轻选择你的昵称"],"This groupchat requires a password":["此聊天室需要密码"],"Password: ":["密码: "],"Submit":["提交"],"This user can send messages in this groupchat.":["此用户可以在此群聊中发送消息。"],"This user can NOT send messages in this groupchat.":["此用户不能在此群组聊天中发送消息。"],"Owner":["所有者"],"Admin":["管理员"],"Member":["成员"],"Moderator":["管理员"],"Visitor":["访客"],"Click to mention %1$s in your message.":["单击以在您的消息中提及%1$s。"],"Participants":["参加者"],"%1$s has entered the groupchat":["%1$s已进入聊天室"],"%1$s has left the groupchat":["%1$s已离开聊天室"],"%1$s is now a moderator":["%1$s目前是主持人"],"%1$s has been muted":["%1$s已被禁言"],"%1$s and %2$s":["%1$s和%2$s"],"Change user role to participant":["更改用户角色到参与者"],"Kick user from groupchat":["从聊天室踢出用户"],"Grant membership to a user":["向用户授予成员资格"],"Opens up the moderator tools GUI":["打开主持人工具图形用户界面"],"Remove user\'s ability to post messages":["删除用户发布消息的能力"],"Change your nickname":["更改你的昵称"],"Grant moderator role to user":["向用户授予主持人(角色)权限"],"Grant ownership of this groupchat":["授予此聊天室的所有权"],"Set groupchat subject":["设置群聊主题"],"Set groupchat subject (alias for /subject)":["设置群聊主题(主题的别名)"],"Sorry, you\'re not allowed to retract this message":["抱歉,您不能撤消此消息"],"Hide topic":["隐藏主题"],"Leave":["离开"],"Hide the list of participants":["隐藏参与者列表"],"Forbidden: you do not have the necessary affiliation in order to do that.":["禁止: 你没有必要的从属关系来执行此操作。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["错误:“%1$s”命令有两个参数,用户的昵称和原因(可选)。"],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["错误:非法的参数个数"],"This action was done by %1$s.":["此操作已被%1$s完成。"],"The reason given is: \\"%1$s\\".":["给出的原因是:“%1$s”。"],"Add a new groupchat":["添加新的群组聊天"],"Announcements":["公告"],"Notification from %1$s":["来自%1$s的通知"],"%1$s says":["%1$s说"],"has gone offline":["已离线"],"has gone away":["已经离开"],"is busy":["在忙碌"],"has come online":["已经上网"],"wants to be your contact":["希望成为您的联系人"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["关于"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["登出"],"Click to change your chat status":["按此更改你的聊天状态"],"Show details about this chat client":["显示有关此聊天客户端的详细信息"],"Your avatar image":["您的头像图片"],"Checkbox for selecting the following fingerprint":["用于选择以下指纹的复选框"],"Device without a fingerprint":["没有指纹的设备"],"Other OMEMO-enabled devices":["其他启用了 OMEMO 加密的设备"],"Checkbox to select fingerprints of all other OMEMO devices":["复选框以选择所有其他OMEMO设备的指纹"],"Remove checked devices and close":["删除勾选的设备并关闭"],"Select all":["全选"],"This device\'s OMEMO fingerprint":["该设备的OMEMO指纹"],"Generate new keys and fingerprint":["生成新密钥和指纹"],"Your Profile":["您的个人资料"],"XMPP Address (JID)":["XMPP地址(JID)"],"Save and close":["保存并关闭"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["使用逗号分隔多个角色。您的角色显示在聊天消息中您的姓名旁边。"],"OMEMO":["OMEMO"],"You can check your browser\'s developer console for any error output.":["您可以检查浏览器的开发者控制台是否有任何错误输出。"],"Away":["离开"],"Busy":["忙碌"],"Custom status":["个性签名"],"Offline":["离线"],"Online":["在线"],"I am %1$s":["我正%1$s"],"online":["在线"],"busy":["忙碌"],"away for long":["长期离开"],"away":["离开"],"offline":["离线"],"Sorry, could not decrypt a received OMEMO message due to an error.":["抱歉,由于错误,无法解密收到的OMEMO消息。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s似乎没有支持OMEMO的客户端。在此群组聊天中将不再可能进行加密的聊天。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["无法使用端到端加密,因为%1$s使用的客户端不支持OMEMO。"],"Messages are being sent in plaintext":["消息将以纯文本发送"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["您确定要生成新的OMEMO密钥吗?这将删除您的旧密钥,并且所有以前加密的消息将不再在此设备上解密。"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["抱歉,我们无法发送加密的消息,因为找不到%1$s的远程服务器"],"Unable to send an encrypted message due to an unexpected error.":["由于意外错误,无法发送加密消息。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["抱歉,没有找到我们可以向其发送OMEMO加密消息的设备。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["您的客户端似乎不支持这一条 OMEMO 加密消息。更多信息可以在 https://conversations.im/omemo 上找到"]," e.g. conversejs.org":[" 例如conversejs.org"],"Fetch registration form":["获取注册表单"],"Tip: A list of public XMPP providers is available":["提示:提供了公共 XMPP 供应商列表"],"here":["这里"],"Sorry, we\'re unable to connect to your chosen provider.":["抱歉,我们无法连接到您选择的提供商。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["与“%1$s”建立连接时出了点问题。您确定它存在吗?"],"Registered successfully":["注册成功"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["提供者拒绝了您的注册尝试。请检查您输入的內容是否正确。"],"Leave this groupchat":["离开此群聊"],"Click to toggle the list of open groupchats":["单击以切换打开的群组聊天的列表"],"Open Groupchats":["打开群组聊天"],"Add":["添加"],"This contact is busy":["此联系人正在忙碌"],"This contact is online":["此联系人在线"],"This contact is offline":["此联系人不在线"],"This contact is unavailable":["此联系人不可用"],"This contact is away for an extended period":["此联系人已离开了一段长时间"],"This contact is away":["此联系人已离开"],"Contact name":["联系人名称"],"Optional nickname":["可选昵称"],"Sorry, could not find a contact with that name":["抱歉,找不到具有该姓名的联系人"],"Filter":["筛选"],"Filter by group name":["按组名过滤"],"Filter by status":["按状态过滤"],"Any":["任意"],"Unread":["未读"],"Chatty":["经常联系"],"Extended Away":["长期离开"],"Click to remove %1$s as a contact":["按此删除%1$s为联络人"],"Click to accept the contact request from %1$s":["按此接受%1$s的联系人请求"],"Click to decline the contact request from %1$s":["按此拒绝%1$s的联系人请求"],"Click to chat with %1$s (XMPP address: %2$s)":["点击与%1$s聊天(XMPP地址:%2$s)"],"Are you sure you want to decline this contact request?":["你确定要拒绝此联系人请求吗?"],"Contacts":["联系人"],"Add a contact":["添加联系人"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{542:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"zh_CN"},"Create your account":["创建你的账户"],"Please enter the XMPP provider to register with:":["请输入XMPP提供程序进行注册:"],"Already have a chat account?":["已经有一个聊天帐户?"],"Log in here":["在这里登录"],"Account Registration:":["注册新账户:"],"Register":["注册"],"Choose a different provider":["选择其他提供商"],"Hold tight, we\'re fetching the registration form…":["请稍等,我们正在获取注册表单…"],"Cancel":["取消"],"The connection has dropped, attempting to reconnect.":["连接已经掉线,正在尝试重新连接。"],"An error occurred while connecting to the chat server.":["连接至聊天服务器时出现问题。"],"The XMPP server did not offer a supported authentication mechanism":["XMPP服务器没有提供我们支持的验证方法"],"Sorry, could not determine upload URL.":["对不起,无法确定文件上传URL。"],"Sorry, could not determine file upload URL.":["抱歉,无法确定文件上传URL。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["对不起,无法成功上传您的文件。服务器的响应: \\"%1$s1\\""],"Sorry, could not succesfully upload your file.":["对不起,无法成功上传您的文件。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["文件的大小为%1$s,超过了服务器允许的最大值%2$s。"],"Smileys and emotions":["笑脸和情绪"],"People":["人"],"Activities":["活动"],"Travel":["旅行"],"Objects":["对象"],"Animals and nature":["动物和自然"],"Food and drink":["食物和饮料"],"Symbols":["符号"],"Flags":["旗帜"],"Stickers":["贴纸"],"This groupchat is now no longer anonymous":["此群聊现在不再是匿名的"],"Your nickname has been automatically set to %1$s":["您的昵称已自动设置为%1$s"],"Your nickname has been changed to %1$s":["您的昵称已更改为%1$s"],"You have been banned from this groupchat":["您已被禁止参加此群聊"],"You have been kicked from this groupchat":["您已被此群聊踢出"],"You have been removed from this groupchat because of an affiliation change":["由于从属关系变动,您已被移出此聊天室"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["您已从此群聊中移除,因为群聊已更改为仅限成员,并且您不是成员"],"You have been removed from this groupchat because the service hosting it is being shut down":["您已从此群聊中移除,因为服务正在关闭"],"Your message was not delivered because you weren\'t allowed to send it.":["由于您未获得允许,您的消息未被发送。"],"Your message was not delivered because you\'re not present in the groupchat.":["由于您不在群组聊天中,您的消息未被发送。"],"You\'re not allowed to register yourself in this groupchat.":["您未被允许在此群组聊天中注册。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["您不可以在此群组聊天中注册,因为它仅限会员。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["无法在此群组聊天中注册您的昵称,它不支持注册。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["无法在此群组聊天中注册您的昵称,提供的数据表单无效。"],"Topic set by %1$s":["由%1$s设置的主题"],"Topic cleared by %1$s":["主题已由%1$s清除"],"%1$s has been banned by %2$s":["%1$s已被%2$s禁止"],"%1$s has been banned":["%1$s已被禁止"],"%1$s\'s nickname has changed":["%1$s的昵称已更改"],"%1$s has been kicked out by %2$s":["%1$s已被%2$s踢出"],"%1$s has been kicked out":["%1$s已被踢出"],"%1$s has been removed because of an affiliation change":["由于从属关系变动,%1$s已被删除"],"%1$s has been removed for not being a member":["%1$s因不是成员而被移除"],"%1$s is no longer an admin of this groupchat":["%1$s不再是此群聊的管理员"],"%1$s is no longer an owner of this groupchat":["%1$s不再是此群聊的所有者"],"%1$s is no longer banned from this groupchat":["%1$s不再被禁止参加此群聊"],"The nickname you chose is reserved or currently in use, please choose a different one.":["您所选择的昵称已被保留或正在使用,请选择一个不同的。"],"Password incorrect":["密码错误"],"You are not on the member list of this groupchat.":["你不在此群组聊天的成员列表中。"],"You have been banned from this groupchat.":["您已被禁止参加此群组聊天。"],"You are not allowed to create new groupchats.":["您无权创建新的小组讨论。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["您的昵称不符合此群组聊天的政策。"],"This groupchat does not (yet) exist.":["此群组聊天尚不存在。"],"This groupchat has reached its maximum number of participants.":["此群组聊天已达到最大参加人数。"],"Remote server not found":["找不到远程服务器"],"The explanation given is: \\"%1$s\\".":["给出的解释是: \\"%1$s\\"。"],"%1$s has invited you to join a groupchat: %2$s":["%1$s 邀请您加入群组聊天:%2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s 邀请您加入群组聊天:%2$s,并且留下了以下原因: \\"%3$s\\""],"Error":["错误"],"Sorry, something went wrong while trying to save your bookmark.":["抱歉,在尝试保存书签时出错。"],"Timeout Error":["超时错误"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["服务器未在允许的时间内返回您的书签。您可以重新加载页面以再次请求它们。"],"My contacts":["我的联系人"],"Pending contacts":["待处理的联系人"],"Contact requests":["联系人请求"],"Ungrouped":["未分组的"],"Sorry, there was an error while trying to add %1$s as a contact.":["抱歉,添加%1$s为联系人时出现了问题。"],"This client does not allow presence subscriptions":["该客户端不允许在线状态订阅"],"Click to hide these contacts":["按此隐藏联系人"],"Unbookmark this groupchat":["取消此群聊的书签"],"Click to open this groupchat":["点击打开此群聊"],"Click to toggle the bookmarks list":["单击以切换书签列表"],"Bookmarks":["书签"],"Bookmark this groupchat":["将此群聊添加书签"],"Would you like this groupchat to be automatically joined upon startup?":["您是否想在程序启动时自动加入这个群聊?"],"The name for this bookmark:":["此书签的名称:"],"What should your nickname for this groupchat be?":["您的群昵称是什么?"],"Save":["保存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["确实要删除书签 \\"%1$s\\" 吗?"],"Close":["关闭"],"OK":["确定"],"Image: ":[""],"Edit":[""],"Retract":[""],"Message versions":["消息版本"],"Retry":[""],"Uploading file:":["正在上传文件:"],"This message has been edited":["这条消息已被编辑"],"Show more":["显示更多"],"No message history available.":["无消息记录。"],"Search results":["搜索结果"],"Search":["搜索"],"Send the message":["发送此消息"],"Start a call":["开始语音通话"],"Message characters remaining":["剩余消息字符"],"Choose a file to send":["选择要发送的文件"],"The User\'s Profile Image":["用户头像"],"Trusted":["已信任"],"Untrusted":["未信任"],"OMEMO Fingerprints":["OMEMO 指纹"],"No OMEMO-enabled devices found":["找不到启用了OMEMO的设备"],"Remove as contact":["删除联系人"],"XMPP Address":["XMPP 地址"],"Email":["电子邮件"],"Nickname":["昵称"],"Refresh":["刷新"],"Role":["角色"],"URL":["URL"],"%1$s is typing":["%1$s正在输入"],"%1$s has stopped typing":["%1$s已停止输入"],"%1$s has gone away":["%1$s已经离开"],"Remove messages":["删除信息"],"Write in the third person":["以第三人称输入"],"Show this menu":["显示此菜单"],"Hidden message":["隐藏的信息"],"Message":["消息"],"Optional hint":["可选提示"],"You have unread messages":["你有未读信息"],"Details":["详细"],"Sorry, the connection has been lost, and your message could not be sent":[""],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["请注意,其他XMPP/Jabber客户端(和服务器)可能尚不支持撤消,并且此消息可能不会在所有地方删除。"],"Confirm":["确认"],"You have an unsent message which will be lost if you continue. Are you sure?":["您有一条未发送的消息,如果继续,它将丢失。你确定吗?"],"Sorry, something went wrong while trying to refresh":["抱歉,尝试刷新时出错"],"Are you sure you want to remove this contact?":["你确定要删除此联系人吗?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["抱歉,删除%1$s为联系人时出现了问题。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["为提高性能,我们在浏览器里缓存你的数据。如果这是个公共电脑,或者你想退出登录时自动删除你的数据,请取消勾选此复选框。很重要的一点是如果你不明确点击退出登录,一些数据还会留在缓存里。当使用一个不受信任的设备时,OMEMO 加密将不可用。"],"This is a trusted device":["这是一个受信任的设备"],"Create an account":["创建一个帐户"],"Don\'t have a chat account?":["没有聊天帐号?"],"Log in":["登录"],"Disconnected":["断开连接"],"Click here to log in anonymously":["按此以匿名登录"],"Username":["用户名"],"user@domain":["用户@域名"],"Please enter a valid XMPP address":["请输入有效的XMPP地址"],"Toggle chat":["切换聊天"],"Click to restore this chat":["点击恢复此聊天"],"Minimized":["最小化"],"This user can send messages in this groupchat.":["此用户可以在此群聊中发送消息。"],"This user can NOT send messages in this groupchat.":["此用户不能在此群组聊天中发送消息。"],"Owner":["所有者"],"Admin":["管理员"],"Member":["成员"],"Moderator":["管理员"],"Visitor":["访客"],"Click to mention %1$s in your message.":["单击以在您的消息中提及%1$s。"],"Participants":["参加者"],"This field is required":["这个字段是必填的"],"Join":["加入"],"Enter a new Groupchat":["输入新的群聊"],"name@conference.example.org":["name@conference.example.org"],"Groupchat address":["群聊地址"],"Invite":["邀请"],"Server address":["服务器地址"],"Show more information on this groupchat":["更多群信息"],"Description:":["描述:"],"Groupchat Address (JID):":["群聊地址(jid):"],"Participants:":["参与者:"],"Requires authentication":["需要身份验证"],"Hidden":["隐藏"],"Requires an invitation":["需要邀请"],"Moderated":["受监管"],"Open":["公开"],"Public":["公开"],"Semi-anonymous":["半匿名"],"Temporary":["临时"],"conference.example.org":["conference.example.org"],"Change role":["更改角色"],"Reason":["原因"],"New affiliation":["新的隶属关系"],"Moderator Tools":["管理工具"],"Type here to filter the search results":["在此处键入以过滤搜索结果"],"Affiliation changed":["从属关系已更改"],"Topic":["话题"],"Topic author":["话题作者"],"Groupchat address (JID)":["群聊地址(JID)"],"Message archiving":["消息存档"],"Messages are archived on the server":["消息在服务器上存档"],"Description":["描述"],"Features":["功能"],"This groupchat is not publicly searchable":["此群聊已无法被公开搜索到"],"This groupchat is restricted to members only":["此群聊仅限特定成员"],"Members only":["仅限成员"],"Participants entering this groupchat need to request permission to write":["加入此群聊的成员在发言前需要先获得发言权限"],"Name":["名称"],"This groupchat does not require a password upon entry":["加入此群聊无需密码"],"No password required":["不需要密码"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["所有此群聊成员均可看到你的 XMPP 地址"],"Not moderated":["无监管"],"Participants entering this groupchat can write right away":["加入此群聊的成员可自由自在地发言"],"Online users":["在线用户"],"Anyone can join this groupchat":["任何人可加入此群聊"],"This groupchat requires a password before entry":["加入此群聊需要输入一个密码"],"Password protected":["密码保护"],"Persistent":["永久保存"],"This groupchat persists even if it\'s unoccupied":["即使没人加入,此群聊依旧一直存在"],"Only moderators can see your XMPP address":["仅群聊的管理员可看到你的 XMPP 地址"],"This groupchat will disappear once the last person leaves":["当所有人都退出时,此群聊将被删除"],"This groupchat is publicly searchable":["此群聊可被公开搜索到"],"Groupchat info for %1$s":["%1$s的群聊信息"],"You\'re not allowed to send messages in this room":["你被禁止在此聊天室发言"],"The conversation has moved. Click below to enter.":["聊天已转移,点击前往。"],"This groupchat no longer exists":["这个聊天室已被删除"],"Enter groupchat":["输入聊天室"],"Please choose your nickname":["轻选择你的昵称"],"This groupchat requires a password":["此聊天室需要密码"],"Password: ":["密码: "],"Submit":["提交"],"%1$s has entered the groupchat":["%1$s已进入聊天室"],"%1$s has left the groupchat":["%1$s已离开聊天室"],"%1$s is now a moderator":["%1$s目前是主持人"],"%1$s has been muted":["%1$s已被禁言"],"%1$s and %2$s":["%1$s和%2$s"],"Change user role to participant":["更改用户角色到参与者"],"Kick user from groupchat":["从聊天室踢出用户"],"Grant membership to a user":["向用户授予成员资格"],"Opens up the moderator tools GUI":["打开主持人工具图形用户界面"],"Remove user\'s ability to post messages":["删除用户发布消息的能力"],"Change your nickname":["更改你的昵称"],"Grant moderator role to user":["向用户授予主持人(角色)权限"],"Grant ownership of this groupchat":["授予此聊天室的所有权"],"Set groupchat subject":["设置群聊主题"],"Set groupchat subject (alias for /subject)":["设置群聊主题(主题的别名)"],"Sorry, you\'re not allowed to retract this message":["抱歉,您不能撤消此消息"],"Hide topic":["隐藏主题"],"Leave":["离开"],"Hide the list of participants":["隐藏参与者列表"],"Forbidden: you do not have the necessary affiliation in order to do that.":["禁止: 你没有必要的从属关系来执行此操作。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["错误:“%1$s”命令有两个参数,用户的昵称和原因(可选)。"],"name@example.org":["name@example.org"],"Optional XMPP address for a new groupchat that replaces this one":[""],"Error: invalid number of arguments":["错误:非法的参数个数"],"This action was done by %1$s.":["此操作已被%1$s完成。"],"The reason given is: \\"%1$s\\".":["给出的原因是:“%1$s”。"],"Add a new groupchat":["添加新的群组聊天"],"Announcements":["公告"],"Notification from %1$s":["来自%1$s的通知"],"%1$s says":["%1$s说"],"has gone offline":["已离线"],"has gone away":["已经离开"],"is busy":["在忙碌"],"has come online":["已经上网"],"wants to be your contact":["希望成为您的联系人"],"Hide":[""],"Execute":[""],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"List available commands":[""],"The specified entity doesn\'t support ad-hoc commands":[""],"About":["关于"],"Commands":[""],"Settings":[""],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":[""],"%1$s Translate %2$s it into your own language":[""],"Log out":["登出"],"Click to change your chat status":["按此更改你的聊天状态"],"Show details about this chat client":["显示有关此聊天客户端的详细信息"],"Your avatar image":["您的头像图片"],"Checkbox for selecting the following fingerprint":["用于选择以下指纹的复选框"],"Device without a fingerprint":["没有指纹的设备"],"Other OMEMO-enabled devices":["其他启用了 OMEMO 加密的设备"],"Checkbox to select fingerprints of all other OMEMO devices":["复选框以选择所有其他OMEMO设备的指纹"],"Remove checked devices and close":["删除勾选的设备并关闭"],"Select all":["全选"],"This device\'s OMEMO fingerprint":["该设备的OMEMO指纹"],"Generate new keys and fingerprint":["生成新密钥和指纹"],"Your Profile":["您的个人资料"],"XMPP Address (JID)":["XMPP地址(JID)"],"Save and close":["保存并关闭"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["使用逗号分隔多个角色。您的角色显示在聊天消息中您的姓名旁边。"],"OMEMO":["OMEMO"],"You can check your browser\'s developer console for any error output.":["您可以检查浏览器的开发者控制台是否有任何错误输出。"],"Away":["离开"],"Busy":["忙碌"],"Custom status":["个性签名"],"Offline":["离线"],"Online":["在线"],"I am %1$s":["我正%1$s"],"online":["在线"],"busy":["忙碌"],"away for long":["长期离开"],"away":["离开"],"offline":["离线"],"Sorry, could not decrypt a received OMEMO message due to an error.":["抱歉,由于错误,无法解密收到的OMEMO消息。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s似乎没有支持OMEMO的客户端。在此群组聊天中将不再可能进行加密的聊天。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["无法使用端到端加密,因为%1$s使用的客户端不支持OMEMO。"],"Messages are being sent in plaintext":["消息将以纯文本发送"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":[""],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":[""],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["抱歉,我们无法发送加密的消息,因为找不到%1$s的远程服务器"],"Unable to send an encrypted message due to an unexpected error.":["由于意外错误,无法发送加密消息。"],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["您确定要生成新的OMEMO密钥吗?这将删除您的旧密钥,并且所有以前加密的消息将不再在此设备上解密。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["抱歉,没有找到我们可以向其发送OMEMO加密消息的设备。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["您的客户端似乎不支持这一条 OMEMO 加密消息。更多信息可以在 https://conversations.im/omemo 上找到"]," e.g. conversejs.org":[" 例如conversejs.org"],"Fetch registration form":["获取注册表单"],"Tip: A list of public XMPP providers is available":["提示:提供了公共 XMPP 供应商列表"],"here":["这里"],"Sorry, we\'re unable to connect to your chosen provider.":["抱歉,我们无法连接到您选择的提供商。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":[""],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["与“%1$s”建立连接时出了点问题。您确定它存在吗?"],"Registered successfully":["注册成功"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["提供者拒绝了您的注册尝试。请检查您输入的內容是否正确。"],"Leave this groupchat":["离开此群聊"],"Click to toggle the list of open groupchats":["单击以切换打开的群组聊天的列表"],"Open Groupchats":["打开群组聊天"],"Add":["添加"],"This contact is busy":["此联系人正在忙碌"],"This contact is online":["此联系人在线"],"This contact is offline":["此联系人不在线"],"This contact is unavailable":["此联系人不可用"],"This contact is away for an extended period":["此联系人已离开了一段长时间"],"This contact is away":["此联系人已离开"],"Contact name":["联系人名称"],"Optional nickname":["可选昵称"],"Sorry, could not find a contact with that name":["抱歉,找不到具有该姓名的联系人"],"Filter":["筛选"],"Filter by group name":["按组名过滤"],"Filter by status":["按状态过滤"],"Any":["任意"],"Unread":["未读"],"Chatty":["经常联系"],"Extended Away":["长期离开"],"Click to remove %1$s as a contact":["按此删除%1$s为联络人"],"Click to accept the contact request from %1$s":["按此接受%1$s的联系人请求"],"Click to decline the contact request from %1$s":["按此拒绝%1$s的联系人请求"],"Click to chat with %1$s (XMPP address: %2$s)":["点击与%1$s聊天(XMPP地址:%2$s)"],"Are you sure you want to decline this contact request?":["你确定要拒绝此联系人请求吗?"],"Contacts":["联系人"],"Add a contact":["添加联系人"]}}}')}}]);
 //# sourceMappingURL=zh_CN-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/conversejs/locales/zh_TW-LC_MESSAGES-converse-po.js b/src/conversejs/locales/zh_TW-LC_MESSAGES-converse-po.js
index e3efc8cc0631a0cccd0dd95cd7c8aef8b6cf09d8..8beff2fc1d924101f0c266e8f2baf5699200cb16 100644
--- a/src/conversejs/locales/zh_TW-LC_MESSAGES-converse-po.js
+++ b/src/conversejs/locales/zh_TW-LC_MESSAGES-converse-po.js
@@ -1,2 +1,2 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{454:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"zh_TW"},"Create your account":["建立您的帳號"],"Please enter the XMPP provider to register with:":["請輸入要註冊的 XMPP 供應商:"],"Already have a chat account?":["已經擁有聊天帳號?"],"Log in here":["在此登入"],"Account Registration:":["帳號註冊:"],"Register":["註冊"],"Choose a different provider":["選擇一個不同的供應商"],"Hold tight, we\'re fetching the registration form…":["稍等,我們正在取得註冊表單…"],"Cancel":["取消"],"The connection has dropped, attempting to reconnect.":["連線已中斷,嘗試重新連線。"],"An error occurred while connecting to the chat server.":["連線到聊天伺服器時遭遇錯誤。"],"Your XMPP address and/or password is incorrect. Please try again.":["您的 XMPP 地址或密碼錯誤。請重試。"],"Sorry, we could not connect to the XMPP host with domain: %1$s":["抱歉,我們無法使用域名「%1$s」來連線 XMPP 主機"],"The XMPP server did not offer a supported authentication mechanism":["此 XMPP 伺服器不提供支援的認證機制"],"Sorry, could not determine upload URL.":["抱歉,無法確定上傳 URL。"],"Sorry, could not determine file upload URL.":["抱歉,無法確定檔案上傳 URL。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["抱歉,您的檔案上傳不成功。您的伺服器回應:\\"%1$s\\""],"Sorry, could not succesfully upload your file.":["抱歉,您的檔案上傳不成功。"],"You\'re not allowed to retract your message.":["您不被允許收回這條訊息。"],"Sorry, an error occurred while trying to retract your message.":["抱歉,在收回訊息時出錯了。"],"You\'re not allowed to send a message.":["您不被允許傳送訊息。"],"Sorry, an error occurred while trying to send your message.":["抱歉,送出訊息時出錯了。"],"Sorry, looks like file upload is not supported by your server.":["抱歉,看來您的伺服器不支援檔案上傳。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["您的檔案大小 %1$s 超過了您的伺服器限制 %2$s。"],"Smileys and emotions":["表情"],"People":["人"],"Activities":["活動"],"Travel":["旅行"],"Objects":["物件"],"Animals and nature":["動物與自然"],"Food and drink":["飲食"],"Symbols":["符號"],"Flags":["旗幟"],"Stickers":["貼紙"],"This groupchat is not anonymous":["這間聊天室不是匿名的"],"This groupchat now shows unavailable members":["這間聊天室現在會顯示不可用的成員"],"This groupchat does not show unavailable members":["這間聊天室不會顯示不可用的成員"],"The groupchat configuration has changed":["聊天室配置已變更"],"Groupchat logging is now enabled":["現已啟用聊天室聊天紀錄"],"Groupchat logging is now disabled":["現已禁用聊天室聊天紀錄"],"This groupchat is now no longer anonymous":["這間聊天室現在不再匿名"],"This groupchat is now semi-anonymous":["這間聊天室現在是半匿名"],"This groupchat is now fully-anonymous":["這間聊天室現在完全匿名"],"A new groupchat has been created":["建立了新的聊天室"],"Your nickname has been automatically set to %1$s":["您的暱稱已自動設置爲 %1$s"],"Your nickname has been changed to %1$s":["您的暱稱已變更爲 %1$s"],"You have been banned from this groupchat":["您被禁止加入這間聊天室"],"You have exited this groupchat due to a technical problem":["由於技術問題,您已經被移出這間聊天室"],"You have been kicked from this groupchat":["您被踢出了這間聊天室"],"You have been removed from this groupchat because of an affiliation change":["由於身份的變動,您已經被移除出這間聊天室"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["您已經被移除出這間聊天室,因爲聊天室已變為僅限會員,而您不是會員"],"You have been removed from this groupchat because the service hosting it is being shut down":["您已經被移除出這間聊天室,因爲託管它的服務正在關閉"],"Your retraction was not delivered because you\'re not present in the groupchat.":["您的訊息未被收回,因爲您不在聊天室內。"],"Your message was not delivered because you weren\'t allowed to send it.":["您的訊息未被傳送,因爲您未被允許送出訊息。"],"Your message was not delivered because you\'re not present in the groupchat.":["您的訊息未被傳送,因爲您不在聊天室內。"],"A timeout happened while while trying to retract your message.":["收回訊息逾時。"],"You\'re not allowed to register yourself in this groupchat.":["您未被允許在這間聊天室登記。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["您未被允許在這間聊天室登記,因爲它僅限會員。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["您的暱稱無法在這間聊天室登記,因爲這間聊天室不支援登記暱稱。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["您的暱稱無法在這間聊天室登記,因爲它包含無效格式。"],"Topic set by %1$s":["%1$s 設定了話題"],"Topic cleared by %1$s":["%1$s 清除了話題"],"%1$s has been banned by %2$s":["%1$s 已經被 %2$s 封鎖"],"%1$s has been banned":["%1$s 已經被封鎖"],"%1$s\'s nickname has changed":["%1$s 的暱稱已變更"],"%1$s has been kicked out by %2$s":["%1$s 已經被 %2$s 踢出聊天室"],"%1$s has been kicked out":["%1$s 已經被踢出聊天室"],"%1$s has been removed because of an affiliation change":["由於身份的變動,%1$s 已經被移除"],"%1$s has been removed for not being a member":["由於不是會員,%1$s 已經被移除"],"%1$s is no longer an admin of this groupchat":["%1$s 不再是這間聊天室的管理員"],"%1$s is no longer an owner of this groupchat":["%1$s 不再是這間聊天室的主人"],"%1$s is no longer banned from this groupchat":["%1$s 不再被這間聊天室封鎖"],"%1$s is no longer a member of this groupchat":["%1$s 不再是這間聊天室的會員"],"%1$s is now a member of this groupchat":["%1$s 現在成爲這間聊天室的會員"],"%1$s is now an %2$s of this groupchat":["%1$s 現在成爲這間聊天室的 %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["您所揀選的暱稱已經被保留或是已經有人使用,請換一個暱稱。"],"Password incorrect":["密碼不正確"],"You are not on the member list of this groupchat.":["您並非這間聊天室成員。"],"You have been banned from this groupchat.":["您被禁止加入這間聊天室。"],"You are not allowed to create new groupchats.":["您不被允許建立聊天室。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["您的暱稱不符合這間聊天室標準。"],"This groupchat does not (yet) exist.":["這間聊天室不存在。"],"This groupchat has reached its maximum number of participants.":["這間聊天室人數已滿。"],"Remote server not found":["找不到遠端伺服器"],"The explanation given is: \\"%1$s\\".":["得到的回應是「%1$s」。"],"%1$s has invited you to join a groupchat: %2$s":["%1$s 邀請您加入聊天室:%2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s 邀請您加入聊天室:%2$s,並且留下原因「%3$s」"],"Error":["錯誤"],"Sorry, something went wrong while trying to save your bookmark.":["抱歉,在嘗試儲存書籤時出錯。"],"Timeout Error":["逾時錯誤"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["伺服器未在響應時間內返回書籤。您可以嘗試重新載入本頁面。"],"My contacts":["聯絡人"],"Pending contacts":["已送出的聯絡人請求"],"Contact requests":["新增聯絡人請求"],"Ungrouped":["未分組"],"New messages":["新訊息"],"Sorry, there was an error while trying to add %1$s as a contact.":["抱歉,嘗試新增 %1$s 爲聯絡人時遇到了錯誤。"],"This client does not allow presence subscriptions":["此用戶端軟件不支援線上狀態訂閱"],"Click to hide these contacts":["按一下隱藏這些聯絡人"],"Unbookmark this groupchat":["將聊天室移出書籤"],"Click to open this groupchat":["按一下開啟聊天室對話"],"Click to toggle the bookmarks list":["按一下開關書籤清單"],"Bookmarks":["書籤"],"Bookmark this groupchat":["將聊天室加入書籤"],"Would you like this groupchat to be automatically joined upon startup?":["您希望在啟動時自動加入這間聊天室嗎?"],"The name for this bookmark:":["書籤名稱:"],"What should your nickname for this groupchat be?":["您希望在這間聊天室的用什麼暱稱?"],"Save":["儲存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["確定要移除書籤「%1$s」嗎?"],"Unbookmark":["移出書籤"],"Bookmark":["加入書籤"],"Close":["關閉"],"OK":["好的"],"Image: ":["影像: "],"Download audio file \\"%1$s\\"":["下載音訊檔案「%1$s」"],"Download file \\"%1$s\\"":["下載檔案「%1$s」"],"Cancel Editing":["取消編輯"],"Edit":["編輯"],"Retract":["收回"],"Message versions":["訊息版本"],"Retry":["再次嘗試"],"Uploading file:":["正在上傳檔案:"],"%1$s has removed this message":["%1$s 移除了這條訊息"],"This message has been edited":["這條訊息已經被編輯"],"Show more":["顯示更多"],"Show less":["顯示簡略"],"No message history available.":["無歷史訊息。"],"Search results":["搜尋結果"],"Search":["搜尋"],"Insert emojis":["插入表情圖標"],"Send the message":["送出訊息"],"Start a call":["開始通話"],"Message characters remaining":["訊息剩餘字數"],"Hide participants":["隱藏成員"],"Show participants":["顯示成員"],"Choose a file to send":["選擇要傳送的檔案"],"Click to write as a normal (non-spoiler) message":["按一下撰寫純文字訊息"],"Click to write your message as a spoiler":["按一下以豐富文字格式撰寫訊息"],"The User\'s Profile Image":["使用者頭像"],"Trusted":["信任"],"Untrusted":["不信任"],"OMEMO Fingerprints":["OMEMO 指紋"],"No OMEMO-enabled devices found":["没有找到啟用了 OMEMO 的裝置"],"Remove as contact":["移除聯絡人"],"XMPP Address":["XMPP 地址"],"Email":["電子郵件"],"Full Name":["全名"],"Nickname":["暱稱"],"Refresh":["重新整理"],"Role":["角色"],"URL":["URL"],"%1$s is typing":["%1$s 正在輸入"],"%1$s has stopped typing":["%1$s 已停止輸入"],"%1$s has gone away":["%1$s 已經離線"],"Remove messages":["移除訊息"],"Close this chat":["關閉對話"],"Write in the third person":["以第三者身份撰寫"],"Show this menu":["顯示此選單"],"Hidden message":["私訊"],"Message":["訊息"],"Optional hint":["可選提示"],"You have unread messages":["您有未讀訊息"],"Details":["詳細資訊"],"See more information about this person":["顯示更多關於此人的資訊"],"Close and end this conversation":["關閉並結束對話"],"Sorry, the connection has been lost, and your message could not be sent":["抱歉,連線已斷開,您的訊息亦未能送出"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["注意並非所有 XMPP/Jabber 用戶端軟件皆支持訊息回收功能,這條訊息有可能會未被收回。"],"Are you sure you want to retract this message?":["您確定要收回這條訊息嗎?"],"Confirm":["確定"],"You have an unsent message which will be lost if you continue. Are you sure?":["您將會丢失一條未送出的訊息。確定要繼續嗎?"],"Are you sure you want to clear the messages from this conversation?":["確定要清除此對話內的訊息嗎?"],"%1$s has gone offline":["%1$s 已經離線"],"%1$s is busy":["%1$s 忙線中"],"%1$s is online":["%1$s 在線"],"Sorry, something went wrong while trying to refresh":["抱歉,在重新整理時出錯了"],"Are you sure you want to remove this contact?":["確實要移除此連絡人嗎?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["抱歉,將 %1$s 移出連絡人時出錯了。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["爲了提升效能,我們會在瀏覽器內部諸存您的資料。如果這是一臺公共電腦或者您希望您的資料在您登出帳號後被清除,請取消勾選。如果您在關閉瀏覽器前没有手動登出帳號,可能會留下部分資料没被刪除。注意,OMEMO 加密通訊無法在不信任的裝置上啟用。"],"This is a trusted device":["這是一部可以信任的裝置"],"Password":["密碼"],"Create an account":["建立帳戶"],"Don\'t have a chat account?":["没有對話帳號?"],"Log in":["登入"],"Disconnected":["連線已斷開"],"Click here to log in anonymously":["點撀此處匿名登入"],"Username":["使用者名稱"],"user@domain":["user@domain"],"Please enter a valid XMPP address":["請輸入有效的 XMPP 地址"],"Chat Contacts":["對話聯絡人"],"Toggle chat":["開關對話視窗"],"Click to restore this chat":["點擊恢復對話"],"Minimized":["最小化"],"Minimize":["最小化"],"Minimize this chat":["最小化對話視窗"],"Minimize this groupchat":["最小化對話視窗"],"This field is required":["這是必填欄目"],"Join":["加入"],"Enter a new Groupchat":["輸入新的聊天室"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["聊天室名稱"],"Groupchat address":["聊天室地址"],"Groupchat id is invalid.":["無效的聊天室 ID。"],"Invite":["邀請"],"Invite someone to this groupchat":["邀請朋友加入聊天室"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["可選邀請原因"],"Show groupchats":["顯示聊天室"],"Server address":["伺服器地址"],"Show more information on this groupchat":["顯示更多這間聊天室的資訊"],"Query for Groupchats":["搜尋聊天室"],"Description:":["介紹:"],"Groupchat Address (JID):":["聊天室地址(JID):"],"Participants:":["成員:"],"Features:":["特性:"],"Requires authentication":["需要身份核驗"],"Hidden":["隱藏"],"Requires an invitation":["需要邀請"],"Moderated":["發言權限制"],"Non-anonymous":["非匿名"],"Open":["對外開放"],"Permanent":["永久聊天室"],"Public":["公開"],"Semi-anonymous":["半匿名"],"Temporary":["臨時"],"Unmoderated":["不需發言權"],"conference.example.org":["conference.example.org"],"Groupchats found":["找到聊天室"],"No groupchats found":["找不到聊天室"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["主持人是可以變更其他成員角色(管理員和主人除外)的特殊成員。"],"The default role, implies that you can read and write messages.":["預設角色,表示您可以收受和傳送訊息。"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["遊客在有發言權限制的聊天室內不可以傳送訊息。"],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["主人是最高級別的身份。主人可以變更其他所有成員的角色和身份。"],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["管理員是第二級別的身份。管理員可以變更除主人外所有成員的角色和身份。"],"To ban a user, you give them the affiliation of \\"outcast\\".":["若要封鎖某個成員,您可以變更其身份爲「驅逐」。"],"Change role":["變更角色"],"New Role":["新角色"],"Reason":["原因"],"Change affiliation":["變更身份"],"New affiliation":["新身份"],"Affiliation":["身份"],"Moderator Tools":["主持人工具"],"No users with that affiliation found.":["未找到該身份的成員。"],"No users with that role found.":["未找到該角色的成員。"],"Type here to filter the search results":["在這裏輸入關鍵字篩選搜尋結果"],"Show users":["顯示成員"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["角色的存在是爲了規定聊天室內哪些成員能夠做出何種行爲。角色是作爲權限的一部分被明確或者自動地賦予成員的。如果某個角色不是由其身份自動獲得的,這個角色會在其成員離開後自動失效。"],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["身份是一種自帶特定角色的長期權利,隨之而來的還有權力和責任。例如管理員和主人這兩種身份會自動獲得主持人這一角色。"],"Timeout error while trying to set the affiliation":["設定身份逾時"],"Sorry, you\'re not allowed to make that change":["抱歉,您不被允許作出此變更"],"Sorry, something went wrong while trying to set the affiliation":["抱歉,在嘗試變更身份時出錯了"],"Affiliation changed":["身份已變更"],"Role changed":["角色已變更"],"You\'re not allowed to make that change":["您不被允許作出此變更"],"Sorry, something went wrong while trying to set the role":["抱歉,在嘗試設定角色時出錯了"],"Topic":["話題"],"Topic author":["話題定立人"],"Groupchat address (JID)":["聊天室地址(JID)"],"Message archiving":["訊息存檔"],"Messages are archived on the server":["訊息儲存在伺服器上"],"Description":["介紹"],"Features":["特性"],"This groupchat is not publicly searchable":["這間聊天室無法被公開搜尋"],"This groupchat is restricted to members only":["這間聊天室僅限會員"],"Members only":["僅限會員"],"Participants entering this groupchat need to request permission to write":["新加入成員需要申請權限發言"],"Name":["名稱"],"This groupchat does not require a password upon entry":["加入這間聊天室不需要密碼"],"No password required":["不需要密碼"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["聊天室內所有成員都能夠看見您的 XMPP 地址"],"Not moderated":["無發言權限制"],"Participants entering this groupchat can write right away":["新加入成員能夠直接發言"],"Online users":["線上人數"],"Anyone can join this groupchat":["任何人都可以加入這間聊天室"],"This groupchat requires a password before entry":["加入這間聊天室需要密碼"],"Password protected":["受密碼保護"],"Persistent":["永久聊天室"],"This groupchat persists even if it\'s unoccupied":["即使所有成員離開這間聊天室仍然存在"],"Only moderators can see your XMPP address":["只有主持人看得見您的 XMPP 地址"],"This groupchat will disappear once the last person leaves":["這間聊天室會在最後一個成員離開後自動關閉"],"This groupchat is publicly searchable":["這間聊天室可以被公開搜尋"],"Groupchat info for %1$s":["%1$s 的聊天室資訊"],"You\'re not allowed to send messages in this room":["您不被允許在這間聊天室傳送訊息"],"The conversation has moved. Click below to enter.":["這則對話已經被搬移。點擊下方進入。"],"This groupchat no longer exists":["這間聊天室已經關閉"],"Hide the groupchat topic":["隱藏聊天室話題"],"This groupchat is bookmarked":["這間聊天室已經被加爲書籤"],"Enter groupchat":["進入聊天室"],"Choose a nickname to enter":["進入前先揀選一個暱稱"],"Please choose your nickname":["請揀選您的暱稱"],"This groupchat requires a password":["這間聊天室需要密碼"],"Password: ":["密碼:"],"Submit":["送出"],"This user is a moderator.":["此成員是主持人。"],"This user can send messages in this groupchat.":["此成員能夠在聊天室內發言。"],"This user can NOT send messages in this groupchat.":["此成員不能在聊天室內發言。"],"Owner":["主人"],"Admin":["管理員"],"Member":["會員"],"Moderator":["主持人"],"Visitor":["遊客"],"Click to mention %1$s in your message.":["按一下在您的訊息內提及 %1$s。"],"Participants":["成員"],"%1$s has entered the groupchat":["%1$s 已經加入聊天室"],"%1$s has left the groupchat":["%1$s 已經離開聊天室"],"%1$s is now a moderator":["%1$s 現在成爲主持人"],"%1$s is no longer a moderator":["%1$s 不再是主持人"],"%1$s has been given a voice":["%1$s 已經被賦予發言權"],"%1$s has been muted":["%1$s 已經被禁止發言"],"%1$s and %2$s":["%1$s 和 %2$s"],"%1$s are typing":["%1$s 正在輸入"],"%1$s have stopped typing":["%1$s 已停止輸入"],"%1$s have gone away":["%1$s 已經離線"],"%1$s have entered the groupchat":["%1$s 已經加入聊天室"],"%1$s have left the groupchat":["%1$s 已經離開聊天室"],"%1$s are now moderators":["%1$s 現在成爲主持人"],"%1$s are no longer moderators":["%1$s 不再是主持人"],"%1$s have been given voices":["%1$s 已經被賦予發言權"],"%1$s have been muted":["%1$s 已經被禁止發言"],"Change user\'s affiliation to admin":["變更成員身份爲管理員"],"Ban user by changing their affiliation to outcast":["變更成員身份爲「驅逐」以封鎖成員"],"Clear the chat area":["清除對話區域"],"Close this groupchat":["關閉聊天室"],"Change user role to participant":["變更成員角色爲普通成員"],"Remove this groupchat":["移除這間聊天室"],"Kick user from groupchat":["將成員踢出聊天室"],"Write in 3rd person":["用第三者身份撰寫"],"Grant membership to a user":["升級成員爲會員"],"Opens up the moderator tools GUI":["開啟主持人工具界面"],"Remove user\'s ability to post messages":["移除成員傳送訊息的權限"],"Change your nickname":["變更您的暱稱"],"Grant moderator role to user":["授予成員主持人角色"],"Grant ownership of this groupchat":["授予成員這間聊天室的主人身份"],"Register your nickname":["登記您的暱稱"],"Revoke the user\'s current affiliation":["撤回成員現在的身份"],"Set groupchat subject":["設定聊天室主題"],"Set groupchat subject (alias for /subject)":["設定聊天室主題(等價於指令 /subject)"],"Allow muted user to post messages":["允許禁言成員傳送訊息"],"You are about to retract this message.":["您在收回這條訊息。"],"You may optionally include a message, explaining the reason for the retraction.":["您可以選擇寫下收回訊息的原因。"],"Message Retraction":["收回信息"],"Optional reason":["可選原因"],"Sorry, you\'re not allowed to retract this message":["抱歉,您不能收回這條訊息"],"A timeout occurred while trying to retract the message":["收回訊息逾時"],"Sorry, you\'re not allowed to retract this message.":["抱歉,您不能收回這條訊息。"],"Show more information about this groupchat":["顯示更多關於這間聊天室的資訊"],"Configure":["設定"],"Configure this groupchat":["設定聊天室"],"Invite someone to join this groupchat":["邀請朋友加入聊天室"],"Show topic":["顯示話題"],"Hide topic":["隱藏話題"],"Show the topic message in the heading":["在頂部展示話題訊息"],"Hide the topic in the heading":["在頂部隱藏話題"],"Moderate":["發言權"],"Moderate this groupchat":["加入發言權限制"],"Destroy":["關閉聊天室"],"Leave":["離開"],"Leave and close this groupchat":["離開並關閉聊天室"],"Are you sure you want to leave this groupchat?":["您確定要離開這間聊天室嗎?"],"Hide the list of participants":["隱藏成員清單"],"Forbidden: you do not have the necessary role in order to do that.":["被禁止:您的角色没有足夠權限。"],"Forbidden: you do not have the necessary affiliation in order to do that.":["被禁止:您的身份没有足夠權限。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["錯誤:「%1$s」指令讀入兩個參數,包括成員的暱稱和一個可選原因。"],"Error: couldn\'t find a groupchat participant based on your arguments":["錯誤:找不到符合條件的聊天室成員"],"Error: found multiple groupchat participant based on your arguments":["錯誤:找到不止一個聊天室成員"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["未找到符合該暱稱的聊天室成員。他們可能已經離開了聊天室。"],"Sorry, an error happened while running the command.":["抱歉,運行指令時發生錯誤。"],"Check your browser\'s developer console for details.":["詳細情形請檢查您的瀏覽器開發者工具。"],"Are you sure you want to destroy this groupchat?":["您確定要關閉這間聊天室嗎?"],"Please enter the XMPP address of this groupchat to confirm":["請輸入這間聊天室的 XMPP 地址以確認"],"name@example.org":["name@example.org"],"Optional reason for destroying this groupchat":["選填關閉這間聊天室的原因"],"Optional XMPP address for a new groupchat that replaces this one":["選填替代的新聊天室 XMPP 地址"],"replacement@example.org":["replacement@example.org"],"Your nickname is \\"%1$s\\"":["您的暱稱爲「%1$s」"],"Error: invalid number of arguments":["錯誤:無效的參數數量"],"This action was done by %1$s.":["這個動作由 %1$s 做出。"],"The reason given is: \\"%1$s\\".":["給出的理由是:%1$s。"],"Groupchats":["聊天室"],"Add a new groupchat":["新增聊天室"],"Query for groupchats":["搜尋聊天室"],"Sorry, an error occurred while trying to submit the config form.":["抱歉,嘗試送出配置時遭遇錯誤。"],"Close these announcements":["關閉這些提醒"],"Announcements":["提醒"],"Click to open this server message":["點擊展開這條伺服器訊息"],"Notification from %1$s":["來自 %1$s 的通知"],"%1$s says":["%1$s 說"],"has gone offline":["已經離線"],"has gone away":["已經離開"],"is busy":["正在忙碌"],"has come online":["已經上線"],"wants to be your contact":["想成爲您的聯絡人"],"Hide":["隱藏"],"Execute":["執行"],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":["找到指令"],"List available commands":["列出可用指令"],"No commands found":["找不到指令"],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["抱歉,執行指令時出錯。詳細資訊請檢視開發者主控臺"],"About":["關於"],"Commands":["指令"],"Settings":["設定"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["由 %3$s Opkode %2$s 帶來的 %1$s 開放原始碼 %2$s XMPP 用戶端對話軟件"],"%1$s Translate %2$s it into your own language":["将它 %1$s 翻譯 %2$s 到您的語言"],"Log out":["登出"],"Click to change your chat status":["點擊變更您的線上狀態"],"Show details about this chat client":["展示關於此對話軟件的詳細資訊"],"Your avatar image":["您的頭像影像"],"Checkbox for selecting the following fingerprint":["揀選下列指紋的勾選框"],"Device without a fingerprint":["没有指紋的裝置"],"Checkbox for selecting the following device":["揀選下列裝置的勾選框"],"Other OMEMO-enabled devices":["其它啟用了 OMEMO 加密的裝置"],"Checkbox to select fingerprints of all other OMEMO devices":["揀選其餘所有 OMEMO 加密裝置指紋的勾選框"],"Remove checked devices and close":["移除已勾選的裝置並關閉"],"Select all":["揀選全部"],"This device\'s OMEMO fingerprint":["這部裝置的 OMEMO 指紋"],"Generate new keys and fingerprint":["產生新的加密金鑰和指紋"],"Your Profile":["您的個人資料"],"XMPP Address (JID)":["XMPP 地址(JID)"],"Save and close":["儲存並關閉"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["使用逗號分隔多個角色。您的角色會在對話訊內展示在您的名稱旁邊。"],"OMEMO":["OMEMO"],"Profile":["個人資料"],"Sorry, an error happened while trying to save your profile data.":["抱歉,儲存您的個人資料時發生錯誤。"],"You can check your browser\'s developer console for any error output.":["您可以在您瀏覽器內的開發者工具中檢視所有輸出的錯誤。"],"Away":["離開"],"Busy":["忙碌"],"Custom status":["自定義狀態"],"Offline":["離線"],"Online":["在線"],"Away for long":["長時間離開"],"Change chat status":["變更線上狀態"],"Personal status message":["個人狀態訊息"],"I am %1$s":["我現在 %1$s"],"Are you sure you want to log out?":["您确定要登出嗎?"],"online":["在線"],"busy":["忙碌"],"away for long":["長時間離開"],"away":["離開"],"offline":["離線"],"Sorry, could not decrypt a received OMEMO message due to an error.":["抱歉,解密一條 OMEMO 加密訊息時遇到了錯誤。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s 似乎没有支援 OMEMO 加密通訊的用戶端軟件。這間聊天室將不能再進行加密通訊。"],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["無法在這間聊天室內使用端到端加密,因爲這是個匿名聊天室,或是有成員不支援 OMEMO 加密通訊。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["無法使用端到端加密,因爲 %1$s 所使用的用戶端軟件不支援 OMEMO 加密通訊。"],"Messages are being sent in plaintext":["訊息已用純文字形式傳送"],"Messages are sent encrypted":["訊息將被加密傳送"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["若要支援 OMEMO 加密通訊,這間聊天室必須僅限會員並且非匿名"],"Sorry, an error occurred while trying to remove the devices.":["抱歉,移除裝置時遭遇錯誤。"],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["您確定要產生新的 OMEMO 加密金鑰嗎?這會移除您的舊密鑰,並且之前所有的加密訊息都無法再在這部裝置上解密。"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["抱歉,無法傳送加密訊息,因爲 %1$s 要求您先訂閱他的線上狀態才能檢視他的 OMEMO 密鑰資訊"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["抱歉,無法送出加密訊息,因爲找不到 %1$s 的遠端伺服器"],"Unable to send an encrypted message due to an unexpected error.":["送出加密訊息時發生了未預期的錯誤。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["抱歉,找不到可以傳送 OMEMO 加密訊息的裝置。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["您的用戶端軟件似乎不支援這一條 OMEMO 加密訊息。更多有關資訊可以在 https://conversations.im/omemo 上查閱"]," e.g. conversejs.org":[" 譬如 conversejs.org"],"Fetch registration form":["取得註冊表單"],"Tip: A list of public XMPP providers is available":["提示:有一份公眾 XMPP 供應商清單"],"here":["這裏"],"Sorry, we\'re unable to connect to your chosen provider.":["抱歉,無法連線到您所揀選的供應商。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["抱歉,這個供應商不支援軟件內註冊帳號。請嘗試換一個供應商。"],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["與 %1$s 建立連線時出現了問題。您確定它的确存在嗎?"],"Now logging you in":["正在爲您登入"],"Registered successfully":["登記成功"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["供應商拒絕了您的註冊嘗試。請檢查您所輸入的內容是否正確。"],"Leave this groupchat":["離開這間聊天室"],"Click to toggle the list of open groupchats":["按一下開關已開啟的聊天室清單"],"Open Groupchats":["已開啟的聊天室"],"Are you sure you want to leave the groupchat %1$s?":["您確定要離開聊天室「%1$s」嗎?"],"Add":["新增"],"Add a Contact":["新增聯絡人"],"This contact is busy":["此聯絡人正在忙碌"],"This contact is online":["此聯絡人在線上"],"This contact is offline":["此聯絡人已經離線"],"This contact is unavailable":["此聯絡人不可用"],"This contact is away for an extended period":["此聯絡人已經離開了一段時間"],"This contact is away":["此聯絡人已經離開"],"Contact name":["聯絡人名稱"],"Optional nickname":["可選匿稱"],"Sorry, could not find a contact with that name":["抱歉,找不到符合該名稱的聯絡人"],"This contact has already been added":["此人已經是您的聯絡人"],"Filter":["篩選器"],"Filter by contact name":["以聯絡人名稱篩選"],"Filter by group name":["以分組名稱篩選"],"Filter by status":["以線上狀態篩選"],"Any":["所有"],"Unread":["未讀"],"Chatty":["正在對話"],"Extended Away":["離開了一段時間"],"Click to remove %1$s as a contact":["按一下將 %1$s 移出聯絡人"],"Click to accept the contact request from %1$s":["按一下同意 %1$s 的新增聯絡人請求"],"Click to decline the contact request from %1$s":["按一下拒絕 %1$s 的新增聯絡人請求"],"Click to chat with %1$s (XMPP address: %2$s)":["點一下與 %1$s (XMPP 地址:%2$s)展開對話"],"Are you sure you want to decline this contact request?":["您確定要拒絕這個新增聯絡人請求嗎?"],"Contacts":["聯絡人"],"Add a contact":["新增聯絡人"],"Re-sync your contacts":["重新整理您的聯絡人"]}}}')}}]);
+(window.webpackJsonp=window.webpackJsonp||[]).push([[177],{543:function(e){e.exports=JSON.parse('{"domain":"converse","locale_data":{"converse":{"":{"domain":"converse","plural_forms":"nplurals=1; plural=0;","lang":"zh_TW"},"Create your account":["建立您的帳號"],"Please enter the XMPP provider to register with:":["請輸入要註冊的 XMPP 供應商:"],"Already have a chat account?":["已經擁有聊天帳號?"],"Log in here":["在此登入"],"Account Registration:":["帳號註冊:"],"Register":["註冊"],"Choose a different provider":["選擇一個不同的供應商"],"Hold tight, we\'re fetching the registration form…":["稍等,我們正在取得註冊表單…"],"Cancel":["取消"],"The connection has dropped, attempting to reconnect.":["連線已中斷,嘗試重新連線。"],"An error occurred while connecting to the chat server.":["連線到聊天伺服器時遭遇錯誤。"],"Your XMPP address and/or password is incorrect. Please try again.":["您的 XMPP 地址或密碼錯誤。請重試。"],"Sorry, we could not connect to the XMPP host with domain: %1$s":["抱歉,我們無法使用域名「%1$s」來連線 XMPP 主機"],"The XMPP server did not offer a supported authentication mechanism":["此 XMPP 伺服器不提供支援的認證機制"],"Undecryptable OMEMO message":["無法加密的 OMEMO 訊息"],"Sorry, could not determine upload URL.":["抱歉,無法確定上傳 URL。"],"Sorry, could not determine file upload URL.":["抱歉,無法確定檔案上傳 URL。"],"Sorry, could not succesfully upload your file. Your server’s response: \\"%1$s\\"":["抱歉,您的檔案上傳不成功。您的伺服器回應:\\"%1$s\\""],"Sorry, could not succesfully upload your file.":["抱歉,您的檔案上傳不成功。"],"You\'re not allowed to retract your message.":["您不被允許收回這條訊息。"],"Sorry, an error occurred while trying to retract your message.":["抱歉,在收回訊息時出錯了。"],"You\'re not allowed to send a message.":["您不被允許傳送訊息。"],"Sorry, an error occurred while trying to send your message.":["抱歉,送出訊息時出錯了。"],"Sorry, looks like file upload is not supported by your server.":["抱歉,看來您的伺服器不支援檔案上傳。"],"The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.":["您的檔案大小 %1$s 超過了您的伺服器限制 %2$s。"],"Smileys and emotions":["表情"],"People":["人"],"Activities":["活動"],"Travel":["旅行"],"Objects":["物件"],"Animals and nature":["動物與自然"],"Food and drink":["飲食"],"Symbols":["符號"],"Flags":["旗幟"],"Stickers":["貼紙"],"This groupchat is not anonymous":["這間聊天室不是匿名的"],"This groupchat now shows unavailable members":["這間聊天室現在會顯示不可用的成員"],"This groupchat does not show unavailable members":["這間聊天室不會顯示不可用的成員"],"The groupchat configuration has changed":["聊天室配置已變更"],"Groupchat logging is now enabled":["現已啟用聊天室聊天紀錄"],"Groupchat logging is now disabled":["現已禁用聊天室聊天紀錄"],"This groupchat is now no longer anonymous":["這間聊天室現在不再匿名"],"This groupchat is now semi-anonymous":["這間聊天室現在是半匿名"],"This groupchat is now fully-anonymous":["這間聊天室現在完全匿名"],"A new groupchat has been created":["建立了新的聊天室"],"Your nickname has been automatically set to %1$s":["您的暱稱已自動設置爲 %1$s"],"Your nickname has been changed to %1$s":["您的暱稱已變更爲 %1$s"],"You have been banned from this groupchat":["您被禁止加入這間聊天室"],"You have exited this groupchat due to a technical problem":["由於技術問題,您已經被移出這間聊天室"],"You have been kicked from this groupchat":["您被踢出了這間聊天室"],"You have been removed from this groupchat because of an affiliation change":["由於身份的變動,您已經被移除出這間聊天室"],"You have been removed from this groupchat because the groupchat has changed to members-only and you\'re not a member":["您已經被移除出這間聊天室,因爲聊天室已變為僅限會員,而您不是會員"],"You have been removed from this groupchat because the service hosting it is being shut down":["您已經被移除出這間聊天室,因爲託管它的服務正在關閉"],"Your retraction was not delivered because you\'re not present in the groupchat.":["您的訊息未被收回,因爲您不在聊天室內。"],"Your message was not delivered because you weren\'t allowed to send it.":["您的訊息未被傳送,因爲您未被允許送出訊息。"],"Your message was not delivered because you\'re not present in the groupchat.":["您的訊息未被傳送,因爲您不在聊天室內。"],"A timeout happened while while trying to retract your message.":["收回訊息逾時。"],"You\'re not allowed to register yourself in this groupchat.":["您未被允許在這間聊天室登記。"],"You\'re not allowed to register in this groupchat because it\'s members-only.":["您未被允許在這間聊天室登記,因爲它僅限會員。"],"Can\'t register your nickname in this groupchat, it doesn\'t support registration.":["您的暱稱無法在這間聊天室登記,因爲這間聊天室不支援登記暱稱。"],"Can\'t register your nickname in this groupchat, invalid data form supplied.":["您的暱稱無法在這間聊天室登記,因爲它包含無效格式。"],"Topic set by %1$s":["%1$s 設定了話題"],"Topic cleared by %1$s":["%1$s 清除了話題"],"%1$s has been banned by %2$s":["%1$s 已經被 %2$s 封鎖"],"%1$s has been banned":["%1$s 已經被封鎖"],"%1$s\'s nickname has changed":["%1$s 的暱稱已變更"],"%1$s has been kicked out by %2$s":["%1$s 已經被 %2$s 踢出聊天室"],"%1$s has been kicked out":["%1$s 已經被踢出聊天室"],"%1$s has been removed because of an affiliation change":["由於身份的變動,%1$s 已經被移除"],"%1$s has been removed for not being a member":["由於不是會員,%1$s 已經被移除"],"%1$s is no longer an admin of this groupchat":["%1$s 不再是這間聊天室的管理員"],"%1$s is no longer an owner of this groupchat":["%1$s 不再是這間聊天室的主人"],"%1$s is no longer banned from this groupchat":["%1$s 不再被這間聊天室封鎖"],"%1$s is no longer a member of this groupchat":["%1$s 不再是這間聊天室的會員"],"%1$s is now a member of this groupchat":["%1$s 現在成爲這間聊天室的會員"],"%1$s is now an %2$s of this groupchat":["%1$s 現在成爲這間聊天室的 %2$s"],"The nickname you chose is reserved or currently in use, please choose a different one.":["您所揀選的暱稱已經被保留或是已經有人使用,請換一個暱稱。"],"Password incorrect":["密碼不正確"],"You are not on the member list of this groupchat.":["您並非這間聊天室成員。"],"You have been banned from this groupchat.":["您被禁止加入這間聊天室。"],"You are not allowed to create new groupchats.":["您不被允許建立聊天室。"],"Your nickname doesn\'t conform to this groupchat\'s policies.":["您的暱稱不符合這間聊天室標準。"],"This groupchat does not (yet) exist.":["這間聊天室不存在。"],"This groupchat has reached its maximum number of participants.":["這間聊天室人數已滿。"],"Remote server not found":["找不到遠端伺服器"],"The explanation given is: \\"%1$s\\".":["得到的回應是「%1$s」。"],"%1$s has invited you to join a groupchat: %2$s":["%1$s 邀請您加入聊天室:%2$s"],"%1$s has invited you to join a groupchat: %2$s, and left the following reason: \\"%3$s\\"":["%1$s 邀請您加入聊天室:%2$s,並且留下原因「%3$s」"],"Error":["錯誤"],"Sorry, something went wrong while trying to save your bookmark.":["抱歉,在嘗試儲存書籤時出錯。"],"Timeout Error":["逾時錯誤"],"The server did not return your bookmarks within the allowed time. You can reload the page to request them again.":["伺服器未在響應時間內返回書籤。您可以嘗試重新載入本頁面。"],"My contacts":["聯絡人"],"Pending contacts":["已送出的聯絡人請求"],"Contact requests":["新增聯絡人請求"],"Ungrouped":["未分組"],"New messages":["新訊息"],"Sorry, there was an error while trying to add %1$s as a contact.":["抱歉,嘗試新增 %1$s 爲聯絡人時遇到了錯誤。"],"This client does not allow presence subscriptions":["此用戶端軟件不支援線上狀態訂閱"],"Click to hide these contacts":["按一下隱藏這些聯絡人"],"Unbookmark this groupchat":["將聊天室移出書籤"],"Click to open this groupchat":["按一下開啟聊天室對話"],"Click to toggle the bookmarks list":["按一下開關書籤清單"],"Bookmarks":["書籤"],"Bookmark this groupchat":["將聊天室加入書籤"],"Would you like this groupchat to be automatically joined upon startup?":["您希望在啟動時自動加入這間聊天室嗎?"],"The name for this bookmark:":["書籤名稱:"],"What should your nickname for this groupchat be?":["您希望在這間聊天室的用什麼暱稱?"],"Save":["儲存"],"Are you sure you want to remove the bookmark \\"%1$s\\"?":["確定要移除書籤「%1$s」嗎?"],"Unbookmark":["移出書籤"],"Bookmark":["加入書籤"],"Close":["關閉"],"OK":["好的"],"Image: ":["影像: "],"Download audio file \\"%1$s\\"":["下載音訊檔案「%1$s」"],"Download file \\"%1$s\\"":["下載檔案「%1$s」"],"Cancel Editing":["取消編輯"],"Edit":["編輯"],"Retract":["收回"],"Message versions":["訊息版本"],"Retry":["再次嘗試"],"Uploading file:":["正在上傳檔案:"],"%1$s has removed this message":["%1$s 移除了這條訊息"],"This message has been edited":["這條訊息已經被編輯"],"Show more":["顯示更多"],"Show less":["顯示簡略"],"No message history available.":["無歷史訊息。"],"Search results":["搜尋結果"],"Search":["搜尋"],"Insert emojis":["插入表情圖標"],"Send the message":["送出訊息"],"Start a call":["開始通話"],"Message characters remaining":["訊息剩餘字數"],"Hide participants":["隱藏成員"],"Show participants":["顯示成員"],"Choose a file to send":["選擇要傳送的檔案"],"Click to write as a normal (non-spoiler) message":["按一下撰寫純文字訊息"],"Click to write your message as a spoiler":["按一下以豐富文字格式撰寫訊息"],"The User\'s Profile Image":["使用者頭像"],"Trusted":["信任"],"Untrusted":["不信任"],"OMEMO Fingerprints":["OMEMO 指紋"],"No OMEMO-enabled devices found":["没有找到啟用了 OMEMO 的裝置"],"Remove as contact":["移除聯絡人"],"XMPP Address":["XMPP 地址"],"Email":["電子郵件"],"Full Name":["全名"],"Nickname":["暱稱"],"Refresh":["重新整理"],"Role":["角色"],"URL":["URL"],"%1$s is typing":["%1$s 正在輸入"],"%1$s has stopped typing":["%1$s 已停止輸入"],"%1$s has gone away":["%1$s 已經離線"],"Remove messages":["移除訊息"],"Close this chat":["關閉對話"],"Write in the third person":["以第三者身份撰寫"],"Show this menu":["顯示此選單"],"Hidden message":["私訊"],"Message":["訊息"],"Optional hint":["可選提示"],"You have unread messages":["您有未讀訊息"],"Details":["詳細資訊"],"See more information about this person":["顯示更多關於此人的資訊"],"Close and end this conversation":["關閉並結束對話"],"Sorry, the connection has been lost, and your message could not be sent":["抱歉,連線已斷開,您的訊息亦未能送出"],"Be aware that other XMPP/Jabber clients (and servers) may not yet support retractions and that this message may not be removed everywhere.":["注意並非所有 XMPP/Jabber 用戶端軟件皆支持訊息回收功能,這條訊息有可能會未被收回。"],"Are you sure you want to retract this message?":["您確定要收回這條訊息嗎?"],"Confirm":["確定"],"You have an unsent message which will be lost if you continue. Are you sure?":["您將會丢失一條未送出的訊息。確定要繼續嗎?"],"Are you sure you want to clear the messages from this conversation?":["確定要清除此對話內的訊息嗎?"],"%1$s has gone offline":["%1$s 已經離線"],"%1$s is busy":["%1$s 忙線中"],"%1$s is online":["%1$s 在線"],"Sorry, something went wrong while trying to refresh":["抱歉,在重新整理時出錯了"],"Are you sure you want to remove this contact?":["確實要移除此連絡人嗎?"],"Sorry, there was an error while trying to remove %1$s as a contact.":["抱歉,將 %1$s 移出連絡人時出錯了。"],"To improve performance, we cache your data in this browser. Uncheck this box if this is a public computer or if you want your data to be deleted when you log out. It\'s important that you explicitly log out, otherwise not all cached data might be deleted. Please note, when using an untrusted device, OMEMO encryption is NOT available.":["爲了提升效能,我們會在瀏覽器內部諸存您的資料。如果這是一臺公共電腦或者您希望您的資料在您登出帳號後被清除,請取消勾選。如果您在關閉瀏覽器前没有手動登出帳號,可能會留下部分資料没被刪除。注意,OMEMO 加密通訊無法在不信任的裝置上啟用。"],"This is a trusted device":["這是一部可以信任的裝置"],"Password":["密碼"],"Create an account":["建立帳戶"],"Don\'t have a chat account?":["没有對話帳號?"],"Log in":["登入"],"Disconnected":["連線已斷開"],"Click here to log in anonymously":["點撀此處匿名登入"],"Username":["使用者名稱"],"user@domain":["使用者@域名"],"Please enter a valid XMPP address":["請輸入有效的 XMPP 地址"],"Chat Contacts":["對話聯絡人"],"Toggle chat":["開關對話視窗"],"Click to restore this chat":["點擊恢復對話"],"Minimized":["最小化"],"Minimize":["最小化"],"Minimize this chat":["最小化對話視窗"],"Minimize this groupchat":["最小化對話視窗"],"This user is a moderator.":["此成員是主持人。"],"This user can send messages in this groupchat.":["此成員能夠在聊天室內發言。"],"This user can NOT send messages in this groupchat.":["此成員不能在聊天室內發言。"],"Owner":["主人"],"Admin":["管理員"],"Member":["會員"],"Moderator":["主持人"],"Visitor":["遊客"],"Click to mention %1$s in your message.":["按一下在您的訊息內提及 %1$s。"],"Participants":["成員"],"This field is required":["這是必填欄目"],"Join":["加入"],"Enter a new Groupchat":["輸入新的聊天室"],"name@conference.example.org":["name@conference.example.org"],"Groupchat name":["聊天室名稱"],"Groupchat address":["聊天室地址"],"Groupchat id is invalid.":["無效的聊天室 ID。"],"Invite":["邀請"],"Invite someone to this groupchat":["邀請朋友加入聊天室"],"user@example.org":["user@example.org"],"Optional reason for the invitation":["可選邀請原因"],"Show groupchats":["顯示聊天室"],"Server address":["伺服器地址"],"Show more information on this groupchat":["顯示更多這間聊天室的資訊"],"Query for Groupchats":["搜尋聊天室"],"Description:":["介紹:"],"Groupchat Address (JID):":["聊天室地址(JID):"],"Participants:":["成員:"],"Features:":["特性:"],"Requires authentication":["需要身份核驗"],"Hidden":["隱藏"],"Requires an invitation":["需要邀請"],"Moderated":["發言權限制"],"Non-anonymous":["非匿名"],"Open":["對外開放"],"Permanent":["永久聊天室"],"Public":["公開"],"Semi-anonymous":["半匿名"],"Temporary":["臨時"],"Unmoderated":["不需發言權"],"conference.example.org":["conference.example.org"],"Groupchats found":["找到聊天室"],"No groupchats found":["找不到聊天室"],"Moderators are privileged users who can change the roles of other users (except those with admin or owner affiliations.":["主持人是可以變更其他成員角色(管理員和主人除外)的特殊成員。"],"The default role, implies that you can read and write messages.":["預設角色,表示您可以收受和傳送訊息。"],"Visitors aren\'t allowed to write messages in a moderated multi-user chat.":["遊客在有發言權限制的聊天室內不可以傳送訊息。"],"Owner is the highest affiliation. Owners can modify roles and affiliations of all other users.":["主人是最高級別的身份。主人可以變更其他所有成員的角色和身份。"],"Admin is the 2nd highest affiliation. Admins can modify roles and affiliations of all other users except owners.":["管理員是第二級別的身份。管理員可以變更除主人外所有成員的角色和身份。"],"To ban a user, you give them the affiliation of \\"outcast\\".":["若要封鎖某個成員,您可以變更其身份爲「驅逐」。"],"Change role":["變更角色"],"New Role":["新角色"],"Reason":["原因"],"Change affiliation":["變更身份"],"New affiliation":["新身份"],"Affiliation":["身份"],"Moderator Tools":["主持人工具"],"No users with that affiliation found.":["未找到該身份的成員。"],"No users with that role found.":["未找到該角色的成員。"],"Type here to filter the search results":["在這裏輸入關鍵字篩選搜尋結果"],"Show users":["顯示成員"],"Roles are assigned to users to grant or deny them certain abilities in a multi-user chat. They\'re assigned either explicitly or implicitly as part of an affiliation. A role that\'s not due to an affiliation, is only valid for the duration of the user\'s session.":["角色的存在是爲了規定聊天室內哪些成員能夠做出何種行爲。角色是作爲權限的一部分被明確或者自動地賦予成員的。如果某個角色不是由其身份自動獲得的,這個角色會在其成員離開後自動失效。"],"An affiliation is a long-lived entitlement which typically implies a certain role and which grants privileges and responsibilities. For example admins and owners automatically have the moderator role.":["身份是一種自帶特定角色的長期權利,隨之而來的還有權力和責任。例如管理員和主人這兩種身份會自動獲得主持人這一角色。"],"Timeout error while trying to set the affiliation":["設定身份逾時"],"Sorry, you\'re not allowed to make that change":["抱歉,您不被允許作出此變更"],"Sorry, something went wrong while trying to set the affiliation":["抱歉,在嘗試變更身份時出錯了"],"Affiliation changed":["身份已變更"],"Role changed":["角色已變更"],"You\'re not allowed to make that change":["您不被允許作出此變更"],"Sorry, something went wrong while trying to set the role":["抱歉,在嘗試設定角色時出錯了"],"Topic":["話題"],"Topic author":["話題定立人"],"Groupchat address (JID)":["聊天室地址(JID)"],"Message archiving":["訊息存檔"],"Messages are archived on the server":["訊息儲存在伺服器上"],"Description":["介紹"],"Features":["特性"],"This groupchat is not publicly searchable":["這間聊天室無法被公開搜尋"],"This groupchat is restricted to members only":["這間聊天室僅限會員"],"Members only":["僅限會員"],"Participants entering this groupchat need to request permission to write":["新加入成員需要申請權限發言"],"Name":["名稱"],"This groupchat does not require a password upon entry":["加入這間聊天室不需要密碼"],"No password required":["不需要密碼"],"Not anonymous":["非匿名"],"All other groupchat participants can see your XMPP address":["聊天室內所有成員都能夠看見您的 XMPP 地址"],"Not moderated":["無發言權限制"],"Participants entering this groupchat can write right away":["新加入成員能夠直接發言"],"Online users":["線上人數"],"Anyone can join this groupchat":["任何人都可以加入這間聊天室"],"This groupchat requires a password before entry":["加入這間聊天室需要密碼"],"Password protected":["受密碼保護"],"Persistent":["永久聊天室"],"This groupchat persists even if it\'s unoccupied":["即使所有成員離開這間聊天室仍然存在"],"Only moderators can see your XMPP address":["只有主持人看得見您的 XMPP 地址"],"This groupchat will disappear once the last person leaves":["這間聊天室會在最後一個成員離開後自動關閉"],"This groupchat is publicly searchable":["這間聊天室可以被公開搜尋"],"Groupchat info for %1$s":["%1$s 的聊天室資訊"],"You\'re not allowed to send messages in this room":["您不被允許在這間聊天室傳送訊息"],"The conversation has moved. Click below to enter.":["這則對話已經被搬移。點擊下方進入。"],"This groupchat no longer exists":["這間聊天室已經關閉"],"Hide the groupchat topic":["隱藏聊天室話題"],"This groupchat is bookmarked":["這間聊天室已經被加爲書籤"],"Enter groupchat":["進入聊天室"],"Choose a nickname to enter":["進入前先揀選一個暱稱"],"Please choose your nickname":["請揀選您的暱稱"],"This groupchat requires a password":["這間聊天室需要密碼"],"Password: ":["密碼: "],"Submit":["送出"],"%1$s has entered the groupchat":["%1$s 已經加入聊天室"],"%1$s has left the groupchat":["%1$s 已經離開聊天室"],"%1$s is now a moderator":["%1$s 現在成爲主持人"],"%1$s is no longer a moderator":["%1$s 不再是主持人"],"%1$s has been given a voice":["%1$s 已經被賦予發言權"],"%1$s has been muted":["%1$s 已經被禁止發言"],"%1$s and %2$s":["%1$s 和 %2$s"],"%1$s are typing":["%1$s 正在輸入"],"%1$s have stopped typing":["%1$s 已停止輸入"],"%1$s have gone away":["%1$s 已經離線"],"%1$s have entered the groupchat":["%1$s 已經加入聊天室"],"%1$s have left the groupchat":["%1$s 已經離開聊天室"],"%1$s are now moderators":["%1$s 現在成爲主持人"],"%1$s are no longer moderators":["%1$s 不再是主持人"],"%1$s have been given voices":["%1$s 已經被賦予發言權"],"%1$s have been muted":["%1$s 已經被禁止發言"],"Change user\'s affiliation to admin":["變更成員身份爲管理員"],"Ban user by changing their affiliation to outcast":["變更成員身份爲「驅逐」以封鎖成員"],"Clear the chat area":["清除對話區域"],"Close this groupchat":["關閉聊天室"],"Change user role to participant":["變更成員角色爲普通成員"],"Remove this groupchat":["移除這間聊天室"],"Kick user from groupchat":["將成員踢出聊天室"],"Write in 3rd person":["用第三者身份撰寫"],"Grant membership to a user":["升級成員爲會員"],"Opens up the moderator tools GUI":["開啟主持人工具界面"],"Remove user\'s ability to post messages":["移除成員傳送訊息的權限"],"Change your nickname":["變更您的暱稱"],"Grant moderator role to user":["授予成員主持人角色"],"Grant ownership of this groupchat":["授予成員這間聊天室的主人身份"],"Register your nickname":["登記您的暱稱"],"Revoke the user\'s current affiliation":["撤回成員現在的身份"],"Set groupchat subject":["設定聊天室主題"],"Set groupchat subject (alias for /subject)":["設定聊天室主題(等價於指令 /subject)"],"Allow muted user to post messages":["允許禁言成員傳送訊息"],"You are about to retract this message.":["您在收回這條訊息。"],"You may optionally include a message, explaining the reason for the retraction.":["您可以選擇寫下收回訊息的原因。"],"Message Retraction":["收回信息"],"Optional reason":["可選原因"],"Sorry, you\'re not allowed to retract this message":["抱歉,您不能收回這條訊息"],"A timeout occurred while trying to retract the message":["收回訊息逾時"],"Sorry, you\'re not allowed to retract this message.":["抱歉,您不能收回這條訊息。"],"Show more information about this groupchat":["顯示更多關於這間聊天室的資訊"],"Configure":["設定"],"Configure this groupchat":["設定聊天室"],"Invite someone to join this groupchat":["邀請朋友加入聊天室"],"Show topic":["顯示話題"],"Hide topic":["隱藏話題"],"Show the topic message in the heading":["在頂部展示話題訊息"],"Hide the topic in the heading":["在頂部隱藏話題"],"Moderate":["發言權"],"Moderate this groupchat":["加入發言權限制"],"Destroy":["關閉聊天室"],"Leave":["離開"],"Leave and close this groupchat":["離開並關閉聊天室"],"Are you sure you want to leave this groupchat?":["您確定要離開這間聊天室嗎?"],"Hide the list of participants":["隱藏成員清單"],"Forbidden: you do not have the necessary role in order to do that.":["被禁止:您的角色没有足夠權限。"],"Forbidden: you do not have the necessary affiliation in order to do that.":["被禁止:您的身份没有足夠權限。"],"Error: the \\"%1$s\\" command takes two arguments, the user\'s nickname and optionally a reason.":["錯誤:「%1$s」指令讀入兩個參數,包括成員的暱稱和一個可選原因。"],"Error: couldn\'t find a groupchat participant based on your arguments":["錯誤:找不到符合條件的聊天室成員"],"Error: found multiple groupchat participant based on your arguments":["錯誤:找到不止一個聊天室成員"],"Couldn\'t find a participant with that nickname. They might have left the groupchat.":["未找到符合該暱稱的聊天室成員。他們可能已經離開了聊天室。"],"Sorry, an error happened while running the command.":["抱歉,運行指令時發生錯誤。"],"Check your browser\'s developer console for details.":["詳細情形請檢查您的瀏覽器開發者工具。"],"Are you sure you want to destroy this groupchat?":["您確定要關閉這間聊天室嗎?"],"Please enter the XMPP address of this groupchat to confirm":["請輸入這間聊天室的 XMPP 地址以確認"],"name@example.org":["name@example.org"],"Optional reason for destroying this groupchat":["選填關閉這間聊天室的原因"],"Optional XMPP address for a new groupchat that replaces this one":["選填替代的新聊天室 XMPP 地址"],"replacement@example.org":["replacement@example.org"],"Your nickname is \\"%1$s\\"":["您的暱稱爲「%1$s」"],"Error: invalid number of arguments":["錯誤:無效的參數數量"],"This action was done by %1$s.":["這個動作由 %1$s 做出。"],"The reason given is: \\"%1$s\\".":["給出的理由是:%1$s。"],"Groupchats":["聊天室"],"Add a new groupchat":["新增聊天室"],"Query for groupchats":["搜尋聊天室"],"Sorry, an error occurred while trying to submit the config form.":["抱歉,嘗試送出配置時遭遇錯誤。"],"Close these announcements":["關閉這些提醒"],"Announcements":["提醒"],"Click to open this server message":["點擊展開這條伺服器訊息"],"Notification from %1$s":["來自 %1$s 的通知"],"%1$s says":["%1$s 說"],"Encrypted message received":["收到 OMEMO 加密訊息"],"has gone offline":["已經離線"],"has gone away":["已經離開"],"is busy":["正在忙碌"],"has come online":["已經上線"],"wants to be your contact":["想成爲您的聯絡人"],"Hide":["隱藏"],"Execute":["執行"],"On which entity do you want to run commands?":[""],"Certain XMPP services and entities allow privileged users to execute ad-hoc commands on them.":[""],"Commands found":["找到指令"],"List available commands":["列出可用指令"],"No commands found":["找不到指令"],"The specified entity doesn\'t support ad-hoc commands":[""],"Sorry, an error occurred while trying to execute the command. See the developer console for details":["抱歉,執行指令時出錯。詳細資訊請檢視開發者主控臺"],"About":["關於"],"Commands":["指令"],"Settings":["設定"],"%1$s Open Source %2$s XMPP chat client brought to you by %3$s Opkode %2$s":["由 %3$s Opkode %2$s 帶來的 %1$s 開放原始碼 %2$s XMPP 用戶端對話軟件"],"%1$s Translate %2$s it into your own language":["将它 %1$s 翻譯 %2$s 到您的語言"],"Log out":["登出"],"Click to change your chat status":["點擊變更您的線上狀態"],"Show details about this chat client":["展示關於此對話軟件的詳細資訊"],"Your avatar image":["您的頭像影像"],"Checkbox for selecting the following fingerprint":["揀選下列指紋的勾選框"],"Device without a fingerprint":["没有指紋的裝置"],"Checkbox for selecting the following device":["揀選下列裝置的勾選框"],"Other OMEMO-enabled devices":["其它啟用了 OMEMO 加密的裝置"],"Checkbox to select fingerprints of all other OMEMO devices":["揀選其餘所有 OMEMO 加密裝置指紋的勾選框"],"Remove checked devices and close":["移除已勾選的裝置並關閉"],"Select all":["揀選全部"],"This device\'s OMEMO fingerprint":["這部裝置的 OMEMO 指紋"],"Generate new keys and fingerprint":["產生新的加密金鑰和指紋"],"Your Profile":["您的個人資料"],"XMPP Address (JID)":["XMPP 地址(JID)"],"Save and close":["儲存並關閉"],"Use commas to separate multiple roles. Your roles are shown next to your name on your chat messages.":["使用逗號分隔多個角色。您的角色會在對話訊內展示在您的名稱旁邊。"],"OMEMO":["OMEMO"],"Profile":["個人資料"],"Sorry, an error happened while trying to save your profile data.":["抱歉,儲存您的個人資料時發生錯誤。"],"You can check your browser\'s developer console for any error output.":["您可以在您瀏覽器內的開發者工具中檢視所有輸出的錯誤。"],"Away":["離開"],"Busy":["忙碌"],"Custom status":["自定義狀態"],"Offline":["離線"],"Online":["在線"],"Away for long":["長時間離開"],"Change chat status":["變更線上狀態"],"Personal status message":["個人狀態訊息"],"I am %1$s":["我現在 %1$s"],"Are you sure you want to log out?":["您确定要登出嗎?"],"online":["在線"],"busy":["忙碌"],"away for long":["長時間離開"],"away":["離開"],"offline":["離線"],"Sorry, could not decrypt a received OMEMO message due to an error.":["抱歉,解密一條 OMEMO 加密訊息時遇到了錯誤。"],"Sorry, could not decrypt a received OMEMO because we don\'t have the JID for that user.":["抱歉,無法解密收到的 OMEMO 加密訊息,因爲没有該使用者的 JID。"],"%1$s doesn\'t appear to have a client that supports OMEMO. Encrypted chat will no longer be possible in this grouchat.":["%1$s 似乎没有支援 OMEMO 加密通訊的用戶端軟件。這間聊天室將不能再進行加密通訊。"],"Cannot use end-to-end encryption in this groupchat, either the groupchat has some anonymity or not all participants support OMEMO.":["無法在這間聊天室內使用端到端加密,因爲這是個匿名聊天室,或是有成員不支援 OMEMO 加密通訊。"],"Cannot use end-to-end encryption because %1$s uses a client that doesn\'t support OMEMO.":["無法使用端到端加密,因爲 %1$s 所使用的用戶端軟件不支援 OMEMO 加密通訊。"],"Messages are being sent in plaintext":["訊息已用純文字形式傳送"],"Messages are sent encrypted":["訊息將被加密傳送"],"This groupchat needs to be members-only and non-anonymous in order to support OMEMO encrypted messages":["若要支援 OMEMO 加密通訊,這間聊天室必須僅限會員並且非匿名"],"Sorry, we\'re unable to send an encrypted message because %1$s requires you to be subscribed to their presence in order to see their OMEMO information":["抱歉,無法傳送加密訊息,因爲 %1$s 要求您先訂閱他的線上狀態才能檢視他的 OMEMO 密鑰資訊"],"Sorry, we\'re unable to send an encrypted message because the remote server for %1$s could not be found":["抱歉,無法送出加密訊息,因爲找不到 %1$s 的遠端伺服器"],"Unable to send an encrypted message due to an unexpected error.":["送出加密訊息時發生了未預期的錯誤。"],"Sorry, an error occurred while trying to remove the devices.":["抱歉,移除裝置時遭遇錯誤。"],"Are you sure you want to generate new OMEMO keys? This will remove your old keys and all previously encrypted messages will no longer be decryptable on this device.":["您確定要產生新的 OMEMO 加密金鑰嗎?這會移除您的舊密鑰,並且之前所有的加密訊息都無法再在這部裝置上解密。"],"Sorry, no devices found to which we can send an OMEMO encrypted message.":["抱歉,找不到可以傳送 OMEMO 加密訊息的裝置。"],"This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo":["您的用戶端軟件似乎不支援這一條 OMEMO 加密訊息。更多有關資訊可以在 https://conversations.im/omemo 上查閱"]," e.g. conversejs.org":[" 譬如 conversejs.org"],"Fetch registration form":["取得註冊表單"],"Tip: A list of public XMPP providers is available":["提示:有一份公眾 XMPP 供應商清單"],"here":["這裏"],"Sorry, we\'re unable to connect to your chosen provider.":["抱歉,無法連線到您所揀選的供應商。"],"Sorry, the given provider does not support in band account registration. Please try with a different provider.":["抱歉,這個供應商不支援軟件內註冊帳號。請嘗試換一個供應商。"],"Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?":["與 %1$s 建立連線時出現了問題。您確定它的确存在嗎?"],"Now logging you in":["正在爲您登入"],"Registered successfully":["登記成功"],"The provider rejected your registration attempt. Please check the values you entered for correctness.":["供應商拒絕了您的註冊嘗試。請檢查您所輸入的內容是否正確。"],"Leave this groupchat":["離開這間聊天室"],"Click to toggle the list of open groupchats":["按一下開關已開啟的聊天室清單"],"Open Groupchats":["已開啟的聊天室"],"Are you sure you want to leave the groupchat %1$s?":["您確定要離開聊天室「%1$s」嗎?"],"Add":["新增"],"Add a Contact":["新增聯絡人"],"This contact is busy":["此聯絡人正在忙碌"],"This contact is online":["此聯絡人在線上"],"This contact is offline":["此聯絡人已經離線"],"This contact is unavailable":["此聯絡人不可用"],"This contact is away for an extended period":["此聯絡人已經離開了一段時間"],"This contact is away":["此聯絡人已經離開"],"Contact name":["聯絡人名稱"],"Optional nickname":["可選匿稱"],"Sorry, could not find a contact with that name":["抱歉,找不到符合該名稱的聯絡人"],"This contact has already been added":["此人已經是您的聯絡人"],"Filter":["篩選器"],"Filter by contact name":["以聯絡人名稱篩選"],"Filter by group name":["以分組名稱篩選"],"Filter by status":["以線上狀態篩選"],"Any":["所有"],"Unread":["未讀"],"Chatty":["正在對話"],"Extended Away":["離開了一段時間"],"Click to remove %1$s as a contact":["按一下將 %1$s 移出聯絡人"],"Click to accept the contact request from %1$s":["按一下同意 %1$s 的新增聯絡人請求"],"Click to decline the contact request from %1$s":["按一下拒絕 %1$s 的新增聯絡人請求"],"Click to chat with %1$s (XMPP address: %2$s)":["點一下與 %1$s (XMPP 地址:%2$s)展開對話"],"Are you sure you want to decline this contact request?":["您確定要拒絕這個新增聯絡人請求嗎?"],"Contacts":["聯絡人"],"Add a contact":["新增聯絡人"],"Re-sync your contacts":["重新整理您的聯絡人"]}}}')}}]);
 //# sourceMappingURL=zh_TW-LC_MESSAGES-converse-po.js.map
\ No newline at end of file
diff --git a/src/plugins/converse-rai.js b/src/plugins/converse-rai.js
index a4adbad86dcb6a7ed6aa587e1e5e45d1d8705d7a..f0db84ec7bf26e51b544bfcd4c0000b4192cb053 100644
--- a/src/plugins/converse-rai.js
+++ b/src/plugins/converse-rai.js
@@ -44,7 +44,7 @@
             });
 
             _converse.api.listen.on('raiRoomsUpdated', function (rooms) {
-                interestingServers = new Set(rooms.map(Strophe.getDomainFromJid));
+                interestingServers = new Set(rooms.filter(room => room).map(Strophe.getDomainFromJid));
                 if(_converse.api.connection.connected()) {
 	            updateSubscriptions();
 	        }
diff --git a/src/solid-xmpp-chat.js b/src/solid-xmpp-chat.js
index c9c373001f86c79a234328e8bbca5b9c322ac3a5..9a3efd4788de98e6fbf14e52427d8e2dbfef6a53 100644
--- a/src/solid-xmpp-chat.js
+++ b/src/solid-xmpp-chat.js
@@ -69,31 +69,33 @@ export const SolidXMPPChat = {
   async populate() {
     if(typeof converse_sib !== 'undefined') {
       await converse_sib.loaded_deferred;
-      if (await this.resource.jabberRoom) {
-        this.jid = await this.resource['jabberID'];
-      } else {
-        this.jid = await this.resource['chatProfile.jabberID'];
-        const user = await document.querySelector('sib-auth').getUser();
-        const userProfile = await store.getData(user['@id'], this.context);
-        const contactsURL = await userProfile['contacts.@id'];
-        store.post({
-          "contact": this.resource['@id'],
-          "@context": this.context
-        }, contactsURL);
-      }
-      await converse_sib.connected_deferred
-      converse_sib.service.plugins.sibChat.changeChat(
-        this.jid,
-        await this.resource.jabberRoom,
-        this.element.shadowRoot,
-      );
-      window.dispatchEvent(new CustomEvent('read', {
-        detail: {
-          resource: {
-            "@id": this.resource['@id']
-          }
+      if (this.resource) {
+        if (await this.resource.jabberRoom) {
+          this.jid = await this.resource['jabberID'];
+        } else {
+          this.jid = await this.resource['chatProfile.jabberID'];
+          const user = await document.querySelector('sib-auth').getUser();
+          const userProfile = await store.getData(user['@id'], this.context);
+          const contactsURL = await userProfile['contacts.@id'];
+          store.post({
+            "contact": this.resource['@id'],
+            "@context": this.context
+          }, contactsURL);
         }
-      }));
+        await converse_sib.connected_deferred;
+        converse_sib.service.plugins.sibChat.changeChat(
+          this.jid,
+          await this.resource.jabberRoom,
+          this.element.shadowRoot,
+        );
+        window.dispatchEvent(new CustomEvent('read', {
+          detail: {
+            resource: {
+              "@id": this.resource['@id']
+            }
+          }
+        }));
+      }
     } // Else, not logged in, on chat change
   },
 
@@ -135,31 +137,31 @@ export const SolidXMPPChat = {
     // Change chat plugin
     converse_sib.service.plugins.sibChat = new(class {
       changeChat(jid, is_groupchat, root) {
-        function isEmptyMessage (attrs) {
-          if (attrs && attrs.attributes) {
-              attrs = attrs.attributes;
-          }
-          return !attrs['oob_url'] &&
-              !attrs['file'] &&
-              !(attrs['is_encrypted'] && attrs['plaintext']) &&
-              !attrs['message'];
-        };
+        // function isEmptyMessage (attrs) {
+        //   if (attrs && attrs.attributes) {
+        //       attrs = attrs.attributes;
+        //   }
+        //   return !attrs['oob_url'] &&
+        //       !attrs['file'] &&
+        //       !(attrs['is_encrypted'] && attrs['plaintext']) &&
+        //       !attrs['message'];
+        // };
 
-        function removeUnnecessaryDayIndicators(view) {
-          const pred = (el) =>
-            el.matches('.date-separator') && el.nextElementSibling.matches('.date-separator');
-          const container = view.el.querySelector('.chat-content__messages');
-          const to_remove = Array.from(container.children).filter(pred);
-          to_remove.forEach((el) => el.parentElement.removeChild(el));
-        };
-        function isHidden(classList){
-          for(let i = 0; i < classList.length; i++){
-            if(classList[i] === 'hidden'){
-              return true;
-            }
-          }
-          return false;
-        }
+        // function removeUnnecessaryDayIndicators(view) {
+        //   const pred = (el) =>
+        //     el.matches('.date-separator') && el.nextElementSibling.matches('.date-separator');
+        //   const container = view.el.querySelector('.chat-content__messages');
+        //   const to_remove = Array.from(container.children).filter(pred);
+        //   to_remove.forEach((el) => el.parentElement.removeChild(el));
+        // };
+        // function isHidden(classList){
+        //   for(let i = 0; i < classList.length; i++){
+        //     if(classList[i] === 'hidden'){
+        //       return true;
+        //     }
+        //   }
+        //   return false;
+        // }
         if (!jid) {
           return;
         }
@@ -174,29 +176,29 @@ export const SolidXMPPChat = {
 
         if (converse_el) {
           root.appendChild(converse_el);
-          if (is_groupchat) {
-            const jid_to_clear = converse_el.getElementsByClassName('converse-chatboxes');
-            let room_to_clear_view = '';
-            if (jid_to_clear.length && jid_to_clear[0].children.length){
-              for (let i = 0; i < jid_to_clear[0].children.length; i++) {
-                  if(!isHidden(jid_to_clear[0].children[i].classList)){
-                    room_to_clear_view = this._converse.chatboxviews.views[jid_to_clear[0].children[i].id.split('-')[1]];
-                    break;
-                  }
-              }
-            }
-            if (room_to_clear_view) {
-              if (room_to_clear_view.model.messages.length > 30) {
-                const non_empty_messages = room_to_clear_view.model.messages.filter((m) => !isEmptyMessage(m));
-                if (non_empty_messages.length > 30) {
-                while (non_empty_messages.length > 30) {
-                    non_empty_messages.shift().destroy();
-                }
-                removeUnnecessaryDayIndicators(room_to_clear_view);
-                }
-              }
-            }
-          }
+          // if (is_groupchat) {
+          //   const jid_to_clear = converse_el.getElementsByClassName('converse-chatboxes');
+          //   let room_to_clear_view = '';
+          //   if (jid_to_clear.length && jid_to_clear[0].children.length){
+          //     for (let i = 0; i < jid_to_clear[0].children.length; i++) {
+          //         if(!isHidden(jid_to_clear[0].children[i].classList)){
+          //           room_to_clear_view = this._converse.chatboxviews.views[jid_to_clear[0].children[i].id.split('-')[1]];
+          //           break;
+          //         }
+          //     }
+          //   }
+          //   if (room_to_clear_view) {
+          //     if (room_to_clear_view.model.messages.length > 30) {
+          //       const non_empty_messages = room_to_clear_view.model.messages.filter((m) => !isEmptyMessage(m));
+          //       if (non_empty_messages.length > 30) {
+          //       while (non_empty_messages.length > 30) {
+          //           non_empty_messages.shift().destroy();
+          //       }
+          //       removeUnnecessaryDayIndicators(room_to_clear_view);
+          //       }
+          //     }
+          //   }
+          // }
         }
         if (is_groupchat) {
           this._converse.api.rooms.open(jid, {}, true);
@@ -292,6 +294,56 @@ export const SolidXMPPChat = {
         }
       });
 
+      // Transform hats to custom values
+      converse.plugins.add('custom-hats', {
+        overrides: {
+          getHats: function () {
+            const hat_conversions = {'admin': 'Administrateur'};
+            const _converse = this;
+            const hats = _converse.__super__.getHats.apply(this, arguments);
+            if (!hat_conversions) {
+              return hats;
+            } else {
+              const role_affiliations = Object.keys(hat_conversions);
+              const custom_hats = hats.map((hat) => {
+                if (role_affiliations.includes(hat.title)){
+                    return({title: hat_conversions[hat.title]});
+                } else {
+                    return hat;
+                }
+              })
+              return custom_hats
+            }
+          }
+        }
+      });
+      //Highly experimental DO NOT USE
+//       converse.plugins.add('custom-storage', {
+//         overrides: {
+//           createStore: function () {
+//             const _converse = this;
+//             if (arguments.length > 1){
+//                 arguments[1] = "none";
+//             }
+//             return _converse.__super__.createStore.apply(this, arguments);
+//           }
+//         }
+//       });
+      //Override converse's request permission with an empty function
+      //so that permission request for notifications don't happen
+      converse.plugins.add('remove-notifications', {
+        overrides: {
+          requestPermission: function () {},
+          showMessageNotification: function () {},
+          showChatStateNotification: function () {},
+          showContactRequestNotification: function () {},
+          showFeedbackNotification: function () {},
+          handleChatStateNotification: function () {},
+          handleMessageNotification: function () {},
+          handleContactRequestNotification: function () {},
+          handleFeedback: function () {},
+        }
+      });
       // Initialize deferred resolution plugin
       converse.plugins.add('conversejs-sib-focused', {
         initialize() {
@@ -360,7 +412,7 @@ export const SolidXMPPChat = {
         'root': this.element.shadowRoot,
         'show_client_info': false,
         'show_desktop_notifications': false,
-        'persistent_store': 'localStorage',
+        'persistent_store': 'none',
         'sounds_path': ComponentPath + '/dist/conversejs/',
         'show_send_button': false,
         'view_mode': 'fullscreen',
@@ -371,7 +423,7 @@ export const SolidXMPPChat = {
           fileupload: false, // Not working in current Converse
           toggle_occupants: false
         },
-        'whitelisted_plugins': ['rai', 'conversejs-sib-disconnected', 'conversejs-sib-connected', 'conversejs-sib-focused', 'conversejs-changechat', 'conversejs-rai'],
+        'whitelisted_plugins': ['rai', 'conversejs-sib-disconnected', 'conversejs-sib-connected', 'conversejs-sib-focused', 'conversejs-changechat', 'conversejs-rai', 'custom-hats', 'remove-notifications'],
       });
 
       converse_sib.loaded_deferred.resolve();